← Back to team overview

zorba-coders team mailing list archive

[Merge] lp:~zorba-coders/zorba/canonicalize-core-fixed into lp:zorba

 

Juan Zacarias has proposed merging lp:~zorba-coders/zorba/canonicalize-core-fixed into lp:zorba.

Commit message:
Added canonicalize function to the core xml module

Requested reviews:
  Luis Rodriguez Gonzalez (kuraru)
  Matthias Brantner (matthias-brantner)
Related bugs:
  Bug #1076919 in Zorba: "Need function to canonicalize XML"
  https://bugs.launchpad.net/zorba/+bug/1076919

For more details, see:
https://code.launchpad.net/~zorba-coders/zorba/canonicalize-core-fixed/+merge/142394

Added canonicalize function to the core xml module
-- 
https://code.launchpad.net/~zorba-coders/zorba/canonicalize-core-fixed/+merge/142394
Your team Zorba Coders is subscribed to branch lp:zorba.
=== modified file 'ChangeLog'
--- ChangeLog	2013-01-08 09:03:49 +0000
+++ ChangeLog	2013-01-08 20:13:28 +0000
@@ -13,6 +13,7 @@
 	natural language text.
   * Extended cast and castable expression to allow any simple target type
     (as specified by XQuery 3.0)
+  * Added canonicalize function to modules/xml.
 
 Optimizations:
   * Various optimizations in the implementation of the optimizer rules.

=== modified file 'include/zorba/pregenerated/diagnostic_list.h'
--- include/zorba/pregenerated/diagnostic_list.h	2013-01-08 08:34:08 +0000
+++ include/zorba/pregenerated/diagnostic_list.h	2013-01-08 20:13:28 +0000
@@ -298,6 +298,8 @@
 
 extern ZORBA_DLL_PUBLIC XQueryErrorCode FOUT1190;
 
+extern ZORBA_DLL_PUBLIC XQueryErrorCode FOCZ0001;
+
 extern ZORBA_DLL_PUBLIC XQueryErrorCode XUST0001;
 
 extern ZORBA_DLL_PUBLIC XQueryErrorCode XUST0002;

=== modified file 'modules/com/zorba-xquery/www/modules/xml.xq'
--- modules/com/zorba-xquery/www/modules/xml.xq	2012-09-19 21:16:15 +0000
+++ modules/com/zorba-xquery/www/modules/xml.xq	2013-01-08 20:13:28 +0000
@@ -30,9 +30,9 @@
  : them in a streaming fashion - each at a time:</p>
  :
  : <pre class="brush: xquery;">
- : import module namespace parse-xml = "http://www.zorba-xquery.com/modules/xml";;
+ : import module namespace x = "http://www.zorba-xquery.com/modules/xml";;
  : import schema namespace opt = "http://www.zorba-xquery.com/modules/xml-options";;
- : parse-xml:parse( 
+ : x:parse( 
  :   "&lt;from1>Jani&lt;/from1>&lt;from2>Jani&lt;/from2>&lt;from3>Jani&lt;/from3>",
  :   &lt;opt:options>
  :     &lt;opt:parse-external-parsed-entity/>
@@ -44,9 +44,9 @@
  : before returning a sequence of nodes as shown in the following example:</p>
  :
  : <pre class="brush: xquery;">
- : import module namespace parse-xml = "http://www.zorba-xquery.com/modules/xml";;
+ : import module namespace x = "http://www.zorba-xquery.com/modules/xml";;
  : import schema namespace opt = "http://www.zorba-xquery.com/modules/xml-options";;
- : parse-xml:parse(
+ : x:parse(
  :   "&lt;root>
  :     &lt;from1>Jani1&lt;/from1>
  :     &lt;from2>Jani2&lt;/from2>
@@ -68,7 +68,7 @@
  : @project data processing/data converters
  :
  :)
-module namespace parse-xml = "http://www.zorba-xquery.com/modules/xml";;
+module namespace x = "http://www.zorba-xquery.com/modules/xml";;
 
 import schema namespace parse-xml-options = "http://www.zorba-xquery.com/modules/xml-options";;
 
@@ -193,9 +193,9 @@
  : An example that sets the base-uri of the parsed external entities:
  : </p>
  : <pre class="brush: xquery;">
- :   import module namespace parse-xml = "http://www.zorba-xquery.com/modules/xml";;
+ :   import module namespace x = "http://www.zorba-xquery.com/modules/xml";;
  :   import schema namespace opt = "http://www.zorba-xquery.com/modules/xml-options";;
- :   parse-xml:parse("&lt;from1>Jani&lt;/from1>&lt;from2>Jani&lt;/from2>&lt;from3>Jani&lt;/from3>",
+ :   x:parse("&lt;from1>Jani&lt;/from1>&lt;from2>Jani&lt;/from2>&lt;from3>Jani&lt;/from3>",
  :     &lt;opt:options>
  :       &lt;opt:base-uri opt:value="urn:test"/>
  :       &lt;opt:parse-external-parsed-entity/>
@@ -228,7 +228,7 @@
  : @example test/rbkt/Queries/zorba/parsing_and_serializing/parse-xml-fragment-07.xq
  :
  :)
-declare function parse-xml:parse(
+declare function x:parse(
   $xml-string as xs:string?,
   $options as element(parse-xml-options:options)?) as node()* external;
   
@@ -236,7 +236,7 @@
 (:~
  : <br/><p>
  : Note: this function is included for backwards compatibility purposes. It 
- : is recommended that you use the parse-xml:parse() function instead.
+ : is recommended that you use the x:parse() function instead.
  : </p><br/>
  :
  : A function to parse XML files and fragments (i.e. 
@@ -330,7 +330,7 @@
  : @deprecated
  :
  :)
-declare function parse-xml:parse-xml-fragment(
+declare function x:parse-xml-fragment(
   $xml-string as xs:string?,
   $options as xs:string) as node()* 
 {
@@ -352,14 +352,14 @@
         then <parse-xml-options:no-error/> else ()      
     }</parse-xml-options:options>
   return
-    parse-xml:parse($xml-string, $new_options)
+    x:parse($xml-string, $new_options)
 };
 
 
 (:~
  : <br/><p>
  : Note: this function is included for backwards compatibility purposes. It 
- : is recommended that you use the parse-xml:parse() function instead.
+ : is recommended that you use the x:parse() function instead.
  : </p><br/>
  :
  : A function to parse XML files and fragments. The behavior is the
@@ -390,7 +390,7 @@
  : @deprecated
  :
  :)
-declare function parse-xml:parse-xml-fragment(
+declare function x:parse-xml-fragment(
   $xml-string as xs:string?,
   $base-uri as xs:string,
   $options as xs:string) as node()*
@@ -416,5 +416,24 @@
       </parse-xml-options:base-uri>
     }</parse-xml-options:options>
   return 
-    parse-xml:parse($xml-string, $new_options)
+    x:parse($xml-string, $new_options)
 };
+
+(:~
+ : <br/><p>
+ : Note: This function is not streamable, if a streamable string is used
+ : as input for the function it will be materialized
+ : </p><br/>
+ : 
+ : A function to canonicalize the given XML string.
+ :
+ : @param $xml-string an XML string to canonicalize.
+ :
+ : @return the canonicalized XML string.
+ :
+ : @error err:CANO0001 invalid input.
+ :)
+declare function x:canonicalize(
+  $xml-string as xs:string
+  ) as xs:string external;
+

=== modified file 'modules/w3c/pregenerated/xqt-errors.xq'
--- modules/w3c/pregenerated/xqt-errors.xq	2012-12-21 22:05:39 +0000
+++ modules/w3c/pregenerated/xqt-errors.xq	2013-01-08 20:13:28 +0000
@@ -1292,6 +1292,14 @@
 
 (:~
  :
+ : Invalid content passed to \c x:canonicalize().
+ : 
+ : @see http://www.w3.org/2005/xqt-errors
+:)
+declare variable $err:FOCZ0001 as xs:QName := fn:QName($err:NS, "err:FOCZ0001");
+
+(:~
+ :
  : It is a static error if an updating expression is used in any position
  : other than one of the following:
  : - The topmost expression in the body of a query.

=== modified file 'src/diagnostics/diagnostic_en.xml'
--- src/diagnostics/diagnostic_en.xml	2013-01-08 08:34:08 +0000
+++ src/diagnostics/diagnostic_en.xml	2013-01-08 20:13:28 +0000
@@ -1316,6 +1316,12 @@
       <value>"$1": can not decode resource retrieved</value>
     </diagnostic>
 
+    <diagnostic code="FOCZ0001"> <comment>
+       Invalid content passed to \c x:canonicalize().
+      </comment>
+      <value>invalid content passed to $1: $2</value>
+    </diagnostic>
+
     <!--////////// XQuery Update Facility //////////////////////////////////-->
 
     <diagnostic code="XUST0001">

=== modified file 'src/diagnostics/pregenerated/diagnostic_list.cpp'
--- src/diagnostics/pregenerated/diagnostic_list.cpp	2013-01-08 08:34:08 +0000
+++ src/diagnostics/pregenerated/diagnostic_list.cpp	2013-01-08 20:13:28 +0000
@@ -429,6 +429,9 @@
 XQueryErrorCode FOUT1190( "FOUT1190" );
 
 
+XQueryErrorCode FOCZ0001( "FOCZ0001" );
+
+
 XQueryErrorCode XUST0001( "XUST0001" );
 
 

=== modified file 'src/diagnostics/pregenerated/dict_en.cpp'
--- src/diagnostics/pregenerated/dict_en.cpp	2013-01-08 08:34:08 +0000
+++ src/diagnostics/pregenerated/dict_en.cpp	2013-01-08 20:13:28 +0000
@@ -39,6 +39,7 @@
   { "FOCH0002", "\"$1\": unsuported collation${: 2}" },
   { "FOCH0003", "\"$1\": unsupported normalization form" },
   { "FOCH0004", "\"$1\": collation does not support collation units" },
+  { "FOCZ0001", "invalid content passed to $1: $2" },
   { "FODC0001", "no context document for $1() function" },
   { "FODC0002", "\"$1\": error retrieving resource${: 2}" },
   { "FODC0003", "function stability not defined" },

=== modified file 'src/functions/func_parse_fragment_impl.cpp'
--- src/functions/func_parse_fragment_impl.cpp	2012-05-16 15:23:50 +0000
+++ src/functions/func_parse_fragment_impl.cpp	2013-01-08 20:13:28 +0000
@@ -54,6 +54,7 @@
         lParseOptType, 
         GENV_TYPESYSTEM.ANY_NODE_TYPE_STAR),
         FunctionConsts::FN_ZORBA_XML_PARSE_2);
+
   }
 }
 

=== modified file 'src/functions/pregenerated/func_parse_fragment.cpp'
--- src/functions/pregenerated/func_parse_fragment.cpp	2012-10-08 12:09:36 +0000
+++ src/functions/pregenerated/func_parse_fragment.cpp	2013-01-08 20:13:28 +0000
@@ -41,6 +41,16 @@
   return new FnZorbaParseXmlFragmentIterator(sctx, loc, argv);
 }
 
+PlanIter_t fn_zorba_xml_canonicalize::codegen(
+  CompilerCB*,
+  static_context* sctx,
+  const QueryLoc& loc,
+  std::vector<PlanIter_t>& argv,
+  expr& ann) const
+{
+  return new FnZorbaCanonicalizeIterator(sctx, loc, argv);
+}
+
 PlanIter_t fn_parse_xml_fragment_3_0::codegen(
   CompilerCB*,
   static_context* sctx,
@@ -56,6 +66,18 @@
 
 
       {
+    DECL_WITH_KIND(sctx, fn_zorba_xml_canonicalize,
+        (createQName("http://www.zorba-xquery.com/modules/xml","","canonicalize";), 
+        GENV_TYPESYSTEM.STRING_TYPE_ONE, 
+        GENV_TYPESYSTEM.STRING_TYPE_ONE),
+        FunctionConsts::FN_ZORBA_XML_CANONICALIZE_1);
+
+  }
+
+
+
+
+      {
     DECL_WITH_KIND(sctx, fn_parse_xml_fragment_3_0,
         (createQName("http://www.w3.org/2005/xpath-functions","","parse-xml-fragment";), 
         GENV_TYPESYSTEM.STRING_TYPE_QUESTION, 

=== modified file 'src/functions/pregenerated/func_parse_fragment.h'
--- src/functions/pregenerated/func_parse_fragment.h	2012-10-08 12:09:36 +0000
+++ src/functions/pregenerated/func_parse_fragment.h	2013-01-08 20:13:28 +0000
@@ -55,6 +55,21 @@
 };
 
 
+//fn-zorba-xml:canonicalize
+class fn_zorba_xml_canonicalize : public function
+{
+public:
+  fn_zorba_xml_canonicalize(const signature& sig, FunctionConsts::FunctionKind kind)
+    : 
+    function(sig, kind)
+  {
+
+  }
+
+  CODEGEN_DECL();
+};
+
+
 //fn:parse-xml-fragment
 class fn_parse_xml_fragment_3_0 : public function
 {

=== modified file 'src/functions/pregenerated/function_enum.h'
--- src/functions/pregenerated/function_enum.h	2012-12-10 16:02:05 +0000
+++ src/functions/pregenerated/function_enum.h	2013-01-08 20:13:28 +0000
@@ -346,6 +346,7 @@
   FN_FORMAT_INTEGER_2,
   FN_FORMAT_INTEGER_3,
   FN_ZORBA_XML_PARSE_2,
+  FN_ZORBA_XML_CANONICALIZE_1,
   FN_PARSE_XML_FRAGMENT_1,
   FN_PARSE_XML_1,
   FN_SERIALIZE_1,

=== modified file 'src/runtime/parsing_and_serializing/fragment_istream.h'
--- src/runtime/parsing_and_serializing/fragment_istream.h	2012-09-19 21:16:15 +0000
+++ src/runtime/parsing_and_serializing/fragment_istream.h	2013-01-08 20:13:28 +0000
@@ -24,7 +24,7 @@
 namespace zorba {
 
 /**
- * A class to hold an input stream for the parse-xml:parse() function
+ * A class to hold an input stream for the x:parse() function
  * Author: Nicolae Brinza
  */
 class FragmentIStream : public std::istream

=== modified file 'src/runtime/parsing_and_serializing/parse_fragment_impl.cpp'
--- src/runtime/parsing_and_serializing/parse_fragment_impl.cpp	2012-09-19 21:16:15 +0000
+++ src/runtime/parsing_and_serializing/parse_fragment_impl.cpp	2013-01-08 20:13:28 +0000
@@ -32,6 +32,10 @@
 #include "types/schema/schema.h"
 #include "types/schema/validate.h"
 
+#include <libxml/tree.h>
+#include <libxml/parser.h>
+#include <libxml/xmlreader.h>
+#include <libxml/c14n.h>
 
 namespace zorba
 {
@@ -234,7 +238,7 @@
           result = lStore.loadDocument(state->baseUri, state->docUri, state->theFragmentStream, state->theProperties);
         } catch (ZorbaException const& e) {
           if ( ! state->theProperties.getNoError())
-            throw XQUERY_EXCEPTION( err::FODC0006, ERROR_PARAMS("parse-xml:parse()", e.what()), ERROR_LOC( loc ));
+            throw XQUERY_EXCEPTION( err::FODC0006, ERROR_PARAMS("x:parse()", e.what()), ERROR_LOC( loc ));
           else
             result = NULL;
         }
@@ -262,7 +266,7 @@
         result = lStore.loadDocument(state->baseUri, state->docUri, *state->theFragmentStream.theStream, state->theProperties);
       } catch (ZorbaException const& e) {
         if ( ! state->theProperties.getNoError())
-          throw XQUERY_EXCEPTION( err::FODC0006, ERROR_PARAMS("parse-xml:parse()", e.what()), ERROR_LOC( loc ));
+          throw XQUERY_EXCEPTION( err::FODC0006, ERROR_PARAMS("x:parse()", e.what()), ERROR_LOC( loc ));
         else
           result = NULL;
       }
@@ -306,6 +310,61 @@
   STACK_END(state);
 }
 
+/*******************************************************************************
+  14.9.1.1 fn-zorba-xml:canonicalize
+********************************************************************************/
+bool FnZorbaCanonicalizeIterator::nextImpl(store::Item_t& result, PlanState& planState) const
+{
+  zstring lDocString;
+  xmlDocPtr lDoc;
+  xmlChar* lResult;
+  std::istream* lInstream = NULL;
+  char buf[1024];
+
+  PlanIteratorState* state;
+  DEFAULT_STACK_INIT(PlanIteratorState, state, planState);
+  // Read the XML string
+  // if the XML string is a streamable string it will have to be materialized
+  // since the libxml2 xmlReadMemory functions can't work with streamable strings 
+  consumeNext(result, theChildren[0].getp(), planState);
+  try
+  {
+    if (result->isStreamable())
+    {
+      lInstream = &result->getStream();
+      while (lInstream->good())
+      {
+        lInstream->read(buf, 1024);
+        lDocString.append(buf, lInstream->gcount());
+      }        
+    }    
+    else
+    {
+      result->getStringValue2(lDocString);  
+    }
+    lDoc = xmlReadMemory(lDocString.c_str(), lDocString.size(), "input.xml", NULL, XML_PARSE_NOERROR);
+    
+    if (!lDoc)
+    {
+      zstring lErrorMsg;
+      lErrorMsg = "\"" + lDocString + "\"";
+      throw XQUERY_EXCEPTION(err::FOCZ0001, ERROR_PARAMS("x:canonicalize()", lErrorMsg ), ERROR_LOC(loc));
+    }
+  
+    xmlC14NDocDumpMemory(lDoc, NULL, XML_C14N_1_1, NULL, 1, &lResult);
+    lDocString = zstring((char*)lResult);    
+    xmlFree(lResult);
+    xmlFreeDoc(lDoc);
+  }
+  catch ( std::exception const& e)
+  {
+      zstring lErrorMsg;
+      lErrorMsg = "\"" + lDocString + "\"";
+      throw XQUERY_EXCEPTION(err::FOCZ0001, ERROR_PARAMS("x:canonicalize()", lErrorMsg ), ERROR_LOC(loc));
+  }
+  STACK_PUSH(GENV_ITEMFACTORY->createString(result, lDocString), state);
+  STACK_END(state);
+}
 
 /*******************************************************************************
   14.9.2 fn:parse-xml-fragment

=== modified file 'src/runtime/parsing_and_serializing/pregenerated/parse_fragment.cpp'
--- src/runtime/parsing_and_serializing/pregenerated/parse_fragment.cpp	2012-10-08 12:09:36 +0000
+++ src/runtime/parsing_and_serializing/pregenerated/parse_fragment.cpp	2013-01-08 20:13:28 +0000
@@ -68,6 +68,34 @@
 // </FnZorbaParseXmlFragmentIterator>
 
 
+// <FnZorbaCanonicalizeIterator>
+SERIALIZABLE_CLASS_VERSIONS(FnZorbaCanonicalizeIterator)
+
+void FnZorbaCanonicalizeIterator::serialize(::zorba::serialization::Archiver& ar)
+{
+  serialize_baseclass(ar,
+  (NaryBaseIterator<FnZorbaCanonicalizeIterator, PlanIteratorState>*)this);
+}
+
+
+void FnZorbaCanonicalizeIterator::accept(PlanIterVisitor& v) const
+{
+  v.beginVisit(*this);
+
+  std::vector<PlanIter_t>::const_iterator lIter = theChildren.begin();
+  std::vector<PlanIter_t>::const_iterator lEnd = theChildren.end();
+  for ( ; lIter != lEnd; ++lIter ){
+    (*lIter)->accept(v);
+  }
+
+  v.endVisit(*this);
+}
+
+FnZorbaCanonicalizeIterator::~FnZorbaCanonicalizeIterator() {}
+
+// </FnZorbaCanonicalizeIterator>
+
+
 // <FnParseXmlFragmentIterator>
 SERIALIZABLE_CLASS_VERSIONS(FnParseXmlFragmentIterator)
 

=== modified file 'src/runtime/parsing_and_serializing/pregenerated/parse_fragment.h'
--- src/runtime/parsing_and_serializing/pregenerated/parse_fragment.h	2012-10-08 12:09:36 +0000
+++ src/runtime/parsing_and_serializing/pregenerated/parse_fragment.h	2013-01-08 20:13:28 +0000
@@ -82,6 +82,36 @@
 
 
 /**
+ * fn-zorba-xml:canonicalize
+ * Author: Zorba Team
+ */
+class FnZorbaCanonicalizeIterator : public NaryBaseIterator<FnZorbaCanonicalizeIterator, PlanIteratorState>
+{ 
+public:
+  SERIALIZABLE_CLASS(FnZorbaCanonicalizeIterator);
+
+  SERIALIZABLE_CLASS_CONSTRUCTOR2T(FnZorbaCanonicalizeIterator,
+    NaryBaseIterator<FnZorbaCanonicalizeIterator, PlanIteratorState>);
+
+  void serialize( ::zorba::serialization::Archiver& ar);
+
+  FnZorbaCanonicalizeIterator(
+    static_context* sctx,
+    const QueryLoc& loc,
+    std::vector<PlanIter_t>& children)
+    : 
+    NaryBaseIterator<FnZorbaCanonicalizeIterator, PlanIteratorState>(sctx, loc, children)
+  {}
+
+  virtual ~FnZorbaCanonicalizeIterator();
+
+  void accept(PlanIterVisitor& v) const;
+
+  bool nextImpl(store::Item_t& result, PlanState& aPlanState) const;
+};
+
+
+/**
  * fn:parse-xml-fragment
  * Author: Zorba Team
  */

=== modified file 'src/runtime/pregenerated/iterator_enum.h'
--- src/runtime/pregenerated/iterator_enum.h	2012-12-10 16:02:05 +0000
+++ src/runtime/pregenerated/iterator_enum.h	2013-01-08 20:13:28 +0000
@@ -254,6 +254,7 @@
   TYPE_FormatNumberIterator,
   TYPE_FormatIntegerIterator,
   TYPE_FnZorbaParseXmlFragmentIterator,
+  TYPE_FnZorbaCanonicalizeIterator,
   TYPE_FnParseXmlFragmentIterator,
   TYPE_FnParseXmlIterator,
   TYPE_FnSerializeIterator,

=== modified file 'src/runtime/spec/parsing_and_serializing/parse_fragment.xml'
--- src/runtime/spec/parsing_and_serializing/parse_fragment.xml	2012-09-19 21:16:15 +0000
+++ src/runtime/spec/parsing_and_serializing/parse_fragment.xml	2013-01-08 20:13:28 +0000
@@ -19,7 +19,7 @@
 
 <!--
 /*******************************************************************************
- * 14.9.1 parse-xml:parse
+ * 14.9.1 x:parse
 ********************************************************************************/
 -->
   <zorba:iterator name="FnZorbaParseXmlFragmentIterator">
@@ -46,6 +46,22 @@
     </zorba:state>
       
   </zorba:iterator>
+<!--
+/*******************************************************************************
+ * 14.9.1.1 x:canonicalize
+********************************************************************************/
+-->
+  <zorba:iterator name="FnZorbaCanonicalizeIterator">
+      
+    <zorba:description author="Zorba Team">fn-zorba-xml:canonicalize</zorba:description>
+    
+    <zorba:function>
+      <zorba:signature localname="canonicalize" prefix="fn-zorba-xml">
+        <zorba:param>xs:string</zorba:param>  <!-- string to canonicalize -->
+        <zorba:output>xs:string</zorba:output>
+      </zorba:signature>
+    </zorba:function>
+  </zorba:iterator>
   
 <!--
 /*******************************************************************************

=== modified file 'src/runtime/visitors/pregenerated/planiter_visitor.h'
--- src/runtime/visitors/pregenerated/planiter_visitor.h	2012-12-14 21:50:53 +0000
+++ src/runtime/visitors/pregenerated/planiter_visitor.h	2013-01-08 20:13:28 +0000
@@ -535,6 +535,8 @@
 
     class FnZorbaParseXmlFragmentIterator;
 
+    class FnZorbaCanonicalizeIterator;
+
     class FnParseXmlFragmentIterator;
 
     class FnParseXmlIterator;
@@ -1483,6 +1485,9 @@
     virtual void beginVisit ( const FnZorbaParseXmlFragmentIterator& ) = 0;
     virtual void endVisit   ( const FnZorbaParseXmlFragmentIterator& ) = 0;
 
+    virtual void beginVisit ( const FnZorbaCanonicalizeIterator& ) = 0;
+    virtual void endVisit   ( const FnZorbaCanonicalizeIterator& ) = 0;
+
     virtual void beginVisit ( const FnParseXmlFragmentIterator& ) = 0;
     virtual void endVisit   ( const FnParseXmlFragmentIterator& ) = 0;
 

=== modified file 'src/runtime/visitors/pregenerated/printer_visitor.cpp'
--- src/runtime/visitors/pregenerated/printer_visitor.cpp	2012-12-14 21:50:53 +0000
+++ src/runtime/visitors/pregenerated/printer_visitor.cpp	2013-01-08 20:13:28 +0000
@@ -3287,6 +3287,20 @@
 // </FnZorbaParseXmlFragmentIterator>
 
 
+// <FnZorbaCanonicalizeIterator>
+void PrinterVisitor::beginVisit ( const FnZorbaCanonicalizeIterator& a) {
+  thePrinter.startBeginVisit("FnZorbaCanonicalizeIterator", ++theId);
+  printCommons( &a, theId );
+  thePrinter.endBeginVisit( theId );
+}
+
+void PrinterVisitor::endVisit ( const FnZorbaCanonicalizeIterator& ) {
+  thePrinter.startEndVisit();
+  thePrinter.endEndVisit();
+}
+// </FnZorbaCanonicalizeIterator>
+
+
 // <FnParseXmlFragmentIterator>
 void PrinterVisitor::beginVisit ( const FnParseXmlFragmentIterator& a) {
   thePrinter.startBeginVisit("FnParseXmlFragmentIterator", ++theId);

=== modified file 'src/runtime/visitors/pregenerated/printer_visitor.h'
--- src/runtime/visitors/pregenerated/printer_visitor.h	2012-12-14 21:50:53 +0000
+++ src/runtime/visitors/pregenerated/printer_visitor.h	2013-01-08 20:13:28 +0000
@@ -823,6 +823,9 @@
     void beginVisit( const FnZorbaParseXmlFragmentIterator& );
     void endVisit  ( const FnZorbaParseXmlFragmentIterator& );
 
+    void beginVisit( const FnZorbaCanonicalizeIterator& );
+    void endVisit  ( const FnZorbaCanonicalizeIterator& );
+
     void beginVisit( const FnParseXmlFragmentIterator& );
     void endVisit  ( const FnParseXmlFragmentIterator& );
 

=== added file 'test/rbkt/ExpQueryResults/zorba/parsing_and_serializing/canonicalize-1.xml.res'
--- test/rbkt/ExpQueryResults/zorba/parsing_and_serializing/canonicalize-1.xml.res	1970-01-01 00:00:00 +0000
+++ test/rbkt/ExpQueryResults/zorba/parsing_and_serializing/canonicalize-1.xml.res	2013-01-08 20:13:28 +0000
@@ -0,0 +1,2 @@
+<?xml version="1.0" encoding="UTF-8"?>
+&lt;x a="2" b="1"&gt;&lt;/x&gt;
\ No newline at end of file

=== added file 'test/rbkt/Queries/zorba/parsing_and_serializing/canonicalize-1.xq'
--- test/rbkt/Queries/zorba/parsing_and_serializing/canonicalize-1.xq	1970-01-01 00:00:00 +0000
+++ test/rbkt/Queries/zorba/parsing_and_serializing/canonicalize-1.xq	2013-01-08 20:13:28 +0000
@@ -0,0 +1,4 @@
+import module namespace x = "http://www.zorba-xquery.com/modules/xml";;
+
+let $xml := "<x b='1' a='2'/>"
+return x:canonicalize($xml)

=== modified file 'test/rbkt/Queries/zorba/parsing_and_serializing/parse-xml-fragment-20.xq'
--- test/rbkt/Queries/zorba/parsing_and_serializing/parse-xml-fragment-20.xq	2012-05-10 11:07:00 +0000
+++ test/rbkt/Queries/zorba/parsing_and_serializing/parse-xml-fragment-20.xq	2013-01-08 20:13:28 +0000
@@ -1,7 +1,7 @@
-import module namespace parse-xml = "http://www.zorba-xquery.com/modules/xml";;
+import module namespace x = "http://www.zorba-xquery.com/modules/xml";;
 import schema namespace opt = "http://www.zorba-xquery.com/modules/xml-options";;
 
-for $i in parse-xml:parse(
+for $i in x:parse(
     "<root><from1>Jani1</from1><from2>Jani2</from2></root>",
     <opt:options>
       <opt:parse-external-parsed-entity opt:skip-root-nodes="1"/>

=== modified file 'test/rbkt/Queries/zorba/parsing_and_serializing/parse-xml-fragment-21.xq'
--- test/rbkt/Queries/zorba/parsing_and_serializing/parse-xml-fragment-21.xq	2012-05-10 11:07:00 +0000
+++ test/rbkt/Queries/zorba/parsing_and_serializing/parse-xml-fragment-21.xq	2013-01-08 20:13:28 +0000
@@ -1,7 +1,7 @@
-import module namespace parse-xml = "http://www.zorba-xquery.com/modules/xml";;
+import module namespace x = "http://www.zorba-xquery.com/modules/xml";;
 import schema namespace opt = "http://www.zorba-xquery.com/modules/xml-options";;
 
-parse-xml:parse("aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
+x:parse("aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
   <opt:options>
     <opt:parse-external-parsed-entity/>
   </opt:options>

=== modified file 'test/rbkt/Queries/zorba/parsing_and_serializing/parse-xml-fragment-22.xq'
--- test/rbkt/Queries/zorba/parsing_and_serializing/parse-xml-fragment-22.xq	2012-05-10 11:07:00 +0000
+++ test/rbkt/Queries/zorba/parsing_and_serializing/parse-xml-fragment-22.xq	2013-01-08 20:13:28 +0000
@@ -1,7 +1,7 @@
-import module namespace parse-xml = "http://www.zorba-xquery.com/modules/xml";;
+import module namespace x = "http://www.zorba-xquery.com/modules/xml";;
 import schema namespace opt = "http://www.zorba-xquery.com/modules/xml-options";;
 
-parse-xml:parse("test",
+x:parse("test",
   <opt:options>
     <opt:parse-external-parsed-entity/>
   </opt:options>

=== modified file 'test/rbkt/Queries/zorba/parsing_and_serializing/parse-xml-fragment-23.xq'
--- test/rbkt/Queries/zorba/parsing_and_serializing/parse-xml-fragment-23.xq	2012-05-10 11:07:00 +0000
+++ test/rbkt/Queries/zorba/parsing_and_serializing/parse-xml-fragment-23.xq	2013-01-08 20:13:28 +0000
@@ -1,7 +1,7 @@
-import module namespace parse-xml = "http://www.zorba-xquery.com/modules/xml";;
+import module namespace x = "http://www.zorba-xquery.com/modules/xml";;
 import schema namespace opt = "http://www.zorba-xquery.com/modules/xml-options";;
 
-parse-xml:parse("
+x:parse("
 test",
   <opt:options>
     <opt:parse-external-parsed-entity/>

=== modified file 'test/rbkt/Queries/zorba/parsing_and_serializing/parse-xml-fragment-24.xq'
--- test/rbkt/Queries/zorba/parsing_and_serializing/parse-xml-fragment-24.xq	2012-05-10 11:07:00 +0000
+++ test/rbkt/Queries/zorba/parsing_and_serializing/parse-xml-fragment-24.xq	2013-01-08 20:13:28 +0000
@@ -1,7 +1,7 @@
-import module namespace parse-xml = "http://www.zorba-xquery.com/modules/xml";;
+import module namespace x = "http://www.zorba-xquery.com/modules/xml";;
 import schema namespace opt = "http://www.zorba-xquery.com/modules/xml-options";;
 
-parse-xml:parse("test
+x:parse("test
 ",
   <opt:options>
     <opt:parse-external-parsed-entity/>

=== modified file 'test/rbkt/Queries/zorba/parsing_and_serializing/parse-xml-fragment-25.xq'
--- test/rbkt/Queries/zorba/parsing_and_serializing/parse-xml-fragment-25.xq	2012-05-10 11:07:00 +0000
+++ test/rbkt/Queries/zorba/parsing_and_serializing/parse-xml-fragment-25.xq	2013-01-08 20:13:28 +0000
@@ -1,7 +1,7 @@
-import module namespace parse-xml = "http://www.zorba-xquery.com/modules/xml";;
+import module namespace x = "http://www.zorba-xquery.com/modules/xml";;
 import schema namespace opt = "http://www.zorba-xquery.com/modules/xml-options";;
 
-parse-xml:parse("
+x:parse("
 test
 ",
   <opt:options>

=== modified file 'test/rbkt/Queries/zorba/parsing_and_serializing/parse-xml-fragment-26.xq'
--- test/rbkt/Queries/zorba/parsing_and_serializing/parse-xml-fragment-26.xq	2012-05-15 15:00:19 +0000
+++ test/rbkt/Queries/zorba/parsing_and_serializing/parse-xml-fragment-26.xq	2013-01-08 20:13:28 +0000
@@ -1,7 +1,7 @@
-import module namespace parse-xml = "http://www.zorba-xquery.com/modules/xml";;
+import module namespace x = "http://www.zorba-xquery.com/modules/xml";;
 import schema namespace opt = "http://www.zorba-xquery.com/modules/xml-options";;
 
-parse-xml:parse("one",
+x:parse("one",
   <opt:options>
     <opt:parse-external-parsed-entity/>
   </opt:options>

=== modified file 'test/rbkt/Queries/zorba/parsing_and_serializing/parse-xml-fragment-27.xq'
--- test/rbkt/Queries/zorba/parsing_and_serializing/parse-xml-fragment-27.xq	2012-05-15 15:00:19 +0000
+++ test/rbkt/Queries/zorba/parsing_and_serializing/parse-xml-fragment-27.xq	2013-01-08 20:13:28 +0000
@@ -1,7 +1,7 @@
-import module namespace parse-xml = "http://www.zorba-xquery.com/modules/xml";;
+import module namespace x = "http://www.zorba-xquery.com/modules/xml";;
 import schema namespace opt = "http://www.zorba-xquery.com/modules/xml-options";;
 
-parse-xml:parse("on",
+x:parse("on",
   <opt:options>
     <opt:parse-external-parsed-entity/>
   </opt:options>

=== modified file 'test/rbkt/Queries/zorba/parsing_and_serializing/parse-xml-fragment-28.xq'
--- test/rbkt/Queries/zorba/parsing_and_serializing/parse-xml-fragment-28.xq	2012-05-15 15:00:19 +0000
+++ test/rbkt/Queries/zorba/parsing_and_serializing/parse-xml-fragment-28.xq	2013-01-08 20:13:28 +0000
@@ -1,7 +1,7 @@
-import module namespace parse-xml = "http://www.zorba-xquery.com/modules/xml";;
+import module namespace x = "http://www.zorba-xquery.com/modules/xml";;
 import schema namespace opt = "http://www.zorba-xquery.com/modules/xml-options";;
 
-parse-xml:parse("o",
+x:parse("o",
   <opt:options>
     <opt:parse-external-parsed-entity/>
   </opt:options>

=== modified file 'test/rbkt/Queries/zorba/parsing_and_serializing/parse-xml-fragment-29.xq'
--- test/rbkt/Queries/zorba/parsing_and_serializing/parse-xml-fragment-29.xq	2012-05-15 15:00:19 +0000
+++ test/rbkt/Queries/zorba/parsing_and_serializing/parse-xml-fragment-29.xq	2013-01-08 20:13:28 +0000
@@ -1,7 +1,7 @@
-import module namespace parse-xml = "http://www.zorba-xquery.com/modules/xml";;
+import module namespace x = "http://www.zorba-xquery.com/modules/xml";;
 import schema namespace opt = "http://www.zorba-xquery.com/modules/xml-options";;
 
-parse-xml:parse("",
+x:parse("",
   <opt:options>
     <opt:parse-external-parsed-entity/>
   </opt:options>

=== modified file 'test/rbkt/Queries/zorba/parsing_and_serializing/parse-xml-fragment-31.xq'
--- test/rbkt/Queries/zorba/parsing_and_serializing/parse-xml-fragment-31.xq	2012-09-19 21:16:15 +0000
+++ test/rbkt/Queries/zorba/parsing_and_serializing/parse-xml-fragment-31.xq	2013-01-08 20:13:28 +0000
@@ -1,13 +1,13 @@
 (:
-  Test parse-xml:parse() with streamable input
+  Test x:parse() with streamable input
 :)
 
 import module namespace fetch = "http://www.zorba-xquery.com/modules/fetch";;
-import module namespace parse-xml = "http://www.zorba-xquery.com/modules/xml";;
+import module namespace x = "http://www.zorba-xquery.com/modules/xml";;
 import schema namespace opt = "http://www.zorba-xquery.com/modules/xml-options";;
 
 let $xmlcontents := fetch:content(fn:resolve-uri("streamable.xml"))
-let $contents := parse-xml:parse(
+let $contents := x:parse(
       $xmlcontents,
       <opt:options>
           <opt:parse-external-parsed-entity opt:skip-root-nodes="0" />

=== modified file 'test/rbkt/Queries/zorba/parsing_and_serializing/parse-xml-fragment-32.xq'
--- test/rbkt/Queries/zorba/parsing_and_serializing/parse-xml-fragment-32.xq	2012-09-19 21:16:15 +0000
+++ test/rbkt/Queries/zorba/parsing_and_serializing/parse-xml-fragment-32.xq	2013-01-08 20:13:28 +0000
@@ -1,11 +1,11 @@
 (:
-  Test parse-xml:parse() with a single top element which has an attribute
+  Test x:parse() with a single top element which has an attribute
 :)
 
-import module namespace parse-xml = "http://www.zorba-xquery.com/modules/xml";;
+import module namespace x = "http://www.zorba-xquery.com/modules/xml";;
 import schema namespace opt = "http://www.zorba-xquery.com/modules/xml-options";;
 
-parse-xml:parse(
+x:parse(
   "<template head='test'></template>",
   <opt:options>
     <opt:parse-external-parsed-entity opt:skip-root-nodes="0"/>

=== modified file 'test/rbkt/Queries/zorba/parsing_and_serializing/parse-xml-fragment-33.xq'
--- test/rbkt/Queries/zorba/parsing_and_serializing/parse-xml-fragment-33.xq	2012-09-19 21:16:15 +0000
+++ test/rbkt/Queries/zorba/parsing_and_serializing/parse-xml-fragment-33.xq	2013-01-08 20:13:28 +0000
@@ -1,10 +1,10 @@
-import module namespace parse-xml = "http://www.zorba-xquery.com/modules/xml";;
+import module namespace x = "http://www.zorba-xquery.com/modules/xml";;
 import schema namespace opt = "http://www.zorba-xquery.com/modules/xml-options";;
 import module namespace fetch = "http://www.zorba-xquery.com/modules/fetch";;
 
 variable $xmlcontents := fetch:content(resolve-uri("wiki.xml"));
 
-let $contents := parse-xml:parse(
+let $contents := x:parse(
       $xmlcontents,
       <opt:options>
         <opt:parse-external-parsed-entity opt:skip-root-nodes="1" />


Follow ups