diff --git a/civicrm.php b/civicrm.php
index 04988fc2fba37ba7e00e22cc3f118fb42957dffc..8df375a5577f4abf6501a4d65d0722a80e024aaf 100644
--- a/civicrm.php
+++ b/civicrm.php
@@ -2,7 +2,7 @@
 /*
 Plugin Name: CiviCRM
 Description: CiviCRM - Growing and Sustaining Relationships
-Version: 5.21.2
+Version: 5.22.0
 Author: CiviCRM LLC
 Author URI: https://civicrm.org/
 Plugin URI: https://wiki.civicrm.org/confluence/display/CRMDOC/Installing+CiviCRM+for+WordPress
@@ -121,17 +121,6 @@ if ( file_exists( CIVICRM_SETTINGS_PATH )  ) {
 // Prevent CiviCRM from rendering its own header
 define( 'CIVICRM_UF_HEAD', TRUE );
 
-/**
- * Setting this to 'true' will replace all mailing URLs calls to 'extern/url.php'
- * and 'extern/open.php' with their REST counterpart 'civicrm/v3/url' and 'civicrm/v3/open'.
- *
- * Use for test purposes, may affect mailing
- * performance, see Plugin->replace_tracking_urls() method.
- */
-if ( ! defined( 'CIVICRM_WP_REST_REPLACE_MAILING_TRACKING' ) ) {
-  define( 'CIVICRM_WP_REST_REPLACE_MAILING_TRACKING', false );
-}
-
 
 /**
  * Define CiviCRM_For_WordPress Class.
@@ -523,9 +512,6 @@ class CiviCRM_For_WordPress {
     include_once CIVICRM_PLUGIN_DIR . 'includes/civicrm.basepage.php';
     $this->basepage = new CiviCRM_For_WordPress_Basepage;
 
-    // Include REST API autoloader class
-    require_once( CIVICRM_PLUGIN_DIR . 'wp-rest/Autoloader.php' );
-
   }
 
 
@@ -650,12 +636,6 @@ class CiviCRM_For_WordPress {
     // Register hooks for clean URLs.
     $this->register_hooks_clean_urls();
 
-    // Set up REST API.
-    CiviCRM_WP_REST\Autoloader::add_source( $source_path = trailingslashit( CIVICRM_PLUGIN_DIR . 'wp-rest' ) );
-
-    // Init REST API.
-    new CiviCRM_WP_REST\Plugin;
-
   }
 
 
diff --git a/civicrm/CRM/ACL/BAO/ACL.php b/civicrm/CRM/ACL/BAO/ACL.php
index e55bf061d960d80396d1ddaf7c2a17bc3654b2d0..cee8e8869a094efb38b294123d323487e8091d99 100644
--- a/civicrm/CRM/ACL/BAO/ACL.php
+++ b/civicrm/CRM/ACL/BAO/ACL.php
@@ -75,236 +75,6 @@ class CRM_ACL_BAO_ACL extends CRM_ACL_DAO_ACL {
     return self::$_operation;
   }
 
-  /**
-   * Construct a WHERE clause to handle permissions to $object_*
-   *
-   * @deprecated
-   *
-   * @param array $tables
-   *   Any tables that may be needed in the FROM.
-   * @param string $operation
-   *   The operation being attempted.
-   * @param string $object_table
-   *   The table of the object in question.
-   * @param int $object_id
-   *   The ID of the object in question.
-   * @param int $acl_id
-   *   If it's a grant/revoke operation, the ACL ID.
-   * @param bool $acl_role
-   *   For grant operations, this flag determines if we're granting a single acl (false) or an entire group.
-   *
-   * @return string
-   *   The WHERE clause, or 0 on failure
-   */
-  public static function permissionClause(
-    &$tables, $operation,
-    $object_table = NULL, $object_id = NULL,
-    $acl_id = NULL, $acl_role = FALSE
-  ) {
-    CRM_Core_Error::deprecatedFunctionWarning('unknown - this is really old & not used in core');
-    $dao = new CRM_ACL_DAO_ACL();
-
-    $t = [
-      'ACL' => self::getTableName(),
-      'ACLRole' => 'civicrm_acl_role',
-      'ACLEntityRole' => CRM_ACL_DAO_EntityRole::getTableName(),
-      'Contact' => CRM_Contact_DAO_Contact::getTableName(),
-      'Group' => CRM_Contact_DAO_Group::getTableName(),
-      'GroupContact' => CRM_Contact_DAO_GroupContact::getTableName(),
-    ];
-
-    $contact_id = CRM_Core_Session::getLoggedInContactID();
-
-    $where = " {$t['ACL']}.operation = '" . CRM_Utils_Type::escape($operation, 'String') . "'";
-
-    /* Include clause if we're looking for a specific table/id permission */
-
-    if (!empty($object_table)) {
-      $where .= " AND ( {$t['ACL']}.object_table IS null
-                         OR ({$t['ACL']}.object_table   = '" . CRM_Utils_Type::escape($object_table, 'String') . "'";
-      if (!empty($object_id)) {
-        $where .= " AND ({$t['ACL']}.object_id IS null
-                            OR {$t['ACL']}.object_id = " . CRM_Utils_Type::escape($object_id, 'Integer') . ')';
-      }
-      $where .= '))';
-    }
-
-    /* Include clause if we're granting an ACL or ACL Role */
-
-    if (!empty($acl_id)) {
-      $where .= " AND ({$t['ACL']}.acl_id IS null
-                        OR {$t['ACL']}.acl_id   = " . CRM_Utils_Type::escape($acl_id, 'Integer') . ')';
-      if ($acl_role) {
-        $where .= " AND {$t['ACL']}.acl_table = '{$t['ACLRole']}'";
-      }
-      else {
-        $where .= " AND {$t['ACL']}.acl_table = '{$t['ACL']}'";
-      }
-    }
-
-    $query = [];
-
-    /* Query for permissions granted to all contacts in the domain */
-
-    $query[] = "SELECT      {$t['ACL']}.*, 0 as override
-                    FROM        {$t['ACL']}
-
-                    WHERE       {$t['ACL']}.entity_table    = '{$t['Domain']}'
-                            AND ($where)";
-
-    /* Query for permissions granted to all contacts through an ACL group */
-
-    $query[] = "SELECT      {$t['ACL']}.*, 0 as override
-                    FROM        {$t['ACL']}
-
-                    INNER JOIN  {$t['ACLEntityRole']}
-                            ON  ({$t['ACL']}.entity_table = '{$t['ACLRole']}'
-                            AND     {$t['ACL']}.entity_id =
-                                    {$t['ACLEntityRole']}.acl_role_id)
-
-                    INNER JOIN  {$t['ACLRole']}
-                            ON      {$t['ACL']}.entity_id =
-                                    {$t['ACLRole']}.id
-
-                    WHERE       {$t['ACLEntityRole']}.entity_table =
-                                    '{$t['Domain']}'
-                            AND {$t['ACLRole']}.is_active      = 1
-                            AND ($where)";
-
-    /* Query for permissions granted directly to the contact */
-
-    $query[] = "SELECT      {$t['ACL']}.*, 1 as override
-                    FROM        {$t['ACL']}
-
-                    INNER JOIN  {$t['Contact']}
-                            ON  ({$t['ACL']}.entity_table = '{$t['Contact']}'
-                            AND     {$t['ACL']}.entity_id = {$t['Contact']}.id)
-
-                    WHERE       {$t['Contact']}.id          = $contact_id
-                            AND ($where)";
-
-    /* Query for permissions granted to the contact through an ACL group */
-
-    $query[] = "SELECT      {$t['ACL']}.*, 1 as override
-                    FROM        {$t['ACL']}
-
-                    INNER JOIN  {$t['ACLEntityRole']}
-                            ON  ({$t['ACL']}.entity_table = '{$t['ACLRole']}'
-                            AND     {$t['ACL']}.entity_id =
-                                    {$t['ACLEntityRole']}.acl_role_id)
-
-                    INNER JOIN  {$t['ACLRole']}
-                            ON  {$t['ACL']}.entity_id = {$t['ACLRole']}.id
-
-                    WHERE       {$t['ACLEntityRole']}.entity_table =
-                                    '{$t['Contact']}'
-                        AND     {$t['ACLRole']}.is_active      = 1
-                        AND     {$t['ACLEntityRole']}.entity_id  = $contact_id
-                        AND     ($where)";
-
-    /* Query for permissions granted to the contact through a group */
-
-    $query[] = "SELECT      {$t['ACL']}.*, 0 as override
-                    FROM        {$t['ACL']}
-
-                    INNER JOIN  {$t['GroupContact']}
-                            ON  ({$t['ACL']}.entity_table = '{$t['Group']}'
-                            AND     {$t['ACL']}.entity_id =
-                                    {$t['GroupContact']}.group_id)
-
-                    WHERE       ($where)
-                        AND     {$t['GroupContact']}.contact_id = $contact_id
-                        AND     {$t['GroupContact']}.status     = 'Added')";
-
-    /* Query for permissions granted through an ACL group to a Contact
-     * group */
-
-    $query[] = "SELECT      {$t['ACL']}.*, 0 as override
-                    FROM        {$t['ACL']}
-
-                    INNER JOIN  {$t['ACLEntityRole']}
-                            ON  ({$t['ACL']}.entity_table = '{$t['ACLRole']}'
-                            AND     {$t['ACL']}.entity_id =
-                                    {$t['ACLEntityRole']}.acl_role_id)
-
-                    INNER JOIN  {$t['ACLRole']}
-                            ON  {$t['ACL']}.entity_id = {$t['ACLRole']}.id
-
-                    INNER JOIN  {$t['GroupContact']}
-                            ON  ({$t['ACLEntityRole']}.entity_table =
-                                    '{$t['Group']}'
-                            AND     {$t['ACLEntityRole']}.entity_id =
-                                    {$t['GroupContact']}.group_id)
-
-                    WHERE       ($where)
-                        AND     {$t['ACLRole']}.is_active      = 1
-                        AND     {$t['GroupContact']}.contact_id = $contact_id
-                        AND     {$t['GroupContact']}.status     = 'Added'";
-
-    $union = '(' . implode(') UNION DISTINCT (', $query) . ')';
-
-    $dao->query($union);
-
-    $allow = [0];
-    $deny = [0];
-    $override = [];
-
-    while ($dao->fetch()) {
-      /* Instant bypass for the following cases:
-       * 1) the rule governs all tables
-       * 2) the rule governs all objects in the table in question
-       * 3) the rule governs the specific object we want
-       */
-
-      if (empty($dao->object_table) ||
-        ($dao->object_table == $object_table
-          && (empty($dao->object_id)
-            || $dao->object_id == $object_id
-          )
-        )
-      ) {
-        $clause = 1;
-      }
-      else {
-        /* Otherwise try to generate a clause for this rule */
-
-        $clause = self::getClause(
-          $dao->object_table, $dao->object_id, $tables
-        );
-
-        /* If the clause returned is null, then the rule is a blanket
-         * (id is null) on a table other than the one we're interested
-         * in.  So skip it. */
-
-        if (empty($clause)) {
-          continue;
-        }
-      }
-
-      /* Now we figure out if this is an allow or deny rule, and possibly
-       * a contact-level override */
-
-      if ($dao->deny) {
-        $deny[] = $clause;
-      }
-      else {
-        $allow[] = $clause;
-
-        if ($dao->override) {
-          $override[] = $clause;
-        }
-      }
-    }
-
-    $allows = '(' . implode(' OR ', $allow) . ')';
-    $denies = '(' . implode(' OR ', $deny) . ')';
-    if (!empty($override)) {
-      $denies = '(NOT (' . implode(' OR ', $override) . ") AND $denies)";
-    }
-
-    return "($allows AND NOT $denies)";
-  }
-
   /**
    * Given a table and id pair, return the filter clause
    *
@@ -318,6 +88,8 @@ class CRM_ACL_BAO_ACL extends CRM_ACL_DAO_ACL {
    * @return string|null
    *   WHERE-style clause to filter results,
    *   or null if $table or $id is null
+   *
+   * @throws \CRM_Core_Exception
    */
   public static function getClause($table, $id, &$tables) {
     $table = CRM_Utils_Type::escape($table, 'String');
@@ -372,15 +144,13 @@ class CRM_ACL_BAO_ACL extends CRM_ACL_DAO_ACL {
    *
    * @param int $contact_id
    *   ID of a contact to search for.
-   * @param int $group_id
-   *   ID of a group to search for.
-   * @param bool $aclRoles
-   *   Should we include ACL Roles.
    *
    * @return array
    *   Array of assoc. arrays of ACL rules
+   *
+   * @throws \CRM_Core_Exception
    */
-  public static function &getACLs($contact_id = NULL, $group_id = NULL, $aclRoles = FALSE) {
+  public static function getACLs($contact_id = NULL) {
     $results = [];
 
     if (empty($contact_id)) {
@@ -388,9 +158,6 @@ class CRM_ACL_BAO_ACL extends CRM_ACL_DAO_ACL {
     }
 
     $contact_id = CRM_Utils_Type::escape($contact_id, 'Integer');
-    if ($group_id) {
-      $group_id = CRM_Utils_Type::escape($group_id, 'Integer');
-    }
 
     $rule = new CRM_ACL_BAO_ACL();
 
@@ -399,26 +166,12 @@ class CRM_ACL_BAO_ACL extends CRM_ACL_DAO_ACL {
     $c2g = CRM_Contact_BAO_GroupContact::getTableName();
     $group = CRM_Contact_BAO_Group::getTableName();
 
-    $query = " SELECT      $acl.*
-                        FROM        $acl ";
-
-    if (!empty($group_id)) {
-      $query .= " INNER JOIN  $c2g
-                            ON      $acl.entity_id      = $c2g.group_id
-                        WHERE       $acl.entity_table   = '$group'
-                            AND     $acl.is_active      = 1
-                            AND     $c2g.group_id       = $group_id";
+    $query = " SELECT acl.*
+     FROM $acl acl";
 
-      if (!empty($contact_id)) {
-        $query .= " AND     $c2g.contact_id     = $contact_id
-                            AND     $c2g.status         = 'Added'";
-      }
-    }
-    else {
-      if (!empty($contact_id)) {
-        $query .= " WHERE   $acl.entity_table   = '$contact'
-                            AND     $acl.entity_id      = $contact_id";
-      }
+    if (!empty($contact_id)) {
+      $query .= " WHERE   acl.entity_table   = '$contact'
+       AND acl.entity_id      = $contact_id";
     }
 
     $rule->query($query);
@@ -427,9 +180,7 @@ class CRM_ACL_BAO_ACL extends CRM_ACL_DAO_ACL {
       $results[$rule->id] = $rule->toArray();
     }
 
-    if ($aclRoles) {
-      $results += self::getACLRoles($contact_id, $group_id);
-    }
+    $results += self::getACLRoles($contact_id);
 
     return $results;
   }
@@ -439,17 +190,14 @@ class CRM_ACL_BAO_ACL extends CRM_ACL_DAO_ACL {
    *
    * @param int $contact_id
    *   ID of a contact to search for.
-   * @param int $group_id
-   *   ID of a group to search for.
    *
    * @return array
    *   Array of assoc. arrays of ACL rules
+   *
+   * @throws \CRM_Core_Exception
    */
-  public static function &getACLRoles($contact_id = NULL, $group_id = NULL) {
+  public static function getACLRoles($contact_id = NULL) {
     $contact_id = CRM_Utils_Type::escape($contact_id, 'Integer');
-    if ($group_id) {
-      $group_id = CRM_Utils_Type::escape($group_id, 'Integer');
-    }
 
     $rule = new CRM_ACL_BAO_ACL();
 
@@ -457,36 +205,20 @@ class CRM_ACL_BAO_ACL extends CRM_ACL_DAO_ACL {
     $aclRole = 'civicrm_acl_role';
     $aclRoleJoin = CRM_ACL_DAO_EntityRole::getTableName();
     $contact = CRM_Contact_BAO_Contact::getTableName();
-    $c2g = CRM_Contact_BAO_GroupContact::getTableName();
-    $group = CRM_Contact_BAO_Group::getTableName();
 
-    $query = "   SELECT          $acl.*
-                        FROM            $acl
+    $query = "   SELECT          acl.*
+                        FROM            $acl acl
                         INNER JOIN      civicrm_option_group og
                                 ON      og.name = 'acl_role'
                         INNER JOIN      civicrm_option_value ov
-                                ON      $acl.entity_table   = '$aclRole'
+                                ON      acl.entity_table   = '$aclRole'
                                 AND     ov.option_group_id  = og.id
-                                AND     $acl.entity_id      = ov.value";
-
-    if (!empty($group_id)) {
-      $query .= " INNER JOIN  $c2g
-                            ON      $acl.entity_id     = $c2g.group_id
-                        WHERE       $acl.entity_table  = '$group'
-                            AND     $acl.is_active     = 1
-                            AND     $c2g.group_id           = $group_id";
-
-      if (!empty($contact_id)) {
-        $query .= " AND     $c2g.contact_id = $contact_id
-                            AND     $c2g.status = 'Added'";
-      }
-    }
-    else {
-      if (!empty($contact_id)) {
-        $query .= " WHERE   $acl.entity_table  = '$contact'
-                                AND $acl.is_active     = 1
-                                AND $acl.entity_id     = $contact_id";
-      }
+                                AND     acl.entity_id      = ov.value";
+
+    if (!empty($contact_id)) {
+      $query .= " WHERE   acl.entity_table  = '$contact'
+                              AND acl.is_active     = 1
+                              AND acl.entity_id     = $contact_id";
     }
 
     $results = [];
@@ -510,8 +242,9 @@ class CRM_ACL_BAO_ACL extends CRM_ACL_DAO_ACL {
    *
    * @return array
    *   Assoc array of ACL rules
+   * @throws \CRM_Core_Exception
    */
-  public static function &getGroupACLs($contact_id, $aclRoles = FALSE) {
+  public static function getGroupACLs($contact_id, $aclRoles = FALSE) {
     $contact_id = CRM_Utils_Type::escape($contact_id, 'Integer');
 
     $rule = new CRM_ACL_BAO_ACL();
@@ -523,13 +256,13 @@ class CRM_ACL_BAO_ACL extends CRM_ACL_DAO_ACL {
 
     if ($contact_id) {
       $query = "
-SELECT      $acl.*
-  FROM      $acl
- INNER JOIN  $c2g
-        ON  $acl.entity_id      = $c2g.group_id
-     WHERE  $acl.entity_table   = '$group'
-       AND  $c2g.contact_id     = $contact_id
-       AND  $c2g.status         = 'Added'";
+SELECT      acl.*
+  FROM      $acl acl
+ INNER JOIN  $c2g group_contact
+        ON  acl.entity_id      = group_contact.group_id
+     WHERE  acl.entity_table   = '$group'
+       AND  group_contact.contact_id     = $contact_id
+       AND  group_contact.status         = 'Added'";
 
       $rule->query($query);
 
@@ -554,8 +287,9 @@ SELECT      $acl.*
    *
    * @return array
    *   Array of assoc. arrays of ACL rules
+   * @throws \CRM_Core_Exception
    */
-  public static function &getGroupACLRoles($contact_id) {
+  public static function getGroupACLRoles($contact_id) {
     $contact_id = CRM_Utils_Type::escape($contact_id, 'Integer');
 
     $rule = new CRM_ACL_BAO_ACL();
@@ -567,23 +301,23 @@ SELECT      $acl.*
     $c2g = CRM_Contact_BAO_GroupContact::getTableName();
     $group = CRM_Contact_BAO_Group::getTableName();
 
-    $query = "   SELECT          $acl.*
-                        FROM            $acl
+    $query = "   SELECT          acl.*
+                        FROM            $acl acl
                         INNER JOIN      civicrm_option_group og
                                 ON      og.name = 'acl_role'
                         INNER JOIN      civicrm_option_value ov
-                                ON      $acl.entity_table   = '$aclRole'
+                                ON      acl.entity_table   = '$aclRole'
                                 AND     ov.option_group_id  = og.id
-                                AND     $acl.entity_id      = ov.value
+                                AND     acl.entity_id      = ov.value
                                 AND     ov.is_active        = 1
                         INNER JOIN      $aclER
-                                ON      $aclER.acl_role_id = $acl.entity_id
+                                ON      $aclER.acl_role_id = acl.entity_id
                                 AND     $aclER.is_active    = 1
                         INNER JOIN  $c2g
                                 ON      $aclER.entity_id      = $c2g.group_id
                                 AND     $aclER.entity_table   = 'civicrm_group'
-                        WHERE       $acl.entity_table       = '$aclRole'
-                            AND     $acl.is_active          = 1
+                        WHERE       acl.entity_table       = '$aclRole'
+                            AND     acl.is_active          = 1
                             AND     $c2g.contact_id         = $contact_id
                             AND     $c2g.status             = 'Added'";
 
@@ -604,10 +338,10 @@ SELECT      $acl.*
     }
 
     $query = "
-SELECT $acl.*
-  FROM $acl
- WHERE $acl.entity_id      IN ( $roles )
-   AND $acl.entity_table   = 'civicrm_acl_role'
+SELECT acl.*
+  FROM $acl acl
+ WHERE acl.entity_id      IN ( $roles )
+   AND acl.entity_table   = 'civicrm_acl_role'
 ";
 
     $rule->query($query);
@@ -626,12 +360,14 @@ SELECT $acl.*
    *
    * @return array
    *   Assoc array of ACL rules
+   *
+   * @throws \CRM_Core_Exception
    */
-  public static function &getAllByContact($contact_id) {
+  public static function getAllByContact($contact_id) {
     $result = [];
 
     /* First, the contact-specific ACLs, including ACL Roles */
-    $result += self::getACLs($contact_id, NULL, TRUE);
+    $result += self::getACLs($contact_id);
 
     /* Then, all ACLs granted through group membership */
     $result += self::getGroupACLs($contact_id, TRUE);
@@ -644,7 +380,7 @@ SELECT $acl.*
    *
    * @return CRM_ACL_DAO_ACL
    */
-  public static function create(&$params) {
+  public static function create($params) {
     $dao = new CRM_ACL_DAO_ACL();
     $dao->copyValues($params);
     $dao->save();
@@ -653,7 +389,7 @@ SELECT $acl.*
 
   /**
    * @param array $params
-   * @param $defaults
+   * @param array $defaults
    */
   public static function retrieve(&$params, &$defaults) {
     CRM_Core_DAO::commonRetrieve('CRM_ACL_DAO_ACL', $params, $defaults);
diff --git a/civicrm/CRM/ACL/DAO/ACL.php b/civicrm/CRM/ACL/DAO/ACL.php
index d762919f4448dc913327ccbff87d606e530da3b9..e9b76b01d3bc6a6c03e0286ee9148c92c343c015 100644
--- a/civicrm/CRM/ACL/DAO/ACL.php
+++ b/civicrm/CRM/ACL/DAO/ACL.php
@@ -6,7 +6,7 @@
  *
  * Generated from xml/schema/CRM/ACL/ACL.xml
  * DO NOT EDIT.  Generated by CRM_Core_CodeGen
- * (GenCodeChecksum:5dae38d9d5e128062b634a01ccfad2b0)
+ * (GenCodeChecksum:3b22e42a53e4863614014323e5b98526)
  */
 
 /**
diff --git a/civicrm/CRM/ACL/DAO/ACLCache.php b/civicrm/CRM/ACL/DAO/ACLCache.php
index e18812036f76b768c6599a719f814b2b4430e0f1..49daef0619b45fd675b7ceeaa52aa2d6b5bf1440 100644
--- a/civicrm/CRM/ACL/DAO/ACLCache.php
+++ b/civicrm/CRM/ACL/DAO/ACLCache.php
@@ -6,7 +6,7 @@
  *
  * Generated from xml/schema/CRM/ACL/ACLCache.xml
  * DO NOT EDIT.  Generated by CRM_Core_CodeGen
- * (GenCodeChecksum:a7bccfc35714fdcf0fdb6f4cd24842bd)
+ * (GenCodeChecksum:6c22da308c28e1b6766087c3073112a0)
  */
 
 /**
@@ -215,6 +215,14 @@ class CRM_ACL_DAO_ACLCache extends CRM_Core_DAO {
         'localizable' => FALSE,
         'sig' => 'civicrm_acl_cache::0::acl_id',
       ],
+      'index_modified_date' => [
+        'name' => 'index_modified_date',
+        'field' => [
+          0 => 'modified_date',
+        ],
+        'localizable' => FALSE,
+        'sig' => 'civicrm_acl_cache::0::modified_date',
+      ],
     ];
     return ($localize && !empty($indices)) ? CRM_Core_DAO_AllCoreTables::multilingualize(__CLASS__, $indices) : $indices;
   }
diff --git a/civicrm/CRM/ACL/DAO/EntityRole.php b/civicrm/CRM/ACL/DAO/EntityRole.php
index 01de96bcf279d61b3b6bb433e83c2b8673040c16..151848107d12864b05cf73363aaa11be01811e57 100644
--- a/civicrm/CRM/ACL/DAO/EntityRole.php
+++ b/civicrm/CRM/ACL/DAO/EntityRole.php
@@ -6,7 +6,7 @@
  *
  * Generated from xml/schema/CRM/ACL/EntityRole.xml
  * DO NOT EDIT.  Generated by CRM_Core_CodeGen
- * (GenCodeChecksum:0dc853871318ba5645e0f8f12aac58f6)
+ * (GenCodeChecksum:72c64ec6e3120ef60450b00939325d62)
  */
 
 /**
diff --git a/civicrm/CRM/ACL/Form/WordPress/Permissions.php b/civicrm/CRM/ACL/Form/WordPress/Permissions.php
index f0a449d2456d9cc02f9886f127ee597edc1577ec..f19ff16c6aaf5f9768660d92575f57b703faa689 100644
--- a/civicrm/CRM/ACL/Form/WordPress/Permissions.php
+++ b/civicrm/CRM/ACL/Form/WordPress/Permissions.php
@@ -38,7 +38,7 @@ class CRM_ACL_Form_WordPress_Permissions extends CRM_Core_Form {
     }
     foreach ($wp_roles->role_names as $role => $name) {
       // Don't show the permissions options for administrator, as they have all permissions
-      if ( is_multisite() OR $role !== 'administrator') {
+      if ($role !== 'administrator') {
         $roleObj = $wp_roles->get_role($role);
         if (!empty($roleObj->capabilities)) {
           foreach ($roleObj->capabilities as $ckey => $cname) {
diff --git a/civicrm/CRM/Activity/BAO/ICalendar.php b/civicrm/CRM/Activity/BAO/ICalendar.php
index 8874bd6ebebc2c47e05fdc6f689282afdc280c95..88b7676e1d4f876d28dbf6a4774561793685d332 100644
--- a/civicrm/CRM/Activity/BAO/ICalendar.php
+++ b/civicrm/CRM/Activity/BAO/ICalendar.php
@@ -21,7 +21,8 @@
 class CRM_Activity_BAO_ICalendar {
 
   /**
-   * @var object The activity for which we're generating ical.
+   * @var \CRM_Activity_BAO_ICalendar
+   * The activity for which we're generating ical.
    */
   protected $activity;
 
diff --git a/civicrm/CRM/Activity/DAO/Activity.php b/civicrm/CRM/Activity/DAO/Activity.php
index e787d04427733051c7305b6bd6c9147aafbc0941..042eb4cb047da33a9d7e317687fedabe5f19c04e 100644
--- a/civicrm/CRM/Activity/DAO/Activity.php
+++ b/civicrm/CRM/Activity/DAO/Activity.php
@@ -6,7 +6,7 @@
  *
  * Generated from xml/schema/CRM/Activity/Activity.xml
  * DO NOT EDIT.  Generated by CRM_Core_CodeGen
- * (GenCodeChecksum:8bb645a4017aea0b392b1ff3f3050137)
+ * (GenCodeChecksum:a6494c64eb7395b2221ab118a480c951)
  */
 
 /**
diff --git a/civicrm/CRM/Activity/DAO/ActivityContact.php b/civicrm/CRM/Activity/DAO/ActivityContact.php
index 79dd2a18278865c626e186ffa8a58b40cf2dc662..71039019af3d1941e928aefcd1231d45402eaaa4 100644
--- a/civicrm/CRM/Activity/DAO/ActivityContact.php
+++ b/civicrm/CRM/Activity/DAO/ActivityContact.php
@@ -6,7 +6,7 @@
  *
  * Generated from xml/schema/CRM/Activity/ActivityContact.xml
  * DO NOT EDIT.  Generated by CRM_Core_CodeGen
- * (GenCodeChecksum:ba1318187b6445db9a639c8476eb683e)
+ * (GenCodeChecksum:51894f9aa59e1fed6591b4aa3632e6a6)
  */
 
 /**
diff --git a/civicrm/CRM/Activity/Form/ActivityView.php b/civicrm/CRM/Activity/Form/ActivityView.php
index f87b928126a2c62b0f1d9d4fc2bc467409766798..422e30eef33e9fdc0fa802ef73f2b747915a31ec 100644
--- a/civicrm/CRM/Activity/Form/ActivityView.php
+++ b/civicrm/CRM/Activity/Form/ActivityView.php
@@ -33,7 +33,7 @@ class CRM_Activity_Form_ActivityView extends CRM_Core_Form {
     if ($activityId &&
       !CRM_Activity_BAO_Activity::checkPermission($activityId, CRM_Core_Action::VIEW)
     ) {
-      CRM_Core_Error::fatal(ts('You do not have permission to access this page.'));
+      CRM_Core_Error::statusBounce(ts('You do not have permission to access this page.'));
     }
 
     $session = CRM_Core_Session::singleton();
diff --git a/civicrm/CRM/Activity/Form/Search.php b/civicrm/CRM/Activity/Form/Search.php
index 7239fca7fb64f5deeac0a217966aa32b4367bb40..57a35aef82d10cf22fe386bb9978daccdeb1f74b 100644
--- a/civicrm/CRM/Activity/Form/Search.php
+++ b/civicrm/CRM/Activity/Form/Search.php
@@ -75,6 +75,7 @@ class CRM_Activity_Form_Search extends CRM_Core_Form_Search {
     $this->_actionButtonName = $this->getButtonName('next', 'action');
 
     $this->_done = FALSE;
+    $this->sortNameOnly = TRUE;
 
     parent::preProcess();
 
@@ -84,13 +85,6 @@ class CRM_Activity_Form_Search extends CRM_Core_Form_Search {
       }
     }
 
-    $sortID = NULL;
-    if ($this->get(CRM_Utils_Sort::SORT_ID)) {
-      $sortID = CRM_Utils_Sort::sortIDValue($this->get(CRM_Utils_Sort::SORT_ID),
-        $this->get(CRM_Utils_Sort::SORT_DIRECTION)
-      );
-    }
-
     $this->_queryParams = CRM_Contact_BAO_Query::convertFormValues($this->_formValues);
     $selector = new CRM_Activity_Selector_Search($this->_queryParams,
       $this->_action,
@@ -109,7 +103,7 @@ class CRM_Activity_Form_Search extends CRM_Core_Form_Search {
 
     $controller = new CRM_Core_Selector_Controller($selector,
       $this->get(CRM_Utils_Pager::PAGE_ID),
-      $sortID,
+      $this->getSortID(),
       CRM_Core_Action::VIEW,
       $this,
       CRM_Core_Selector_Controller::TRANSFER,
@@ -205,13 +199,6 @@ class CRM_Activity_Form_Search extends CRM_Core_Form_Search {
       return;
     }
 
-    $sortID = NULL;
-    if ($this->get(CRM_Utils_Sort::SORT_ID)) {
-      $sortID = CRM_Utils_Sort::sortIDValue($this->get(CRM_Utils_Sort::SORT_ID),
-        $this->get(CRM_Utils_Sort::SORT_DIRECTION)
-      );
-    }
-
     $this->_queryParams = CRM_Contact_BAO_Query::convertFormValues($this->_formValues);
 
     $selector = new CRM_Activity_Selector_Search($this->_queryParams,
@@ -230,7 +217,7 @@ class CRM_Activity_Form_Search extends CRM_Core_Form_Search {
 
     $controller = new CRM_Core_Selector_Controller($selector,
       $this->get(CRM_Utils_Pager::PAGE_ID),
-      $sortID,
+      $this->getSortID(),
       CRM_Core_Action::VIEW,
       $this,
       CRM_Core_Selector_Controller::SESSION,
diff --git a/civicrm/CRM/Admin/Form/Options.php b/civicrm/CRM/Admin/Form/Options.php
index 0f7db781091f3af04d34944ec59ea8a2c9e9b248..48f0d9ac87d21369d3fa1f515b29906185e5bae3 100644
--- a/civicrm/CRM/Admin/Form/Options.php
+++ b/civicrm/CRM/Admin/Form/Options.php
@@ -94,7 +94,7 @@ class CRM_Admin_Form_Options extends CRM_Admin_Form {
     if ($this->_id && in_array($this->_gName, CRM_Core_OptionGroup::$_domainIDGroups)) {
       $domainID = CRM_Core_DAO::getFieldValue('CRM_Core_DAO_OptionValue', $this->_id, 'domain_id', 'id');
       if (CRM_Core_Config::domainID() != $domainID) {
-        CRM_Core_Error::fatal(ts('You do not have permission to access this page.'));
+        CRM_Core_Error::statusBounce(ts('You do not have permission to access this page.'));
       }
     }
   }
diff --git a/civicrm/CRM/Admin/Page/ScheduleReminders.php b/civicrm/CRM/Admin/Page/ScheduleReminders.php
index dc25733ccca6636d153e10ac15eb662c8a15fc5f..524031760ea710e3e1738a9cda55a41b998c88fa 100644
--- a/civicrm/CRM/Admin/Page/ScheduleReminders.php
+++ b/civicrm/CRM/Admin/Page/ScheduleReminders.php
@@ -113,12 +113,14 @@ class CRM_Admin_Page_ScheduleReminders extends CRM_Core_Page_Basic {
    * Browse all Scheduled Reminders settings.
    *
    * @param null $action
+   *
+   * @throws \CRM_Core_Exception
    */
   public function browse($action = NULL) {
     //CRM-16777: Do not permit access to user, for page 'Administer->Communication->Schedule Reminder',
     //when do not have 'administer CiviCRM' permission.
     if (!CRM_Core_Permission::check('administer CiviCRM')) {
-      CRM_Core_Error::fatal(ts('You do not have permission to access this page.'));
+      CRM_Core_Error::statusBounce(ts('You do not have permission to access this page.'));
     }
 
     // Get list of configured reminders
diff --git a/civicrm/CRM/Api4/Services.php b/civicrm/CRM/Api4/Services.php
index 95fd4a2202cc006863768cf3a1a25c25799d0e79..ec8190348ccd3c7a63107cdf5279eae49f5760b8 100644
--- a/civicrm/CRM/Api4/Services.php
+++ b/civicrm/CRM/Api4/Services.php
@@ -86,7 +86,7 @@ class CRM_Api4_Services {
         $container->addResource($resource);
         foreach (glob("$path*.php") as $file) {
           $matches = [];
-          preg_match('/(\w*).php/', $file, $matches);
+          preg_match('/(\w*)\.php$/', $file, $matches);
           $serviceName = $namespace . array_pop($matches);
           $serviceClass = new \ReflectionClass($serviceName);
           if ($serviceClass->isInstantiable()) {
diff --git a/civicrm/CRM/Batch/DAO/Batch.php b/civicrm/CRM/Batch/DAO/Batch.php
index 9d6876ece12f980195c7452cfc97df053b3b2be4..cfd39dc2c037b07f385ebd3bb6742e8ca7f9a28e 100644
--- a/civicrm/CRM/Batch/DAO/Batch.php
+++ b/civicrm/CRM/Batch/DAO/Batch.php
@@ -6,7 +6,7 @@
  *
  * Generated from xml/schema/CRM/Batch/Batch.xml
  * DO NOT EDIT.  Generated by CRM_Core_CodeGen
- * (GenCodeChecksum:d0986aaf599e8243517d4a2912a67f94)
+ * (GenCodeChecksum:ec065dd0aaa794ee44d5fb2216deac3d)
  */
 
 /**
diff --git a/civicrm/CRM/Batch/DAO/EntityBatch.php b/civicrm/CRM/Batch/DAO/EntityBatch.php
index 900e79ae7be193847b1e2064dc14a41c0dd3f068..39a106071a4a05f53e66a950291525f24bd46d1d 100644
--- a/civicrm/CRM/Batch/DAO/EntityBatch.php
+++ b/civicrm/CRM/Batch/DAO/EntityBatch.php
@@ -6,7 +6,7 @@
  *
  * Generated from xml/schema/CRM/Batch/EntityBatch.xml
  * DO NOT EDIT.  Generated by CRM_Core_CodeGen
- * (GenCodeChecksum:cf1316450cf80689399a7f55bb3b4261)
+ * (GenCodeChecksum:d086b52bbce9c11d89087feea79f1bf0)
  */
 
 /**
diff --git a/civicrm/CRM/Campaign/DAO/Campaign.php b/civicrm/CRM/Campaign/DAO/Campaign.php
index ee9d956c3249ae2419569a080c9e9426cb026eaa..a4679965b7368d24ba0a8be90fb6941e8e45b00b 100644
--- a/civicrm/CRM/Campaign/DAO/Campaign.php
+++ b/civicrm/CRM/Campaign/DAO/Campaign.php
@@ -6,7 +6,7 @@
  *
  * Generated from xml/schema/CRM/Campaign/Campaign.xml
  * DO NOT EDIT.  Generated by CRM_Core_CodeGen
- * (GenCodeChecksum:ab19aa73d01b529988c178673fc38d58)
+ * (GenCodeChecksum:f69a15a0b3ca2db78b4981c73b7d1757)
  */
 
 /**
diff --git a/civicrm/CRM/Campaign/DAO/CampaignGroup.php b/civicrm/CRM/Campaign/DAO/CampaignGroup.php
index d6ec30117cca1676de2f03297f0d77474d3bef89..3f3e3a5a53198990a2f066f82f3c1c9e6f4d2020 100644
--- a/civicrm/CRM/Campaign/DAO/CampaignGroup.php
+++ b/civicrm/CRM/Campaign/DAO/CampaignGroup.php
@@ -6,7 +6,7 @@
  *
  * Generated from xml/schema/CRM/Campaign/CampaignGroup.xml
  * DO NOT EDIT.  Generated by CRM_Core_CodeGen
- * (GenCodeChecksum:a31197c38f4456b239242d274d38a148)
+ * (GenCodeChecksum:5b64d5b0724ee405d4ec21c7a1ce7372)
  */
 
 /**
diff --git a/civicrm/CRM/Campaign/DAO/Survey.php b/civicrm/CRM/Campaign/DAO/Survey.php
index 7b555d9b7a7ac3544db6da6c3817a5636101e9f5..fc324d9cce63084c21a11bed4d49cff8b1e25ccb 100644
--- a/civicrm/CRM/Campaign/DAO/Survey.php
+++ b/civicrm/CRM/Campaign/DAO/Survey.php
@@ -6,7 +6,7 @@
  *
  * Generated from xml/schema/CRM/Campaign/Survey.xml
  * DO NOT EDIT.  Generated by CRM_Core_CodeGen
- * (GenCodeChecksum:66d74656d01b2d56d4d4861203ef2fdd)
+ * (GenCodeChecksum:f7cedbe0c777cf7b99c543e80ff5cf0b)
  */
 
 /**
diff --git a/civicrm/CRM/Campaign/Form/Petition/Signature.php b/civicrm/CRM/Campaign/Form/Petition/Signature.php
index eed5321e937eba4e72971dc901f793a9ff53ee34..4e72b62cf9bc6fcebf4cf2de1e5338adfe567fd9 100644
--- a/civicrm/CRM/Campaign/Form/Petition/Signature.php
+++ b/civicrm/CRM/Campaign/Form/Petition/Signature.php
@@ -40,7 +40,8 @@ class CRM_Campaign_Form_Petition_Signature extends CRM_Core_Form {
   /**
    * The contact type
    *
-   * @var string ("Individual"/"Household"/"Organization"). Never been tested for something else than Individual
+   * @var string
+   * ("Individual"/"Household"/"Organization"). Never been tested for something else than Individual
    */
   protected $_ctype = 'Individual';
 
@@ -160,7 +161,7 @@ class CRM_Campaign_Form_Petition_Signature extends CRM_Core_Form {
 
     //some sanity checks
     if (!$this->_surveyId) {
-      CRM_Core_Error::fatal('Petition id is not valid. (it needs a "sid" in the url).');
+      CRM_Core_Error::statusBounce('Petition id is not valid. (it needs a "sid" in the url).');
       return;
     }
     //check petition is valid and active
@@ -168,10 +169,10 @@ class CRM_Campaign_Form_Petition_Signature extends CRM_Core_Form {
     $this->petition = [];
     CRM_Campaign_BAO_Survey::retrieve($params, $this->petition);
     if (empty($this->petition)) {
-      CRM_Core_Error::fatal('Petition doesn\'t exist.');
+      CRM_Core_Error::statusBounce('Petition doesn\'t exist.');
     }
     if ($this->petition['is_active'] == 0) {
-      CRM_Core_Error::fatal('Petition is no longer active.');
+      CRM_Core_Error::statusBounce('Petition is no longer active.');
     }
 
     //get userID from session
@@ -197,7 +198,7 @@ class CRM_Campaign_Form_Petition_Signature extends CRM_Core_Form {
       $this->_contactProfileFields = CRM_Core_BAO_UFGroup::getFields($this->_contactProfileId, FALSE, CRM_Core_Action::ADD);
     }
     if (!isset($this->_contactProfileFields['email-Primary'])) {
-      CRM_Core_Error::fatal('The contact profile needs to contain the primary email address field');
+      CRM_Core_Error::statusBounce('The contact profile needs to contain the primary email address field');
     }
 
     $ufJoinParams['weight'] = 1;
diff --git a/civicrm/CRM/Campaign/Form/Search.php b/civicrm/CRM/Campaign/Form/Search.php
index e8d5237bca6ab9538f8585093dbeba916a10f5bf..0ec2990d547131337f809ed28e1257fd3b32f84c 100644
--- a/civicrm/CRM/Campaign/Form/Search.php
+++ b/civicrm/CRM/Campaign/Form/Search.php
@@ -106,13 +106,6 @@ class CRM_Campaign_Form_Search extends CRM_Core_Form_Search {
       $this->set('force', 0);
     }
 
-    $sortID = NULL;
-    if ($this->get(CRM_Utils_Sort::SORT_ID)) {
-      $sortID = CRM_Utils_Sort::sortIDValue($this->get(CRM_Utils_Sort::SORT_ID),
-        $this->get(CRM_Utils_Sort::SORT_DIRECTION)
-      );
-    }
-
     //get the voter clause.
     $voterClause = $this->voterClause();
 
@@ -135,7 +128,7 @@ class CRM_Campaign_Form_Search extends CRM_Core_Form_Search {
 
     $controller = new CRM_Core_Selector_Controller($selector,
       $this->get(CRM_Utils_Pager::PAGE_ID),
-      $sortID,
+      $this->getSortID(),
       CRM_Core_Action::VIEW,
       $this,
       CRM_Core_Selector_Controller::TRANSFER,
@@ -260,13 +253,6 @@ class CRM_Campaign_Form_Search extends CRM_Core_Form_Search {
       return;
     }
 
-    $sortID = NULL;
-    if ($this->get(CRM_Utils_Sort::SORT_ID)) {
-      $sortID = CRM_Utils_Sort::sortIDValue($this->get(CRM_Utils_Sort::SORT_ID),
-        $this->get(CRM_Utils_Sort::SORT_DIRECTION)
-      );
-    }
-
     //get the voter clause.
     $voterClause = $this->voterClause();
 
@@ -288,7 +274,7 @@ class CRM_Campaign_Form_Search extends CRM_Core_Form_Search {
 
     $controller = new CRM_Core_Selector_Controller($selector,
       $this->get(CRM_Utils_Pager::PAGE_ID),
-      $sortID,
+      $this->getSortID(),
       CRM_Core_Action::VIEW,
       $this,
       CRM_Core_Selector_Controller::SESSION,
diff --git a/civicrm/CRM/Campaign/Form/SurveyType.php b/civicrm/CRM/Campaign/Form/SurveyType.php
index f6b37abe46fe61ff0021e56b1a281d530eabc9c3..85a3ff3ba3ab9c71f701dbeb613c68ebfc04f879 100644
--- a/civicrm/CRM/Campaign/Form/SurveyType.php
+++ b/civicrm/CRM/Campaign/Form/SurveyType.php
@@ -44,6 +44,8 @@ class CRM_Campaign_Form_SurveyType extends CRM_Admin_Form {
 
   /**
    * Set variables up before form is built.
+   *
+   * @throws \CRM_Core_Exception
    */
   public function preProcess() {
     $this->_action = CRM_Utils_Request::retrieve('action', 'String', $this);
@@ -66,7 +68,7 @@ class CRM_Campaign_Form_SurveyType extends CRM_Admin_Form {
     if ($this->_id && in_array($this->_gName, CRM_Core_OptionGroup::$_domainIDGroups)) {
       $domainID = CRM_Core_DAO::getFieldValue('CRM_Core_DAO_OptionValue', $this->_id, 'domain_id', 'id');
       if (CRM_Core_Config::domainID() != $domainID) {
-        CRM_Core_Error::fatal(ts('You do not have permission to access this page.'));
+        CRM_Core_Error::statusBounce(ts('You do not have permission to access this page.'));
       }
     }
   }
diff --git a/civicrm/CRM/Case/BAO/Case.php b/civicrm/CRM/Case/BAO/Case.php
index 76f74d496d6bb2cc174a3598db95453e7de57a7b..4e1615e9ef324924e7dc338864364606ec8506cc 100644
--- a/civicrm/CRM/Case/BAO/Case.php
+++ b/civicrm/CRM/Case/BAO/Case.php
@@ -1141,7 +1141,7 @@ SELECT civicrm_case.id, case_status.label AS case_status, status_id, civicrm_cas
 
     $values = [];
     $query = <<<HERESQL
-    SELECT cc.display_name as name, cc.sort_name as sort_name, cc.id, cr.relationship_type_id, crt.label_b_a as role, crt.name_b_a as role_name, ce.email, cp.phone
+    SELECT cc.display_name as name, cc.sort_name as sort_name, cc.id, cr.relationship_type_id, crt.label_b_a as role, crt.name_b_a as role_name, crt.name_a_b as role_name_reverse, ce.email, cp.phone
     FROM civicrm_relationship cr
     JOIN civicrm_relationship_type crt
      ON crt.id = cr.relationship_type_id
@@ -1158,7 +1158,7 @@ SELECT civicrm_case.id, case_status.label AS case_status, status_id, civicrm_cas
      AND cr.is_active
      AND cc.id NOT IN (%2)
     UNION
-    SELECT cc.display_name as name, cc.sort_name as sort_name, cc.id, cr.relationship_type_id, crt.label_a_b as role, crt.name_a_b as role_name, ce.email, cp.phone
+    SELECT cc.display_name as name, cc.sort_name as sort_name, cc.id, cr.relationship_type_id, crt.label_a_b as role, crt.name_a_b as role_name, crt.name_b_a as role_name_reverse, ce.email, cp.phone
     FROM civicrm_relationship cr
     JOIN civicrm_relationship_type crt
      ON crt.id = cr.relationship_type_id
@@ -1196,7 +1196,8 @@ HERESQL;
           'phone' => $dao->phone,
         ];
         // Add more info about the role (creator, manager)
-        $role = CRM_Utils_Array::value($dao->role_name, $caseRoles);
+        // The XML historically has the reverse direction, so look up reverse.
+        $role = CRM_Utils_Array::value($dao->role_name_reverse, $caseRoles);
         if ($role) {
           unset($role['name']);
           $details += $role;
diff --git a/civicrm/CRM/Case/DAO/Case.php b/civicrm/CRM/Case/DAO/Case.php
index 65127b31a5e3f2e32c7bf377fbf3133e81b30edd..9fa6b5aaf27304aa4272fa2f837f82264b21282d 100644
--- a/civicrm/CRM/Case/DAO/Case.php
+++ b/civicrm/CRM/Case/DAO/Case.php
@@ -6,7 +6,7 @@
  *
  * Generated from xml/schema/CRM/Case/Case.xml
  * DO NOT EDIT.  Generated by CRM_Core_CodeGen
- * (GenCodeChecksum:4fa22b57b48574c5e6643b13964140d4)
+ * (GenCodeChecksum:0ff4c2d50e9ecac06f6bae975fb64aba)
  */
 
 /**
diff --git a/civicrm/CRM/Case/DAO/CaseActivity.php b/civicrm/CRM/Case/DAO/CaseActivity.php
index 8a06ae47e932d93bdb7841b655d2b4f606ede7f6..c2a0755fb605a40b4c8ca873e4201a52e82f6e8a 100644
--- a/civicrm/CRM/Case/DAO/CaseActivity.php
+++ b/civicrm/CRM/Case/DAO/CaseActivity.php
@@ -6,7 +6,7 @@
  *
  * Generated from xml/schema/CRM/Case/CaseActivity.xml
  * DO NOT EDIT.  Generated by CRM_Core_CodeGen
- * (GenCodeChecksum:57e9c421eca2efb62ee2eed396c19cd6)
+ * (GenCodeChecksum:555cd1b20eead1100aa77725a7dd2057)
  */
 
 /**
diff --git a/civicrm/CRM/Case/DAO/CaseContact.php b/civicrm/CRM/Case/DAO/CaseContact.php
index ec1a9eb29da02efe595dee7e088b088db6d97917..b9050ee69437af529461e467fce577a1ad9755dd 100644
--- a/civicrm/CRM/Case/DAO/CaseContact.php
+++ b/civicrm/CRM/Case/DAO/CaseContact.php
@@ -6,7 +6,7 @@
  *
  * Generated from xml/schema/CRM/Case/CaseContact.xml
  * DO NOT EDIT.  Generated by CRM_Core_CodeGen
- * (GenCodeChecksum:57c510f7c1c0eb55f8452035a5ecc472)
+ * (GenCodeChecksum:882177c38c507306b2a456e4cf0303fa)
  */
 
 /**
diff --git a/civicrm/CRM/Case/DAO/CaseType.php b/civicrm/CRM/Case/DAO/CaseType.php
index ffd67bb1221e51b7c732c8cf4d40d08cc851f7ec..990d3337cb3a04516ba88b4e97ac26af4f28cd64 100644
--- a/civicrm/CRM/Case/DAO/CaseType.php
+++ b/civicrm/CRM/Case/DAO/CaseType.php
@@ -6,7 +6,7 @@
  *
  * Generated from xml/schema/CRM/Case/CaseType.xml
  * DO NOT EDIT.  Generated by CRM_Core_CodeGen
- * (GenCodeChecksum:a1c00e097da3683e7bb131894bf1aa6d)
+ * (GenCodeChecksum:dfde3b4da5d2f8fd1d41d48398c86e46)
  */
 
 /**
diff --git a/civicrm/CRM/Case/Form/ActivityView.php b/civicrm/CRM/Case/Form/ActivityView.php
index 9d4da771985fd0ef4a5efb278f9309d380bb8a63..6193357e089430f6b642415b72f7f8e01d836149 100644
--- a/civicrm/CRM/Case/Form/ActivityView.php
+++ b/civicrm/CRM/Case/Form/ActivityView.php
@@ -37,7 +37,7 @@ class CRM_Case_Form_ActivityView extends CRM_Core_Form {
     if ($activityID &&
       !CRM_Activity_BAO_Activity::checkPermission($activityID, CRM_Core_Action::VIEW)
     ) {
-      CRM_Core_Error::fatal(ts('You do not have permission to access this page.'));
+      CRM_Core_Error::statusBounce(ts('You do not have permission to access this page.'));
     }
 
     $this->assign('contactID', $contactID);
diff --git a/civicrm/CRM/Case/Form/Search.php b/civicrm/CRM/Case/Form/Search.php
index ffad397c9f49405ae0f691da37de3dedfed5ac7c..e6820681213d9fbf8a1016b5ada01233dc2a7d26 100644
--- a/civicrm/CRM/Case/Form/Search.php
+++ b/civicrm/CRM/Case/Form/Search.php
@@ -62,7 +62,7 @@ class CRM_Case_Form_Search extends CRM_Core_Form_Search {
 
     //check for civicase access.
     if (!CRM_Case_BAO_Case::accessCiviCase()) {
-      CRM_Core_Error::fatal(ts('You are not authorized to access this page.'));
+      CRM_Core_Error::statusBounce(ts('You are not authorized to access this page.'));
     }
 
     //validate case configuration.
@@ -79,6 +79,7 @@ class CRM_Case_Form_Search extends CRM_Core_Form_Search {
     $this->_actionButtonName = $this->getButtonName('next', 'action');
 
     $this->_done = FALSE;
+    $this->sortNameOnly = TRUE;
 
     parent::preProcess();
 
diff --git a/civicrm/CRM/Case/Form/Task/Delete.php b/civicrm/CRM/Case/Form/Task/Delete.php
index 5b82fd731ee2e465e20dc1a7414eabba2b001e43..93909b58eb1c66cf872e1aa8bc8a8e78d2b8ab72 100644
--- a/civicrm/CRM/Case/Form/Task/Delete.php
+++ b/civicrm/CRM/Case/Form/Task/Delete.php
@@ -37,10 +37,12 @@ class CRM_Case_Form_Task_Delete extends CRM_Case_Form_Task {
 
   /**
    * Build all the data structures needed to build the form.
+   *
+   * @throws \CRM_Core_Exception
    */
   public function preProcess() {
     if (!CRM_Core_Permission::checkActionPermission('CiviCase', CRM_Core_Action::DELETE)) {
-      CRM_Core_Error::fatal(ts('You do not have permission to access this page.'));
+      CRM_Core_Error::statusBounce(ts('You do not have permission to access this page.'));
     }
     parent::preProcess();
   }
diff --git a/civicrm/CRM/Case/Page/DashBoard.php b/civicrm/CRM/Case/Page/DashBoard.php
index 5a2d22c304ffb5a4cbb7e542006a0bf3eeee6355..856837855a70826b7665d18f552b73c644fe9271 100644
--- a/civicrm/CRM/Case/Page/DashBoard.php
+++ b/civicrm/CRM/Case/Page/DashBoard.php
@@ -30,7 +30,7 @@ class CRM_Case_Page_DashBoard extends CRM_Core_Page {
   public function preProcess() {
     //check for civicase access.
     if (!CRM_Case_BAO_Case::accessCiviCase()) {
-      CRM_Core_Error::fatal(ts('You are not authorized to access this page.'));
+      CRM_Core_Error::statusBounce(ts('You are not authorized to access this page.'));
     }
 
     //validate case configuration.
diff --git a/civicrm/CRM/Case/Page/Tab.php b/civicrm/CRM/Case/Page/Tab.php
index bcecfe10e189cb43713e2a2703f4cf1b459b3cdb..e89132c3dedb03b506d74f5d6676659fc1bc4237 100644
--- a/civicrm/CRM/Case/Page/Tab.php
+++ b/civicrm/CRM/Case/Page/Tab.php
@@ -53,7 +53,7 @@ class CRM_Case_Page_Tab extends CRM_Core_Page {
         if (!CRM_Core_Permission::check('access all cases and activities')) {
           $userCases = CRM_Case_BAO_Case::getCases(FALSE, ['type' => 'any']);
           if (!array_key_exists($this->_id, $userCases)) {
-            CRM_Core_Error::fatal(ts('You are not authorized to access this page.'));
+            CRM_Core_Error::statusBounce(ts('You are not authorized to access this page.'));
           }
         }
       }
diff --git a/civicrm/CRM/Case/XMLRepository.php b/civicrm/CRM/Case/XMLRepository.php
index 61006f1699c9243b59e2c3fdcfa1f861e4dcdc2d..19ed92f2d0f55a9abc8e5accded9f1dabc68757d 100644
--- a/civicrm/CRM/Case/XMLRepository.php
+++ b/civicrm/CRM/Case/XMLRepository.php
@@ -22,7 +22,8 @@ class CRM_Case_XMLRepository {
   private static $singleton;
 
   /**
-   * @var array<String,SimpleXMLElement>
+   * @var array
+   * <String,SimpleXMLElement>
    */
   protected $xml = [];
 
diff --git a/civicrm/CRM/Contact/BAO/Contact.php b/civicrm/CRM/Contact/BAO/Contact.php
index 51e8334a050df5b296487293d1e3da8a6a93aa18..a392f89ac9690fad839fd39ee0309ddfa46fc32f 100644
--- a/civicrm/CRM/Contact/BAO/Contact.php
+++ b/civicrm/CRM/Contact/BAO/Contact.php
@@ -98,14 +98,14 @@ class CRM_Contact_BAO_Contact extends CRM_Contact_DAO_Contact {
    * @param array $params
    *   (reference) an assoc array of name/value pairs.
    *
-   * @return CRM_Contact_BAO_Contact|CRM_Core_Error|NULL
+   * @return CRM_Contact_DAO_Contact|CRM_Core_Error|NULL
    *   Created or updated contact object or error object.
    *   (error objects are being phased out in favour of exceptions)
    * @throws \Exception
    */
   public static function add(&$params) {
     $contact = new CRM_Contact_DAO_Contact();
-
+    $contactID = CRM_Utils_Array::value('contact_id', $params);
     if (empty($params)) {
       return NULL;
     }
@@ -147,7 +147,7 @@ class CRM_Contact_BAO_Contact extends CRM_Contact_DAO_Contact {
 
     $allNull = $contact->copyValues($params);
 
-    $contact->id = CRM_Utils_Array::value('contact_id', $params);
+    $contact->id = $contactID;
 
     if ($contact->contact_type === 'Individual') {
       $allNull = FALSE;
@@ -186,7 +186,7 @@ class CRM_Contact_BAO_Contact extends CRM_Contact_DAO_Contact {
     // Even if we don't need $employerId, it's important to call getFieldValue() before
     // the contact is saved because we want the existing value to be cached.
     // createCurrentEmployerRelationship() needs the old value not the updated one. CRM-10788
-    $employerId = empty($contact->id) ? NULL : CRM_Core_DAO::getFieldValue('CRM_Contact_DAO_Contact', $contact->id, 'employer_id');
+    $employerId = (!$contactID || $contact->contact_type !== 'Individual') ? NULL : CRM_Core_DAO::getFieldValue('CRM_Contact_DAO_Contact', $contact->id, 'employer_id');
 
     if (!$allNull) {
       $contact->save();
@@ -215,8 +215,8 @@ class CRM_Contact_BAO_Contact extends CRM_Contact_DAO_Contact {
       }
     }
 
-    // Update cached employer name.
-    if ($contact->contact_type === 'Organization') {
+    // Update cached employer name if the name of an existing organization is being updated.
+    if ($contact->contact_type === 'Organization' && !empty($params['organization_name']) && $contactID) {
       CRM_Contact_BAO_Contact_Utils::updateCurrentEmployer($contact->id);
     }
 
@@ -393,16 +393,6 @@ class CRM_Contact_BAO_Contact extends CRM_Contact_DAO_Contact {
       CRM_Core_BAO_CustomValueTable::store($params['custom'], 'civicrm_contact', $contact->id);
     }
 
-    // make a civicrm_subscription_history entry only on contact create (CRM-777)
-    if (empty($params['contact_id'])) {
-      $subscriptionParams = [
-        'contact_id' => $contact->id,
-        'status' => 'Added',
-        'method' => 'Admin',
-      ];
-      CRM_Contact_BAO_SubscriptionHistory::create($subscriptionParams);
-    }
-
     $transaction->commit();
 
     // CRM-6367: fetch the right label for contact type’s display
@@ -1781,7 +1771,7 @@ WHERE     civicrm_contact.id = " . CRM_Utils_Type::escape($id, 'Integer');
    *   A hierarchical property tree if appropriate
    */
   public static function &makeHierReturnProperties($fields, $contactId = NULL) {
-    $locationTypes = CRM_Core_PseudoConstant::get('CRM_Core_DAO_Address', 'location_type_id');
+    $locationTypes = CRM_Core_BAO_Address::buildOptions('location_type_id', 'validate');
 
     $returnProperties = [];
 
diff --git a/civicrm/CRM/Contact/BAO/Contact/Utils.php b/civicrm/CRM/Contact/BAO/Contact/Utils.php
index b7176c4837b9c56337836dc5ef473c49ea024848..5f3a4999538827d6b320ae56d2401158f1952274 100644
--- a/civicrm/CRM/Contact/BAO/Contact/Utils.php
+++ b/civicrm/CRM/Contact/BAO/Contact/Utils.php
@@ -29,6 +29,7 @@ class CRM_Contact_BAO_Contact_Utils {
    *   If profile overlay class should be added.
    *
    * @return string
+   * @throws \CRM_Core_Exception
    */
   public static function getImage($contactType, $urlOnly = FALSE, $contactId = NULL, $addProfileOverlay = TRUE) {
     static $imageInfo = [];
@@ -136,6 +137,7 @@ WHERE  id IN ( $idString )
    *
    * @return array
    *   ( $cs, $ts, $live )
+   * @throws \CRM_Core_Exception
    */
   public static function generateChecksum($entityId, $ts = NULL, $live = NULL, $hash = NULL, $entityType = 'contact', $hashSize = NULL) {
     // return a warning message if we dont get a entityId
@@ -200,6 +202,8 @@ WHERE  id IN ( $idString )
    *
    * @return bool
    *   true if valid, else false
+   *
+   * @throws \CRM_Core_Exception
    */
   public static function validChecksum($contactID, $inputCheck) {
 
@@ -236,6 +240,8 @@ WHERE  id IN ( $idString )
    * @param int $previousEmployerID
    * @param bool $newContact
    *
+   * @throws \CRM_Core_Exception
+   * @throws \CiviCRM_API3_Exception
    */
   public static function createCurrentEmployerRelationship($contactID, $organization, $previousEmployerID = NULL, $newContact = FALSE) {
     //if organization name is passed. CRM-15368,CRM-15547
@@ -266,7 +272,7 @@ WHERE  id IN ( $idString )
       // get the relationship type id of "Employee of"
       $relTypeId = CRM_Core_DAO::getFieldValue('CRM_Contact_DAO_RelationshipType', 'Employee of', 'id', 'name_a_b');
       if (!$relTypeId) {
-        CRM_Core_Error::fatal(ts("You seem to have deleted the relationship type 'Employee of'"));
+        throw new CRM_Core_Exception(ts("You seem to have deleted the relationship type 'Employee of'"));
       }
 
       // create employee of relationship
@@ -312,6 +318,7 @@ WHERE  id IN ( $idString )
    * @param int $previousEmpID
    *
    * @throws CiviCRM_API3_Exception
+   * @throws \CRM_Core_Exception
    */
   public static function currentEmployerRelatedMembership($contactID, $employerID, $relationshipParams, $duplicate = FALSE, $previousEmpID = NULL) {
     $ids = [];
@@ -364,7 +371,7 @@ WHERE contact_a.id ={$contactId} AND contact_b.id={$orgId}; ";
 SET contact_a.organization_name=contact_b.organization_name
 WHERE contact_a.employer_id=contact_b.id AND contact_b.id={$organizationId}; ";
 
-    $dao = CRM_Core_DAO::executeQuery($query);
+    CRM_Core_DAO::executeQuery($query);
   }
 
   /**
@@ -374,6 +381,9 @@ WHERE contact_a.employer_id=contact_b.id AND contact_b.id={$organizationId}; ";
    *   Contact id ( mostly individual contact id).
    * @param int $employerId
    *   Contact id ( mostly organization contact id).
+   *
+   * @throws \CRM_Core_Exception
+   * @throws \CiviCRM_API3_Exception
    */
   public static function clearCurrentEmployer($contactId, $employerId = NULL) {
     $query = "UPDATE civicrm_contact
@@ -390,7 +400,7 @@ WHERE id={$contactId}; ";
       //get the relationship type id of "Employee of"
       $relTypeId = CRM_Core_DAO::getFieldValue('CRM_Contact_DAO_RelationshipType', 'Employee of', 'id', 'name_a_b');
       if (!$relTypeId) {
-        CRM_Core_Error::fatal(ts("You seem to have deleted the relationship type 'Employee of'"));
+        throw new CRM_Core_Exception(ts("You seem to have deleted the relationship type 'Employee of'"));
       }
       $relMembershipParams['relationship_type_id'] = $relTypeId . '_a_b';
       $relMembershipParams['contact_check'][$employerId] = 1;
@@ -424,6 +434,7 @@ WHERE id={$contactId}; ";
    * @param string $title
    *   fieldset title.
    *
+   * @throws \CiviCRM_API3_Exception
    */
   public static function buildOnBehalfForm(&$form, $contactType, $countryID, $stateID, $title) {
     $form->assign('contact_type', $contactType);
@@ -902,7 +913,7 @@ INNER JOIN civicrm_contact contact_target ON ( contact_target.id = act.contact_i
     $allGreetings = CRM_Core_PseudoConstant::greeting($filter);
     $originalGreetingString = $greetingString = CRM_Utils_Array::value($valueID, $allGreetings);
     if (!$greetingString) {
-      CRM_Core_Error::fatal(ts('Incorrect greeting value id %1, or no default greeting for this contact type and greeting type.', [1 => $valueID]));
+      throw new CRM_Core_Exception(ts('Incorrect greeting value id %1, or no default greeting for this contact type and greeting type.', [1 => $valueID]));
     }
 
     // build return properties based on tokens
@@ -1119,7 +1130,9 @@ WHERE id IN (" . implode(',', $contactIds) . ")";
    *
    * @param int $contactId
    *   The hypothetical contact ID
+   *
    * @return bool
+   * @throws \CRM_Core_Exception
    */
   public static function isContactId($contactId) {
     if ($contactId) {
diff --git a/civicrm/CRM/Contact/BAO/Relationship.php b/civicrm/CRM/Contact/BAO/Relationship.php
index 12b23f5242e6be3762de138f55e9a7dd364df934..325ce00de6180eda7e9e47e253461f09e77f703a 100644
--- a/civicrm/CRM/Contact/BAO/Relationship.php
+++ b/civicrm/CRM/Contact/BAO/Relationship.php
@@ -1124,14 +1124,16 @@ WHERE  relationship_type_id = " . CRM_Utils_Type::escape($type, 'Integer');
    *
    * @return array
    *   [select, from, where]
-   * @throws \Exception
+   *
+   * @throws \CRM_Core_Exception
+   * @throws \CiviCRM_API3_Exception
    */
   public static function makeURLClause($contactId, $status, $numRelationship, $count, $relationshipId, $direction, $params = []) {
     $select = $from = $where = '';
 
     $select = '( ';
     if ($count) {
-      if ($direction == 'a_b') {
+      if ($direction === 'a_b') {
         $select .= ' SELECT count(DISTINCT civicrm_relationship.id) as cnt1, 0 as cnt2 ';
       }
       else {
@@ -1166,7 +1168,7 @@ WHERE  relationship_type_id = " . CRM_Utils_Type::escape($type, 'Integer');
                               civicrm_relationship.is_permission_b_a as is_permission_b_a,
                               civicrm_relationship.case_id as case_id';
 
-      if ($direction == 'a_b') {
+      if ($direction === 'a_b') {
         $select .= ', civicrm_relationship_type.label_a_b as label_a_b,
                               civicrm_relationship_type.label_b_a as relation ';
       }
@@ -1176,11 +1178,11 @@ WHERE  relationship_type_id = " . CRM_Utils_Type::escape($type, 'Integer');
       }
     }
 
-    $from = "
+    $from = '
       FROM  civicrm_relationship
 INNER JOIN  civicrm_relationship_type ON ( civicrm_relationship.relationship_type_id = civicrm_relationship_type.id )
-INNER JOIN  civicrm_contact ";
-    if ($direction == 'a_b') {
+INNER JOIN  civicrm_contact ';
+    if ($direction === 'a_b') {
       $from .= 'ON ( civicrm_contact.id = civicrm_relationship.contact_id_a ) ';
     }
     else {
@@ -1188,18 +1190,18 @@ INNER JOIN  civicrm_contact ";
     }
 
     if (!$count) {
-      $from .= "
+      $from .= '
 LEFT JOIN  civicrm_address ON (civicrm_address.contact_id = civicrm_contact.id AND civicrm_address.is_primary = 1)
 LEFT JOIN  civicrm_phone   ON (civicrm_phone.contact_id = civicrm_contact.id AND civicrm_phone.is_primary = 1)
 LEFT JOIN  civicrm_email   ON (civicrm_email.contact_id = civicrm_contact.id AND civicrm_email.is_primary = 1)
 LEFT JOIN  civicrm_state_province ON (civicrm_address.state_province_id = civicrm_state_province.id)
 LEFT JOIN  civicrm_country ON (civicrm_address.country_id = civicrm_country.id)
-";
+';
     }
 
     $where = 'WHERE ( 1 )';
     if ($contactId) {
-      if ($direction == 'a_b') {
+      if ($direction === 'a_b') {
         $where .= ' AND civicrm_relationship.contact_id_b = ' . CRM_Utils_Type::escape($contactId, 'Positive');
       }
       else {
@@ -1245,7 +1247,7 @@ LEFT JOIN  civicrm_country ON (civicrm_address.country_id = civicrm_country.id)
         $where .= ' AND relationship_type_id = ' . CRM_Utils_Type::escape($params['relationship_type_id'], 'Positive');
       }
     }
-    if ($direction == 'a_b') {
+    if ($direction === 'a_b') {
       $where .= ' ) UNION ';
     }
     else {
@@ -1279,7 +1281,9 @@ LEFT JOIN  civicrm_country ON (civicrm_address.country_id = civicrm_country.id)
    *
    * @return array|int
    *   relationship records
-   * @throws \Exception
+   *
+   * @throws \CRM_Core_Exception
+   * @throws \CiviCRM_API3_Exception
    */
   public static function getRelationship(
     $contactId = NULL,
diff --git a/civicrm/CRM/Contact/DAO/ACLContactCache.php b/civicrm/CRM/Contact/DAO/ACLContactCache.php
index b13d0555fa371d366369c3734617db173d8a934a..f41534251394b08bba83e243e6b553a98020e824 100644
--- a/civicrm/CRM/Contact/DAO/ACLContactCache.php
+++ b/civicrm/CRM/Contact/DAO/ACLContactCache.php
@@ -6,7 +6,7 @@
  *
  * Generated from xml/schema/CRM/Contact/ACLContactCache.xml
  * DO NOT EDIT.  Generated by CRM_Core_CodeGen
- * (GenCodeChecksum:ae8316157b30548661674486dac78c39)
+ * (GenCodeChecksum:74b0413eb512bbd0ecddcb1391ce3c3b)
  */
 
 /**
diff --git a/civicrm/CRM/Contact/DAO/Contact.php b/civicrm/CRM/Contact/DAO/Contact.php
index 3c14834a791def875d13779030264536a0b22c2d..99405af76c360a4f6485ce5a69667a1e4ec3740b 100644
--- a/civicrm/CRM/Contact/DAO/Contact.php
+++ b/civicrm/CRM/Contact/DAO/Contact.php
@@ -6,7 +6,7 @@
  *
  * Generated from xml/schema/CRM/Contact/Contact.xml
  * DO NOT EDIT.  Generated by CRM_Core_CodeGen
- * (GenCodeChecksum:b72765d873639076299753a8c4e676d5)
+ * (GenCodeChecksum:773bf2fc16c1af3c283f6ecc7098e927)
  */
 
 /**
@@ -434,6 +434,7 @@ class CRM_Contact_DAO_Contact extends CRM_Core_DAO {
           'size' => CRM_Utils_Type::BIG,
           'where' => 'civicrm_contact.contact_type',
           'export' => TRUE,
+          'contactType' => NULL,
           'table_name' => 'civicrm_contact',
           'entity' => 'Contact',
           'bao' => 'CRM_Contact_BAO_Contact',
@@ -847,6 +848,7 @@ class CRM_Contact_DAO_Contact extends CRM_Core_DAO {
           'headerPattern' => '/^first|(f(irst\s)?name)$/i',
           'dataPattern' => '/^\w+$/',
           'export' => TRUE,
+          'contactType' => 'Individual',
           'table_name' => 'civicrm_contact',
           'entity' => 'Contact',
           'bao' => 'CRM_Contact_BAO_Contact',
@@ -867,6 +869,7 @@ class CRM_Contact_DAO_Contact extends CRM_Core_DAO {
           'headerPattern' => '/^middle|(m(iddle\s)?name)$/i',
           'dataPattern' => '/^\w+$/',
           'export' => TRUE,
+          'contactType' => 'Individual',
           'table_name' => 'civicrm_contact',
           'entity' => 'Contact',
           'bao' => 'CRM_Contact_BAO_Contact',
@@ -887,6 +890,7 @@ class CRM_Contact_DAO_Contact extends CRM_Core_DAO {
           'headerPattern' => '/^last|(l(ast\s)?name)$/i',
           'dataPattern' => '/^\w+(\s\w+)?+$/',
           'export' => TRUE,
+          'contactType' => 'Individual',
           'table_name' => 'civicrm_contact',
           'entity' => 'Contact',
           'bao' => 'CRM_Contact_BAO_Contact',
@@ -905,6 +909,7 @@ class CRM_Contact_DAO_Contact extends CRM_Core_DAO {
           'headerPattern' => '/^(prefix|title)/i',
           'dataPattern' => '/^(mr|ms|mrs|sir|dr)\.?$/i',
           'export' => TRUE,
+          'contactType' => 'Individual',
           'table_name' => 'civicrm_contact',
           'entity' => 'Contact',
           'bao' => 'CRM_Contact_BAO_Contact',
@@ -927,6 +932,7 @@ class CRM_Contact_DAO_Contact extends CRM_Core_DAO {
           'headerPattern' => '/^suffix$/i',
           'dataPattern' => '/^(sr|jr)\.?|i{2,}$/',
           'export' => TRUE,
+          'contactType' => 'Individual',
           'table_name' => 'civicrm_contact',
           'entity' => 'Contact',
           'bao' => 'CRM_Contact_BAO_Contact',
@@ -950,6 +956,7 @@ class CRM_Contact_DAO_Contact extends CRM_Core_DAO {
           'where' => 'civicrm_contact.formal_title',
           'headerPattern' => '/^title/i',
           'export' => TRUE,
+          'contactType' => 'Individual',
           'table_name' => 'civicrm_contact',
           'entity' => 'Contact',
           'bao' => 'CRM_Contact_BAO_Contact',
@@ -1141,6 +1148,7 @@ class CRM_Contact_DAO_Contact extends CRM_Core_DAO {
           'headerPattern' => '/^job|(j(ob\s)?title)$/i',
           'dataPattern' => '//',
           'export' => TRUE,
+          'contactType' => 'Individual',
           'table_name' => 'civicrm_contact',
           'entity' => 'Contact',
           'bao' => 'CRM_Contact_BAO_Contact',
@@ -1158,6 +1166,7 @@ class CRM_Contact_DAO_Contact extends CRM_Core_DAO {
           'where' => 'civicrm_contact.gender_id',
           'headerPattern' => '/^gender$/i',
           'export' => TRUE,
+          'contactType' => 'Individual',
           'table_name' => 'civicrm_contact',
           'entity' => 'Contact',
           'bao' => 'CRM_Contact_BAO_Contact',
@@ -1180,6 +1189,7 @@ class CRM_Contact_DAO_Contact extends CRM_Core_DAO {
           'headerPattern' => '/^birth|(b(irth\s)?date)|D(\W*)O(\W*)B(\W*)$/i',
           'dataPattern' => '/\d{4}-?\d{2}-?\d{2}/',
           'export' => TRUE,
+          'contactType' => 'Individual',
           'table_name' => 'civicrm_contact',
           'entity' => 'Contact',
           'bao' => 'CRM_Contact_BAO_Contact',
@@ -1197,6 +1207,7 @@ class CRM_Contact_DAO_Contact extends CRM_Core_DAO {
           'where' => 'civicrm_contact.is_deceased',
           'headerPattern' => '/i(s\s)?d(eceased)$/i',
           'export' => TRUE,
+          'contactType' => 'Individual',
           'default' => '0',
           'table_name' => 'civicrm_contact',
           'entity' => 'Contact',
@@ -1215,6 +1226,7 @@ class CRM_Contact_DAO_Contact extends CRM_Core_DAO {
           'where' => 'civicrm_contact.deceased_date',
           'headerPattern' => '/^deceased|(d(eceased\s)?date)$/i',
           'export' => TRUE,
+          'contactType' => 'Individual',
           'table_name' => 'civicrm_contact',
           'entity' => 'Contact',
           'bao' => 'CRM_Contact_BAO_Contact',
@@ -1236,6 +1248,7 @@ class CRM_Contact_DAO_Contact extends CRM_Core_DAO {
           'headerPattern' => '/^household|(h(ousehold\s)?name)$/i',
           'dataPattern' => '/^\w+$/',
           'export' => TRUE,
+          'contactType' => 'Household',
           'table_name' => 'civicrm_contact',
           'entity' => 'Contact',
           'bao' => 'CRM_Contact_BAO_Contact',
@@ -1250,6 +1263,7 @@ class CRM_Contact_DAO_Contact extends CRM_Core_DAO {
           'title' => ts('Household Primary Contact ID'),
           'description' => ts('Optional FK to Primary Contact for this household.'),
           'where' => 'civicrm_contact.primary_contact_id',
+          'contactType' => 'Household',
           'table_name' => 'civicrm_contact',
           'entity' => 'Contact',
           'bao' => 'CRM_Contact_BAO_Contact',
@@ -1268,6 +1282,7 @@ class CRM_Contact_DAO_Contact extends CRM_Core_DAO {
           'headerPattern' => '/^organization|(o(rganization\s)?name)$/i',
           'dataPattern' => '/^\w+$/',
           'export' => TRUE,
+          'contactType' => 'Organization',
           'table_name' => 'civicrm_contact',
           'entity' => 'Contact',
           'bao' => 'CRM_Contact_BAO_Contact',
@@ -1287,6 +1302,7 @@ class CRM_Contact_DAO_Contact extends CRM_Core_DAO {
           'where' => 'civicrm_contact.sic_code',
           'headerPattern' => '/^sic|(s(ic\s)?code)$/i',
           'export' => TRUE,
+          'contactType' => 'Organization',
           'table_name' => 'civicrm_contact',
           'entity' => 'Contact',
           'bao' => 'CRM_Contact_BAO_Contact',
@@ -1323,6 +1339,7 @@ class CRM_Contact_DAO_Contact extends CRM_Core_DAO {
           'description' => ts('OPTIONAL FK to civicrm_contact record.'),
           'where' => 'civicrm_contact.employer_id',
           'export' => TRUE,
+          'contactType' => 'Individual',
           'table_name' => 'civicrm_contact',
           'entity' => 'Contact',
           'bao' => 'CRM_Contact_BAO_Contact',
diff --git a/civicrm/CRM/Contact/DAO/ContactType.php b/civicrm/CRM/Contact/DAO/ContactType.php
index a2eb023c7e60622f7d5ca2110fce73de1ba54c46..b8fbb30568e0ae9dbfe09b9c37740c3cae58c665 100644
--- a/civicrm/CRM/Contact/DAO/ContactType.php
+++ b/civicrm/CRM/Contact/DAO/ContactType.php
@@ -6,7 +6,7 @@
  *
  * Generated from xml/schema/CRM/Contact/ContactType.xml
  * DO NOT EDIT.  Generated by CRM_Core_CodeGen
- * (GenCodeChecksum:d96dfa7e002831e18c602df130626dbb)
+ * (GenCodeChecksum:3ad338181596a9b5e3a9f6549fd381c9)
  */
 
 /**
diff --git a/civicrm/CRM/Contact/DAO/DashboardContact.php b/civicrm/CRM/Contact/DAO/DashboardContact.php
index 2711365db8e2472c452f82960161d5b5e8f58080..9870459a87c0a1a1717f187913bf1424537475af 100644
--- a/civicrm/CRM/Contact/DAO/DashboardContact.php
+++ b/civicrm/CRM/Contact/DAO/DashboardContact.php
@@ -6,7 +6,7 @@
  *
  * Generated from xml/schema/CRM/Contact/DashboardContact.xml
  * DO NOT EDIT.  Generated by CRM_Core_CodeGen
- * (GenCodeChecksum:c1c463648cc70fd1f1d023aefe4eed76)
+ * (GenCodeChecksum:e2e825929c6c5404e7649fdde3162597)
  */
 
 /**
diff --git a/civicrm/CRM/Contact/DAO/Group.php b/civicrm/CRM/Contact/DAO/Group.php
index ce6481ef173d95905457c67d221b3de196787f44..ac08331c79809bfc61f263919fe44570836ffa48 100644
--- a/civicrm/CRM/Contact/DAO/Group.php
+++ b/civicrm/CRM/Contact/DAO/Group.php
@@ -6,7 +6,7 @@
  *
  * Generated from xml/schema/CRM/Contact/Group.xml
  * DO NOT EDIT.  Generated by CRM_Core_CodeGen
- * (GenCodeChecksum:fbbb4f322f030f3dab859acf2b47276a)
+ * (GenCodeChecksum:d166e1dc365b62901602a50d4fb8b727)
  */
 
 /**
diff --git a/civicrm/CRM/Contact/DAO/GroupContact.php b/civicrm/CRM/Contact/DAO/GroupContact.php
index e60843a92483babb77d2fed1ca53e817e0bdf4cc..6eac2f5d0f70590bb3cc3f9301f914a59146fd20 100644
--- a/civicrm/CRM/Contact/DAO/GroupContact.php
+++ b/civicrm/CRM/Contact/DAO/GroupContact.php
@@ -6,7 +6,7 @@
  *
  * Generated from xml/schema/CRM/Contact/GroupContact.xml
  * DO NOT EDIT.  Generated by CRM_Core_CodeGen
- * (GenCodeChecksum:2c54dc849ac565362f938a8145f5f0fb)
+ * (GenCodeChecksum:dcc7fe36954bd34340026bb6af5235ef)
  */
 
 /**
diff --git a/civicrm/CRM/Contact/DAO/GroupContactCache.php b/civicrm/CRM/Contact/DAO/GroupContactCache.php
index 462f4c66ffad94dd1da2348e4cd704476283f03d..621584fd56d9d3ebbd63f446b7d4f25003e09e3f 100644
--- a/civicrm/CRM/Contact/DAO/GroupContactCache.php
+++ b/civicrm/CRM/Contact/DAO/GroupContactCache.php
@@ -6,7 +6,7 @@
  *
  * Generated from xml/schema/CRM/Contact/GroupContactCache.xml
  * DO NOT EDIT.  Generated by CRM_Core_CodeGen
- * (GenCodeChecksum:9cfbab3bf59940215b561454a69a9656)
+ * (GenCodeChecksum:e0978847d01b9b3f7819759f8171344c)
  */
 
 /**
diff --git a/civicrm/CRM/Contact/DAO/GroupNesting.php b/civicrm/CRM/Contact/DAO/GroupNesting.php
index 65748237f763054dcd37416eca076a5fede12ef5..ffa4501a3b05fc7535b30401a9e5150f3cc6a3d5 100644
--- a/civicrm/CRM/Contact/DAO/GroupNesting.php
+++ b/civicrm/CRM/Contact/DAO/GroupNesting.php
@@ -6,7 +6,7 @@
  *
  * Generated from xml/schema/CRM/Contact/GroupNesting.xml
  * DO NOT EDIT.  Generated by CRM_Core_CodeGen
- * (GenCodeChecksum:11d9e300c63cb3bae2af0077456cce0b)
+ * (GenCodeChecksum:3dbfee8b12a7e1edeaaf4ead4e48db7e)
  */
 
 /**
diff --git a/civicrm/CRM/Contact/DAO/GroupOrganization.php b/civicrm/CRM/Contact/DAO/GroupOrganization.php
index 869c4c2d5fe6e563c0d724e838ffef3a8f378840..712628dc3bbee81831970fbe73962bf7a81a41ba 100644
--- a/civicrm/CRM/Contact/DAO/GroupOrganization.php
+++ b/civicrm/CRM/Contact/DAO/GroupOrganization.php
@@ -6,7 +6,7 @@
  *
  * Generated from xml/schema/CRM/Contact/GroupOrganization.xml
  * DO NOT EDIT.  Generated by CRM_Core_CodeGen
- * (GenCodeChecksum:c921c7d49f23f8d8afa07773da5b5da3)
+ * (GenCodeChecksum:fad51ea5930a191661af5319a25e99c7)
  */
 
 /**
diff --git a/civicrm/CRM/Contact/DAO/Relationship.php b/civicrm/CRM/Contact/DAO/Relationship.php
index 1ebc97a6c69e280a6071626b1ec7b9065c345b71..3602e3afd1e2e89c97a634e558d1507a46c8a478 100644
--- a/civicrm/CRM/Contact/DAO/Relationship.php
+++ b/civicrm/CRM/Contact/DAO/Relationship.php
@@ -6,7 +6,7 @@
  *
  * Generated from xml/schema/CRM/Contact/Relationship.xml
  * DO NOT EDIT.  Generated by CRM_Core_CodeGen
- * (GenCodeChecksum:38f9835d4c6a217b4550124bd39cbbf1)
+ * (GenCodeChecksum:376227269d8c1c224c357387d0862a9f)
  */
 
 /**
diff --git a/civicrm/CRM/Contact/DAO/RelationshipType.php b/civicrm/CRM/Contact/DAO/RelationshipType.php
index 655ba0a46a2fc84b7f206100e14b85c426a3caf0..b0b7bb8300a4390b057c7641708bd2f35c267beb 100644
--- a/civicrm/CRM/Contact/DAO/RelationshipType.php
+++ b/civicrm/CRM/Contact/DAO/RelationshipType.php
@@ -6,7 +6,7 @@
  *
  * Generated from xml/schema/CRM/Contact/RelationshipType.xml
  * DO NOT EDIT.  Generated by CRM_Core_CodeGen
- * (GenCodeChecksum:6442ad1ae7850007792bbbfa0226cb4a)
+ * (GenCodeChecksum:727adcb362121a8c027992f37aa8e7f6)
  */
 
 /**
diff --git a/civicrm/CRM/Contact/DAO/SavedSearch.php b/civicrm/CRM/Contact/DAO/SavedSearch.php
index cb59414b1526ce98480b2142baf3b8f57db4e25e..ce0af2a0504074e53aae2bbd45a164c2689b0114 100644
--- a/civicrm/CRM/Contact/DAO/SavedSearch.php
+++ b/civicrm/CRM/Contact/DAO/SavedSearch.php
@@ -6,7 +6,7 @@
  *
  * Generated from xml/schema/CRM/Contact/SavedSearch.xml
  * DO NOT EDIT.  Generated by CRM_Core_CodeGen
- * (GenCodeChecksum:88f2f400312a1ae04a4cfde200d64c8d)
+ * (GenCodeChecksum:c0d6f65e0f3115ac3349b5fb1ad0baac)
  */
 
 /**
diff --git a/civicrm/CRM/Contact/DAO/SubscriptionHistory.php b/civicrm/CRM/Contact/DAO/SubscriptionHistory.php
index 34dfdd2bbb0a08b616c1c1061878ca57045d5553..29f6238d9f18bbe16e4aa84cac1ee97fe723c882 100644
--- a/civicrm/CRM/Contact/DAO/SubscriptionHistory.php
+++ b/civicrm/CRM/Contact/DAO/SubscriptionHistory.php
@@ -6,7 +6,7 @@
  *
  * Generated from xml/schema/CRM/Contact/SubscriptionHistory.xml
  * DO NOT EDIT.  Generated by CRM_Core_CodeGen
- * (GenCodeChecksum:161f6ed400e9511cd2e5751941634cc4)
+ * (GenCodeChecksum:28bbce4d536484d73c7ade80e3ec9448)
  */
 
 /**
diff --git a/civicrm/CRM/Contact/Form/Search.php b/civicrm/CRM/Contact/Form/Search.php
index ade94bddf138c285ebc86bb2f4ebc3426e640fd2..eca29eb4d4e3672de0def4272c1f30207962a654 100644
--- a/civicrm/CRM/Contact/Form/Search.php
+++ b/civicrm/CRM/Contact/Form/Search.php
@@ -727,15 +727,9 @@ class CRM_Contact_Form_Search extends CRM_Core_Form_Search {
        * values that potentially change the controller behavior. i.e. things
        * like totalCount etc
        */
-      $sortID = NULL;
-      if ($this->get(CRM_Utils_Sort::SORT_ID)) {
-        $sortID = CRM_Utils_Sort::sortIDValue($this->get(CRM_Utils_Sort::SORT_ID),
-          $this->get(CRM_Utils_Sort::SORT_DIRECTION)
-        );
-      }
       $controller = new CRM_Contact_Selector_Controller($selector,
         $this->get(CRM_Utils_Pager::PAGE_ID),
-        $sortID,
+        $this->getSortID(),
         CRM_Core_Action::VIEW, $this, CRM_Core_Selector_Controller::TRANSFER
       );
       $controller->setEmbedded(TRUE);
@@ -855,15 +849,9 @@ class CRM_Contact_Form_Search extends CRM_Core_Form_Search {
         }
       }
 
-      $sortID = NULL;
-      if ($this->get(CRM_Utils_Sort::SORT_ID)) {
-        $sortID = CRM_Utils_Sort::sortIDValue($this->get(CRM_Utils_Sort::SORT_ID),
-          $this->get(CRM_Utils_Sort::SORT_DIRECTION)
-        );
-      }
       $controller = new CRM_Contact_Selector_Controller($selector,
         $this->get(CRM_Utils_Pager::PAGE_ID),
-        $sortID,
+        $this->getSortID(),
         CRM_Core_Action::VIEW,
         $this,
         $output
diff --git a/civicrm/CRM/Contact/Form/Search/Advanced.php b/civicrm/CRM/Contact/Form/Search/Advanced.php
index 74479bfeffd49752d9a5fcb894f03684a55c1c53..6a4127b25aaf0ab90617e721c56d6c883f653415 100644
--- a/civicrm/CRM/Contact/Form/Search/Advanced.php
+++ b/civicrm/CRM/Contact/Form/Search/Advanced.php
@@ -318,7 +318,6 @@ class CRM_Contact_Form_Search_Advanced extends CRM_Contact_Form_Search {
       'contribution_soft_credit_type_id',
       'contribution_status',
       'contribution_status_id',
-      'contribution_source',
       'membership_status_id',
       'participant_status_id',
       'contribution_trxn_id',
diff --git a/civicrm/CRM/Contact/Form/Search/Custom/Group.php b/civicrm/CRM/Contact/Form/Search/Custom/Group.php
index 6069b1672203d3f1169e5e131c0975b06b95d707..4dcb40dceb2bb33f1a4b137b6caabf2bae2f3f2b 100644
--- a/civicrm/CRM/Contact/Form/Search/Custom/Group.php
+++ b/civicrm/CRM/Contact/Form/Search/Custom/Group.php
@@ -19,42 +19,46 @@ class CRM_Contact_Form_Search_Custom_Group extends CRM_Contact_Form_Search_Custo
   protected $_formValues;
 
   /**
-   * @var CRM_Utils_SQL_TemTable Object
+   * @var \CRM_Utils_SQL_TemTable
    */
   protected $_xGTable = NULL;
 
   /**
-   * @var CRM_Utils_SQL_TempTable object
+   * @var \CRM_Utils_SQL_TempTable
    */
   protected $_iGTable = NULL;
 
   /**
-   * @var string Table Name for xclude Groups
+   * @var string
+   * Table Name for xclude Groups
    */
   protected $_xGTableName = NULL;
 
   /**
-   * @var string Table Name for Inclue Groups
+   * @var string
+   * Table Name for Inclue Groups
    */
   protected $_iGTableName = NULL;
 
   /**
-   * @var CRM_Utils_SQL_TemTable Object
+   * @var \CRM_Utils_SQL_TempTable
    */
   protected $_xTTable = NULL;
 
   /**
-   * @var CRM_Utils_SQL_TempTable object
+   * @var \CRM_Utils_SQL_TempTable
    */
   protected $_iTTable = NULL;
 
   /**
-   * @var string Table Name for xclude Groups
+   * @var string
+   * Table Name for xclude Groups
    */
   protected $_xTTableName = NULL;
 
   /**
-   * @var string Table Name for Inclue Groups
+   * @var string
+   * Table Name for Inclue Groups
    */
   protected $_iTTableName = NULL;
 
diff --git a/civicrm/CRM/Contact/Form/Task/SaveSearch.php b/civicrm/CRM/Contact/Form/Task/SaveSearch.php
index 35d16a3d53f20b8949b0db0d4942f3e60f3d50fb..f8114ce8d1d53511c2b3f4ce0688ddf4079ab060 100644
--- a/civicrm/CRM/Contact/Form/Task/SaveSearch.php
+++ b/civicrm/CRM/Contact/Form/Task/SaveSearch.php
@@ -74,11 +74,11 @@ class CRM_Contact_Form_Task_SaveSearch extends CRM_Contact_Form_Task {
     $formValues = $this->controller->exportValues();
 
     // the name and description are actually stored with the group and not the saved search
-    $this->add('text', 'title', ts('Name'),
+    $this->add('text', 'title', ts('Group Title'),
       CRM_Core_DAO::getAttribute('CRM_Contact_DAO_Group', 'title'), TRUE
     );
 
-    $this->addElement('textarea', 'description', ts('Description'),
+    $this->addElement('textarea', 'description', ts('Group Description'),
       CRM_Core_DAO::getAttribute('CRM_Contact_DAO_Group', 'description')
     );
 
@@ -121,7 +121,7 @@ class CRM_Contact_Form_Task_SaveSearch extends CRM_Contact_Form_Task {
       $this->addDefaultButtons(ts('Save Smart Group'));
       $this->assign('partiallySelected', $formValues['radio_ts'] != 'ts_all');
     }
-    $this->addRule('title', ts('Name already exists in Database.'),
+    $this->addRule('title', ts('Group Title already exists in Database.'),
       'objectExists', ['CRM_Contact_DAO_Group', $groupID, 'title']
     );
   }
diff --git a/civicrm/CRM/Contact/Form/Task/SaveSearch/Update.php b/civicrm/CRM/Contact/Form/Task/SaveSearch/Update.php
index 00f543cc06cd97a5ac7f364e3d8212e3e474929b..72a4b81dcd4ed9e0b0801bfcef4a0b7b9b10117f 100644
--- a/civicrm/CRM/Contact/Form/Task/SaveSearch/Update.php
+++ b/civicrm/CRM/Contact/Form/Task/SaveSearch/Update.php
@@ -47,6 +47,15 @@ class CRM_Contact_Form_Task_SaveSearch_Update extends CRM_Contact_Form_Task_Save
     $params = ['saved_search_id' => $this->_id];
     CRM_Contact_BAO_Group::retrieve($params, $defaults);
 
+    if (!empty($defaults['group_type'])) {
+      $types = explode(CRM_Core_DAO::VALUE_SEPARATOR,
+        substr($defaults['group_type'], 1, -1)
+      );
+      $defaults['group_type'] = array();
+      foreach ($types as $type) {
+        $defaults['group_type'][$type] = 1;
+      }
+    }
     return $defaults;
   }
 
diff --git a/civicrm/CRM/Contact/Page/View/UserDashBoard.php b/civicrm/CRM/Contact/Page/View/UserDashBoard.php
index c7938aff495b26e530fc8024f561cc899dafd71b..538dbd9bf19640545104dcbce7ebdbc6009c78aa 100644
--- a/civicrm/CRM/Contact/Page/View/UserDashBoard.php
+++ b/civicrm/CRM/Contact/Page/View/UserDashBoard.php
@@ -62,7 +62,7 @@ class CRM_Contact_Page_View_UserDashBoard extends CRM_Core_Page {
     }
     elseif ($this->_contactId != $userID && !$validUser) {
       if (!CRM_Contact_BAO_Contact_Permission::allow($this->_contactId, CRM_Core_Permission::VIEW)) {
-        CRM_Core_Error::fatal(ts('You do not have permission to access this contact.'));
+        CRM_Core_Error::statusBounce(ts('You do not have permission to access this contact.'));
       }
       if (!CRM_Contact_BAO_Contact_Permission::allow($this->_contactId, CRM_Core_Permission::EDIT)) {
         $this->_edit = FALSE;
diff --git a/civicrm/CRM/Contact/Selector.php b/civicrm/CRM/Contact/Selector.php
index 45a5b7afd13c39adb69ed075224b0cd26e93e790..f9ddd8e9549d4e0681e33da5aa25fceb9cbe10d8 100644
--- a/civicrm/CRM/Contact/Selector.php
+++ b/civicrm/CRM/Contact/Selector.php
@@ -195,6 +195,13 @@ class CRM_Contact_Selector extends CRM_Core_Selector_Base implements CRM_Core_Se
       $this->_returnProperties['contact_type'] = 1;
       $this->_returnProperties['contact_sub_type'] = 1;
       $this->_returnProperties['sort_name'] = 1;
+      if (!empty($this->_returnProperties['location']) && is_array($this->_returnProperties['location'])) {
+        foreach ($this->_returnProperties['location'] as $key => $property) {
+          if (!empty($property['email'])) {
+            $this->_returnProperties['location'][$key]['on_hold'] = 1;
+          }
+        }
+      }
     }
 
     $displayRelationshipType = CRM_Utils_Array::value('display_relationship_type', $this->_formValues);
@@ -708,6 +715,15 @@ class CRM_Contact_Selector extends CRM_Core_Selector_Base implements CRM_Core_Se
           }
           $row[$property] = $websiteUrl;
         }
+        elseif (strpos($property, '-email') !== FALSE) {
+          list($locType) = explode("-email", $property);
+          $onholdProperty = "{$locType}-on_hold";
+
+          $row[$property] = isset($result->$property) ? $result->$property : NULL;
+          if (!empty($row[$property]) && !empty($result->$onholdProperty)) {
+            $row[$property] .= " (On Hold)";
+          }
+        }
         else {
           $row[$property] = isset($result->$property) ? $result->$property : NULL;
         }
diff --git a/civicrm/CRM/Contribute/BAO/Contribution.php b/civicrm/CRM/Contribute/BAO/Contribution.php
index 1d20266e82d3c27fc890a17ca0049df628e47e46..fb1ad57ab9ae8300c70833310e344aae039d3e66 100644
--- a/civicrm/CRM/Contribute/BAO/Contribution.php
+++ b/civicrm/CRM/Contribute/BAO/Contribution.php
@@ -50,7 +50,8 @@ class CRM_Contribute_BAO_Contribution extends CRM_Contribute_DAO_Contribution {
    * This is used for composing messages because they have dependency on the
    * contribution_page or event page - although over time we may eliminate that
    *
-   * @var "contribution"\"event"
+   * @var string
+   * "contribution"\"event"
    */
   public $_component = NULL;
 
@@ -1992,7 +1993,9 @@ LEFT JOIN  civicrm_contribution contribution ON ( componentPayment.contribution_
    * @param bool $processContributionObject
    *
    * @return array
-   * @throws \Exception
+   *
+   * @throws CRM_Core_Exception
+   * @throws \CiviCRM_API3_Exception
    * @deprecated
    *
    * Use api contribute.completetransaction
diff --git a/civicrm/CRM/Contribute/DAO/Contribution.php b/civicrm/CRM/Contribute/DAO/Contribution.php
index 0d5576c51af58cce8c155e87174a28a15d95f230..d56ce8b8c62382dc9b6a473a52c04bf38aa26988 100644
--- a/civicrm/CRM/Contribute/DAO/Contribution.php
+++ b/civicrm/CRM/Contribute/DAO/Contribution.php
@@ -6,7 +6,7 @@
  *
  * Generated from xml/schema/CRM/Contribute/Contribution.xml
  * DO NOT EDIT.  Generated by CRM_Core_CodeGen
- * (GenCodeChecksum:a9f83aa612e82ee87ace74e75fe23466)
+ * (GenCodeChecksum:389ae44affe94e52a14c9c6daa79be1d)
  */
 
 /**
diff --git a/civicrm/CRM/Contribute/DAO/ContributionPage.php b/civicrm/CRM/Contribute/DAO/ContributionPage.php
index 299345b8a718703a4f4978014365156c451c49fb..7f73b6daa3973612bd1a8e5423214eeaad99c885 100644
--- a/civicrm/CRM/Contribute/DAO/ContributionPage.php
+++ b/civicrm/CRM/Contribute/DAO/ContributionPage.php
@@ -6,7 +6,7 @@
  *
  * Generated from xml/schema/CRM/Contribute/ContributionPage.xml
  * DO NOT EDIT.  Generated by CRM_Core_CodeGen
- * (GenCodeChecksum:35e26556fcbed13acc434279f2ebaee5)
+ * (GenCodeChecksum:382259aca3342191a285c0984cab168b)
  */
 
 /**
diff --git a/civicrm/CRM/Contribute/DAO/ContributionProduct.php b/civicrm/CRM/Contribute/DAO/ContributionProduct.php
index f2e804722b62ac87c244aaea2436c52f460ed46e..b938f4a6e915f18dc165d3f598deb1c8aa490007 100644
--- a/civicrm/CRM/Contribute/DAO/ContributionProduct.php
+++ b/civicrm/CRM/Contribute/DAO/ContributionProduct.php
@@ -6,7 +6,7 @@
  *
  * Generated from xml/schema/CRM/Contribute/ContributionProduct.xml
  * DO NOT EDIT.  Generated by CRM_Core_CodeGen
- * (GenCodeChecksum:ff8ff52e402d36b2d488ec5cda68ff12)
+ * (GenCodeChecksum:559257fd322f405c912fe7507fcb1cb3)
  */
 
 /**
diff --git a/civicrm/CRM/Contribute/DAO/ContributionRecur.php b/civicrm/CRM/Contribute/DAO/ContributionRecur.php
index 368ef101c97389cd5c2e4705f9c9a83ac4d972ab..060a304ed0eedf8dba24618ae4ae841f34fe6541 100644
--- a/civicrm/CRM/Contribute/DAO/ContributionRecur.php
+++ b/civicrm/CRM/Contribute/DAO/ContributionRecur.php
@@ -6,7 +6,7 @@
  *
  * Generated from xml/schema/CRM/Contribute/ContributionRecur.xml
  * DO NOT EDIT.  Generated by CRM_Core_CodeGen
- * (GenCodeChecksum:f88b64f09ed0362f6d630038f0a47686)
+ * (GenCodeChecksum:d0c493bb1a98e2b75ebaceb330a40fb4)
  */
 
 /**
diff --git a/civicrm/CRM/Contribute/DAO/ContributionSoft.php b/civicrm/CRM/Contribute/DAO/ContributionSoft.php
index 3bb58a2dd0452122cba4ede5de1e95a17e04f156..47e60a3f44b8e50f82970f9c5b21665fe4842c70 100644
--- a/civicrm/CRM/Contribute/DAO/ContributionSoft.php
+++ b/civicrm/CRM/Contribute/DAO/ContributionSoft.php
@@ -6,7 +6,7 @@
  *
  * Generated from xml/schema/CRM/Contribute/ContributionSoft.xml
  * DO NOT EDIT.  Generated by CRM_Core_CodeGen
- * (GenCodeChecksum:4b5e273fabfbab2591c227fed3d0214a)
+ * (GenCodeChecksum:7fbb150189946e587cb80c075945e5ba)
  */
 
 /**
diff --git a/civicrm/CRM/Contribute/DAO/Premium.php b/civicrm/CRM/Contribute/DAO/Premium.php
index f740ab030297d8060aa12436e2a7b989888fe9c1..48741f75d78bf66989bdc6cd5be0fb55de4647cc 100644
--- a/civicrm/CRM/Contribute/DAO/Premium.php
+++ b/civicrm/CRM/Contribute/DAO/Premium.php
@@ -6,7 +6,7 @@
  *
  * Generated from xml/schema/CRM/Contribute/Premium.xml
  * DO NOT EDIT.  Generated by CRM_Core_CodeGen
- * (GenCodeChecksum:58eb4aacd3084c54c8c6847bdc7c0b0e)
+ * (GenCodeChecksum:cd90a0aedd51eaf91e1977705e80071f)
  */
 
 /**
diff --git a/civicrm/CRM/Contribute/DAO/PremiumsProduct.php b/civicrm/CRM/Contribute/DAO/PremiumsProduct.php
index 19df461ef5b4c4ed9ac6159aaa20f0bbdb5786fb..1b03fc00d81fb5b66a84dd59c2bb84f29404f510 100644
--- a/civicrm/CRM/Contribute/DAO/PremiumsProduct.php
+++ b/civicrm/CRM/Contribute/DAO/PremiumsProduct.php
@@ -6,7 +6,7 @@
  *
  * Generated from xml/schema/CRM/Contribute/PremiumsProduct.xml
  * DO NOT EDIT.  Generated by CRM_Core_CodeGen
- * (GenCodeChecksum:c165125a7d8f92c40a68bdad3715d28d)
+ * (GenCodeChecksum:444f1def563a1e986ddf0ac56f5b2e84)
  */
 
 /**
diff --git a/civicrm/CRM/Contribute/DAO/Product.php b/civicrm/CRM/Contribute/DAO/Product.php
index 29659121b25e1f2c7aed60c22b562c83cf610af2..f474e3a7935f6e604ca4f96560ad831d71e5bab4 100644
--- a/civicrm/CRM/Contribute/DAO/Product.php
+++ b/civicrm/CRM/Contribute/DAO/Product.php
@@ -6,7 +6,7 @@
  *
  * Generated from xml/schema/CRM/Contribute/Product.xml
  * DO NOT EDIT.  Generated by CRM_Core_CodeGen
- * (GenCodeChecksum:8036ec1084e88e8fcd65e69072592388)
+ * (GenCodeChecksum:0af317e71745b39afb378570922fab90)
  */
 
 /**
diff --git a/civicrm/CRM/Contribute/DAO/Widget.php b/civicrm/CRM/Contribute/DAO/Widget.php
index db6cd27933d2bac93b9cfb39b1f73dac2a89cc5a..5591ae497decfcb28f9de71842deb55bf9949d9c 100644
--- a/civicrm/CRM/Contribute/DAO/Widget.php
+++ b/civicrm/CRM/Contribute/DAO/Widget.php
@@ -6,7 +6,7 @@
  *
  * Generated from xml/schema/CRM/Contribute/Widget.xml
  * DO NOT EDIT.  Generated by CRM_Core_CodeGen
- * (GenCodeChecksum:a1f9bf066d659e32e32cd324aeb7a286)
+ * (GenCodeChecksum:4a3f77ad3185fba0d0c083a1000336b7)
  */
 
 /**
diff --git a/civicrm/CRM/Contribute/Form/CancelSubscription.php b/civicrm/CRM/Contribute/Form/CancelSubscription.php
index 407bf0d5cd60fcd23b2ad4a74278fd6c52a55dbf..e02ae64bb5860f1c211cf476dd5a5b2de209cfc8 100644
--- a/civicrm/CRM/Contribute/Form/CancelSubscription.php
+++ b/civicrm/CRM/Contribute/Form/CancelSubscription.php
@@ -203,8 +203,15 @@ class CRM_Contribute_Form_CancelSubscription extends CRM_Contribute_Form_Contrib
     }
 
     if (CRM_Utils_Array::value('send_cancel_request', $params) == 1) {
+      // Note the 'subscriptionId' here is the value stored in
+      // civicrm_contribution_recur.processor_id
       $cancelParams = ['subscriptionId' => $this->_subscriptionDetails->subscription_id];
-      $cancelSubscription = $this->_paymentProcessorObj->cancelSubscription($message, $cancelParams);
+      try {
+        $cancelSubscription = $this->_paymentProcessorObj->cancelSubscription($message, $cancelParams);
+      }
+      catch (\Civi\Payment\Exception\PaymentProcessorException $e) {
+        CRM_Core_Error::statusBounce($e->getMessage());
+      }
     }
 
     if (is_a($cancelSubscription, 'CRM_Core_Error')) {
diff --git a/civicrm/CRM/Contribute/Form/Contribution.php b/civicrm/CRM/Contribute/Form/Contribution.php
index c9fe2167443ec58ceb103adfac73d5da3c79e8a3..04fa3e074a952d11d1be0cb61c9e7a46c27e3688 100644
--- a/civicrm/CRM/Contribute/Form/Contribution.php
+++ b/civicrm/CRM/Contribute/Form/Contribution.php
@@ -215,8 +215,7 @@ class CRM_Contribute_Form_Contribution extends CRM_Contribute_Form_AbstractEditP
   public function preProcess() {
     // Check permission for action.
     if (!CRM_Core_Permission::checkActionPermission('CiviContribute', $this->_action)) {
-      // @todo replace with throw new CRM_Core_Exception().
-      CRM_Core_Error::fatal(ts('You do not have permission to access this page.'));
+      CRM_Core_Error::statusBounce(ts('You do not have permission to access this page.'));
     }
 
     parent::preProcess();
@@ -481,7 +480,7 @@ class CRM_Contribute_Form_Contribution extends CRM_Contribute_Form_AbstractEditP
       $financialTypeID = CRM_Contribute_PseudoConstant::financialType($this->_values['financial_type_id']);
       CRM_Financial_BAO_FinancialType::checkPermissionedLineItems($this->_id, 'edit');
       if (!CRM_Core_Permission::check('edit contributions of type ' . $financialTypeID)) {
-        CRM_Core_Error::fatal(ts('You do not have permission to access this page.'));
+        CRM_Core_Error::statusBounce(ts('You do not have permission to access this page.'));
       }
     }
     $allPanes = [];
@@ -1380,7 +1379,7 @@ class CRM_Contribute_Form_Contribution extends CRM_Contribute_Form_AbstractEditP
     // as a point of fragility rather than a logical 'if' clause.
     if ($priceSetId) {
       CRM_Price_BAO_PriceSet::processAmount($this->_priceSet['fields'],
-        $submittedValues, $lineItem[$priceSetId], NULL, $priceSetId);
+        $submittedValues, $lineItem[$priceSetId], $priceSetId);
       // Unset tax amount for offline 'is_quick_config' contribution.
       // @todo WHY  - quick config was conceived as a quick way to configure contribution forms.
       // this is an example of 'other' functionality being hung off it.
diff --git a/civicrm/CRM/Contribute/Form/Contribution/Confirm.php b/civicrm/CRM/Contribute/Form/Contribution/Confirm.php
index dbb5e45ca4bf103f94f129a19a6ed7496836f55b..4d9534b8114d2e6f2888cb640370ddfd62f479d3 100644
--- a/civicrm/CRM/Contribute/Form/Contribution/Confirm.php
+++ b/civicrm/CRM/Contribute/Form/Contribution/Confirm.php
@@ -1967,7 +1967,7 @@ class CRM_Contribute_Form_Contribution_Confirm extends CRM_Contribute_Form_Contr
     }
     $priceFields = $priceFields[$priceSetID]['fields'];
     $lineItems = [];
-    CRM_Price_BAO_PriceSet::processAmount($priceFields, $paramsProcessedForForm, $lineItems, 'civicrm_contribution', $priceSetID);
+    $form->processAmountAndGetAutoRenew($priceFields, $paramsProcessedForForm, $lineItems, $priceSetID);
     $form->_lineItem = [$priceSetID => $lineItems];
     $membershipPriceFieldIDs = [];
     foreach ((array) $lineItems as $lineItem) {
diff --git a/civicrm/CRM/Contribute/Form/Contribution/Main.php b/civicrm/CRM/Contribute/Form/Contribution/Main.php
index 2e102f83ee82c9f7103345c5cade43c8fe1343ab..6f7d403abcd4776b81843421daff04b6197930ab 100644
--- a/civicrm/CRM/Contribute/Form/Contribution/Main.php
+++ b/civicrm/CRM/Contribute/Form/Contribution/Main.php
@@ -1124,12 +1124,14 @@ class CRM_Contribute_Form_Contribution_Main extends CRM_Contribute_Form_Contribu
           }
         }
       }
-      $component = '';
+
       if ($this->_membershipBlock) {
-        $component = 'membership';
+        $this->processAmountAndGetAutoRenew($this->_values['fee'], $params, $lineItem[$priceSetId], $priceSetId);
+      }
+      else {
+        CRM_Price_BAO_PriceSet::processAmount($this->_values['fee'], $params, $lineItem[$priceSetId], $priceSetId);
       }
 
-      CRM_Price_BAO_PriceSet::processAmount($this->_values['fee'], $params, $lineItem[$priceSetId], $component, $priceSetId);
       if ($params['tax_amount']) {
         $this->set('tax_amount', $params['tax_amount']);
       }
diff --git a/civicrm/CRM/Contribute/Form/ContributionBase.php b/civicrm/CRM/Contribute/Form/ContributionBase.php
index 5dc6a299ff8017250c6e5dcff50420e177ab2c98..59670755beab60ff262cfe29324596bf26626929 100644
--- a/civicrm/CRM/Contribute/Form/ContributionBase.php
+++ b/civicrm/CRM/Contribute/Form/ContributionBase.php
@@ -296,7 +296,7 @@ class CRM_Contribute_Form_ContributionBase extends CRM_Core_Form {
       if (CRM_Financial_BAO_FinancialType::isACLFinancialTypeStatus()
         && !CRM_Core_Permission::check('add contributions of type ' . CRM_Contribute_PseudoConstant::financialType($this->_values['financial_type_id']))
       ) {
-        CRM_Core_Error::fatal(ts('You do not have permission to access this page.'));
+        CRM_Core_Error::statusBounce(ts('You do not have permission to access this page.'));
       }
       if (empty($this->_values['is_active'])) {
         throw new CRM_Contribute_Exception_InactiveContributionPageException(ts('The page you requested is currently unavailable.'), $this->_id);
@@ -1403,4 +1403,33 @@ class CRM_Contribute_Form_ContributionBase extends CRM_Core_Form {
     return $params['amount'] ?? 0;
   }
 
+  /**
+   * Wrapper for processAmount that also sets autorenew.
+   *
+   * @param $fields
+   *   This is the output of the function CRM_Price_BAO_PriceSet::getSetDetail($priceSetID, FALSE, FALSE);
+   *   And, it would make sense to introduce caching into that function and call it from here rather than
+   *   require the $fields array which is passed from pillar to post around the form in order to pass it in here.
+   * @param array $params
+   *   Params reflecting form input e.g with fields 'price_5' => 7, 'price_8' => array(7, 8)
+   * @param $lineItems
+   *   Line item array to be altered.
+   * @param int $priceSetID
+   */
+  public function processAmountAndGetAutoRenew($fields, &$params, &$lineItems, $priceSetID = NULL) {
+    CRM_Price_BAO_PriceSet::processAmount($fields, $params, $lineItems, $priceSetID);
+    $autoRenew = [];
+    $autoRenew[0] = $autoRenew[1] = $autoRenew[2] = 0;
+    foreach ($lineItems as $lineItem) {
+      if (!empty($lineItem['auto_renew']) &&
+        is_numeric($lineItem['auto_renew'])
+      ) {
+        $autoRenew[$lineItem['auto_renew']] += $lineItem['line_total'];
+      }
+    }
+    if (count($autoRenew) > 1) {
+      $params['autoRenew'] = $autoRenew;
+    }
+  }
+
 }
diff --git a/civicrm/CRM/Contribute/Form/ContributionPage.php b/civicrm/CRM/Contribute/Form/ContributionPage.php
index 95132b675c3bea978efbf06a2e1145c60bfe08ff..1373abedca2d737cac305013e45118b977d4ee36 100644
--- a/civicrm/CRM/Contribute/Form/ContributionPage.php
+++ b/civicrm/CRM/Contribute/Form/ContributionPage.php
@@ -136,7 +136,7 @@ class CRM_Contribute_Form_ContributionPage extends CRM_Core_Form {
     if (CRM_Financial_BAO_FinancialType::isACLFinancialTypeStatus() && $this->_action & CRM_Core_Action::UPDATE) {
       $financialTypeID = CRM_Contribute_PseudoConstant::financialType($this->_values['financial_type_id']);
       if (!CRM_Core_Permission::check('edit contributions of type ' . $financialTypeID)) {
-        CRM_Core_Error::fatal(ts('You do not have permission to access this page.'));
+        CRM_Core_Error::statusBounce(ts('You do not have permission to access this page.'));
       }
     }
 
diff --git a/civicrm/CRM/Contribute/Form/ContributionPage/Delete.php b/civicrm/CRM/Contribute/Form/ContributionPage/Delete.php
index 7a3182b140ffec531459382c2d5177aea2172887..89c0f16c0466ec25849885956797df61e3b6384a 100644
--- a/civicrm/CRM/Contribute/Form/ContributionPage/Delete.php
+++ b/civicrm/CRM/Contribute/Form/ContributionPage/Delete.php
@@ -43,7 +43,7 @@ class CRM_Contribute_Form_ContributionPage_Delete extends CRM_Contribute_Form_Co
 
     //check for delete
     if (!CRM_Core_Permission::checkActionPermission('CiviContribute', $this->_action)) {
-      CRM_Core_Error::fatal(ts('You do not have permission to access this page.'));
+      CRM_Core_Error::statusBounce(ts('You do not have permission to access this page.'));
     }
 
     $dao = new CRM_Contribute_DAO_Contribution();
diff --git a/civicrm/CRM/Contribute/Form/Task/Delete.php b/civicrm/CRM/Contribute/Form/Task/Delete.php
index e9d5b0dc71efed8c8d57b4728340288de0d3dc06..1b8aa33f988b0405a20755312af03839143b78e8 100644
--- a/civicrm/CRM/Contribute/Form/Task/Delete.php
+++ b/civicrm/CRM/Contribute/Form/Task/Delete.php
@@ -36,7 +36,7 @@ class CRM_Contribute_Form_Task_Delete extends CRM_Contribute_Form_Task {
   public function preProcess() {
     //check for delete
     if (!CRM_Core_Permission::checkActionPermission('CiviContribute', CRM_Core_Action::DELETE)) {
-      CRM_Core_Error::fatal(ts('You do not have permission to access this page.'));
+      CRM_Core_Error::statusBounce(ts('You do not have permission to access this page.'));
     }
     parent::preProcess();
   }
diff --git a/civicrm/CRM/Contribute/Form/UpdateSubscription.php b/civicrm/CRM/Contribute/Form/UpdateSubscription.php
index a83eb16256bc0683fa4585baec28fd8796777a7f..308d9dd3a48f01654baedae0d4a109664b5469ff 100644
--- a/civicrm/CRM/Contribute/Form/UpdateSubscription.php
+++ b/civicrm/CRM/Contribute/Form/UpdateSubscription.php
@@ -14,6 +14,7 @@
  * @copyright CiviCRM LLC https://civicrm.org/licensing
  */
 
+
 /**
  * This class generates form components generic to recurring contributions.
  *
@@ -208,7 +209,12 @@ class CRM_Contribute_Form_UpdateSubscription extends CRM_Contribute_Form_Contrib
     $params['subscriptionId'] = $this->_subscriptionDetails->subscription_id;
     $updateSubscription = TRUE;
     if ($this->_paymentProcessorObj->supports('changeSubscriptionAmount')) {
-      $updateSubscription = $this->_paymentProcessorObj->changeSubscriptionAmount($message, $params);
+      try {
+        $updateSubscription = $this->_paymentProcessorObj->changeSubscriptionAmount($message, $params);
+      }
+      catch (\Civi\Payment\Exception\PaymentProcessorException $e) {
+        CRM_Core_Error::statusBounce($e->getMessage());
+      }
     }
     if (is_a($updateSubscription, 'CRM_Core_Error')) {
       CRM_Core_Error::displaySessionError($updateSubscription);
diff --git a/civicrm/CRM/Core/BAO/CustomField.php b/civicrm/CRM/Core/BAO/CustomField.php
index 0607531c1bdf7b0839461d09be0cb989580abc2f..25bd3c1e9ab50a81be0bcc39e4217e6be7174266 100644
--- a/civicrm/CRM/Core/BAO/CustomField.php
+++ b/civicrm/CRM/Core/BAO/CustomField.php
@@ -2595,15 +2595,15 @@ WHERE cf.id = %1 AND cg.is_multiple = 1";
   /**
    * Does this field store a serialized string?
    *
-   * @param array $field
+   * @param array|object $field
    *
    * @return bool
    */
   public static function isSerialized($field) {
     // Fields retrieved via api are an array, or from the dao are an object. We'll accept either.
-    $field = (array) $field;
+    $html_type = is_object($field) ? $field->html_type : $field['html_type'];
     // FIXME: Currently the only way to know if data is serialized is by looking at the html_type. It would be cleaner to decouple this.
-    return ($field['html_type'] == 'CheckBox' || strpos($field['html_type'], 'Multi') !== FALSE);
+    return ($html_type === 'CheckBox' || strpos($html_type, 'Multi') !== FALSE);
   }
 
   /**
diff --git a/civicrm/CRM/Core/BAO/CustomValueTable.php b/civicrm/CRM/Core/BAO/CustomValueTable.php
index de1f8613ee420318c39ba022b3745b75ff84dd0e..0b352b4c097b6dad02c151f8738ce9aa6edac362 100644
--- a/civicrm/CRM/Core/BAO/CustomValueTable.php
+++ b/civicrm/CRM/Core/BAO/CustomValueTable.php
@@ -573,6 +573,7 @@ SELECT cg.table_name  as table_name ,
        cg.extends     as extends,
        cf.column_name as column_name,
        cf.id          as cf_id      ,
+       cf.html_type   as html_type  ,
        cf.data_type   as data_type
 FROM   civicrm_custom_group cg,
        civicrm_custom_field cf
@@ -586,6 +587,10 @@ AND    cf.id IN ( $fieldIDList )
     while ($dao->fetch()) {
       $dataType = $dao->data_type == 'Date' ? 'Timestamp' : $dao->data_type;
       foreach ($fieldValues[$dao->cf_id] as $fieldValue) {
+        // Serialize array values
+        if (is_array($fieldValue['value']) && CRM_Core_BAO_CustomField::isSerialized($dao)) {
+          $fieldValue['value'] = CRM_Utils_Array::implodePadded($fieldValue['value']);
+        }
         // Format null values correctly
         if ($fieldValue['value'] === NULL || $fieldValue['value'] === '') {
           switch ($dataType) {
diff --git a/civicrm/CRM/Core/BAO/Email.php b/civicrm/CRM/Core/BAO/Email.php
index f2441a740f4797ec44ad258eae28804a2244156a..c8bcb650cf88a2c32cf80f57d71473d0be288bf9 100644
--- a/civicrm/CRM/Core/BAO/Email.php
+++ b/civicrm/CRM/Core/BAO/Email.php
@@ -54,6 +54,10 @@ class CRM_Core_BAO_Email extends CRM_Core_DAO_Email {
     $hook = empty($params['id']) ? 'create' : 'edit';
     CRM_Utils_Hook::pre($hook, 'Email', CRM_Utils_Array::value('id', $params), $params);
 
+    if (isset($params['is_bulkmail']) && $params['is_bulkmail'] === 'null') {
+      CRM_Core_Error::deprecatedFunctionWarning('It is not valid to set bulkmail to null, it is boolean');
+      $params['bulkmail'] = 0;
+    }
     $email = new CRM_Core_DAO_Email();
     $email->copyValues($params);
     if (!empty($email->email)) {
@@ -64,17 +68,17 @@ class CRM_Core_BAO_Email extends CRM_Core_DAO_Email {
 
     /*
      * since we're setting bulkmail for 1 of this contact's emails, first reset all their other emails to is_bulkmail false
-     *  We shouldn't not set the current email to false even though we
-     *  are about to reset it to avoid contaminating the changelog if logging is enabled
+     *  We shouldn't set the current email to false even though we
+     *  are about to reset it to avoid contaminating the changelog if logging is enabled.
      * (only 1 email address can have is_bulkmail = true)
      */
-    if ($email->is_bulkmail != 'null' && !empty($params['contact_id']) && !self::isMultipleBulkMail()) {
+    if ($email->is_bulkmail && !empty($params['contact_id']) && !self::isMultipleBulkMail()) {
       $sql = "
 UPDATE civicrm_email
 SET    is_bulkmail = 0
 WHERE  contact_id = {$params['contact_id']}
 ";
-      if ($hook == 'edit') {
+      if ($hook === 'edit') {
         $sql .= " AND id <> {$params['id']}";
       }
       CRM_Core_DAO::executeQuery($sql);
diff --git a/civicrm/CRM/Core/BAO/Navigation.php b/civicrm/CRM/Core/BAO/Navigation.php
index c5d83006972fb4f4f42c875a3d38330db16c00bf..755d70826706a154d75d9aa9476b118799dce933 100644
--- a/civicrm/CRM/Core/BAO/Navigation.php
+++ b/civicrm/CRM/Core/BAO/Navigation.php
@@ -468,14 +468,7 @@ FROM civicrm_navigation WHERE domain_id = $domainID";
       $contact = new CRM_Contact_DAO_Contact();
       $contact->id = $contactID;
       if ($contact->find(TRUE)) {
-        CRM_Core_BAO_Setting::setItem(
-          $newKey,
-          CRM_Core_BAO_Setting::PERSONAL_PREFERENCES_NAME,
-          'navigation',
-          NULL,
-          $contactID,
-          $contactID
-        );
+        Civi::contactSettings($contactID)->set('navigation', $newKey);
       }
     }
 
diff --git a/civicrm/CRM/Core/BAO/Setting.php b/civicrm/CRM/Core/BAO/Setting.php
index 4fa3e5d0413a80899921d724efd959b9c6b524e9..50cc7dc06413d0c6d32d587c298835714aa1c88c 100644
--- a/civicrm/CRM/Core/BAO/Setting.php
+++ b/civicrm/CRM/Core/BAO/Setting.php
@@ -125,8 +125,6 @@ class CRM_Core_BAO_Setting extends CRM_Core_DAO_Setting {
   /**
    * Store an item in the setting table.
    *
-   * _setItem() is the common logic shared by setItem() and setItems().
-   *
    * @param $value
    *   (required) The value that will be serialized and stored.
    * @param string $group
@@ -140,6 +138,10 @@ class CRM_Core_BAO_Setting extends CRM_Core_DAO_Setting {
    *   An optional ID to assign the creator to. If not set, retrieved from session.
    *
    * @param int $domainID
+   *
+   * @throws \CRM_Core_Exception
+   *
+   * @deprecated - refer docs https://docs.civicrm.org/dev/en/latest/framework/setting/
    */
   public static function setItem(
     $value,
@@ -150,6 +152,8 @@ class CRM_Core_BAO_Setting extends CRM_Core_DAO_Setting {
     $createdID = NULL,
     $domainID = NULL
   ) {
+    CRM_Core_Error::deprecatedFunctionWarning('refer docs for correct methods https://docs.civicrm.org/dev/en/latest/framework/setting/');
+
     /** @var \Civi\Core\SettingsManager $manager */
     $manager = \Civi::service('settings_manager');
     $settings = ($contactID === NULL) ? $manager->getBagByDomain($domainID) : $manager->getBagByContact($domainID, $contactID);
@@ -163,8 +167,6 @@ class CRM_Core_BAO_Setting extends CRM_Core_DAO_Setting {
    *  'config_key' = the config key is different to the settings key - e.g. debug where there was a conflict
    *  'legacy_key' = rename from config or setting with this name
    *
-   * _setItem() is the common logic shared by setItem() and setItems().
-   *
    * @param array $params
    *   (required) An api formatted array of keys and values.
    * @param null $domains
@@ -421,6 +423,10 @@ class CRM_Core_BAO_Setting extends CRM_Core_DAO_Setting {
    * @param bool $system
    * @param int $userID
    * @param string $keyField
+   *
+   * @throws \CRM_Core_Exception
+   *
+   * @deprecated
    */
   public static function setValueOption(
     $group,
@@ -430,6 +436,7 @@ class CRM_Core_BAO_Setting extends CRM_Core_DAO_Setting {
     $userID = NULL,
     $keyField = 'name'
   ) {
+    CRM_Core_Error::deprecatedFunctionWarning('refer docs for correct methods https://docs.civicrm.org/dev/en/latest/framework/setting/');
     if (empty($value)) {
       $optionValue = NULL;
     }
diff --git a/civicrm/CRM/Core/BAO/UFGroup.php b/civicrm/CRM/Core/BAO/UFGroup.php
index 0e229758328fc08d2e936b1b652497795da17626..ea56ed79358932b3dcd036a34e711acbdc2b91da 100644
--- a/civicrm/CRM/Core/BAO/UFGroup.php
+++ b/civicrm/CRM/Core/BAO/UFGroup.php
@@ -989,11 +989,10 @@ class CRM_Core_BAO_UFGroup extends CRM_Core_DAO_UFGroup {
       }
     }
     $query->convertToPseudoNames($details);
-    $config = CRM_Core_Config::singleton();
 
-    $locationTypes = CRM_Core_PseudoConstant::get('CRM_Core_DAO_Address', 'location_type_id');
-    $imProviders = CRM_Core_PseudoConstant::get('CRM_Core_DAO_IM', 'provider_id');
-    $websiteTypes = CRM_Core_PseudoConstant::get('CRM_Core_DAO_Website', 'website_type_id');
+    $locationTypes = CRM_Core_BAO_Address::buildOptions('location_type_id', 'validate');
+    $imProviders = CRM_Core_DAO_IM::buildOptions('provider_id');
+    $websiteTypes = CRM_Core_DAO_Website::buildOptions('website_type_id');
 
     $multipleFields = ['url'];
 
diff --git a/civicrm/CRM/Core/BAO/UFMatch.php b/civicrm/CRM/Core/BAO/UFMatch.php
index 23dbf6e4ff8fac6dde425a440a26ce40a140620e..58996fd30aeac685df495a15bcb7613598803466 100644
--- a/civicrm/CRM/Core/BAO/UFMatch.php
+++ b/civicrm/CRM/Core/BAO/UFMatch.php
@@ -430,7 +430,7 @@ AND    domain_id    = %4
           'email' => $emailAddress,
           'is_primary' => 1,
         ]);
-        $emailID = $result->id;
+        $emailID = $result['id'];
       }
 
       CRM_Core_BAO_Log::register($contactId,
diff --git a/civicrm/CRM/Core/CodeGen/Specification.php b/civicrm/CRM/Core/CodeGen/Specification.php
index 17bfc45a5571a95fd14dacc9e83c4ce0b46bdb22..00e3d74a06bedd01d5ac8beaaa6053d84a537fa2 100644
--- a/civicrm/CRM/Core/CodeGen/Specification.php
+++ b/civicrm/CRM/Core/CodeGen/Specification.php
@@ -371,6 +371,7 @@ class CRM_Core_CodeGen_Specification {
     $field['uniqueTitle'] = $this->value('uniqueTitle', $fieldXML);
     $field['serialize'] = $this->value('serialize', $fieldXML);
     $field['html'] = $this->value('html', $fieldXML);
+    $field['contactType'] = $this->value('contactType', $fieldXML);
     if (isset($fieldXML->permission)) {
       $field['permission'] = trim($this->value('permission', $fieldXML));
       $field['permission'] = $field['permission'] ? array_filter(array_map('trim', explode(',', $field['permission']))) : [];
@@ -383,6 +384,7 @@ class CRM_Core_CodeGen_Specification {
         'type',
         'formatType',
         'label',
+        'controlField',
         /* Fixme: prior to CRM-13497 these were in a flat structure
         // CRM-13497 moved them to be nested within 'html' but there's no point
         // making that change in the DAOs right now since we are in the process of
diff --git a/civicrm/CRM/Core/DAO/ActionLog.php b/civicrm/CRM/Core/DAO/ActionLog.php
index 058ebbda6801a3437c6ee4db64a4ef5b2502bbfc..447410dc3a1aed257654437f71b1a3276a7d314c 100644
--- a/civicrm/CRM/Core/DAO/ActionLog.php
+++ b/civicrm/CRM/Core/DAO/ActionLog.php
@@ -6,7 +6,7 @@
  *
  * Generated from xml/schema/CRM/Core/ActionLog.xml
  * DO NOT EDIT.  Generated by CRM_Core_CodeGen
- * (GenCodeChecksum:b3c1b04d503947b5ec42a671bb4f0f6d)
+ * (GenCodeChecksum:e23a4eda4386716e3553aeb30bf1f255)
  */
 
 /**
diff --git a/civicrm/CRM/Core/DAO/ActionMapping.php b/civicrm/CRM/Core/DAO/ActionMapping.php
index b04131c94a831eb9f9337cbdff1b1422c47ffc31..38d40f4614637779eb45ae6210a304bdb628973f 100644
--- a/civicrm/CRM/Core/DAO/ActionMapping.php
+++ b/civicrm/CRM/Core/DAO/ActionMapping.php
@@ -6,7 +6,7 @@
  *
  * Generated from xml/schema/CRM/Core/ActionMapping.xml
  * DO NOT EDIT.  Generated by CRM_Core_CodeGen
- * (GenCodeChecksum:4642b2b6da658a34c8dda7c46a93e059)
+ * (GenCodeChecksum:b597d359bb254799b8756ee555156dc3)
  */
 
 /**
diff --git a/civicrm/CRM/Core/DAO/ActionSchedule.php b/civicrm/CRM/Core/DAO/ActionSchedule.php
index d5d6e5ffd714382862b221bd082a4d28d04da6bd..e67d25c8b2f3ed9e2bd7881d4730cc20959090ac 100644
--- a/civicrm/CRM/Core/DAO/ActionSchedule.php
+++ b/civicrm/CRM/Core/DAO/ActionSchedule.php
@@ -6,7 +6,7 @@
  *
  * Generated from xml/schema/CRM/Core/ActionSchedule.xml
  * DO NOT EDIT.  Generated by CRM_Core_CodeGen
- * (GenCodeChecksum:aee88e50a306c0ae2d2aa373ec6c0af5)
+ * (GenCodeChecksum:480f98c7f38407759f99648abdd78368)
  */
 
 /**
diff --git a/civicrm/CRM/Core/DAO/Address.php b/civicrm/CRM/Core/DAO/Address.php
index 8afdc271b8ffe8e682e2665e680b9e6ea4fe06a0..0354340602ce0a2715a0ab691655e1085582e448 100644
--- a/civicrm/CRM/Core/DAO/Address.php
+++ b/civicrm/CRM/Core/DAO/Address.php
@@ -6,7 +6,7 @@
  *
  * Generated from xml/schema/CRM/Core/Address.xml
  * DO NOT EDIT.  Generated by CRM_Core_CodeGen
- * (GenCodeChecksum:4e3b66ed828527539c525b2ffc71e606)
+ * (GenCodeChecksum:c53b9ecace9b92f598172ccd17620489)
  */
 
 /**
@@ -568,6 +568,7 @@ class CRM_Core_DAO_Address extends CRM_Core_DAO {
           'FKClassName' => 'CRM_Core_DAO_County',
           'html' => [
             'type' => 'ChainSelect',
+            'controlField' => 'state_province_id',
           ],
           'pseudoconstant' => [
             'table' => 'civicrm_county',
@@ -589,6 +590,7 @@ class CRM_Core_DAO_Address extends CRM_Core_DAO {
           'FKClassName' => 'CRM_Core_DAO_StateProvince',
           'html' => [
             'type' => 'ChainSelect',
+            'controlField' => 'country_id',
           ],
           'pseudoconstant' => [
             'table' => 'civicrm_state_province',
diff --git a/civicrm/CRM/Core/DAO/AddressFormat.php b/civicrm/CRM/Core/DAO/AddressFormat.php
index d2e10e6ef2f4adf34476002f845eca8ec9a815bc..0a07ed0985cff4b4577742bd754017f1965f3f56 100644
--- a/civicrm/CRM/Core/DAO/AddressFormat.php
+++ b/civicrm/CRM/Core/DAO/AddressFormat.php
@@ -6,7 +6,7 @@
  *
  * Generated from xml/schema/CRM/Core/AddressFormat.xml
  * DO NOT EDIT.  Generated by CRM_Core_CodeGen
- * (GenCodeChecksum:5cf75b7bfd496cdc343cb8a9766d546c)
+ * (GenCodeChecksum:a9ea837c3e5896b5e2b0b62052a5fdaf)
  */
 
 /**
diff --git a/civicrm/CRM/Core/DAO/Cache.php b/civicrm/CRM/Core/DAO/Cache.php
index ea1d0d67a034a676116ec57563b5ad53f0653981..2a37d8efb3f8c41031f4704efada0ca07bb778e7 100644
--- a/civicrm/CRM/Core/DAO/Cache.php
+++ b/civicrm/CRM/Core/DAO/Cache.php
@@ -6,7 +6,7 @@
  *
  * Generated from xml/schema/CRM/Core/Cache.xml
  * DO NOT EDIT.  Generated by CRM_Core_CodeGen
- * (GenCodeChecksum:4d3ccecb7d91aa67b8c78c3c39933ae8)
+ * (GenCodeChecksum:2639f5b19898adf08f19b9f2713d5e76)
  */
 
 /**
diff --git a/civicrm/CRM/Core/DAO/Component.php b/civicrm/CRM/Core/DAO/Component.php
index 93ea40193f07a51bbcae998a6e656d3fc681d007..69039b9975f7e9ba57b9834680d0dd7d8ab1a799 100644
--- a/civicrm/CRM/Core/DAO/Component.php
+++ b/civicrm/CRM/Core/DAO/Component.php
@@ -6,7 +6,7 @@
  *
  * Generated from xml/schema/CRM/Core/Component.xml
  * DO NOT EDIT.  Generated by CRM_Core_CodeGen
- * (GenCodeChecksum:4f8734bbe3e7935ef6943a95a9bbdf28)
+ * (GenCodeChecksum:7df1b2e6e35d3bbd5ae6d71f559cf8cb)
  */
 
 /**
diff --git a/civicrm/CRM/Core/DAO/Country.php b/civicrm/CRM/Core/DAO/Country.php
index 448d3e35136d4756e56677d3fac7e56b27bce12f..e6a2aac9dc1cc27ddd143a813f7932048fa5bb57 100644
--- a/civicrm/CRM/Core/DAO/Country.php
+++ b/civicrm/CRM/Core/DAO/Country.php
@@ -6,7 +6,7 @@
  *
  * Generated from xml/schema/CRM/Core/Country.xml
  * DO NOT EDIT.  Generated by CRM_Core_CodeGen
- * (GenCodeChecksum:31c11db045e03911b14a7661d5e8eb12)
+ * (GenCodeChecksum:e91ee1ac50cda49d3d228fe953d1ab34)
  */
 
 /**
diff --git a/civicrm/CRM/Core/DAO/County.php b/civicrm/CRM/Core/DAO/County.php
index 4453f1396514b1662e49229fb4c179ec3597ecda..7c183f5de0d830afd332c3d5684de295ed0558d5 100644
--- a/civicrm/CRM/Core/DAO/County.php
+++ b/civicrm/CRM/Core/DAO/County.php
@@ -6,7 +6,7 @@
  *
  * Generated from xml/schema/CRM/Core/County.xml
  * DO NOT EDIT.  Generated by CRM_Core_CodeGen
- * (GenCodeChecksum:4ba037c52adafa1cf164bc0a3dca2102)
+ * (GenCodeChecksum:9af9ee85c4e413dda6398cc51e9e4f82)
  */
 
 /**
diff --git a/civicrm/CRM/Core/DAO/CustomField.php b/civicrm/CRM/Core/DAO/CustomField.php
index 4888c4c07f8f03092f9ed1971a5d891cf998d846..7b8ded42abbfa91cb479cb2d422d345a29f5f985 100644
--- a/civicrm/CRM/Core/DAO/CustomField.php
+++ b/civicrm/CRM/Core/DAO/CustomField.php
@@ -6,7 +6,7 @@
  *
  * Generated from xml/schema/CRM/Core/CustomField.xml
  * DO NOT EDIT.  Generated by CRM_Core_CodeGen
- * (GenCodeChecksum:0b9f63d0d81091b921012b627182f11b)
+ * (GenCodeChecksum:492b1be45dc41c15b35371410a074393)
  */
 
 /**
diff --git a/civicrm/CRM/Core/DAO/CustomGroup.php b/civicrm/CRM/Core/DAO/CustomGroup.php
index 3cfe89c1efbf3529e56a81629029915e507c056b..27a55dc1b1fb1a69b7c57fd1afdd1d016d2b63ec 100644
--- a/civicrm/CRM/Core/DAO/CustomGroup.php
+++ b/civicrm/CRM/Core/DAO/CustomGroup.php
@@ -6,7 +6,7 @@
  *
  * Generated from xml/schema/CRM/Core/CustomGroup.xml
  * DO NOT EDIT.  Generated by CRM_Core_CodeGen
- * (GenCodeChecksum:711e3216e2d56bb62d276bb12b606631)
+ * (GenCodeChecksum:1e40fdbcc363c9b5e4c880a6838c7375)
  */
 
 /**
diff --git a/civicrm/CRM/Core/DAO/Dashboard.php b/civicrm/CRM/Core/DAO/Dashboard.php
index eea43477fae9dddfadcb10eff3eff710672e5470..13fbdbf5d1b0b59be606e93b1e60b5d0328acb02 100644
--- a/civicrm/CRM/Core/DAO/Dashboard.php
+++ b/civicrm/CRM/Core/DAO/Dashboard.php
@@ -6,7 +6,7 @@
  *
  * Generated from xml/schema/CRM/Core/Dashboard.xml
  * DO NOT EDIT.  Generated by CRM_Core_CodeGen
- * (GenCodeChecksum:6fd1bfbecace855a159025ad31e37fb0)
+ * (GenCodeChecksum:6b9dee0261c55c757550983c4fbd9aea)
  */
 
 /**
diff --git a/civicrm/CRM/Core/DAO/Discount.php b/civicrm/CRM/Core/DAO/Discount.php
index 4265b70fe88118a3d68c135784a6499bbe8b1969..416cfc99038ed08fae83fb605d43846288c297ae 100644
--- a/civicrm/CRM/Core/DAO/Discount.php
+++ b/civicrm/CRM/Core/DAO/Discount.php
@@ -6,7 +6,7 @@
  *
  * Generated from xml/schema/CRM/Core/Discount.xml
  * DO NOT EDIT.  Generated by CRM_Core_CodeGen
- * (GenCodeChecksum:71bcd9deb96abf18da4c7c7769b6a2dd)
+ * (GenCodeChecksum:65e21ec2893577e8026e3194864cdad3)
  */
 
 /**
diff --git a/civicrm/CRM/Core/DAO/Domain.php b/civicrm/CRM/Core/DAO/Domain.php
index e3200405e84be36bd017f59c2b7de030bbfd94d4..42569bdbc7df6be0d88beed9f96685cdb8c8599c 100644
--- a/civicrm/CRM/Core/DAO/Domain.php
+++ b/civicrm/CRM/Core/DAO/Domain.php
@@ -6,7 +6,7 @@
  *
  * Generated from xml/schema/CRM/Core/Domain.xml
  * DO NOT EDIT.  Generated by CRM_Core_CodeGen
- * (GenCodeChecksum:a5a1c028e1412c00cd141f50e566799a)
+ * (GenCodeChecksum:63a7b29cbea5066fe2605191bd41226a)
  */
 
 /**
diff --git a/civicrm/CRM/Core/DAO/Email.php b/civicrm/CRM/Core/DAO/Email.php
index f7bfe44daf7f88aaad07cb75cf887aa43d8a3b3a..12b8173e49d071c3b9bd1a8be6cd42d437bdd7ac 100644
--- a/civicrm/CRM/Core/DAO/Email.php
+++ b/civicrm/CRM/Core/DAO/Email.php
@@ -6,7 +6,7 @@
  *
  * Generated from xml/schema/CRM/Core/Email.xml
  * DO NOT EDIT.  Generated by CRM_Core_CodeGen
- * (GenCodeChecksum:7f8d7665fad5c2691c46de7cff8d9149)
+ * (GenCodeChecksum:68301f75314731f6ee2ec37298fe49fe)
  */
 
 /**
diff --git a/civicrm/CRM/Core/DAO/EntityFile.php b/civicrm/CRM/Core/DAO/EntityFile.php
index de1cadeee6e25a8a326acca322d76799100ad8b8..957ad0507cb98b68e746d3bd53ce28fd26cd3329 100644
--- a/civicrm/CRM/Core/DAO/EntityFile.php
+++ b/civicrm/CRM/Core/DAO/EntityFile.php
@@ -6,7 +6,7 @@
  *
  * Generated from xml/schema/CRM/Core/EntityFile.xml
  * DO NOT EDIT.  Generated by CRM_Core_CodeGen
- * (GenCodeChecksum:0ee94b59f5506957ac9bbfbc9d9533c2)
+ * (GenCodeChecksum:ed68159183f272ac4669f1a708bbebd7)
  */
 
 /**
diff --git a/civicrm/CRM/Core/DAO/EntityTag.php b/civicrm/CRM/Core/DAO/EntityTag.php
index 4bed3e4cfdc86716b91f0736b9133e5fbc8433f7..ae16002b14d0faa9070d796c6d790b1b477b7709 100644
--- a/civicrm/CRM/Core/DAO/EntityTag.php
+++ b/civicrm/CRM/Core/DAO/EntityTag.php
@@ -6,7 +6,7 @@
  *
  * Generated from xml/schema/CRM/Core/EntityTag.xml
  * DO NOT EDIT.  Generated by CRM_Core_CodeGen
- * (GenCodeChecksum:16be4e438f52797d8001b5cbe508c615)
+ * (GenCodeChecksum:af7c604a97027819d9c6316fb84d25bc)
  */
 
 /**
diff --git a/civicrm/CRM/Core/DAO/Extension.php b/civicrm/CRM/Core/DAO/Extension.php
index b4d50e6d34383ae7ab9a60ae517325cfc5dd1c83..e2330119346f2ef8a58c19eb6241af0111dfa72c 100644
--- a/civicrm/CRM/Core/DAO/Extension.php
+++ b/civicrm/CRM/Core/DAO/Extension.php
@@ -6,7 +6,7 @@
  *
  * Generated from xml/schema/CRM/Core/Extension.xml
  * DO NOT EDIT.  Generated by CRM_Core_CodeGen
- * (GenCodeChecksum:3c88066844dbbf70b8ee5593eafe65a4)
+ * (GenCodeChecksum:13eeed42541ea3b610faa3bc99f6d9cb)
  */
 
 /**
diff --git a/civicrm/CRM/Core/DAO/File.php b/civicrm/CRM/Core/DAO/File.php
index c67c30dc091d5ebeb8a07134c3b1aa6ae93671a4..6b5380a404a78de376a0f1ac3ef23ddd7114954d 100644
--- a/civicrm/CRM/Core/DAO/File.php
+++ b/civicrm/CRM/Core/DAO/File.php
@@ -6,7 +6,7 @@
  *
  * Generated from xml/schema/CRM/Core/File.xml
  * DO NOT EDIT.  Generated by CRM_Core_CodeGen
- * (GenCodeChecksum:1ecf5010cac38b5778d7b448b50e7c01)
+ * (GenCodeChecksum:1e39b61dad16348293a20264602193ad)
  */
 
 /**
diff --git a/civicrm/CRM/Core/DAO/IM.php b/civicrm/CRM/Core/DAO/IM.php
index 323457dcaf9df0b621f3b9b6682eb557d1812488..bb07bee65becaa3b954aab19901363f260ea6bf3 100644
--- a/civicrm/CRM/Core/DAO/IM.php
+++ b/civicrm/CRM/Core/DAO/IM.php
@@ -6,7 +6,7 @@
  *
  * Generated from xml/schema/CRM/Core/IM.xml
  * DO NOT EDIT.  Generated by CRM_Core_CodeGen
- * (GenCodeChecksum:cbd52493a36bc7a76440673085467442)
+ * (GenCodeChecksum:e09b9168fc001341138686c827deba1f)
  */
 
 /**
diff --git a/civicrm/CRM/Core/DAO/Job.php b/civicrm/CRM/Core/DAO/Job.php
index 402ecf95ba2fee256080726b4f0c7e58c802b6ea..ead7c9687dd18fceca3ad225e8ee6f038fd1bbb8 100644
--- a/civicrm/CRM/Core/DAO/Job.php
+++ b/civicrm/CRM/Core/DAO/Job.php
@@ -6,7 +6,7 @@
  *
  * Generated from xml/schema/CRM/Core/Job.xml
  * DO NOT EDIT.  Generated by CRM_Core_CodeGen
- * (GenCodeChecksum:143980edb0346c065249ee860efe6b41)
+ * (GenCodeChecksum:b8624f719151185db79cd04810c2c2bf)
  */
 
 /**
diff --git a/civicrm/CRM/Core/DAO/JobLog.php b/civicrm/CRM/Core/DAO/JobLog.php
index cd4056d4251fcba5e568d36a56be8ee76a18923f..2eafcf08074aa823f87ea6ef677257af476d2b57 100644
--- a/civicrm/CRM/Core/DAO/JobLog.php
+++ b/civicrm/CRM/Core/DAO/JobLog.php
@@ -6,7 +6,7 @@
  *
  * Generated from xml/schema/CRM/Core/JobLog.xml
  * DO NOT EDIT.  Generated by CRM_Core_CodeGen
- * (GenCodeChecksum:2bcfc373a7ce0958aea907823720c3c0)
+ * (GenCodeChecksum:3456b559213c3916aad90a0db8789757)
  */
 
 /**
diff --git a/civicrm/CRM/Core/DAO/LocBlock.php b/civicrm/CRM/Core/DAO/LocBlock.php
index 2a5aa709291cba01899312cc5c63da7c12f8a264..9e8ff2b96454f8014a25b16a8c43eb6b205a0a8c 100644
--- a/civicrm/CRM/Core/DAO/LocBlock.php
+++ b/civicrm/CRM/Core/DAO/LocBlock.php
@@ -6,7 +6,7 @@
  *
  * Generated from xml/schema/CRM/Core/LocBlock.xml
  * DO NOT EDIT.  Generated by CRM_Core_CodeGen
- * (GenCodeChecksum:b3cd6cc4298a1df379876cc9c96a4a6b)
+ * (GenCodeChecksum:a9b4f279ec52aa2e142cd26ae8beffd5)
  */
 
 /**
diff --git a/civicrm/CRM/Core/DAO/LocationType.php b/civicrm/CRM/Core/DAO/LocationType.php
index e74f694f25013463eba18cba804dcc5af8172d72..cdee58eb239b137a9e9f8e1a0b2db4d1926c1590 100644
--- a/civicrm/CRM/Core/DAO/LocationType.php
+++ b/civicrm/CRM/Core/DAO/LocationType.php
@@ -6,7 +6,7 @@
  *
  * Generated from xml/schema/CRM/Core/LocationType.xml
  * DO NOT EDIT.  Generated by CRM_Core_CodeGen
- * (GenCodeChecksum:c3560b71c6b732aaa7febb2567fc1b9c)
+ * (GenCodeChecksum:260be4cdbe3a79363c3ada3137125c4a)
  */
 
 /**
diff --git a/civicrm/CRM/Core/DAO/Log.php b/civicrm/CRM/Core/DAO/Log.php
index d013037be550fd85554d724c858982261454ea18..fcf63b7e2b327539b69f4785f060103ae2e9feb2 100644
--- a/civicrm/CRM/Core/DAO/Log.php
+++ b/civicrm/CRM/Core/DAO/Log.php
@@ -6,7 +6,7 @@
  *
  * Generated from xml/schema/CRM/Core/Log.xml
  * DO NOT EDIT.  Generated by CRM_Core_CodeGen
- * (GenCodeChecksum:f7870f1117022484520fe4ef9c015edc)
+ * (GenCodeChecksum:0a82a165e8054985acc0f57feebc65ff)
  */
 
 /**
diff --git a/civicrm/CRM/Core/DAO/MailSettings.php b/civicrm/CRM/Core/DAO/MailSettings.php
index 8351ea15001cb7a098441289f6233f6473092905..70d5468446298b5072ffefe0ac1fa8381da88d0d 100644
--- a/civicrm/CRM/Core/DAO/MailSettings.php
+++ b/civicrm/CRM/Core/DAO/MailSettings.php
@@ -6,7 +6,7 @@
  *
  * Generated from xml/schema/CRM/Core/MailSettings.xml
  * DO NOT EDIT.  Generated by CRM_Core_CodeGen
- * (GenCodeChecksum:55eb307722a559ed1b6413a38520d635)
+ * (GenCodeChecksum:05dd0edd89684132a6caf6b165665737)
  */
 
 /**
diff --git a/civicrm/CRM/Core/DAO/Managed.php b/civicrm/CRM/Core/DAO/Managed.php
index 3141c37a4d42eeb82d6efafe6d9fb66f5af5e189..db3505cdf745ae62326a50a0c2164f53985fb09c 100644
--- a/civicrm/CRM/Core/DAO/Managed.php
+++ b/civicrm/CRM/Core/DAO/Managed.php
@@ -6,7 +6,7 @@
  *
  * Generated from xml/schema/CRM/Core/Managed.xml
  * DO NOT EDIT.  Generated by CRM_Core_CodeGen
- * (GenCodeChecksum:0a67162f8af5911b1a6a0f5a03a1b329)
+ * (GenCodeChecksum:7063a28b0e93d12d335eaad9de5f2aa7)
  */
 
 /**
diff --git a/civicrm/CRM/Core/DAO/Mapping.php b/civicrm/CRM/Core/DAO/Mapping.php
index 5c61cec13cd09c172f89e9ac4ad6f0b078fca8e7..d2150301d9a032b09cb9efb354dc78bff968aea6 100644
--- a/civicrm/CRM/Core/DAO/Mapping.php
+++ b/civicrm/CRM/Core/DAO/Mapping.php
@@ -6,7 +6,7 @@
  *
  * Generated from xml/schema/CRM/Core/Mapping.xml
  * DO NOT EDIT.  Generated by CRM_Core_CodeGen
- * (GenCodeChecksum:a1f0faf7e338aa60dfb0243ee1543f28)
+ * (GenCodeChecksum:3f02847e736fe72f375e4ff32c2a61c5)
  */
 
 /**
diff --git a/civicrm/CRM/Core/DAO/MappingField.php b/civicrm/CRM/Core/DAO/MappingField.php
index 65734ac0c86a70882fd67877262229f0bdb0bd1e..d6f81beed4c8c79216b50a479e650a8bef62f6bf 100644
--- a/civicrm/CRM/Core/DAO/MappingField.php
+++ b/civicrm/CRM/Core/DAO/MappingField.php
@@ -6,7 +6,7 @@
  *
  * Generated from xml/schema/CRM/Core/MappingField.xml
  * DO NOT EDIT.  Generated by CRM_Core_CodeGen
- * (GenCodeChecksum:11ff525a557ec58ebfa4fed22af699ea)
+ * (GenCodeChecksum:77ca1e64609d29de090d71311dc0e7ac)
  */
 
 /**
diff --git a/civicrm/CRM/Core/DAO/Menu.php b/civicrm/CRM/Core/DAO/Menu.php
index 82c8617dfa6e01477c7ceb74a0569210ab9cbe7e..b6e000e03b54042868e1995ca399135bdb3c1f42 100644
--- a/civicrm/CRM/Core/DAO/Menu.php
+++ b/civicrm/CRM/Core/DAO/Menu.php
@@ -6,7 +6,7 @@
  *
  * Generated from xml/schema/CRM/Core/Menu.xml
  * DO NOT EDIT.  Generated by CRM_Core_CodeGen
- * (GenCodeChecksum:42fee92ca199cddbfabfac15b1f3d641)
+ * (GenCodeChecksum:96c64cb8e13a36f16745aefaff64440a)
  */
 
 /**
diff --git a/civicrm/CRM/Core/DAO/MessageTemplate.php b/civicrm/CRM/Core/DAO/MessageTemplate.php
index 529cb4da0af888287e6403c88f9adafa15793555..71fa8870ef9c416b78124cc6ddc835d6c2ac741d 100644
--- a/civicrm/CRM/Core/DAO/MessageTemplate.php
+++ b/civicrm/CRM/Core/DAO/MessageTemplate.php
@@ -6,7 +6,7 @@
  *
  * Generated from xml/schema/CRM/Core/MessageTemplate.xml
  * DO NOT EDIT.  Generated by CRM_Core_CodeGen
- * (GenCodeChecksum:cd30af196b1fc606a1fdccc6d7cfb096)
+ * (GenCodeChecksum:41d8acdc31465a852930f88cf1604224)
  */
 
 /**
diff --git a/civicrm/CRM/Core/DAO/Navigation.php b/civicrm/CRM/Core/DAO/Navigation.php
index 2a4aded44ad266baef8291138b28840aea9a8d51..9563a8418150c03ef6406efd07e0a24242194dd8 100644
--- a/civicrm/CRM/Core/DAO/Navigation.php
+++ b/civicrm/CRM/Core/DAO/Navigation.php
@@ -6,7 +6,7 @@
  *
  * Generated from xml/schema/CRM/Core/Navigation.xml
  * DO NOT EDIT.  Generated by CRM_Core_CodeGen
- * (GenCodeChecksum:ab8ed383a2b4fe3120d6ea52b18b4e6d)
+ * (GenCodeChecksum:aeeb917df8c32ff97102c2c710d41d19)
  */
 
 /**
diff --git a/civicrm/CRM/Core/DAO/Note.php b/civicrm/CRM/Core/DAO/Note.php
index 9bcec945dee9ce5f12e65dca92d53452a2d0605e..d47f7d40c0b72275d889db75c5fbb0384f1a5575 100644
--- a/civicrm/CRM/Core/DAO/Note.php
+++ b/civicrm/CRM/Core/DAO/Note.php
@@ -6,7 +6,7 @@
  *
  * Generated from xml/schema/CRM/Core/Note.xml
  * DO NOT EDIT.  Generated by CRM_Core_CodeGen
- * (GenCodeChecksum:e1249165b22b38a9aee6bd558181ef9d)
+ * (GenCodeChecksum:1a545c1e601969ae689d9577a3c14389)
  */
 
 /**
diff --git a/civicrm/CRM/Core/DAO/OpenID.php b/civicrm/CRM/Core/DAO/OpenID.php
index 8513bef4ed6974507ed92dfd02173ea8eba45518..4b85ea714849a7a2615f17ff41d545200827ff8c 100644
--- a/civicrm/CRM/Core/DAO/OpenID.php
+++ b/civicrm/CRM/Core/DAO/OpenID.php
@@ -6,7 +6,7 @@
  *
  * Generated from xml/schema/CRM/Core/OpenID.xml
  * DO NOT EDIT.  Generated by CRM_Core_CodeGen
- * (GenCodeChecksum:6d4dbdfba0d15a3cdaeb82395ad9b8fc)
+ * (GenCodeChecksum:4ff4afe262a2f93f500559f17f096ae8)
  */
 
 /**
diff --git a/civicrm/CRM/Core/DAO/OptionGroup.php b/civicrm/CRM/Core/DAO/OptionGroup.php
index ea3ae4debe85047bbb250c608b5fab1b62a5bfaa..5b8b744b54ce4c529fc1fa4ccb5e11702c39f21e 100644
--- a/civicrm/CRM/Core/DAO/OptionGroup.php
+++ b/civicrm/CRM/Core/DAO/OptionGroup.php
@@ -6,7 +6,7 @@
  *
  * Generated from xml/schema/CRM/Core/OptionGroup.xml
  * DO NOT EDIT.  Generated by CRM_Core_CodeGen
- * (GenCodeChecksum:a2caf8a64fc70eef9478a1d879ab6784)
+ * (GenCodeChecksum:54d95c919472473c234b6747d668bf85)
  */
 
 /**
diff --git a/civicrm/CRM/Core/DAO/OptionValue.php b/civicrm/CRM/Core/DAO/OptionValue.php
index fed0364fe8c76a1eaa66d5a3e345df0a8f281e8b..a8dccef83affeefcf010be0ff3a392f8eb95d1d0 100644
--- a/civicrm/CRM/Core/DAO/OptionValue.php
+++ b/civicrm/CRM/Core/DAO/OptionValue.php
@@ -6,7 +6,7 @@
  *
  * Generated from xml/schema/CRM/Core/OptionValue.xml
  * DO NOT EDIT.  Generated by CRM_Core_CodeGen
- * (GenCodeChecksum:156637c23fd657e633b36dc8d410d4ab)
+ * (GenCodeChecksum:b07a5bf40414e7b7c35fe49a1900df68)
  */
 
 /**
diff --git a/civicrm/CRM/Core/DAO/Phone.php b/civicrm/CRM/Core/DAO/Phone.php
index dc437525fbe346ac8b91490716bdbbe65ed62c9f..d2c869ffc99d29294b77739bd90e51c277294930 100644
--- a/civicrm/CRM/Core/DAO/Phone.php
+++ b/civicrm/CRM/Core/DAO/Phone.php
@@ -6,7 +6,7 @@
  *
  * Generated from xml/schema/CRM/Core/Phone.xml
  * DO NOT EDIT.  Generated by CRM_Core_CodeGen
- * (GenCodeChecksum:a6e9de26d34f355e2365c6d4336f734f)
+ * (GenCodeChecksum:8298e3f0ae875f23de4b0c6a737e94c6)
  */
 
 /**
diff --git a/civicrm/CRM/Core/DAO/PreferencesDate.php b/civicrm/CRM/Core/DAO/PreferencesDate.php
index 044d160ff56c18bee8e877223c368ba368d6b4b9..25a2e2b969df20e239f5102c8e6f045744320f8e 100644
--- a/civicrm/CRM/Core/DAO/PreferencesDate.php
+++ b/civicrm/CRM/Core/DAO/PreferencesDate.php
@@ -6,7 +6,7 @@
  *
  * Generated from xml/schema/CRM/Core/PreferencesDate.xml
  * DO NOT EDIT.  Generated by CRM_Core_CodeGen
- * (GenCodeChecksum:e24b6513a0604a340a896973ce8d2db2)
+ * (GenCodeChecksum:ae20ee814de4f0fe71ac45d4a392fba9)
  */
 
 /**
diff --git a/civicrm/CRM/Core/DAO/PrevNextCache.php b/civicrm/CRM/Core/DAO/PrevNextCache.php
index 66faef2a09ce4e1152d763ced36b43cc2d9fe575..69baeea85fd5c4cd8508405d43208b0b94887d73 100644
--- a/civicrm/CRM/Core/DAO/PrevNextCache.php
+++ b/civicrm/CRM/Core/DAO/PrevNextCache.php
@@ -6,7 +6,7 @@
  *
  * Generated from xml/schema/CRM/Core/PrevNextCache.xml
  * DO NOT EDIT.  Generated by CRM_Core_CodeGen
- * (GenCodeChecksum:ddd681f365e2e377c23188cf3563c522)
+ * (GenCodeChecksum:b3e9aecea5100250d4b6ce9a4f6ca036)
  */
 
 /**
diff --git a/civicrm/CRM/Core/DAO/PrintLabel.php b/civicrm/CRM/Core/DAO/PrintLabel.php
index a15518cc6eb27e19422da0c94a7685e9020f54c5..a131268c36a36f287629eafaa5023ce1de23bfb2 100644
--- a/civicrm/CRM/Core/DAO/PrintLabel.php
+++ b/civicrm/CRM/Core/DAO/PrintLabel.php
@@ -6,7 +6,7 @@
  *
  * Generated from xml/schema/CRM/Core/PrintLabel.xml
  * DO NOT EDIT.  Generated by CRM_Core_CodeGen
- * (GenCodeChecksum:dff1181c7ca564844b6fed3b5eb2e37e)
+ * (GenCodeChecksum:2fb53845aa61d793ae0981a2481bbb79)
  */
 
 /**
diff --git a/civicrm/CRM/Core/DAO/RecurringEntity.php b/civicrm/CRM/Core/DAO/RecurringEntity.php
index ece67418702232b7ac494a8576dd7c603a6c455f..c785d99070d2c1d4457da0360741f0102bf08123 100644
--- a/civicrm/CRM/Core/DAO/RecurringEntity.php
+++ b/civicrm/CRM/Core/DAO/RecurringEntity.php
@@ -6,7 +6,7 @@
  *
  * Generated from xml/schema/CRM/Core/RecurringEntity.xml
  * DO NOT EDIT.  Generated by CRM_Core_CodeGen
- * (GenCodeChecksum:1f197a5848ca641233a99582e055dfb2)
+ * (GenCodeChecksum:f1f931c974eaf11d7540549468feae59)
  */
 
 /**
diff --git a/civicrm/CRM/Core/DAO/Setting.php b/civicrm/CRM/Core/DAO/Setting.php
index a7368b696af65127e34957d3ed52d869bebb1194..272b4cbfa21c9204b16464e544354622a27146a2 100644
--- a/civicrm/CRM/Core/DAO/Setting.php
+++ b/civicrm/CRM/Core/DAO/Setting.php
@@ -6,7 +6,7 @@
  *
  * Generated from xml/schema/CRM/Core/Setting.xml
  * DO NOT EDIT.  Generated by CRM_Core_CodeGen
- * (GenCodeChecksum:9fa60718e4fb92cc6b3e7f9563671b00)
+ * (GenCodeChecksum:b4d9feaf199010473cdf5b2d0a0d2f5e)
  */
 
 /**
diff --git a/civicrm/CRM/Core/DAO/StateProvince.php b/civicrm/CRM/Core/DAO/StateProvince.php
index 03d241ac3a0d9c43bfc6eba7bb821d0cb84ed6b7..94162e8ac251f5bf4b10b42717660efdf8448655 100644
--- a/civicrm/CRM/Core/DAO/StateProvince.php
+++ b/civicrm/CRM/Core/DAO/StateProvince.php
@@ -6,7 +6,7 @@
  *
  * Generated from xml/schema/CRM/Core/StateProvince.xml
  * DO NOT EDIT.  Generated by CRM_Core_CodeGen
- * (GenCodeChecksum:f7cd096f67c28ef937992bb61ba60544)
+ * (GenCodeChecksum:4e9d53ba801682110c3839eb703aa052)
  */
 
 /**
diff --git a/civicrm/CRM/Core/DAO/StatusPreference.php b/civicrm/CRM/Core/DAO/StatusPreference.php
index c3bc29c8ceec796e7cfb6cb7af67121ecffd2800..996cd9c8d1b1c46c3f114ac97d3f3bfa2fd0370e 100644
--- a/civicrm/CRM/Core/DAO/StatusPreference.php
+++ b/civicrm/CRM/Core/DAO/StatusPreference.php
@@ -6,7 +6,7 @@
  *
  * Generated from xml/schema/CRM/Core/StatusPreference.xml
  * DO NOT EDIT.  Generated by CRM_Core_CodeGen
- * (GenCodeChecksum:ce861431549af8024fdbfe418607202f)
+ * (GenCodeChecksum:58684eb3e6d1e474bae8449f4a84ef63)
  */
 
 /**
diff --git a/civicrm/CRM/Core/DAO/SystemLog.php b/civicrm/CRM/Core/DAO/SystemLog.php
index fe4caee743bc2289ebdcf3723a6a48a8fb041418..17f4c2565258a25761b1f2a53d91900dfa5cc3bb 100644
--- a/civicrm/CRM/Core/DAO/SystemLog.php
+++ b/civicrm/CRM/Core/DAO/SystemLog.php
@@ -6,7 +6,7 @@
  *
  * Generated from xml/schema/CRM/Core/SystemLog.xml
  * DO NOT EDIT.  Generated by CRM_Core_CodeGen
- * (GenCodeChecksum:f74efcf0420fc093c103adf67384fd4e)
+ * (GenCodeChecksum:53db5a26709c3b0d4cad8e38b28aef18)
  */
 
 /**
diff --git a/civicrm/CRM/Core/DAO/Tag.php b/civicrm/CRM/Core/DAO/Tag.php
index 9cdacdc38fa50c0d67c23cc22408dde8126c9f4c..f1578b26249da6d70b1f8af91694a90380032d81 100644
--- a/civicrm/CRM/Core/DAO/Tag.php
+++ b/civicrm/CRM/Core/DAO/Tag.php
@@ -6,7 +6,7 @@
  *
  * Generated from xml/schema/CRM/Core/Tag.xml
  * DO NOT EDIT.  Generated by CRM_Core_CodeGen
- * (GenCodeChecksum:9f26fdcff51afe66519e1c06518dccca)
+ * (GenCodeChecksum:7267e5b21f5bc822a58ffffc23b6dec1)
  */
 
 /**
diff --git a/civicrm/CRM/Core/DAO/Timezone.php b/civicrm/CRM/Core/DAO/Timezone.php
index b1592995d61199a0d63494840a1afd7bbf6fc7c3..0c5979ad40703f2c067e1fd04853ce5988058ebd 100644
--- a/civicrm/CRM/Core/DAO/Timezone.php
+++ b/civicrm/CRM/Core/DAO/Timezone.php
@@ -6,7 +6,7 @@
  *
  * Generated from xml/schema/CRM/Core/Timezone.xml
  * DO NOT EDIT.  Generated by CRM_Core_CodeGen
- * (GenCodeChecksum:23841252d8f5bba890c26b1b7c21ab9a)
+ * (GenCodeChecksum:a48a49afa56a0c510fb1c05a41a62435)
  */
 
 /**
diff --git a/civicrm/CRM/Core/DAO/UFField.php b/civicrm/CRM/Core/DAO/UFField.php
index fef206fed4549a3d022d994b5397969098076fdc..2d788af9337007c7143bf341f5f9486e3a18509e 100644
--- a/civicrm/CRM/Core/DAO/UFField.php
+++ b/civicrm/CRM/Core/DAO/UFField.php
@@ -6,7 +6,7 @@
  *
  * Generated from xml/schema/CRM/Core/UFField.xml
  * DO NOT EDIT.  Generated by CRM_Core_CodeGen
- * (GenCodeChecksum:100fb17dc7c4289eab137e5d7dc4e71c)
+ * (GenCodeChecksum:e0ae6fe5adeee3c32d64c87272d090b6)
  */
 
 /**
diff --git a/civicrm/CRM/Core/DAO/UFGroup.php b/civicrm/CRM/Core/DAO/UFGroup.php
index af79ab59c537c604e5b9205e7a18c89d0a91b788..dca75ebaf842c186c925353c5006604aa3b94f19 100644
--- a/civicrm/CRM/Core/DAO/UFGroup.php
+++ b/civicrm/CRM/Core/DAO/UFGroup.php
@@ -6,7 +6,7 @@
  *
  * Generated from xml/schema/CRM/Core/UFGroup.xml
  * DO NOT EDIT.  Generated by CRM_Core_CodeGen
- * (GenCodeChecksum:a146a779e1515bd1edbcd00682c0439a)
+ * (GenCodeChecksum:17f8c18034495ef7294802e4597b06f3)
  */
 
 /**
diff --git a/civicrm/CRM/Core/DAO/UFJoin.php b/civicrm/CRM/Core/DAO/UFJoin.php
index c634c1a1eea63090543faef49221fcdc2a58e90d..a9e201e3b5ac283392638b253376ac2a3fc41d25 100644
--- a/civicrm/CRM/Core/DAO/UFJoin.php
+++ b/civicrm/CRM/Core/DAO/UFJoin.php
@@ -6,7 +6,7 @@
  *
  * Generated from xml/schema/CRM/Core/UFJoin.xml
  * DO NOT EDIT.  Generated by CRM_Core_CodeGen
- * (GenCodeChecksum:89f24a136166b937d33c10856bbdbcde)
+ * (GenCodeChecksum:d8e9800524a344006c80c158e722f6cd)
  */
 
 /**
diff --git a/civicrm/CRM/Core/DAO/UFMatch.php b/civicrm/CRM/Core/DAO/UFMatch.php
index ab35e1884b39ea954b7fcc6d56121e25c8a3578d..e2a2171e4458e76e0c280c61a29cc5bb3726a114 100644
--- a/civicrm/CRM/Core/DAO/UFMatch.php
+++ b/civicrm/CRM/Core/DAO/UFMatch.php
@@ -6,7 +6,7 @@
  *
  * Generated from xml/schema/CRM/Core/UFMatch.xml
  * DO NOT EDIT.  Generated by CRM_Core_CodeGen
- * (GenCodeChecksum:1e97a23a30709e3dccfe0cb1952e71b4)
+ * (GenCodeChecksum:d732d7f3bfb8cec86d292b888e12a93c)
  */
 
 /**
diff --git a/civicrm/CRM/Core/DAO/Website.php b/civicrm/CRM/Core/DAO/Website.php
index b21f74f4f68bd7f92cfeee91710cce35977de32d..126d768c94a4a5fd0ff4c58e8f136a58c3c103e0 100644
--- a/civicrm/CRM/Core/DAO/Website.php
+++ b/civicrm/CRM/Core/DAO/Website.php
@@ -6,7 +6,7 @@
  *
  * Generated from xml/schema/CRM/Core/Website.xml
  * DO NOT EDIT.  Generated by CRM_Core_CodeGen
- * (GenCodeChecksum:7647474e15e7b7f66a4c57a64303e68d)
+ * (GenCodeChecksum:b71c21e94fb523fd92a2579cb36ccc9b)
  */
 
 /**
diff --git a/civicrm/CRM/Core/DAO/WordReplacement.php b/civicrm/CRM/Core/DAO/WordReplacement.php
index e38bc0afef336877bf92f75bd162fd96eb0326fc..078dbc9fd75a763ac8710a34e9625705efc690ff 100644
--- a/civicrm/CRM/Core/DAO/WordReplacement.php
+++ b/civicrm/CRM/Core/DAO/WordReplacement.php
@@ -6,7 +6,7 @@
  *
  * Generated from xml/schema/CRM/Core/WordReplacement.xml
  * DO NOT EDIT.  Generated by CRM_Core_CodeGen
- * (GenCodeChecksum:f423838740b39ae0935ac1282d9c5734)
+ * (GenCodeChecksum:0e956a44911169933aabb2bfdc266e32)
  */
 
 /**
diff --git a/civicrm/CRM/Core/DAO/Worldregion.php b/civicrm/CRM/Core/DAO/Worldregion.php
index 11cc3ed32931b15b9a543d02b391a625ad8389ea..d1bc1f586dccc2e0e1c78dcaaeb8f01df61fdf7f 100644
--- a/civicrm/CRM/Core/DAO/Worldregion.php
+++ b/civicrm/CRM/Core/DAO/Worldregion.php
@@ -6,7 +6,7 @@
  *
  * Generated from xml/schema/CRM/Core/Worldregion.xml
  * DO NOT EDIT.  Generated by CRM_Core_CodeGen
- * (GenCodeChecksum:d0738f13dd1c212ec0af5fc031a9c32f)
+ * (GenCodeChecksum:ec8ef1b1bc0640dbc48b47a34ea197ed)
  */
 
 /**
diff --git a/civicrm/CRM/Core/Form/Search.php b/civicrm/CRM/Core/Form/Search.php
index 855ab66045820873ecc4e5354728b02acd24a9cb..4dc1b95db36494e4994fd7968c28b9204eb7c4c2 100644
--- a/civicrm/CRM/Core/Form/Search.php
+++ b/civicrm/CRM/Core/Form/Search.php
@@ -85,6 +85,13 @@ class CRM_Core_Form_Search extends CRM_Core_Form {
     return $this->_taskList;
   }
 
+  /**
+   * Should we be adding all the metadata for contact search fields or just for the sort name.
+   *
+   * @var bool
+   */
+  protected $sortNameOnly = FALSE;
+
   /**
    * Metadata for fields on the search form.
    *
@@ -424,6 +431,9 @@ class CRM_Core_Form_Search extends CRM_Core_Form {
       return;
     }
     $this->addSortNameField();
+    if ($this->sortNameOnly) {
+      return;
+    }
 
     $this->_group = CRM_Core_PseudoConstant::nestedGroup();
     if ($this->_group) {
@@ -434,6 +444,7 @@ class CRM_Core_Form_Search extends CRM_Core_Form {
           'class' => 'crm-select2',
         ]
       );
+      $this->searchFieldMetadata['Contact']['group'] = ['name' => 'group', 'type' => CRM_Utils_Type::T_INT, 'is_pseudofield' => TRUE, 'html' => ['type' => 'Select']];
     }
 
     $contactTags = CRM_Core_BAO_Tag::getTags();
@@ -446,10 +457,13 @@ class CRM_Core_Form_Search extends CRM_Core_Form {
         ]
       );
     }
+    $this->searchFieldMetadata['Contact']['contact_tags'] = ['name' => 'contact_tags', 'type' => CRM_Utils_Type::T_INT, 'is_pseudofield' => TRUE, 'html' => ['type' => 'Select']];
     $this->addField('contact_type', ['entity' => 'Contact']);
+    $this->searchFieldMetadata['Contact']['contact_type'] = CRM_Contact_DAO_Contact::fields()['contact_type'];
 
     if (CRM_Core_Permission::check('access deleted contacts') && Civi::settings()->get('contact_undelete')) {
       $this->addElement('checkbox', 'deleted_contacts', ts('Search in Trash') . '<br />' . ts('(deleted contacts)'));
+      $this->searchFieldMetadata['Contact']['deleted_contacts'] = ['name' => 'deleted_contacts', 'type' => CRM_Utils_Type::T_INT, 'is_pseudofield' => TRUE, 'html' => ['type' => 'Checkbox']];
     }
 
   }
diff --git a/civicrm/CRM/Core/LegacyErrorHandler.php b/civicrm/CRM/Core/LegacyErrorHandler.php
index ae0f1f9859351ac4be8a127edc2003fb2676b575..f82b3ce6d3d2f9f2b72ff42be5118f085d54fc5c 100644
--- a/civicrm/CRM/Core/LegacyErrorHandler.php
+++ b/civicrm/CRM/Core/LegacyErrorHandler.php
@@ -20,18 +20,6 @@ class CRM_Core_LegacyErrorHandler {
         CRM_Utils_Array::value('message_title', $params),
         CRM_Utils_Array::value('message_type', $params, 'error')
       );
-
-      // @todo remove this code - legacy redirect path is an interim measure for moving redirects out of BAO
-      // to somewhere slightly more acceptable. they should not be part of the exception class & should
-      // be managed @ the form level - if you find a form that is triggering this piece of code
-      // you should log a ticket for it to be removed with details about the form you were on.
-      if (!empty($params['legacy_redirect_path'])) {
-        if (CRM_Utils_System::isDevelopment()) {
-          $intentionalENotice = "How did you get HERE?! - Please log in JIRA";
-          // here we could set a message telling devs to log it per above
-        }
-        CRM_Utils_System::redirect($params['legacy_redirect_path'], $params['legacy_redirect_query']);
-      }
     }
   }
 
diff --git a/civicrm/CRM/Core/ManagedEntities.php b/civicrm/CRM/Core/ManagedEntities.php
index a3883286963a35fd7e1eef88b2c2655905ab25e3..cf47fa6918bd14986f4c4e656c8ea927c5903ce5 100644
--- a/civicrm/CRM/Core/ManagedEntities.php
+++ b/civicrm/CRM/Core/ManagedEntities.php
@@ -112,10 +112,15 @@ class CRM_Core_ManagedEntities {
   /**
    * Identify any enabled/disabled modules. Add new entities, update
    * existing entities, and remove orphaned (stale) entities.
+   * @param bool $ignoreUpgradeMode
    *
    * @throws Exception
    */
-  public function reconcile() {
+  public function reconcile($ignoreUpgradeMode = FALSE) {
+    // Do not reconcile whilst we are in upgrade mode
+    if (CRM_Core_Config::singleton()->isUpgradeMode() && !$ignoreUpgradeMode) {
+      return;
+    }
     if ($error = $this->validate($this->getDeclarations())) {
       throw new Exception($error);
     }
diff --git a/civicrm/CRM/Core/OptionGroup.php b/civicrm/CRM/Core/OptionGroup.php
index 145a07fced856af67d958bff62df1704e617f665..97af275ded0507c7ef8446f881e92b116b46abf7 100644
--- a/civicrm/CRM/Core/OptionGroup.php
+++ b/civicrm/CRM/Core/OptionGroup.php
@@ -121,7 +121,7 @@ class CRM_Core_OptionGroup {
     }
 
     $query = "
-SELECT  v.{$labelColumnName} as {$labelColumnName} ,v.{$keyColumnName} as value, v.grouping as grouping
+SELECT  v.{$labelColumnName} as {$labelColumnName} ,v.{$keyColumnName} as value, v.grouping as `grouping`
 FROM   civicrm_option_value v,
        civicrm_option_group g
 WHERE  v.option_group_id = g.id
@@ -225,7 +225,7 @@ WHERE  v.option_group_id = g.id
       }
     }
     $query = "
-SELECT  v.{$labelColumnName} as {$labelColumnName} ,v.value as value, v.grouping as grouping
+SELECT  v.{$labelColumnName} as {$labelColumnName} ,v.value as value, v.grouping as `grouping`
 FROM   civicrm_option_value v,
        civicrm_option_group g
 WHERE  v.option_group_id = g.id
diff --git a/civicrm/CRM/Core/Page/Basic.php b/civicrm/CRM/Core/Page/Basic.php
index 3c4b9089b90454bb1155b4b2754c2db35daecac8..0b784e25cdfb490b062943b9f3519a8c21754381 100644
--- a/civicrm/CRM/Core/Page/Basic.php
+++ b/civicrm/CRM/Core/Page/Basic.php
@@ -170,7 +170,7 @@ abstract class CRM_Core_Page_Basic extends CRM_Core_Page {
 
     if ($id) {
       if (!$this->checkPermission($id, NULL)) {
-        CRM_Core_Error::fatal(ts('You do not have permission to make changes to the record'));
+        CRM_Core_Error::statusBounce(ts('You do not have permission to make changes to the record'));
       }
     }
 
diff --git a/civicrm/CRM/Core/Payment/AuthorizeNet.php b/civicrm/CRM/Core/Payment/AuthorizeNet.php
index dbdcdcbcac99c5e69fe6563b098fbff029fde967..52657cf22117d8a59c44579100f28bfaa5f54bcf 100644
--- a/civicrm/CRM/Core/Payment/AuthorizeNet.php
+++ b/civicrm/CRM/Core/Payment/AuthorizeNet.php
@@ -13,6 +13,8 @@
  * @author Marshal Newrock <marshal@idealso.com>
  */
 
+use Civi\Payment\Exception\PaymentProcessorException;
+
 /**
  * NOTE:
  * When looking up response codes in the Authorize.Net API, they
@@ -762,7 +764,7 @@ class CRM_Core_Payment_AuthorizeNet extends CRM_Core_Payment {
     // submit to authorize.net
     $submit = curl_init($this->_paymentProcessor['url_recur']);
     if (!$submit) {
-      return self::error(9002, 'Could not initiate connection to payment gateway');
+      throw new PaymentProcessorException('Could not initiate connection to payment gateway', 9002);
     }
 
     curl_setopt($submit, CURLOPT_RETURNTRANSFER, 1);
@@ -784,7 +786,7 @@ class CRM_Core_Payment_AuthorizeNet extends CRM_Core_Payment {
     $message = "{$responseFields['code']}: {$responseFields['text']}";
 
     if ($responseFields['resultCode'] == 'Error') {
-      return self::error($responseFields['code'], $responseFields['text']);
+      throw new PaymentProcessorException($responseFields['text'], $responseFields['code']);
     }
     return TRUE;
   }
diff --git a/civicrm/CRM/Core/Payment/PayPalImpl.php b/civicrm/CRM/Core/Payment/PayPalImpl.php
index 21803cd8ac29d7e4bffbeffcefadc7d2c59ca8af..2b971e51563f38e0baef28c76267486f24f9304d 100644
--- a/civicrm/CRM/Core/Payment/PayPalImpl.php
+++ b/civicrm/CRM/Core/Payment/PayPalImpl.php
@@ -256,10 +256,6 @@ class CRM_Core_Payment_PayPalImpl extends CRM_Core_Payment {
 
     $result = $this->invokeAPI($args);
 
-    if (is_a($result, 'CRM_Core_Error')) {
-      throw new PaymentProcessorException($result->message);
-    }
-
     /* Success */
 
     return $result['token'];
@@ -302,10 +298,6 @@ class CRM_Core_Payment_PayPalImpl extends CRM_Core_Payment {
 
     $result = $this->invokeAPI($args);
 
-    if (is_a($result, 'CRM_Core_Error')) {
-      throw new PaymentProcessorException(CRM_Core_Error::getMessages($result));
-    }
-
     /* Success */
     $fieldMap = [
       'token' => 'token',
@@ -358,10 +350,6 @@ class CRM_Core_Payment_PayPalImpl extends CRM_Core_Payment {
 
     $result = $this->invokeAPI($args);
 
-    if (is_a($result, 'CRM_Core_Error')) {
-      throw new PaymentProcessorException(CRM_Core_Error::getMessages($result));
-    }
-
     /* Success */
     $params['trxn_id'] = $result['transactionid'];
     $params['gross_amount'] = $result['amt'];
@@ -425,10 +413,6 @@ class CRM_Core_Payment_PayPalImpl extends CRM_Core_Payment {
 
     $result = $this->invokeAPI($args);
 
-    if (is_a($result, 'CRM_Core_Error')) {
-      return $result;
-    }
-
     /* Success - result looks like"
      * array (
      * 'profileid' => 'I-CP1U0PLG91R2',
@@ -562,11 +546,6 @@ class CRM_Core_Payment_PayPalImpl extends CRM_Core_Payment {
 
     $result = $this->invokeAPI($args);
 
-    // WAG
-    if (is_a($result, 'CRM_Core_Error')) {
-      return $result;
-    }
-
     $params['recurr_profile_id'] = NULL;
 
     if (CRM_Utils_Array::value('is_recur', $params) == 1) {
@@ -698,7 +677,7 @@ class CRM_Core_Payment_PayPalImpl extends CRM_Core_Payment {
    * @param string $message
    * @param array $params
    *
-   * @return array|bool|object
+   * @return bool
    * @throws \Civi\Payment\Exception\PaymentProcessorException
    */
   public function cancelSubscription(&$message = '', $params = []) {
@@ -711,9 +690,7 @@ class CRM_Core_Payment_PayPalImpl extends CRM_Core_Payment {
       $args['NOTE'] = CRM_Utils_Array::value('reason', $params);
 
       $result = $this->invokeAPI($args);
-      if (is_a($result, 'CRM_Core_Error')) {
-        return $result;
-      }
+
       $message = "{$result['ack']}: profileid={$result['profileid']}";
       return TRUE;
     }
@@ -793,9 +770,7 @@ class CRM_Core_Payment_PayPalImpl extends CRM_Core_Payment {
       $args['ZIP'] = $params['country'];
 
       $result = $this->invokeAPI($args);
-      if (is_a($result, 'CRM_Core_Error')) {
-        return $result;
-      }
+
       $message = "{$result['ack']}: profileid={$result['profileid']}";
       return TRUE;
     }
@@ -806,7 +781,7 @@ class CRM_Core_Payment_PayPalImpl extends CRM_Core_Payment {
    * @param string $message
    * @param array $params
    *
-   * @return array|bool|object
+   * @return bool
    * @throws \Civi\Payment\Exception\PaymentProcessorException
    */
   public function changeSubscriptionAmount(&$message = '', $params = []) {
@@ -822,9 +797,7 @@ class CRM_Core_Payment_PayPalImpl extends CRM_Core_Payment {
 
       $result = $this->invokeAPI($args);
       CRM_Core_Error::debug_var('$result', $result);
-      if (is_a($result, 'CRM_Core_Error')) {
-        return $result;
-      }
+
       $message = "{$result['ack']}: profileid={$result['profileid']}";
       return TRUE;
     }
@@ -1013,21 +986,18 @@ class CRM_Core_Payment_PayPalImpl extends CRM_Core_Payment {
    * returns an associative array containing the response from the server.
    *
    * @param array $args
-   * @param null $url
    *
    * @return array|object
-   * @throws \Exception
+   * @throws \Civi\Payment\Exception\PaymentProcessorException
    */
-  public function invokeAPI($args, $url = NULL) {
-
-    if ($url === NULL) {
-      if (empty($this->_paymentProcessor['url_api'])) {
-        CRM_Core_Error::fatal(ts('Please set the API URL. Please refer to the documentation for more details'));
-      }
+  public function invokeAPI($args) {
 
-      $url = $this->_paymentProcessor['url_api'] . 'nvp';
+    if (empty($this->_paymentProcessor['url_api'])) {
+      throw new PaymentProcessorException(ts('Please set the API URL. Please refer to the documentation for more details'));
     }
 
+    $url = $this->_paymentProcessor['url_api'] . 'nvp';
+
     $p = [];
     foreach ($args as $n => $v) {
       $p[] = "$n=" . urlencode($v);
@@ -1037,7 +1007,7 @@ class CRM_Core_Payment_PayPalImpl extends CRM_Core_Payment {
     $nvpreq = implode('&', $p);
 
     if (!function_exists('curl_init')) {
-      CRM_Core_Error::fatal("curl functions NOT available.");
+      throw new PaymentProcessorException('curl functions NOT available.');
     }
 
     //setting the curl parameters.
@@ -1062,16 +1032,9 @@ class CRM_Core_Payment_PayPalImpl extends CRM_Core_Payment {
     $result = self::deformat($response);
 
     if (curl_errno($ch)) {
-      $e = CRM_Core_Error::singleton();
-      $e->push(curl_errno($ch),
-        0, NULL,
-        curl_error($ch)
-      );
-      return $e;
-    }
-    else {
-      curl_close($ch);
+      throw new PaymentProcessorException(ts('Network error') . ' ' . curl_error($ch) . curl_errno($ch), curl_errno($ch));
     }
+    curl_close($ch);
 
     $outcome = strtolower(CRM_Utils_Array::value('ack', $result));
 
diff --git a/civicrm/CRM/Cxn/DAO/Cxn.php b/civicrm/CRM/Cxn/DAO/Cxn.php
index 5a070166592f972498dd240dba55a48f9fad3bfd..2565343336d986d48c94a09a64272d973891bf42 100644
--- a/civicrm/CRM/Cxn/DAO/Cxn.php
+++ b/civicrm/CRM/Cxn/DAO/Cxn.php
@@ -6,7 +6,7 @@
  *
  * Generated from xml/schema/CRM/Cxn/Cxn.xml
  * DO NOT EDIT.  Generated by CRM_Core_CodeGen
- * (GenCodeChecksum:f61b008692885b08cacabc147424ba52)
+ * (GenCodeChecksum:dbdc69652244ce9a681d85cd39ab2ba8)
  */
 
 /**
diff --git a/civicrm/CRM/Dashlet/Page/AllCases.php b/civicrm/CRM/Dashlet/Page/AllCases.php
index 91f3c74054d6482cf0a1396c66cc76f94bec242d..b321c67c2cc75dedc611a4d190d8786c4783eb5f 100644
--- a/civicrm/CRM/Dashlet/Page/AllCases.php
+++ b/civicrm/CRM/Dashlet/Page/AllCases.php
@@ -34,7 +34,7 @@ class CRM_Dashlet_Page_AllCases extends CRM_Core_Page {
 
     //check for civicase access.
     if (!CRM_Case_BAO_Case::accessCiviCase()) {
-      CRM_Core_Error::fatal(ts('You are not authorized to access this page.'));
+      CRM_Core_Error::statusBounce(ts('You are not authorized to access this page.'));
     }
 
     $controller = new CRM_Core_Controller_Simple('CRM_Case_Form_Search',
diff --git a/civicrm/CRM/Dashlet/Page/CaseDashboard.php b/civicrm/CRM/Dashlet/Page/CaseDashboard.php
index 85a21d2f62039bade4ade10e373a25efe31970ed..3428e2e447506848af2488e205deda48b1d8925b 100644
--- a/civicrm/CRM/Dashlet/Page/CaseDashboard.php
+++ b/civicrm/CRM/Dashlet/Page/CaseDashboard.php
@@ -31,7 +31,7 @@ class CRM_Dashlet_Page_CaseDashboard extends CRM_Core_Page {
   public function run() {
     //check for civicase access.
     if (!CRM_Case_BAO_Case::accessCiviCase()) {
-      CRM_Core_Error::fatal(ts('You are not authorized to access this page.'));
+      CRM_Core_Error::statusBounce(ts('You are not authorized to access this page.'));
     }
 
     $summary = CRM_Case_BAO_Case::getCasesSummary(TRUE);
diff --git a/civicrm/CRM/Dashlet/Page/MyCases.php b/civicrm/CRM/Dashlet/Page/MyCases.php
index 5d5420e1fc4497fc051ec3269a07d2202a2c1d88..1b643ff72da8f9962e3981d270628f6249852dcb 100644
--- a/civicrm/CRM/Dashlet/Page/MyCases.php
+++ b/civicrm/CRM/Dashlet/Page/MyCases.php
@@ -34,7 +34,7 @@ class CRM_Dashlet_Page_MyCases extends CRM_Core_Page {
 
     //check for civicase access.
     if (!CRM_Case_BAO_Case::accessCiviCase()) {
-      CRM_Core_Error::fatal(ts('You are not authorized to access this page.'));
+      CRM_Core_Error::statusBounce(ts('You are not authorized to access this page.'));
     }
 
     $controller = new CRM_Core_Controller_Simple('CRM_Case_Form_Search',
diff --git a/civicrm/CRM/Dedupe/DAO/Exception.php b/civicrm/CRM/Dedupe/DAO/Exception.php
index 3236cb177470df4d8ee17718a0215d24cfb2fcf8..7c10c69603a2da7aed93db60cfa284dbf7d97227 100644
--- a/civicrm/CRM/Dedupe/DAO/Exception.php
+++ b/civicrm/CRM/Dedupe/DAO/Exception.php
@@ -6,7 +6,7 @@
  *
  * Generated from xml/schema/CRM/Dedupe/Exception.xml
  * DO NOT EDIT.  Generated by CRM_Core_CodeGen
- * (GenCodeChecksum:1df7735bf1c4199f7b7ec94b1d406c14)
+ * (GenCodeChecksum:bc7e5282c75e16acace7b9d8555f6ef7)
  */
 
 /**
diff --git a/civicrm/CRM/Dedupe/DAO/Rule.php b/civicrm/CRM/Dedupe/DAO/Rule.php
index 5f8af8cad1e3bec3d71f9a136dcda5554bb4c101..90b39affc746c428ae36299bf4a25d15e44d9b35 100644
--- a/civicrm/CRM/Dedupe/DAO/Rule.php
+++ b/civicrm/CRM/Dedupe/DAO/Rule.php
@@ -6,7 +6,7 @@
  *
  * Generated from xml/schema/CRM/Dedupe/Rule.xml
  * DO NOT EDIT.  Generated by CRM_Core_CodeGen
- * (GenCodeChecksum:30ac1f4265b98b426df72998fe049025)
+ * (GenCodeChecksum:9d3a0a3213757c341f051bf258b5c67f)
  */
 
 /**
diff --git a/civicrm/CRM/Dedupe/DAO/RuleGroup.php b/civicrm/CRM/Dedupe/DAO/RuleGroup.php
index 75e44bd0496282415175626589a6abf958a46d34..fbf8ceae8a8c825d195ec77f30a4f9ee478759b5 100644
--- a/civicrm/CRM/Dedupe/DAO/RuleGroup.php
+++ b/civicrm/CRM/Dedupe/DAO/RuleGroup.php
@@ -6,7 +6,7 @@
  *
  * Generated from xml/schema/CRM/Dedupe/RuleGroup.xml
  * DO NOT EDIT.  Generated by CRM_Core_CodeGen
- * (GenCodeChecksum:2e17168197c3a81d0280c153b668dc6e)
+ * (GenCodeChecksum:16caaddab6049c5559c418b140d03fa8)
  */
 
 /**
diff --git a/civicrm/CRM/Event/Cart/DAO/Cart.php b/civicrm/CRM/Event/Cart/DAO/Cart.php
index ed2b6a86eadc28cd500446d0f24d3dc76b24431d..23b95293acccfe619b3ba138d7e7dc655cc20d1d 100644
--- a/civicrm/CRM/Event/Cart/DAO/Cart.php
+++ b/civicrm/CRM/Event/Cart/DAO/Cart.php
@@ -6,7 +6,7 @@
  *
  * Generated from xml/schema/CRM/Event/Cart/Cart.xml
  * DO NOT EDIT.  Generated by CRM_Core_CodeGen
- * (GenCodeChecksum:7b08194ffb923d40298dfa67886a3be2)
+ * (GenCodeChecksum:57220a9c79c8b801d23ed0c31cb18a63)
  */
 
 /**
diff --git a/civicrm/CRM/Event/Cart/DAO/EventInCart.php b/civicrm/CRM/Event/Cart/DAO/EventInCart.php
index 1c85134645efe90010f4adb3633b0082023a0198..8afcdcbdf8a2a84da29cd69bca0c388b7780b7a8 100644
--- a/civicrm/CRM/Event/Cart/DAO/EventInCart.php
+++ b/civicrm/CRM/Event/Cart/DAO/EventInCart.php
@@ -6,7 +6,7 @@
  *
  * Generated from xml/schema/CRM/Event/Cart/EventInCart.xml
  * DO NOT EDIT.  Generated by CRM_Core_CodeGen
- * (GenCodeChecksum:810abc7e3ff25bad4a4a0ef82c8158c7)
+ * (GenCodeChecksum:a3cddf6fa66ed1294fb6a2736449ac3f)
  */
 
 /**
diff --git a/civicrm/CRM/Event/DAO/Event.php b/civicrm/CRM/Event/DAO/Event.php
index 9f29222c7c00cdc9a0e44814f1bf9f6266d077f7..53ce1f60c474aea014097c0805d0c416c1f11ff4 100644
--- a/civicrm/CRM/Event/DAO/Event.php
+++ b/civicrm/CRM/Event/DAO/Event.php
@@ -6,7 +6,7 @@
  *
  * Generated from xml/schema/CRM/Event/Event.xml
  * DO NOT EDIT.  Generated by CRM_Core_CodeGen
- * (GenCodeChecksum:839408d0d122c558757ad2855021733d)
+ * (GenCodeChecksum:700e3666bce40a962c06c970790fb599)
  */
 
 /**
diff --git a/civicrm/CRM/Event/DAO/Participant.php b/civicrm/CRM/Event/DAO/Participant.php
index c292222633050f373d638aaf17c6210f61e916bd..2bf5d85243ef29b0bc2842109d3944f9fde9ab2b 100644
--- a/civicrm/CRM/Event/DAO/Participant.php
+++ b/civicrm/CRM/Event/DAO/Participant.php
@@ -6,7 +6,7 @@
  *
  * Generated from xml/schema/CRM/Event/Participant.xml
  * DO NOT EDIT.  Generated by CRM_Core_CodeGen
- * (GenCodeChecksum:eb8c441daf90abc9313b39ef6033320b)
+ * (GenCodeChecksum:bc3da50711791a21ca2aff845977efbb)
  */
 
 /**
diff --git a/civicrm/CRM/Event/DAO/ParticipantPayment.php b/civicrm/CRM/Event/DAO/ParticipantPayment.php
index 37c9c9d4b0a3962c5ca378aedfc64ba0cf50480c..9b7c5a4867e5de4fc79c2927c69505c79a01aa42 100644
--- a/civicrm/CRM/Event/DAO/ParticipantPayment.php
+++ b/civicrm/CRM/Event/DAO/ParticipantPayment.php
@@ -6,7 +6,7 @@
  *
  * Generated from xml/schema/CRM/Event/ParticipantPayment.xml
  * DO NOT EDIT.  Generated by CRM_Core_CodeGen
- * (GenCodeChecksum:a439bb3f9e139078684c158e8c47748b)
+ * (GenCodeChecksum:2bf1d538625b84200c82b914ea043e90)
  */
 
 /**
diff --git a/civicrm/CRM/Event/DAO/ParticipantStatusType.php b/civicrm/CRM/Event/DAO/ParticipantStatusType.php
index f61dc724ce94060a9c68c8211c9e0f174b593341..85cc8e419fc25832924b6dc8efa8438e3975abb5 100644
--- a/civicrm/CRM/Event/DAO/ParticipantStatusType.php
+++ b/civicrm/CRM/Event/DAO/ParticipantStatusType.php
@@ -6,7 +6,7 @@
  *
  * Generated from xml/schema/CRM/Event/ParticipantStatusType.xml
  * DO NOT EDIT.  Generated by CRM_Core_CodeGen
- * (GenCodeChecksum:ff67f80115b20f29d4237edbfff9fe83)
+ * (GenCodeChecksum:d87b49cf752d4ffb3ff346c30506e170)
  */
 
 /**
diff --git a/civicrm/CRM/Event/Form/ManageEvent/Delete.php b/civicrm/CRM/Event/Form/ManageEvent/Delete.php
index 30dc58e441fa7ad21480962906c4ed17db8ef342..376800f00c19a8d0a71e411779edb6319297baca 100644
--- a/civicrm/CRM/Event/Form/ManageEvent/Delete.php
+++ b/civicrm/CRM/Event/Form/ManageEvent/Delete.php
@@ -29,6 +29,9 @@ class CRM_Event_Form_ManageEvent_Delete extends CRM_Event_Form_ManageEvent {
 
   /**
    * Set variables up before form is built.
+   *
+   * @throws \CiviCRM_API3_Exception
+   * @throws \CRM_Core_Exception
    */
   public function preProcess() {
     parent::preProcess();
@@ -41,7 +44,7 @@ class CRM_Event_Form_ManageEvent_Delete extends CRM_Event_Form_ManageEvent {
     }
 
     if (!CRM_Event_BAO_Event::checkPermission($this->_id, CRM_Core_Permission::DELETE)) {
-      CRM_Core_Error::fatal(ts('You do not have permission to access this page.'));
+      CRM_Core_Error::statusBounce(ts('You do not have permission to access this page.'));
     }
   }
 
diff --git a/civicrm/CRM/Event/Form/Registration.php b/civicrm/CRM/Event/Form/Registration.php
index 0b0ee041a4a2d2a1ebbe773601e514aa980f6e7a..69a3d54a61caee4127be8ed2376c710eea6e9941 100644
--- a/civicrm/CRM/Event/Form/Registration.php
+++ b/civicrm/CRM/Event/Form/Registration.php
@@ -244,7 +244,7 @@ class CRM_Event_Form_Registration extends CRM_Core_Form {
         && CRM_Financial_BAO_FinancialType::isACLFinancialTypeStatus()
         && !CRM_Core_Permission::check('add contributions of type ' . CRM_Contribute_PseudoConstant::financialType($this->_values['event']['financial_type_id']))
       ) {
-        CRM_Core_Error::fatal(ts('You do not have permission to access this page.'));
+        CRM_Core_Error::statusBounce(ts('You do not have permission to access this page.'));
       }
 
       $this->checkValidEvent($infoUrl);
diff --git a/civicrm/CRM/Event/Form/Registration/Confirm.php b/civicrm/CRM/Event/Form/Registration/Confirm.php
index ae9fa34134def2240327778d7d5c35a53f8c39e7..230001b9b6264dac15224d1ad7d7a18c27a8d0a9 100644
--- a/civicrm/CRM/Event/Form/Registration/Confirm.php
+++ b/civicrm/CRM/Event/Form/Registration/Confirm.php
@@ -365,6 +365,9 @@ class CRM_Event_Form_Registration_Confirm extends CRM_Event_Form_Registration {
 
   /**
    * Process the form submission.
+   *
+   * @throws \CiviCRM_API3_Exception
+   * @throws \CRM_Core_Exception
    */
   public function postProcess() {
     $now = date('YmdHis');
diff --git a/civicrm/CRM/Event/Form/Registration/Register.php b/civicrm/CRM/Event/Form/Registration/Register.php
index e44d2e3f7229d116d55c947f07e5dae77345afb1..4065bed5db3922df38db4bcfda60d6ad6aa1bd95 100644
--- a/civicrm/CRM/Event/Form/Registration/Register.php
+++ b/civicrm/CRM/Event/Form/Registration/Register.php
@@ -807,10 +807,16 @@ class CRM_Event_Form_Registration_Register extends CRM_Event_Form_Registration {
       $errors['additional_participants'] = ts("There is only enough space left on this event for %1 participant(s).", [1 => $form->_availableRegistrations]);
     }
 
+    $numberAdditionalParticipants = $fields['additional_participants'] ?? 0;
+
+    if ($numberAdditionalParticipants && !CRM_Utils_Rule::positiveInteger($fields['additional_participants'])) {
+      $errors['additional_participants'] = ts('Please enter a whole number for Number of additional people.');
+    }
+
     // during confirmation don't allow to increase additional participants, CRM-4320
-    if ($form->_allowConfirmation && !empty($fields['additional_participants']) &&
+    if ($form->_allowConfirmation && $numberAdditionalParticipants &&
       is_array($form->_additionalParticipantIds) &&
-      $fields['additional_participants'] > count($form->_additionalParticipantIds)
+      $numberAdditionalParticipants > count($form->_additionalParticipantIds)
     ) {
       $errors['additional_participants'] = ts("Oops. It looks like you are trying to increase the number of additional people you are registering for. You can confirm registration for a maximum of %1 additional people.", [1 => count($form->_additionalParticipantIds)]);
     }
@@ -824,12 +830,6 @@ class CRM_Event_Form_Registration_Register extends CRM_Event_Form_Registration {
       }
     }
 
-    if (!empty($fields['additional_participants']) &&
-      !CRM_Utils_Rule::positiveInteger($fields['additional_participants'])
-    ) {
-      $errors['additional_participants'] = ts('Please enter a whole number for Number of additional people.');
-    }
-
     // priceset validations
     if (!empty($fields['priceSetId']) &&
      !$form->_requireApproval && !$form->_allowWaitlist
@@ -844,8 +844,8 @@ class CRM_Event_Form_Registration_Register extends CRM_Event_Form_Registration {
       $errors = array_merge($errors, CRM_Utils_Array::value(0, $priceSetErrors, []));
 
       $totalParticipants = $primaryParticipantCount;
-      if (!empty($fields['additional_participants'])) {
-        $totalParticipants += $fields['additional_participants'];
+      if ($numberAdditionalParticipants) {
+        $totalParticipants += $numberAdditionalParticipants;
       }
 
       if (empty($fields['bypass_payment']) &&
diff --git a/civicrm/CRM/Event/Form/Search.php b/civicrm/CRM/Event/Form/Search.php
index c69dacf54deaee24e2674f10471c2b5cf2662018..6c2c7534b428425ab75da77664bfc3a00c489926 100644
--- a/civicrm/CRM/Event/Form/Search.php
+++ b/civicrm/CRM/Event/Form/Search.php
@@ -289,7 +289,6 @@ class CRM_Event_Form_Search extends CRM_Core_Form_Search {
 
     $this->_queryParams = CRM_Contact_BAO_Query::convertFormValues($this->_formValues, 0, FALSE, NULL, ['event_id']);
 
-    $this->set('formValues', $this->_formValues);
     $this->set('queryParams', $this->_queryParams);
 
     $buttonName = $this->controller->getButtonName();
@@ -382,29 +381,6 @@ class CRM_Event_Form_Search extends CRM_Core_Form_Search {
     // if this search has been forced
     // then see if there are any get values, and if so over-ride the post values
     // note that this means that GET over-rides POST :)
-    $event = CRM_Utils_Request::retrieve('event', 'Positive');
-    if ($event) {
-      $this->_formValues['event_id'] = $event;
-      $this->_formValues['event_name'] = CRM_Event_PseudoConstant::event($event, TRUE);
-    }
-
-    $status = CRM_Utils_Request::retrieve('status', 'String');
-
-    if (isset($status)) {
-      if ($status === 'true') {
-        $statusTypes = CRM_Event_PseudoConstant::participantStatus(NULL, "is_counted = 1");
-      }
-      elseif ($status === 'false') {
-        $statusTypes = CRM_Event_PseudoConstant::participantStatus(NULL, "is_counted = 0");
-      }
-      elseif (is_numeric($status)) {
-        $statusTypes = (int) $status;
-      }
-      elseif (is_array($status) && !array_key_exists('IN', $status)) {
-        $statusTypes = array_keys($status);
-      }
-      $this->_formValues['participant_status_id'] = is_array($statusTypes) ? ['IN' => array_keys($statusTypes)] : $statusTypes;
-    }
 
     $role = CRM_Utils_Request::retrieve('role', 'String');
 
@@ -466,6 +442,28 @@ class CRM_Event_Form_Search extends CRM_Core_Form_Search {
    */
   public function setDefaultValues() {
     $this->_defaults = array_merge(parent::setDefaultValues(), (array) $this->_formValues);
+    $event = CRM_Utils_Request::retrieve('event', 'Positive');
+    if ($event) {
+      $this->_defaults['event_id'] = $event;
+      $this->_defaults['event_name'] = CRM_Event_PseudoConstant::event($event, TRUE);
+    }
+
+    $status = CRM_Utils_Request::retrieve('status', 'String');
+    if (isset($status)) {
+      if ($status === 'true') {
+        $statusTypes = CRM_Event_PseudoConstant::participantStatus(NULL, "is_counted = 1");
+      }
+      elseif ($status === 'false') {
+        $statusTypes = CRM_Event_PseudoConstant::participantStatus(NULL, "is_counted = 0");
+      }
+      elseif (is_numeric($status)) {
+        $statusTypes = (int) $status;
+      }
+      elseif (is_array($status) && !array_key_exists('IN', $status)) {
+        $statusTypes = array_keys($status);
+      }
+      $this->_defaults['participant_status_id'] = is_array($statusTypes) ? array_keys($statusTypes) : $statusTypes;
+    }
     return $this->_defaults;
   }
 
diff --git a/civicrm/CRM/Event/Form/Task/Delete.php b/civicrm/CRM/Event/Form/Task/Delete.php
index 3c5413becf797accfe25299b519aeb82c82aca13..d84c977c2f8023bda47511eaea1fa0cedac66d69 100644
--- a/civicrm/CRM/Event/Form/Task/Delete.php
+++ b/civicrm/CRM/Event/Form/Task/Delete.php
@@ -41,7 +41,7 @@ class CRM_Event_Form_Task_Delete extends CRM_Event_Form_Task {
 
     //check for delete
     if (!CRM_Core_Permission::checkActionPermission('CiviEvent', CRM_Core_Action::DELETE)) {
-      CRM_Core_Error::fatal(ts('You do not have permission to access this page.'));
+      CRM_Core_Error::statusBounce(ts('You do not have permission to access this page.'));
     }
     parent::preProcess();
     foreach ($this->_participantIds as $participantId) {
diff --git a/civicrm/CRM/Event/Page/ParticipantListing.php b/civicrm/CRM/Event/Page/ParticipantListing.php
index 1b8540312a1f614e7c97b8361915a23da056566a..a9f718ca61df0d0b740f3e1cda3ad1644d3ecb42 100644
--- a/civicrm/CRM/Event/Page/ParticipantListing.php
+++ b/civicrm/CRM/Event/Page/ParticipantListing.php
@@ -35,7 +35,7 @@ class CRM_Event_Page_ParticipantListing extends CRM_Core_Page {
       'participant_listing_id'
     );
     if (!$this->_participantListingID) {
-      CRM_Core_Error::fatal(ts('The Participant Listing feature is not currently enabled for this event.'));
+      CRM_Core_Error::statusBounce(ts('The Participant Listing feature is not currently enabled for this event.'));
     }
 
     // retrieve Event Title and include it in page title
diff --git a/civicrm/CRM/Event/Page/ParticipantListing/NameStatusAndDate.php b/civicrm/CRM/Event/Page/ParticipantListing/NameStatusAndDate.php
index a15c5928e8ba7a7e32240148eb87b50b3d2782b0..fef5ae7b12e1206f566dead8affa5e894eb66f1d 100644
--- a/civicrm/CRM/Event/Page/ParticipantListing/NameStatusAndDate.php
+++ b/civicrm/CRM/Event/Page/ParticipantListing/NameStatusAndDate.php
@@ -35,7 +35,7 @@ class CRM_Event_Page_ParticipantListing_NameStatusAndDate extends CRM_Core_Page
       'participant_listing_id'
     );
     if (!$this->_participantListingID) {
-      CRM_Core_Error::fatal(ts("The Participant Listing feature is not currently enabled for this event."));
+      CRM_Core_Error::statusBounce(ts("The Participant Listing feature is not currently enabled for this event."));
     }
 
     // retrieve Event Title and include it in page title
diff --git a/civicrm/CRM/Export/BAO/ExportProcessor.php b/civicrm/CRM/Export/BAO/ExportProcessor.php
index 2cb0f6a7b61abd9f87c5b06a70b75b854928d35c..bffb062de0022ace04fcb0df5539ad47055bf682 100644
--- a/civicrm/CRM/Export/BAO/ExportProcessor.php
+++ b/civicrm/CRM/Export/BAO/ExportProcessor.php
@@ -2374,6 +2374,10 @@ LIMIT $offset, $limit
       'csv',
       FALSE
     );
+    // Output UTF BOM so that MS Excel copes with diacritics. This is recommended as
+    // the Windows variant but is tested with MS Excel for Mac (Office 365 v 16.31)
+    // and it continues to work on Libre Office, Numbers, Notes etc.
+    echo "\xEF\xBB\xBF";
     CRM_Core_Report_Excel::makeCSVTable($headerRows, [], NULL, TRUE);
   }
 
diff --git a/civicrm/CRM/Extension/Container/Basic.php b/civicrm/CRM/Extension/Container/Basic.php
index 69123ac94a6fc34aef9d4d9f3eb3ec572e47986c..0588c5eeb172bcd5fb24041fbaf90ace708768f4 100644
--- a/civicrm/CRM/Extension/Container/Basic.php
+++ b/civicrm/CRM/Extension/Container/Basic.php
@@ -35,28 +35,31 @@ class CRM_Extension_Container_Basic implements CRM_Extension_Container_Interface
   public $baseUrl;
 
   /**
-   * @var CRM_Utils_Cache_Interface|NULL
+   * @var CRM_Utils_Cache_Interface|null
    *
    * Note: Treat as private. This is only public to facilitate debugging.
    */
   public $cache;
 
   /**
-   * @var string the cache key used for any data stored by this container
+   * @var string
+   * The cache key used for any data stored by this container
    *
    * Note: Treat as private. This is only public to facilitate debugging.
    */
   public $cacheKey;
 
   /**
-   * @var array($key => $relPath)
+   * @var array
+   * ($key => $relPath)
    *
    * Note: Treat as private. This is only public to facilitate debugging.
    */
   public $relPaths = FALSE;
 
   /**
-   * @var array($key => $relUrl)
+   * @var array
+   * ($key => $relUrl)
    *
    * Derived from $relPaths. On Unix systems (where file-paths and
    * URL-paths both use '/' separator), this isn't necessary. On Windows
diff --git a/civicrm/CRM/Extension/Downloader.php b/civicrm/CRM/Extension/Downloader.php
index a092a88e46d02f746c43222578e7f257b392b624..cc43c8be6ee4c0efa0ff193f3f95cf8b0361ff53 100644
--- a/civicrm/CRM/Extension/Downloader.php
+++ b/civicrm/CRM/Extension/Downloader.php
@@ -17,12 +17,14 @@
  */
 class CRM_Extension_Downloader {
   /**
-   * @var CRM_Extension_Container_Basic the place where downloaded extensions are ultimately stored
+   * @var CRM_Extension_Container_Basic
+   * The place where downloaded extensions are ultimately stored
    */
   public $container;
 
   /**
-   * @var string local path to a temporary data directory
+   * @var string
+   * Local path to a temporary data directory
    */
   public $tmpDir;
 
diff --git a/civicrm/CRM/Extension/Mapper.php b/civicrm/CRM/Extension/Mapper.php
index 3078e0eb391ea5667a8bde6f619434bdbfafdab9..a21af4d43b7e2c7458014fd216043fac14abbc5c 100644
--- a/civicrm/CRM/Extension/Mapper.php
+++ b/civicrm/CRM/Extension/Mapper.php
@@ -45,7 +45,8 @@ class CRM_Extension_Mapper {
   protected $container;
 
   /**
-   * @var array (key => CRM_Extension_Info)
+   * @var \CRM_Extension_Info[]
+   * (key => CRM_Extension_Info)
    */
   protected $infos = [];
 
diff --git a/civicrm/CRM/Financial/DAO/Currency.php b/civicrm/CRM/Financial/DAO/Currency.php
index bb7191133afbffc4e00859958f5283ded92a291a..5d087d557132344a866bf4b220eba1b8da6df47e 100644
--- a/civicrm/CRM/Financial/DAO/Currency.php
+++ b/civicrm/CRM/Financial/DAO/Currency.php
@@ -6,7 +6,7 @@
  *
  * Generated from xml/schema/CRM/Financial/Currency.xml
  * DO NOT EDIT.  Generated by CRM_Core_CodeGen
- * (GenCodeChecksum:210360337389e12e2b94d9b69542e2b5)
+ * (GenCodeChecksum:deb271a4217800d258244eab0eec2af5)
  */
 
 /**
diff --git a/civicrm/CRM/Financial/DAO/EntityFinancialAccount.php b/civicrm/CRM/Financial/DAO/EntityFinancialAccount.php
index 582f0e54664fc4f26c1ab031e2646dc894022088..d0316067bb7170ae2f27bf2a2a2248a6d5851116 100644
--- a/civicrm/CRM/Financial/DAO/EntityFinancialAccount.php
+++ b/civicrm/CRM/Financial/DAO/EntityFinancialAccount.php
@@ -6,7 +6,7 @@
  *
  * Generated from xml/schema/CRM/Financial/EntityFinancialAccount.xml
  * DO NOT EDIT.  Generated by CRM_Core_CodeGen
- * (GenCodeChecksum:9d665341d7a4293411adf33acafdae1d)
+ * (GenCodeChecksum:677acfd2e16083ab88abbeb3051dd616)
  */
 
 /**
diff --git a/civicrm/CRM/Financial/DAO/EntityFinancialTrxn.php b/civicrm/CRM/Financial/DAO/EntityFinancialTrxn.php
index c8eb22da4c58c32730d54225406b2a54f6e3e674..8a57c1b2abeffeef0950f5f609c63d1cece54b9a 100644
--- a/civicrm/CRM/Financial/DAO/EntityFinancialTrxn.php
+++ b/civicrm/CRM/Financial/DAO/EntityFinancialTrxn.php
@@ -6,7 +6,7 @@
  *
  * Generated from xml/schema/CRM/Financial/EntityFinancialTrxn.xml
  * DO NOT EDIT.  Generated by CRM_Core_CodeGen
- * (GenCodeChecksum:d1f8caf14eed45d30b99be154c7f3650)
+ * (GenCodeChecksum:a2a7ed7efce5731cde1127d2ca874fb6)
  */
 
 /**
diff --git a/civicrm/CRM/Financial/DAO/FinancialAccount.php b/civicrm/CRM/Financial/DAO/FinancialAccount.php
index 262539007a5eaed2366a6d555ceff447795ad389..af9a1c8713ea7df72a282dca9e4ab712aa16456e 100644
--- a/civicrm/CRM/Financial/DAO/FinancialAccount.php
+++ b/civicrm/CRM/Financial/DAO/FinancialAccount.php
@@ -6,7 +6,7 @@
  *
  * Generated from xml/schema/CRM/Financial/FinancialAccount.xml
  * DO NOT EDIT.  Generated by CRM_Core_CodeGen
- * (GenCodeChecksum:05c251d7bf5f98a35b4a25abb98b70c8)
+ * (GenCodeChecksum:ccca91d77f1c8f2639bf0d81bd484b9c)
  */
 
 /**
diff --git a/civicrm/CRM/Financial/DAO/FinancialItem.php b/civicrm/CRM/Financial/DAO/FinancialItem.php
index c9972d7c4ec9260b6f3b9460161b78b9b574af8a..728acc9447b268375bdecd8a3cc562e3ec7f4077 100644
--- a/civicrm/CRM/Financial/DAO/FinancialItem.php
+++ b/civicrm/CRM/Financial/DAO/FinancialItem.php
@@ -6,7 +6,7 @@
  *
  * Generated from xml/schema/CRM/Financial/FinancialItem.xml
  * DO NOT EDIT.  Generated by CRM_Core_CodeGen
- * (GenCodeChecksum:02ec1490ebc665316bc38da19b07cb60)
+ * (GenCodeChecksum:955fb837c150c2f16f165f8a03610769)
  */
 
 /**
diff --git a/civicrm/CRM/Financial/DAO/FinancialTrxn.php b/civicrm/CRM/Financial/DAO/FinancialTrxn.php
index 410811ca914b6dce9eac75416029bba806030ce1..4c664b179a59b78511134129d964eb63b3b21d99 100644
--- a/civicrm/CRM/Financial/DAO/FinancialTrxn.php
+++ b/civicrm/CRM/Financial/DAO/FinancialTrxn.php
@@ -6,7 +6,7 @@
  *
  * Generated from xml/schema/CRM/Financial/FinancialTrxn.xml
  * DO NOT EDIT.  Generated by CRM_Core_CodeGen
- * (GenCodeChecksum:30dff7f6f16ef7cd997187a202a59173)
+ * (GenCodeChecksum:b4a9dceaf91c13ea192a11b7cb8805ca)
  */
 
 /**
diff --git a/civicrm/CRM/Financial/DAO/FinancialType.php b/civicrm/CRM/Financial/DAO/FinancialType.php
index 343c912fc9ff1675cccf3deadccaf2464ca3ecdd..d6a2a5fdbd613e545474a0a5c5406fcf0c36fe41 100644
--- a/civicrm/CRM/Financial/DAO/FinancialType.php
+++ b/civicrm/CRM/Financial/DAO/FinancialType.php
@@ -6,7 +6,7 @@
  *
  * Generated from xml/schema/CRM/Financial/FinancialType.xml
  * DO NOT EDIT.  Generated by CRM_Core_CodeGen
- * (GenCodeChecksum:fbe9cc9ddab4b7f1be7a502240854437)
+ * (GenCodeChecksum:2b85a903889dbaebc8fd1dc4994ef11d)
  */
 
 /**
diff --git a/civicrm/CRM/Financial/DAO/PaymentProcessor.php b/civicrm/CRM/Financial/DAO/PaymentProcessor.php
index 58167b99effb80e945984a05acd159a8f9eced94..5fda60987d98eb0efde3091f05c0c27d73307210 100644
--- a/civicrm/CRM/Financial/DAO/PaymentProcessor.php
+++ b/civicrm/CRM/Financial/DAO/PaymentProcessor.php
@@ -6,7 +6,7 @@
  *
  * Generated from xml/schema/CRM/Financial/PaymentProcessor.xml
  * DO NOT EDIT.  Generated by CRM_Core_CodeGen
- * (GenCodeChecksum:55a55af34cd25ec8d69f4145d3fa2870)
+ * (GenCodeChecksum:cf330d3d3e18960b1e32a3001d8cd038)
  */
 
 /**
diff --git a/civicrm/CRM/Financial/DAO/PaymentProcessorType.php b/civicrm/CRM/Financial/DAO/PaymentProcessorType.php
index 732ec4b539a06442c87592686e0f7b9b6f0804a6..1ec35e96d775899979b5d85246405c5ba8238e7c 100644
--- a/civicrm/CRM/Financial/DAO/PaymentProcessorType.php
+++ b/civicrm/CRM/Financial/DAO/PaymentProcessorType.php
@@ -6,7 +6,7 @@
  *
  * Generated from xml/schema/CRM/Financial/PaymentProcessorType.xml
  * DO NOT EDIT.  Generated by CRM_Core_CodeGen
- * (GenCodeChecksum:ea2020b03d32e0c0f1a2d4915f2a14b1)
+ * (GenCodeChecksum:5c1b8ad9b5ebf8ee399cf5d5268349bc)
  */
 
 /**
diff --git a/civicrm/CRM/Financial/DAO/PaymentToken.php b/civicrm/CRM/Financial/DAO/PaymentToken.php
index c4ba2ff7807bfb3d4bcdf84437467e1a7a58c21c..6042a126adee035e4982b680a466f38df2bacddb 100644
--- a/civicrm/CRM/Financial/DAO/PaymentToken.php
+++ b/civicrm/CRM/Financial/DAO/PaymentToken.php
@@ -6,7 +6,7 @@
  *
  * Generated from xml/schema/CRM/Financial/PaymentToken.xml
  * DO NOT EDIT.  Generated by CRM_Core_CodeGen
- * (GenCodeChecksum:078a57c5d0afbe495e82999ab197e12b)
+ * (GenCodeChecksum:13544efb93b23abff9ec2bf420fcd15a)
  */
 
 /**
diff --git a/civicrm/CRM/Financial/Form/FinancialType.php b/civicrm/CRM/Financial/Form/FinancialType.php
index d9e223f8e3c0f471fee0c07feceac0f132c13fec..9dd624538c81bdc11765098f5af4e50eb6dca6bc 100644
--- a/civicrm/CRM/Financial/Form/FinancialType.php
+++ b/civicrm/CRM/Financial/Form/FinancialType.php
@@ -38,13 +38,15 @@ class CRM_Financial_Form_FinancialType extends CRM_Contribute_Form {
 
   /**
    * Set variables up before form is built.
+   *
+   * @throws \CRM_Core_Exception
    */
   public function preProcess() {
     // Check permission for Financial Type when ACL-FT is enabled
     if (CRM_Financial_BAO_FinancialType::isACLFinancialTypeStatus()
       && !CRM_Core_Permission::check('administer CiviCRM Financial Types')
     ) {
-      CRM_Core_Error::fatal(ts('You do not have permission to access this page.'));
+      CRM_Core_Error::statusBounce(ts('You do not have permission to access this page.'));
     }
     $this->_id = CRM_Utils_Request::retrieve('id', 'Positive', $this);
     parent::preProcess();
diff --git a/civicrm/CRM/Financial/Page/FinancialType.php b/civicrm/CRM/Financial/Page/FinancialType.php
index 6a999cecfbb9337fc7a86bb10d9ade9dc3939a8b..7a1480d52472452a1a8771d43276f04bbc1878f3 100644
--- a/civicrm/CRM/Financial/Page/FinancialType.php
+++ b/civicrm/CRM/Financial/Page/FinancialType.php
@@ -88,7 +88,7 @@ class CRM_Financial_Page_FinancialType extends CRM_Core_Page_Basic {
     if (CRM_Financial_BAO_FinancialType::isACLFinancialTypeStatus()
       && !CRM_Core_Permission::check('administer CiviCRM Financial Types')
     ) {
-      CRM_Core_Error::fatal(ts('You do not have permission to access this page.'));
+      CRM_Core_Error::statusBounce(ts('You do not have permission to access this page.'));
     }
     // get all financial types sorted by weight
     $financialType = [];
diff --git a/civicrm/CRM/Friend/DAO/Friend.php b/civicrm/CRM/Friend/DAO/Friend.php
index 1596351ed75b478f2f6f72e5e0275e088295a15a..bb66fa7ff32224cb828e4e16ee62b4236eda1619 100644
--- a/civicrm/CRM/Friend/DAO/Friend.php
+++ b/civicrm/CRM/Friend/DAO/Friend.php
@@ -6,7 +6,7 @@
  *
  * Generated from xml/schema/CRM/Friend/Friend.xml
  * DO NOT EDIT.  Generated by CRM_Core_CodeGen
- * (GenCodeChecksum:8218c3da1a68f90b534e4724bd0b89b1)
+ * (GenCodeChecksum:1800a70ee75e0958cd01c250085ab793)
  */
 
 /**
diff --git a/civicrm/CRM/Friend/Form.php b/civicrm/CRM/Friend/Form.php
index ce38a42d3fa5a2bb1474b1e366f2afaa4245ad4b..e1e03c3576b45f410984e429c9a287355b2d46a0 100644
--- a/civicrm/CRM/Friend/Form.php
+++ b/civicrm/CRM/Friend/Form.php
@@ -97,7 +97,7 @@ class CRM_Friend_Form extends CRM_Core_Form {
       );
 
       if (empty($values['is_tellfriend_enabled'])) {
-        CRM_Core_Error::fatal(ts('Tell Friend is disable for this Personal Campaign Page'));
+        CRM_Core_Error::statusBounce(ts('Tell Friend is disable for this Personal Campaign Page'));
       }
 
       $this->_mailLimit = $values['tellfriend_limit'];
@@ -118,7 +118,7 @@ class CRM_Friend_Form extends CRM_Core_Form {
       $this->assign('pcpTitle', $this->_title);
     }
     else {
-      CRM_Core_Error::fatal(ts('page argument missing or invalid'));
+      CRM_Core_Error::statusBounce(ts('page argument missing or invalid'));
     }
     $this->assign('context', $pcomponent);
 
diff --git a/civicrm/CRM/Grant/BAO/Grant.php b/civicrm/CRM/Grant/BAO/Grant.php
index 12147c190ef6a658d602dc9ce371d295a190d9b7..baf098c4fc047ff1950b8768fff4ea9dbf5bd673 100644
--- a/civicrm/CRM/Grant/BAO/Grant.php
+++ b/civicrm/CRM/Grant/BAO/Grant.php
@@ -71,6 +71,8 @@ class CRM_Grant_BAO_Grant extends CRM_Grant_DAO_Grant {
    *
    * @return array
    *   Array of event summary values
+   *
+   * @throws CRM_Core_Exception
    */
   public static function getGrantStatusOptGroup() {
 
@@ -81,7 +83,7 @@ class CRM_Grant_BAO_Grant extends CRM_Grant_DAO_Grant {
 
     $og = CRM_Core_BAO_OptionGroup::retrieve($params, $defaults);
     if (!$og) {
-      CRM_Core_Error::fatal('No option group for grant statuses - database discrepancy! Make sure you loaded civicrm_data.mysql');
+      throw new CRM_Core_Exception('No option group for grant statuses - database discrepancy! Make sure you loaded civicrm_data.mysql');
     }
 
     return $og;
diff --git a/civicrm/CRM/Grant/DAO/Grant.php b/civicrm/CRM/Grant/DAO/Grant.php
index b4bad996bc94da7a12e6c82dc644bdd17a63917b..6b4e2030faffc44ded28054bc57e91d0f89dfec2 100644
--- a/civicrm/CRM/Grant/DAO/Grant.php
+++ b/civicrm/CRM/Grant/DAO/Grant.php
@@ -6,7 +6,7 @@
  *
  * Generated from xml/schema/CRM/Grant/Grant.xml
  * DO NOT EDIT.  Generated by CRM_Core_CodeGen
- * (GenCodeChecksum:03885f41aa2d1f7299c66134ddd19ec2)
+ * (GenCodeChecksum:e3991ac7947eba1455b363a55b1064eb)
  */
 
 /**
diff --git a/civicrm/CRM/Grant/Form/Grant.php b/civicrm/CRM/Grant/Form/Grant.php
index 787a8b86ca556bcc7faf915ef8789e1ac3572d7d..7f81aceb68d3cb4418e0839fd20c351b1baedc12 100644
--- a/civicrm/CRM/Grant/Form/Grant.php
+++ b/civicrm/CRM/Grant/Form/Grant.php
@@ -66,7 +66,7 @@ class CRM_Grant_Form_Grant extends CRM_Core_Form {
 
     //check permission for action.
     if (!CRM_Core_Permission::checkActionPermission('CiviGrant', $this->_action)) {
-      CRM_Core_Error::fatal(ts('You do not have permission to access this page.'));
+      CRM_Core_Error::statusBounce(ts('You do not have permission to access this page.'));
     }
 
     $this->setPageTitle(ts('Grant'));
diff --git a/civicrm/CRM/Grant/Form/Search.php b/civicrm/CRM/Grant/Form/Search.php
index 70ad5f1066ba4cc06204e856c0cccc889cb87161..4c54877d0786c99de0a3c5d4de381ab3876ff072 100644
--- a/civicrm/CRM/Grant/Form/Search.php
+++ b/civicrm/CRM/Grant/Form/Search.php
@@ -76,6 +76,7 @@ class CRM_Grant_Form_Search extends CRM_Core_Form_Search {
     $this->_actionButtonName = $this->getButtonName('next', 'action');
 
     $this->_done = FALSE;
+    $this->sortNameOnly = TRUE;
 
     parent::preProcess();
 
diff --git a/civicrm/CRM/Grant/Form/Task/Delete.php b/civicrm/CRM/Grant/Form/Task/Delete.php
index f0392f38e669d3d71be6cf1005b94520c8ea50dc..155fe0e584a8bd6c21323bc9943803f09e3f71dd 100644
--- a/civicrm/CRM/Grant/Form/Task/Delete.php
+++ b/civicrm/CRM/Grant/Form/Task/Delete.php
@@ -42,7 +42,7 @@ class CRM_Grant_Form_Task_Delete extends CRM_Grant_Form_Task {
 
     //check permission for delete.
     if (!CRM_Core_Permission::checkActionPermission('CiviGrant', CRM_Core_Action::DELETE)) {
-      CRM_Core_Error::fatal(ts('You do not have permission to access this page.'));
+      CRM_Core_Error::statusBounce(ts('You do not have permission to access this page.'));
     }
   }
 
diff --git a/civicrm/CRM/Grant/Form/Task/Update.php b/civicrm/CRM/Grant/Form/Task/Update.php
index 6290caafd7ec326524c91fdbb1bec8ce2a3afe69..ba62dda100954967d24c4db6af8591c76219f6c6 100644
--- a/civicrm/CRM/Grant/Form/Task/Update.php
+++ b/civicrm/CRM/Grant/Form/Task/Update.php
@@ -34,7 +34,7 @@ class CRM_Grant_Form_Task_Update extends CRM_Grant_Form_Task {
 
     //check permission for update.
     if (!CRM_Core_Permission::checkActionPermission('CiviGrant', CRM_Core_Action::UPDATE)) {
-      CRM_Core_Error::fatal(ts('You do not have permission to access this page.'));
+      CRM_Core_Error::statusBounce(ts('You do not have permission to access this page.'));
     }
   }
 
diff --git a/civicrm/CRM/Group/Form/Edit.php b/civicrm/CRM/Group/Form/Edit.php
index fba3ec951cc93e1644d7b0f4882e8e90e73b3b71..10a7fb61fe8ddaa84b9377be08eda05c7660b353 100644
--- a/civicrm/CRM/Group/Form/Edit.php
+++ b/civicrm/CRM/Group/Form/Edit.php
@@ -208,10 +208,10 @@ class CRM_Group_Form_Edit extends CRM_Core_Form {
     ) {
       $groupTypes = CRM_Core_OptionGroup::values('group_type', TRUE);
       if ($defaults['group_type'][$groupTypes['Mailing List']] == 1) {
-        $this->assign('freezeMailignList', $groupTypes['Mailing List']);
+        $this->assign('freezeMailingList', $groupTypes['Mailing List']);
       }
       else {
-        $this->assign('hideMailignList', $groupTypes['Mailing List']);
+        $this->assign('hideMailingList', $groupTypes['Mailing List']);
       }
     }
 
diff --git a/civicrm/CRM/Mailing/BAO/Recipients.php b/civicrm/CRM/Mailing/BAO/Recipients.php
index 5c60de45d170065ef82fd3b058e08d7485bdd41d..14820ed84cf19e35450e17770867f781be48d62c 100644
--- a/civicrm/CRM/Mailing/BAO/Recipients.php
+++ b/civicrm/CRM/Mailing/BAO/Recipients.php
@@ -100,7 +100,7 @@ WHERE  r.mailing_id = %1
       $limitString = "LIMIT 0, $totalLimit";
     }
     $temporaryTable = CRM_Utils_SQL_TempTable::build()
-      ->setCategory('srcmailing' . $sourceMailingId)
+      ->setCategory('sr' . $sourceMailingId)
       ->setMemory()
       ->createWithColumns("mailing_recipient_id int unsigned, id int PRIMARY KEY AUTO_INCREMENT, INDEX(mailing_recipient_id)");
     $temporaryTableName = $temporaryTable->getName();
diff --git a/civicrm/CRM/Mailing/DAO/BouncePattern.php b/civicrm/CRM/Mailing/DAO/BouncePattern.php
index 2512c08eec9dd571ce64d74c0d8decd6ffb264fb..c90182607a382eb975f8e214c5918059fc1d821c 100644
--- a/civicrm/CRM/Mailing/DAO/BouncePattern.php
+++ b/civicrm/CRM/Mailing/DAO/BouncePattern.php
@@ -6,7 +6,7 @@
  *
  * Generated from xml/schema/CRM/Mailing/BouncePattern.xml
  * DO NOT EDIT.  Generated by CRM_Core_CodeGen
- * (GenCodeChecksum:8b252d99f9392e578512acadd28b09ee)
+ * (GenCodeChecksum:5b77be40f02d6350d3a973ae6e090883)
  */
 
 /**
diff --git a/civicrm/CRM/Mailing/DAO/BounceType.php b/civicrm/CRM/Mailing/DAO/BounceType.php
index 8cd5814ebacd4d4f24d65f3c01ab6616ad828b3f..fa39ecc35d570cbaddc5adbf5411cf238a7d6d0d 100644
--- a/civicrm/CRM/Mailing/DAO/BounceType.php
+++ b/civicrm/CRM/Mailing/DAO/BounceType.php
@@ -6,7 +6,7 @@
  *
  * Generated from xml/schema/CRM/Mailing/BounceType.xml
  * DO NOT EDIT.  Generated by CRM_Core_CodeGen
- * (GenCodeChecksum:9b56dea1b4b84d786209fd4af84a3e09)
+ * (GenCodeChecksum:9a10baee53da12eee58e5b229fadf6d9)
  */
 
 /**
diff --git a/civicrm/CRM/Mailing/DAO/Mailing.php b/civicrm/CRM/Mailing/DAO/Mailing.php
index 768e66bfed73e62dc1d70666dcc7eaeb9b5e87ff..27bf4060643e4ce7cc391ae9eb28303c6ff30a7f 100644
--- a/civicrm/CRM/Mailing/DAO/Mailing.php
+++ b/civicrm/CRM/Mailing/DAO/Mailing.php
@@ -6,7 +6,7 @@
  *
  * Generated from xml/schema/CRM/Mailing/Mailing.xml
  * DO NOT EDIT.  Generated by CRM_Core_CodeGen
- * (GenCodeChecksum:e25bcafe5fd213c6f8204585b2d8f6c1)
+ * (GenCodeChecksum:222c7a4f7e002c8829fc415baf214dbc)
  */
 
 /**
diff --git a/civicrm/CRM/Mailing/DAO/MailingAB.php b/civicrm/CRM/Mailing/DAO/MailingAB.php
index 694c2153891bd267f4a1b1493c3f1876d84ff01c..64aec05fb14c632b55d72d50c0d77e02ef44a863 100644
--- a/civicrm/CRM/Mailing/DAO/MailingAB.php
+++ b/civicrm/CRM/Mailing/DAO/MailingAB.php
@@ -6,7 +6,7 @@
  *
  * Generated from xml/schema/CRM/Mailing/MailingAB.xml
  * DO NOT EDIT.  Generated by CRM_Core_CodeGen
- * (GenCodeChecksum:2ddb755cd73dfcc880467c192d4f4b6c)
+ * (GenCodeChecksum:74ff2df50144a54a2c5a740187f6a8ca)
  */
 
 /**
diff --git a/civicrm/CRM/Mailing/DAO/MailingComponent.php b/civicrm/CRM/Mailing/DAO/MailingComponent.php
index b76e925895bd81a2cae7d196f7fad2749eb772ec..3740b74ee3b65e4f8d9cfca18a90d864b8b5347f 100644
--- a/civicrm/CRM/Mailing/DAO/MailingComponent.php
+++ b/civicrm/CRM/Mailing/DAO/MailingComponent.php
@@ -6,7 +6,7 @@
  *
  * Generated from xml/schema/CRM/Mailing/MailingComponent.xml
  * DO NOT EDIT.  Generated by CRM_Core_CodeGen
- * (GenCodeChecksum:935e7f9a3718032018ccb082a6c4500c)
+ * (GenCodeChecksum:5f490a6a53497465a1dcb603a9eba297)
  */
 
 /**
diff --git a/civicrm/CRM/Mailing/DAO/MailingGroup.php b/civicrm/CRM/Mailing/DAO/MailingGroup.php
index 619e1e8a0a6765ec10f8ab37aca1edc135956aa9..54b3fc4c5e34c5e99b2c329f4e05f22d5b001ec6 100644
--- a/civicrm/CRM/Mailing/DAO/MailingGroup.php
+++ b/civicrm/CRM/Mailing/DAO/MailingGroup.php
@@ -6,7 +6,7 @@
  *
  * Generated from xml/schema/CRM/Mailing/MailingGroup.xml
  * DO NOT EDIT.  Generated by CRM_Core_CodeGen
- * (GenCodeChecksum:c4fc1c2b7ccba1f63edbf40993dae6ea)
+ * (GenCodeChecksum:c36d380f7c8e1c66c5bb3e721ebb2586)
  */
 
 /**
diff --git a/civicrm/CRM/Mailing/DAO/MailingJob.php b/civicrm/CRM/Mailing/DAO/MailingJob.php
index 895cbcd5f4a2273f2761f8dceb5c54318f1393ca..e379066565d44ab3ce792855ce94f7e728b40069 100644
--- a/civicrm/CRM/Mailing/DAO/MailingJob.php
+++ b/civicrm/CRM/Mailing/DAO/MailingJob.php
@@ -6,7 +6,7 @@
  *
  * Generated from xml/schema/CRM/Mailing/MailingJob.xml
  * DO NOT EDIT.  Generated by CRM_Core_CodeGen
- * (GenCodeChecksum:4c28192656647449d061e22dda8d8deb)
+ * (GenCodeChecksum:91fa15df43a9b86ba6cd53f1cc9783eb)
  */
 
 /**
diff --git a/civicrm/CRM/Mailing/DAO/Recipients.php b/civicrm/CRM/Mailing/DAO/Recipients.php
index f11c1344731fc57eaf7ccb729e6cca920353c29b..82319af800b742e2aec50d41c3b93c9fe0034665 100644
--- a/civicrm/CRM/Mailing/DAO/Recipients.php
+++ b/civicrm/CRM/Mailing/DAO/Recipients.php
@@ -6,7 +6,7 @@
  *
  * Generated from xml/schema/CRM/Mailing/Recipients.xml
  * DO NOT EDIT.  Generated by CRM_Core_CodeGen
- * (GenCodeChecksum:0792d1ac654c050dfc735f63f20fe0cd)
+ * (GenCodeChecksum:75cd62ee31977e5f17025529a8b00a77)
  */
 
 /**
diff --git a/civicrm/CRM/Mailing/DAO/Spool.php b/civicrm/CRM/Mailing/DAO/Spool.php
index 4a548bd625ee407069bb4e3275e0879dd4057cc1..3305ea5fad49d7b07828dd70f9bfdb15c9386607 100644
--- a/civicrm/CRM/Mailing/DAO/Spool.php
+++ b/civicrm/CRM/Mailing/DAO/Spool.php
@@ -6,7 +6,7 @@
  *
  * Generated from xml/schema/CRM/Mailing/Spool.xml
  * DO NOT EDIT.  Generated by CRM_Core_CodeGen
- * (GenCodeChecksum:5b1d2a1cce94c7b2c330b62f3b76e2e1)
+ * (GenCodeChecksum:02a2772d9f468c566718c382d86373c6)
  */
 
 /**
diff --git a/civicrm/CRM/Mailing/DAO/TrackableURL.php b/civicrm/CRM/Mailing/DAO/TrackableURL.php
index 8c739d8e6dfa47a978abc11d01939742cffd4666..4370552b2136119db01f20ad905b324bd4a0666c 100644
--- a/civicrm/CRM/Mailing/DAO/TrackableURL.php
+++ b/civicrm/CRM/Mailing/DAO/TrackableURL.php
@@ -6,7 +6,7 @@
  *
  * Generated from xml/schema/CRM/Mailing/TrackableURL.xml
  * DO NOT EDIT.  Generated by CRM_Core_CodeGen
- * (GenCodeChecksum:4e58345d210aa786e7653982fc998c37)
+ * (GenCodeChecksum:af4238980ab67199493caf43c6ce2f35)
  */
 
 /**
diff --git a/civicrm/CRM/Mailing/Event/DAO/Bounce.php b/civicrm/CRM/Mailing/Event/DAO/Bounce.php
index 7383695c902e77cca0daf026c889140596010269..9fe63e56af1f78d2562d8002fd3bded32fd6c6f0 100644
--- a/civicrm/CRM/Mailing/Event/DAO/Bounce.php
+++ b/civicrm/CRM/Mailing/Event/DAO/Bounce.php
@@ -6,7 +6,7 @@
  *
  * Generated from xml/schema/CRM/Mailing/Event/Bounce.xml
  * DO NOT EDIT.  Generated by CRM_Core_CodeGen
- * (GenCodeChecksum:ba4d55bd1a33a5d0fc17b22a3be114f7)
+ * (GenCodeChecksum:3ac099332818c43f2dca066c6e73149c)
  */
 
 /**
diff --git a/civicrm/CRM/Mailing/Event/DAO/Confirm.php b/civicrm/CRM/Mailing/Event/DAO/Confirm.php
index b55aa1ceed7ae1352e47c70badffa0d30fd155b6..51f90ce2f0d0c12f321b8a40b8324c149fbd452c 100644
--- a/civicrm/CRM/Mailing/Event/DAO/Confirm.php
+++ b/civicrm/CRM/Mailing/Event/DAO/Confirm.php
@@ -6,7 +6,7 @@
  *
  * Generated from xml/schema/CRM/Mailing/Event/Confirm.xml
  * DO NOT EDIT.  Generated by CRM_Core_CodeGen
- * (GenCodeChecksum:fa4cd94c6068f7729b05ba10ab255b05)
+ * (GenCodeChecksum:a7b8a7cbbffc3c2ad56f4a27a5fe0d47)
  */
 
 /**
diff --git a/civicrm/CRM/Mailing/Event/DAO/Delivered.php b/civicrm/CRM/Mailing/Event/DAO/Delivered.php
index 41131fffb2fab49d46f4de656f495ce2c192c372..84304d2c44cf6954523219c02beda5c7845d29c8 100644
--- a/civicrm/CRM/Mailing/Event/DAO/Delivered.php
+++ b/civicrm/CRM/Mailing/Event/DAO/Delivered.php
@@ -6,7 +6,7 @@
  *
  * Generated from xml/schema/CRM/Mailing/Event/Delivered.xml
  * DO NOT EDIT.  Generated by CRM_Core_CodeGen
- * (GenCodeChecksum:5791e88cffd626e36daaddcccbc687a0)
+ * (GenCodeChecksum:868d8d539be2f960708c791e77142cf7)
  */
 
 /**
diff --git a/civicrm/CRM/Mailing/Event/DAO/Forward.php b/civicrm/CRM/Mailing/Event/DAO/Forward.php
index 4831cb920bdbc81b56bc397dafb57158d255ef48..64758453c14ed1a9aaee8374ae568a19505cd441 100644
--- a/civicrm/CRM/Mailing/Event/DAO/Forward.php
+++ b/civicrm/CRM/Mailing/Event/DAO/Forward.php
@@ -6,7 +6,7 @@
  *
  * Generated from xml/schema/CRM/Mailing/Event/Forward.xml
  * DO NOT EDIT.  Generated by CRM_Core_CodeGen
- * (GenCodeChecksum:b96d36e0d04a4a6039a8e9a3b782a35e)
+ * (GenCodeChecksum:2d80815845585711db7a4ceaa9d54187)
  */
 
 /**
diff --git a/civicrm/CRM/Mailing/Event/DAO/Opened.php b/civicrm/CRM/Mailing/Event/DAO/Opened.php
index ea4f74089938f6907194486d39656b94a7746288..ece08f0027fbb6ac22db6f2fe1c95b7a5cf3ec41 100644
--- a/civicrm/CRM/Mailing/Event/DAO/Opened.php
+++ b/civicrm/CRM/Mailing/Event/DAO/Opened.php
@@ -6,7 +6,7 @@
  *
  * Generated from xml/schema/CRM/Mailing/Event/Opened.xml
  * DO NOT EDIT.  Generated by CRM_Core_CodeGen
- * (GenCodeChecksum:09dbc5750f23402fe8ffe9ca0cffd0ba)
+ * (GenCodeChecksum:1e7b766df9d29ea2c12eca943ce3c6d3)
  */
 
 /**
diff --git a/civicrm/CRM/Mailing/Event/DAO/Queue.php b/civicrm/CRM/Mailing/Event/DAO/Queue.php
index 90de6df6dfdc9e2db2b95af3b4724de7a14c309f..0501531c2b8ee93802dfaf88f07fc4d243c36048 100644
--- a/civicrm/CRM/Mailing/Event/DAO/Queue.php
+++ b/civicrm/CRM/Mailing/Event/DAO/Queue.php
@@ -6,7 +6,7 @@
  *
  * Generated from xml/schema/CRM/Mailing/Event/Queue.xml
  * DO NOT EDIT.  Generated by CRM_Core_CodeGen
- * (GenCodeChecksum:8099f8e634a052f6641abaa2e0f3dae6)
+ * (GenCodeChecksum:c13b7d1f71aa2aaba32558fe215efb3c)
  */
 
 /**
diff --git a/civicrm/CRM/Mailing/Event/DAO/Reply.php b/civicrm/CRM/Mailing/Event/DAO/Reply.php
index 1cd7be8af369ede2348f5472b62f792fbc9064f8..3a1d8f06914ffcb49cdf5ba6056ef50f163920f7 100644
--- a/civicrm/CRM/Mailing/Event/DAO/Reply.php
+++ b/civicrm/CRM/Mailing/Event/DAO/Reply.php
@@ -6,7 +6,7 @@
  *
  * Generated from xml/schema/CRM/Mailing/Event/Reply.xml
  * DO NOT EDIT.  Generated by CRM_Core_CodeGen
- * (GenCodeChecksum:bfd8c0c2ed7f32539508ddf2fe6d27b2)
+ * (GenCodeChecksum:bb0b422177a50b7c27241338317f4f77)
  */
 
 /**
diff --git a/civicrm/CRM/Mailing/Event/DAO/Subscribe.php b/civicrm/CRM/Mailing/Event/DAO/Subscribe.php
index d0880400c81dcdbf054b0955f87b3317e2186113..3a9069b0b3615ec5dfe38828e81238791129b065 100644
--- a/civicrm/CRM/Mailing/Event/DAO/Subscribe.php
+++ b/civicrm/CRM/Mailing/Event/DAO/Subscribe.php
@@ -6,7 +6,7 @@
  *
  * Generated from xml/schema/CRM/Mailing/Event/Subscribe.xml
  * DO NOT EDIT.  Generated by CRM_Core_CodeGen
- * (GenCodeChecksum:081be4da95465c1f28e13d936b372345)
+ * (GenCodeChecksum:f6605e240579a1d1911cd7fa1fa535df)
  */
 
 /**
diff --git a/civicrm/CRM/Mailing/Event/DAO/TrackableURLOpen.php b/civicrm/CRM/Mailing/Event/DAO/TrackableURLOpen.php
index 13c897b6bea8d75de0a220eaab275e612023186d..72a07fbb405ce132f0d78c6fa092be1baab5819d 100644
--- a/civicrm/CRM/Mailing/Event/DAO/TrackableURLOpen.php
+++ b/civicrm/CRM/Mailing/Event/DAO/TrackableURLOpen.php
@@ -6,7 +6,7 @@
  *
  * Generated from xml/schema/CRM/Mailing/Event/TrackableURLOpen.xml
  * DO NOT EDIT.  Generated by CRM_Core_CodeGen
- * (GenCodeChecksum:eb4907c60fad19559fe6dcc069445590)
+ * (GenCodeChecksum:e3972b32e62b53916079913b418785d9)
  */
 
 /**
diff --git a/civicrm/CRM/Mailing/Event/DAO/Unsubscribe.php b/civicrm/CRM/Mailing/Event/DAO/Unsubscribe.php
index d7102bdbef4a8a58e57c9088ecde05fe8c84558a..2e13adc781dd54db266222bad81f5e73e570a0c8 100644
--- a/civicrm/CRM/Mailing/Event/DAO/Unsubscribe.php
+++ b/civicrm/CRM/Mailing/Event/DAO/Unsubscribe.php
@@ -6,7 +6,7 @@
  *
  * Generated from xml/schema/CRM/Mailing/Event/Unsubscribe.xml
  * DO NOT EDIT.  Generated by CRM_Core_CodeGen
- * (GenCodeChecksum:0d53b8194940aab51adb66b6abb11fc3)
+ * (GenCodeChecksum:b94d81304a2444e6200faad7c2703a87)
  */
 
 /**
diff --git a/civicrm/CRM/Member/BAO/Membership.php b/civicrm/CRM/Member/BAO/Membership.php
index 7794deef0c9a61d9bb0a4c7f0bfcce469028fa46..3fff6f955f935aeaa0fc959ac328a08cd654adc0 100644
--- a/civicrm/CRM/Member/BAO/Membership.php
+++ b/civicrm/CRM/Member/BAO/Membership.php
@@ -51,7 +51,6 @@ class CRM_Member_BAO_Membership extends CRM_Member_DAO_Membership {
    */
   public static function add(&$params, $ids = []) {
     $oldStatus = $oldType = NULL;
-    $params['id'] = CRM_Utils_Array::value('id', $params, CRM_Utils_Array::value('membership', $ids));
     if ($params['id']) {
       CRM_Utils_Hook::pre('edit', 'Membership', $params['id'], $params);
     }
@@ -269,16 +268,6 @@ class CRM_Member_BAO_Membership extends CRM_Member_DAO_Membership {
         'today', $excludeIsAdmin, CRM_Utils_Array::value('membership_type_id', $params), $params
       );
       if (empty($calcStatus)) {
-        // Redirect the form in case of error
-        // @todo this redirect in the BAO layer is really bad & should be moved to the form layer
-        // however since we have no idea how (if) this is triggered we can't safely move / remove it
-        // NB I tried really hard to trigger this error from backoffice membership form in order to test it
-        // and am convinced form validation is complete on that form WRT this error.
-        $errorParams = [
-          'message_title' => ts('No valid membership status for given dates.'),
-          'legacy_redirect_path' => 'civicrm/contact/view',
-          'legacy_redirect_query' => "reset=1&force=1&cid={$params['contact_id']}&selectedChild=member",
-        ];
         throw new CRM_Core_Exception(ts(
           "The membership cannot be saved because the status cannot be calculated for start_date: $start_date end_date $end_date join_date $join_date as at " . date('Y-m-d H:i:s')),
           0,
@@ -306,7 +295,8 @@ class CRM_Member_BAO_Membership extends CRM_Member_DAO_Membership {
 
     $transaction = new CRM_Core_Transaction();
 
-    // @todo remove $ids from here - $ids['contribution'] is not used or set by add. $ids['userId'] is used. $ids['membership'] is used if $params['id'] is not set
+    // @todo remove $ids from here $ids['userId'] is still used
+    $params['id'] = CRM_Utils_Array::value('id', $params, CRM_Utils_Array::value('membership', $ids));
     $membership = self::add($params, $ids);
 
     if (is_a($membership, 'CRM_Core_Error')) {
@@ -447,6 +437,9 @@ class CRM_Member_BAO_Membership extends CRM_Member_DAO_Membership {
    *
    * @return array
    *   array of contact_id of all related contacts.
+   *
+   * @throws \CRM_Core_Exception
+   * @throws \CiviCRM_API3_Exception
    */
   public static function checkMembershipRelationship($membershipTypeID, $contactId, $action = CRM_Core_Action::ADD) {
     $contacts = [];
@@ -1331,13 +1324,15 @@ WHERE  civicrm_membership.contact_id = civicrm_contact.id
    */
   public static function createRelatedMemberships(&$params, &$dao, $reset = FALSE) {
     // CRM-4213 check for loops, using static variable to record contacts already processed.
-    static $relatedContactIds = [];
+    if (!isset(\Civi::$statics[__CLASS__]['related_contacts'])) {
+      \Civi::$statics[__CLASS__]['related_contacts'] = [];
+    }
     if ($reset) {
-      // We need a way to reset this static variable from the test suite.
-      // @todo consider replacing with Civi::$statics but note reset now used elsewhere: CRM-17723.
-      $relatedContactIds = [];
+      // CRM-17723.
+      unset(\Civi::$statics[__CLASS__]['related_contacts']);
       return FALSE;
     }
+    $relatedContactIds = &\Civi::$statics[__CLASS__]['related_contacts'];
 
     $membership = new CRM_Member_DAO_Membership();
     $membership->id = $dao->id;
@@ -1367,14 +1362,11 @@ WHERE  civicrm_membership.contact_id = civicrm_contact.id
       $expiredStatusId = array_search('Expired', CRM_Member_PseudoConstant::membershipStatus());
     }
 
-    $allRelatedContacts = [];
     $relatedContacts = [];
-    if (!is_a($membership, 'CRM_Core_Error')) {
-      $allRelatedContacts = CRM_Member_BAO_Membership::checkMembershipRelationship($membership->membership_type_id,
-        $membership->contact_id,
-        CRM_Utils_Array::value('action', $params)
-      );
-    }
+    $allRelatedContacts = CRM_Member_BAO_Membership::checkMembershipRelationship($membership->membership_type_id,
+      $membership->contact_id,
+      CRM_Utils_Array::value('action', $params)
+    );
 
     // CRM-4213, CRM-19735 check for loops, using static variable to record contacts already processed.
     // Remove repeated related contacts, which already inherited membership of this type.
diff --git a/civicrm/CRM/Member/DAO/Membership.php b/civicrm/CRM/Member/DAO/Membership.php
index f8bd802e1da465a8fcd2e02b0a4aaff660c022d9..a4b79fffecc0b995f64e781ad6c5c04e7784b9a0 100644
--- a/civicrm/CRM/Member/DAO/Membership.php
+++ b/civicrm/CRM/Member/DAO/Membership.php
@@ -6,7 +6,7 @@
  *
  * Generated from xml/schema/CRM/Member/Membership.xml
  * DO NOT EDIT.  Generated by CRM_Core_CodeGen
- * (GenCodeChecksum:97d01bc13256a1dd315a86fb5faea1dc)
+ * (GenCodeChecksum:15846e936cabb40c951fc8bc37c6f79a)
  */
 
 /**
diff --git a/civicrm/CRM/Member/DAO/MembershipBlock.php b/civicrm/CRM/Member/DAO/MembershipBlock.php
index 4501ad1eedf89ab3be48536ea17e1e1aaa4ef393..7d1b12db5aa9ad9b0c3293b88591515c41d844f1 100644
--- a/civicrm/CRM/Member/DAO/MembershipBlock.php
+++ b/civicrm/CRM/Member/DAO/MembershipBlock.php
@@ -6,7 +6,7 @@
  *
  * Generated from xml/schema/CRM/Member/MembershipBlock.xml
  * DO NOT EDIT.  Generated by CRM_Core_CodeGen
- * (GenCodeChecksum:46b23c9cb5e0d22669e4f9a63966e6df)
+ * (GenCodeChecksum:09fae8131ecad39069914c10f9f7ccf4)
  */
 
 /**
diff --git a/civicrm/CRM/Member/DAO/MembershipLog.php b/civicrm/CRM/Member/DAO/MembershipLog.php
index f5cbdffd7912e76cfd12c2ddaf6c561a5708a647..840005783104fcf4c7eb51195e1a1b776c06bde2 100644
--- a/civicrm/CRM/Member/DAO/MembershipLog.php
+++ b/civicrm/CRM/Member/DAO/MembershipLog.php
@@ -6,7 +6,7 @@
  *
  * Generated from xml/schema/CRM/Member/MembershipLog.xml
  * DO NOT EDIT.  Generated by CRM_Core_CodeGen
- * (GenCodeChecksum:7e7992e145cb104f8fddaac2a7f60c99)
+ * (GenCodeChecksum:68b899f9c0d2eabcc19b070cb6d92a25)
  */
 
 /**
diff --git a/civicrm/CRM/Member/DAO/MembershipPayment.php b/civicrm/CRM/Member/DAO/MembershipPayment.php
index 773ebfbe7a5a827ffe23d02b467ecfac008553dd..da5f31561e4021e5eb119d59b3fc3aa73464fec1 100644
--- a/civicrm/CRM/Member/DAO/MembershipPayment.php
+++ b/civicrm/CRM/Member/DAO/MembershipPayment.php
@@ -6,7 +6,7 @@
  *
  * Generated from xml/schema/CRM/Member/MembershipPayment.xml
  * DO NOT EDIT.  Generated by CRM_Core_CodeGen
- * (GenCodeChecksum:63ca9fcae0a4e6bffb8423ccdf019cdc)
+ * (GenCodeChecksum:4bff4dffec3c3a766c34f49eb96ece19)
  */
 
 /**
diff --git a/civicrm/CRM/Member/DAO/MembershipStatus.php b/civicrm/CRM/Member/DAO/MembershipStatus.php
index 0bcd6b244ecd22a09a585d3e0d7e9f9e060c2592..0a4a53ea1dd59f33cfa921de9ee5a3ca0f08b3a7 100644
--- a/civicrm/CRM/Member/DAO/MembershipStatus.php
+++ b/civicrm/CRM/Member/DAO/MembershipStatus.php
@@ -6,7 +6,7 @@
  *
  * Generated from xml/schema/CRM/Member/MembershipStatus.xml
  * DO NOT EDIT.  Generated by CRM_Core_CodeGen
- * (GenCodeChecksum:d292d809591c784c47942f54aba6765f)
+ * (GenCodeChecksum:37fdd036d0cc453eeb5cbfa14b7b27d2)
  */
 
 /**
diff --git a/civicrm/CRM/Member/DAO/MembershipType.php b/civicrm/CRM/Member/DAO/MembershipType.php
index 5d0a989a0d60c0634603b485fb9321743f40a4a0..58c07d9bd7a753d53a94835fbf32ea245ac91fbf 100644
--- a/civicrm/CRM/Member/DAO/MembershipType.php
+++ b/civicrm/CRM/Member/DAO/MembershipType.php
@@ -6,7 +6,7 @@
  *
  * Generated from xml/schema/CRM/Member/MembershipType.xml
  * DO NOT EDIT.  Generated by CRM_Core_CodeGen
- * (GenCodeChecksum:f0aee394cff9d0c7eee0245021a4a3e1)
+ * (GenCodeChecksum:c188b3772bd7ba843454e591a1fb0fd6)
  */
 
 /**
diff --git a/civicrm/CRM/Member/Form.php b/civicrm/CRM/Member/Form.php
index 83372022648158e8649a4596171ca98449b82dec..40e66ca63f3d9e733d03d56a074df7cf1e6e2c58 100644
--- a/civicrm/CRM/Member/Form.php
+++ b/civicrm/CRM/Member/Form.php
@@ -127,7 +127,7 @@ class CRM_Member_Form extends CRM_Contribute_Form_AbstractEditPayment {
   public function preProcess() {
     // Check for edit permission.
     if (!CRM_Core_Permission::checkActionPermission('CiviMember', $this->_action)) {
-      CRM_Core_Error::fatal(ts('You do not have permission to access this page.'));
+      CRM_Core_Error::statusBounce(ts('You do not have permission to access this page.'));
     }
     if (!CRM_Member_BAO_Membership::statusAvailabilty()) {
       // all possible statuses are disabled - redirect back to contact form
@@ -219,6 +219,7 @@ class CRM_Member_Form extends CRM_Contribute_Form_AbstractEditPayment {
 
     $this->addPaymentProcessorSelect(TRUE, FALSE, TRUE);
     CRM_Core_Payment_Form::buildPaymentForm($this, $this->_paymentProcessor, FALSE, TRUE, $this->getDefaultPaymentInstrumentId());
+    $this->assign('recurProcessor', json_encode($this->_recurPaymentProcessors));
     // Build the form for auto renew. This is displayed when in credit card mode or update mode.
     // The reason for showing it in update mode is not that clear.
     if ($this->_mode || ($this->_action & CRM_Core_Action::UPDATE)) {
@@ -233,7 +234,6 @@ class CRM_Member_Form extends CRM_Contribute_Form_AbstractEditPayment {
         $autoRenewElement->freeze();
       }
 
-      $this->assign('recurProcessor', json_encode($this->_recurPaymentProcessors));
       $this->addElement('checkbox',
         'auto_renew',
         ts('Membership renewed automatically')
diff --git a/civicrm/CRM/Member/Form/Membership.php b/civicrm/CRM/Member/Form/Membership.php
index 963dada1ce9eda80fa703ce1e91822dbb45416e8..b9f272b126eecb7f7c46d4c9fcd17fb47a39e535 100644
--- a/civicrm/CRM/Member/Form/Membership.php
+++ b/civicrm/CRM/Member/Form/Membership.php
@@ -60,10 +60,11 @@ class CRM_Member_Form_Membership extends CRM_Member_Form {
   protected $_contributorDisplayName = NULL;
 
   /**
-   * email of the person paying for the membership (used for receipts)
+   * Email of the person paying for the membership (used for receipts).
+   *
    * @var string
    */
-  protected $_contributorEmail = NULL;
+  protected $_contributorEmail;
 
   /**
    * email of the person paying for the membership (used for receipts)
@@ -114,9 +115,9 @@ class CRM_Member_Form_Membership extends CRM_Member_Form {
    */
   public function setDeleteMessage() {
     $this->deleteMessage = '<span class="font-red bold">'
-      . ts("WARNING: Deleting this membership will also delete any related payment (contribution) records." . ts("This action cannot be undone.")
+      . ts('WARNING: Deleting this membership will also delete any related payment (contribution) records.' . ts('This action cannot be undone.')
         . '</span><p>'
-        . ts("Consider modifying the membership status instead if you want to maintain an audit trail and avoid losing payment data. You can set the status to Cancelled by editing the membership and clicking the Status Override checkbox.")
+        . ts('Consider modifying the membership status instead if you want to maintain an audit trail and avoid losing payment data. You can set the status to Cancelled by editing the membership and clicking the Status Override checkbox.')
           . '</p><p>'
         . ts("Click 'Delete' if you want to continue.") . '</p>');
   }
@@ -142,6 +143,7 @@ class CRM_Member_Form_Membership extends CRM_Member_Form {
    * @param array $params
    *
    * @return array
+   * @throws \CRM_Core_Exception
    */
   public static function getSelectedMemberships($priceSet, $params) {
     $memTypeSelected = [];
@@ -190,6 +192,8 @@ class CRM_Member_Form_Membership extends CRM_Member_Form {
 
   /**
    * Form preProcess function.
+   *
+   * @throws \CRM_Core_Exception
    */
   public function preProcess() {
     // This string makes up part of the class names, differentiating them (not sure why) from the membership fields.
@@ -324,7 +328,7 @@ class CRM_Member_Form_Membership extends CRM_Member_Form {
     }
 
     //set Soft Credit Type to Gift by default
-    $scTypes = CRM_Core_OptionGroup::values("soft_credit_type");
+    $scTypes = CRM_Core_OptionGroup::values('soft_credit_type');
     $defaults['soft_credit_type_id'] = CRM_Utils_Array::value(ts('Gift'), array_flip($scTypes));
 
     //CRM-13420
@@ -382,6 +386,8 @@ class CRM_Member_Form_Membership extends CRM_Member_Form {
 
   /**
    * Build the form object.
+   *
+   * @throws \CRM_Core_Exception
    */
   public function buildQuickForm() {
 
@@ -462,7 +468,7 @@ class CRM_Member_Form_Membership extends CRM_Member_Form {
     }
 
     $contactField = $this->addEntityRef('contact_id', ts('Member'), ['create' => TRUE, 'api' => ['extra' => ['email']]], TRUE);
-    if ($this->_context != 'standalone') {
+    if ($this->_context !== 'standalone') {
       $contactField->freeze();
     }
 
@@ -766,14 +772,14 @@ class CRM_Member_Form_Membership extends CRM_Member_Form {
 
         $membershipDetails = CRM_Member_BAO_MembershipType::getMembershipTypeDetails($memType);
 
-        if ($startDate && CRM_Utils_Array::value('period_type', $membershipDetails) == 'rolling') {
+        if ($startDate && CRM_Utils_Array::value('period_type', $membershipDetails) === 'rolling') {
           if ($startDate < $joinDate) {
             $errors['start_date'] = ts('Start date must be the same or later than Member since.');
           }
         }
 
         if ($endDate) {
-          if ($membershipDetails['duration_unit'] == 'lifetime') {
+          if ($membershipDetails['duration_unit'] === 'lifetime') {
             // Check if status is NOT cancelled or similar. For lifetime memberships, there is no automated
             // process to update status based on end-date. The user must change the status now.
             $result = civicrm_api3('MembershipStatus', 'get', [
@@ -1054,9 +1060,12 @@ class CRM_Member_Form_Membership extends CRM_Member_Form {
    * Submit function.
    *
    * This is also accessed by unit tests.
+   *
+   * @throws \CRM_Core_Exception
+   * @throws \CiviCRM_API3_Exception
    */
   public function submit() {
-    $isTest = ($this->_mode == 'test') ? 1 : 0;
+    $isTest = ($this->_mode === 'test') ? 1 : 0;
     $this->storeContactFields($this->_params);
     $this->beginPostProcess();
     $joinDate = $startDate = $endDate = NULL;
@@ -1136,7 +1145,7 @@ class CRM_Member_Form_Membership extends CRM_Member_Form {
     // END Fix for dev/core/issues/860
 
     CRM_Price_BAO_PriceSet::processAmount($this->_priceSet['fields'],
-      $formValues, $lineItem[$this->_priceSetId], NULL, $this->_priceSetId);
+      $formValues, $lineItem[$this->_priceSetId], $this->_priceSetId);
 
     if (!empty($formValues['tax_amount'])) {
       $params['tax_amount'] = $formValues['tax_amount'];
@@ -1448,7 +1457,7 @@ class CRM_Member_Form_Membership extends CRM_Member_Form {
       );
       $params['source'] = $formValues['source'] ? $formValues['source'] : $params['contribution_source'];
       $params['trxn_id'] = CRM_Utils_Array::value('trxn_id', $result);
-      $params['is_test'] = ($this->_mode == 'live') ? 0 : 1;
+      $params['is_test'] = ($this->_mode === 'live') ? 0 : 1;
       if (!empty($formValues['send_receipt'])) {
         $params['receipt_date'] = $now;
       }
diff --git a/civicrm/CRM/Member/Form/MembershipRenewal.php b/civicrm/CRM/Member/Form/MembershipRenewal.php
index b715227ee5be204a55df95b886bce97c52fbeecf..f6e50c2d87cbe207b6c42c0a84a24fb0356a0f83 100644
--- a/civicrm/CRM/Member/Form/MembershipRenewal.php
+++ b/civicrm/CRM/Member/Form/MembershipRenewal.php
@@ -598,7 +598,7 @@ class CRM_Member_Form_MembershipRenewal extends CRM_Member_Form {
       $lineItem = [];
       $this->_params = $this->setPriceSetParameters($this->_params);
       CRM_Price_BAO_PriceSet::processAmount($this->_priceSet['fields'],
-        $this->_params, $lineItem[$this->_priceSetId], NULL, $this->_priceSetId
+        $this->_params, $lineItem[$this->_priceSetId], $this->_priceSetId
       );
       //CRM-11529 for quick config backoffice transactions
       //when financial_type_id is passed in form, update the
diff --git a/civicrm/CRM/Member/Form/Task/Batch.php b/civicrm/CRM/Member/Form/Task/Batch.php
index 68eed49247a0eea16c52368f1551984f685db63c..04c7bbb0c7b9f7a08c564c1db82e14499df5500d 100644
--- a/civicrm/CRM/Member/Form/Task/Batch.php
+++ b/civicrm/CRM/Member/Form/Task/Batch.php
@@ -187,78 +187,86 @@ class CRM_Member_Form_Task_Batch extends CRM_Member_Form_Task {
   /**
    * Process the form after the input has been submitted and validated.
    *
-   *
-   * @return void
+   * @throws \CRM_Core_Exception
+   * @throws \CiviCRM_API3_Exception
    */
   public function postProcess() {
     $params = $this->exportValues();
-    // @todo extract submit functions &
-    // extend CRM_Event_Form_Task_BatchTest::testSubmit with a data provider to test
-    // handling of custom data, specifically checkbox fields.
+    if (isset($params['field'])) {
+      $this->submit($params);
+      CRM_Core_Session::setStatus(ts('Your updates have been saved.'), ts('Saved'), 'success');
+    }
+    else {
+      CRM_Core_Session::setStatus(ts('No updates have been saved.'), ts('Not Saved'), 'alert');
+    }
+  }
+
+  /**
+   * @param array $params
+   *
+   * @return mixed
+   * @throws \CRM_Core_Exception
+   * @throws \CiviCRM_API3_Exception
+   */
+  public function submit(array $params) {
     $dates = [
       'membership_join_date',
       'membership_start_date',
       'membership_end_date',
     ];
-    if (isset($params['field'])) {
-      $customFields = [];
-      foreach ($params['field'] as $key => $value) {
-        $ids['membership'] = $key;
-        if (!empty($value['membership_source'])) {
-          $value['source'] = $value['membership_source'];
-        }
+    $customFields = [];
+    foreach ($params['field'] as $key => $value) {
+      $value['id'] = $key;
+      if (!empty($value['membership_source'])) {
+        $value['source'] = $value['membership_source'];
+      }
 
-        if (!empty($value['membership_type'])) {
-          $membershipTypeId = $value['membership_type_id'] = $value['membership_type'][1];
-        }
+      if (!empty($value['membership_type'])) {
+        $membershipTypeId = $value['membership_type_id'] = $value['membership_type'][1];
+      }
 
-        unset($value['membership_source']);
-        unset($value['membership_type']);
+      unset($value['membership_source']);
+      unset($value['membership_type']);
 
-        //Get the membership status
-        $value['status_id'] = (CRM_Utils_Array::value('membership_status', $value)) ? $value['membership_status'] : CRM_Core_DAO::getFieldValue('CRM_Member_DAO_Membership', $key, 'status_id');
-        unset($value['membership_status']);
-        foreach ($dates as $val) {
-          if (isset($value[$val])) {
-            $value[$val] = CRM_Utils_Date::processDate($value[$val]);
-          }
+      //Get the membership status
+      $value['status_id'] = (CRM_Utils_Array::value('membership_status', $value)) ? $value['membership_status'] : CRM_Core_DAO::getFieldValue('CRM_Member_DAO_Membership', $key, 'status_id');
+      unset($value['membership_status']);
+      foreach ($dates as $val) {
+        if (isset($value[$val])) {
+          $value[$val] = CRM_Utils_Date::processDate($value[$val]);
+        }
+      }
+      if (empty($customFields)) {
+        if (empty($value['membership_type_id'])) {
+          $membershipTypeId = CRM_Core_DAO::getFieldValue('CRM_Member_DAO_Membership', $key, 'membership_type_id');
         }
-        if (empty($customFields)) {
-          if (empty($value['membership_type_id'])) {
-            $membershipTypeId = CRM_Core_DAO::getFieldValue('CRM_Member_DAO_Membership', $key, 'membership_type_id');
-          }
 
-          // membership type custom data
-          $customFields = CRM_Core_BAO_CustomField::getFields('Membership', FALSE, FALSE, $membershipTypeId);
+        // membership type custom data
+        $customFields = CRM_Core_BAO_CustomField::getFields('Membership', FALSE, FALSE, $membershipTypeId);
 
-          $customFields = CRM_Utils_Array::crmArrayMerge($customFields,
-            CRM_Core_BAO_CustomField::getFields('Membership',
-              FALSE, FALSE, NULL, NULL, TRUE
-            )
-          );
-        }
-        //check for custom data
-        $value['custom'] = CRM_Core_BAO_CustomField::postProcess($params['field'][$key],
-          $key,
-          'Membership',
-          $membershipTypeId
+        $customFields = CRM_Utils_Array::crmArrayMerge($customFields,
+          CRM_Core_BAO_CustomField::getFields('Membership',
+            FALSE, FALSE, NULL, NULL, TRUE
+          )
         );
+      }
+      //check for custom data
+      $value['custom'] = CRM_Core_BAO_CustomField::postProcess($params['field'][$key],
+        $key,
+        'Membership',
+        $membershipTypeId
+      );
 
-        $membership = CRM_Member_BAO_Membership::add($value, $ids);
+      $membership = CRM_Member_BAO_Membership::add($value);
 
-        // add custom field values
-        if (!empty($value['custom']) &&
-          is_array($value['custom'])
-        ) {
-          CRM_Core_BAO_CustomValueTable::store($value['custom'], 'civicrm_membership', $membership->id);
-        }
+      // add custom field values
+      if (!empty($value['custom']) &&
+        is_array($value['custom'])
+      ) {
+        CRM_Core_BAO_CustomValueTable::store($value['custom'], 'civicrm_membership', $membership->id);
       }
-
-      CRM_Core_Session::setStatus(ts("Your updates have been saved."), ts('Saved'), 'success');
-    }
-    else {
-      CRM_Core_Session::setStatus(ts("No updates have been saved."), ts('Not Saved'), 'alert');
     }
+    return $value;
   }
 
 }
diff --git a/civicrm/CRM/Member/Form/Task/Delete.php b/civicrm/CRM/Member/Form/Task/Delete.php
index fdeb718a4ccfddad828eb0a2b365ccfef8fa6194..3f613b1334300e1565673c2ed2c3cc0def25c091 100644
--- a/civicrm/CRM/Member/Form/Task/Delete.php
+++ b/civicrm/CRM/Member/Form/Task/Delete.php
@@ -40,7 +40,7 @@ class CRM_Member_Form_Task_Delete extends CRM_Member_Form_Task {
   public function preProcess() {
     //check for delete
     if (!CRM_Core_Permission::checkActionPermission('CiviMember', CRM_Core_Action::DELETE)) {
-      CRM_Core_Error::fatal(ts('You do not have permission to access this page.'));
+      CRM_Core_Error::statusBounce(ts('You do not have permission to access this page.'));
     }
     parent::preProcess();
   }
diff --git a/civicrm/CRM/PCP/DAO/PCP.php b/civicrm/CRM/PCP/DAO/PCP.php
index 8cc890deacc540155227c066d7d9def0f671d7bd..b67f820548d00978c8d55c70a3fc4e4112e86e4e 100644
--- a/civicrm/CRM/PCP/DAO/PCP.php
+++ b/civicrm/CRM/PCP/DAO/PCP.php
@@ -6,7 +6,7 @@
  *
  * Generated from xml/schema/CRM/PCP/PCP.xml
  * DO NOT EDIT.  Generated by CRM_Core_CodeGen
- * (GenCodeChecksum:381499ae9c76477eb8aa0693c45456c6)
+ * (GenCodeChecksum:c12e9747f9f51dba37cbb4dc80fb36ef)
  */
 
 /**
diff --git a/civicrm/CRM/PCP/DAO/PCPBlock.php b/civicrm/CRM/PCP/DAO/PCPBlock.php
index 1c44ac9a35fb947d1b7dcf57e1abf3949bf166bd..6034545412356c7058d5fb5ac5980ce8017bc666 100644
--- a/civicrm/CRM/PCP/DAO/PCPBlock.php
+++ b/civicrm/CRM/PCP/DAO/PCPBlock.php
@@ -6,7 +6,7 @@
  *
  * Generated from xml/schema/CRM/PCP/PCPBlock.xml
  * DO NOT EDIT.  Generated by CRM_Core_CodeGen
- * (GenCodeChecksum:42d329d90e59aac0c5480ba2a50aec83)
+ * (GenCodeChecksum:dd013e9f20918e34e96caa5728dd5047)
  */
 
 /**
diff --git a/civicrm/CRM/Pledge/DAO/Pledge.php b/civicrm/CRM/Pledge/DAO/Pledge.php
index 282649f15ecd06ef94d45475f675434b080ec518..52d159115adcce1dab44a30a1ba8b89d786d5e2a 100644
--- a/civicrm/CRM/Pledge/DAO/Pledge.php
+++ b/civicrm/CRM/Pledge/DAO/Pledge.php
@@ -6,7 +6,7 @@
  *
  * Generated from xml/schema/CRM/Pledge/Pledge.xml
  * DO NOT EDIT.  Generated by CRM_Core_CodeGen
- * (GenCodeChecksum:a25cc68d8392b1d60d7179ca484b604a)
+ * (GenCodeChecksum:482a699f087b9ed0250d60f0663727f4)
  */
 
 /**
diff --git a/civicrm/CRM/Pledge/DAO/PledgeBlock.php b/civicrm/CRM/Pledge/DAO/PledgeBlock.php
index c237c1251aabebb815bbd422d756bcd09ae59961..db14795b2a536593fec5865ca4c29837069b55e0 100644
--- a/civicrm/CRM/Pledge/DAO/PledgeBlock.php
+++ b/civicrm/CRM/Pledge/DAO/PledgeBlock.php
@@ -6,7 +6,7 @@
  *
  * Generated from xml/schema/CRM/Pledge/PledgeBlock.xml
  * DO NOT EDIT.  Generated by CRM_Core_CodeGen
- * (GenCodeChecksum:dd1489be32b1ac4cf012b93cb68afb10)
+ * (GenCodeChecksum:748faa657d316e3de8124c5a1ecb7095)
  */
 
 /**
diff --git a/civicrm/CRM/Pledge/DAO/PledgePayment.php b/civicrm/CRM/Pledge/DAO/PledgePayment.php
index 71ba8e24f067f7db24d03e541ee8f9fd4ff38b05..8183490607884b7b98feecd231e85b2f3e94c71a 100644
--- a/civicrm/CRM/Pledge/DAO/PledgePayment.php
+++ b/civicrm/CRM/Pledge/DAO/PledgePayment.php
@@ -6,7 +6,7 @@
  *
  * Generated from xml/schema/CRM/Pledge/PledgePayment.xml
  * DO NOT EDIT.  Generated by CRM_Core_CodeGen
- * (GenCodeChecksum:563e2926d00b9fe0c4919bfd9a0a05e7)
+ * (GenCodeChecksum:cfecdde34ba28e4860662441f0f234f5)
  */
 
 /**
diff --git a/civicrm/CRM/Pledge/Form/Payment.php b/civicrm/CRM/Pledge/Form/Payment.php
index 35b8580cbbb5f9f08f93c95a7aadd342d18d341b..119533b567e3d1d3c8cb1e4748fdd09d61a807a8 100644
--- a/civicrm/CRM/Pledge/Form/Payment.php
+++ b/civicrm/CRM/Pledge/Form/Payment.php
@@ -43,11 +43,13 @@ class CRM_Pledge_Form_Payment extends CRM_Core_Form {
 
   /**
    * Set variables up before form is built.
+   *
+   * @throws \CRM_Core_Exception
    */
   public function preProcess() {
     // check for edit permission
     if (!CRM_Core_Permission::check('edit pledges')) {
-      CRM_Core_Error::fatal(ts('You do not have permission to access this page.'));
+      CRM_Core_Error::statusBounce(ts('You do not have permission to access this page.'));
     }
 
     $this->_id = CRM_Utils_Request::retrieve('ppId', 'Positive', $this);
diff --git a/civicrm/CRM/Pledge/Form/Pledge.php b/civicrm/CRM/Pledge/Form/Pledge.php
index 4fdba82a5bfe3c0d6579a7fdb3948f7e11b5baf2..010335cddd14401c2d9e1bea6efef7ef59999076 100644
--- a/civicrm/CRM/Pledge/Form/Pledge.php
+++ b/civicrm/CRM/Pledge/Form/Pledge.php
@@ -55,6 +55,8 @@ class CRM_Pledge_Form_Pledge extends CRM_Core_Form {
 
   /**
    * Set variables up before form is built.
+   *
+   * @throws \CRM_Core_Exception
    */
   public function preProcess() {
     $this->_contactID = CRM_Utils_Request::retrieve('cid', 'Positive', $this);
@@ -66,7 +68,7 @@ class CRM_Pledge_Form_Pledge extends CRM_Core_Form {
 
     // check for action permissions.
     if (!CRM_Core_Permission::checkActionPermission('CiviPledge', $this->_action)) {
-      CRM_Core_Error::fatal(ts('You do not have permission to access this page.'));
+      CRM_Core_Error::statusBounce(ts('You do not have permission to access this page.'));
     }
 
     $this->assign('action', $this->_action);
diff --git a/civicrm/CRM/Pledge/Form/Task/Delete.php b/civicrm/CRM/Pledge/Form/Task/Delete.php
index 33e15f916f512baaaf68c12d35246590a94db0a0..2a1ed9c3494b12776ca616d57d297d253807e5e0 100644
--- a/civicrm/CRM/Pledge/Form/Task/Delete.php
+++ b/civicrm/CRM/Pledge/Form/Task/Delete.php
@@ -36,7 +36,7 @@ class CRM_Pledge_Form_Task_Delete extends CRM_Pledge_Form_Task {
   public function preProcess() {
     //check for delete
     if (!CRM_Core_Permission::checkActionPermission('CiviPledge', CRM_Core_Action::DELETE)) {
-      CRM_Core_Error::fatal(ts('You do not have permission to access this page.'));
+      CRM_Core_Error::statusBounce(ts('You do not have permission to access this page.'));
     }
     parent::preProcess();
   }
diff --git a/civicrm/CRM/Price/BAO/LineItem.php b/civicrm/CRM/Price/BAO/LineItem.php
index 02002d7a93abbd51ddd6b26977ad32e3cd0a9e1b..efa24b312bacbcd24f10b9b67db7a9aad7b6e19b 100644
--- a/civicrm/CRM/Price/BAO/LineItem.php
+++ b/civicrm/CRM/Price/BAO/LineItem.php
@@ -410,7 +410,8 @@ WHERE li.contribution_id = %1";
    *
    * @param bool $update
    *
-   * @return void
+   * @throws \CRM_Core_Exception
+   * @throws \CiviCRM_API3_Exception
    */
   public static function processPriceSet($entityId, $lineItem, $contributionDetails = NULL, $entityTable = 'civicrm_contribution', $update = FALSE) {
     if (!$entityId || !is_array($lineItem)
@@ -1172,7 +1173,7 @@ WHERE li.contribution_id = %1";
    * @return bool|\CRM_Core_BAO_FinancialTrxn
    */
   protected function _recordAdjustedAmt($updatedAmount, $contributionId, $taxAmount = NULL, $updateAmountLevel = NULL) {
-    $paidAmount = CRM_Core_BAO_FinancialTrxn::getTotalPayments($contributionId);
+    $paidAmount = (float) CRM_Core_BAO_FinancialTrxn::getTotalPayments($contributionId);
     $balanceAmt = $updatedAmount - $paidAmount;
 
     $contributionStatuses = CRM_Contribute_PseudoConstant::contributionStatus(NULL, 'name');
@@ -1181,26 +1182,21 @@ WHERE li.contribution_id = %1";
     $completedStatusId = array_search('Completed', $contributionStatuses);
 
     $updatedContributionDAO = new CRM_Contribute_BAO_Contribution();
-    $adjustedTrxn = $skip = FALSE;
+    $adjustedTrxn = FALSE;
     if ($balanceAmt) {
-      if ($balanceAmt > 0 && $paidAmount != 0) {
-        $contributionStatusVal = $partiallyPaidStatusId;
-      }
-      elseif ($balanceAmt < 0 && $paidAmount != 0) {
-        $contributionStatusVal = $pendingRefundStatusId;
-      }
-      elseif ($paidAmount == 0) {
+      if ($paidAmount === 0.0) {
         //skip updating the contribution status if no payment is made
-        $skip = TRUE;
         $updatedContributionDAO->cancel_date = 'null';
         $updatedContributionDAO->cancel_reason = NULL;
       }
+      else {
+        $updatedContributionDAO->contribution_status_id = $balanceAmt > 0 ? $partiallyPaidStatusId : $pendingRefundStatusId;
+      }
+
       // update contribution status and total amount without trigger financial code
       // as this is handled in current BAO function used for change selection
       $updatedContributionDAO->id = $contributionId;
-      if (!$skip) {
-        $updatedContributionDAO->contribution_status_id = $contributionStatusVal;
-      }
+
       $updatedContributionDAO->total_amount = $updatedContributionDAO->net_amount = $updatedAmount;
       $updatedContributionDAO->fee_amount = 0;
       $updatedContributionDAO->tax_amount = $taxAmount;
diff --git a/civicrm/CRM/Price/BAO/PriceSet.php b/civicrm/CRM/Price/BAO/PriceSet.php
index ec5460742686f03a9cc7e5f66ad370ea6a7788c1..5ac93721fd9a9d804309a47935c587fa969d8b68 100644
--- a/civicrm/CRM/Price/BAO/PriceSet.php
+++ b/civicrm/CRM/Price/BAO/PriceSet.php
@@ -660,12 +660,9 @@ WHERE  id = %1";
    *   Params reflecting form input e.g with fields 'price_5' => 7, 'price_8' => array(7, 8)
    * @param $lineItem
    *   Line item array to be altered.
-   * @param string $component
-   *   This parameter appears to only be relevant to determining whether memberships should be auto-renewed.
-   *   (and is effectively a boolean for 'is_membership' which could be calculated from the line items.)
    * @param int $priceSetID
    */
-  public static function processAmount($fields, &$params, &$lineItem, $component = '', $priceSetID = NULL) {
+  public static function processAmount($fields, &$params, &$lineItem, $priceSetID = NULL) {
     // using price set
     $totalPrice = $totalTax = 0;
     // CRM-18701 Sometimes the amount in the price set is overridden by the amount on the form.
@@ -675,10 +672,6 @@ WHERE  id = %1";
     // set up (which allows a free form field).
     $amount_override = NULL;
 
-    if ($component) {
-      $autoRenew = [];
-      $autoRenew[0] = $autoRenew[1] = $autoRenew[2] = 0;
-    }
     if ($priceSetID) {
       $priceFields = self::filterPriceFieldsFromParams($priceSetID, $params);
       if (count($priceFields) == 1) {
@@ -730,15 +723,6 @@ WHERE  id = %1";
             }
           }
           $totalPrice += $lineItem[$optionValueId]['line_total'] + CRM_Utils_Array::value('tax_amount', $lineItem[$optionValueId]);
-          if (
-            $component &&
-            // auto_renew exists and is empty in some workflows, which php treat as a 0
-            // and hence we explicitly check to see if auto_renew is numeric
-            isset($lineItem[$optionValueId]['auto_renew']) &&
-            is_numeric($lineItem[$optionValueId]['auto_renew'])
-          ) {
-            $autoRenew[$lineItem[$optionValueId]['auto_renew']] += $lineItem[$optionValueId]['line_total'];
-          }
           break;
 
         case 'Select':
@@ -750,13 +734,6 @@ WHERE  id = %1";
             $lineItem = self::setLineItem($field, $lineItem, $optionValueId, $totalTax);
           }
           $totalPrice += $lineItem[$optionValueId]['line_total'] + CRM_Utils_Array::value('tax_amount', $lineItem[$optionValueId]);
-          if (
-            $component &&
-            isset($lineItem[$optionValueId]['auto_renew']) &&
-            is_numeric($lineItem[$optionValueId]['auto_renew'])
-          ) {
-            $autoRenew[$lineItem[$optionValueId]['auto_renew']] += $lineItem[$optionValueId]['line_total'];
-          }
           break;
 
         case 'CheckBox':
@@ -767,13 +744,6 @@ WHERE  id = %1";
               $lineItem = self::setLineItem($field, $lineItem, $optionId, $totalTax);
             }
             $totalPrice += $lineItem[$optionId]['line_total'] + CRM_Utils_Array::value('tax_amount', $lineItem[$optionId]);
-            if (
-              $component &&
-              isset($lineItem[$optionId]['auto_renew']) &&
-              is_numeric($lineItem[$optionId]['auto_renew'])
-            ) {
-              $autoRenew[$lineItem[$optionId]['auto_renew']] += $lineItem[$optionId]['line_total'];
-            }
           }
           break;
       }
@@ -819,16 +789,6 @@ WHERE  id = %1";
 
     $params['amount'] = $totalPrice;
     $params['tax_amount'] = $totalTax;
-    if ($component) {
-      foreach ($autoRenew as $dontCare => $eachAmount) {
-        if (!$eachAmount) {
-          unset($autoRenew[$dontCare]);
-        }
-      }
-      if (count($autoRenew) > 1) {
-        $params['autoRenew'] = $autoRenew;
-      }
-    }
   }
 
   /**
@@ -1291,12 +1251,13 @@ WHERE  id = %1";
    *   The price set id.
    *
    * @return bool
+   * @throws \CRM_Core_Exception
    */
   public static function checkPermission($sid) {
     if ($sid && self::eventPriceSetDomainID()) {
       $domain_id = CRM_Core_DAO::getFieldValue('CRM_Price_DAO_PriceSet', $sid, 'domain_id', 'id');
       if (CRM_Core_Config::domainID() != $domain_id) {
-        CRM_Core_Error::fatal(ts('You do not have permission to access this page.'));
+        CRM_Core_Error::statusBounce(ts('You do not have permission to access this page.'));
       }
     }
     return TRUE;
diff --git a/civicrm/CRM/Price/DAO/LineItem.php b/civicrm/CRM/Price/DAO/LineItem.php
index 6074cfafa832da8ec7ef9c748b7fcd56f7a195d4..bd41cfae79c0bf232e43ac4859e03a3ccd51ff49 100644
--- a/civicrm/CRM/Price/DAO/LineItem.php
+++ b/civicrm/CRM/Price/DAO/LineItem.php
@@ -6,7 +6,7 @@
  *
  * Generated from xml/schema/CRM/Price/LineItem.xml
  * DO NOT EDIT.  Generated by CRM_Core_CodeGen
- * (GenCodeChecksum:90fb6a08063f00282825bb1c567eea1a)
+ * (GenCodeChecksum:6a272dce6bb5be6d82e1da572bfd4189)
  */
 
 /**
diff --git a/civicrm/CRM/Price/DAO/PriceField.php b/civicrm/CRM/Price/DAO/PriceField.php
index 3fdeb1bc9344db8c6b06a6e92597bcb70037675f..0b988900fa66dfa44665053c0981c7272a3889ee 100644
--- a/civicrm/CRM/Price/DAO/PriceField.php
+++ b/civicrm/CRM/Price/DAO/PriceField.php
@@ -6,7 +6,7 @@
  *
  * Generated from xml/schema/CRM/Price/PriceField.xml
  * DO NOT EDIT.  Generated by CRM_Core_CodeGen
- * (GenCodeChecksum:f96f9517fa4009fff3275da63195efd3)
+ * (GenCodeChecksum:60b0dde8a1e8d4933abc6df200d99809)
  */
 
 /**
diff --git a/civicrm/CRM/Price/DAO/PriceFieldValue.php b/civicrm/CRM/Price/DAO/PriceFieldValue.php
index c1fdd81209a755d3338e5453202547fed73f23ff..15ab9471e6150e409822fadb6759927567ff3750 100644
--- a/civicrm/CRM/Price/DAO/PriceFieldValue.php
+++ b/civicrm/CRM/Price/DAO/PriceFieldValue.php
@@ -6,7 +6,7 @@
  *
  * Generated from xml/schema/CRM/Price/PriceFieldValue.xml
  * DO NOT EDIT.  Generated by CRM_Core_CodeGen
- * (GenCodeChecksum:ba3d9fa454b710c09e18299d8531a9b2)
+ * (GenCodeChecksum:a5371a5b399a3e0730bc216886ce5efe)
  */
 
 /**
diff --git a/civicrm/CRM/Price/DAO/PriceSet.php b/civicrm/CRM/Price/DAO/PriceSet.php
index 116ba49f6ec0d2df06c90b0173e561caf122f9ee..c7bfebc251bff1ed8995a7e2a7d3c020389e1ea0 100644
--- a/civicrm/CRM/Price/DAO/PriceSet.php
+++ b/civicrm/CRM/Price/DAO/PriceSet.php
@@ -6,7 +6,7 @@
  *
  * Generated from xml/schema/CRM/Price/PriceSet.xml
  * DO NOT EDIT.  Generated by CRM_Core_CodeGen
- * (GenCodeChecksum:2465848603f66c170842a63e347ab3e7)
+ * (GenCodeChecksum:1d3d7fd9d32dd7cd257c4f5a7468db29)
  */
 
 /**
diff --git a/civicrm/CRM/Price/DAO/PriceSetEntity.php b/civicrm/CRM/Price/DAO/PriceSetEntity.php
index d3bd3350bd5072a97ada1b4257a5f0007c396cd1..a21ddf5bcedbb0b17647e27021202346310baa5d 100644
--- a/civicrm/CRM/Price/DAO/PriceSetEntity.php
+++ b/civicrm/CRM/Price/DAO/PriceSetEntity.php
@@ -6,7 +6,7 @@
  *
  * Generated from xml/schema/CRM/Price/PriceSetEntity.xml
  * DO NOT EDIT.  Generated by CRM_Core_CodeGen
- * (GenCodeChecksum:2af9002085aaf369b570094e32bff851)
+ * (GenCodeChecksum:84d5fcf5379a96e8a9bf767f7162d947)
  */
 
 /**
diff --git a/civicrm/CRM/Price/Form/Field.php b/civicrm/CRM/Price/Form/Field.php
index 422385a613641d9443043e8298de268d6c9bc5f9..5e4a5c4e8d25e6239cbb81a9594b99d8de915b2d 100644
--- a/civicrm/CRM/Price/Form/Field.php
+++ b/civicrm/CRM/Price/Form/Field.php
@@ -608,10 +608,14 @@ class CRM_Price_Form_Field extends CRM_Core_Form {
 
   /**
    * Process the form.
+   *
+   * @throws \CRM_Core_Exception
+   * @throws \CiviCRM_API3_Exception
    */
   public function postProcess() {
     // store the submitted values in an array
     $params = $this->controller->exportValues('Field');
+    $params['price'] = CRM_Utils_Rule::cleanMoney($params['price']);
 
     $params['is_display_amounts'] = CRM_Utils_Array::value('is_display_amounts', $params, FALSE);
     $params['is_required'] = CRM_Utils_Array::value('is_required', $params, FALSE);
@@ -638,7 +642,7 @@ class CRM_Price_Form_Field extends CRM_Core_Form {
     }
     $params['is_enter_qty'] = CRM_Utils_Array::value('is_enter_qty', $params, FALSE);
 
-    if ($params['html_type'] == 'Text') {
+    if ($params['html_type'] === 'Text') {
       // if html type is Text, force is_enter_qty on
       $params['is_enter_qty'] = 1;
       // modify params values as per the option group and option
diff --git a/civicrm/CRM/Price/Form/Set.php b/civicrm/CRM/Price/Form/Set.php
index 41a0d624de9528407a357855233e74b13bfb5c18..47f45516f22cd10dac7c4e18f4499d04c176a126 100644
--- a/civicrm/CRM/Price/Form/Set.php
+++ b/civicrm/CRM/Price/Form/Set.php
@@ -135,16 +135,14 @@ class CRM_Price_Form_Set extends CRM_Core_Form {
    */
   public static function formRule($fields, $files, $options) {
     $errors = [];
-    $count = count(CRM_Utils_Array::value('extends', $fields));
+    $count = count(CRM_Utils_Array::value('extends', $fields, []));
     //price sets configured for membership
-    if ($count && array_key_exists(CRM_Core_Component::getComponentID('CiviMember'), $fields['extends'])) {
-      if ($count > 1) {
-        $errors['extends'] = ts('If you plan on using this price set for membership signup and renewal, you can not also use it for Events or Contributions. However, a membership price set may include additional fields for non-membership options that require an additional fee (e.g. magazine subscription).');
-      }
+    if ($count > 1 && array_key_exists(CRM_Core_Component::getComponentID('CiviMember'), $fields['extends'])) {
+      $errors['extends'] = ts('If you plan on using this price set for membership signup and renewal, you can not also use it for Events or Contributions. However, a membership price set may include additional fields for non-membership options that require an additional fee (e.g. magazine subscription).');
     }
     // Checks the given price set does not start with a digit
     if (strlen($fields['title']) && is_numeric($fields['title'][0])) {
-      $errors['title'] = ts("Name cannot not start with a digit");
+      $errors['title'] = ts('Name cannot not start with a digit');
     }
     return empty($errors) ? TRUE : $errors;
   }
diff --git a/civicrm/CRM/Profile/Form.php b/civicrm/CRM/Profile/Form.php
index 4ab59bf8084ea7e327a93340e3ab594e4a21b13d..bbd5210e37350f38e0c4b75926567ad898d49141 100644
--- a/civicrm/CRM/Profile/Form.php
+++ b/civicrm/CRM/Profile/Form.php
@@ -50,7 +50,8 @@ class CRM_Profile_Form extends CRM_Core_Form {
   protected $_gid;
 
   /**
-   * @var array details of the UFGroup used on this page
+   * @var array
+   * Details of the UFGroup used on this page
    */
   protected $_ufGroup = ['name' => 'unknown'];
 
diff --git a/civicrm/CRM/Queue/DAO/QueueItem.php b/civicrm/CRM/Queue/DAO/QueueItem.php
index e20bde25d1b5be4eb2705d83c7f49e63f935b60a..935b3b85782627f36dcc7f67e47f6f19a08df62e 100644
--- a/civicrm/CRM/Queue/DAO/QueueItem.php
+++ b/civicrm/CRM/Queue/DAO/QueueItem.php
@@ -6,7 +6,7 @@
  *
  * Generated from xml/schema/CRM/Queue/QueueItem.xml
  * DO NOT EDIT.  Generated by CRM_Core_CodeGen
- * (GenCodeChecksum:ab2c0a25c3fd72fd4911003d325dbcb6)
+ * (GenCodeChecksum:2a3cbbf88c75557fad0418a96b051160)
  */
 
 /**
diff --git a/civicrm/CRM/Queue/Runner.php b/civicrm/CRM/Queue/Runner.php
index c4db418766b3e464e5f35f9513c1efae91a558c9..d44a073b5232126b175229ea585596c013a3c0b2 100644
--- a/civicrm/CRM/Queue/Runner.php
+++ b/civicrm/CRM/Queue/Runner.php
@@ -50,7 +50,8 @@ class CRM_Queue_Runner {
   public $qrid;
 
   /**
-   * @var array whether to display buttons, eg ('retry' => TRUE, 'skip' => FALSE)
+   * @var array
+   * Whether to display buttons, eg ('retry' => TRUE, 'skip' => FALSE)
    */
   public $buttons;
 
diff --git a/civicrm/CRM/Queue/Task.php b/civicrm/CRM/Queue/Task.php
index 11fc6797f426409c4744bccb819822b95a88fa90..b2d74b393ad71aa7773e6b84b9c680addef99297 100644
--- a/civicrm/CRM/Queue/Task.php
+++ b/civicrm/CRM/Queue/Task.php
@@ -25,17 +25,19 @@ class CRM_Queue_Task {
   const TASK_FAIL = 2;
 
   /**
-   * @var mixed, serializable
+   * @var mixed
+   * serializable
    */
   public $callback;
 
   /**
-   * @var array, serializable
+   * @var array
+   * serializable
    */
   public $arguments;
 
   /**
-   * @var string, NULL-able
+   * @var string|null
    */
   public $title;
 
diff --git a/civicrm/CRM/Report/BAO/Hook.php b/civicrm/CRM/Report/BAO/Hook.php
index 829d4f8e4dce6ab36d1c07ccb0d5fc64fcf46b58..b2be39e2c69909ca3427f7ef64ead8fa0d4d2024 100644
--- a/civicrm/CRM/Report/BAO/Hook.php
+++ b/civicrm/CRM/Report/BAO/Hook.php
@@ -24,7 +24,7 @@
 class CRM_Report_BAO_Hook {
 
   /**
-   * @var array of CRM_Report_BAO_HookInterface objects
+   * @var \CRM_Report_BAO_HookInterface[]
    */
   protected $_queryObjects = NULL;
 
diff --git a/civicrm/CRM/Report/DAO/ReportInstance.php b/civicrm/CRM/Report/DAO/ReportInstance.php
index c182895663f99dd00987c2688b879cfabaf24feb..0bdead7770823eb44e5d609d5c12f01a866ab4a0 100644
--- a/civicrm/CRM/Report/DAO/ReportInstance.php
+++ b/civicrm/CRM/Report/DAO/ReportInstance.php
@@ -6,7 +6,7 @@
  *
  * Generated from xml/schema/CRM/Report/ReportInstance.xml
  * DO NOT EDIT.  Generated by CRM_Core_CodeGen
- * (GenCodeChecksum:3d5de82ad4a99a689201d8d5a35268a4)
+ * (GenCodeChecksum:4e7df5b68b3cb5f69c91c4da8613c053)
  */
 
 /**
diff --git a/civicrm/CRM/Report/Form.php b/civicrm/CRM/Report/Form.php
index 2d521ec8a884deb35bc47c6af9608329eeef5c86..c07f760b503de1ab5576ed1d4bd764984b8d9000 100644
--- a/civicrm/CRM/Report/Form.php
+++ b/civicrm/CRM/Report/Form.php
@@ -139,9 +139,6 @@ class CRM_Report_Form extends CRM_Core_Form {
    */
   protected $_groupFilter = FALSE;
 
-  // [ML] Required for civiexportexcel
-  public $supportsExportExcel = TRUE;
-
   /**
    * Has the report been optimised for group filtering.
    *
@@ -2831,11 +2828,6 @@ WHERE cg.extends IN ('" . implode("','", $this->_customGroupExtends) . "') AND
       $this->_absoluteUrl = TRUE;
       $this->addPaging = FALSE;
     }
-    elseif ($this->_outputMode == 'excel2007') {
-      $printOnly = TRUE;
-      $this->_absoluteUrl = TRUE;
-      $this->addPaging = FALSE;
-    }
     elseif ($this->_outputMode == 'group') {
       $this->assign('outputMode', 'group');
     }
@@ -3478,9 +3470,6 @@ WHERE cg.extends IN ('" . implode("','", $this->_customGroupExtends) . "') AND
     elseif ($this->_outputMode == 'csv') {
       CRM_Report_Utils_Report::export2csv($this, $rows);
     }
-    elseif ($this->_outputMode == 'excel2007') {
-      CRM_CiviExportExcel_Utils_Report::export2excel2007($this, $rows);
-    }
     elseif ($this->_outputMode == 'group') {
       $group = $this->_params['groups'];
       $this->add2group($group);
diff --git a/civicrm/CRM/Report/Form/Activity.php b/civicrm/CRM/Report/Form/Activity.php
index 232d09415070b70991d7cfb6bc0eb67155f59350..fa43ee5f26f8aaf78720df1951638cdf5556e50f 100644
--- a/civicrm/CRM/Report/Form/Activity.php
+++ b/civicrm/CRM/Report/Form/Activity.php
@@ -345,9 +345,28 @@ class CRM_Report_Form_Activity extends CRM_Report_Form {
     $this->_groupFilter = TRUE;
     $this->_tagFilter = TRUE;
     $this->_tagFilterTable = 'civicrm_activity';
+
     parent::__construct();
   }
 
+  public function preProcess() {
+    // Is "Include Case Activities" selected?  If yes, include the case_id as a hidden column
+    $formToUse = $this->noController ? NULL : $this;
+    $includeCaseActivities = CRM_Utils_Request::retrieve('include_case_activities_value', 'Boolean', $formToUse);
+    if (!empty($includeCaseActivities)) {
+      $this->_columns['civicrm_case_activity'] = [
+        'dao' => 'CRM_Case_DAO_CaseActivity',
+        'fields' => [
+          'case_id' => [
+            'no_display' => TRUE,
+            'required' => TRUE,
+          ],
+        ],
+      ];
+    }
+    parent::preProcess();
+  }
+
   /**
    * Adding address fields with dbAlias for order clause.
    *
@@ -486,34 +505,7 @@ class CRM_Report_Form_Activity extends CRM_Report_Form {
    * @todo remove this function & declare the 3 contact tables separately
    */
   public function from() {
-    $activityContacts = CRM_Activity_BAO_ActivityContact::buildOptions('record_type_id', 'validate');
-    $targetID = CRM_Utils_Array::key('Activity Targets', $activityContacts);
-
-    $this->_from = "
-      FROM civicrm_activity {$this->_aliases['civicrm_activity']}
-           INNER JOIN civicrm_activity_contact  {$this->_aliases['civicrm_activity_contact']}
-                  ON {$this->_aliases['civicrm_activity']}.id = {$this->_aliases['civicrm_activity_contact']}.activity_id AND
-                     {$this->_aliases['civicrm_activity_contact']}.record_type_id = {$targetID}
-           INNER JOIN civicrm_contact civicrm_contact_target
-                  ON {$this->_aliases['civicrm_activity_contact']}.contact_id = civicrm_contact_target.id
-           {$this->_aclFrom}";
-
-    if ($this->isTableSelected('civicrm_email')) {
-      $this->_from .= "
-          LEFT JOIN civicrm_email civicrm_email_target
-                 ON {$this->_aliases['civicrm_activity_contact']}.contact_id = civicrm_email_target.contact_id AND
-                    civicrm_email_target.is_primary = 1";
-    }
-
-    if ($this->isTableSelected('civicrm_phone')) {
-      $this->_from .= "
-          LEFT JOIN civicrm_phone civicrm_phone_target
-                 ON {$this->_aliases['civicrm_activity_contact']}.contact_id = civicrm_phone_target.contact_id AND
-                    civicrm_phone_target.is_primary = 1 ";
-    }
-    $this->_aliases['civicrm_contact'] = 'civicrm_contact_target';
-
-    $this->joinAddressFromContact();
+    $this->buildFrom('target');
   }
 
   /**
@@ -818,12 +810,18 @@ GROUP BY civicrm_activity_id $having {$this->_orderBy}";
       $this->_where .= " AND {$this->_aclWhere} ";
     }
 
+    $caseJoin = '';
+    if (!empty($this->_params['include_case_activities_value'])) {
+      $caseJoin = "LEFT JOIN civicrm_case_activity {$this->_aliases['civicrm_case_activity']} ON {$this->_aliases['civicrm_activity']}.id = {$this->_aliases['civicrm_case_activity']}.activity_id";
+    }
+
     $sql = "{$this->_select}
       FROM $tempTableName tar
       INNER JOIN civicrm_activity {$this->_aliases['civicrm_activity']} ON {$this->_aliases['civicrm_activity']}.id = tar.civicrm_activity_id
       INNER JOIN civicrm_activity_contact {$this->_aliases['civicrm_activity_contact']} ON {$this->_aliases['civicrm_activity_contact']}.activity_id = {$this->_aliases['civicrm_activity']}.id
       AND {$this->_aliases['civicrm_activity_contact']}.record_type_id = {$sourceID}
       LEFT JOIN civicrm_contact contact_civireport ON contact_civireport.id = {$this->_aliases['civicrm_activity_contact']}.contact_id
+      {$caseJoin}
       {$this->_where} {$groupByFromSelect} {$this->_having} {$this->_orderBy} {$this->_limit}";
 
     CRM_Utils_Hook::alterReportVar('sql', $this, $this);
@@ -893,20 +891,36 @@ GROUP BY civicrm_activity_id $having {$this->_orderBy}";
           $cid = $rows[$rowNum]['civicrm_contact_contact_source_id'];
         }
 
-        $actActionLinks = CRM_Activity_Selector_Activity::actionLinks($row['civicrm_activity_activity_type_id'],
-          CRM_Utils_Array::value('civicrm_activity_source_record_id', $rows[$rowNum]),
-          FALSE,
-          $rows[$rowNum]['civicrm_activity_id']
-        );
-
-        $actLinkValues = [
-          'id' => $rows[$rowNum]['civicrm_activity_id'],
-          'cid' => $cid,
-          'cxt' => $context,
-        ];
-        $actUrl = CRM_Utils_System::url($actActionLinks[CRM_Core_Action::VIEW]['url'],
-          CRM_Core_Action::replace($actActionLinks[CRM_Core_Action::VIEW]['qs'], $actLinkValues), TRUE
-        );
+        if (empty($this->_params['include_case_activities_value']) || empty($rows[$rowNum]['civicrm_case_activity_case_id'])) {
+          // Generate a "view activity" link
+          $actActionLinks = CRM_Activity_Selector_Activity::actionLinks($row['civicrm_activity_activity_type_id'],
+            CRM_Utils_Array::value('civicrm_activity_source_record_id', $rows[$rowNum]),
+            FALSE,
+            $rows[$rowNum]['civicrm_activity_id']
+          );
+
+          $actLinkValues = [
+            'id' => $rows[$rowNum]['civicrm_activity_id'],
+            'cid' => $cid,
+            'cxt' => $context,
+          ];
+          $actUrl = CRM_Utils_System::url($actActionLinks[CRM_Core_Action::VIEW]['url'],
+            CRM_Core_Action::replace($actActionLinks[CRM_Core_Action::VIEW]['qs'], $actLinkValues), TRUE
+          );
+        }
+        else {
+          // Generate a "view case activity" link
+          $caseActionLinks = CRM_Case_Selector_Search::actionLinks();
+          $caseLinkValues = [
+            'aid' => $rows[$rowNum]['civicrm_activity_id'],
+            'caseid' => $rows[$rowNum]['civicrm_case_activity_case_id'],
+            'cid' => $cid,
+            'cxt' => $context,
+          ];
+          $actUrl = CRM_Utils_System::url($caseActionLinks[CRM_Core_Action::VIEW]['url'],
+            CRM_Core_Action::replace($caseActionLinks[CRM_Core_Action::VIEW]['qs'], $caseLinkValues), TRUE
+          );
+        }
       }
 
       if (array_key_exists('civicrm_contact_contact_source', $row)) {
@@ -1094,31 +1108,7 @@ GROUP BY civicrm_activity_id $having {$this->_orderBy}";
    * refactor in order to get this under ReportTemplateTests)
    */
   protected function buildAssigneeFrom() {
-    $activityContacts = CRM_Activity_BAO_ActivityContact::buildOptions('record_type_id', 'validate');
-    $assigneeID = CRM_Utils_Array::key('Activity Assignees', $activityContacts);
-    $this->_from = "
-        FROM civicrm_activity {$this->_aliases['civicrm_activity']}
-             INNER JOIN civicrm_activity_contact {$this->_aliases['civicrm_activity_contact']}
-                    ON {$this->_aliases['civicrm_activity']}.id = {$this->_aliases['civicrm_activity_contact']}.activity_id AND
-                       {$this->_aliases['civicrm_activity_contact']}.record_type_id = {$assigneeID}
-             INNER JOIN civicrm_contact civicrm_contact_assignee
-                    ON {$this->_aliases['civicrm_activity_contact']}.contact_id = civicrm_contact_assignee.id
-             {$this->_aclFrom}";
-
-    if ($this->isTableSelected('civicrm_email')) {
-      $this->_from .= "
-            LEFT JOIN civicrm_email civicrm_email_assignee
-                   ON {$this->_aliases['civicrm_activity_contact']}.contact_id = civicrm_email_assignee.contact_id AND
-                      civicrm_email_assignee.is_primary = 1";
-    }
-    if ($this->isTableSelected('civicrm_phone')) {
-      $this->_from .= "
-            LEFT JOIN civicrm_phone civicrm_phone_assignee
-                   ON {$this->_aliases['civicrm_activity_contact']}.contact_id = civicrm_phone_assignee.contact_id AND
-                      civicrm_phone_assignee.is_primary = 1 ";
-    }
-    $this->_aliases['civicrm_contact'] = 'civicrm_contact_assignee';
-    $this->joinAddressFromContact();
+    $this->buildFrom('assignee');
   }
 
   /**
@@ -1128,30 +1118,60 @@ GROUP BY civicrm_activity_id $having {$this->_orderBy}";
    * refactor in order to get this under ReportTemplateTests)
    */
   protected function buildSourceFrom() {
+    $this->buildFrom('source');
+  }
+
+  /**
+   * Shared function to build the from clause
+   *
+   * @param string $recordType (one of 'source', 'activity', 'target')
+   */
+  protected function buildFrom($recordType) {
     $activityContacts = CRM_Activity_BAO_ActivityContact::buildOptions('record_type_id', 'validate');
-    $sourceID = CRM_Utils_Array::key('Activity Source', $activityContacts);
+    switch ($recordType) {
+      case 'target':
+        $recordTypeID = CRM_Utils_Array::key('Activity Targets', $activityContacts);
+        break;
+
+      case 'source':
+        $recordTypeID = CRM_Utils_Array::key('Activity Source', $activityContacts);
+        break;
+
+      case 'assignee':
+        $recordTypeID = CRM_Utils_Array::key('Activity Assignees', $activityContacts);
+        break;
+
+    }
+
     $this->_from = "
-        FROM civicrm_activity {$this->_aliases['civicrm_activity']}
-             INNER JOIN civicrm_activity_contact {$this->_aliases['civicrm_activity_contact']}
-                    ON {$this->_aliases['civicrm_activity']}.id = {$this->_aliases['civicrm_activity_contact']}.activity_id AND
-                       {$this->_aliases['civicrm_activity_contact']}.record_type_id = {$sourceID}
-             INNER JOIN civicrm_contact civicrm_contact_source
-                    ON {$this->_aliases['civicrm_activity_contact']}.contact_id = civicrm_contact_source.id
-             {$this->_aclFrom}";
+      FROM civicrm_activity {$this->_aliases['civicrm_activity']}
+           INNER JOIN civicrm_activity_contact  {$this->_aliases['civicrm_activity_contact']}
+                  ON {$this->_aliases['civicrm_activity']}.id = {$this->_aliases['civicrm_activity_contact']}.activity_id AND
+                     {$this->_aliases['civicrm_activity_contact']}.record_type_id = {$recordTypeID}
+           INNER JOIN civicrm_contact civicrm_contact_{$recordType}
+                  ON {$this->_aliases['civicrm_activity_contact']}.contact_id = civicrm_contact_{$recordType}.id
+           {$this->_aclFrom}";
+    if (!empty($this->_params['include_case_activities_value'])) {
+      $this->_from .= "
+          LEFT JOIN civicrm_case_activity {$this->_aliases['civicrm_case_activity']}
+                  ON {$this->_aliases['civicrm_case_activity']}.activity_id = {$this->_aliases['civicrm_activity']}.id";
+    }
 
     if ($this->isTableSelected('civicrm_email')) {
       $this->_from .= "
-            LEFT JOIN civicrm_email civicrm_email_source
-                   ON {$this->_aliases['civicrm_activity_contact']}.contact_id = civicrm_email_source.contact_id AND
-                      civicrm_email_source.is_primary = 1";
+          LEFT JOIN civicrm_email civicrm_email_{$recordType}
+                 ON {$this->_aliases['civicrm_activity_contact']}.contact_id = civicrm_email_{$recordType}.contact_id AND
+                    civicrm_email_{$recordType}.is_primary = 1";
     }
+
     if ($this->isTableSelected('civicrm_phone')) {
       $this->_from .= "
-            LEFT JOIN civicrm_phone civicrm_phone_source
-                   ON {$this->_aliases['civicrm_activity_contact']}.contact_id = civicrm_phone_source.contact_id AND
-                      civicrm_phone_source.is_primary = 1 ";
+          LEFT JOIN civicrm_phone civicrm_phone_{$recordType}
+                 ON {$this->_aliases['civicrm_activity_contact']}.contact_id = civicrm_phone_{$recordType}.contact_id AND
+                    civicrm_phone_{$recordType}.is_primary = 1 ";
     }
-    $this->_aliases['civicrm_contact'] = 'civicrm_contact_source';
+    $this->_aliases['civicrm_contact'] = "civicrm_contact_{$recordType}";
+
     $this->joinAddressFromContact();
   }
 
diff --git a/civicrm/CRM/Report/Form/Case/Detail.php b/civicrm/CRM/Report/Form/Case/Detail.php
index 69f29006b259c93dec3d047af850d082b8ac5fcb..1f7d6cc38101dae681a3e18352f6a2f0bbee69d4 100644
--- a/civicrm/CRM/Report/Form/Case/Detail.php
+++ b/civicrm/CRM/Report/Form/Case/Detail.php
@@ -44,12 +44,6 @@ class CRM_Report_Form_Case_Detail extends CRM_Report_Form {
       $this->rel_types[$relid] = $v['label_b_a'];
     }
 
-    $this->deleted_labels = [
-      '' => ts('- select -'),
-      0 => ts('No'),
-      1 => ts('Yes'),
-    ];
-
     $this->caseActivityTypes = [];
     foreach (CRM_Case_PseudoConstant::caseActivityType() as $typeDetail) {
       $this->caseActivityTypes[$typeDetail['id']] = $typeDetail['label'];
@@ -81,7 +75,7 @@ class CRM_Report_Form_Case_Detail extends CRM_Report_Form {
           'is_deleted' => [
             'title' => ts('Deleted?'),
             'default' => FALSE,
-            'type' => CRM_Utils_Type::T_INT,
+            'type' => CRM_Utils_Type::T_BOOLEAN,
           ],
         ],
         'filters' => [
@@ -109,9 +103,7 @@ class CRM_Report_Form_Case_Detail extends CRM_Report_Form {
           ],
           'is_deleted' => [
             'title' => ts('Deleted?'),
-            'type' => CRM_Utils_Type::T_INT,
-            'operatorType' => CRM_Report_Form::OP_SELECT,
-            'options' => $this->deleted_labels,
+            'type' => CRM_Utils_Type::T_BOOLEAN,
             'default' => 0,
           ],
         ],
@@ -173,8 +165,6 @@ class CRM_Report_Form_Case_Detail extends CRM_Report_Form {
           'is_active' => [
             'title' => ts('Active Role?'),
             'type' => CRM_Utils_Type::T_BOOLEAN,
-            'default' => TRUE,
-            'options' => CRM_Core_SelectValues::boolean(),
           ],
         ],
       ],
@@ -675,12 +665,6 @@ class CRM_Report_Form_Case_Detail extends CRM_Report_Form {
         $entryFound = TRUE;
       }
 
-      if (array_key_exists('civicrm_case_is_deleted', $row)) {
-        $value = $row['civicrm_case_is_deleted'];
-        $rows[$rowNum]['civicrm_case_is_deleted'] = $this->deleted_labels[$value];
-        $entryFound = TRUE;
-      }
-
       $entryFound = $this->alterDisplayAddressFields($row, $rows, $rowNum, NULL, NULL) ? TRUE : $entryFound;
       if (!$entryFound) {
         break;
diff --git a/civicrm/CRM/Report/Form/Case/Summary.php b/civicrm/CRM/Report/Form/Case/Summary.php
index fb559e015a216f48c41cf1fceaff5bc960866d54..ab089194bb27d24638152170f15ec32c3c4242ee 100644
--- a/civicrm/CRM/Report/Form/Case/Summary.php
+++ b/civicrm/CRM/Report/Form/Case/Summary.php
@@ -33,12 +33,6 @@ class CRM_Report_Form_Case_Summary extends CRM_Report_Form {
       $this->rel_types[$relid] = $v['label_b_a'];
     }
 
-    $this->deleted_labels = [
-      '' => ts('- select -'),
-      0 => ts('No'),
-      1 => ts('Yes'),
-    ];
-
     $this->_columns = [
       'civicrm_c2' => [
         'dao' => 'CRM_Contact_DAO_Contact',
@@ -97,7 +91,7 @@ class CRM_Report_Form_Case_Summary extends CRM_Report_Form {
           'is_deleted' => [
             'title' => ts('Deleted?'),
             'default' => FALSE,
-            'type' => CRM_Utils_Type::T_INT,
+            'type' => CRM_Utils_Type::T_BOOLEAN,
           ],
         ],
         'filters' => [
@@ -125,9 +119,7 @@ class CRM_Report_Form_Case_Summary extends CRM_Report_Form {
           ],
           'is_deleted' => [
             'title' => ts('Deleted?'),
-            'type' => CRM_Report_Form::OP_INT,
-            'operatorType' => CRM_Report_Form::OP_SELECT,
-            'options' => $this->deleted_labels,
+            'type' => CRM_Utils_Type::T_BOOLEAN,
             'default' => 0,
           ],
         ],
@@ -170,9 +162,6 @@ class CRM_Report_Form_Case_Summary extends CRM_Report_Form {
           'is_active' => [
             'title' => ts('Active Relationship?'),
             'type' => CRM_Utils_Type::T_BOOLEAN,
-            //MV dev/core#603, not set default values Yes/No, this cause issue when relationship fields are not selected
-            // 'default' => TRUE,
-            'options' => ['' => ts('- Select -')] + CRM_Core_SelectValues::boolean(),
           ],
         ],
       ],
@@ -379,12 +368,6 @@ inner join civicrm_contact $c2 on ${c2}.id=${ccc}.contact_id
         $entryFound = TRUE;
       }
 
-      if (array_key_exists('civicrm_case_is_deleted', $row)) {
-        $value = $row['civicrm_case_is_deleted'];
-        $rows[$rowNum]['civicrm_case_is_deleted'] = $this->deleted_labels[$value];
-        $entryFound = TRUE;
-      }
-
       if (!$entryFound) {
         break;
       }
diff --git a/civicrm/CRM/Report/Form/Instance.php b/civicrm/CRM/Report/Form/Instance.php
index 2de70663ff948119cf6d44a258944302c9908df7..8f00408a17909462abaeb7656c7f7a811569b64d 100644
--- a/civicrm/CRM/Report/Form/Instance.php
+++ b/civicrm/CRM/Report/Form/Instance.php
@@ -102,35 +102,30 @@ class CRM_Report_Form_Instance {
       $form->freeze('is_reserved');
     }
 
-    $config = CRM_Core_Config::singleton();
-    if ($config->userFramework != 'Joomla' ||
-      $config->userFramework != 'WordPress'
-    ) {
-      $form->addElement('select',
-        'permission',
-        ts('Permission'),
-        ['0' => ts('Everyone (includes anonymous)')] + CRM_Core_Permission::basicPermissions()
-      );
+    $form->addElement('select',
+      'permission',
+      ts('Permission'),
+      ['0' => ts('Everyone (includes anonymous)')] + CRM_Core_Permission::basicPermissions()
+    );
 
-      // prepare user_roles to save as names not as ids
-      if (function_exists('user_roles')) {
-        $user_roles_array = user_roles();
-        foreach ($user_roles_array as $key => $value) {
-          $user_roles[$value] = $value;
-        }
-        $grouprole = &$form->addElement('advmultiselect',
-          'grouprole',
-          ts('ACL Group/Role'),
-          $user_roles,
-          [
-            'size' => 5,
-            'style' => 'width:240px',
-            'class' => 'advmultiselect',
-          ]
-        );
-        $grouprole->setButtonAttributes('add', ['value' => ts('Add >>')]);
-        $grouprole->setButtonAttributes('remove', ['value' => ts('<< Remove')]);
+    // prepare user_roles to save as names not as ids
+    if (function_exists('user_roles')) {
+      $user_roles_array = user_roles();
+      foreach ($user_roles_array as $key => $value) {
+        $user_roles[$value] = $value;
       }
+      $grouprole = $form->addElement('advmultiselect',
+        'grouprole',
+        ts('ACL Group/Role'),
+        $user_roles,
+        [
+          'size' => 5,
+          'style' => 'width:240px',
+          'class' => 'advmultiselect',
+        ]
+      );
+      $grouprole->setButtonAttributes('add', ['value' => ts('Add >>')]);
+      $grouprole->setButtonAttributes('remove', ['value' => ts('<< Remove')]);
     }
 
     // navigation field
diff --git a/civicrm/CRM/Report/Utils/Report.php b/civicrm/CRM/Report/Utils/Report.php
index f575d1f0639d2a10a1856c2d8642f2a6a5413292..276ef7fe6bca7781bc3a0eb3ec1daedfcfd14859 100644
--- a/civicrm/CRM/Report/Utils/Report.php
+++ b/civicrm/CRM/Report/Utils/Report.php
@@ -212,6 +212,10 @@ WHERE  inst.report_id = %1";
     //Force a download and name the file using the current timestamp.
     $datetime = date('Ymd-Gi', $_SERVER['REQUEST_TIME']);
     CRM_Utils_System::setHttpHeader('Content-Disposition', 'attachment; filename=Report_' . $datetime . '.csv');
+    // Output UTF BOM so that MS Excel copes with diacritics. This is recommended as
+    // the Windows variant but is tested with MS Excel for Mac (Office 365 v 16.31)
+    // and it continues to work on Libre Office, Numbers, Notes etc.
+    echo "\xEF\xBB\xBF";
     echo self::makeCsv($form, $rows);
     CRM_Utils_System::civiExit();
   }
diff --git a/civicrm/CRM/SMS/DAO/Provider.php b/civicrm/CRM/SMS/DAO/Provider.php
index ae391aaf208efac33cd4b454aa886457d44415e2..7cf055cb876a8a2aac6583b12aeb003c2c7ac6ba 100644
--- a/civicrm/CRM/SMS/DAO/Provider.php
+++ b/civicrm/CRM/SMS/DAO/Provider.php
@@ -6,7 +6,7 @@
  *
  * Generated from xml/schema/CRM/SMS/Provider.xml
  * DO NOT EDIT.  Generated by CRM_Core_CodeGen
- * (GenCodeChecksum:ce82211615815557cb6ac33f445b6898)
+ * (GenCodeChecksum:12dc41bf4f9c0eef63e616eec8cf6113)
  */
 
 /**
diff --git a/civicrm/CRM/UF/Form/Inline/Preview.php b/civicrm/CRM/UF/Form/Inline/Preview.php
index 0b64ba6f3e0c779b4a4a55322c667dca76a61d7c..afb81c278c60ec062265f6b7110c9919aac2cc1e 100644
--- a/civicrm/CRM/UF/Form/Inline/Preview.php
+++ b/civicrm/CRM/UF/Form/Inline/Preview.php
@@ -40,7 +40,7 @@ class CRM_UF_Form_Inline_Preview extends CRM_UF_Form_AbstractPreview {
       ],
     ];
     if (!CRM_Core_Permission::check($checkPermission)) {
-      CRM_Core_Error::fatal(ts('Permission Denied'));
+      CRM_Core_Error::statusBounce(ts('Permission Denied'));
     }
     $content = json_decode($_REQUEST['ufData'], TRUE);
     foreach (['ufGroup', 'ufFieldCollection'] as $key) {
diff --git a/civicrm/CRM/UF/Form/Inline/PreviewById.php b/civicrm/CRM/UF/Form/Inline/PreviewById.php
index bc306ea5373e43752ec8e8f966cf4c6824217d6b..599ea7af8caf850efba5f5ca53b8f460aad6a094 100644
--- a/civicrm/CRM/UF/Form/Inline/PreviewById.php
+++ b/civicrm/CRM/UF/Form/Inline/PreviewById.php
@@ -32,11 +32,12 @@ class CRM_UF_Form_Inline_PreviewById extends CRM_UF_Form_AbstractPreview {
    * @param
    *
    * @return void
+   * @throws \CRM_Core_Exception
    */
   public function preProcess() {
     // Inline forms don't get menu-level permission checks
     if (!CRM_Core_Permission::check('access CiviCRM')) {
-      CRM_Core_Error::fatal(ts('Permission Denied'));
+      CRM_Core_Error::statusBounce(ts('Permission Denied'));
     }
     $gid = CRM_Utils_Request::retrieve('id', 'Positive');
     $fields = CRM_Core_BAO_UFGroup::getFields($gid, FALSE, NULL, NULL, NULL, FALSE, NULL, FALSE, NULL, CRM_Core_Permission::CREATE, 'field_name', NULL, TRUE);
diff --git a/civicrm/CRM/Upgrade/Form.php b/civicrm/CRM/Upgrade/Form.php
index 8c23bbbb03efc6e0e370c8db3b49a1c9d536792d..4d9f5ea5f55ec040c60d9321dbe4940be9adef00 100644
--- a/civicrm/CRM/Upgrade/Form.php
+++ b/civicrm/CRM/Upgrade/Form.php
@@ -794,6 +794,8 @@ SET    version = '$version'
     // Rebuild all triggers and re-enable logging if needed
     $logging = new CRM_Logging_Schema();
     $logging->fixSchemaDifferences();
+
+    CRM_Core_ManagedEntities::singleton(TRUE)->reconcile(TRUE);
   }
 
   /**
diff --git a/civicrm/CRM/Upgrade/Incremental/SmartGroups.php b/civicrm/CRM/Upgrade/Incremental/SmartGroups.php
index 322f09252d4e6690a20b52d394caf3417643c55a..011c75a4cdd1531f3de9bd9f83f8764b4613a2a1 100644
--- a/civicrm/CRM/Upgrade/Incremental/SmartGroups.php
+++ b/civicrm/CRM/Upgrade/Incremental/SmartGroups.php
@@ -287,7 +287,7 @@ class CRM_Upgrade_Incremental_SmartGroups {
       foreach ($savedSearches as $savedSearch) {
         $form_values = $savedSearch['form_values'];
         foreach ($form_values as $index => $formValues) {
-          if ($formValues[0] === 'custom_' . $custom_date_fields->id && is_array($formValues[2])) {
+          if (isset($formValues[0]) && $formValues[0] === 'custom_' . $custom_date_fields->id && is_array($formValues[2])) {
             if (isset($formValues[2]['BETWEEN'])) {
               $form_values[] = ['custom_' . $custom_date_fields->id . '_low', '=', $this->getConvertedDateValue($formValues[2]['BETWEEN'][0], FALSE)];
               $form_values[] = ['custom_' . $custom_date_fields->id . '_high', '=', $this->getConvertedDateValue($formValues[2]['BETWEEN'][1], TRUE)];
diff --git a/civicrm/CRM/Upgrade/Incremental/php/FiveTwenty.php b/civicrm/CRM/Upgrade/Incremental/php/FiveTwenty.php
index c5f384ed788c6455460442ae3f9d646661eef366..4087b441359d402169e21804c14e5e253700f37f 100644
--- a/civicrm/CRM/Upgrade/Incremental/php/FiveTwenty.php
+++ b/civicrm/CRM/Upgrade/Incremental/php/FiveTwenty.php
@@ -14,7 +14,7 @@
 class CRM_Upgrade_Incremental_php_FiveTwenty extends CRM_Upgrade_Incremental_Base {
 
   /**
-   * @var $relationshipTypes array
+   * @var array
    *   api call result keyed on relationship_type.id
    */
   protected static $relationshipTypes;
diff --git a/civicrm/CRM/Upgrade/Incremental/php/FiveTwentyTwo.php b/civicrm/CRM/Upgrade/Incremental/php/FiveTwentyTwo.php
new file mode 100644
index 0000000000000000000000000000000000000000..ae5cf56a482c5457b640276422c848fac7946021
--- /dev/null
+++ b/civicrm/CRM/Upgrade/Incremental/php/FiveTwentyTwo.php
@@ -0,0 +1,72 @@
+<?php
+/*
+ +--------------------------------------------------------------------+
+ | Copyright CiviCRM LLC. All rights reserved.                        |
+ |                                                                    |
+ | This work is published under the GNU AGPLv3 license with some      |
+ | permitted exceptions and without any warranty. For full license    |
+ | and copyright information, see https://civicrm.org/licensing       |
+ +--------------------------------------------------------------------+
+ */
+
+/**
+ * Upgrade logic for FiveTwentyTwo */
+class CRM_Upgrade_Incremental_php_FiveTwentyTwo extends CRM_Upgrade_Incremental_Base {
+
+  /**
+   * Compute any messages which should be displayed beforeupgrade.
+   *
+   * Note: This function is called iteratively for each upcoming
+   * revision to the database.
+   *
+   * @param string $preUpgradeMessage
+   * @param string $rev
+   *   a version number, e.g. '4.4.alpha1', '4.4.beta3', '4.4.0'.
+   * @param null $currentVer
+   */
+  public function setPreUpgradeMessage(&$preUpgradeMessage, $rev, $currentVer = NULL) {
+    // Example: Generate a pre-upgrade message.
+    // if ($rev == '5.12.34') {
+    //   $preUpgradeMessage .= '<p>' . ts('A new permission, "%1", has been added. This permission is now used to control access to the Manage Tags screen.', array(1 => ts('manage tags'))) . '</p>';
+    // }
+  }
+
+  /**
+   * Compute any messages which should be displayed after upgrade.
+   *
+   * @param string $postUpgradeMessage
+   *   alterable.
+   * @param string $rev
+   *   an intermediate version; note that setPostUpgradeMessage is called repeatedly with different $revs.
+   */
+  public function setPostUpgradeMessage(&$postUpgradeMessage, $rev) {
+    // Example: Generate a post-upgrade message.
+    // if ($rev == '5.12.34') {
+    //   $postUpgradeMessage .= '<br /><br />' . ts("By default, CiviCRM now disables the ability to import directly from SQL. To use this feature, you must explicitly grant permission 'import SQL datasource'.");
+    // }
+  }
+
+  /*
+   * Important! All upgrade functions MUST add a 'runSql' task.
+   * Uncomment and use the following template for a new upgrade version
+   * (change the x in the function name):
+   */
+
+  //  /**
+  //   * Upgrade function.
+  //   *
+  //   * @param string $rev
+  //   */
+  //  public function upgrade_5_0_x($rev) {
+  //    $this->addTask(ts('Upgrade DB to %1: SQL', [1 => $rev]), 'runSql', $rev);
+  //    $this->addTask('Do the foo change', 'taskFoo', ...);
+  //    // Additional tasks here...
+  //    // Note: do not use ts() in the addTask description because it adds unnecessary strings to transifex.
+  //    // The above is an exception because 'Upgrade DB to %1: SQL' is generic & reusable.
+  //  }
+
+  // public static function taskFoo(CRM_Queue_TaskContext $ctx, ...) {
+  //   return TRUE;
+  // }
+
+}
diff --git a/civicrm/CRM/Upgrade/Incremental/sql/5.21.0.mysql.tpl b/civicrm/CRM/Upgrade/Incremental/sql/5.21.0.mysql.tpl
deleted file mode 100644
index 917601c37d700d078ff5a3799e18c1c6fa73b217..0000000000000000000000000000000000000000
--- a/civicrm/CRM/Upgrade/Incremental/sql/5.21.0.mysql.tpl
+++ /dev/null
@@ -1 +0,0 @@
-{* file to handle db changes in 5.21.0 during upgrade *}
diff --git a/civicrm/CRM/Upgrade/Incremental/sql/5.21.1.mysql.tpl b/civicrm/CRM/Upgrade/Incremental/sql/5.21.1.mysql.tpl
deleted file mode 100644
index eddd7af8f28b88ee4e424977f95498e8e7c4a627..0000000000000000000000000000000000000000
--- a/civicrm/CRM/Upgrade/Incremental/sql/5.21.1.mysql.tpl
+++ /dev/null
@@ -1 +0,0 @@
-{* file to handle db changes in 5.21.1 during upgrade *}
diff --git a/civicrm/CRM/Upgrade/Incremental/sql/5.21.2.mysql.tpl b/civicrm/CRM/Upgrade/Incremental/sql/5.21.2.mysql.tpl
deleted file mode 100644
index 69fc3392e85f08687959c81d1043b9d9f53920a4..0000000000000000000000000000000000000000
--- a/civicrm/CRM/Upgrade/Incremental/sql/5.21.2.mysql.tpl
+++ /dev/null
@@ -1 +0,0 @@
-{* file to handle db changes in 5.21.2 during upgrade *}
diff --git a/civicrm/CRM/Upgrade/Incremental/sql/5.22.0.mysql.tpl b/civicrm/CRM/Upgrade/Incremental/sql/5.22.0.mysql.tpl
new file mode 100644
index 0000000000000000000000000000000000000000..2326708b087fa99ea27b4dfc7fb44a7e4096840b
--- /dev/null
+++ b/civicrm/CRM/Upgrade/Incremental/sql/5.22.0.mysql.tpl
@@ -0,0 +1 @@
+{* file to handle db changes in 5.22.0 during upgrade *}
diff --git a/civicrm/CRM/Upgrade/Incremental/sql/5.22.alpha1.mysql.tpl b/civicrm/CRM/Upgrade/Incremental/sql/5.22.alpha1.mysql.tpl
new file mode 100644
index 0000000000000000000000000000000000000000..1885f7e76cf95055d36f9f7412a82377befe1ede
--- /dev/null
+++ b/civicrm/CRM/Upgrade/Incremental/sql/5.22.alpha1.mysql.tpl
@@ -0,0 +1 @@
+{* file to handle db changes in 5.22.alpha1 during upgrade *}
diff --git a/civicrm/CRM/Upgrade/Incremental/sql/5.22.beta1.mysql.tpl b/civicrm/CRM/Upgrade/Incremental/sql/5.22.beta1.mysql.tpl
new file mode 100644
index 0000000000000000000000000000000000000000..dfa1f812b9e4fc962da1f0cf717aa1566ef18a75
--- /dev/null
+++ b/civicrm/CRM/Upgrade/Incremental/sql/5.22.beta1.mysql.tpl
@@ -0,0 +1 @@
+{* file to handle db changes in 5.22.beta1 during upgrade *}
diff --git a/civicrm/CRM/Utils/Cache/Memcache.php b/civicrm/CRM/Utils/Cache/Memcache.php
index aa8917d3e192b53559e6740aab5053d46af830e3..415eca989f72143654e8c3b09278d2b751a32763 100644
--- a/civicrm/CRM/Utils/Cache/Memcache.php
+++ b/civicrm/CRM/Utils/Cache/Memcache.php
@@ -69,7 +69,7 @@ class CRM_Utils_Cache_Memcache implements CRM_Utils_Cache_Interface {
   protected $_cache;
 
   /**
-   * @var NULL|array
+   * @var null|array
    *
    * This is the effective prefix. It may be bumped up whenever the dataset is flushed.
    *
diff --git a/civicrm/CRM/Utils/Cache/Memcached.php b/civicrm/CRM/Utils/Cache/Memcached.php
index dd9482090c3fb62b68b325759331e093235b6b4e..53bfd3928124e36b91a93a4f9d396f64148aec9a 100644
--- a/civicrm/CRM/Utils/Cache/Memcached.php
+++ b/civicrm/CRM/Utils/Cache/Memcached.php
@@ -70,7 +70,7 @@ class CRM_Utils_Cache_Memcached implements CRM_Utils_Cache_Interface {
   protected $_cache;
 
   /**
-   * @var NULL|array
+   * @var null|array
    *
    * This is the effective prefix. It may be bumped up whenever the dataset is flushed.
    *
diff --git a/civicrm/CRM/Utils/Check/Component/Case.php b/civicrm/CRM/Utils/Check/Component/Case.php
index aedeba3a6f4ea1cf7423a679401b69ffbc2f873f..4931f9f37ff7a40db69385bab88098723995ed81 100644
--- a/civicrm/CRM/Utils/Check/Component/Case.php
+++ b/civicrm/CRM/Utils/Check/Component/Case.php
@@ -24,7 +24,7 @@ class CRM_Utils_Check_Component_Case extends CRM_Utils_Check_Component {
   protected $xmlRepo;
 
   /**
-   * @var array<string>
+   * @var string[]
    */
   protected $caseTypeNames;
 
diff --git a/civicrm/CRM/Utils/Check/Component/Schema.php b/civicrm/CRM/Utils/Check/Component/Schema.php
index fe67d9b944bb48d3ef4002a8a5c732f2f6d8b666..8486a18bc8269858cec7f695d7abcb688a261be5 100644
--- a/civicrm/CRM/Utils/Check/Component/Schema.php
+++ b/civicrm/CRM/Utils/Check/Component/Schema.php
@@ -17,7 +17,10 @@
 class CRM_Utils_Check_Component_Schema extends CRM_Utils_Check_Component {
 
   /**
+   * Check defined indices exist.
+   *
    * @return array
+   * @throws \CiviCRM_API3_Exception
    */
   public function checkIndices() {
     $messages = [];
@@ -26,7 +29,7 @@ class CRM_Utils_Check_Component_Schema extends CRM_Utils_Check_Component {
     // unreliable. Bypass this check until CRM-20817 and CRM-20533 are resolved.
     return $messages;
 
-    $missingIndices = CRM_Core_BAO_SchemaHandler::getMissingIndices();
+    $missingIndices = civicrm_api3('System', 'getmissingindices', [])['values'];
     if ($missingIndices) {
       $html = '';
       foreach ($missingIndices as $tableName => $indices) {
diff --git a/civicrm/CRM/Utils/Hook.php b/civicrm/CRM/Utils/Hook.php
index 656238fc12337956a2101a75b6f8d3932909fc2f..1491da33e26306c0f9bac78cafb77a22994d69a5 100644
--- a/civicrm/CRM/Utils/Hook.php
+++ b/civicrm/CRM/Utils/Hook.php
@@ -57,7 +57,7 @@ abstract class CRM_Utils_Hook {
   private $commonIncluded = FALSE;
 
   /**
-   * @var array(string)
+   * @var array|string
    */
   private $commonCiviModules = [];
 
@@ -160,7 +160,7 @@ abstract class CRM_Utils_Hook {
     // Instead of not calling any hooks we only call those we know to be frequently important - if a particular extension wanted
     // to avoid this they could do an early return on CRM_Core_Config::singleton()->isUpgradeMode
     // Futther discussion is happening at https://lab.civicrm.org/dev/core/issues/1460
-    $upgradeFriendlyHooks = ['civicrm_alterSettingsFolders', 'civicrm_alterSettingsMetaData', 'civicrm_triggerInfo', 'civicrm_alterLogTables', 'civicrm_container'];
+    $upgradeFriendlyHooks = ['civicrm_alterSettingsFolders', 'civicrm_alterSettingsMetaData', 'civicrm_triggerInfo', 'civicrm_alterLogTables', 'civicrm_container', 'civicrm_permission'];
     if (CRM_Core_Config::singleton()->isUpgradeMode() && !in_array($fnSuffix, $upgradeFriendlyHooks)) {
       return;
     }
@@ -249,7 +249,7 @@ abstract class CRM_Utils_Hook {
    * @param mixed $arg6
    *
    * @return array|bool
-   * @throws \Exception
+   * @throws \CRM_Core_Exception
    */
   public function runHooks(
     $civiModules, $fnSuffix, $numParams,
@@ -307,8 +307,7 @@ abstract class CRM_Utils_Hook {
           break;
 
         default:
-          CRM_Core_Error::fatal(ts('Invalid hook invocation'));
-          break;
+          throw new CRM_Core_Exception(ts('Invalid hook invocation'));
       }
 
       if (!empty($fResult) &&
@@ -2244,6 +2243,10 @@ abstract class CRM_Utils_Hook {
    *    - js: array, list of JS files or globs.
    *    - css: array, list of CSS files or globs.
    *    - partials: array, list of base-dirs containing HTML.
+   *    - partialsCallback: mixed, a callback function which generates a list of HTML
+   *        function(string $moduleName, array $moduleDefn) => array(string $file => string $html)
+   *        For future-proofing, use a serializable callback (e.g. string/array).
+   *        See also: Civi\Core\Resolver.
    *    - requires: array, list of required Angular modules.
    *    - basePages: array, uncondtionally load this module onto the given Angular pages. [v4.7.21+]
    *      If omitted, default to "array('civicrm/a')" for backward compat.
diff --git a/civicrm/CRM/Utils/HttpClient.php b/civicrm/CRM/Utils/HttpClient.php
index 4bab3001ea565638be82887c02c136c0a83d97ab..c7989ec626842d935c381ed23a99e1107a0fee46 100644
--- a/civicrm/CRM/Utils/HttpClient.php
+++ b/civicrm/CRM/Utils/HttpClient.php
@@ -62,16 +62,18 @@ class CRM_Utils_HttpClient {
    * @param string $localFile
    *   Path at which to store the .zip file.
    * @return STATUS_OK|STATUS_WRITE_ERROR|STATUS_DL_ERROR
+   *
+   * @throws CRM_Core_Exception
    */
   public function fetch($remoteFile, $localFile) {
     // Download extension zip file ...
     if (!function_exists('curl_init')) {
-      CRM_Core_Error::fatal('Cannot install this extension - curl is not installed!');
+      throw new CRM_Core_Exception('Cannot install this extension - curl is not installed!');
     }
 
     list($ch, $caConfig) = $this->createCurl($remoteFile);
     if (preg_match('/^https:/', $remoteFile) && !$caConfig->isEnableSSL()) {
-      CRM_Core_Error::fatal('Cannot install this extension - does not support SSL');
+      throw new CRM_Core_Exception('Cannot install this extension - does not support SSL');
     }
 
     $fp = @fopen($localFile, "w");
diff --git a/civicrm/CRM/Utils/Mail.php b/civicrm/CRM/Utils/Mail.php
index 6e7cc0c6cca89b4d6719d48b13e7826e97e61cf8..b9aa6ef617e2662fd423a5872899e63d73cecffd 100644
--- a/civicrm/CRM/Utils/Mail.php
+++ b/civicrm/CRM/Utils/Mail.php
@@ -25,6 +25,8 @@ class CRM_Utils_Mail {
    * to the mailer through the container.
    *
    * @return Mail
+   *
+   * @throws CRM_Core_Exception
    */
   public static function createMailer() {
     $mailingInfo = Civi::settings()->get('mailing_backend');
@@ -37,7 +39,7 @@ class CRM_Utils_Mail {
     elseif ($mailingInfo['outBound_option'] == CRM_Mailing_Config::OUTBOUND_OPTION_SMTP) {
       if ($mailingInfo['smtpServer'] == '' || !$mailingInfo['smtpServer']) {
         CRM_Core_Error::debug_log_message(ts('There is no valid smtp server setting. Click <a href=\'%1\'>Administer >> System Setting >> Outbound Email</a> to set the SMTP Server.', [1 => CRM_Utils_System::url('civicrm/admin/setting/smtp', 'reset=1')]));
-        CRM_Core_Error::fatal(ts('There is no valid smtp server setting. Click <a href=\'%1\'>Administer >> System Setting >> Outbound Email</a> to set the SMTP Server.', [1 => CRM_Utils_System::url('civicrm/admin/setting/smtp', 'reset=1')]));
+        throw new CRM_Core_Exception(ts('There is no valid smtp server setting. Click <a href=\'%1\'>Administer >> System Setting >> Outbound Email</a> to set the SMTP Server.', [1 => CRM_Utils_System::url('civicrm/admin/setting/smtp', 'reset=1')]));
       }
 
       $params['host'] = $mailingInfo['smtpServer'] ? $mailingInfo['smtpServer'] : 'localhost';
@@ -81,7 +83,7 @@ class CRM_Utils_Mail {
         !$mailingInfo['sendmail_path']
       ) {
         CRM_Core_Error::debug_log_message(ts('There is no valid sendmail path setting. Click <a href=\'%1\'>Administer >> System Setting >> Outbound Email</a> to set the sendmail server.', [1 => CRM_Utils_System::url('civicrm/admin/setting/smtp', 'reset=1')]));
-        CRM_Core_Error::fatal(ts('There is no valid sendmail path setting. Click <a href=\'%1\'>Administer >> System Setting >> Outbound Email</a> to set the sendmail server.', [1 => CRM_Utils_System::url('civicrm/admin/setting/smtp', 'reset=1')]));
+        throw new CRM_Core_Exception(ts('There is no valid sendmail path setting. Click <a href=\'%1\'>Administer >> System Setting >> Outbound Email</a> to set the sendmail server.', [1 => CRM_Utils_System::url('civicrm/admin/setting/smtp', 'reset=1')]));
       }
       $params['sendmail_path'] = $mailingInfo['sendmail_path'];
       $params['sendmail_args'] = $mailingInfo['sendmail_args'];
diff --git a/civicrm/CRM/Utils/Mail/EmailProcessor.php b/civicrm/CRM/Utils/Mail/EmailProcessor.php
index 90b65cdc04ef7ed3f06b41225788f5f7baca3e6f..9d68310b9dfef8fd455bc1e9ac62984ef1df050e 100644
--- a/civicrm/CRM/Utils/Mail/EmailProcessor.php
+++ b/civicrm/CRM/Utils/Mail/EmailProcessor.php
@@ -75,6 +75,10 @@ class CRM_Utils_Mail_EmailProcessor {
 
   /**
    * Process the mailboxes that aren't default (ie. that aren't used by civiMail for the bounce).
+   *
+   * @return bool
+   *
+   * @throws CRM_Core_Exception.
    */
   public static function processActivities() {
     $dao = new CRM_Core_DAO_MailSettings();
@@ -87,7 +91,7 @@ class CRM_Utils_Mail_EmailProcessor {
       self::_process(FALSE, $dao, TRUE);
     }
     if (!$found) {
-      CRM_Core_Error::fatal(ts('No mailboxes have been configured for Email to Activity Processing'));
+      throw new CRM_Core_Exception(ts('No mailboxes have been configured for Email to Activity Processing'));
     }
     return $found;
   }
@@ -114,6 +118,7 @@ class CRM_Utils_Mail_EmailProcessor {
    *   Create activities.
    *
    * @throws Exception
+   * @throws CRM_Core_Exception
    */
   public static function _process($civiMail, $dao, $is_create_activities) {
     // 0 = activities; 1 = bounce;
@@ -125,7 +130,7 @@ class CRM_Utils_Mail_EmailProcessor {
       : CRM_Core_PseudoConstant::getKey('CRM_Activity_BAO_Activity', 'activity_type_id', 'Inbound Email');
 
     if (!$emailActivityTypeId) {
-      CRM_Core_Error::fatal(ts('Could not find a valid Activity Type ID for Inbound Email'));
+      throw new CRM_Core_Exception(ts('Could not find a valid Activity Type ID for Inbound Email'));
     }
 
     $config = CRM_Core_Config::singleton();
@@ -156,7 +161,7 @@ class CRM_Utils_Mail_EmailProcessor {
       $message = ts('Could not connect to MailStore for ') . $dao->username . '@' . $dao->server . '<p>';
       $message .= ts('Error message: ');
       $message .= '<pre>' . $e->getMessage() . '</pre><p>';
-      CRM_Core_Error::fatal($message);
+      throw new CRM_Core_Exception($message);
     }
 
     // process fifty at a time, CRM-4002
diff --git a/civicrm/CRM/Utils/Migrate/Export.php b/civicrm/CRM/Utils/Migrate/Export.php
index e8f5c00951baae267c4985d68ba02c27ab4fd4e7..73469e553f59210f9e6ea8ad390bc2a66f8b1860 100644
--- a/civicrm/CRM/Utils/Migrate/Export.php
+++ b/civicrm/CRM/Utils/Migrate/Export.php
@@ -19,7 +19,8 @@ class CRM_Utils_Migrate_Export {
   const XML_VALUE_SEPARATOR = ":;:;:;";
 
   /**
-   * @var array description of export field mapping
+   * @var array
+   * Description of export field mapping
    *
    * @code
    * 'exampleEntityMappingName' => array(
@@ -343,6 +344,7 @@ class CRM_Utils_Migrate_Export {
    *
    * @return string
    *   XML
+   * @throws CRM_Core_Exception
    */
   public function toXML() {
     $buffer = '<?xml version="1.0" encoding="iso-8859-1" ?>';
@@ -356,7 +358,7 @@ class CRM_Utils_Migrate_Export {
         $buffer .= "  </{$this->_xml[$key]['scope']}>\n";
       }
       elseif ($this->_xml[$key]['required']) {
-        CRM_Core_Error::fatal("No records in DB for $key");
+        throw new CRM_Core_Exception("No records in DB for $key");
       }
     }
     $buffer .= "</CustomData>\n";
diff --git a/civicrm/CRM/Utils/Migrate/Import.php b/civicrm/CRM/Utils/Migrate/Import.php
index 0f5d0443a865a50f4a6362a6d24ec36d95ddef9e..420198d7917b374458c323f1d057aad2d0a66a51 100644
--- a/civicrm/CRM/Utils/Migrate/Import.php
+++ b/civicrm/CRM/Utils/Migrate/Import.php
@@ -398,7 +398,7 @@ AND        v.name = %1
    * @param $xml
    * @param $idMap
    *
-   * @throws Exception
+   * @throws CRM_Core_Exception
    */
   public function profileFields(&$xml, &$idMap) {
     foreach ($xml->ProfileFields as $profileFieldsXML) {
@@ -423,7 +423,7 @@ AND        f.column_name = %2
           ];
           $cfID = CRM_Core_DAO::singleValueQuery($sql, $params);
           if (!$cfID) {
-            CRM_Core_Error::fatal(ts("Could not find custom field for %1, %2, %3",
+            throw new CRM_Core_Exception(ts("Could not find custom field for %1, %2, %3",
                 [
                   1 => $profileField->field_name,
                   2 => $tableName,
diff --git a/civicrm/CRM/Utils/SQL/TempTable.php b/civicrm/CRM/Utils/SQL/TempTable.php
index 6ca62379c66540acf0bb9d534f105f873fc61be4..0681978495b7a2cbd94d8bff009208afe2a693d0 100644
--- a/civicrm/CRM/Utils/SQL/TempTable.php
+++ b/civicrm/CRM/Utils/SQL/TempTable.php
@@ -252,7 +252,7 @@ class CRM_Utils_SQL_TempTable {
    */
   public function setCategory($category) {
     if ($category && !preg_match(self::CATEGORY_REGEXP, $category) || strlen($category) > self::CATEGORY_LENGTH) {
-      throw new \RuntimeException("Malformed temp table category");
+      throw new \RuntimeException("Malformed temp table category $category");
     }
     $this->category = $category;
     return $this;
diff --git a/civicrm/CRM/Utils/System.php b/civicrm/CRM/Utils/System.php
index 28f9e9ba9e135b57b8b003e30ea9d7627d24e999..21cfda96a144c38658cb276bbe3c2f6371b87b0b 100644
--- a/civicrm/CRM/Utils/System.php
+++ b/civicrm/CRM/Utils/System.php
@@ -980,6 +980,8 @@ class CRM_Utils_System {
    *   Returns TRUE if the requirement is met, FALSE if the requirement is not
    *   met and we're not aborting due to the failed requirement. If $abort is
    *   TRUE and the requirement fails, this function does not return.
+   *
+   * @throws CRM_Core_Exception
    */
   public static function checkPHPVersion($ver = 5, $abort = TRUE) {
     $phpVersion = substr(PHP_VERSION, 0, 1);
@@ -988,7 +990,7 @@ class CRM_Utils_System {
     }
 
     if ($abort) {
-      CRM_Core_Error::fatal(ts('This feature requires PHP Version %1 or greater',
+      throw new CRM_Core_Exception(ts('This feature requires PHP Version %1 or greater',
         [1 => $ver]
       ));
     }
@@ -1059,6 +1061,8 @@ class CRM_Utils_System {
    *
    * @return string
    *   civicrm version
+   *
+   * @throws CRM_Core_Exception
    */
   public static function version() {
     static $version;
@@ -1075,7 +1079,7 @@ class CRM_Utils_System {
 
       // pattern check
       if (!CRM_Utils_System::isVersionFormatValid($version)) {
-        CRM_Core_Error::fatal('Unknown codebase version.');
+        throw new CRM_Core_Exception('Unknown codebase version.');
       }
     }
 
@@ -1161,7 +1165,7 @@ class CRM_Utils_System {
    *
    * @param bool|FALSE $abort
    *
-   * @throws \Exception
+   * @throws \CRM_Core_Exception
    */
   public static function redirectToSSL($abort = FALSE) {
     $config = CRM_Core_Config::singleton();
@@ -1177,7 +1181,7 @@ class CRM_Utils_System {
       Civi::log()->warning('CiviCRM thinks site is not SSL, redirecting to {url}', ['url' => $url]);
       if (!self::checkURL($url, TRUE)) {
         if ($abort) {
-          CRM_Core_Error::fatal('HTTPS is not set up on this machine');
+          throw new CRM_Core_Exception('HTTPS is not set up on this machine');
         }
         else {
           CRM_Core_Session::setStatus(ts('HTTPS is not set up on this machine'), ts('Warning'), 'alert');
diff --git a/civicrm/CRM/Utils/System/WordPress.php b/civicrm/CRM/Utils/System/WordPress.php
index f83c1f3c7bd7b1c03c5f5b21605b4767d5be2975..595ad9ff2c5a1f1c63b32dc72ff52d96e43fab29 100644
--- a/civicrm/CRM/Utils/System/WordPress.php
+++ b/civicrm/CRM/Utils/System/WordPress.php
@@ -835,13 +835,11 @@ class CRM_Utils_System_WordPress extends CRM_Utils_System_Base {
     $contactCreated = 0;
     $contactMatching = 0;
 
-    // previously used $wpdb - which means WordPress *must* be bootstrapped
-    $wpUsers = get_users(array(
-      'blog_id' => get_current_blog_id(),
-      'number' => -1,
-    ));
+    global $wpdb;
+    $wpUserIds = $wpdb->get_col("SELECT $wpdb->users.ID FROM $wpdb->users");
 
-    foreach ($wpUsers as $wpUserData) {
+    foreach ($wpUserIds as $wpUserId) {
+      $wpUserData = get_userdata($wpUserId);
       $contactCount++;
       if ($match = CRM_Core_BAO_UFMatch::synchronizeUFMatch($wpUserData,
         $wpUserData->$id,
diff --git a/civicrm/CRM/Utils/Type.php b/civicrm/CRM/Utils/Type.php
index b57ea91540dd41a52eae6b4a5883da15f255967e..54abc84763e947b62494af3c8f3b718c43526f90 100644
--- a/civicrm/CRM/Utils/Type.php
+++ b/civicrm/CRM/Utils/Type.php
@@ -213,7 +213,7 @@ class CRM_Utils_Type {
    * @param string $type
    *   The type to verify against.
    * @param bool $abort
-   *   If TRUE, the operation will CRM_Core_Error::fatal() on invalid data.
+   *   If TRUE, the operation will throw an CRM_Core_Exception on invalid data.
    *
    * @return mixed
    *   The data, escaped if necessary.
@@ -326,17 +326,16 @@ class CRM_Utils_Type {
         break;
 
       default:
-        CRM_Core_Error::fatal(
+        throw new CRM_Core_Exception(
           $type . " is not a recognised (camel cased) data type."
         );
-        break;
     }
 
     // @todo Use exceptions instead of CRM_Core_Error::fatal().
     if ($abort) {
       $data = htmlentities($data);
 
-      CRM_Core_Error::fatal("$data is not of the type $type");
+      throw new CRM_Core_Exception("$data is not of the type $type");
     }
     return NULL;
   }
diff --git a/civicrm/CRM/Utils/Weight.php b/civicrm/CRM/Utils/Weight.php
index 6df6d5bddd40467b025262fdffffa1a64d95313d..47154d1f4d03fade0b25e3dbb0bbf3f4fd332397 100644
--- a/civicrm/CRM/Utils/Weight.php
+++ b/civicrm/CRM/Utils/Weight.php
@@ -14,12 +14,13 @@
  */
 class CRM_Utils_Weight {
   /**
-   * @var array, list of GET fields which must be validated
+   * List of GET fields which must be validated
    *
    * To reduce the size of this patch, we only sign the exploitable fields
    * which make up "$baseURL" in addOrder() (eg 'filter' or 'dao').
    * Less-exploitable fields (eg 'dir') are left unsigned.
    * 'id','src','dst','dir'
+   * @var array
    */
   public static $SIGNABLE_FIELDS = ['reset', 'dao', 'idName', 'url', 'filter'];
 
@@ -418,13 +419,17 @@ class CRM_Utils_Weight {
     }
   }
 
+  /**
+   *
+   * @throws CRM_Core_Exception
+   */
   public static function fixOrder() {
     $signature = CRM_Utils_Request::retrieve('_sgn', 'String');
     $signer = new CRM_Utils_Signer(CRM_Core_Key::privateKey(), self::$SIGNABLE_FIELDS);
 
     // Validate $_GET values b/c subsequent code reads $_GET (via CRM_Utils_Request::retrieve)
     if (!$signer->validate($signature, $_GET)) {
-      CRM_Core_Error::fatal('Request signature is invalid');
+      throw new CRM_Core_Exception('Request signature is invalid');
     }
 
     // Note: Ensure this list matches self::$SIGNABLE_FIELDS
diff --git a/civicrm/CRM/Utils/Wrapper.php b/civicrm/CRM/Utils/Wrapper.php
index f1e864c5c5e179b416c2b2505bc3d1085e419792..4c3a41c6809221bb0385592cad51aca0c3b35fe0 100644
--- a/civicrm/CRM/Utils/Wrapper.php
+++ b/civicrm/CRM/Utils/Wrapper.php
@@ -25,7 +25,7 @@ class CRM_Utils_Wrapper {
    * Simple Controller.
    *
    * The controller which will handle the display and processing of this page.
-   * @var \CRM_Core_Controller_Simple object
+   * @var \CRM_Core_Controller_Simple
    */
   protected $_controller;
 
diff --git a/civicrm/Civi/API/Kernel.php b/civicrm/Civi/API/Kernel.php
index 1dee2a95900b88a573cff405dd9855a02f14400a..c23658b952912e416dd996f6546249c764a045b7 100644
--- a/civicrm/Civi/API/Kernel.php
+++ b/civicrm/Civi/API/Kernel.php
@@ -28,7 +28,7 @@ class Kernel {
   protected $dispatcher;
 
   /**
-   * @var array<ProviderInterface>
+   * @var \Civi\API\Provider\ProviderInterface[]
    */
   protected $apiProviders;
 
@@ -167,7 +167,6 @@ class Kernel {
       throw new \API_Exception('Input variable `params` is not an array', 2000);
     }
     switch ($apiRequest['version']) {
-      case 2:
       case 3:
         require_once 'api/v3/utils.php';
         _civicrm_api3_initialize();
@@ -304,8 +303,10 @@ class Kernel {
    *   An unhandled exception.
    * @param array $apiRequest
    *   The full description of the API request.
+   *
    * @return array
    *   API response.
+   * @throws \API_Exception
    */
   public function formatException($e, $apiRequest) {
     $data = [];
@@ -320,8 +321,10 @@ class Kernel {
    *   An unhandled exception.
    * @param array $apiRequest
    *   The full description of the API request.
+   *
    * @return array
    *   (API response)
+   * @throws \API_Exception
    */
   public function formatApiException($e, $apiRequest) {
     $data = $e->getExtraParams();
@@ -343,15 +346,18 @@ class Kernel {
    *   An unhandled exception.
    * @param array $apiRequest
    *   The full description of the API request.
+   *
    * @return array
    *   API response.
+   *
+   * @throws \API_Exception
    */
   public function formatPearException($e, $apiRequest) {
     $data = [];
     $error = $e->getCause();
     if ($error instanceof \DB_Error) {
-      $data["error_code"] = \DB::errorMessage($error->getCode());
-      $data["sql"] = $error->getDebugInfo();
+      $data['error_code'] = \DB::errorMessage($error->getCode());
+      $data['sql'] = $error->getDebugInfo();
     }
     if (!empty($apiRequest['params']['debug'])) {
       if (method_exists($e, 'getUserInfo')) {
@@ -363,7 +369,7 @@ class Kernel {
       $data['trace'] = $e->getTraceAsString();
     }
     else {
-      $data['tip'] = "add debug=1 to your API call to have more info about the error";
+      $data['tip'] = 'add debug=1 to your API call to have more info about the error';
     }
 
     return $this->createError($e->getMessage(), $data, $apiRequest);
@@ -385,7 +391,7 @@ class Kernel {
    */
   public function createError($msg, $data, $apiRequest, $code = NULL) {
     // FIXME what to do with $code?
-    if ($msg == 'DB Error: constraint violation' || substr($msg, 0, 9) == 'DB Error:' || $msg == 'DB Error: already exists') {
+    if ($msg === 'DB Error: constraint violation' || substr($msg, 0, 9) == 'DB Error:' || $msg == 'DB Error: already exists') {
       try {
         $fields = _civicrm_api3_api_getfields($apiRequest);
         _civicrm_api3_validate_foreign_keys($apiRequest['entity'], $apiRequest['action'], $apiRequest['params'], $fields);
diff --git a/civicrm/Civi/API/Provider/AdhocProvider.php b/civicrm/Civi/API/Provider/AdhocProvider.php
index aad4255c928176b6c63d336edfee69a3ffeba790..fcab72e1821f73283a499ebb38848438e4f8c661 100644
--- a/civicrm/Civi/API/Provider/AdhocProvider.php
+++ b/civicrm/Civi/API/Provider/AdhocProvider.php
@@ -37,7 +37,11 @@ class AdhocProvider implements EventSubscriberInterface, ProviderInterface {
   }
 
   /**
-   * @var array (string $name => array('perm' => string, 'callback' => callable))
+   * List of adhoc actions
+   *
+   * array(string $ame => array('perm' => string, 'callback' => callable))
+   *
+   * @var array
    */
   protected $actions = [];
 
diff --git a/civicrm/Civi/API/Provider/MagicFunctionProvider.php b/civicrm/Civi/API/Provider/MagicFunctionProvider.php
index cdeaab339f8cb15860b81e0052853bc1cf4485e5..8fab3ff19cabb41f1716b230bddae8b007147ea5 100644
--- a/civicrm/Civi/API/Provider/MagicFunctionProvider.php
+++ b/civicrm/Civi/API/Provider/MagicFunctionProvider.php
@@ -32,7 +32,11 @@ class MagicFunctionProvider implements EventSubscriberInterface, ProviderInterfa
   }
 
   /**
-   * @var array (string $cachekey => array('function' => string, 'is_generic' => bool))
+   * Local cache of function-mappings.
+   *
+   * array(string $cacheKey => array('function' => string, 'is_generic' => bool))
+   *
+   * @var array
    */
   private $cache;
 
diff --git a/civicrm/Civi/API/Provider/ReflectionProvider.php b/civicrm/Civi/API/Provider/ReflectionProvider.php
index 3d8e8eed724a9b329fdb2a3eb0275c488706831e..514b8469312592e879b06028992195b4cf2d561c 100644
--- a/civicrm/Civi/API/Provider/ReflectionProvider.php
+++ b/civicrm/Civi/API/Provider/ReflectionProvider.php
@@ -41,7 +41,11 @@ class ReflectionProvider implements EventSubscriberInterface, ProviderInterface
   private $apiKernel;
 
   /**
-   * @var array (string $entityName => array(string $actionName))
+   * List of all entities and their supported actions
+   *
+   * array(string $entityName => string[] $actionNames).
+   *
+   * @var array
    */
   private $actions;
 
diff --git a/civicrm/Civi/API/Subscriber/DynamicFKAuthorization.php b/civicrm/Civi/API/Subscriber/DynamicFKAuthorization.php
index 29374172ff5647ea992792810200f539c0828799..7747d0a6285ecfbdcfbbf9e256c27bfb7dda31ce 100644
--- a/civicrm/Civi/API/Subscriber/DynamicFKAuthorization.php
+++ b/civicrm/Civi/API/Subscriber/DynamicFKAuthorization.php
@@ -50,17 +50,21 @@ class DynamicFKAuthorization implements EventSubscriberInterface {
   public $kernel;
 
   /**
-   * @var string, the entity for which we want to manage permissions
+   * The entity for which we want to manage permissions.
+   *
+   * @var string
    */
   protected $entityName;
 
   /**
-   * @var array <string> the actions for which we want to manage permissions
+   * The actions for which we want to manage permissions
+   *
+   * @var string[]
    */
   protected $actions;
 
   /**
-   * @var string, SQL. Given a file ID, determine the entity+table it's attached to.
+   * SQL SELECT query - Given a file ID, determine the entity+table it's attached to.
    *
    * ex: "SELECT if(cf.id,1,0) as is_valid, cef.entity_table, cef.entity_id
    * FROM civicrm_file cf
@@ -72,14 +76,18 @@ class DynamicFKAuthorization implements EventSubscriberInterface {
    *  - is_valid: "1" if %1 identifies an actual record; otherwise "0"
    *  - entity_table: NULL or the name of a related table
    *  - entity_id: NULL or the ID of a row in the related table
+   *
+   * @var string
    */
   protected $lookupDelegateSql;
 
   /**
-   * @var string, SQL. Get a list of (field_name, table_name, extends) tuples.
+   * SQL SELECT query. Get a list of (field_name, table_name, extends) tuples.
    *
    * For example, one tuple might be ("custom_123", "civicrm_value_mygroup_4",
    * "Activity").
+   *
+   * @var string
    */
   protected $lookupCustomFieldSql;
 
@@ -91,7 +99,9 @@ class DynamicFKAuthorization implements EventSubscriberInterface {
   protected $lookupCustomFieldCache;
 
   /**
-   * @var array list of related tables for which FKs are allowed
+   * List of related tables for which FKs are allowed.
+   *
+   * @var array
    */
   protected $allowedDelegates;
 
diff --git a/civicrm/Civi/API/Subscriber/TransactionSubscriber.php b/civicrm/Civi/API/Subscriber/TransactionSubscriber.php
index 5680beec225981c86357655c3fe5dc5afaaf4406..8e7ff6a31bdb5df9da145dbfa68e177af45b0902 100644
--- a/civicrm/Civi/API/Subscriber/TransactionSubscriber.php
+++ b/civicrm/Civi/API/Subscriber/TransactionSubscriber.php
@@ -41,15 +41,21 @@ class TransactionSubscriber implements EventSubscriberInterface {
   }
 
   /**
-   * @var array (scalar $apiRequestId => CRM_Core_Transaction $tx)
+   * List of active transaction objects.
+   *
+   * array(scalar $apiRequestId => CRM_Core_Transaction $tx)
+   *
+   * @var array
    */
   private $transactions = [];
 
   /**
-   * @var array (scalar $apiRequestId => bool)
-   *
-   * A list of requests which should be forcibly rolled back to
+   * (Unused?) A list of requests which should be forcibly rolled back to
    * their save points.
+   *
+   * array (scalar $apiRequestId => bool)
+   *
+   * @var array
    */
   private $forceRollback = [];
 
diff --git a/civicrm/Civi/API/Subscriber/WrapperAdapter.php b/civicrm/Civi/API/Subscriber/WrapperAdapter.php
index 6a57a5c541a6317c168cf3e1166f15dfdb3e7ea2..6b90161e914aa92fd2a5769e66c763d88c1fa2e9 100644
--- a/civicrm/Civi/API/Subscriber/WrapperAdapter.php
+++ b/civicrm/Civi/API/Subscriber/WrapperAdapter.php
@@ -32,7 +32,7 @@ class WrapperAdapter implements EventSubscriberInterface {
   }
 
   /**
-   * @var array(\API_Wrapper)
+   * @var \API_Wrapper[]
    */
   protected $defaults;
 
diff --git a/civicrm/Civi/Angular/Manager.php b/civicrm/Civi/Angular/Manager.php
index cb4c4c86d27fba7d3f8942fb6a938a911c6d2e8a..e5f169a385be53311335799bf65b600aeac1df20 100644
--- a/civicrm/Civi/Angular/Manager.php
+++ b/civicrm/Civi/Angular/Manager.php
@@ -226,7 +226,9 @@ class Manager {
    */
   public function getRawPartials($name) {
     $module = $this->getModule($name);
-    $result = [];
+    $result = !empty($module['partialsCallback'])
+      ? \Civi\Core\Resolver::singleton()->call($module['partialsCallback'], [$name, $module])
+      : [];
     if (isset($module['partials'])) {
       foreach ($module['partials'] as $partialDir) {
         $partialDir = $this->res->getPath($module['ext']) . '/' . $partialDir;
diff --git a/civicrm/Civi/Angular/Page/Modules.php b/civicrm/Civi/Angular/Page/Modules.php
index 3b6b5a75ba5440b59ca1d1167b1bf9a2fecb1bb7..aa3655b8c7ab2e96f675e88b4e9e66d3c2db1652 100644
--- a/civicrm/Civi/Angular/Page/Modules.php
+++ b/civicrm/Civi/Angular/Page/Modules.php
@@ -24,6 +24,8 @@ class Modules extends \CRM_Core_Page {
    * "civicrm/ajax/anulgar-modules" route).
    *
    * @deprecated
+   *
+   * @throws \CRM_Core_Exception
    */
   public function run() {
     /**
@@ -56,7 +58,7 @@ class Modules extends \CRM_Core_Page {
         break;
 
       default:
-        \CRM_Core_Error::fatal("Unrecognized format");
+        throw new \CRM_Core_Exception("Unrecognized format");
     }
 
     \CRM_Utils_System::civiExit();
diff --git a/civicrm/Civi/Api4/Action/CustomValue/GetFields.php b/civicrm/Civi/Api4/Action/CustomValue/GetFields.php
index e063f7982f3319ae1ef9786063dab08ed1e303ee..c2ca32a1a84296c3ff0e9de51c2409aef60ebaa9 100644
--- a/civicrm/Civi/Api4/Action/CustomValue/GetFields.php
+++ b/civicrm/Civi/Api4/Action/CustomValue/GetFields.php
@@ -32,7 +32,7 @@ class GetFields extends \Civi\Api4\Generic\DAOGetFieldsAction {
     $fields = $this->_itemsToGet('name');
     /** @var \Civi\Api4\Service\Spec\SpecGatherer $gatherer */
     $gatherer = \Civi::container()->get('spec_gatherer');
-    $spec = $gatherer->getSpec('Custom_' . $this->getCustomGroup(), $this->getAction(), $this->includeCustom);
+    $spec = $gatherer->getSpec('Custom_' . $this->getCustomGroup(), $this->getAction(), $this->includeCustom, $this->values);
     return SpecFormatter::specToArray($spec->getFields($fields), $this->loadOptions);
   }
 
diff --git a/civicrm/Civi/Api4/Country.php b/civicrm/Civi/Api4/Country.php
new file mode 100644
index 0000000000000000000000000000000000000000..619cc6c3601fdaa423f5f5adb2192ab5b6794b98
--- /dev/null
+++ b/civicrm/Civi/Api4/Country.php
@@ -0,0 +1,30 @@
+<?php
+
+/*
+ +--------------------------------------------------------------------+
+ | Copyright CiviCRM LLC. All rights reserved.                        |
+ |                                                                    |
+ | This work is published under the GNU AGPLv3 license with some      |
+ | permitted exceptions and without any warranty. For full license    |
+ | and copyright information, see https://civicrm.org/licensing       |
+ +--------------------------------------------------------------------+
+ */
+
+/**
+ *
+ * @package CRM
+ * @copyright CiviCRM LLC https://civicrm.org/licensing
+ * $Id$
+ *
+ */
+
+namespace Civi\Api4;
+
+/**
+ * Country entity.
+ *
+ * @package Civi\Api4
+ */
+class Country extends Generic\DAOEntity {
+
+}
diff --git a/civicrm/Civi/Api4/Generic/BasicGetFieldsAction.php b/civicrm/Civi/Api4/Generic/BasicGetFieldsAction.php
index c0c851661b5d7b8bcfd110cbce55b47734a9caea..5c2b0ccb11f0110f142d8b852164b93ec9ff2098 100644
--- a/civicrm/Civi/Api4/Generic/BasicGetFieldsAction.php
+++ b/civicrm/Civi/Api4/Generic/BasicGetFieldsAction.php
@@ -30,6 +30,9 @@ use Civi\Api4\Utils\ActionUtil;
  * @method $this setLoadOptions(bool $value)
  * @method bool getLoadOptions()
  * @method $this setAction(string $value)
+ * @method $this addValue(string $value)
+ * @method $this setValues(array $values)
+ * @method array getValues()
  */
 class BasicGetFieldsAction extends BasicGetAction {
 
@@ -41,10 +44,19 @@ class BasicGetFieldsAction extends BasicGetAction {
   protected $loadOptions = FALSE;
 
   /**
+   * Fields will be returned appropriate to the specified action (get, create, delete, etc.)
+   *
    * @var string
    */
   protected $action = 'get';
 
+  /**
+   * Fields will be returned appropriate to the specified values (e.g. ['contact_type' => 'Individual'])
+   *
+   * @var array
+   */
+  protected $values = [];
+
   /**
    * To implement getFields for your own entity:
    *
diff --git a/civicrm/Civi/Api4/Generic/DAOGetFieldsAction.php b/civicrm/Civi/Api4/Generic/DAOGetFieldsAction.php
index e3a510b4703aa1dcf29216c7fc047ec58e8d2862..d64155fd0b672222676c426a58d008b50e9f87a6 100644
--- a/civicrm/Civi/Api4/Generic/DAOGetFieldsAction.php
+++ b/civicrm/Civi/Api4/Generic/DAOGetFieldsAction.php
@@ -51,8 +51,8 @@ class DAOGetFieldsAction extends BasicGetFieldsAction {
     if ($fields) {
       $this->includeCustom = strpos(implode('', $fields), '.') !== FALSE;
     }
-    $spec = $gatherer->getSpec($this->getEntityName(), $this->getAction(), $this->includeCustom);
-    return SpecFormatter::specToArray($spec->getFields($fields), $this->loadOptions);
+    $spec = $gatherer->getSpec($this->getEntityName(), $this->getAction(), $this->includeCustom, $this->values);
+    return SpecFormatter::specToArray($spec->getFields($fields), $this->loadOptions, $this->values);
   }
 
   public function fields() {
diff --git a/civicrm/Civi/Api4/Service/Spec/FieldSpec.php b/civicrm/Civi/Api4/Service/Spec/FieldSpec.php
index 84f29f1d6390feebc5e03ac347a7cb00db867cba..90a684403608d0b07f91131c3cf5b1b2af311e4a 100644
--- a/civicrm/Civi/Api4/Service/Spec/FieldSpec.php
+++ b/civicrm/Civi/Api4/Service/Spec/FieldSpec.php
@@ -376,9 +376,10 @@ class FieldSpec {
   }
 
   /**
+   * @param array $values
    * @return array
    */
-  public function getOptions() {
+  public function getOptions($values = []) {
     if (!isset($this->options) || $this->options === TRUE) {
       $fieldName = $this->getName();
 
@@ -388,7 +389,7 @@ class FieldSpec {
       }
 
       $bao = CoreUtil::getBAOFromApiName($this->getEntity());
-      $options = $bao::buildOptions($fieldName);
+      $options = $bao::buildOptions($fieldName, NULL, $values);
 
       if (!is_array($options) || !$options) {
         $options = FALSE;
diff --git a/civicrm/Civi/Api4/Service/Spec/Provider/ContactCreationSpecProvider.php b/civicrm/Civi/Api4/Service/Spec/Provider/ContactCreationSpecProvider.php
index 4810d03d0582da6c0246c64b3dff5a9a9268a2a1..1f77f16d2dc0a1202954a943455ad9c096842ab3 100644
--- a/civicrm/Civi/Api4/Service/Spec/Provider/ContactCreationSpecProvider.php
+++ b/civicrm/Civi/Api4/Service/Spec/Provider/ContactCreationSpecProvider.php
@@ -29,8 +29,10 @@ class ContactCreationSpecProvider implements Generic\SpecProviderInterface {
    * @param \Civi\Api4\Service\Spec\RequestSpec $spec
    */
   public function modifySpec(RequestSpec $spec) {
-    $spec->getFieldByName('contact_type')
-      ->setDefaultValue('Individual');
+    $contactTypeField = $spec->getFieldByName('contact_type');
+    if ($contactTypeField) {
+      $contactTypeField->setDefaultValue('Individual');
+    }
 
     $spec->getFieldByName('is_opt_out')->setRequired(FALSE);
     $spec->getFieldByName('is_deleted')->setRequired(FALSE);
diff --git a/civicrm/Civi/Api4/Service/Spec/SpecFormatter.php b/civicrm/Civi/Api4/Service/Spec/SpecFormatter.php
index 379caf8a03c2f37ff957516ad040b5514cd40064..8c63e66228ca0a3770abe56bf4544d647107c6ac 100644
--- a/civicrm/Civi/Api4/Service/Spec/SpecFormatter.php
+++ b/civicrm/Civi/Api4/Service/Spec/SpecFormatter.php
@@ -29,15 +29,16 @@ class SpecFormatter {
   /**
    * @param FieldSpec[] $fields
    * @param bool $includeFieldOptions
+   * @param array $values
    *
    * @return array
    */
-  public static function specToArray($fields, $includeFieldOptions = FALSE) {
+  public static function specToArray($fields, $includeFieldOptions = FALSE, $values = []) {
     $fieldArray = [];
 
     foreach ($fields as $field) {
       if ($includeFieldOptions) {
-        $field->getOptions();
+        $field->getOptions($values);
       }
       $fieldArray[$field->getName()] = $field->toArray();
     }
diff --git a/civicrm/Civi/Api4/Service/Spec/SpecGatherer.php b/civicrm/Civi/Api4/Service/Spec/SpecGatherer.php
index 8a91d09e90897f779092849f128deb42a1aa2015..0edb4e8c6a5885ac25396e756b2aa7d02d672586 100644
--- a/civicrm/Civi/Api4/Service/Spec/SpecGatherer.php
+++ b/civicrm/Civi/Api4/Service/Spec/SpecGatherer.php
@@ -46,18 +46,19 @@ class SpecGatherer {
    *
    * @param string $entity
    * @param string $action
-   * @param $includeCustom
+   * @param bool $includeCustom
+   * @param array $values
    *
    * @return \Civi\Api4\Service\Spec\RequestSpec
    */
-  public function getSpec($entity, $action, $includeCustom) {
+  public function getSpec($entity, $action, $includeCustom, $values = []) {
     $specification = new RequestSpec($entity, $action);
 
     // Real entities
     if (strpos($entity, 'Custom_') !== 0) {
-      $this->addDAOFields($entity, $action, $specification);
+      $this->addDAOFields($entity, $action, $specification, $values);
       if ($includeCustom && array_key_exists($entity, \CRM_Core_SelectValues::customGroupExtends())) {
-        $this->addCustomFields($entity, $specification);
+        $this->addCustomFields($entity, $specification, $values);
       }
     }
     // Custom pseudo-entities
@@ -92,14 +93,18 @@ class SpecGatherer {
    * @param string $entity
    * @param string $action
    * @param \Civi\Api4\Service\Spec\RequestSpec $specification
+   * @param array $values
    */
-  private function addDAOFields($entity, $action, RequestSpec $specification) {
+  private function addDAOFields($entity, $action, RequestSpec $specification, $values = []) {
     $DAOFields = $this->getDAOFields($entity);
 
     foreach ($DAOFields as $DAOField) {
       if ($DAOField['name'] == 'id' && $action == 'create') {
         continue;
       }
+      if (array_key_exists('contactType', $DAOField) && !empty($values['contact_type']) && $DAOField['contactType'] != $values['contact_type']) {
+        continue;
+      }
       if ($action !== 'create' || isset($DAOField['default'])) {
         $DAOField['required'] = FALSE;
       }
@@ -114,12 +119,18 @@ class SpecGatherer {
   /**
    * @param string $entity
    * @param \Civi\Api4\Service\Spec\RequestSpec $specification
+   * @param array $values
+   * @throws \API_Exception
    */
-  private function addCustomFields($entity, RequestSpec $specification) {
-    $extends = ($entity == 'Contact') ? ['Contact', 'Individual', 'Organization', 'Household'] : [$entity];
+  private function addCustomFields($entity, RequestSpec $specification, $values = []) {
+    $extends = [$entity];
+    if ($entity === 'Contact') {
+      $extends = !empty($values['contact_type']) ? [$values['contact_type'], 'Contact'] : ['Contact', 'Individual', 'Organization', 'Household'];
+    }
     $customFields = CustomField::get()
       ->setCheckPermissions(FALSE)
       ->addWhere('custom_group.extends', 'IN', $extends)
+      ->addWhere('custom_group.is_multiple', '=', '0')
       ->setSelect(['custom_group.name', 'custom_group_id', 'name', 'label', 'data_type', 'html_type', 'is_searchable', 'is_search_range', 'weight', 'is_active', 'is_view', 'option_group_id', 'default_value', 'date_format', 'time_format', 'start_date_years', 'end_date_years', 'help_pre', 'help_post'])
       ->execute();
 
diff --git a/civicrm/Civi/Api4/StateProvince.php b/civicrm/Civi/Api4/StateProvince.php
new file mode 100644
index 0000000000000000000000000000000000000000..b63c3ea3a2acfd47e13ad67891f60baac0385efd
--- /dev/null
+++ b/civicrm/Civi/Api4/StateProvince.php
@@ -0,0 +1,30 @@
+<?php
+
+/*
+ +--------------------------------------------------------------------+
+ | Copyright CiviCRM LLC. All rights reserved.                        |
+ |                                                                    |
+ | This work is published under the GNU AGPLv3 license with some      |
+ | permitted exceptions and without any warranty. For full license    |
+ | and copyright information, see https://civicrm.org/licensing       |
+ +--------------------------------------------------------------------+
+ */
+
+/**
+ *
+ * @package CRM
+ * @copyright CiviCRM LLC https://civicrm.org/licensing
+ * $Id$
+ *
+ */
+
+namespace Civi\Api4;
+
+/**
+ * StateProvince entity.
+ *
+ * @package Civi\Api4
+ */
+class StateProvince extends Generic\DAOEntity {
+
+}
diff --git a/civicrm/Civi/CCase/Analyzer.php b/civicrm/Civi/CCase/Analyzer.php
index 64c3303aeaf479726cb1e2464dcbe4c3e2aeb716..d167b6b6a2e582ed4ccf750ea39ac4397f78ece0 100644
--- a/civicrm/Civi/CCase/Analyzer.php
+++ b/civicrm/Civi/CCase/Analyzer.php
@@ -22,7 +22,9 @@ class Analyzer {
   private $caseId;
 
   /**
-   * @var array per APIv3
+   * The "Case" data, formatted per APIv3.
+   *
+   * @var array
    */
   private $case;
 
@@ -32,7 +34,9 @@ class Analyzer {
   private $caseType;
 
   /**
-   * @var array per APIv3
+   * List of activities, formatted per APIv3.
+   *
+   * @var array
    */
   private $activities;
 
@@ -42,7 +46,12 @@ class Analyzer {
   private $xml;
 
   /**
-   * @var array<string,array>
+   * A list of activity indices, which sort the various activities by some set of keys.
+   *
+   * Each index is identified by its key-set - e.g. "activity_type_id;source_contact_id" would be a
+   * two-dimensional index listing activities by their type ID and their source.
+   *
+   * @var array
    */
   private $indices;
 
diff --git a/civicrm/Civi/CCase/Events.php b/civicrm/Civi/CCase/Events.php
index 89ce8c6d309708d3f439bac8c6744a58bc9ba143..114875f17ed40aac57d47d0da8b27487ce79a92f 100644
--- a/civicrm/Civi/CCase/Events.php
+++ b/civicrm/Civi/CCase/Events.php
@@ -16,10 +16,14 @@ namespace Civi\CCase;
  * @package Civi\CCase
  */
 class Events {
+
   /**
-   * @var array (int $caseId => bool $active) list of cases for which we are actively firing case-change event
-   *
+   * List of cases for which we are actively firing case-change event
    * We do not want to fire case-change events recursively.
+   *
+   * array (int $caseId => bool $active)
+   *
+   * @var array
    */
   public static $isActive = [];
 
diff --git a/civicrm/Civi/Core/DAO/Event/PostDelete.php b/civicrm/Civi/Core/DAO/Event/PostDelete.php
index f631513947b69dccb0a17ce23b0656d01640f988..ade776ebc96b58f29f621e58291aad95dfac174a 100644
--- a/civicrm/Civi/Core/DAO/Event/PostDelete.php
+++ b/civicrm/Civi/Core/DAO/Event/PostDelete.php
@@ -18,12 +18,12 @@ namespace Civi\Core\DAO\Event;
 class PostDelete extends \Symfony\Component\EventDispatcher\Event {
 
   /**
-   * @var DAO Object
+   * @var \CRM_Core_DAO
    */
   public $object;
 
   /**
-   * @var DAO delete result
+   * @var mixed
    */
   public $result;
 
diff --git a/civicrm/Civi/Core/DAO/Event/PostUpdate.php b/civicrm/Civi/Core/DAO/Event/PostUpdate.php
index e436127083bd033f3e946a4e346d4dd1065a373d..8f07957e384adf26c91a7c4303ac746d2724a754 100644
--- a/civicrm/Civi/Core/DAO/Event/PostUpdate.php
+++ b/civicrm/Civi/Core/DAO/Event/PostUpdate.php
@@ -18,7 +18,7 @@ namespace Civi\Core\DAO\Event;
 class PostUpdate extends \Symfony\Component\EventDispatcher\Event {
 
   /**
-   * @var DAO Object
+   * @var \CRM_Core_DAO
    */
   public $object;
 
diff --git a/civicrm/Civi/Core/DAO/Event/PreDelete.php b/civicrm/Civi/Core/DAO/Event/PreDelete.php
index b1e3bb75b08cf1edba660d8372c1a835d3fe1fa4..ca2867320846c5db79d1b83b21e29d0da28da17a 100644
--- a/civicrm/Civi/Core/DAO/Event/PreDelete.php
+++ b/civicrm/Civi/Core/DAO/Event/PreDelete.php
@@ -18,7 +18,7 @@ namespace Civi\Core\DAO\Event;
 class PreDelete extends \Symfony\Component\EventDispatcher\Event {
 
   /**
-   * @var DAO Object
+   * @var \CRM_Core_DAO
    */
   public $object;
 
diff --git a/civicrm/Civi/Core/Event/PostEvent.php b/civicrm/Civi/Core/Event/PostEvent.php
index 3c028b4cc04e9af98fb86bdcd14eb07fad6489a7..11237527583f77d11f0487124d3130ebc2cafdbb 100644
--- a/civicrm/Civi/Core/Event/PostEvent.php
+++ b/civicrm/Civi/Core/Event/PostEvent.php
@@ -29,7 +29,9 @@ class PostEvent extends GenericHookEvent {
   }
 
   /**
-   * @var string 'create'|'edit'|'delete' etc
+   * One of: 'create'|'edit'|'delete'
+   *
+   * @var string
    */
   public $action;
 
diff --git a/civicrm/Civi/Core/Event/PreEvent.php b/civicrm/Civi/Core/Event/PreEvent.php
index 4dc5f1c7cf7a70fc4800b6aed9e790b1fde6fda2..3382e9dbe70cb148ea2abef7e30ac93bcdec8df1 100644
--- a/civicrm/Civi/Core/Event/PreEvent.php
+++ b/civicrm/Civi/Core/Event/PreEvent.php
@@ -29,7 +29,9 @@ class PreEvent extends GenericHookEvent {
   }
 
   /**
-   * @var string 'create'|'edit'|'delete' etc
+   * One of: 'create'|'edit'|'delete'
+   *
+   * @var string
    */
   public $action;
 
diff --git a/civicrm/Civi/Core/Event/UnhandledExceptionEvent.php b/civicrm/Civi/Core/Event/UnhandledExceptionEvent.php
index 32d83151c080088781b82ab470bad35e5e9a26eb..5e5993f74f07a48fd9cdcd668c517efb7eebc435 100644
--- a/civicrm/Civi/Core/Event/UnhandledExceptionEvent.php
+++ b/civicrm/Civi/Core/Event/UnhandledExceptionEvent.php
@@ -23,7 +23,9 @@ class UnhandledExceptionEvent extends GenericHookEvent {
   public $exception;
 
   /**
-   * @var mixed reserved for future use
+   * Reserved for future use.
+   *
+   * @var mixed
    */
   public $request;
 
diff --git a/civicrm/Civi/Core/Transaction/Frame.php b/civicrm/Civi/Core/Transaction/Frame.php
index acb0c3fb89c3ff7ac10dd8b7a7d154fcc49ad548..7dbe7e4a5054440626f3b70371efbe9cfef88f3a 100644
--- a/civicrm/Civi/Core/Transaction/Frame.php
+++ b/civicrm/Civi/Core/Transaction/Frame.php
@@ -29,17 +29,23 @@ class Frame {
   private $dao;
 
   /**
-   * @var string|null e.g. "BEGIN" or "SAVEPOINT foo"
+   * The statement used to start this transaction - e.g. "BEGIN" or "SAVEPOINT foo"
+   *
+   * @var string|null
    */
   private $beginStmt;
 
   /**
-   * @var string|null e.g. "COMMIT"
+   * The statement used to commit this transaction - e.g. "COMMIT"
+   *
+   * @var string|null
    */
   private $commitStmt;
 
   /**
-   * @var string|null e.g. "ROLLBACK" or "ROLLBACK TO SAVEPOINT foo"
+   * The statement used to rollback this transaction - e.g. "ROLLBACK" or "ROLLBACK TO SAVEPOINT foo"
+   *
+   * @var string|null
    */
   private $rollbackStmt;
 
diff --git a/civicrm/Civi/Core/Transaction/Manager.php b/civicrm/Civi/Core/Transaction/Manager.php
index eb830c88502ef2c9b0693d039e5d9e99f1e0d6c7..bfa8130d393d9408c055d493fb86af898391f1d7 100644
--- a/civicrm/Civi/Core/Transaction/Manager.php
+++ b/civicrm/Civi/Core/Transaction/Manager.php
@@ -26,7 +26,9 @@ class Manager {
   private $dao;
 
   /**
-   * @var array<Frame> stack of SQL transactions/savepoints
+   * Stack of SQL transactions/savepoints.
+   *
+   * @var \Civi\Core\Transaction\Frame[]
    */
   private $frames = [];
 
diff --git a/civicrm/Civi/Payment/PropertyBag.php b/civicrm/Civi/Payment/PropertyBag.php
index c27e0af4dc051498c51003b29893b93ace520139..c8db41457194200f3ed81adb5e1ef1c6004bc741 100644
--- a/civicrm/Civi/Payment/PropertyBag.php
+++ b/civicrm/Civi/Payment/PropertyBag.php
@@ -87,7 +87,9 @@ class PropertyBag implements \ArrayAccess {
   }
 
   /**
-   * @var string Just for unit testing.
+   * Just for unit testing.
+   *
+   * @var string
    */
   public $lastWarning;
 
diff --git a/civicrm/Civi/Payment/System.php b/civicrm/Civi/Payment/System.php
index d7b6f0e2c0524a10dc56b0db03a0ae9593165f50..fbbfc7d146bcb754a322ab428c3276a0b721d657 100644
--- a/civicrm/Civi/Payment/System.php
+++ b/civicrm/Civi/Payment/System.php
@@ -14,7 +14,7 @@ class System {
   private static $singleton;
 
   /**
-   * @var array cache
+   * @var array
    */
   private $cache = [];
 
diff --git a/civicrm/Civi/Test/CiviTestListener.php b/civicrm/Civi/Test/CiviTestListener.php
index 35a8a0c7281c6daec9f3313c0caa6df0d55d0c7d..e32d9b45d28888a925824bb608a5de85bd944799 100644
--- a/civicrm/Civi/Test/CiviTestListener.php
+++ b/civicrm/Civi/Test/CiviTestListener.php
@@ -35,7 +35,7 @@ else {
     private $cache = [];
 
     /**
-     * @var \CRM_Core_Transaction|NULL
+     * @var \CRM_Core_Transaction|null
      */
     private $tx;
 
diff --git a/civicrm/Civi/Test/Legacy/CiviTestListener.php b/civicrm/Civi/Test/Legacy/CiviTestListener.php
index 015f1af208e6ca78044b8c75f0b6bccceabb96e1..eb85e8906e0c147bc3344ea1a1eefe1e95f48ea8 100644
--- a/civicrm/Civi/Test/Legacy/CiviTestListener.php
+++ b/civicrm/Civi/Test/Legacy/CiviTestListener.php
@@ -28,7 +28,7 @@ class CiviTestListener extends \PHPUnit_Framework_BaseTestListener {
   private $cache = [];
 
   /**
-   * @var \CRM_Core_Transaction|NULL
+   * @var \CRM_Core_Transaction|null
    */
   private $tx;
 
diff --git a/civicrm/Civi/Test/Schema.php b/civicrm/Civi/Test/Schema.php
index b5a9aa525cab92cf6a11834b0f039357e613b545..40da4389a90a1f0ad42c80248903836730d71ece 100644
--- a/civicrm/Civi/Test/Schema.php
+++ b/civicrm/Civi/Test/Schema.php
@@ -27,7 +27,7 @@ class Schema {
     $tables = $pdo->query($query);
     $result = [];
     foreach ($tables as $table) {
-      $result[] = $table['table_name'];
+      $result[] = isset($table['TABLE_NAME']) ? $table['TABLE_NAME'] : $table['table_name'];
     }
     return $result;
   }
diff --git a/civicrm/ang/api4Explorer/Explorer.html b/civicrm/ang/api4Explorer/Explorer.html
index bbfd35b95962a2b773c34ea6f609b027b11b39bb..927513a5b956841a41e6296d2592861fec2857da 100644
--- a/civicrm/ang/api4Explorer/Explorer.html
+++ b/civicrm/ang/api4Explorer/Explorer.html
@@ -74,7 +74,7 @@
             <legend>values<span class="crm-marker" ng-if="availableParams.values.required"> *</span></legend>
             <div class="api4-input form-inline" ng-repeat="clause in params.values" ng-mouseenter="help('value: ' + clause[0], fieldHelp(clause[0]))" ng-mouseleave="help('values', availableParams.values)">
               <input class="collapsible-optgroups form-control" ng-model="clause[0]" crm-ui-select="{formatResult: formatSelect2Item, formatSelection: formatSelect2Item, data: valuesFields, allowClear: true, placeholder: 'Field'}" />
-              <input class="form-control" ng-model="clause[1]" api4-exp-value="{field: clause[0]}" />
+              <input class="form-control" ng-model="clause[1]" api4-exp-value="{field: clause[0], action: action === 'getFields' ? params.action || 'get' : action}" />
             </div>
             <div class="api4-input form-inline">
               <input class="collapsible-optgroups form-control" ng-model="controls.values" crm-ui-select="{formatResult: formatSelect2Item, formatSelection: formatSelect2Item, data: valuesFields}" placeholder="Add value" />
diff --git a/civicrm/ang/api4Explorer/Explorer.js b/civicrm/ang/api4Explorer/Explorer.js
index 15245f4a2cb4105eb507e44f0db668feb60752c0..982f618d3f361942d3465f2b9ed4c2fe0ac8699e 100644
--- a/civicrm/ang/api4Explorer/Explorer.js
+++ b/civicrm/ang/api4Explorer/Explorer.js
@@ -105,9 +105,9 @@
       return container;
     }
 
-    function getFieldList(source) {
+    function getFieldList(action) {
       var fields = [],
-        fieldInfo = _.findWhere(getEntity().actions, {name: $scope.action}).fields;
+        fieldInfo = _.findWhere(getEntity().actions, {name: action}).fields;
       formatForSelect2(fieldInfo, fields, 'name', ['description', 'required', 'default_value']);
       return fields;
     }
@@ -159,7 +159,7 @@
     };
 
     $scope.valuesFields = function() {
-      var fields = _.cloneDeep($scope.fields);
+      var fields = _.cloneDeep($scope.action === 'getFields' ? getFieldList($scope.params.action || 'get') : $scope.fields);
       // Disable fields that are already in use
       _.each($scope.params.values || [], function(val) {
         (_.findWhere(fields, {id: val[0]}) || {}).disabled = true;
@@ -265,7 +265,7 @@
       }
       if ($scope.action) {
         var actionInfo = _.findWhere(actions, {id: $scope.action});
-        $scope.fields = getFieldList();
+        $scope.fields = getFieldList($scope.action);
         if (_.contains(['get', 'update', 'delete', 'replace'], $scope.action)) {
           $scope.fieldsAndJoins = addJoins($scope.fields);
         } else {
@@ -400,7 +400,7 @@
           code.php += ', ' + phpFormat(index);
         }
         code.php += ");";
-        
+
         // Write oop code
         if (entity.substr(0, 7) !== 'Custom_') {
           code.oop = '$' + results + " = \\Civi\\Api4\\" + entity + '::' + action + '()';
@@ -445,7 +445,7 @@
         code.cli = 'cv api4 ' + entity + '.' + action + " '" + stringify(params) + "'";
       }
       _.each(code, function(val, type) {
-        $scope.code[type] = prettyPrintOne(val);
+        $scope.code[type] = prettyPrintOne(_.escape(val));
       });
     }
 
@@ -466,7 +466,7 @@
           ret += (ret.length ? ', ' : '') + key + ': ' + (_.isArray(val) ? '[' + val + ']' : val);
         }
       });
-      return prettyPrintOne(ret);
+      return prettyPrintOne(_.escape(ret));
     }
 
     $scope.execute = function() {
@@ -482,11 +482,11 @@
       }).then(function(resp) {
           $scope.loading = false;
           $scope.status = 'success';
-          $scope.result = [formatMeta(resp.data), prettyPrintOne(JSON.stringify(resp.data.values, null, 2), 'js', 1)];
+          $scope.result = [formatMeta(resp.data), prettyPrintOne(_.escape(JSON.stringify(resp.data.values, null, 2)), 'js', 1)];
         }, function(resp) {
           $scope.loading = false;
           $scope.status = 'danger';
-          $scope.result = [formatMeta(resp), prettyPrintOne(JSON.stringify(resp.data, null, 2))];
+          $scope.result = [formatMeta(resp), prettyPrintOne(_.escape(JSON.stringify(resp.data, null, 2)))];
         });
     };
 
@@ -658,7 +658,7 @@
         var ts = scope.ts = CRM.ts(),
           multi = _.includes(['IN', 'NOT IN', 'BETWEEN', 'NOT BETWEEN'], scope.data.op),
           entity = $routeParams.api4entity,
-          action = $routeParams.api4action;
+          action = scope.data.action || $routeParams.api4action;
 
         function destroyWidget() {
           var $el = $(element);
diff --git a/civicrm/ang/crmCaseType/activityTypesTable.html b/civicrm/ang/crmCaseType/activityTypesTable.html
index a324f895f716ae1990f66a7df8d7bc6f23b6c228..0b39092e0c6ff015705cb957ed670bb5411708cc 100644
--- a/civicrm/ang/crmCaseType/activityTypesTable.html
+++ b/civicrm/ang/crmCaseType/activityTypesTable.html
@@ -19,7 +19,7 @@ Required vars: caseType
     </td>
     <td>
       <i class="crm-i {{ activityTypes[activityType.name].icon }}"></i>
-      {{ activityType.name }}
+      {{ activityTypes[activityType.name].label }}
     </td>
     <td>
       <input class="crm-form-text number" type="text" ng-pattern="/^[1-9][0-9]*$/" ng-model="activityType.max_instances">
diff --git a/civicrm/api/v3/System.php b/civicrm/api/v3/System.php
index 6b593546a661c895fbb2df9d463d4f5719dd7880..c91583fc0f7e0ce709f2aa8165dffac91d365efb 100644
--- a/civicrm/api/v3/System.php
+++ b/civicrm/api/v3/System.php
@@ -417,6 +417,16 @@ function civicrm_api3_system_updateindexes() {
   return civicrm_api3_create_success(1);
 }
 
+/**
+ * Get an array of indices that should be defined but are not.
+ *
+ * @return array
+ */
+function civicrm_api3_system_getmissingindices() {
+  $indices = CRM_Core_BAO_SchemaHandler::getMissingIndices(FALSE);
+  return civicrm_api3_create_success($indices);
+}
+
 /**
  * Creates missing log tables.
  *
diff --git a/civicrm/api/v3/utils.php b/civicrm/api/v3/utils.php
index 9e6350d202a55068ef3a5a5543164f41d714c4bb..dd90088fe6c8f1f90245d77a23f14412c99f3bd7 100644
--- a/civicrm/api/v3/utils.php
+++ b/civicrm/api/v3/utils.php
@@ -33,6 +33,8 @@ function _civicrm_api3_initialize() {
  *   String DAO to check for required fields (create functions only).
  * @param array $keyoptions
  *   List of required fields options. One of the options is required.
+ *
+ * @throws \API_Exception
  */
 function civicrm_api3_verify_one_mandatory($params, $daoName = NULL, $keyoptions = []) {
   $keys = [[]];
@@ -93,7 +95,7 @@ function civicrm_api3_verify_mandatory($params, $daoName = NULL, $keys = [], $ve
     }
   }
   if (!empty($unmatched)) {
-    throw new API_Exception("Mandatory key(s) missing from params array: " . implode(", ", $unmatched), "mandatory_missing", ["fields" => $unmatched]);
+    throw new API_Exception('Mandatory key(s) missing from params array: ' . implode(", ", $unmatched), 'mandatory_missing', ["fields" => $unmatched]);
   }
 }
 
@@ -112,7 +114,7 @@ function civicrm_api3_create_error($msg, $data = []) {
   // we will show sql to privileged user only (not sure of a specific
   // security hole here but seems sensible - perhaps should apply to the trace as well?)
   if (isset($data['sql'])) {
-    if (CRM_Core_Permission::check('Administer CiviCRM') || CIVICRM_UF == 'UnitTests') {
+    if (CRM_Core_Permission::check('Administer CiviCRM') || CIVICRM_UF === 'UnitTests') {
       // Isn't this redundant?
       $data['debug_information'] = $data['sql'];
     }
@@ -140,6 +142,7 @@ function civicrm_api3_create_error($msg, $data = []) {
  *   - this param is currently used for legacy behaviour support
  *
  * @return array
+ * @throws \CiviCRM_API3_Exception
  */
 function civicrm_api3_create_success($values = 1, $params = [], $entity = NULL, $action = NULL, &$dao = NULL, $extraReturnValues = []) {
   $result = [];
@@ -148,10 +151,10 @@ function civicrm_api3_create_success($values = 1, $params = [], $entity = NULL,
   $entity = _civicrm_api_get_camel_name($entity);
   $result['is_error'] = 0;
   //lets set the ['id'] field if it's not set & we know what the entity is
-  if (is_array($values) && $entity && $action != 'getfields') {
+  if (is_array($values) && $entity && $action !== 'getfields') {
     foreach ($values as $key => $item) {
-      if (empty($item['id']) && !empty($item[$lowercase_entity . "_id"])) {
-        $values[$key]['id'] = $item[$lowercase_entity . "_id"];
+      if (empty($item['id']) && !empty($item[$lowercase_entity . '_id'])) {
+        $values[$key]['id'] = $item[$lowercase_entity . '_id'];
       }
       if (!empty($item['financial_type_id'])) {
         // 4.3 legacy handling.
@@ -169,10 +172,10 @@ function civicrm_api3_create_success($values = 1, $params = [], $entity = NULL,
   }
 
   if (is_array($params) && !empty($params['debug'])) {
-    if (is_string($action) && $action != 'getfields') {
+    if (is_string($action) && $action !== 'getfields') {
       $apiFields = civicrm_api($entity, 'getfields', ['version' => 3, 'action' => $action] + $params);
     }
-    elseif ($action != 'getfields') {
+    elseif ($action !== 'getfields') {
       $apiFields = civicrm_api($entity, 'getfields', ['version' => 3] + $params);
     }
     else {
@@ -180,7 +183,7 @@ function civicrm_api3_create_success($values = 1, $params = [], $entity = NULL,
     }
 
     $allFields = [];
-    if ($action != 'getfields' && is_array($apiFields) && is_array(CRM_Utils_Array::value('values', $apiFields))) {
+    if ($action !== 'getfields' && is_array($apiFields) && is_array(CRM_Utils_Array::value('values', $apiFields))) {
       $allFields = array_keys($apiFields['values']);
     }
     $paramFields = array_keys($params);
@@ -212,7 +215,7 @@ function civicrm_api3_create_success($values = 1, $params = [], $entity = NULL,
     $result['count'] = (int) count($values);
 
     // Convert value-separated strings to array
-    if ($action != 'getfields') {
+    if ($action !== 'getfields') {
       _civicrm_api3_separate_values($values);
     }
 
@@ -247,16 +250,16 @@ function civicrm_api3_create_success($values = 1, $params = [], $entity = NULL,
   // Report deprecations.
   $deprecated = _civicrm_api3_deprecation_check($entity, $result);
   // Always report "setvalue" action as deprecated.
-  if (!is_string($deprecated) && ($action == 'getactions' || $action == 'setvalue')) {
+  if (!is_string($deprecated) && ($action === 'getactions' || $action === 'setvalue')) {
     $deprecated = ((array) $deprecated) + ['setvalue' => 'The "setvalue" action is deprecated. Use "create" with an id instead.'];
   }
   // Always report "update" action as deprecated.
-  if (!is_string($deprecated) && ($action == 'getactions' || $action == 'update')) {
+  if (!is_string($deprecated) && ($action === 'getactions' || $action === 'update')) {
     $deprecated = ((array) $deprecated) + ['update' => 'The "update" action is deprecated. Use "create" with an id instead.'];
   }
   if ($deprecated) {
     // Metadata-level deprecations or wholesale entity deprecations.
-    if ($entity == 'Entity' || $action == 'getactions' || is_string($deprecated)) {
+    if ($entity === 'Entity' || $action === 'getactions' || is_string($deprecated)) {
       $result['deprecated'] = $deprecated;
     }
     // Action-specific deprecations
@@ -302,33 +305,33 @@ function _civicrm_api3_get_DAO($name) {
 
   $name = _civicrm_api_get_camel_name($name);
 
-  if ($name == 'Individual' || $name == 'Household' || $name == 'Organization') {
+  if ($name === 'Individual' || $name === 'Household' || $name === 'Organization') {
     $name = 'Contact';
   }
 
   // hack to deal with incorrectly named BAO/DAO - see CRM-10859
 
   // FIXME: DAO should be renamed CRM_Mailing_DAO_MailingEventQueue
-  if ($name == 'MailingEventQueue') {
+  if ($name === 'MailingEventQueue') {
     return 'CRM_Mailing_Event_DAO_Queue';
   }
   // FIXME: DAO should be renamed CRM_Mailing_DAO_MailingRecipients
   // but am not confident mailing_recipients is tested so have not tackled.
-  if ($name == 'MailingRecipients') {
+  if ($name === 'MailingRecipients') {
     return 'CRM_Mailing_DAO_Recipients';
   }
   // FIXME: DAO should be renamed CRM_ACL_DAO_AclRole
-  if ($name == 'AclRole') {
+  if ($name === 'AclRole') {
     return 'CRM_ACL_DAO_EntityRole';
   }
   // FIXME: DAO should be renamed CRM_SMS_DAO_SmsProvider
   // But this would impact SMS extensions so need to coordinate
   // Probably best approach is to migrate them to use the api and decouple them from core BAOs
-  if ($name == 'SmsProvider') {
+  if ($name === 'SmsProvider') {
     return 'CRM_SMS_DAO_Provider';
   }
   // FIXME: DAO names should follow CamelCase convention
-  if ($name == 'Im' || $name == 'Acl' || $name == 'Pcp') {
+  if ($name === 'Im' || $name === 'Acl' || $name === 'Pcp') {
     $name = strtoupper($name);
   }
   $dao = CRM_Core_DAO_AllCoreTables::getFullName($name);
@@ -341,7 +344,7 @@ function _civicrm_api3_get_DAO($name) {
     include_once "api/v3/$name.php";
   }
 
-  $daoFn = "_civicrm_api3_" . _civicrm_api_get_entity_name_from_camel($name) . "_DAO";
+  $daoFn = '_civicrm_api3_' . _civicrm_api_get_entity_name_from_camel($name) . '_DAO';
   if (function_exists($daoFn)) {
     return $daoFn();
   }
@@ -361,7 +364,7 @@ function _civicrm_api3_get_DAO($name) {
  */
 function _civicrm_api3_get_BAO($name) {
   // FIXME: DAO should be renamed CRM_Badge_DAO_BadgeLayout
-  if ($name == 'PrintLabel') {
+  if ($name === 'PrintLabel') {
     return 'CRM_Badge_BAO_Layout';
   }
   if ($name === 'Order') {
@@ -400,7 +403,7 @@ function _civicrm_api3_separate_values(&$values) {
     }
     elseif (is_string($value)) {
       // This is to honor the way case API was originally written.
-      if ($key == 'case_type_id') {
+      if ($key === 'case_type_id') {
         $value = trim(str_replace($sp, ',', $value), ',');
       }
       elseif (strpos($value, $sp) !== FALSE) {
@@ -826,8 +829,8 @@ function _civicrm_api3_get_options_from_params($params, $queryObject = FALSE, $e
       $sort = array_map('trim', explode(',', $sort));
     }
     foreach ($sort as $s) {
-      if ($s == '(1)' || CRM_Utils_Rule::mysqlOrderBy($s)) {
-        if ($entity && $action == 'get') {
+      if ($s === '(1)' || CRM_Utils_Rule::mysqlOrderBy($s)) {
+        if ($entity && $action === 'get') {
           switch (trim(strtolower($s))) {
             case 'id':
             case 'id desc':
@@ -860,10 +863,10 @@ function _civicrm_api3_get_options_from_params($params, $queryObject = FALSE, $e
     'version', 'prettyprint', 'check_permissions', 'sequential',
   ];
   foreach ($params as $n => $v) {
-    if (substr($n, 0, 7) == 'return.') {
+    if (substr($n, 0, 7) === 'return.') {
       $legacyreturnProperties[substr($n, 7)] = $v;
     }
-    elseif ($n == 'id') {
+    elseif ($n === 'id') {
       $inputParams[$lowercase_entity . '_id'] = $v;
     }
     elseif (in_array($n, $otherVars)) {
@@ -888,6 +891,9 @@ function _civicrm_api3_get_options_from_params($params, $queryObject = FALSE, $e
  * @param object $dao
  *   DAO object.
  * @param $entity
+ *
+ * @throws \API_Exception
+ * @throws \CRM_Core_Exception
  */
 function _civicrm_api3_apply_options_to_dao(&$params, &$dao, $entity) {
 
@@ -954,8 +960,6 @@ function _civicrm_api3_get_unique_name_array(&$bao) {
 /**
  * Converts an DAO object to an array.
  *
- * @deprecated - DAO based retrieval is being phased out.
- *
  * @param CRM_Core_DAO $dao
  *   Object to convert.
  * @param array $params
@@ -964,6 +968,11 @@ function _civicrm_api3_get_unique_name_array(&$bao) {
  * @param bool $autoFind
  *
  * @return array
+ *
+ * @throws \API_Exception
+ *
+ * @deprecated - DAO based retrieval is being phased out.
+ *
  */
 function _civicrm_api3_dao_to_array($dao, $params = NULL, $uniqueFields = TRUE, $entity = "", $autoFind = TRUE) {
   $result = [];
@@ -1007,13 +1016,15 @@ function _civicrm_api3_dao_to_array($dao, $params = NULL, $uniqueFields = TRUE,
  *
  * We currently retrieve all custom fields or none at this level so if we know the entity
  * && it can take custom fields & there is the string 'custom' in their return request we get them all, they are filtered on the way out
- * @todo filter so only required fields are queried
  *
  * @param string $entity
  *   Entity name in CamelCase.
  * @param array $params
  *
  * @return bool
+ * @throws \API_Exception
+ *
+ * @todo filter so only required fields are queried
  */
 function _civicrm_api3_custom_fields_are_required($entity, $params) {
   if (!array_key_exists($entity, CRM_Core_BAO_CustomQuery::$extendsMap)) {
@@ -1363,13 +1374,15 @@ function _civicrm_api3_basic_create_fallback($bao_name, &$params) {
  *
  * @return array
  *   API result array
+ *
  * @throws API_Exception
  * @throws \Civi\API\Exception\UnauthorizedException
+ * @throws \CiviCRM_API3_Exception
  */
 function _civicrm_api3_basic_delete($bao_name, &$params) {
   civicrm_api3_verify_mandatory($params, NULL, ['id']);
   _civicrm_api3_check_edit_permissions($bao_name, ['id' => $params['id']]);
-  $args = array(&$params['id']);
+  $args = [&$params['id']];
   if (method_exists($bao_name, 'del')) {
     $dao = new $bao_name();
     $dao->id = $params['id'];
@@ -1418,6 +1431,8 @@ function _civicrm_api3_basic_delete($bao_name, &$params) {
  *   E.g. membership_type_id where custom data doesn't apply to all membership types.
  * @param string $subName
  *   Subtype of entity.
+ *
+ * @throws \CRM_Core_Exception
  */
 function _civicrm_api3_custom_data_get(&$returnArray, $checkPermission, $entity, $entity_id, $groupID = NULL, $subType = NULL, $subName = NULL) {
   $groupTree = CRM_Core_BAO_CustomGroup::getTree($entity,
@@ -1448,7 +1463,7 @@ function _civicrm_api3_custom_data_get(&$returnArray, $checkPermission, $entity,
       $returnArray[$key] = $val;
 
       // Shim to restore legacy behavior of ContactReference custom fields
-      if (!empty($fieldInfo[$id]) && $fieldInfo[$id]['data_type'] == 'ContactReference') {
+      if (!empty($fieldInfo[$id]) && $fieldInfo[$id]['data_type'] === 'ContactReference') {
         $returnArray['custom_' . $id . '_id'] = $returnArray[$key . '_id'] = $val;
         $returnArray['custom_' . $id] = $returnArray[$key] = CRM_Core_DAO::getFieldValue('CRM_Contact_DAO_Contact', $val, 'sort_name');
       }
@@ -1458,11 +1473,13 @@ function _civicrm_api3_custom_data_get(&$returnArray, $checkPermission, $entity,
 
 /**
  * Used by the Validate API.
+ *
  * @param string $entity
  * @param string $action
  * @param array $params
  *
  * @return array $errors
+ * @throws \CiviCRM_API3_Exception
  */
 function _civicrm_api3_validate($entity, $action, $params) {
   $errors = [];
@@ -1473,8 +1490,8 @@ function _civicrm_api3_validate($entity, $action, $params) {
   foreach ($fields as $values) {
     if (!empty($values['api.required']) && empty($params[$values['name']])) {
       $errors[$values['name']] = [
-        'message' => "Mandatory key(s) missing from params array: " . $values['name'],
-        'code' => "mandatory_missing",
+        'message' => 'Mandatory key(s) missing from params array: ' . $values['name'],
+        'code' => 'mandatory_missing',
       ];
     }
   }
@@ -1539,7 +1556,7 @@ function _civicrm_api3_validate_switch_cases($fieldName, $fieldInfo, $entity, $p
 
       foreach ((array) $fieldValue as $fieldvalue) {
         if (!CRM_Utils_Rule::money($fieldvalue) && !empty($fieldvalue)) {
-          throw new Exception($fieldName . " is  not a valid amount: " . $params[$fieldName]);
+          throw new Exception($fieldName . ' is  not a valid amount: ' . $params[$fieldName]);
         }
       }
       break;
@@ -1639,7 +1656,7 @@ function _civicrm_api3_validate_foreign_keys($entity, $action, &$params, $fields
     if (!empty($fieldInfo['FKClassName'])) {
       if (!empty($params[$fieldName])) {
         foreach ((array) $params[$fieldName] as $fieldValue) {
-          _civicrm_api3_validate_constraint($fieldValue, $fieldName, $fieldInfo);
+          _civicrm_api3_validate_constraint($fieldValue, $fieldName, $fieldInfo, $entity);
         }
       }
       elseif (!empty($fieldInfo['required'])) {
@@ -1731,16 +1748,21 @@ function _civicrm_api3_getValidDate($dateValue, $fieldName, $fieldType) {
  *
  * @param mixed $fieldValue
  * @param string $fieldName
- *   Uniquename of field being checked.
+ *   Unique name of field being checked.
  * @param array $fieldInfo
  *   Array of fields from getfields function.
+ * @param string $entity
  *
  * @throws \API_Exception
  */
-function _civicrm_api3_validate_constraint(&$fieldValue, &$fieldName, &$fieldInfo) {
+function _civicrm_api3_validate_constraint($fieldValue, $fieldName, $fieldInfo, $entity) {
   $daoName = $fieldInfo['FKClassName'];
+  $fieldInfo = [$fieldName => $fieldInfo];
+  $params = [$fieldName => $fieldValue];
+  _civicrm_api3_validate_fields($entity, NULL, $params, $fieldInfo);
+  /* @var CRM_Core_DAO $dao*/
   $dao = new $daoName();
-  $dao->id = $fieldValue;
+  $dao->id = $params[$fieldName];
   $dao->selectAdd();
   $dao->selectAdd('id');
   if (!$dao->find()) {
@@ -2546,10 +2568,13 @@ function _civicrm_api3_check_edit_permissions($bao_name, $params) {
 
 /**
  * Check if an entity has been modified since the last known modified_date
+ *
  * @param string $modifiedDate Last knowm modified_date
  * @param int $id Id of record to check
  * @param string $entity API Entity
+ *
  * @return bool
+ * @throws \CiviCRM_API3_Exception
  */
 function _civicrm_api3_compare_timestamps($modifiedDate, $id, $entity) {
   $currentDbInfo = civicrm_api3($entity, 'getsingle', ['id' => $id]);
diff --git a/civicrm/bin/ContributionProcessor.php b/civicrm/bin/ContributionProcessor.php
index 3434316ac58dbf115d03fab9c88f5e143d326583..cf3323b5c10dcc63ba4db8ba7c8152996510a5b1 100644
--- a/civicrm/bin/ContributionProcessor.php
+++ b/civicrm/bin/ContributionProcessor.php
@@ -204,7 +204,7 @@ class CiviContributeProcessor {
 
     $handle = fopen($csvFile, "r");
     if (!$handle) {
-      CRM_Core_Error::fatal("Can't locate csv file.");
+      throw new CRM_Core_Exception("Can't locate csv file.");
     }
 
     require_once "CRM/Contribute/BAO/Contribution/Utils.php";
@@ -231,7 +231,7 @@ class CiviContributeProcessor {
         CRM_Core_Error::debug_log_message("Considering first row ( line $row ) as HEADER ..<p>", TRUE);
 
         if (empty($header)) {
-          CRM_Core_Error::fatal("Header is empty.");
+          throw new CRM_Core_Exception("Header is empty.");
         }
       }
       $row++;
@@ -254,7 +254,7 @@ class CiviContributeProcessor {
           CRM_Core_DAO::$_nullObject, FALSE, 0, 'REQUEST'
         );
         if ($start < $end) {
-          CRM_Core_Error::fatal("Start offset can't be less than End offset.");
+          throw new CRM_Core_Exception("Start offset can't be less than End offset.");
         }
 
         $start = date('Y-m-d', time() - $start * 24 * 60 * 60) . 'T00:00:00.00Z';
diff --git a/civicrm/civicrm-version.php b/civicrm/civicrm-version.php
index 7f9d65742b66817ba0b04f75aadc5fca3024527f..ef57c43a0835cfade90204e3a15ff8f7615a343d 100644
--- a/civicrm/civicrm-version.php
+++ b/civicrm/civicrm-version.php
@@ -1,7 +1,7 @@
 <?php
 /** @deprecated */
 function civicrmVersion( ) {
-  return array( 'version'  => '5.21.2',
+  return array( 'version'  => '5.22.0',
                 'cms'      => 'Wordpress',
                 'revision' => '' );
 }
diff --git a/civicrm/composer.lock b/civicrm/composer.lock
index dddf62bd339f70a53aae3a9fe4d6f820b896a513..9dfa4335a4438d48fea8dd67b8abc9a490af93d4 100644
--- a/civicrm/composer.lock
+++ b/civicrm/composer.lock
@@ -2682,126 +2682,6 @@
                 "psr-6"
             ],
             "time": "2016-08-06T20:24:11+00:00"
-        },
-        {
-            "name": "zendframework/zend-stdlib",
-            "version": "2.4.13",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/zendframework/zend-stdlib.git",
-                "reference": "d8ecb629a72da9f91bd95c5af006384823560b42"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/zendframework/zend-stdlib/zipball/d8ecb629a72da9f91bd95c5af006384823560b42",
-                "reference": "d8ecb629a72da9f91bd95c5af006384823560b42",
-                "shasum": ""
-            },
-            "require": {
-                "php": ">=5.3.23"
-            },
-            "require-dev": {
-                "fabpot/php-cs-fixer": "1.7.*",
-                "phpunit/phpunit": "~4.0",
-                "satooshi/php-coveralls": "dev-master",
-                "zendframework/zend-eventmanager": "self.version",
-                "zendframework/zend-filter": "self.version",
-                "zendframework/zend-serializer": "self.version",
-                "zendframework/zend-servicemanager": "self.version"
-            },
-            "suggest": {
-                "zendframework/zend-eventmanager": "To support aggregate hydrator usage",
-                "zendframework/zend-filter": "To support naming strategy hydrator usage",
-                "zendframework/zend-serializer": "Zend\\Serializer component",
-                "zendframework/zend-servicemanager": "To support hydrator plugin manager usage"
-            },
-            "type": "library",
-            "extra": {
-                "branch-alias": {
-                    "dev-master": "2.4-dev",
-                    "dev-develop": "2.5-dev"
-                }
-            },
-            "autoload": {
-                "psr-4": {
-                    "Zend\\Stdlib\\": "src/"
-                }
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "BSD-3-Clause"
-            ],
-            "homepage": "https://github.com/zendframework/zend-stdlib",
-            "keywords": [
-                "stdlib",
-                "zf2"
-            ],
-            "time": "2015-07-21T13:55:46+00:00"
-        },
-        {
-            "name": "zendframework/zend-validator",
-            "version": "2.4.13",
-            "source": {
-                "type": "git",
-                "url": "https://github.com/zendframework/zend-validator.git",
-                "reference": "81415511fe729e6de19a61936313cef43c80d337"
-            },
-            "dist": {
-                "type": "zip",
-                "url": "https://api.github.com/repos/zendframework/zend-validator/zipball/81415511fe729e6de19a61936313cef43c80d337",
-                "reference": "81415511fe729e6de19a61936313cef43c80d337",
-                "shasum": ""
-            },
-            "require": {
-                "php": ">=5.3.23",
-                "zendframework/zend-stdlib": "~2.4.0"
-            },
-            "require-dev": {
-                "fabpot/php-cs-fixer": "1.7.*",
-                "phpunit/phpunit": "~4.0",
-                "satooshi/php-coveralls": "dev-master",
-                "zendframework/zend-config": "~2.4.0",
-                "zendframework/zend-db": "~2.4.0",
-                "zendframework/zend-filter": "~2.4.0",
-                "zendframework/zend-i18n": "~2.4.0",
-                "zendframework/zend-math": "~2.4.0",
-                "zendframework/zend-servicemanager": "~2.4.0",
-                "zendframework/zend-session": "~2.4.0",
-                "zendframework/zend-uri": "~2.4.0"
-            },
-            "suggest": {
-                "zendframework/zend-db": "Zend\\Db component",
-                "zendframework/zend-filter": "Zend\\Filter component, required by the Digits validator",
-                "zendframework/zend-i18n": "Zend\\I18n component to allow translation of validation error messages as well as to use the various Date validators",
-                "zendframework/zend-math": "Zend\\Math component",
-                "zendframework/zend-resources": "Translations of validator messages",
-                "zendframework/zend-servicemanager": "Zend\\ServiceManager component to allow using the ValidatorPluginManager and validator chains",
-                "zendframework/zend-session": "Zend\\Session component",
-                "zendframework/zend-uri": "Zend\\Uri component, required by the Uri and Sitemap\\Loc validators"
-            },
-            "type": "library",
-            "extra": {
-                "branch-alias": {
-                    "dev-master": "2.4-dev",
-                    "dev-develop": "2.5-dev"
-                }
-            },
-            "autoload": {
-                "psr-4": {
-                    "Zend\\Validator\\": "src/"
-                }
-            },
-            "notification-url": "https://packagist.org/downloads/",
-            "license": [
-                "BSD-3-Clause"
-            ],
-            "description": "provides a set of commonly needed validators",
-            "homepage": "https://github.com/zendframework/zend-validator",
-            "keywords": [
-                "validator",
-                "zf2"
-            ],
-            "time": "2015-09-08T21:04:17+00:00"
         }
     ],
     "aliases": [],
diff --git a/civicrm/ext/iatspayments/CRM/Core/Payment/iATSService.php b/civicrm/ext/iatspayments/CRM/Core/Payment/iATSService.php
index 28263f72bb79c26668cd2b5261ab1d285b1e4fa3..432467df74e7f61bae28eee229abd499b635fffb 100644
--- a/civicrm/ext/iatspayments/CRM/Core/Payment/iATSService.php
+++ b/civicrm/ext/iatspayments/CRM/Core/Payment/iATSService.php
@@ -388,6 +388,10 @@ class CRM_Core_Payment_iATSService extends CRM_Core_Payment {
         $request[$r] = htmlspecialchars($params[$p]);
       }
     }
+    // The "&" character is badly handled by the processor,
+    // so we sanitize it to "and"
+    $request['firstName'] = str_replace('&', ts('and'), $request['firstName']);
+    $request['lastName'] = str_replace('&', ts('and'), $request['lastName']);
     $request['creditCardExpiry'] = sprintf('%02d/%02d', $params['month'], ($params['year'] % 100));
     $request['total'] = sprintf('%01.2f', CRM_Utils_Rule::cleanMoney($params['amount']));
     // Place for ugly hacks.
diff --git a/civicrm/ext/iatspayments/CRM/Core/Payment/iATSServiceACHEFT.php b/civicrm/ext/iatspayments/CRM/Core/Payment/iATSServiceACHEFT.php
index 657ca95a296ddbb600c1a483627cd87d02964cdb..09ae7b50a0560ab2e514067d06e7b236b8904b9c 100644
--- a/civicrm/ext/iatspayments/CRM/Core/Payment/iATSServiceACHEFT.php
+++ b/civicrm/ext/iatspayments/CRM/Core/Payment/iATSServiceACHEFT.php
@@ -462,6 +462,10 @@ class CRM_Core_Payment_iATSServiceACHEFT extends CRM_Core_Payment_iATSService {
         $request[$r] = $params[$p];
       }
     }
+    // The "&" character is badly handled by the processor,
+    // so we sanitize it to "and"
+    $request['firstName'] = str_replace('&', ts('and'), $request['firstName']);
+    $request['lastName'] = str_replace('&', ts('and'), $request['lastName']);
     $request['total'] = sprintf('%01.2f', CRM_Utils_Rule::cleanMoney($params['amount']));
     // Place for ugly hacks.
     switch ($method) {
diff --git a/civicrm/ext/iatspayments/CRM/Iats/Form/Settings.php b/civicrm/ext/iatspayments/CRM/Iats/Form/Settings.php
index f36087fdee5c9024dc1d434103ad1040556fa1be..f46a9bd23189dadcf5577e78db0f185fdc733386 100644
--- a/civicrm/ext/iatspayments/CRM/Iats/Form/Settings.php
+++ b/civicrm/ext/iatspayments/CRM/Iats/Form/Settings.php
@@ -109,7 +109,7 @@ class CRM_Iats_Form_Settings extends CRM_Core_Form {
       ),
     ));
 
-    $result = CRM_Core_BAO_Setting::getItem('iATS Payments Extension', 'iats_settings');
+    $result = Civi::settings()->get('iats_settings');
     $defaults = (empty($result)) ? array() : $result;
     if (empty($defaults['recurring_failure_threshhold'])) {
       $defaults['recurring_failure_threshhold'] = 3;
@@ -139,7 +139,7 @@ class CRM_Iats_Form_Settings extends CRM_Core_Form {
         unset($values[$key]);
       }
     }
-    CRM_Core_BAO_Setting::setItem($values, 'iATS Payments Extension', 'iats_settings');
+    Civi::settings()->set('iats_settings', $values);
     parent::postProcess();
   }
 
diff --git a/civicrm/ext/iatspayments/CRM/Iats/Page/iATSAdmin.php b/civicrm/ext/iatspayments/CRM/Iats/Page/iATSAdmin.php
index 787573e9db8e503a2db8b63f8641f7edc3b9db45..860e0e8a930a9887479f4615ad3b4bf3b151bff6 100644
--- a/civicrm/ext/iatspayments/CRM/Iats/Page/iATSAdmin.php
+++ b/civicrm/ext/iatspayments/CRM/Iats/Page/iATSAdmin.php
@@ -22,17 +22,16 @@ class CRM_Iats_Page_iATSAdmin extends CRM_Core_Page {
     $this->assign('currentTime', date('Y-m-d H:i:s'));
     $this->assign('jobLastRunWarning', '0');
     // Check if I've got any recurring contributions setup. In theory I should only worry about iATS, but it's a problem regardless ..
-    $params = array('version' => 3, 'sequential' => 1);
-    $result = civicrm_api('ContributionRecur', 'getcount', $params);
+    $result = civicrm_api3('ContributionRecur', 'getcount');
     if (!empty($result)) {
       $this->assign('jobLastRunWarning', '1');
-      $params['api_action'] = 'Iatsrecurringcontributions';
-      $job = civicrm_api('Job', 'getSingle', $params);
-      $last_run = isset($job['last_run']) ? strtotime($job['last_run']) : '';
-      $this->assign('jobLastRun', $job['last_run']);
+      $params = ['api_action' => 'Iatsrecurringcontributions', 'is_active' => 1, 'sequential' => 1, 'options' => ['sort' => 'last_run']];
+      $jobs = civicrm_api3('Job', 'get', $params);
+      $job_last_run = count($jobs['values']) > 0 ? strtotime($jobs['values'][0]['last_run']) : 0;
+      $this->assign('jobLastRun', ($job_last_run ? date('Y-m-d H:i:s', $job_last_run) : ''));
       $this->assign('jobOverdue', '');
-      $overdueHours  = (time() - $last_run) / (60 * 60);
-      if (24 < $overdueHours) {
+      $overdueHours  = (time() - $job_last_run) / (60 * 60);
+      if (36 < $overdueHours) {
         $this->assign('jobOverdue', $overdueHours);
       }
     }
diff --git a/civicrm/ext/iatspayments/CRM/Iats/Upgrader.php b/civicrm/ext/iatspayments/CRM/Iats/Upgrader.php
index b6843bc577bce57ee6ed620cf43258850c804c35..fd9e8417a0a2d3300da7b28acb473ac8f2365193 100644
--- a/civicrm/ext/iatspayments/CRM/Iats/Upgrader.php
+++ b/civicrm/ext/iatspayments/CRM/Iats/Upgrader.php
@@ -13,8 +13,8 @@ class CRM_Iats_Upgrader extends CRM_Iats_Upgrader_Base {
     try {
       $xmlfile = CRM_Core_Resources::singleton()->getPath('com.iatspayments.civicrm','info.xml');
       $myxml = simplexml_load_file($xmlfile);
-      $version = (string)$myxml->version;
-      CRM_Core_BAO_Setting::setItem($version, 'iATS Payments Extension', 'iats_extension_version');
+      $version = (string) $myxml->version;
+      Civi::settings()->set('iats_extension_version', $version);
     }
     catch (Exception $e) {
       // ignore
@@ -75,13 +75,13 @@ class CRM_Iats_Upgrader extends CRM_Iats_Upgrader_Base {
 
   public function upgrade_1_4_001() {
     // reset iATS Extension Version in the civicrm_setting table
-    CRM_Core_BAO_Setting::setItem(NULL, 'iATS Payments Extension', 'iats_extension_version');
+    Civi::settings()->set('iats_extension_version', NULL);
     return TRUE;
   }
 
   public function upgrade_1_5_000() {
     // reset iATS Extension Version in the civicrm_setting table
-    CRM_Core_BAO_Setting::setItem(NULL, 'iATS Payments Extension', 'iats_extension_version');
+    Civi::settings()->set('iats_extension_version', NULL);
     return TRUE;
   }
 
diff --git a/civicrm/ext/iatspayments/CRM/Iats/iATSServiceRequest.php b/civicrm/ext/iatspayments/CRM/Iats/iATSServiceRequest.php
index ace24b8f788334c8731eee1c2225e6278eddfc0a..3b61d73b5ca9716d002a5dc58def46b4847c7fbb 100644
--- a/civicrm/ext/iatspayments/CRM/Iats/iATSServiceRequest.php
+++ b/civicrm/ext/iatspayments/CRM/Iats/iATSServiceRequest.php
@@ -858,12 +858,12 @@ class CRM_Iats_iATSServiceRequest {
    *
    */
   public static function iats_extension_version($reset = 0) {
-    $version = $reset ? '' : CRM_Core_BAO_Setting::getItem('iATS Payments Extension', 'iats_extension_version');
+    $version = $reset ? '' : Civi::settings()->get('iats_extension_version');
     if (empty($version)) {
       $xmlfile = CRM_Core_Resources::singleton()->getPath('com.iatspayments.civicrm', 'info.xml');
       $myxml = simplexml_load_file($xmlfile);
       $version = (string) $myxml->version;
-      CRM_Core_BAO_Setting::setItem($version, 'iATS Payments Extension', 'iats_extension_version');
+      Civi::settings()->set('iats_extension_version', $version);
     }
     return $version;
   }
diff --git a/civicrm/ext/iatspayments/README.md b/civicrm/ext/iatspayments/README.md
index 7324fe481027804eaf1943c4e5865301657f6f19..1573668c1a744fd6599f33bbc08c5674225270fa 100644
--- a/civicrm/ext/iatspayments/README.md
+++ b/civicrm/ext/iatspayments/README.md
@@ -1,22 +1,22 @@
 com.iatspayments.civicrm
 ===============
 
-CiviCRM Extension for iATS Web Services Payment Processor - Date: Oct 17, 2017. 
-Version 1.5.3 for 4.6.x and below.
-Version 1.6.1 for 4.7.x.
+CiviCRM Extension for iATS Web Services Payment Processor
 
 This README.md contains information specific to system administrators/developers. Information for users/implementors can be found in the Documentation Wiki: https://github.com/iATSPayments/com.iatspayments.civicrm/wiki/Documentation
 
 Requirements
 ------------
 
-1. CiviCRM 4.6.x or 4.7.x. We strongly recommend that you keep up with the most recent version of each branch.
+1. CiviCRM 5.x. Tested on the latest ESR and officially supported recent releases.
 
-2. Your PHP needs to include the SOAP extension (php.net/manual/en/soap.setup.php), recommended that you use at least PHP 5.6 but 5.3 and above should work if it supports TLS1.1/1.2 and SHA-256.
+2. When using the 'legacy' processor, your PHP needs to include the SOAP extension (php.net/manual/en/soap.setup.php).
 
-3. To use this extension in production, You must have an iATS Payments Account - and have configured it to accept payment though WebServices. You can use the shared iATS test account credentials for initial setup and testing. For details please see the Documentation Wiki: https://github.com/iATSPayments/com.iatspayments.civicrm/wiki/Documentation
+3. To use this extension in production, you must have an iATS Payments Account. The extension supports both the 'legacy' and '1st Pay' gateways. 
 
-4. To handle ACH/EFT Contributions (verification of them) and to handle Recurring Contributions (of any type) you must configure cron for your CiviCRM install. Information about how to do this can be found in: http://wiki.civicrm.org/confluence/display/CRMDOC/Managing+Scheduled+Jobs
+4. Documentation Wiki: https://github.com/iATSPayments/com.iatspayments.civicrm/wiki/Documentation
+
+4. To handle ACH/EFT Contributions (verification of them) and to handle Recurring Contributions (of any type) you must configure cron for your CiviCRM install. Information about how to do this can be found in: https://docs.civicrm.org/sysadmin/en/latest/setup/jobs/
 
 
 Installation
@@ -26,7 +26,7 @@ This extension follows the standard installation method - if you've got a suppor
 
 As of CiviCRM 5.x, the iATS extension is distributed with the CiviCRM download. This is generally the right version to install. See https://github.com/iATSPayments/com.iatspayments.civicrm/issues/242 for notes on converting from a previous manual install.
 
-If you need help with installing extensions, try: https://wiki.civicrm.org/confluence/display/CRMDOC/Extensions
+If you need help with installing extensions, try: https://docs.civicrm.org/sysadmin/en/latest/customize/extensions/
 
 If you want to try out a particular version directly from github, you probably already know how to do that.
 
@@ -34,19 +34,25 @@ Once the extension is installed, you need to add the payment processor(s) and in
 
 1. Administer -> System Settings -> Payment Processors -> + Add Payment Processor
 
-2. Select iATS Payments Credit Card, iATS Payments ACH/EFT, or iATS Payments SWIPE, they are all provided by this extension (the instructions differ only slightly for each one). You can create multiple payment processor entries using the same credentials for the different types.
+2. If you are using a 'legacy' iATS account, select one or more of: iATS Payments Credit Card, iATS Payments ACH/EFT, or iATS Payments SWIPE. They are all provided by this extension, the instructions differ only slightly for each one. You can create multiple payment processor entries using the same credentials for the different types.
+
+3. If you are using a new '1stPay' iATS account, select one or more of: iATS Payments 1stPay Credit Card or iATS Payments 1stPay ACH. ACH must be specifically enabled on your account, check with iATS Payments if you're not sure.
+
+4. The "Payment Processor Title" of the payment processor is what your site visitors will see when they select a payment method, so typically use "Credit Card" here, or "Credit Card C$" (or US$) if there's any doubt about the currency. Your iATS Payments Account is configured for a single currency, so when you set up the payment page, you'll have to manually ensure you set the right currency (not an issue if you're only handling one currency).
 
-3. The "Name" of the payment processor is what your site visitors will see when they select a payment method, so typically use "Credit Card" here, or "Credit Card C$" (or US$) if there's any doubt about the currency. Your iATS Payments Account is configured for a single currency, so when you set up the payment page, you'll have to manually ensure you set the right currency (not an issue if you're only handling one currency).
+5. For the legacy processor, you can use a shared test account with Agent Code = TEST88 and Password = TEST88. This is a shared test account, so don't put in any private information.
 
-4. The test account uses Agent Code = TEST88 and Password = TEST88. This is a shared test account, so don't put in any private information.
+6. For the 1stPay processor, you should be able to use the same credentials with the different site URL as pre-populated.
 
-5. If you'd like to test using live workflows, you can just temporarily use the test account credentials in your live processor fields.
+7. If you'd like to test using live workflows, you can just temporarily use the test account credentials in your live processor fields.
 
-6. Create a Contribution Page (or go to an existing one) -> Under Configure -> Contribution Amounts -> select your newly installed/configured Payment Processor(s), and Save.
+8. Create a Contribution Page (or go to an existing one) -> Under Configure -> Contribution Amounts -> select your newly installed/configured Payment Processor(s), and Save.
 
 Extension Testing Notes
 -----------------------
 
+The notes below were written for the legacy processor, 1stPay testing notes still to be added here.
+
 1. Our test matrix includes 21 type of transactions at the moment. View a summary of the results here: https://cloud.githubusercontent.com/assets/5340555/5616064/2459a9b8-94be-11e4-84c7-2ef0c83cc744.png
 
 2. Manage Contribution Pages -> Links -> Live Page.
@@ -103,17 +109,13 @@ Some issues may be related to core CiviCRM issues, and may not have an immediate
 
 Below is a list of some of the most common issues:
 
-'Backend' ACH/EFT is not supported by CiviCRM core. Having an enabled ACH/EFT payment processor broke the backend live credit card payment page in core (until it was fixed here https://issues.civicrm.org/jira/browse/CRM-14442), so this module fixes that if it's an issue, and also provides links to easily allow administrators to input ACH/EFT on behalf of constituents. A similar problem existings for backend membership and event payments, and this has only been fixed in core for 4.6.
-
 9002 Error - if you get this when trying to make a contribution, then you're getting that error back from the iATS server due to an account misconfiguration. One source is due to some special characters in your passwd.
 
 CiviCRM core assigns Membership status (=new) and extends Membership End date as well as Event status (=registered) as soon as ACH/EFT is submitted (so while payment is still pending - this could be several days for ACH/EFT). If the contribution receives a Ok:BankAccept -> the extension will mark the contribution in CiviCRM as completed. If the contribution does NOT receive a Ok:BankAccept -> the extension will mark the contribution in CiviCRM as rejected - however - associated existing Membership and Event records may need to be updated manually.
 
-For 4.6, recurring ACH/EFT memberships contributions are automatically approved by CiviCRM due to a bug in CiviCRM Core, but which should be fixed in the near future.
-
 Please note that ACH Returns require manually processing. iATS Payments will notify an organization by Email in case such ACH Returns occur - the reason (e.g. NSF) is included. It is up to CiviCRM administrators to handle this in CiviCRM according to your organization's procedures (e.g. if these were monies re: Event registration -> should that registration be canceled as well or will you ask participant to bring cash; if NSF fees should be charged to the participant etc).
 
-Caution on the use of Pricesets in recurring contributions. This extension will try to use the original transactions' line items. But there are two separate issues here. First, CiviCRM API does an incomplete job with the bookkeeping of line items, so if you need detailed bookkeeping of line items in recurring contributions, you may be disappointed. Separately, if the total amount of the recurring contribution has changed, then there's no machine way of reliably re-allocating it into the original line items, so in that case, they are not used at all. Though not always ideal, a workaround might be to do different transactions for different types of CiviCRM payments instead.
+Caution on the use of Pricesets in recurring contributions. The CiviCRM API does an incomplete job with the bookkeeping of line items, so if you need detailed bookkeeping of line items in recurring contributions, you may be disappointed. Separately, if the total amount of the recurring contribution is changed, then there's no machine way of reliably re-allocating it into the original line items, so in that case, they are not used at all. Though not always ideal, a workaround might be to do different transactions for different types of CiviCRM payments instead.
 
 Please post an issue to the github repository if you have any questions.
 =======
diff --git a/civicrm/ext/iatspayments/api/v3/Job/Fapsquery.php b/civicrm/ext/iatspayments/api/v3/Job/Fapsquery.php
index a583ae22c3a839f9ca61e05d061a7a3cca50186a..adcfe6ab4d79cfb940a609aebe9d0a48394519be 100644
--- a/civicrm/ext/iatspayments/api/v3/Job/Fapsquery.php
+++ b/civicrm/ext/iatspayments/api/v3/Job/Fapsquery.php
@@ -65,9 +65,9 @@ function civicrm_api3_job_fapsquery($params) {
   }
   // CRM_Core_Error::debug_var('Payment Processors', $payment_processors);
   // get the settings: TODO allow more detailed configuration of which transactions to import?
-  $iats_settings = CRM_Core_BAO_Setting::getItem('iATS Payments Extension', 'iats_settings');
+  $iats_settings = Civi::settings()->get('iats_settings');
   // I also use the settings to keep track of the last time I imported journal data from iATS/FAPS.
-  $iats_faps_journal = CRM_Core_BAO_Setting::getItem('iATS Payments Extension', 'iats_faps_journal');
+  $iats_faps_journal = Civi::settings()->get('iats_faps_journal');
   /* initialize some values so I can report at the end */
   // count the number of records from each iats account analysed, and the number of each kind found ('action')
   $processed = array();
@@ -132,7 +132,7 @@ function civicrm_api3_job_fapsquery($params) {
   }
   // record the current date into the settings for next time.
   $iats_faps_journal = date('c'); // ISO 8601
-  CRM_Core_BAO_Setting::setItem($iats_faps_journal, 'iATS Payments Extension', 'iats_faps_journal');
+  Civi::settings()->set('iats_faps_journal', $iats_faps_journal);
   $message = '';
   foreach ($processed as $user_name => $p) {
     foreach ($p as $type_id => $count) {
diff --git a/civicrm/ext/iatspayments/api/v3/Job/Iatsrecurringcontributions.php b/civicrm/ext/iatspayments/api/v3/Job/Iatsrecurringcontributions.php
index 72b8948821e5e0ee4c7c1a5b6a1f13f9da5cdec0..18548352493a0cb71c39ca2163fb3ddf7cfafc61 100644
--- a/civicrm/ext/iatspayments/api/v3/Job/Iatsrecurringcontributions.php
+++ b/civicrm/ext/iatspayments/api/v3/Job/Iatsrecurringcontributions.php
@@ -105,7 +105,7 @@ function civicrm_api3_job_Iatsrecurringcontributions($params) {
   $counter = 0;
   $error_count  = 0;
   $output  = [];
-  $settings = CRM_Core_BAO_Setting::getItem('iATS Payments Extension', 'iats_settings');
+  $settings = Civi::settings()->get('iats_settings');
   $receipt_recurring = $settings['receipt_recurring'];
   $email_failure_report = empty($settings['email_recurring_failure_report']) ? '' : $settings['email_recurring_failure_report'];
   // By default, after 3 failures move the next scheduled contribution date forward.
diff --git a/civicrm/ext/iatspayments/api/v3/Job/Iatsreport.php b/civicrm/ext/iatspayments/api/v3/Job/Iatsreport.php
index 00be93662e04abbe686f40a6c424376c6c83ecf2..a86648b1fe335401645f92803aad9efc0e52b422 100644
--- a/civicrm/ext/iatspayments/api/v3/Job/Iatsreport.php
+++ b/civicrm/ext/iatspayments/api/v3/Job/Iatsreport.php
@@ -65,9 +65,9 @@ function civicrm_api3_job_iatsreport($params) {
   }
   // CRM_Core_Error::debug_var('Payment Processors', $payment_processors);
   // get the settings: TODO allow more detailed configuration of which transactions to import?
-  $iats_settings = CRM_Core_BAO_Setting::getItem('iATS Payments Extension', 'iats_settings');
+  $iats_settings = Civi::settings()->get('iats_settings');
   // I also use the setttings to keep track of the last time I imported journal data from iATS.
-  $iats_journal = CRM_Core_BAO_Setting::getItem('iATS Payments Extension', 'iats_journal');
+  $iats_journal = Civi::settings()->get('iats_journal');
   foreach (array('quick', 'recur', 'series') as $setting) {
     $import[$setting] = empty($iats_settings['import_' . $setting]) ? 0 : 1;
   }
@@ -186,7 +186,7 @@ function civicrm_api3_job_iatsreport($params) {
       }
     }
   }
-  CRM_Core_BAO_Setting::setItem($iats_journal, 'iATS Payments Extension', 'iats_journal');
+  Civi::settings()->set('iats_journal', $iats_journal);
   // watchdog('civicrm_iatspayments_com', 'found: <pre>!found</pre>', array('!found' => print_r($processed,TRUE)), WATCHDOG_NOTICE);
   $message = '';
   foreach ($processed as $user_name => $p) {
diff --git a/civicrm/ext/iatspayments/api/v3/Job/Iatsverify.php b/civicrm/ext/iatspayments/api/v3/Job/Iatsverify.php
index c986a7c1a095e00065681b1ccd936a656f65e728..61346f1f1b64a200e48b813bcc5a465b84d0d585 100644
--- a/civicrm/ext/iatspayments/api/v3/Job/Iatsverify.php
+++ b/civicrm/ext/iatspayments/api/v3/Job/Iatsverify.php
@@ -68,7 +68,7 @@ function _civicrm_api3_job_iatsverify_spec(&$spec) {
  */
 function civicrm_api3_job_iatsverify($params) {
 
-  $settings = CRM_Core_BAO_Setting::getItem('iATS Payments Extension', 'iats_settings');
+  $settings = Civi::settings()->get('iats_settings');
   $receipt_recurring = $settings['receipt_recurring'];
   define('IATS_VERIFY_DAYS', 30);
   // I've added an extra 2 days when getting candidates from CiviCRM to be sure i've got them all.
@@ -107,8 +107,8 @@ function civicrm_api3_job_iatsverify($params) {
   }
   // use these two settings to see if it's worth checking their respective
   // journal tables.
-  $iats_journal_date = CRM_Core_BAO_Setting::getItem('iATS Payments Extension', 'iats_journal');
-  $iats_faps_journal_date = CRM_Core_BAO_Setting::getItem('iATS Payments Extension', 'iats_faps_journal');
+  $iats_journal_date = Civi::settings()->get('iats_journal');
+  $iats_faps_journal_date = Civi::settings()->get('iats_faps_journal');
   $message = '';
   try {
     $contributions = civicrm_api3('Contribution', 'get', $select_params);
diff --git a/civicrm/ext/iatspayments/iats.php b/civicrm/ext/iatspayments/iats.php
index 91a2feb147cf892e45a6ad34faa228cc17dfd0c0..9cedcdb18d2ca2527931df458ecc11ac04d49f2a 100644
--- a/civicrm/ext/iatspayments/iats.php
+++ b/civicrm/ext/iatspayments/iats.php
@@ -354,7 +354,7 @@ function iats_civicrm_buildForm_CRM_Financial_Form_Payment(&$form) {
 
   // If enabled provide a way to set future contribution dates. 
   // Uses javascript to hide/reset unless they have recurring contributions checked.
-  $settings = CRM_Core_BAO_Setting::getItem('iATS Payments Extension', 'iats_settings');
+  $settings = Civi::settings()->get('iats_settings');
   if (!empty($settings['enable_public_future_recurring_start'])
     && $form->_paymentObject->supportsFutureRecurStartDate()
   ) {
@@ -478,7 +478,7 @@ function iats_civicrm_pre($op, $objectName, $objectId, &$params) {
   if (('ContributionRecur' == $objectName) && ('create' == $op || 'edit' == $op) && !empty($params['payment_processor_id'])) {
     if ($type = _iats_civicrm_is_iats($params['payment_processor_id'])) {
       if (!empty($params['next_sched_contribution_date'])) {
-        $settings = CRM_Core_BAO_Setting::getItem('iATS Payments Extension', 'iats_settings');
+        $settings = Civi::settings()->get('iats_settings');
         $allow_days = empty($settings['days']) ? array('-1') : $settings['days'];
         // Force one of the fixed days, and set the cycle_day at the same time.
         if (0 < max($allow_days)) {
@@ -500,7 +500,7 @@ function iats_civicrm_pre($op, $objectName, $objectId, &$params) {
 function iats_get_setting($key = NULL) {
   static $settings;
   if (empty($settings)) { 
-    $settings = CRM_Core_BAO_Setting::getItem('iATS Payments Extension', 'iats_settings');
+    $settings = Civi::settings()->get('iats_settings');
   }
   return empty($key) ?  $settings : (isset($settings[$key]) ? $settings[$key] : '');
 }
diff --git a/civicrm/ext/iatspayments/info.xml b/civicrm/ext/iatspayments/info.xml
index bfab31caec33250ad0319b187d3cee25853cb885..ca30065b582d18a82612fd6e64db6beed7be54a4 100644
--- a/civicrm/ext/iatspayments/info.xml
+++ b/civicrm/ext/iatspayments/info.xml
@@ -9,7 +9,7 @@
     <url desc="Support">https://github.com/iATSPayments/com.iatspayments.civicrm/issues?state=open</url>
     <url desc="Installation Instructions">https://github.com/iATSPayments/com.iatspayments.civicrm</url>
     <url desc="Documentation">https://github.com/iATSPayments/com.iatspayments.civicrm</url>
-    <url desc="Release Notes">https://github.com/iATSPayments/com.iatspayments.civicrm/blob/master/release-notes/1.7.0.md</url>
+    <url desc="Release Notes">https://github.com/iATSPayments/com.iatspayments.civicrm/blob/master/release-notes/1.7.1.md</url>
     <url desc="Getting Started">https://www.semper-it.com/civicamp-iats-payments-slides</url>
   </urls>
   <license>AGPL-3.0</license>
@@ -17,13 +17,13 @@
     <author>Alan Dixon</author>
     <email>iats@blackflysolutions.ca</email>
   </maintainer>
-  <releaseDate>2019-11-18</releaseDate>
-  <version>1.7.0</version>
+  <releaseDate>2020-02-05</releaseDate>
+  <version>1.7.1</version>
   <develStage>stable</develStage>
   <compatibility>
-    <ver>5.0</ver>
+    <ver>5.13</ver>
   </compatibility>
-  <comments>This release adds new functionality for the iATS Payments 1stPay processors, refactors a lot of code, and improves error handling.</comments>
+  <comments>A non-critical but recommended 1.7.x maintenance release, see release notes above for details.</comments>
   <civix>
     <namespace>CRM/Iats</namespace>
   </civix>
diff --git a/civicrm/ext/iatspayments/release-notes/1.7.1.md b/civicrm/ext/iatspayments/release-notes/1.7.1.md
new file mode 100644
index 0000000000000000000000000000000000000000..5a5a457c48043c9b8172aa634ea8828d0d22efc9
--- /dev/null
+++ b/civicrm/ext/iatspayments/release-notes/1.7.1.md
@@ -0,0 +1,13 @@
+# iATS CiviCRM Extension 1.7.1
+
+Feb 5, 2020
+
+This release is a maintenance release for the 1.7 series.
+It is recommended, but not urgently, for all CiviCRM installs on 5.x and above.
+
+It:
+1. Sanitizes '&' out of names when using the legacy processor. A '&' in the name field will generate errors in the processor.
+2. Updates the "settings" functions to use standard non deprecated Civi::settings facade (i.e. avoid deprecation notices). Thanks Seamus!
+3. Fixes a false warning about your civi cron on the admin console page.
+
+If you are currently on the 1.6.x series, please also read the 1.7.0 release notes.
diff --git a/civicrm/packages/DB.php b/civicrm/packages/DB.php
index 648d60dcbfdb29232a12390938bba26a50d6c7f6..90f9d63622ad208bb1518235820c265479f224ac 100644
--- a/civicrm/packages/DB.php
+++ b/civicrm/packages/DB.php
@@ -187,8 +187,17 @@ define('DB_ERROR_CONSTRAINT_NOT_NULL',-29);
  * Invalid view or no permissions
  */
 define('DB_ERROR_INVALID_VIEW', -100);
-/**#@-*/
 
+/**
+ * Database lock timeout exceeded.
+ */
+define('DB_ERROR_LOCK_TIMEOUT', -30);
+
+/**
+ * Database deadlock encountered.
+ */
+define('DB_ERROR_DEADLOCK', -31);
+/**#@-*/
 
 // }}}
 // {{{ prepared statement-related
@@ -694,6 +703,8 @@ class DB
                 DB_ERROR_TRUNCATED          => 'truncated',
                 DB_ERROR_VALUE_COUNT_ON_ROW => 'value count on row',
                 DB_OK                       => 'no error',
+                DB_ERROR_DEADLOCK           => 'deadlock',
+                DB_ERROR_LOCK_TIMEOUT       => 'database lock timeout',
             );
         }
 
diff --git a/civicrm/packages/DB/mysql.php b/civicrm/packages/DB/mysql.php
index 23a85c7fc0afb851a0bdf2470ae90ee24f310bc1..9ab82dbba21270d899edbb50d536e145ac6326f8 100644
--- a/civicrm/packages/DB/mysql.php
+++ b/civicrm/packages/DB/mysql.php
@@ -109,6 +109,8 @@ class DB_mysql extends DB_common
         1136 => DB_ERROR_VALUE_COUNT_ON_ROW,
         1142 => DB_ERROR_ACCESS_VIOLATION,
         1146 => DB_ERROR_NOSUCHTABLE,
+        1205 => DB_ERROR_LOCK_TIMEOUT,
+        1213 => DB_ERROR_DEADLOCK,
         1216 => DB_ERROR_CONSTRAINT,
         1217 => DB_ERROR_CONSTRAINT,
         1356 => DB_ERROR_INVALID_VIEW,
diff --git a/civicrm/packages/DB/mysqli.php b/civicrm/packages/DB/mysqli.php
index fab72ad4cb2f3ea42f5e2e779ad2b43e71ea0586..0b383eeb1223c69c2009c0f2ee3bb001b7126bb5 100644
--- a/civicrm/packages/DB/mysqli.php
+++ b/civicrm/packages/DB/mysqli.php
@@ -112,6 +112,8 @@ class DB_mysqli extends DB_common
         1136 => DB_ERROR_VALUE_COUNT_ON_ROW,
         1142 => DB_ERROR_ACCESS_VIOLATION,
         1146 => DB_ERROR_NOSUCHTABLE,
+        1205 => DB_ERROR_LOCK_TIMEOUT,
+        1213 => DB_ERROR_DEADLOCK,
         1216 => DB_ERROR_CONSTRAINT,
         1217 => DB_ERROR_CONSTRAINT,
         1356 => DB_ERROR_INVALID_VIEW,
diff --git a/civicrm/packages/Net/UserAgent/Detect.php b/civicrm/packages/Net/UserAgent/Detect.php
deleted file mode 100644
index 571e274d4536a625b9c53edd40fc89a1f5bc188a..0000000000000000000000000000000000000000
--- a/civicrm/packages/Net/UserAgent/Detect.php
+++ /dev/null
@@ -1,984 +0,0 @@
-<?php
-// {{{ license
-
-// +----------------------------------------------------------------------+
-// | PHP version 4.2                                                      |
-// +----------------------------------------------------------------------+
-// | Copyright (c) 1997-2007 The PHP Group                                |
-// +----------------------------------------------------------------------+
-// | This source file is subject to version 2.0 of the PHP license,       |
-// | that is bundled with this package in the file LICENSE, and is        |
-// | available at through the world-wide-web at                           |
-// | http://www.php.net/license/2_02.txt.                                 |
-// | If you did not receive a copy of the PHP license and are unable to   |
-// | obtain it through the world-wide-web, please send a note to          |
-// | license@php.net so we can mail you a copy immediately.               |
-// +----------------------------------------------------------------------+
-// | Authors: Dan Allen <dan@mojavelinux.com>                             |
-// |          Jason Rust <jrust@php.net>                                  |
-// +----------------------------------------------------------------------+
-
-// $Id: Detect.php,v 1.28 2009/06/09 04:07:00 clockwerx Exp $
-
-// }}}
-// {{{ constants
-
-define('NET_USERAGENT_DETECT_BROWSER',  'browser');
-define('NET_USERAGENT_DETECT_OS',       'os');
-define('NET_USERAGENT_DETECT_FEATURES', 'features');
-define('NET_USERAGENT_DETECT_QUIRKS',   'quirks');
-define('NET_USERAGENT_DETECT_ACCEPT',   'accept');
-define('NET_USERAGENT_DETECT_ALL',      'all');
-
-// }}}
-// {{{ class Net_UserAgent_Detect
-
-/**
- * The Net_UserAgent_Detect object does a number of tests on an HTTP user
- * agent string.  The results of these tests are available via methods of
- * the object.  Note that all methods in this class can be called
- * statically.  The constructor and singleton methods are only retained
- * for BC.
- *
- * This module is based upon the JavaScript browser detection code
- * available at http://www.mozilla.org/docs/web-developer/sniffer/browser_type.html.
- * This module had many influences from the lib/Browser.php code in
- * version 1.3 of Horde.
- *
- * @author   Jason Rust <jrust@php.net>
- * @author   Dan Allen <dan@mojavelinux.com>
- * @author   Chuck Hagenbuch <chuck@horde.org>
- * @author   Jon Parise <jon@horde.org>
- * @package  Net_UserAgent
- */
-
-// }}}
-class Net_UserAgent_Detect {
-    // {{{ constructor
-
-    function __construct($in_userAgent = null, $in_detect = null)
-    {
-        $this->detect($in_userAgent, $in_detect);
-    }
-
-    // }}}
-    // {{{ singleton
-
-    /**
-     * To be used in place of the contructor to return only open instance.
-     *
-     * @access public 
-     * @return object Net_UserAgent_Detect instance
-     */
-    function &singleton($in_userAgent = null, $in_detect = null) 
-    {
-        static $instance;
-       
-        if (!isset($instance)) { 
-            $instance = new Net_UserAgent_Detect($in_userAgent, $in_detect); 
-        }
-        
-        return $instance; 
-    }
-
-    // }}}
-    // {{{ detect()
-
-    /**
-     * Detect the user agent and prepare flags, features and quirks
-     * based on what is found
-     *
-     * This is the core of the Net_UserAgent_Detect class.  It moves its
-     * way through the user agent string setting up the flags based on
-     * the vendors and versions of the browsers, determining the OS and
-     * setting up the features and quirks owned by each of the relevant
-     * clients.  Note that if you are going to be calling methods of
-     * this class statically then set all the parameters using th
-     * setOption()
-     *
-     * @param  string $in_userAgent (optional) User agent override.  
-     * @param  mixed $in_detect (optional) The level of checking to do. 
-     *
-     * @access public
-     * @return void
-     */
-    function detect($in_userAgent = null, $in_detect = null)
-    {
-        static $hasRun;
-        $options = Net_UserAgent_Detect::_getStaticProperty('options');
-        if (!empty($hasRun) && empty($options['re-evaluate'])) {
-            return;
-        }
-
-        $hasRun = true;
-        // {{{ set up static properties
-
-        $in_userAgent = isset($options['userAgent']) && is_null($in_userAgent) ? $options['userAgent'] : $in_userAgent;
-        $in_detect = isset($options['detectOptions']) && is_null($in_detect) ? $options['detectOptions'] : $in_detect;
-
-        // User agent string that is being analyzed
-        $userAgent = Net_UserAgent_Detect::_getStaticProperty('userAgent');
-
-        // Array that stores all of the flags for the vendor and version
-        // of the different browsers
-        $browser = Net_UserAgent_Detect::_getStaticProperty('browser');
-        $browser = array_flip(array('ns', 'ns2', 'ns3', 'ns4', 'ns4up', 'nav', 'ns6', 'belowns6', 'ns6up', 'firefox', 'firefox0.x', 'firefox1.x', 'firefox1.5', 'firefox2.x', 'firefox3.x', 'gecko', 'ie', 'ie3', 'ie4', 'ie4up', 'ie5', 'ie5_5', 'ie5up', 'ie6', 'belowie6', 'ie6up', 'ie7', 'ie7up', 'ie8', 'ie8tr', 'ie8up', 'opera', 'opera2', 'opera3', 'opera4', 'opera5', 'opera6', 'opera7', 'opera8', 'opera9', 'opera5up', 'opera6up', 'opera7up', 'belowopera8', 'opera8up', 'opera9up', 'aol', 'aol3', 'aol4', 'aol5', 'aol6', 'aol7', 'aol8', 'webtv', 'aoltv', 'tvnavigator', 'hotjava', 'hotjava3', 'hotjava3up', 'konq', 'safari', 'safari_mobile', 'chrome', 'netgem', 'webdav', 'icab'));
-        
-        // Array that stores all of the flags for the operating systems,
-        // and in some cases the versions of those operating systems (windows)
-        $os = Net_UserAgent_Detect::_getStaticProperty('os');
-        $os = array_flip(array('win', 'win95', 'win16', 'win31', 'win9x', 'win98', 'wince', 'winme', 'win2k', 'winxp', 'winnt', 'win2003', 'vista', 'win7', 'os2', 'mac', 'mac68k', 'macppc', 'linux', 'unix', 'vms', 'sun', 'sun4', 'sun5', 'suni86', 'irix', 'irix5', 'irix6', 'hpux', 'hpux9', 'hpux10', 'aix', 'aix1', 'aix2', 'aix3', 'aix4', 'sco', 'unixware', 'mpras', 'reliant', 'dec', 'sinix', 'freebsd', 'bsd'));
-
-        // Array which stores known issues with the given client that can
-        // be used for on the fly tweaking so that the client may recieve
-        // the proper handling of this quirk.
-        $quirks = Net_UserAgent_Detect::_getStaticProperty('quirks');
-        $quirks = array(
-                'must_cache_forms'         => false,
-                'popups_disabled'          => false,
-                'empty_file_input_value'   => false,
-                'cache_ssl_downloads'      => false,
-                'scrollbar_in_way'         => false,
-                'break_disposition_header' => false,
-                'nested_table_render_bug'  => false);
-
-        // Array that stores credentials for each of the browser/os
-        // combinations.  These allow quick access to determine if the
-        // current client has a feature that is going to be implemented
-        // in the script.
-        $features = Net_UserAgent_Detect::_getStaticProperty('features');
-        $features = array(
-                'javascript'   => false,
-                'dhtml'        => false,
-                'dom'          => false,
-                'sidebar'      => false,
-                'gecko'        => false,
-                'svg'          => false,
-                'css2'         => false,
-                'ajax'         => false);
-
-        // The leading identifier is the very first term in the user
-        // agent string, which is used to identify clients which are not
-        // Mosaic-based browsers.
-        $leadingIdentifier = Net_UserAgent_Detect::_getStaticProperty('leadingIdentifier');
-
-        // The full version of the client as supplied by the very first
-        // numbers in the user agent
-        $version = Net_UserAgent_Detect::_getStaticProperty('version');
-        $version = 0;
-
-        // The major part of the client version, which is the integer
-        // value of the version.
-        $majorVersion = Net_UserAgent_Detect::_getStaticProperty('majorVersion');
-        $majorVersion = 0;
-
-        // The minor part of the client version, which is the decimal
-        // parts of the version
-        $subVersion = Net_UserAgent_Detect::_getStaticProperty('subVersion');
-        $subVersion = 0;
-
-        // }}}
-        // detemine what user agent we are using
-        if (is_null($in_userAgent)) {
-            if (isset($_SERVER['HTTP_USER_AGENT'])) {
-                $userAgent = $_SERVER['HTTP_USER_AGENT'];
-            }
-            elseif (isset($GLOBALS['HTTP_SERVER_VARS']['HTTP_USER_AGENT'])) {
-                $userAgent = $GLOBALS['HTTP_SERVER_VARS']['HTTP_USER_AGENT'];
-            }
-            else {
-                $userAgent = '';
-            }
-        }
-        else {
-            $userAgent = $in_userAgent;
-        }
-
-        // get the lowercase version for case-insensitive searching
-        $agt = strtolower($userAgent);
-
-        // figure out what we need to look for
-        $detectOptions = array(NET_USERAGENT_DETECT_BROWSER,
-                NET_USERAGENT_DETECT_OS, NET_USERAGENT_DETECT_FEATURES,
-                NET_USERAGENT_DETECT_QUIRKS, NET_USERAGENT_DETECT_ACCEPT, 
-                NET_USERAGENT_DETECT_ALL);
-        $detect = is_null($in_detect) ? NET_USERAGENT_DETECT_ALL : $in_detect;
-        settype($detect, 'array');
-        foreach($detectOptions as $option) {
-            if (in_array($option, $detect)) {
-                $detectFlags[$option] = true; 
-            }
-            else {
-                $detectFlags[$option] = false;
-            }
-        }
-
-        // initialize the arrays of browsers and operating systems
-
-        // Get the type and version of the client
-        if (preg_match(";^([[:alnum:]]+)[ /\(]*[[:alpha:]]*([\d]*)(\.[\d\.]*);", $agt, $matches)) {
-            list(, $leadingIdentifier, $majorVersion, $subVersion) = $matches;
-        }
-
-        if (empty($leadingIdentifier)) {
-            $leadingIdentifier = 'Unknown';
-        }
-
-        $version = $majorVersion . $subVersion;
-    
-        // Browser type
-        if ($detectFlags[NET_USERAGENT_DETECT_ALL] || $detectFlags[NET_USERAGENT_DETECT_BROWSER]) {
-            $browser['webdav']  = ($agt == 'microsoft data access internet publishing provider dav' || $agt == 'microsoft data access internet publishing provider protocol discovery');
-            $browser['konq'] = (strpos($agt, 'konqueror') !== false ||  strpos($agt, 'safari') !== false );
-            $browser['safari'] = (strpos($agt, 'safari') !== false);
-            $browser['chrome'] = (strpos($agt, 'chrome') !== false);
-            $browser['safari_mobile'] = (strpos($agt, 'safari') !== false && strpos($agt, 'mobile') !== false );
-            $browser['text']    = strpos($agt, 'links') !== false || strpos($agt, 'lynx') !== false || strpos($agt, 'w3m') !== false;
-            $browser['ns']      = strpos($agt, 'mozilla') !== false && !(strpos($agt, 'spoofer') !== false) && !(strpos($agt, 'compatible') !== false) && !(strpos($agt, 'hotjava') !== false) && !(strpos($agt, 'opera') !== false) && !(strpos($agt, 'webtv') !== false) ? 1 : 0;
-            $browser['netgem']  = strpos($agt, 'netgem') !== false;
-            $browser['icab']    = strpos($agt, 'icab') !== false;
-            $browser['ns2']     = $browser['ns'] && $majorVersion == 2;
-            $browser['ns3']     = $browser['ns'] && $majorVersion == 3;
-            $browser['ns4']     = $browser['ns'] && $majorVersion == 4;
-            $browser['ns4up']   = $browser['ns'] && $majorVersion >= 4;
-            // determine if this is a Netscape Navigator
-            $browser['nav'] = $browser['belowns6'] = $browser['ns'] && $majorVersion < 5;
-            $browser['ns6']     = !$browser['konq'] && $browser['ns'] && $majorVersion == 5;
-            $browser['ns6up']   = $browser['ns6'] && $majorVersion >= 5;
-            $browser['gecko']   = strpos($agt, 'gecko') !== false && !$browser['konq'];
-            $browser['firefox'] = $browser['gecko'] && strpos($agt, 'firefox') !== false;
-            $browser['firefox0.x'] = $browser['firefox'] && strpos($agt, 'firefox/0.') !== false;
-            $browser['firefox1.x'] = $browser['firefox'] && strpos($agt, 'firefox/1.') !== false;
-            $browser['firefox1.5'] = $browser['firefox'] && strpos($agt, 'firefox/1.5') !== false;
-            $browser['firefox2.x'] = $browser['firefox'] && strpos($agt, 'firefox/2.') !== false;
-            $browser['firefox3.x'] = $browser['firefox'] && strpos($agt, 'firefox/3.') !== false;
-            $browser['ie']      = strpos($agt, 'msie') !== false && !(strpos($agt, 'opera') !== false);
-            $browser['ie3']     = $browser['ie'] && $majorVersion < 4;
-            $browser['ie4']     = $browser['ie'] && $majorVersion == 4 && (strpos($agt, 'msie 4') !== false);
-            $browser['ie4up']   = $browser['ie'] && !$browser['ie3'];
-            $browser['ie5']     = $browser['ie4up'] && (strpos($agt, 'msie 5') !== false);
-            $browser['ie5_5']   = $browser['ie4up'] && (strpos($agt, 'msie 5.5') !== false);
-            $browser['ie5up']   = $browser['ie4up'] && !$browser['ie3'] && !$browser['ie4'];
-            $browser['ie5_5up'] = $browser['ie5up'] && !$browser['ie5'];
-            $browser['ie6']     = strpos($agt, 'msie 6') !== false;
-            $browser['ie6up']   = $browser['ie5up'] && !$browser['ie5'] && !$browser['ie5_5'];
-            $browser['ie7'] = strpos($agt, 'msie 7') && !strpos($agt,'trident/4');
-            $browser['ie7up']   = $browser['ie6up'] && !$browser['ie6'];
-            $browser['ie8tr'] = strpos($agt, 'msie 7') && strpos($agt,'trident/4') !== false;
-            $browser['ie8'] = strpos($agt, 'msie 8') !== false;
-            $browser['ie8up'] = $browser['ie7up'] && !$browser['ie7']; 
-            $browser['belowie6']= $browser['ie'] && !$browser['ie6up'];
-            $browser['opera']   = strpos($agt, 'opera') !== false;
-            $browser['opera2']  = strpos($agt, 'opera 2') !== false || strpos($agt, 'opera/2') !== false;
-            $browser['opera3']  = strpos($agt, 'opera 3') !== false || strpos($agt, 'opera/3') !== false;
-            $browser['opera4']  = strpos($agt, 'opera 4') !== false || strpos($agt, 'opera/4') !== false;
-            $browser['opera5']  = strpos($agt, 'opera 5') !== false || strpos($agt, 'opera/5') !== false;
-            $browser['opera6']  = strpos($agt, 'opera 6') !== false || strpos($agt, 'opera/6') !== false;
-            $browser['opera7']  = strpos($agt, 'opera 7') !== false || strpos($agt, 'opera/7') !== false;
-            $browser['opera8']  = strpos($agt, 'opera 8') !== false || strpos($agt, 'opera/8') !== false;
-            $browser['opera9']  = strpos($agt, 'opera 9') !== false || strpos($agt, 'opera/9') !== false;
-            $browser['opera5up'] = $browser['opera'] && !$browser['opera2'] && !$browser['opera3'] && !$browser['opera4'];
-            $browser['opera6up'] = $browser['opera'] && !$browser['opera2'] && !$browser['opera3'] && !$browser['opera4'] && !$browser['opera5'];
-            $browser['opera7up'] = $browser['opera'] && !$browser['opera2'] && !$browser['opera3'] && !$browser['opera4'] && !$browser['opera5'] && !$browser['opera6'];
-            $browser['opera8up'] = $browser['opera'] && !$browser['opera2'] && !$browser['opera3'] && !$browser['opera4'] && !$browser['opera5'] && !$browser['opera6'] && !$browser['opera7'];
-            $browser['opera9up'] = $browser['opera'] && !$browser['opera2'] && !$browser['opera3'] && !$browser['opera4'] && !$browser['opera5'] && !$browser['opera6'] && !$browser['opera7'] && !$browser['opera8'];
-            $browser['belowopera8'] = $browser['opera'] && !$browser['opera8up'];
-            $browser['aol']   = strpos($agt, 'aol') !== false;
-            $browser['aol3']  = $browser['aol'] && $browser['ie3'];
-            $browser['aol4']  = $browser['aol'] && $browser['ie4'];
-            $browser['aol5']  = strpos($agt, 'aol 5') !== false;
-            $browser['aol6']  = strpos($agt, 'aol 6') !== false;
-            $browser['aol7']  = strpos($agt, 'aol 7') !== false || strpos($agt, 'aol7') !== false;
-            $browser['aol8']  = strpos($agt, 'aol 8') !== false || strpos($agt, 'aol8') !== false;
-            $browser['webtv'] = strpos($agt, 'webtv') !== false; 
-            $browser['aoltv'] = $browser['tvnavigator'] = strpos($agt, 'navio') !== false || strpos($agt, 'navio_aoltv') !== false; 
-            $browser['hotjava'] = strpos($agt, 'hotjava') !== false;
-            $browser['hotjava3'] = $browser['hotjava'] && $majorVersion == 3;
-            $browser['hotjava3up'] = $browser['hotjava'] && $majorVersion >= 3;
-            $browser['iemobile'] = strpos($agt, 'iemobile') !== false || strpos($agt, 'windows ce') !== false && (strpos($agt, 'ppc') !== false || strpos($agt, 'smartphone') !== false);
-        }
-
-        if ($detectFlags[NET_USERAGENT_DETECT_ALL] || 
-            ($detectFlags[NET_USERAGENT_DETECT_BROWSER] && $detectFlags[NET_USERAGENT_DETECT_FEATURES])) {
-            // Javascript Check
-            if ($browser['ns2'] || $browser['ie3']) {
-                Net_UserAgent_Detect::setFeature('javascript', 1.0);
-            }
-            elseif ($browser['iemobile']) {
-              // no javascript
-            }
-            elseif ($browser['opera5up']) {
-                Net_UserAgent_Detect::setFeature('javascript', 1.3);
-            }
-            elseif ($browser['opera'] || $browser['ns3']) {
-                Net_UserAgent_Detect::setFeature('javascript', 1.1);
-            }
-            elseif (($browser['ns4'] && ($version <= 4.05)) || $browser['ie4']) {
-                Net_UserAgent_Detect::setFeature('javascript', 1.2);
-            }
-            elseif (($browser['ie5up'] && strpos($agt, 'mac') !== false) || $browser['konq']) {
-                Net_UserAgent_Detect::setFeature('javascript', 1.4);
-            }
-            // I can't believe IE6 still has javascript 1.3, what a shitty browser
-            elseif (($browser['ns4'] && ($version > 4.05)) || $browser['ie5up'] || $browser['hotjava3up']) {
-                Net_UserAgent_Detect::setFeature('javascript', 1.3);
-            }
-            elseif ($browser['ns6up'] || $browser['gecko'] || $browser['netgem']) {
-                Net_UserAgent_Detect::setFeature('javascript', 1.5);
-            }
-        }
-        
-        /** OS Check **/
-        if ($detectFlags[NET_USERAGENT_DETECT_ALL] || $detectFlags[NET_USERAGENT_DETECT_OS]) {
-            $os['win']   = strpos($agt, 'win') !== false || strpos($agt, '16bit') !== false;
-            $os['win95'] = strpos($agt, 'win95') !== false || strpos($agt, 'windows 95') !== false;
-            $os['win16'] = strpos($agt, 'win16') !== false || strpos($agt, '16bit') !== false || strpos($agt, 'windows 3.1') !== false || strpos($agt, 'windows 16-bit') !== false;  
-            $os['win31'] = strpos($agt, 'windows 3.1') !== false || strpos($agt, 'win16') !== false || strpos($agt, 'windows 16-bit') !== false;
-            $os['winme'] = strpos($agt, 'win 9x 4.90') !== false;
-            $os['wince'] = strpos($agt, 'windows ce') !== false;
-            $os['win2k'] = strpos($agt, 'windows nt 5.0') !== false;
-            $os['winxp'] = strpos($agt, 'windows nt 5.1') !== false;
-            $os['win2003'] = strpos($agt, 'windows nt 5.2') !== false;
-            $os['win98'] = strpos($agt, 'win98') !== false || strpos($agt, 'windows 98') !== false;
-            $os['win9x'] = $os['win95'] || $os['win98'];
-            $os['winnt'] = (strpos($agt, 'winnt') !== false || strpos($agt, 'windows nt') !== false) && strpos($agt, 'windows nt 5') === false;
-            $os['win32'] = $os['win95'] || $os['winnt'] || $os['win98'] || $majorVersion >= 4 && strpos($agt, 'win32') !== false || strpos($agt, '32bit') !== false;
-            $os['vista'] = strpos($agt, 'windows nt 6.0') !== false;
-            $os['win7'] = strpos($agt, 'windows nt 6.1') !== false; 
-            $os['os2']   = strpos($agt, 'os/2') !== false || strpos($agt, 'ibm-webexplorer') !== false;
-            $os['mac']   = strpos($agt, 'mac') !== false;
-            $os['mac68k']   = $os['mac'] && (strpos($agt, '68k') !== false || strpos($agt, '68000') !== false);
-            $os['macppc']   = $os['mac'] && (strpos($agt, 'ppc') !== false || strpos($agt, 'powerpc') !== false);
-            $os['sun']      = strpos($agt, 'sunos') !== false;
-            $os['sun4']     = strpos($agt, 'sunos 4') !== false;
-            $os['sun5']     = strpos($agt, 'sunos 5') !== false;
-            $os['suni86']   = $os['sun'] && strpos($agt, 'i86') !== false;
-            $os['irix']     = strpos($agt, 'irix') !== false;
-            $os['irix5']    = strpos($agt, 'irix 5') !== false;
-            $os['irix6']    = strpos($agt, 'irix 6') !== false || strpos($agt, 'irix6') !== false;
-            $os['hpux']     = strpos($agt, 'hp-ux') !== false;
-            $os['hpux9']    = $os['hpux'] && strpos($agt, '09.') !== false;
-            $os['hpux10']   = $os['hpux'] && strpos($agt, '10.') !== false;
-            $os['aix']      = strpos($agt, 'aix') !== false;
-            $os['aix1']     = strpos($agt, 'aix 1') !== false;
-            $os['aix2']     = strpos($agt, 'aix 2') !== false;
-            $os['aix3']     = strpos($agt, 'aix 3') !== false;
-            $os['aix4']     = strpos($agt, 'aix 4') !== false;
-            $os['linux']    = strpos($agt, 'inux') !== false;
-            $os['sco']      = strpos($agt, 'sco') !== false || strpos($agt, 'unix_sv') !== false;
-            $os['unixware'] = strpos($agt, 'unix_system_v') !== false; 
-            $os['mpras']    = strpos($agt, 'ncr') !== false; 
-            $os['reliant']  = strpos($agt, 'reliant') !== false;
-            $os['dec']      = strpos($agt, 'dec') !== false || strpos($agt, 'osf1') !== false || strpos($agt, 'dec_alpha') !== false || strpos($agt, 'alphaserver') !== false || strpos($agt, 'ultrix') !== false || strpos($agt, 'alphastation') !== false;
-            $os['sinix']    = strpos($agt, 'sinix') !== false;
-            $os['freebsd']  = strpos($agt, 'freebsd') !== false;
-            $os['bsd']      = strpos($agt, 'bsd') !== false;
-            $os['unix']     = strpos($agt, 'x11') !== false || strpos($agt, 'unix') !== false || $os['sun'] || $os['irix'] || $os['hpux'] || $os['sco'] || $os['unixware'] || $os['mpras'] || $os['reliant'] || $os['dec'] || $os['sinix'] || $os['aix'] || $os['linux'] || $os['bsd'] || $os['freebsd'];
-            $os['vms']      = strpos($agt, 'vax') !== false || strpos($agt, 'openvms') !== false;
-        }
-
-        // Setup the quirks
-        if ($detectFlags[NET_USERAGENT_DETECT_ALL] || 
-            ($detectFlags[NET_USERAGENT_DETECT_BROWSER] && $detectFlags[NET_USERAGENT_DETECT_QUIRKS])) {
-            if ($browser['konq']) {
-                Net_UserAgent_Detect::setQuirk('empty_file_input_value');
-            }
-
-            if ($browser['ie']) {
-                Net_UserAgent_Detect::setQuirk('cache_ssl_downloads');
-            }
-
-            if ($browser['ie6']) {
-                Net_UserAgent_Detect::setQuirk('scrollbar_in_way');
-            }
-
-            if ($browser['ie5']) {
-                Net_UserAgent_Detect::setQuirk('break_disposition_header');
-            }
-
-            if ($browser['ie7']) {
-                Net_UserAgent_Detect::setQuirk('popups_disabled');
-            }
-
-            if ($browser['ns6']) {
-                Net_UserAgent_Detect::setQuirk('popups_disabled');
-                Net_UserAgent_Detect::setQuirk('must_cache_forms');
-            }
-            
-            if ($browser['nav'] && $subVersion < .79) {
-                Net_UserAgent_Detect::setQuirk('nested_table_render_bug');
-            }
-        }
-            
-        // Set features
-        if ($detectFlags[NET_USERAGENT_DETECT_ALL] || 
-            ($detectFlags[NET_USERAGENT_DETECT_BROWSER] && $detectFlags[NET_USERAGENT_DETECT_FEATURES])) {
-            if ($browser['gecko']) {
-                preg_match(';gecko/([\d]+)\b;i', $agt, $matches);
-                Net_UserAgent_Detect::setFeature('gecko', $matches[1]);
-            }
-
-            if ($browser['gecko'] || ($browser['ie5up'] && !$browser['iemobile']) || $browser['konq'] || $browser['opera8up'] && !$os['wince']) {
-                Net_UserAgent_Detect::setFeature('ajax');
-            }
-
-            if ($browser['ns6up'] || $browser['opera5up'] || $browser['konq'] || $browser['netgem']) {
-                Net_UserAgent_Detect::setFeature('dom');
-            }
-
-            if ($browser['ie4up'] || $browser['ns4up'] || $browser['opera5up'] || $browser['konq'] || $browser['netgem']) {
-                Net_UserAgent_Detect::setFeature('dhtml');
-            }
-
-            if ($browser['firefox1.5'] || $browser['firefox2.x'] || $browser['opera9up']) {
-                Net_UserAgent_Detect::setFeature('svg');
-            }
-
-            if ($browser['gecko'] || $browser['ns6up'] || $browser['ie5up'] || $browser['konq'] || $browser['opera7up']) {
-                Net_UserAgent_Detect::setFeature('css2');
-            }
-        }
-
-        if ($detectFlags[NET_USERAGENT_DETECT_ALL] || $detectFlags[NET_USERAGENT_DETECT_ACCEPT]) {
-            $mimetypes = preg_split(';[\s,]+;', substr(getenv('HTTP_ACCEPT'), 0, strpos(getenv('HTTP_ACCEPT') . ';', ';')), -1, PREG_SPLIT_NO_EMPTY);
-            Net_UserAgent_Detect::setAcceptType((array) $mimetypes, 'mimetype');
-
-            $languages = preg_split(';[\s,]+;', substr(getenv('HTTP_ACCEPT_LANGUAGE'), 0, strpos(getenv('HTTP_ACCEPT_LANGUAGE') . ';', ';')), -1, PREG_SPLIT_NO_EMPTY);
-            if (empty($languages)) {
-                $languages = 'en';
-            }
-
-            Net_UserAgent_Detect::setAcceptType((array) $languages, 'language');
-
-            $encodings = preg_split(';[\s,]+;', substr(getenv('HTTP_ACCEPT_ENCODING'), 0, strpos(getenv('HTTP_ACCEPT_ENCODING') . ';', ';')), -1, PREG_SPLIT_NO_EMPTY);
-            Net_UserAgent_Detect::setAcceptType((array) $encodings, 'encoding');
-            
-            $charsets = preg_split(';[\s,]+;', substr(getenv('HTTP_ACCEPT_CHARSET'), 0, strpos(getenv('HTTP_ACCEPT_CHARSET') . ';', ';')), -1, PREG_SPLIT_NO_EMPTY);
-            Net_UserAgent_Detect::setAcceptType((array) $charsets, 'charset');
-        }
-    }
-    
-    // }}}
-    // {{{ setOption()
-
-    /**
-     * Sets a class option.  The available settings are:
-     * o 'userAgent' => The user agent string to detect (useful for
-     * checking a string manually).
-     * o 'detectOptions' => The level of checking to do.  A single level
-     * or an array of options.  Default is NET_USERAGENT_DETECT_ALL.
-     *
-     * @param string $in_field The option field (userAgent or detectOptions)
-     * @param mixed $in_value The value for the field
-     */
-    function setOption($in_field, $in_value)
-    {
-        $options = Net_UserAgent_Detect::_getStaticProperty('options');
-        $options[$in_field] = $in_value;
-    }
-
-    // }}}
-    // {{{ isBrowser()
-
-    /**
-     * Look up the provide browser flag and return a boolean value
-     *
-     * Given one of the flags listed in the properties, this function will return
-     * the value associated with that flag.
-     *
-     * @param  string $in_match flag to lookup
-     *
-     * @access public
-     * @return boolean whether or not the browser satisfies this flag
-     */
-    function isBrowser($in_match)
-    {
-        Net_UserAgent_Detect::detect();
-        $browser = Net_UserAgent_Detect::_getStaticProperty('browser');
-        return isset($browser[strtolower($in_match)]) ? $browser[strtolower($in_match)] : false;
-    }
-
-    // }}}
-    // {{{ getBrowser()
-
-    /**
-     * Since simply returning the "browser" is somewhat ambiguous since there
-     * are different ways to classify the browser, this function works by taking
-     * an expect list and returning the string of the first match, so put the important
-     * ones first in the array.
-     *
-     * @param  array $in_expectList the browser flags to search for
-     *
-     * @access public
-     * @return string first flag that matches
-     */
-    function getBrowser($in_expectList)
-    {
-        Net_UserAgent_Detect::detect();
-        $browser = Net_UserAgent_Detect::_getStaticProperty('browser');
-        foreach((array) $in_expectList as $brwsr) {
-            if (!empty($browser[strtolower($brwsr)])) {
-                return $brwsr;
-            }
-        }
-    }
-
-    // }}}
-    // {{{ getBrowserString()
-
-    /**
-     * This function returns the vendor string corresponding to the flag.
-     *
-     * Either use the default matches or pass in an associative array of
-     * flags and corresponding vendor strings.  This function will find
-     * the highest version flag and return the vendor string corresponding
-     * to the appropriate flag.  Be sure to pass in the flags in ascending order
-     * if you want a basic matches first, followed by more detailed matches.
-     *
-     * @param  array $in_vendorStrings (optional) array of flags matched with vendor strings
-     *
-     * @access public
-     * @return string vendor string matches appropriate flag
-     */
-    function getBrowserString($in_vendorStrings = null)
-    {
-        if (is_null($in_vendorStrings)) {
-            $in_vendorStrings = array (
-                    'ie'       => 'Microsoft Internet Explorer',
-                    'ie4up'    => 'Microsoft Internet Explorer 4.x',
-                    'ie5up'    => 'Microsoft Internet Explorer 5.x',
-                    'ie6up'    => 'Microsoft Internet Explorer 6.x',
-                    'ie7up'    => 'Microsoft Internet Explorer 7.x',
-                    'ie8up'    => 'Microsoft Internet Explorer 8.x',
-                    'ie8tr'    => 'Microsoft Internet Explorer 8.x (Compatibility View)', 
-                    'opera4'   => 'Opera 4.x',
-                    'opera5up' => 'Opera 5.x',
-                    'nav'      => 'Netscape Navigator',
-                    'ns4'      => 'Netscape 4.x',
-                    'ns6up'    => 'Mozilla/Netscape 6.x',
-                    'firefox0.x' => 'Firefox 0.x',
-                    'firefox1.x' => 'Firefox 1.x',
-                    'firefox1.5' => 'Firefox 1.5',
-                    'firefox2.x' => 'Firefox 2.x',
-                    'firefox3.x' => 'Firefox 3.x',
-                    'konq'     => 'Konqueror',
-                    'safari'   => 'Safari',
-                    'safari_mobile'     => 'Safari Mobile',
-                    'chrome'   => 'Google Chrome',
-                    'netgem'   => 'Netgem/iPlayer');
-        }
-
-        Net_UserAgent_Detect::detect();
-        $browser = Net_UserAgent_Detect::_getStaticProperty('browser');
-        foreach((array) $in_vendorStrings as $flag => $string) {
-            if (!empty($browser[$flag])) {
-                $vendorString = $string;
-            }
-        }
-
-        // if there are no matches just use the user agent leading idendifier (usually Mozilla)
-        if (!isset($vendorString)) {
-            $leadingIdentifier = Net_UserAgent_Detect::_getStaticProperty('leadingIdentifier');
-            $vendorString = $leadingIdentifier;
-        }
-        
-        return $vendorString;
-    }
-
-    // }}}
-    // {{{ isIE()
-
-    /**
-     * Determine if the browser is an Internet Explorer browser
-     *
-     * @access public
-     * @return bool whether or not this browser is an ie browser
-     */
-    function isIE()
-    {
-        Net_UserAgent_Detect::detect();
-        $browser = Net_UserAgent_Detect::_getStaticProperty('browser');
-        return !empty($browser['ie']);
-    }
-
-    // }}}
-    // {{{ isNavigator()
-
-    /**
-     * Determine if the browser is a Netscape Navigator browser
-     *
-     * @access public
-     * @return bool whether or not this browser is a Netscape Navigator browser
-     */
-    function isNavigator()
-    {
-        Net_UserAgent_Detect::detect();
-        $browser = Net_UserAgent_Detect::_getStaticProperty('browser');
-        return !empty($browser['nav']);
-    }
-
-    // }}}
-    // {{{ isNetscape()
-
-    /**
-     * Determine if the browser is a Netscape or Mozilla browser
-     *
-     * Note that this function is not the same as isNavigator, since the
-     * new Mozilla browsers are still sponsered by Netscape, and hence are
-     * Netscape products, but not the original Navigators
-     *
-     * @access public
-     * @return bool whether or not this browser is a Netscape product
-     */
-    function isNetscape()
-    {
-        Net_UserAgent_Detect::detect();
-        $browser = Net_UserAgent_Detect::_getStaticProperty('browser');
-        return !empty($browser['ns4up']);
-    }
-    
-    // }}}
-    // {{{ isOS()
-
-    /**
-     * Look up the provide OS flag and return a boolean value
-     *
-     * Given one of the flags listed in the properties, this function will return
-     * the value associated with that flag for the operating system.
-     *
-     * @param  string $in_match flag to lookup
-     *
-     * @access public
-     * @return boolean whether or not the OS satisfies this flag
-     */
-    function isOS($in_match)
-    {
-        Net_UserAgent_Detect::detect();
-        $os = Net_UserAgent_Detect::_getStaticProperty('os');
-        return isset($os[strtolower($in_match)]) ? $os[strtolower($in_match)] : false;
-    }
-
-    // }}}
-    // {{{ getOS()
-
-    /**
-     * Since simply returning the "os" is somewhat ambiguous since there
-     * are different ways to classify the browser, this function works by taking
-     * an expect list and returning the string of the first match, so put the important
-     * ones first in the array.
-     *
-     * @access public
-     * @return string first flag that matches
-     */
-    function getOS($in_expectList)
-    {
-        Net_UserAgent_Detect::detect();
-        $os = Net_UserAgent_Detect::_getStaticProperty('os');
-        foreach((array) $in_expectList as $expectOs) {
-            if (!empty($os[strtolower($expectOs)])) {
-                return $expectOs;
-            }
-        }
-    }
-
-    // }}}
-    // {{{ getOSString()
-
-    /**
-     * This function returns the os string corresponding to the flag.
-     *
-     * Either use the default matches or pass in an associative array of
-     * flags and corresponding os strings.  This function will find
-     * the highest version flag and return the os string corresponding
-     * to the appropriate flag.  Be sure to pass in the flags in ascending order
-     * if you want a basic matches first, followed by more detailed matches.
-     *
-     * @param  array $in_osStrings (optional) array of flags matched with os strings
-     *
-     * @access public
-     * @return string os string matches appropriate flag
-     */
-    function getOSString($in_osStrings = null)
-    {
-        if (is_null($in_osStrings)) {
-            $in_osStrings = array(
-                   'win'   => 'Microsoft Windows',
-                   'wince' => 'Microsoft Windows CE',
-                   'win9x' => 'Microsoft Windows 9x',
-                   'winme' => 'Microsoft Windows Millenium',
-                   'win2k' => 'Microsoft Windows 2000',
-                   'winnt' => 'Microsoft Windows NT',
-                   'winxp' => 'Microsoft Windows XP',
-                   'win2003' => 'Microsoft Windows 2003',
-                   'vista' => 'Microsoft Windows Vista',
-                   'win7' => 'Microsoft Windows 7', 
-                   'mac'   => 'Macintosh',
-                   'unix'  => 'Linux/Unix');
-        }
-
-        Net_UserAgent_Detect::detect();
-        $osString = 'Unknown';
-
-        $os = Net_UserAgent_Detect::_getStaticProperty('os');
-        foreach((array) $in_osStrings as $flag => $string) {
-            if (!empty($os[$flag])) {
-                $osString = $string;
-            }
-        }
-
-        return $osString;
-    }
-
-    // }}}
-    // {{{ setQuirk()
-
-    /**
-     * Set a unique behavior for the current browser.
-     *
-     * Many client browsers do some really funky things, and this
-     * mechanism allows the coder to determine if an excepetion must
-     * be made with the current client.
-     *
-     * @param string $in_quirk The quirk to set
-     * @param string $in_hasQuirk (optional) Does the browser have the quirk?
-     *
-     * @access public
-     * @return void
-     */
-    function setQuirk($in_quirk, $in_hasQuirk = true)
-    {
-        $quirks = Net_UserAgent_Detect::_getStaticProperty('quirks');
-        $hasQuirk = !empty($in_hasQuirk); 
-        $quirks[strtolower($in_quirk)] = $hasQuirk;
-    }
-
-    // }}}
-    // {{{ hasQuirk()
-
-    /**
-     * Check a unique behavior for the current browser.
-     *
-     * Many client browsers do some really funky things, and this
-     * mechanism allows the coder to determine if an excepetion must
-     * be made with the current client.
-     *
-     * @param string $in_quirk The quirk to detect
-     *
-     * @access public
-     * @return bool whether or not browser has this quirk
-     */
-    function hasQuirk($in_quirk)
-    {
-        return (bool) Net_UserAgent_Detect::getQuirk($in_quirk);
-    }
-    
-    // }}}
-    // {{{ getQuirk()
-
-    /**
-     * Get the unique behavior for the current browser.
-     *
-     * Many client browsers do some really funky things, and this
-     * mechanism allows the coder to determine if an excepetion must
-     * be made with the current client.
-     *
-     * @param string $in_quirk The quirk to detect
-     *
-     * @access public
-     * @return string value of the quirk, in this case usually a boolean
-     */
-    function getQuirk($in_quirk)
-    {
-        Net_UserAgent_Detect::detect();
-        $quirks = Net_UserAgent_Detect::_getStaticProperty('quirks');
-        return isset($quirks[strtolower($in_quirk)]) ? $quirks[strtolower($in_quirk)] : null; 
-    }
-
-    // }}}
-    // {{{ setFeature()
-
-    /**
-     * Set capabilities for the current browser.
-     *
-     * Since the capabilities of client browsers vary widly, this interface
-     * helps keep track of the core features of a client, such as if the client
-     * supports dhtml, dom, javascript, etc.
-     *
-     * @param string $in_feature The feature to set
-     * @param string $in_hasFeature (optional) Does the browser have the feature?
-     *
-     * @access public
-     * @return void
-     */
-    function setFeature($in_feature, $in_hasFeature = true)
-    {
-        $features = Net_UserAgent_Detect::_getStaticProperty('features');
-        $features[strtolower($in_feature)] = $in_hasFeature;
-    }
-
-    // }}}
-    // {{{ hasFeature()
-
-    /**
-     * Check the capabilities for the current browser.
-     *
-     * Since the capabilities of client browsers vary widly, this interface
-     * helps keep track of the core features of a client, such as if the client
-     * supports dhtml, dom, javascript, etc.
-     *
-     * @param string $in_feature The feature to detect
-     *
-     * @access public
-     * @return bool whether or not the current client has this feature
-     */
-    function hasFeature($in_feature)
-    {
-        return (bool) Net_UserAgent_Detect::getFeature($in_feature);
-    }
-    
-    // }}}
-    // {{{ getFeature()
-
-    /**
-     * Get the capabilities for the current browser.
-     *
-     * Since the capabilities of client browsers vary widly, this interface
-     * helps keep track of the core features of a client, such as if the client
-     * supports dhtml, dom, javascript, etc.
-     *
-     * @param string $in_feature The feature to detect
-     *
-     * @access public
-     * @return string value of the feature requested
-     */
-    function getFeature($in_feature)
-    {
-        Net_UserAgent_Detect::detect();
-        $features = Net_UserAgent_Detect::_getStaticProperty('features');
-        return isset($features[strtolower($in_feature)]) ? $features[strtolower($in_feature)] : null; 
-    }
-
-    // }}}
-    // {{{ getAcceptType()
-
-    /**
-     * Retrive the accept type for the current browser.
-     *
-     * To keep track of the mime-types, languages, charsets and encodings
-     * that each browser accepts we use associative arrays for each type.
-     * This function works like getBrowser() as it takes an expect list
-     * and returns the first match.  For instance, to find the language
-     * you would pass in your allowed languages and see if any of the
-     * languages set in the browser match.
-     *
-     * @param  string $in_expectList values to check
-     * @param  string $in_type type of accept
-     *
-     * @access public
-     * @return string the first matched value
-     */
-    function getAcceptType($in_expectList, $in_type)
-    {
-        Net_UserAgent_Detect::detect();
-        $type = strtolower($in_type);
-
-        if ($type == 'mimetype' || $type == 'language' || $type == 'charset' || $type == 'encoding') {
-            $typeArray = Net_UserAgent_Detect::_getStaticProperty($type);
-            foreach((array) $in_expectList as $match) {
-                if (!empty($typeArray[$match])) {
-                    return $match;
-                }
-            }
-        }
-
-        return null;
-    }
-
-    // }}}
-    // {{{ setAcceptType()
-
-    /**
-     * Set the accept types for the current browser.
-     *
-     * To keep track of the mime-types, languages, charsets and encodings
-     * that each browser accepts we use associative arrays for each type.
-     * This function takes and array of accepted values for the type and
-     * records them for retrieval.
-     *
-     * @param  array $in_values values of the accept type
-     * @param  string $in_type type of accept
-     *
-     * @access public
-     * @return void
-     */
-    function setAcceptType($in_values, $in_type)
-    {
-        $type = strtolower($in_type);
-
-        if ($type == 'mimetype' || $type == 'language' || $type == 'charset' || $type == 'encoding') {
-            $typeArray = Net_UserAgent_Detect::_getStaticProperty($type);
-            foreach((array) $in_values as $value) {
-                $typeArray[$value] = true;
-            }
-        }
-    }
-
-    // }}}
-    // {{{ hasAcceptType()
-
-    /**
-     * Check the accept types for the current browser.
-     *
-     * To keep track of the mime-types, languages, charsets and encodings
-     * that each browser accepts we use associative arrays for each type.
-     * This function checks the array for the given type and determines if
-     * the browser accepts it.
-     *
-     * @param  string $in_value values to check
-     * @param  string $in_type type of accept
-     *
-     * @access public
-     * @return bool whether or not the value is accept for this type
-     */
-    function hasAcceptType($in_value, $in_type)
-    {
-        return (bool) Net_UserAgent_Detect::getAcceptType((array) $in_value, $in_type);
-    }
-
-    // }}}
-    // {{{ getUserAgent()
-
-    /**
-     * Return the user agent string that is being worked on
-     *
-     * @access public
-     * @return string user agent
-     */
-    function getUserAgent()
-    {
-        Net_UserAgent_Detect::detect();
-        $userAgent = Net_UserAgent_Detect::_getStaticProperty('userAgent');
-        return $userAgent;
-    }
-
-    // }}}
-    // {{{ _getStaticProperty()
-
-    /**
-     * Copy of getStaticProperty() from PEAR.php to avoid having to
-     * include PEAR.php
-     *
-     * @access private
-     * @param  string $var    The variable to retrieve.
-     * @return mixed   A reference to the variable. If not set it will be
-     *                 auto initialised to NULL.
-     */
-    function &_getStaticProperty($var)
-    {
-        static $properties;
-        return $properties[$var];
-    }
-
-    // }}}
-}
-?>
diff --git a/civicrm/packages/Net/UserAgent/Detect/APC.php b/civicrm/packages/Net/UserAgent/Detect/APC.php
deleted file mode 100644
index 2844fe338a1e803f78fc79f9155176b7c0f8be6b..0000000000000000000000000000000000000000
--- a/civicrm/packages/Net/UserAgent/Detect/APC.php
+++ /dev/null
@@ -1,180 +0,0 @@
-<?php
-/**
- * Net_UserAgent_Detect_APC.php 
- *
- * PHP version 4.2
- *
- * Copyright (c) 1997-2003 The PHP Group                                
- *
- * This source file is subject to version 2.0 of the PHP license,       
- * that is bundled with this package in the file LICENSE, and is        
- * available at through the world-wide-web at                           
- * http://www.php.net/license/2_02.txt.                                 
- * If you did not receive a copy of the PHP license and are unable to   
- * obtain it through the world-wide-web, please send a note to          
- * license@php.net so we can mail you a copy immediately.
- *
- * @category Net
- * @package  Net_UserAgent
- * @author   Lucas Nealan <lucas@facebook.com> 
- * @license  http://www.php.net/license/2_02.txt PHP 2.0 Licence
- * @version  CVS: $Id: APC.php,v 1.3 2009/06/08 04:49:23 clockwerx Exp $
- * @link     http://pear.php.net/package/Net_UserAgent_Detect
- */
-
-require_once 'Net/UserAgent/Detect.php';
-
-/**
- * Net_UserAgent_Detect_APC
- *
- * PHP version 4.2
- *
- * Copyright (c) 1997-2003 The PHP Group                                
- *
- * This source file is subject to version 2.0 of the PHP license,       
- * that is bundled with this package in the file LICENSE, and is        
- * available at through the world-wide-web at                           
- * http://www.php.net/license/2_02.txt.                                 
- * If you did not receive a copy of the PHP license and are unable to   
- * obtain it through the world-wide-web, please send a note to          
- * license@php.net so we can mail you a copy immediately.
- *
- * @category Net
- * @package  Net_UserAgent
- * @author   Lucas Nealan <lucas@facebook.com> 
- * @license  http://www.php.net/license/2_02.txt PHP 2.0 Licence
- * @link     http://pear.php.net/package/Net_UserAgent_Detect
- */
-class Net_UserAgent_Detect_APC extends Net_UserAgent_Detect
-{
-    var $key = '';
-
-    /**
-     * Class constructor
-     *
-     * @param string $in_userAgent    (optional) User agent override.  
-     * @param mixed  $in_detect       (optional) The level of checking to do. 
-     * @param mixed  $ua_cache_window Unknown
-     */
-    function __construct($in_userAgent = null, $in_detect = null,
-                                      $ua_cache_window = 600)
-    {
-        $data     = '';
-        $restored = false;
-
-        // don't cache after time period
-        $ua_cache_timeout = apc_fetch('useragent:cache_timeout');               
-
-        if ($ua_cache_window > 0) {
-            if (!$ua_cache_timeout) {
-                // check apc uptime and disable after x mins
-                $apc_data = apc_cache_info('file', true);
-
-                if (isset($apc_data['start_time'])) {
-                    $uptime = $apc_data['start_time'];
-
-                    // timeout and disable after 10 minutes of uptime
-                    if (time() - $uptime > $ua_cache_window) {
-                        apc_store('useragent:cache_timeout', true);
-                        $ua_cache_timeout = true; // don't cache this one either
-                    }
-                }
-            }
-
-            if (!$this->key) {
-                $key_flags = '';
-                if ($in_detect !== null) {
-                    $key_flags = implode('-', $in_detect);
-                }
-                $this->key = 'useragent:'.md5($in_userAgent.$key_flags);
-            }
-
-            if ($data = apc_fetch($this->key)) {
-                $success = null;
-                $data    = unserialize($data);
-
-                if ($data) {
-                    $restored = $this->cacheRestore($data);
-                }
-            }
-        }
-
-        if (!$data) {
-            $this->detect($in_userAgent, $in_detect);
-
-            if ($ua_cache_window > 0 && !$ua_cache_timeout) {
-                $this->cacheSave();
-            }
-        }
-    }
-
-    /**
-     * To be used in place of the contructor to return only open instance.
-     *
-     * @param string $in_userAgent (optional) User agent override.  
-     * @param mixed  $in_detect    (optional) The level of checking to do. 
-     *
-     * @access public 
-     * @return object Net_UserAgent_Detect instance
-     */
-    function &singleton($in_userAgent = null, $in_detect = null) 
-    {
-        static $instance;
-
-        if (!isset($instance)) {
-            $instance = new Net_UserAgent_Detect_APC($in_userAgent, $in_detect);
-        }
-
-        return $instance;
-    }
-
-    /**
-     * Restore cached items
-     *
-     * @param mixed[] $cache An array of items to restore
-     *
-     * @return bool
-     */
-    function cacheRestore($cache) 
-    {
-        if (is_array($cache)) {
-            foreach ($cache as $prop => $value) {
-                $ptr = Net_UserAgent_Detect::_getStaticProperty($prop);
-                $ptr = $value;
-            }
-
-            return true;
-        }
-
-        return false;
-    }
-
-    /**
-     * Store items in APC
-     *
-     * @return void
-     */
-    function cacheSave() 
-    {
-        if ($this->key) {
-            $items = array('browser',
-                          'features',
-                          'leadingIdentifier',
-                          'majorVersion',
-                          'options',
-                          'os',
-                          'quirks',
-                          'subVersion',
-                          'userAgent',
-                          'version');
-
-            $data = array();
-            foreach ($items as $item) {
-                $data[$item] = Net_UserAgent_Detect::_getStaticProperty($item);
-            }
-
-            apc_store($this->key, serialize($data));
-        }
-    }
-}
-?>
diff --git a/civicrm/packages/Structures/Graph.php b/civicrm/packages/Structures/Graph.php
deleted file mode 100644
index 2d3ff92834ed253a86d222d268db97d16e682bf0..0000000000000000000000000000000000000000
--- a/civicrm/packages/Structures/Graph.php
+++ /dev/null
@@ -1,154 +0,0 @@
-<?php
-/* vim: set expandtab tabstop=4 shiftwidth=4 foldmethod=marker: */
-// +-----------------------------------------------------------------------------+
-// | Copyright (c) 2003 Sérgio Gonçalves Carvalho                                |
-// +-----------------------------------------------------------------------------+
-// | This file is part of Structures_Graph.                                      |
-// |                                                                             |
-// | Structures_Graph is free software; you can redistribute it and/or modify    |
-// | it under the terms of the GNU Lesser General Public License as published by |
-// | the Free Software Foundation; either version 2.1 of the License, or         |
-// | (at your option) any later version.                                         |
-// |                                                                             |
-// | Structures_Graph is distributed in the hope that it will be useful,         |
-// | but WITHOUT ANY WARRANTY; without even the implied warranty of              |
-// | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the               |
-// | GNU Lesser General Public License for more details.                         |
-// |                                                                             |
-// | You should have received a copy of the GNU Lesser General Public License    |
-// | along with Structures_Graph; if not, write to the Free Software             |
-// | Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA                    |
-// | 02111-1307 USA                                                              |
-// +-----------------------------------------------------------------------------+
-// | Author: Sérgio Carvalho <sergio.carvalho@portugalmail.com>                  |
-// +-----------------------------------------------------------------------------+
-//
-/**
- * The Graph.php file contains the definition of the Structures_Graph class 
- *
- * @see Structures_Graph
- * @package Structures_Graph
- */
-
-/* dependencies {{{ */
-/** PEAR base classes */
-require_once 'PEAR.php';
-/** Graph Node */
-require_once 'Structures/Graph/Node.php';
-/* }}} */
-
-define('STRUCTURES_GRAPH_ERROR_GENERIC', 100);
-
-/* class Structures_Graph {{{ */
-/**
- * The Structures_Graph class represents a graph data structure. 
- *
- * A Graph is a data structure composed by a set of nodes, connected by arcs.
- * Graphs may either be directed or undirected. In a directed graph, arcs are 
- * directional, and can be traveled only one way. In an undirected graph, arcs
- * are bidirectional, and can be traveled both ways.
- *
- * @author		Sérgio Carvalho <sergio.carvalho@portugalmail.com> 
- * @copyright	(c) 2004 by Sérgio Carvalho
- * @package Structures_Graph
- */
-/* }}} */
-class Structures_Graph {
-    /* fields {{{ */
-    /**
-     * @access private
-     */
-    var $_nodes = array();
-    /**
-     * @access private
-     */
-    var $_directed = false;
-    /* }}} */
-
-    /* Constructor {{{ */
-    /**
-    *
-    * Constructor
-    *
-    * @param    boolean    Set to true if the graph is directed. Set to false if it is not directed. (Optional, defaults to true)
-    * @access	public
-    */
-    function __construct($directed = true) {
-        $this->_directed = $directed;
-    }
-    /* }}} */
-
-    /* isDirected {{{ */
-    /**
-    *
-    * Return true if a graph is directed
-    *
-    * @return	boolean	 true if the graph is directed
-    * @access	public
-    */
-    function isDirected() {
-        return (boolean) $this->_directed;
-    }
-    /* }}} */
-
-    /* addNode {{{ */
-    /**
-    *
-    * Add a Node to the Graph
-    *
-    * @param    Structures_Graph_Node   The node to be added.
-    * @access	public
-    */
-    function addNode(&$newNode) {
-        // We only add nodes
-        if (!is_a($newNode, 'Structures_Graph_Node')) return Pear::raiseError('Structures_Graph::addNode received an object that is not a Structures_Graph_Node', STRUCTURES_GRAPH_ERROR_GENERIC);
-        // Graphs are node *sets*, so duplicates are forbidden. We allow nodes that are exactly equal, but disallow equal references.
-        foreach($this->_nodes as $key => $node) {
-            /*
-             ZE1 equality operators choke on the recursive cycle introduced by the _graph field in the Node object.
-             So, we'll check references the hard way (change $this->_nodes[$key] and check if the change reflects in 
-             $node)
-            */
-            $savedData = $this->_nodes[$key];
-            $referenceIsEqualFlag = false;
-            $this->_nodes[$key] = true;
-            if ($node === true) {
-                $this->_nodes[$key] = false;
-                if ($node === false) $referenceIsEqualFlag = true;
-            }
-            $this->_nodes[$key] = $savedData;
-            if ($referenceIsEqualFlag) return Pear::raiseError('Structures_Graph::addNode received an object that is a duplicate for this dataset', STRUCTURES_GRAPH_ERROR_GENERIC);
-        }
-        $this->_nodes[] =& $newNode;
-        $newNode->setGraph($this);
-    }
-    /* }}} */
-
-    /* removeNode (unimplemented) {{{ */
-    /**
-    *
-    * Remove a Node from the Graph
-    *
-    * @todo     This is unimplemented
-    * @param    Structures_Graph_Node   The node to be removed from the graph
-    * @access	public
-    */
-    function removeNode(&$node) {
-    }
-    /* }}} */
-
-    /* getNodes {{{ */
-    /**
-    *
-    * Return the node set, in no particular order. For ordered node sets, use a Graph Manipulator insted.
-    *
-    * @access   public
-    * @see      Structures_Graph_Manipulator_TopologicalSorter
-    * @return   array The set of nodes in this graph
-    */
-    function &getNodes() {
-        return $this->_nodes;
-    }
-    /* }}} */
-}
-?>
diff --git a/civicrm/packages/Structures/Graph/Manipulator/AcyclicTest.php b/civicrm/packages/Structures/Graph/Manipulator/AcyclicTest.php
deleted file mode 100644
index fc1ba92f6a202aa9e9ae8381596bb2af3fd0ba88..0000000000000000000000000000000000000000
--- a/civicrm/packages/Structures/Graph/Manipulator/AcyclicTest.php
+++ /dev/null
@@ -1,136 +0,0 @@
-<?php
-/* vim: set expandtab tabstop=4 shiftwidth=4 foldmethod=marker: */
-// +-----------------------------------------------------------------------------+
-// | Copyright (c) 2003 Sérgio Gonçalves Carvalho                                |
-// +-----------------------------------------------------------------------------+
-// | This file is part of Structures_Graph.                                      |
-// |                                                                             |
-// | Structures_Graph is free software; you can redistribute it and/or modify    |
-// | it under the terms of the GNU Lesser General Public License as published by |
-// | the Free Software Foundation; either version 2.1 of the License, or         |
-// | (at your option) any later version.                                         |
-// |                                                                             |
-// | Structures_Graph is distributed in the hope that it will be useful,         |
-// | but WITHOUT ANY WARRANTY; without even the implied warranty of              |
-// | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the               |
-// | GNU Lesser General Public License for more details.                         |
-// |                                                                             |
-// | You should have received a copy of the GNU Lesser General Public License    |
-// | along with Structures_Graph; if not, write to the Free Software             |
-// | Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA                    |
-// | 02111-1307 USA                                                              |
-// +-----------------------------------------------------------------------------+
-// | Author: Sérgio Carvalho <sergio.carvalho@portugalmail.com>                  |
-// +-----------------------------------------------------------------------------+
-//
-/**
- * This file contains the definition of the Structures_Graph_Manipulator_AcyclicTest graph manipulator.
- * 
- * @see Structures_Graph_Manipulator_AcyclicTest
- * @package Structures_Graph
- */
-
-/* dependencies {{{ */
-/** */
-require_once 'PEAR.php';
-/** */
-require_once 'Structures/Graph.php';
-/** */
-require_once 'Structures/Graph/Node.php';
-/* }}} */
-
-/* class Structures_Graph_Manipulator_AcyclicTest {{{ */
-/**
- * The Structures_Graph_Manipulator_AcyclicTest is a graph manipulator
- * which tests whether a graph contains a cycle. 
- * 
- * The definition of an acyclic graph used in this manipulator is that of a 
- * DAG. The graph must be directed, or else it is considered cyclic, even when 
- * there are no arcs.
- *
- * @author		Sérgio Carvalho <sergio.carvalho@portugalmail.com> 
- * @copyright	(c) 2004 by Sérgio Carvalho
- * @package Structures_Graph
- */
-class Structures_Graph_Manipulator_AcyclicTest {
-    /* _nonVisitedInDegree {{{ */
-    /**
-    *
-    * This is a variant of Structures_Graph::inDegree which does 
-    * not count nodes marked as visited.
-    *
-    * @access   private
-    * @return	integer	 Number of non-visited nodes that link to this one
-    */
-    function _nonVisitedInDegree(&$node) {
-        $result = 0;
-        $graphNodes =& $node->_graph->getNodes();
-        foreach (array_keys($graphNodes) as $key) {
-            if ((!$graphNodes[$key]->getMetadata('acyclic-test-visited')) && $graphNodes[$key]->connectsTo($node)) $result++;
-        }
-        return $result;
-        
-    }
-    /* }}} */
-
-    /* _isAcyclic {{{ */
-    /**
-    * @access   private
-    */
-    function _isAcyclic(&$graph) {
-        // Mark every node as not visited
-        $nodes =& $graph->getNodes();
-        $nodeKeys = array_keys($nodes);
-        $refGenerator = array();
-        foreach($nodeKeys as $key) {
-            $refGenerator[] = false;
-            $nodes[$key]->setMetadata('acyclic-test-visited', $refGenerator[sizeof($refGenerator) - 1]);
-        }
-
-        // Iteratively peel off leaf nodes
-        do {
-            // Find out which nodes are leafs (excluding visited nodes)
-            $leafNodes = array();
-            foreach($nodeKeys as $key) {
-                if ((!$nodes[$key]->getMetadata('acyclic-test-visited')) && Structures_Graph_Manipulator_AcyclicTest::_nonVisitedInDegree($nodes[$key]) == 0) {
-                    $leafNodes[] =& $nodes[$key];
-                }
-            }
-            // Mark leafs as visited
-            for ($i=sizeof($leafNodes) - 1; $i>=0; $i--) {
-                $visited =& $leafNodes[$i]->getMetadata('acyclic-test-visited');
-                $visited = true;
-                $leafNodes[$i]->setMetadata('acyclic-test-visited', $visited);
-            }
-        } while (sizeof($leafNodes) > 0);
-
-        // If graph is a DAG, there should be no non-visited nodes. Let's try to prove otherwise
-        $result = true;
-        foreach($nodeKeys as $key) if (!$nodes[$key]->getMetadata('acyclic-test-visited')) $result = false;
-        
-        // Cleanup visited marks
-        foreach($nodeKeys as $key) $nodes[$key]->unsetMetadata('acyclic-test-visited');
-
-        return $result;
-    }
-    /* }}} */
-
-    /* isAcyclic {{{ */
-    /**
-    *
-    * isAcyclic returns true if a graph contains no cycles, false otherwise.
-    *
-    * @return	boolean	 true iff graph is acyclic
-    * @access	public
-    */
-    function isAcyclic(&$graph) {
-        // We only test graphs
-        if (!is_a($graph, 'Structures_Graph')) return Pear::raiseError('Structures_Graph_Manipulator_AcyclicTest::isAcyclic received an object that is not a Structures_Graph', STRUCTURES_GRAPH_ERROR_GENERIC);
-        if (!$graph->isDirected()) return false; // Only directed graphs may be acyclic
-
-        return Structures_Graph_Manipulator_AcyclicTest::_isAcyclic($graph);
-    }
-    /* }}} */
-}
-/* }}} */
-?>
diff --git a/civicrm/packages/Structures/Graph/Manipulator/TopologicalSorter.php b/civicrm/packages/Structures/Graph/Manipulator/TopologicalSorter.php
deleted file mode 100644
index 98a9fa0b607ec403b52434347cc43b51de49a700..0000000000000000000000000000000000000000
--- a/civicrm/packages/Structures/Graph/Manipulator/TopologicalSorter.php
+++ /dev/null
@@ -1,153 +0,0 @@
-<?php
-/* vim: set expandtab tabstop=4 shiftwidth=4 foldmethod=marker: */
-// +-----------------------------------------------------------------------------+
-// | Copyright (c) 2003 Sérgio Gonçalves Carvalho                                |
-// +-----------------------------------------------------------------------------+
-// | This file is part of Structures_Graph.                                      |
-// |                                                                             |
-// | Structures_Graph is free software; you can redistribute it and/or modify    |
-// | it under the terms of the GNU Lesser General Public License as published by |
-// | the Free Software Foundation; either version 2.1 of the License, or         |
-// | (at your option) any later version.                                         |
-// |                                                                             |
-// | Structures_Graph is distributed in the hope that it will be useful,         |
-// | but WITHOUT ANY WARRANTY; without even the implied warranty of              |
-// | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the               |
-// | GNU Lesser General Public License for more details.                         |
-// |                                                                             |
-// | You should have received a copy of the GNU Lesser General Public License    |
-// | along with Structures_Graph; if not, write to the Free Software             |
-// | Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA                    |
-// | 02111-1307 USA                                                              |
-// +-----------------------------------------------------------------------------+
-// | Author: Sérgio Carvalho <sergio.carvalho@portugalmail.com>                  |
-// +-----------------------------------------------------------------------------+
-//
-/**
- * This file contains the definition of the Structures_Graph_Manipulator_TopologicalSorter class.
- * 
- * @see Structures_Graph_Manipulator_TopologicalSorter
- * @package Structures_Graph
- */
-
-/* dependencies {{{ */
-/** */
-require_once 'PEAR.php';
-/** */
-require_once 'Structures/Graph.php';
-/** */
-require_once 'Structures/Graph/Node.php';
-/** */
-require_once 'Structures/Graph/Manipulator/AcyclicTest.php';
-/* }}} */
-
-/* class Structures_Graph_Manipulator_TopologicalSorter {{{ */
-/**
- * The Structures_Graph_Manipulator_TopologicalSorter is a manipulator 
- * which is able to return the set of nodes in a graph, sorted by topological 
- * order.
- *
- * A graph may only be sorted topologically iff it's a DAG. You can test it
- * with the Structures_Graph_Manipulator_AcyclicTest.
- * 
- * @author		Sérgio Carvalho <sergio.carvalho@portugalmail.com> 
- * @copyright	(c) 2004 by Sérgio Carvalho
- * @see     Structures_Graph_Manipulator_AcyclicTest
- * @package Structures_Graph
- */
-class Structures_Graph_Manipulator_TopologicalSorter {
-    /* _nonVisitedInDegree {{{ */
-    /**
-    *
-    * This is a variant of Structures_Graph::inDegree which does 
-    * not count nodes marked as visited.
-    *
-    * @access   private
-    * @return	integer	 Number of non-visited nodes that link to this one
-    */
-    function _nonVisitedInDegree(&$node) {
-        $result = 0;
-        $graphNodes =& $node->_graph->getNodes();
-        foreach (array_keys($graphNodes) as $key) {
-            if ((!$graphNodes[$key]->getMetadata('topological-sort-visited')) && $graphNodes[$key]->connectsTo($node)) $result++;
-        }
-        return $result;
-        
-    }
-    /* }}} */
-
-    /* _sort {{{ */
-    /**
-    * @access   private
-    */
-    function _sort(&$graph) {
-        // Mark every node as not visited
-        $nodes =& $graph->getNodes();
-        $nodeKeys = array_keys($nodes);
-        $refGenerator = array();
-        foreach($nodeKeys as $key) {
-            $refGenerator[] = false;
-            $nodes[$key]->setMetadata('topological-sort-visited', $refGenerator[sizeof($refGenerator) - 1]);
-        }
-
-        // Iteratively peel off leaf nodes
-        $topologicalLevel = 0;
-        do {
-            // Find out which nodes are leafs (excluding visited nodes)
-            $leafNodes = array();
-            foreach($nodeKeys as $key) {
-                if ((!$nodes[$key]->getMetadata('topological-sort-visited')) && Structures_Graph_Manipulator_TopologicalSorter::_nonVisitedInDegree($nodes[$key]) == 0) {
-                    $leafNodes[] =& $nodes[$key];
-                }
-            }
-            // Mark leafs as visited
-            $refGenerator[] = $topologicalLevel;
-            for ($i=sizeof($leafNodes) - 1; $i>=0; $i--) {
-                $visited =& $leafNodes[$i]->getMetadata('topological-sort-visited');
-                $visited = true;
-                $leafNodes[$i]->setMetadata('topological-sort-visited', $visited);
-                $leafNodes[$i]->setMetadata('topological-sort-level', $refGenerator[sizeof($refGenerator) - 1]);
-            }
-            $topologicalLevel++;
-        } while (sizeof($leafNodes) > 0);
-
-        // Cleanup visited marks
-        foreach($nodeKeys as $key) $nodes[$key]->unsetMetadata('topological-sort-visited');
-    }
-    /* }}} */
-
-    /* sort {{{ */
-    /**
-    *
-    * sort returns the graph's nodes, sorted by topological order. 
-    * 
-    * The result is an array with 
-    * as many entries as topological levels. Each entry in this array is an array of nodes within
-    * the given topological level.
-    *
-    * @return	array	 The graph's nodes, sorted by topological order.
-    * @access	public
-    */
-    function sort(&$graph) {
-        // We only sort graphs
-        if (!is_a($graph, 'Structures_Graph')) return Pear::raiseError('Structures_Graph_Manipulator_TopologicalSorter::sort received an object that is not a Structures_Graph', STRUCTURES_GRAPH_ERROR_GENERIC);
-        if (!Structures_Graph_Manipulator_AcyclicTest::isAcyclic($graph)) return Pear::raiseError('Structures_Graph_Manipulator_TopologicalSorter::sort received an graph that has cycles', STRUCTURES_GRAPH_ERROR_GENERIC);
-
-        Structures_Graph_Manipulator_TopologicalSorter::_sort($graph);
-        $result = array();
-
-        // Fill out result array
-        $nodes =& $graph->getNodes();
-        $nodeKeys = array_keys($nodes);
-        foreach($nodeKeys as $key) {
-            if (!array_key_exists($nodes[$key]->getMetadata('topological-sort-level'), $result)) $result[$nodes[$key]->getMetadata('topological-sort-level')] = array();
-            $result[$nodes[$key]->getMetadata('topological-sort-level')][] =& $nodes[$key];
-            $nodes[$key]->unsetMetadata('topological-sort-level');
-        }
-
-        return $result;
-    }
-    /* }}} */
-}
-/* }}} */
-?>
diff --git a/civicrm/packages/Structures/Graph/Node.php b/civicrm/packages/Structures/Graph/Node.php
deleted file mode 100644
index e754175d763976c84954d2ef734b26b9ea4be547..0000000000000000000000000000000000000000
--- a/civicrm/packages/Structures/Graph/Node.php
+++ /dev/null
@@ -1,338 +0,0 @@
-<?php
-/* vim: set expandtab tabstop=4 shiftwidth=4 foldmethod=marker: */
-// +-----------------------------------------------------------------------------+
-// | Copyright (c) 2003 Sérgio Gonçalves Carvalho                                |
-// +-----------------------------------------------------------------------------+
-// | This file is part of Structures_Graph.                                      |
-// |                                                                             |
-// | Structures_Graph is free software; you can redistribute it and/or modify    |
-// | it under the terms of the GNU Lesser General Public License as published by |
-// | the Free Software Foundation; either version 2.1 of the License, or         |
-// | (at your option) any later version.                                         |
-// |                                                                             |
-// | Structures_Graph is distributed in the hope that it will be useful,         |
-// | but WITHOUT ANY WARRANTY; without even the implied warranty of              |
-// | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the               |
-// | GNU Lesser General Public License for more details.                         |
-// |                                                                             |
-// | You should have received a copy of the GNU Lesser General Public License    |
-// | along with Structures_Graph; if not, write to the Free Software             |
-// | Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA                    |
-// | 02111-1307 USA                                                              |
-// +-----------------------------------------------------------------------------+
-// | Author: Sérgio Carvalho <sergio.carvalho@portugalmail.com>                  |
-// +-----------------------------------------------------------------------------+
-//
-/**
- * This file contains the definition of the Structures_Graph_Node class
- * 
- * @see Structures_Graph_Node
- * @package Structures_Graph
- */
-
-/* dependencies {{{ */
-/** */
-require_once 'PEAR.php';
-/** */
-require_once 'Structures/Graph.php';
-/* }}} */
-
-/* class Structures_Graph_Node {{{ */
-/**
- * The Structures_Graph_Node class represents a Node that can be member of a 
- * graph node set.
- *
- * A graph node can contain data. Under this API, the node contains default data, 
- * and key index data. It behaves, thus, both as a regular data node, and as a 
- * dictionary (or associative array) node.
- * 
- * Regular data is accessed via getData and setData. Key indexed data is accessed
- * via getMetadata and setMetadata.
- *
- * @author		Sérgio Carvalho <sergio.carvalho@portugalmail.com> 
- * @copyright	(c) 2004 by Sérgio Carvalho
- * @package Structures_Graph
- */
-/* }}} */
-class Structures_Graph_Node {
-    /* fields {{{ */
-    /** 
-     * @access private 
-     */
-    var $_data = null;
-    /** @access private */
-    var $_metadata = array();
-    /** @access private */
-    var $_arcs = array();
-    /** @access private */
-    var $_graph = null;
-    /* }}} */
-
-    /* Constructor {{{ */
-    /**
-    *
-    * Constructor
-    *
-    * @access	public
-    */
-    function __construct() {
-    }
-    /* }}} */
-
-    /* getGraph {{{ */
-    /**
-    *
-    * Node graph getter
-    *
-    * @return	Structures_Graph	Graph where node is stored
-    * @access	public
-    */
-    function &getGraph() {
-        return $this->_graph;
-    }
-    /* }}} */
-
-    /* setGraph {{{ */
-    /**
-    *
-    * Node graph setter. This method should not be called directly. Use Graph::addNode instead.
-    *
-    * @param    Structures_Graph   Set the graph for this node. 
-    * @see      Structures_Graph::addNode()
-    * @access	public
-    */
-    function setGraph(&$graph) {
-        $this->_graph =& $graph;
-    }
-    /* }}} */
-
-    /* getData {{{ */
-    /**
-    *
-    * Node data getter.
-    * 
-    * Each graph node can contain a reference to one variable. This is the getter for that reference.
-    *
-    * @return	mixed	Data stored in node
-    * @access	public
-    */
-    function &getData() {
-        return $this->_data;
-    }
-    /* }}} */
-
-    /* setData {{{ */
-    /**
-    *
-    * Node data setter
-    *
-    * Each graph node can contain a reference to one variable. This is the setter for that reference.
-    *
-    * @return	mixed	Data to store in node
-    * @access	public
-    */
-    function setData($data) {
-        $this->_data =& $data;
-    }
-    /* }}} */
-
-    /* metadataKeyExists {{{ */
-    /**
-    *
-    * Test for existence of metadata under a given key.
-    *
-    * Each graph node can contain multiple 'metadata' entries, each stored under a different key, as in an 
-    * associative array or in a dictionary. This method tests whether a given metadata key exists for this node.
-    *
-    * @param    string    Key to test
-    * @return	boolean	 
-    * @access	public
-    */
-    function metadataKeyExists($key) {
-        return array_key_exists($key, $this->_metadata);
-    }
-    /* }}} */
-
-    /* getMetadata {{{ */
-    /**
-    *
-    * Node metadata getter
-    *
-    * Each graph node can contain multiple 'metadata' entries, each stored under a different key, as in an 
-    * associative array or in a dictionary. This method gets the data under the given key. If the key does
-    * not exist, an error will be thrown, so testing using metadataKeyExists might be needed.
-    *
-    * @param    string  Key
-    * @param    boolean nullIfNonexistent (defaults to false).
-    * @return	mixed	Metadata Data stored in node under given key
-    * @see      metadataKeyExists
-    * @access	public
-    */
-    function &getMetadata($key, $nullIfNonexistent = false) {
-        if (array_key_exists($key, $this->_metadata)) {
-            return $this->_metadata[$key];
-        } else {
-            if ($nullIfNonexistent) {
-                $a = null;
-                return $a;
-            } else {
-                $a = Pear::raiseError('Structures_Graph_Node::getMetadata: Requested key does not exist', STRUCTURES_GRAPH_ERROR_GENERIC);
-                return $a;
-            }
-        }
-    }
-    /* }}} */
-
-    /* unsetMetadata {{{ */
-    /**
-    *
-    * Delete metadata by key
-    *
-    * Each graph node can contain multiple 'metadata' entries, each stored under a different key, as in an 
-    * associative array or in a dictionary. This method removes any data that might be stored under the provided key.
-    * If the key does not exist, no error is thrown, so it is safe using this method without testing for key existence.
-    *
-    * @param    string  Key
-    * @access	public
-    */
-    function unsetMetadata($key) {
-        if (array_key_exists($key, $this->_metadata)) unset($this->_metadata[$key]);
-    }
-    /* }}} */
-
-    /* setMetadata {{{ */
-    /**
-    *
-    * Node metadata setter
-    *
-    * Each graph node can contain multiple 'metadata' entries, each stored under a different key, as in an 
-    * associative array or in a dictionary. This method stores data under the given key. If the key already exists,
-    * previously stored data is discarded.
-    *
-    * @param    string  Key
-    * @param    mixed   Data 
-    * @access	public
-    */
-    function setMetadata($key, $data) {
-        $this->_metadata[$key] =& $data;
-    }
-    /* }}} */
-
-    /* _connectTo {{{ */
-    /** @access private */
-    function _connectTo(&$destinationNode) {
-        $this->_arcs[] =& $destinationNode;
-    }
-    /* }}} */
-
-    /* connectTo {{{ */
-    /**
-    *
-    * Connect this node to another one.
-    * 
-    * If the graph is not directed, the reverse arc, connecting $destinationNode to $this is also created.
-    *
-    * @param    Structures_Graph Node to connect to
-    * @access	public
-    */
-    function connectTo(&$destinationNode) {
-        // We only connect to nodes
-        if (!is_a($destinationNode, 'Structures_Graph_Node')) return Pear::raiseError('Structures_Graph_Node::connectTo received an object that is not a Structures_Graph_Node', STRUCTURES_GRAPH_ERROR_GENERIC);
-        // Nodes must already be in graphs to be connected
-        if ($this->_graph == null) return Pear::raiseError('Structures_Graph_Node::connectTo Tried to connect a node that is not in a graph', STRUCTURES_GRAPH_ERROR_GENERIC);
-        if ($destinationNode->getGraph() == null) return Pear::raiseError('Structures_Graph_Node::connectTo Tried to connect to a node that is not in a graph', STRUCTURES_GRAPH_ERROR_GENERIC);
-        // Connect here
-        $this->_connectTo($destinationNode);
-        // If graph is undirected, connect back
-        if (!$this->_graph->isDirected()) {
-            $destinationNode->_connectTo($this);
-        }
-    }
-    /* }}} */
-
-    /* getNeighbours {{{ */
-    /**
-    *
-    * Return nodes connected to this one.
-    * 
-    * @return   array   Array of nodes
-    * @access	public
-    */
-    function getNeighbours() {
-        return $this->_arcs;
-    }
-    /* }}} */
-
-    /* connectsTo {{{ */
-    /**
-    *
-    * Test wether this node has an arc to the target node
-    *
-    * @return	boolean   True if the two nodes are connected
-    * @access	public
-    */
-    function connectsTo(&$target) {
-        $copy = $target;
-        $arcKeys = array_keys($this->_arcs);
-        foreach($arcKeys as $key) {
-            /* ZE1 chokes on this expression:
-                if ($target === $arc) return true;
-              so, we'll use more convoluted stuff
-            */
-            $arc =& $this->_arcs[$key];
-            $target = true;
-            if ($arc === true) {
-                $target = false;
-                if ($arc === false) {
-                    $target = $copy;
-                    return true;
-                }
-            }
-        }
-        $target = $copy;
-        return false;
-    }
-    /* }}} */
-
-    /* inDegree {{{ */
-    /**
-    *
-    * Calculate the in degree of the node.
-    * 
-    * The indegree for a node is the number of arcs entering the node. For non directed graphs, 
-    * the indegree is equal to the outdegree.
-    *
-    * @return	integer	 In degree of the node
-    * @access	public
-    */
-    function inDegree() {
-        if ($this->_graph == null) return 0;
-        if (!$this->_graph->isDirected()) return $this->outDegree();
-        $result = 0;
-        $graphNodes =& $this->_graph->getNodes();
-        foreach (array_keys($graphNodes) as $key) {
-            if ($graphNodes[$key]->connectsTo($this)) $result++;
-        }
-        return $result;
-        
-    }
-    /* }}} */
-
-    /* outDegree {{{ */
-    /**
-    *
-    * Calculate the out degree of the node.
-    *
-    * The outdegree for a node is the number of arcs exiting the node. For non directed graphs,
-    * the outdegree is always equal to the indegree.
-    * 
-    * @return	integer	 Out degree of the node
-    * @access	public
-    */
-    function outDegree() {
-        if ($this->_graph == null) return 0;
-        return sizeof($this->_arcs);
-    }
-    /* }}} */
-}
-?>
diff --git a/civicrm/packages/VERSIONS.php b/civicrm/packages/VERSIONS.php
index 27691c9d109f361c351e7322166f17ee177d5250..0b97f38fef45046cd227058cc9b837d163c1be82 100644
--- a/civicrm/packages/VERSIONS.php
+++ b/civicrm/packages/VERSIONS.php
@@ -123,16 +123,13 @@
  * Net_Curl                      1.2.5      BSD 3-cl.
  * Net_DIME                      1.0.1      BSD 3-cl.
  * Net_URL                       1.0.15     BSD 3-cl.
- * Net_UserAgent_Detect          2.5.1      PHP 2
  * Pager                         2.4.8      BSD 3-cl.
  * PEAR                          1.9.0      PHP 3.0
  * PHP_Beautifier                0.1.14     PHP 3.0
  * Services_Twilio               3.10.0     MIT
- * Structures_Graph              1.0.2      LGPL 2.1+
  * System_Command                1.0.6      PHP 2
  * Validate                      0.8.2      BSD 3-cl.
  * Validate_Finance              0.5.4      BSD 3-cl.
- * Validate_Finance_CreditCard   0.5.3      BSD 3-cl.      local changes
  * XML_RPC                       1.5.3      PHP 3
  * XML_Util                      1.2.1      BSD 3-cl.
  *
diff --git a/civicrm/packages/remote-list.pear.php.net b/civicrm/packages/remote-list.pear.php.net
index 9a875aa5631d9ddb7fb40838f35e8fbd0cd58039..584e04beeb48bfce3112769448cc178bd378417d 100644
--- a/civicrm/packages/remote-list.pear.php.net
+++ b/civicrm/packages/remote-list.pear.php.net
@@ -236,8 +236,6 @@ Net_SMTP                                  1.2.8
 Net_Socket                                1.0.6
 Net_Traceroute                            0.21
 Net_URL                                   1.0.14
-Net_UserAgent_Detect                      2.2.0
-Net_UserAgent_Mobile                      0.28.0
 Net_Whois                                 1.0
 Net_Wifi                                  0.1.0
 Numbers_Roman                             1.0.1
diff --git a/civicrm/release-notes.md b/civicrm/release-notes.md
index df93785059e763ccfaed6c9a0f910c7415990c0a..d75826462377f0d36ba3b5c3dca21b6f053c6050 100644
--- a/civicrm/release-notes.md
+++ b/civicrm/release-notes.md
@@ -15,6 +15,17 @@ Other resources for identifying changes are:
     * https://github.com/civicrm/civicrm-joomla
     * https://github.com/civicrm/civicrm-wordpress
 
+## CiviCRM 5.22.0
+
+Released February 5, 2020
+
+- **[Synopsis](release-notes/5.22.0.md#synopsis)**
+- **[Features](release-notes/5.22.0.md#features)**
+- **[Bugs resolved](release-notes/5.22.0.md#bugs)**
+- **[Miscellany](release-notes/5.22.0.md#misc)**
+- **[Credits](release-notes/5.22.0.md#credits)**
+- **[Feedback](release-notes/5.22.0.md#feedback)**
+
 ## CiviCRM 5.21.2
 
 Released January 23, 2020
@@ -38,7 +49,6 @@ Released January 10, 2020
 Released January 1, 2020
 
 - **[Synopsis](release-notes/5.21.0.md#synopsis)**
-- **[Security advisories](release-notes/5.21.0.md#security)**
 - **[Features](release-notes/5.21.0.md#features)**
 - **[Bugs resolved](release-notes/5.21.0.md#bugs)**
 - **[Miscellany](release-notes/5.21.0.md#misc)**
diff --git a/civicrm/release-notes/5.22.0.md b/civicrm/release-notes/5.22.0.md
new file mode 100644
index 0000000000000000000000000000000000000000..8ae714c4ca9a9c823127fdd39f9f676ab2c44041
--- /dev/null
+++ b/civicrm/release-notes/5.22.0.md
@@ -0,0 +1,447 @@
+# CiviCRM 5.22.0
+
+Released February 5, 2020
+
+- **[Synopsis](#synopsis)**
+- **[Features](#features)**
+- **[Bugs resolved](#bugs)**
+- **[Miscellany](#misc)**
+- **[Credits](#credits)**
+- **[Feedback](#feedback)**
+
+## <a name="synopsis"></a>Synopsis
+
+| *Does this version...?*                                         |         |
+|:--------------------------------------------------------------- |:-------:|
+| Fix security vulnerabilities?                                   |   no    |
+| **Change the database schema?**                                 | **yes** |
+| **Alter the API?**                                              | **yes** |
+| Require attention to configuration options?                     |   no    |
+| **Fix problems installing or upgrading to a previous version?** | **yes** |
+| **Introduce features?**                                         | **yes** |
+| **Fix bugs?**                                                   | **yes** |
+
+## <a name="features"></a>Features
+
+### Core CiviCRM
+
+- **Field Names now Reserved Words in MySQL8
+  ([dev/core#1143](https://lab.civicrm.org/dev/core/issues/1143),
+  [dev/core#1144](https://lab.civicrm.org/dev/core/issues/1144) and
+  [dev/core#1480](https://lab.civicrm.org/dev/core/issues/1480):
+  [16179](https://github.com/civicrm/civicrm-core/pull/16179) and
+  [16182](https://github.com/civicrm/civicrm-core/pull/16182))**
+
+  Allows CiviCRM installations to run on MySQL8 and updates the test
+  infastructure to support MySQL8.
+
+- **Add controlField metadata for ChainSelect fields
+  ([16164](https://github.com/civicrm/civicrm-core/pull/16164))**
+
+  Adds additional field metadata for state/province and county address fields
+  for the sake of autogenerated forms (afform).
+
+- **Allow Angular modules to provide dynamic HTML snippets
+  ([16078](https://github.com/civicrm/civicrm-core/pull/16078))**
+
+  Supports afforms dynamic templates by allowing angular partials to be passed
+  as strings not just file paths.
+
+- **Allow values to be passed to api4 GetFields
+  ([16154](https://github.com/civicrm/civicrm-core/pull/16154) and
+  [16162](https://github.com/civicrm/civicrm-core/pull/16162))**
+
+  Makes it possible to filter api4 `getFields` calls by contact
+  type, only returning custom fields appropriate to certain contact types.
+
+- **Pass api4 getFields values through to getOptions
+  ([16168](https://github.com/civicrm/civicrm-core/pull/16168))**
+
+  Allows option filtering in api4, similar to how it works in api3.
+
+- **Add api to check for missing indices
+  ([16145](https://github.com/civicrm/civicrm-core/pull/16145))**
+
+  Adds an api to check for missing mysql indices.
+
+- **Add in Country and StateProvince APIv4 Entities
+  ([16110](https://github.com/civicrm/civicrm-core/pull/16110))**
+
+  Adds Country and StateProvince APIv4 Entities.
+
+- **Replace all instances of CRM_Core_Fatal with throw new CRM_Core_Exception
+  (Work Towards [dev/core#560](https://lab.civicrm.org/dev/core/issues/560):
+  [16141](https://github.com/civicrm/civicrm-core/pull/16141) and
+  [16067](https://github.com/civicrm/civicrm-core/pull/16067))**
+
+  Work towards throwing exceptions (instead of fatal errors).
+
+- **Deadlocked queries cause an instant error for end-users, but are retried in
+  other circumstances (Work Towards
+  [dev/core#395](https://lab.civicrm.org/dev/core/issues/395):
+  [275](https://github.com/civicrm/civicrm-packages/pull/275) and
+  [16143](https://github.com/civicrm/civicrm-core/pull/16143))**
+
+  Improves logging from deadlocks specifically, before this change an error
+  recorded because of a deadlock query was recorded as "DBError::Unknown Error"
+  now they are recorded as "DBError::deadlock".
+
+### CiviContribute
+
+- **We should give user feedback in case of a Payment Processor Exception
+  ([15676](https://github.com/civicrm/civicrm-core/pull/15676))**
+
+  Improves user experience when updating or canceling a recurring payment by
+  displaying any error message sent from the payment processor to the user.
+
+- **Code cleanup Update Paypal invokeApi to only throw exceptions.
+  ([16072](https://github.com/civicrm/civicrm-core/pull/16072))**
+
+  Standardizes and improves error handling within PayPal.
+
+## <a name="bugs"></a>Bugs resolved
+
+### Core CiviCRM
+
+- **CIVI-SA-2019-21 may lead to regressions when following typehints on
+  CRM_Core_BAO_Setting::setItem()
+  ([dev/core#1425](https://lab.civicrm.org/dev/core/issues/1425):
+  [15975](https://github.com/civicrm/civicrm-core/pull/15975))**
+
+  Deprecates old setItem & setOptionValue functions on
+  BAO_Setting to prevent regressions.
+
+- **Deadlocks on acl_cache (Work Towards
+  [dev/core#1486](https://lab.civicrm.org/dev/core/issues/1486):
+  [16144](https://github.com/civicrm/civicrm-core/pull/16144))**
+
+  Adds an index to the `civicrm_acl_cache.modified_date` column to reduce
+  deadlocks when running the ACL Cache.
+
+- **Port "+options" for constant-parameters to APIv4-PHP (Work Towards
+  [dev/core#1489](https://lab.civicrm.org/dev/core/issues/1489):
+  [16149](https://github.com/civicrm/civicrm-core/pull/16149))**
+
+  Ensures managed entities are not reconciled during upgrades.
+
+- **Api4 - Fix auto serialize array input for CheckBox/MultiSelect fields
+  ([16152](https://github.com/civicrm/civicrm-core/pull/16152))**
+
+  In Api4, serialized fields should input/output as array data. This wasn't
+  working on the input side for custom entities. This fixes array input handling
+  and adds test coverage.
+
+- **Fix output display in api4 explorer
+  ([16130](https://github.com/civicrm/civicrm-core/pull/16130))**
+
+  Ensures api4 explorer displays output with html entities properly.
+
+- **Add in searchFieldMetadata for contact_tags, contact_type, group and
+  deleted_contacts fields for contribute, pledge searches
+  ([15942](https://github.com/civicrm/civicrm-core/pull/15942))**
+
+  Adds url support on search forms (other than the search builder) for the
+  following fields: `contact_tags`, `contact_type`, `group` and
+  `deleted_contacts`.
+
+- **Update Smart Group form uses different labels for Group Title and Group
+  Description ([16042](https://github.com/civicrm/civicrm-core/pull/16042))**
+
+  Improves user experience by making the Smart Group field labels on the
+  Advanced Search from match the labels used on the Smart Group edit form.
+
+- **Update Smart Group form unsets the existing Group Types
+  ([16043](https://github.com/civicrm/civicrm-core/pull/16043))**
+
+  Ensures the Mailing List group type remains set on the Update Smart Group
+  form.
+
+- **loadServices: tighten up file match regex
+  ([16377](https://github.com/civicrm/civicrm-core/pull/16377))**
+
+  Ensures that CiviCRM code living under a path containing the characters 'php'
+  does not crash when loading services.
+
+- **Activity type listing shows name instead label
+  ([dev/core#1470](https://lab.civicrm.org/dev/core/issues/1470):
+  [16094](https://github.com/civicrm/civicrm-core/pull/16094))**
+
+- **Export doesn't work in Excel with diacritic chars
+  ([dev/core#1424](https://lab.civicrm.org/dev/core/issues/1424):
+  [16117](https://github.com/civicrm/civicrm-core/pull/16117) and
+  [15968](https://github.com/civicrm/civicrm-core/pull/15968))**
+
+- **text missing from email column when custom search profile is used
+  in Advanced Search
+  ([dev/core#1474](https://lab.civicrm.org/dev/core/issues/1474):
+  [16101](https://github.com/civicrm/civicrm-core/pull/16101))**
+
+- **Undefined offset and uninitialized string offset notices on upgrade to 5.21
+  ([dev/core#1555](https://lab.civicrm.org/dev/core/issues/1555):
+  [16417](https://github.com/civicrm/civicrm-core/pull/16417))**
+
+### CiviCase
+
+- **Add case activity action links to activity report
+  ([15135](https://github.com/civicrm/civicrm-core/pull/15135))**
+
+  Ensures if an activity is linked to a case the "case activity" actions are
+  displayed instead of the standard activity actions (eg. move/copy to case
+  instead of file on case).
+
+- **Activity Details CiviReport gives network error when paging to next page if
+  choose filter to include case activities
+  ([dev/core#1552](https://lab.civicrm.org/dev/core/issues/1552):
+  [16393](https://github.com/civicrm/civicrm-core/pull/16393))**
+
+- **Case Detail 'Active Role?' filter excludes cases without relationships
+  ([dev/report#24](https://lab.civicrm.org/dev/report/issues/24):
+  [15972](https://github.com/civicrm/civicrm-core/pull/15972))**
+
+- **Manager/Creator Information not being returned for case related contacts
+  when fetching Case Details
+  ([dev/core#1426](https://lab.civicrm.org/dev/core/issues/1426):
+  [16006](https://github.com/civicrm/civicrm-core/pull/16006))**
+
+### CiviContribute
+
+- **Thousands-separator corrupts price field values (comma)
+  ([dev/core#1472](https://lab.civicrm.org/dev/core/issues/1472):
+  [16111](https://github.com/civicrm/civicrm-core/pull/16111))**
+
+  Fixes a bug where price options with thousands operators didn't submit
+  correctly.
+
+- **E notice fix on Price set form
+  ([16096](https://github.com/civicrm/civicrm-core/pull/16096))**
+
+  Removes an e notice when submitting the price set form.
+
+- **Advanced search fails to properly search for contribution source
+  ([dev/core#1468](https://lab.civicrm.org/dev/core/issues/1468):
+  [16083](https://github.com/civicrm/civicrm-core/pull/16083))**
+
+### CiviEvent
+
+- **Event Participants actions (Print Name Badges, Export...) ignores search
+  criteria ([dev/core#1422](https://lab.civicrm.org/dev/core/issues/1422):
+  [16038](https://github.com/civicrm/civicrm-core/pull/16038))**
+
+  Ensures that the actions menu on the participant search form respects search
+  criteria.
+
+### CiviMail
+
+- **Exception Malformed temp table category on New A/B Test
+  ([dev/core#1564](https://lab.civicrm.org/dev/core/issues/1564):
+  [16464](https://github.com/civicrm/civicrm-core/pull/16464))**
+
+  Fixes a regression in 5.21.2 where creating a new A/B Test resulted in a
+  session status Exception Malformed temp table.
+
+### CiviMember
+
+- **Fix js error on choosing membership type
+  ([16058](https://github.com/civicrm/civicrm-core/pull/16058))**
+
+  Fixes a javascript error "Uncaught ReferenceError" when choosing a membership
+  type from the backend membership signup form.
+
+### Drupal Integration
+
+- **Error when creating user record for Civi contact
+  ([dev/drupal#99](https://lab.civicrm.org/dev/drupal/issues/99):
+  [16157](https://github.com/civicrm/civicrm-core/pull/16157))**
+
+  Fixes an E-notice "Notice: Trying to get property 'id' of non-object in
+  CRM_Core_BAO_UFMatch::updateContactEmail() (line 449 of
+  /var/www/sitename/vendor/civicrm/civicrm-core/CRM/Core/BAO/UFMatch.php)." when
+  submitting the "Create User Record" form which can be found from the "Actions"
+  menu-button while viewing a CRM contact.
+
+- **Missing address on `/user` when location type label differs from its name
+  ([dev/core#1473](https://lab.civicrm.org/dev/core/issues/1473):
+  [16100](https://github.com/civicrm/civicrm-core/pull/16100))**
+
+### Wordpress Integration
+
+- **Fix basepage title for Yoast SEO when theme declares "title-tag" support
+  ([174](https://github.com/civicrm/civicrm-wordpress/pull/174))**
+
+  Fixes a bug for sites with the Yoast SEO plugin where the CiviCRM page title
+  was not being displayed properly. Specifically the Yoast SEO plugin
+  short-circuits the code in `wp_get_document_title()` by filtering via
+  `pre_get_document_title`. This means that the CiviCRM code to apply the
+  CiviCRM basepage title via the document_title_parts filter is never reached
+  and the basepage title does not reflect the CiviCRM content.
+
+## <a name="misc"></a>Miscellany
+
+- **Fix typo, Mailign should be Mailing
+  ([16031](https://github.com/civicrm/civicrm-core/pull/16031))**
+
+- **Switch static var to using Civi::statics
+  ([16138](https://github.com/civicrm/civicrm-core/pull/16138))**
+
+- **Remove code to create a subscription history entry when a contact is created
+  ([dev/core#1482](https://lab.civicrm.org/dev/core/issues/1482):
+  [16125](https://github.com/civicrm/civicrm-core/pull/16125))**
+
+- **Remove unnecessary query when updating org, if no name update.
+  ([16080](https://github.com/civicrm/civicrm-core/pull/16080))**
+
+- **Remove unnecessary, and possibly incorrect query from email update
+  ([16079](https://github.com/civicrm/civicrm-core/pull/16079))**
+
+- **Remove unneeded zendframwork/zend-validator and zendframwork/zend-stdlib
+  packages as not required by any other package
+  ([16112](https://github.com/civicrm/civicrm-core/pull/16112))**
+
+- **Remove legacy_redirect_path handling
+  ([16134](https://github.com/civicrm/civicrm-core/pull/16134))**
+
+- **Remove function marked as deprecated & unused by core nearly a year ago
+  ([16124](https://github.com/civicrm/civicrm-core/pull/16124))**
+
+- **Remove vestige of apiv2
+  ([16115](https://github.com/civicrm/civicrm-core/pull/16115))**
+
+- **Remove PEAR package Structures_Graph as there appears to be no use for it
+  ([279](https://github.com/civicrm/civicrm-packages/pull/279))**
+
+- **Remove Net_UserAgent_Detect package
+  ([272](https://github.com/civicrm/civicrm-packages/pull/272))**
+
+- **Paypal class cleanup
+  ([16088](https://github.com/civicrm/civicrm-core/pull/16088))**
+
+- **2020 test fixes.
+  ([16172](https://github.com/civicrm/civicrm-core/pull/16172))**
+
+- **Unit test for https://github.com/civicrm/civicrm-core/pull/16120
+  ([16127](https://github.com/civicrm/civicrm-core/pull/16127))**
+
+- **Update unit tests to use name spaced format of phpunit test classes for
+  phpunit6 compatability
+  ([594](https://github.com/civicrm/civicrm-drupal/pull/594))**
+
+- **Update to use the namespaced version of the PHPUnit test classes as this
+  will work for phpunit6 going forward as well as phpunit5
+  ([175](https://github.com/civicrm/civicrm-wordpress/pull/175))**
+
+- **Update PHPUnit Test class declarations to use namespaced format for phpunit6
+  compatability ([108](https://github.com/civicrm/civicrm-backdrop/pull/108))**
+
+- **[REF] Minor cleanup - declare exceptions, use single quotes, strict
+  comparison ([16137](https://github.com/civicrm/civicrm-core/pull/16137))**
+
+- **[REF] remove CRM_Core_Error check
+  ([16136](https://github.com/civicrm/civicrm-core/pull/16136))**
+
+- **[REF] Convert more petition signature fatals to status bounce
+  ([16075](https://github.com/civicrm/civicrm-core/pull/16075))**
+
+- **[REF] Switch CRM_Utils_Error::fatal calls for CRM_Core_Exception in Grant.
+  utils, bin/ and Civi/Angular/ folders
+  ([16109](https://github.com/civicrm/civicrm-core/pull/16109))**
+
+- **[REF] Minor simplification on additional_participants checks
+  ([16056](https://github.com/civicrm/civicrm-core/pull/16056))**
+
+- **[REF] Refactor Contact Search form to use standardised getSortID function
+  ([16054](https://github.com/civicrm/civicrm-core/pull/16054))**
+
+- **[REF] Refactor Activity Search to use parent getSortID function
+  ([16053](https://github.com/civicrm/civicrm-core/pull/16053))**
+
+- **[REF] Refactor Campaign Search form to use standardised getSortID function
+  ([16055](https://github.com/civicrm/civicrm-core/pull/16055))**
+
+- **[REF] Move wrangling of Front end form contribution param for autoRenew back
+  to form ([15927](https://github.com/civicrm/civicrm-core/pull/15927))**
+
+- **[REF] Replace Deprecated function CRM_Core_BAO_Setting::setItem with the
+  relevant Civi::contactSettings function
+  ([16044](https://github.com/civicrm/civicrm-core/pull/16044))**
+
+- **[REF] remove unused  from getACLRoles
+  ([16180](https://github.com/civicrm/civicrm-core/pull/16180))**
+
+- **[REF] simplify recordAdjustedAmt function
+  ([16135](https://github.com/civicrm/civicrm-core/pull/16135))**
+
+- **[REF] extract member form batch update & add test
+  ([16151](https://github.com/civicrm/civicrm-core/pull/16151))**
+
+- **[REF] Remove unused params from function signature for getACLs
+  ([16175](https://github.com/civicrm/civicrm-core/pull/16175))**
+
+- **[REF] step towards wiping out  $ids array in membership bao functions
+  ([16132](https://github.com/civicrm/civicrm-core/pull/16132))**
+
+- **[Ref] improve readability of acl code
+  ([16131](https://github.com/civicrm/civicrm-core/pull/16131))**
+
+- **[Ref] Remove php4 support from BAO_Acl class
+  ([16119](https://github.com/civicrm/civicrm-core/pull/16119))**
+
+- **(NFC) Civi, CRM, tests - Update for
+  Drupal.Commenting.VariableComment.IncorrectVarType
+  ([16384](https://github.com/civicrm/civicrm-core/pull/16384))**
+
+- **[NFC] Test clean up.
+  ([16133](https://github.com/civicrm/civicrm-core/pull/16133))**
+
+- **[NFC] cleanup to declared exceptions, quotes, strict mode.
+  ([16114](https://github.com/civicrm/civicrm-core/pull/16114))**
+
+- **[NFC] Declare exceptions, use single quotes where possible, use strict
+  comparison ([16142](https://github.com/civicrm/civicrm-core/pull/16142))**
+
+- **[NFC] Add in unit test for dev/core#1460
+  ([16063](https://github.com/civicrm/civicrm-core/pull/16063))**
+
+- **[NFC] code cleanup
+  ([16050](https://github.com/civicrm/civicrm-core/pull/16050))**
+
+- **[NFC] Add in a unit test of passing an array into the Civi::settings set
+  facade and getting it back
+  ([16045](https://github.com/civicrm/civicrm-core/pull/16045))**
+
+- **[NFC] Add test on buildMembershipTypeValues & cleanup class
+  ([16167](https://github.com/civicrm/civicrm-core/pull/16167))**
+
+- **[NFC] Re-generate DAOs
+  ([16178](https://github.com/civicrm/civicrm-core/pull/16178))**
+
+- **[NFC] Extract duplicated code lines in test
+  ([16165](https://github.com/civicrm/civicrm-core/pull/16165))**
+
+- **[NFC] Clean up unit test
+  ([16163](https://github.com/civicrm/civicrm-core/pull/16163))**
+
+- **[NFC] If statement is always true
+  ([16122](https://github.com/civicrm/civicrm-core/pull/16122))**
+
+## <a name="credits"></a>Credits
+
+This release was developed by the following code authors:
+
+AGH Strategies - Andrew Hunt; Agileware - Justin Freeman; Australian Greens -
+Seamus Lee; Christian Wach; Circle Interactive - Pradeep Nayak; CiviCRM -
+Coleman Watts, Tim Otten; Coop SymbioTIC - Mathieu Lutfy; Dave D; Fuzion -
+Jitendra Purohit; MJW Consulting - Matthew Wire; Squiffle Consulting - Aidan
+Saunders; Wikimedia Foundation - Eileen McNaughton
+
+Most authors also reviewed code for this release; in addition, the following
+reviewers contributed their comments:
+
+AGH Strategies - Alice Frumin; Artful Robot - Rich Lott; CiviDesk - Yashodha
+Chaku; Joinery - Allen Shaw; Megaphone Technology Consulting - Jon Goldberg;
+Tadpole Collective - Kevin Cristiano;
+
+## <a name="feedback"></a>Feedback
+
+These release notes are edited by Alice Frumin and Andrew Hunt.  If you'd like
+to provide feedback on them, please log in to https://chat.civicrm.org/civicrm
+and contact `@agh1`.
diff --git a/civicrm/sql/civicrm.mysql b/civicrm/sql/civicrm.mysql
index e12b758ec00402b012f5df0396c497ceb89b9106..b29d90718fa5c20a22f78bdbde94533859fa85ec 100644
--- a/civicrm/sql/civicrm.mysql
+++ b/civicrm/sql/civicrm.mysql
@@ -2585,6 +2585,9 @@ CREATE TABLE `civicrm_acl_cache` (
     ,     INDEX `index_acl_id`(
         acl_id
   )
+  ,     INDEX `index_modified_date`(
+        modified_date
+  )
   
 ,          CONSTRAINT FK_civicrm_acl_cache_contact_id FOREIGN KEY (`contact_id`) REFERENCES `civicrm_contact`(`id`) ON DELETE CASCADE,          CONSTRAINT FK_civicrm_acl_cache_acl_id FOREIGN KEY (`acl_id`) REFERENCES `civicrm_acl`(`id`) ON DELETE CASCADE  
 )  ENGINE=InnoDB DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci  ;
diff --git a/civicrm/sql/civicrm_data.mysql b/civicrm/sql/civicrm_data.mysql
index e45dcbe87b23d38973dac8ec85ed2ded2f994dc4..5a6e1a8679e180ecfb07354a23b19502b6903a12 100644
--- a/civicrm/sql/civicrm_data.mysql
+++ b/civicrm/sql/civicrm_data.mysql
@@ -23927,4 +23927,4 @@ INSERT INTO `civicrm_report_instance`
     ( `domain_id`, `title`, `report_id`, `description`, `permission`, `form_values`)
 VALUES
     (  @domainID, 'Survey Details', 'survey/detail', 'Detailed report for canvassing, phone-banking, walk lists or other surveys.', 'access CiviReport', 'a:39:{s:6:"fields";a:2:{s:9:"sort_name";s:1:"1";s:6:"result";s:1:"1";}s:22:"assignee_contact_id_op";s:2:"eq";s:25:"assignee_contact_id_value";s:0:"";s:12:"sort_name_op";s:3:"has";s:15:"sort_name_value";s:0:"";s:17:"street_number_min";s:0:"";s:17:"street_number_max";s:0:"";s:16:"street_number_op";s:3:"lte";s:19:"street_number_value";s:0:"";s:14:"street_name_op";s:3:"has";s:17:"street_name_value";s:0:"";s:15:"postal_code_min";s:0:"";s:15:"postal_code_max";s:0:"";s:14:"postal_code_op";s:3:"lte";s:17:"postal_code_value";s:0:"";s:7:"city_op";s:3:"has";s:10:"city_value";s:0:"";s:20:"state_province_id_op";s:2:"in";s:23:"state_province_id_value";a:0:{}s:13:"country_id_op";s:2:"in";s:16:"country_id_value";a:0:{}s:12:"survey_id_op";s:2:"in";s:15:"survey_id_value";a:0:{}s:12:"status_id_op";s:2:"eq";s:15:"status_id_value";s:1:"1";s:11:"custom_1_op";s:2:"in";s:14:"custom_1_value";a:0:{}s:11:"custom_2_op";s:2:"in";s:14:"custom_2_value";a:0:{}s:17:"custom_3_relative";s:1:"0";s:13:"custom_3_from";s:0:"";s:11:"custom_3_to";s:0:"";s:11:"description";s:75:"Detailed report for canvassing, phone-banking, walk lists or other surveys.";s:13:"email_subject";s:0:"";s:8:"email_to";s:0:"";s:8:"email_cc";s:0:"";s:10:"permission";s:17:"access CiviReport";s:6:"groups";s:0:"";s:9:"domain_id";i:1;}');
-UPDATE civicrm_domain SET version = '5.21.2';
+UPDATE civicrm_domain SET version = '5.22.0';
diff --git a/civicrm/sql/civicrm_generated.mysql b/civicrm/sql/civicrm_generated.mysql
index 2639f5f8274a5c734ffc67320c9ed2ba1612b88c..bfc97dec69206168e2ff9cdd8db112ce507971e4 100644
--- a/civicrm/sql/civicrm_generated.mysql
+++ b/civicrm/sql/civicrm_generated.mysql
@@ -399,7 +399,7 @@ UNLOCK TABLES;
 
 LOCK TABLES `civicrm_domain` WRITE;
 /*!40000 ALTER TABLE `civicrm_domain` DISABLE KEYS */;
-INSERT INTO `civicrm_domain` (`id`, `name`, `description`, `config_backend`, `version`, `contact_id`, `locales`, `locale_custom_strings`) VALUES (1,'Default Domain Name',NULL,NULL,'5.21.2',1,NULL,'a:1:{s:5:\"en_US\";a:0:{}}');
+INSERT INTO `civicrm_domain` (`id`, `name`, `description`, `config_backend`, `version`, `contact_id`, `locales`, `locale_custom_strings`) VALUES (1,'Default Domain Name',NULL,NULL,'5.22.0',1,NULL,'a:1:{s:5:\"en_US\";a:0:{}}');
 /*!40000 ALTER TABLE `civicrm_domain` ENABLE KEYS */;
 UNLOCK TABLES;
 
diff --git a/civicrm/templates/CRM/Group/Form/Edit.tpl b/civicrm/templates/CRM/Group/Form/Edit.tpl
index 7c189566442ce38ba77085a5f13eb7ceaa6aaea3..2598bf54fc567b07b055f257e1f5919bb8c63542 100644
--- a/civicrm/templates/CRM/Group/Form/Edit.tpl
+++ b/civicrm/templates/CRM/Group/Form/Edit.tpl
@@ -99,12 +99,12 @@
 
   {literal}
   <script type="text/javascript">
-    {/literal}{if $freezeMailignList}{literal}
-    cj('input[type=checkbox][name="group_type[{/literal}{$freezeMailignList}{literal}]"]').prop('disabled',true);
+    {/literal}{if $freezeMailingList}{literal}
+    cj('input[type=checkbox][name="group_type[{/literal}{$freezeMailingList}{literal}]"]').prop('disabled',true);
     {/literal}{/if}{literal}
-    {/literal}{if $hideMailignList}{literal}
-    cj('input[type=checkbox][name="group_type[{/literal}{$hideMailignList}{literal}]"]').hide();
-    cj('label[for="group_type[{/literal}{$hideMailignList}{literal}]"]').hide();
+    {/literal}{if $hideMailingList}{literal}
+    cj('input[type=checkbox][name="group_type[{/literal}{$hideMailingList}{literal}]"]').hide();
+    cj('label[for="group_type[{/literal}{$hideMailingList}{literal}]"]').hide();
     {/literal}{/if}{literal}
   </script>
   {/literal}
diff --git a/civicrm/templates/CRM/Member/Form/Membership.tpl b/civicrm/templates/CRM/Member/Form/Membership.tpl
index 64ef92a7fed3be7f5b891a06e16a2ca719029cc4..8dd6f42ab5cfee60def703e9fa7e9b02100ada00 100644
--- a/civicrm/templates/CRM/Member/Form/Membership.tpl
+++ b/civicrm/templates/CRM/Member/Form/Membership.tpl
@@ -510,8 +510,8 @@
     {/literal}
 
     {if $membershipMode or $action eq 2}
-
-    buildAutoRenew( null, null, '{$membershipMode}');
+      buildAutoRenew( null, null, '{$membershipMode}');
+    {/if}
     {literal}
     function buildAutoRenew( membershipType, processorId, mode ) {
       var action = {/literal}'{$action}'{literal};
@@ -574,10 +574,6 @@
       }
       showEmailOptions();
     }
-    {/literal}
-    {/if}
-
-    {literal}
 
     var customDataType = {/literal}{$customDataType|@json_encode}{literal};
 
diff --git a/civicrm/vendor/autoload.php b/civicrm/vendor/autoload.php
index dc331756fa6d7432f7bba933a5f8223fe4d92a49..3b7a106d024e62ee1d88c9f7563020da7b730724 100644
--- a/civicrm/vendor/autoload.php
+++ b/civicrm/vendor/autoload.php
@@ -4,4 +4,4 @@
 
 require_once __DIR__ . '/composer/autoload_real.php';
 
-return ComposerAutoloaderInit2cf64571cacb0a44db1bde8e898cafcc::getLoader();
+return ComposerAutoloaderInit0d2dd6066a4e109cf7c12ce2f1dc013a::getLoader();
diff --git a/civicrm/vendor/composer/autoload_psr4.php b/civicrm/vendor/composer/autoload_psr4.php
index 03784b543387efd192d16e04703aa338b828c65d..ca888cd1ec9f7774902666d6351f54d89ff796c7 100644
--- a/civicrm/vendor/composer/autoload_psr4.php
+++ b/civicrm/vendor/composer/autoload_psr4.php
@@ -8,8 +8,6 @@ $baseDir = dirname($vendorDir);
 return array(
     'xKerman\\Restricted\\' => array($vendorDir . '/xkerman/restricted-unserialize/src'),
     'cweagans\\Composer\\' => array($vendorDir . '/cweagans/composer-patches/src'),
-    'Zend\\Validator\\' => array($vendorDir . '/zendframework/zend-validator/src'),
-    'Zend\\Stdlib\\' => array($vendorDir . '/zendframework/zend-stdlib/src'),
     'Zend\\Escaper\\' => array($vendorDir . '/zendframework/zend-escaper/src'),
     'When\\' => array($vendorDir . '/tplaner/when/src'),
     'Symfony\\Polyfill\\Iconv\\' => array($vendorDir . '/symfony/polyfill-iconv'),
diff --git a/civicrm/vendor/composer/autoload_real.php b/civicrm/vendor/composer/autoload_real.php
index bab3e6dd6e25cc6d0e57116acdfa65fe1fc36bd9..16c3a3aa395276a26000c7250639cbd2bac501ab 100644
--- a/civicrm/vendor/composer/autoload_real.php
+++ b/civicrm/vendor/composer/autoload_real.php
@@ -2,7 +2,7 @@
 
 // autoload_real.php @generated by Composer
 
-class ComposerAutoloaderInit2cf64571cacb0a44db1bde8e898cafcc
+class ComposerAutoloaderInit0d2dd6066a4e109cf7c12ce2f1dc013a
 {
     private static $loader;
 
@@ -19,9 +19,9 @@ class ComposerAutoloaderInit2cf64571cacb0a44db1bde8e898cafcc
             return self::$loader;
         }
 
-        spl_autoload_register(array('ComposerAutoloaderInit2cf64571cacb0a44db1bde8e898cafcc', 'loadClassLoader'), true, true);
+        spl_autoload_register(array('ComposerAutoloaderInit0d2dd6066a4e109cf7c12ce2f1dc013a', 'loadClassLoader'), true, true);
         self::$loader = $loader = new \Composer\Autoload\ClassLoader();
-        spl_autoload_unregister(array('ComposerAutoloaderInit2cf64571cacb0a44db1bde8e898cafcc', 'loadClassLoader'));
+        spl_autoload_unregister(array('ComposerAutoloaderInit0d2dd6066a4e109cf7c12ce2f1dc013a', 'loadClassLoader'));
 
         $includePaths = require __DIR__ . '/include_paths.php';
         $includePaths[] = get_include_path();
@@ -31,7 +31,7 @@ class ComposerAutoloaderInit2cf64571cacb0a44db1bde8e898cafcc
         if ($useStaticLoader) {
             require_once __DIR__ . '/autoload_static.php';
 
-            call_user_func(\Composer\Autoload\ComposerStaticInit2cf64571cacb0a44db1bde8e898cafcc::getInitializer($loader));
+            call_user_func(\Composer\Autoload\ComposerStaticInit0d2dd6066a4e109cf7c12ce2f1dc013a::getInitializer($loader));
         } else {
             $map = require __DIR__ . '/autoload_namespaces.php';
             foreach ($map as $namespace => $path) {
@@ -52,19 +52,19 @@ class ComposerAutoloaderInit2cf64571cacb0a44db1bde8e898cafcc
         $loader->register(true);
 
         if ($useStaticLoader) {
-            $includeFiles = Composer\Autoload\ComposerStaticInit2cf64571cacb0a44db1bde8e898cafcc::$files;
+            $includeFiles = Composer\Autoload\ComposerStaticInit0d2dd6066a4e109cf7c12ce2f1dc013a::$files;
         } else {
             $includeFiles = require __DIR__ . '/autoload_files.php';
         }
         foreach ($includeFiles as $fileIdentifier => $file) {
-            composerRequire2cf64571cacb0a44db1bde8e898cafcc($fileIdentifier, $file);
+            composerRequire0d2dd6066a4e109cf7c12ce2f1dc013a($fileIdentifier, $file);
         }
 
         return $loader;
     }
 }
 
-function composerRequire2cf64571cacb0a44db1bde8e898cafcc($fileIdentifier, $file)
+function composerRequire0d2dd6066a4e109cf7c12ce2f1dc013a($fileIdentifier, $file)
 {
     if (empty($GLOBALS['__composer_autoload_files'][$fileIdentifier])) {
         require $file;
diff --git a/civicrm/vendor/composer/autoload_static.php b/civicrm/vendor/composer/autoload_static.php
index 1e0f0c76b9ebb8f78edbf35df2794f832d7671ec..6a0d8bd70e6461a58eb54aff1a40f2b2aac2a49e 100644
--- a/civicrm/vendor/composer/autoload_static.php
+++ b/civicrm/vendor/composer/autoload_static.php
@@ -4,7 +4,7 @@
 
 namespace Composer\Autoload;
 
-class ComposerStaticInit2cf64571cacb0a44db1bde8e898cafcc
+class ComposerStaticInit0d2dd6066a4e109cf7c12ce2f1dc013a
 {
     public static $files = array (
         '320cde22f66dd4f5d3fd621d3e88b98f' => __DIR__ . '/..' . '/symfony/polyfill-ctype/bootstrap.php',
@@ -30,8 +30,6 @@ class ComposerStaticInit2cf64571cacb0a44db1bde8e898cafcc
         ),
         'Z' => 
         array (
-            'Zend\\Validator\\' => 15,
-            'Zend\\Stdlib\\' => 12,
             'Zend\\Escaper\\' => 13,
         ),
         'W' => 
@@ -101,14 +99,6 @@ class ComposerStaticInit2cf64571cacb0a44db1bde8e898cafcc
         array (
             0 => __DIR__ . '/..' . '/cweagans/composer-patches/src',
         ),
-        'Zend\\Validator\\' => 
-        array (
-            0 => __DIR__ . '/..' . '/zendframework/zend-validator/src',
-        ),
-        'Zend\\Stdlib\\' => 
-        array (
-            0 => __DIR__ . '/..' . '/zendframework/zend-stdlib/src',
-        ),
         'Zend\\Escaper\\' => 
         array (
             0 => __DIR__ . '/..' . '/zendframework/zend-escaper/src',
@@ -486,11 +476,11 @@ class ComposerStaticInit2cf64571cacb0a44db1bde8e898cafcc
     public static function getInitializer(ClassLoader $loader)
     {
         return \Closure::bind(function () use ($loader) {
-            $loader->prefixLengthsPsr4 = ComposerStaticInit2cf64571cacb0a44db1bde8e898cafcc::$prefixLengthsPsr4;
-            $loader->prefixDirsPsr4 = ComposerStaticInit2cf64571cacb0a44db1bde8e898cafcc::$prefixDirsPsr4;
-            $loader->prefixesPsr0 = ComposerStaticInit2cf64571cacb0a44db1bde8e898cafcc::$prefixesPsr0;
-            $loader->fallbackDirsPsr0 = ComposerStaticInit2cf64571cacb0a44db1bde8e898cafcc::$fallbackDirsPsr0;
-            $loader->classMap = ComposerStaticInit2cf64571cacb0a44db1bde8e898cafcc::$classMap;
+            $loader->prefixLengthsPsr4 = ComposerStaticInit0d2dd6066a4e109cf7c12ce2f1dc013a::$prefixLengthsPsr4;
+            $loader->prefixDirsPsr4 = ComposerStaticInit0d2dd6066a4e109cf7c12ce2f1dc013a::$prefixDirsPsr4;
+            $loader->prefixesPsr0 = ComposerStaticInit0d2dd6066a4e109cf7c12ce2f1dc013a::$prefixesPsr0;
+            $loader->fallbackDirsPsr0 = ComposerStaticInit0d2dd6066a4e109cf7c12ce2f1dc013a::$fallbackDirsPsr0;
+            $loader->classMap = ComposerStaticInit0d2dd6066a4e109cf7c12ce2f1dc013a::$classMap;
 
         }, null, ClassLoader::class);
     }
diff --git a/civicrm/vendor/composer/installed.json b/civicrm/vendor/composer/installed.json
index a262d864d9e30234ae647dc4efb0589f95f5aa52..48b3529d7d2e8432ee5e8ff2decc41bb03432604 100644
--- a/civicrm/vendor/composer/installed.json
+++ b/civicrm/vendor/composer/installed.json
@@ -2626,130 +2626,6 @@
             "zf2"
         ]
     },
-    {
-        "name": "zendframework/zend-stdlib",
-        "version": "2.4.13",
-        "version_normalized": "2.4.13.0",
-        "source": {
-            "type": "git",
-            "url": "https://github.com/zendframework/zend-stdlib.git",
-            "reference": "d8ecb629a72da9f91bd95c5af006384823560b42"
-        },
-        "dist": {
-            "type": "zip",
-            "url": "https://api.github.com/repos/zendframework/zend-stdlib/zipball/d8ecb629a72da9f91bd95c5af006384823560b42",
-            "reference": "d8ecb629a72da9f91bd95c5af006384823560b42",
-            "shasum": ""
-        },
-        "require": {
-            "php": ">=5.3.23"
-        },
-        "require-dev": {
-            "fabpot/php-cs-fixer": "1.7.*",
-            "phpunit/phpunit": "~4.0",
-            "satooshi/php-coveralls": "dev-master",
-            "zendframework/zend-eventmanager": "self.version",
-            "zendframework/zend-filter": "self.version",
-            "zendframework/zend-serializer": "self.version",
-            "zendframework/zend-servicemanager": "self.version"
-        },
-        "suggest": {
-            "zendframework/zend-eventmanager": "To support aggregate hydrator usage",
-            "zendframework/zend-filter": "To support naming strategy hydrator usage",
-            "zendframework/zend-serializer": "Zend\\Serializer component",
-            "zendframework/zend-servicemanager": "To support hydrator plugin manager usage"
-        },
-        "time": "2015-07-21T13:55:46+00:00",
-        "type": "library",
-        "extra": {
-            "branch-alias": {
-                "dev-master": "2.4-dev",
-                "dev-develop": "2.5-dev"
-            }
-        },
-        "installation-source": "dist",
-        "autoload": {
-            "psr-4": {
-                "Zend\\Stdlib\\": "src/"
-            }
-        },
-        "notification-url": "https://packagist.org/downloads/",
-        "license": [
-            "BSD-3-Clause"
-        ],
-        "homepage": "https://github.com/zendframework/zend-stdlib",
-        "keywords": [
-            "stdlib",
-            "zf2"
-        ]
-    },
-    {
-        "name": "zendframework/zend-validator",
-        "version": "2.4.13",
-        "version_normalized": "2.4.13.0",
-        "source": {
-            "type": "git",
-            "url": "https://github.com/zendframework/zend-validator.git",
-            "reference": "81415511fe729e6de19a61936313cef43c80d337"
-        },
-        "dist": {
-            "type": "zip",
-            "url": "https://api.github.com/repos/zendframework/zend-validator/zipball/81415511fe729e6de19a61936313cef43c80d337",
-            "reference": "81415511fe729e6de19a61936313cef43c80d337",
-            "shasum": ""
-        },
-        "require": {
-            "php": ">=5.3.23",
-            "zendframework/zend-stdlib": "~2.4.0"
-        },
-        "require-dev": {
-            "fabpot/php-cs-fixer": "1.7.*",
-            "phpunit/phpunit": "~4.0",
-            "satooshi/php-coveralls": "dev-master",
-            "zendframework/zend-config": "~2.4.0",
-            "zendframework/zend-db": "~2.4.0",
-            "zendframework/zend-filter": "~2.4.0",
-            "zendframework/zend-i18n": "~2.4.0",
-            "zendframework/zend-math": "~2.4.0",
-            "zendframework/zend-servicemanager": "~2.4.0",
-            "zendframework/zend-session": "~2.4.0",
-            "zendframework/zend-uri": "~2.4.0"
-        },
-        "suggest": {
-            "zendframework/zend-db": "Zend\\Db component",
-            "zendframework/zend-filter": "Zend\\Filter component, required by the Digits validator",
-            "zendframework/zend-i18n": "Zend\\I18n component to allow translation of validation error messages as well as to use the various Date validators",
-            "zendframework/zend-math": "Zend\\Math component",
-            "zendframework/zend-resources": "Translations of validator messages",
-            "zendframework/zend-servicemanager": "Zend\\ServiceManager component to allow using the ValidatorPluginManager and validator chains",
-            "zendframework/zend-session": "Zend\\Session component",
-            "zendframework/zend-uri": "Zend\\Uri component, required by the Uri and Sitemap\\Loc validators"
-        },
-        "time": "2015-09-08T21:04:17+00:00",
-        "type": "library",
-        "extra": {
-            "branch-alias": {
-                "dev-master": "2.4-dev",
-                "dev-develop": "2.5-dev"
-            }
-        },
-        "installation-source": "dist",
-        "autoload": {
-            "psr-4": {
-                "Zend\\Validator\\": "src/"
-            }
-        },
-        "notification-url": "https://packagist.org/downloads/",
-        "license": [
-            "BSD-3-Clause"
-        ],
-        "description": "provides a set of commonly needed validators",
-        "homepage": "https://github.com/zendframework/zend-validator",
-        "keywords": [
-            "validator",
-            "zf2"
-        ]
-    },
     {
         "name": "zetacomponents/base",
         "version": "1.9.1",
diff --git a/civicrm/vendor/zendframework/zend-stdlib/.coveralls.yml b/civicrm/vendor/zendframework/zend-stdlib/.coveralls.yml
deleted file mode 100644
index 53bda829c8127d2fc8263e6fb6a54fb66f4916b1..0000000000000000000000000000000000000000
--- a/civicrm/vendor/zendframework/zend-stdlib/.coveralls.yml
+++ /dev/null
@@ -1,3 +0,0 @@
-coverage_clover: clover.xml
-json_path: coveralls-upload.json
-src_dir: src
diff --git a/civicrm/vendor/zendframework/zend-stdlib/CHANGELOG.md b/civicrm/vendor/zendframework/zend-stdlib/CHANGELOG.md
deleted file mode 100644
index 068587e78b6e4107a20c2ed6d0b798549e7d4017..0000000000000000000000000000000000000000
--- a/civicrm/vendor/zendframework/zend-stdlib/CHANGELOG.md
+++ /dev/null
@@ -1,23 +0,0 @@
-# Changelog
-
-All notable changes to this project will be documented in this file, in reverse chronological order by release.
-
-## 2.4.4 - 2015-07-21
-
-### Added
-
-- Nothing.
-
-### Deprecated
-
-- Nothing.
-
-### Removed
-
-- Nothing.
-
-### Fixed
-
-- [#9](https://github.com/zendframework/zend-stdlib/pull/9) fixes an issue with
-  count incrementation during insert in PriorityList, ensuring that incrementation only
-  occurs when the item inserted was not previously present in the list.
diff --git a/civicrm/vendor/zendframework/zend-stdlib/CONTRIBUTING.md b/civicrm/vendor/zendframework/zend-stdlib/CONTRIBUTING.md
deleted file mode 100644
index b87ecf03935f246d3991ba3e88ab2776d2c23acc..0000000000000000000000000000000000000000
--- a/civicrm/vendor/zendframework/zend-stdlib/CONTRIBUTING.md
+++ /dev/null
@@ -1,229 +0,0 @@
-# CONTRIBUTING
-
-## RESOURCES
-
-If you wish to contribute to Zend Framework, please be sure to
-read/subscribe to the following resources:
-
- -  [Coding Standards](https://github.com/zendframework/zf2/wiki/Coding-Standards)
- -  [Contributor's Guide](http://framework.zend.com/participate/contributor-guide)
- -  ZF Contributor's mailing list:
-    Archives: http://zend-framework-community.634137.n4.nabble.com/ZF-Contributor-f680267.html
-    Subscribe: zf-contributors-subscribe@lists.zend.com
- -  ZF Contributor's IRC channel:
-    #zftalk.dev on Freenode.net
-
-If you are working on new features or refactoring [create a proposal](https://github.com/zendframework/zend-stdlib/issues/new).
-
-## Reporting Potential Security Issues
-
-If you have encountered a potential security vulnerability, please **DO NOT** report it on the public
-issue tracker: send it to us at [zf-security@zend.com](mailto:zf-security@zend.com) instead.
-We will work with you to verify the vulnerability and patch it as soon as possible.
-
-When reporting issues, please provide the following information:
-
-- Component(s) affected
-- A description indicating how to reproduce the issue
-- A summary of the security vulnerability and impact
-
-We request that you contact us via the email address above and give the project
-contributors a chance to resolve the vulnerability and issue a new release prior
-to any public exposure; this helps protect users and provides them with a chance
-to upgrade and/or update in order to protect their applications.
-
-For sensitive email communications, please use [our PGP key](http://framework.zend.com/zf-security-pgp-key.asc).
-
-## RUNNING TESTS
-
-> ### Note: testing versions prior to 2.4
->
-> This component originates with Zend Framework 2. During the lifetime of ZF2,
-> testing infrastructure migrated from PHPUnit 3 to PHPUnit 4. In most cases, no
-> changes were necessary. However, due to the migration, tests may not run on
-> versions < 2.4. As such, you may need to change the PHPUnit dependency if
-> attempting a fix on such a version.
-
-To run tests:
-
-- Clone the repository:
-
-  ```console
-  $ git clone git@github.com:zendframework/zend-stdlib.git
-  $ cd
-  ```
-
-- Install dependencies via composer:
-
-  ```console
-  $ curl -sS https://getcomposer.org/installer | php --
-  $ ./composer.phar install
-  ```
-
-  If you don't have `curl` installed, you can also download `composer.phar` from https://getcomposer.org/
-
-- Run the tests via `phpunit` and the provided PHPUnit config, like in this example:
-
-  ```console
-  $ ./vendor/bin/phpunit
-  ```
-
-You can turn on conditional tests with the phpunit.xml file.
-To do so:
-
- -  Copy `phpunit.xml.dist` file to `phpunit.xml`
- -  Edit `phpunit.xml` to enable any specific functionality you
-    want to test, as well as to provide test values to utilize.
-
-## Running Coding Standards Checks
-
-This component uses [php-cs-fixer](http://cs.sensiolabs.org/) for coding
-standards checks, and provides configuration for our selected checks.
-`php-cs-fixer` is installed by default via Composer.
-
-To run checks only:
-
-```console
-$ ./vendor/bin/php-cs-fixer fix . -v --diff --dry-run --config-file=.php_cs
-```
-
-To have `php-cs-fixer` attempt to fix problems for you, omit the `--dry-run`
-flag:
-
-```console
-$ ./vendor/bin/php-cs-fixer fix . -v --diff --config-file=.php_cs
-```
-
-If you allow php-cs-fixer to fix CS issues, please re-run the tests to ensure
-they pass, and make sure you add and commit the changes after verification.
-
-## Recommended Workflow for Contributions
-
-Your first step is to establish a public repository from which we can
-pull your work into the master repository. We recommend using
-[GitHub](https://github.com), as that is where the component is already hosted.
-
-1. Setup a [GitHub account](http://github.com/), if you haven't yet
-2. Fork the repository (http://github.com/zendframework/zend-stdlib)
-3. Clone the canonical repository locally and enter it.
-
-   ```console
-   $ git clone git://github.com:zendframework/zend-stdlib.git
-   $ cd zend-stdlib
-   ```
-
-4. Add a remote to your fork; substitute your GitHub username in the command
-   below.
-
-   ```console
-   $ git remote add {username} git@github.com:{username}/zend-stdlib.git
-   $ git fetch {username}
-   ```
-
-### Keeping Up-to-Date
-
-Periodically, you should update your fork or personal repository to
-match the canonical ZF repository. Assuming you have setup your local repository
-per the instructions above, you can do the following:
-
-
-```console
-$ git checkout master
-$ git fetch origin
-$ git rebase origin/master
-# OPTIONALLY, to keep your remote up-to-date -
-$ git push {username} master:master
-```
-
-If you're tracking other branches -- for example, the "develop" branch, where
-new feature development occurs -- you'll want to do the same operations for that
-branch; simply substitute  "develop" for "master".
-
-### Working on a patch
-
-We recommend you do each new feature or bugfix in a new branch. This simplifies
-the task of code review as well as the task of merging your changes into the
-canonical repository.
-
-A typical workflow will then consist of the following:
-
-1. Create a new local branch based off either your master or develop branch.
-2. Switch to your new local branch. (This step can be combined with the
-   previous step with the use of `git checkout -b`.)
-3. Do some work, commit, repeat as necessary.
-4. Push the local branch to your remote repository.
-5. Send a pull request.
-
-The mechanics of this process are actually quite trivial. Below, we will
-create a branch for fixing an issue in the tracker.
-
-```console
-$ git checkout -b hotfix/9295
-Switched to a new branch 'hotfix/9295'
-```
-
-... do some work ...
-
-
-```console
-$ git commit
-```
-
-... write your log message ...
-
-
-```console
-$ git push {username} hotfix/9295:hotfix/9295
-Counting objects: 38, done.
-Delta compression using up to 2 threads.
-Compression objects: 100% (18/18), done.
-Writing objects: 100% (20/20), 8.19KiB, done.
-Total 20 (delta 12), reused 0 (delta 0)
-To ssh://git@github.com/{username}/zend-stdlib.git
-   b5583aa..4f51698  HEAD -> master
-```
-
-To send a pull request, you have two options.
-
-If using GitHub, you can do the pull request from there. Navigate to
-your repository, select the branch you just created, and then select the
-"Pull Request" button in the upper right. Select the user/organization
-"zendframework" as the recipient.
-
-If using your own repository - or even if using GitHub - you can use `git
-format-patch` to create a patchset for us to apply; in fact, this is
-**recommended** for security-related patches. If you use `format-patch`, please
-send the patches as attachments to:
-
--  zf-devteam@zend.com for patches without security implications
--  zf-security@zend.com for security patches
-
-#### What branch to issue the pull request against?
-
-Which branch should you issue a pull request against?
-
-- For fixes against the stable release, issue the pull request against the
-  "master" branch.
-- For new features, or fixes that introduce new elements to the public API (such
-  as new public methods or properties), issue the pull request against the
-  "develop" branch.
-
-### Branch Cleanup
-
-As you might imagine, if you are a frequent contributor, you'll start to
-get a ton of branches both locally and on your remote.
-
-Once you know that your changes have been accepted to the master
-repository, we suggest doing some cleanup of these branches.
-
--  Local branch cleanup
-
-   ```console
-   $ git branch -d <branchname>
-   ```
-
--  Remote branch removal
-
-   ```console
-   $ git push {username} :<branchname>
-   ```
diff --git a/civicrm/vendor/zendframework/zend-stdlib/LICENSE.txt b/civicrm/vendor/zendframework/zend-stdlib/LICENSE.txt
deleted file mode 100644
index 6eab5aa14fd421059dfecada369abb8dd79c8a48..0000000000000000000000000000000000000000
--- a/civicrm/vendor/zendframework/zend-stdlib/LICENSE.txt
+++ /dev/null
@@ -1,27 +0,0 @@
-Copyright (c) 2005-2015, Zend Technologies USA, Inc.
-All rights reserved.
-
-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 Zend Technologies USA, Inc. nor the names of its
-      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.
diff --git a/civicrm/vendor/zendframework/zend-stdlib/README.md b/civicrm/vendor/zendframework/zend-stdlib/README.md
deleted file mode 100644
index c065e86e323b099efeb697d67b0b1cf62cca38eb..0000000000000000000000000000000000000000
--- a/civicrm/vendor/zendframework/zend-stdlib/README.md
+++ /dev/null
@@ -1,15 +0,0 @@
-# zend-stdlib
-
-`Zend\Stdlib` is a set of components that implements general purpose utility
-class for different scopes like:
-
-- array utilities functions;
-- hydrators;
-- json serialazible interfaces;
-- general messaging systems;
-- strin wrappers;
-- etc
-
-
-- File issues at https://github.com/zendframework/zend-stdlib/issues
-- Documentation is at http://framework.zend.com/manual/current/en/index.html#zend-stdlib
diff --git a/civicrm/vendor/zendframework/zend-stdlib/composer.json b/civicrm/vendor/zendframework/zend-stdlib/composer.json
deleted file mode 100644
index 0247c5578c54bd2d5491cc16954b04b6b44b320b..0000000000000000000000000000000000000000
--- a/civicrm/vendor/zendframework/zend-stdlib/composer.json
+++ /dev/null
@@ -1,44 +0,0 @@
-{
-    "name": "zendframework/zend-stdlib",
-    "description": " ",
-    "license": "BSD-3-Clause",
-    "keywords": [
-        "zf2",
-        "stdlib"
-    ],
-    "homepage": "https://github.com/zendframework/zend-stdlib",
-    "autoload": {
-        "psr-4": {
-            "Zend\\Stdlib\\": "src/"
-        }
-    },
-    "require": {
-        "php": ">=5.3.23"
-    },
-    "require-dev": {
-        "zendframework/zend-eventmanager": "self.version",
-        "zendframework/zend-serializer": "self.version",
-        "zendframework/zend-servicemanager": "self.version",
-        "zendframework/zend-filter": "self.version",
-        "fabpot/php-cs-fixer": "1.7.*",
-        "satooshi/php-coveralls": "dev-master",
-        "phpunit/PHPUnit": "~4.0"
-    },
-    "suggest": {
-        "zendframework/zend-eventmanager": "To support aggregate hydrator usage",
-        "zendframework/zend-serializer": "Zend\\Serializer component",
-        "zendframework/zend-servicemanager": "To support hydrator plugin manager usage",
-        "zendframework/zend-filter": "To support naming strategy hydrator usage"
-    },
-    "extra": {
-        "branch-alias": {
-            "dev-master": "2.4-dev",
-            "dev-develop": "2.5-dev"
-        }
-    },
-    "autoload-dev": {
-        "psr-4": {
-            "ZendTest\\Stdlib\\": "test/"
-        }
-    }
-}
\ No newline at end of file
diff --git a/civicrm/vendor/zendframework/zend-stdlib/phpunit.xml.dist b/civicrm/vendor/zendframework/zend-stdlib/phpunit.xml.dist
deleted file mode 100644
index 2d77d4b7826e3156e48169b2926b50151667dab6..0000000000000000000000000000000000000000
--- a/civicrm/vendor/zendframework/zend-stdlib/phpunit.xml.dist
+++ /dev/null
@@ -1,34 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<phpunit xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-         xsi:noNamespaceSchemaLocation="./vendor/phpunit/phpunit/phpunit.xsd"
-         bootstrap="./test/bootstrap.php"
-         colors="true">
-    <testsuites>
-        <testsuite name="zend-stdlib Test Suite">
-            <directory>./test/</directory>
-        </testsuite>
-    </testsuites>
-
-    <groups>
-        <exclude>
-            <group>disable</group>
-        </exclude>
-    </groups>
-
-    <filter>
-        <whitelist addUncoveredFilesFromWhitelist="true">
-            <directory suffix=".php">./src</directory>
-        </whitelist>
-    </filter>
-
-    <php>
-        <ini name="date.timezone" value="UTC"/>
-
-        <!-- OB_ENABLED should be enabled for some tests to check if all
-             functionality works as expected. Such tests include those for
-             Zend\Soap and Zend\Session, which require that headers not be sent
-             in order to work. -->
-        <const name="TESTS_ZEND_OB_ENABLED" value="false" />
-
-    </php>
-</phpunit>
diff --git a/civicrm/vendor/zendframework/zend-stdlib/phpunit.xml.travis b/civicrm/vendor/zendframework/zend-stdlib/phpunit.xml.travis
deleted file mode 100644
index 2d77d4b7826e3156e48169b2926b50151667dab6..0000000000000000000000000000000000000000
--- a/civicrm/vendor/zendframework/zend-stdlib/phpunit.xml.travis
+++ /dev/null
@@ -1,34 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<phpunit xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-         xsi:noNamespaceSchemaLocation="./vendor/phpunit/phpunit/phpunit.xsd"
-         bootstrap="./test/bootstrap.php"
-         colors="true">
-    <testsuites>
-        <testsuite name="zend-stdlib Test Suite">
-            <directory>./test/</directory>
-        </testsuite>
-    </testsuites>
-
-    <groups>
-        <exclude>
-            <group>disable</group>
-        </exclude>
-    </groups>
-
-    <filter>
-        <whitelist addUncoveredFilesFromWhitelist="true">
-            <directory suffix=".php">./src</directory>
-        </whitelist>
-    </filter>
-
-    <php>
-        <ini name="date.timezone" value="UTC"/>
-
-        <!-- OB_ENABLED should be enabled for some tests to check if all
-             functionality works as expected. Such tests include those for
-             Zend\Soap and Zend\Session, which require that headers not be sent
-             in order to work. -->
-        <const name="TESTS_ZEND_OB_ENABLED" value="false" />
-
-    </php>
-</phpunit>
diff --git a/civicrm/vendor/zendframework/zend-stdlib/src/AbstractOptions.php b/civicrm/vendor/zendframework/zend-stdlib/src/AbstractOptions.php
deleted file mode 100644
index aaa1dd299509fe5e102bcb4e9e6e0da61172766d..0000000000000000000000000000000000000000
--- a/civicrm/vendor/zendframework/zend-stdlib/src/AbstractOptions.php
+++ /dev/null
@@ -1,176 +0,0 @@
-<?php
-/**
- * Zend Framework (http://framework.zend.com/)
- *
- * @link      http://github.com/zendframework/zf2 for the canonical source repository
- * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
- * @license   http://framework.zend.com/license/new-bsd New BSD License
- */
-
-namespace Zend\Stdlib;
-
-use Traversable;
-
-abstract class AbstractOptions implements ParameterObjectInterface
-{
-    /**
-     * We use the __ prefix to avoid collisions with properties in
-     * user-implementations.
-     *
-     * @var bool
-     */
-    protected $__strictMode__ = true;
-
-    /**
-     * Constructor
-     *
-     * @param  array|Traversable|null $options
-     */
-    public function __construct($options = null)
-    {
-        if (null !== $options) {
-            $this->setFromArray($options);
-        }
-    }
-
-    /**
-     * Set one or more configuration properties
-     *
-     * @param  array|Traversable|AbstractOptions $options
-     * @throws Exception\InvalidArgumentException
-     * @return AbstractOptions Provides fluent interface
-     */
-    public function setFromArray($options)
-    {
-        if ($options instanceof self) {
-            $options = $options->toArray();
-        }
-
-        if (!is_array($options) && !$options instanceof Traversable) {
-            throw new Exception\InvalidArgumentException(
-                sprintf(
-                    'Parameter provided to %s must be an %s, %s or %s',
-                    __METHOD__,
-                    'array',
-                    'Traversable',
-                    'Zend\Stdlib\AbstractOptions'
-                )
-            );
-        }
-
-        foreach ($options as $key => $value) {
-            $this->__set($key, $value);
-        }
-
-        return $this;
-    }
-
-    /**
-     * Cast to array
-     *
-     * @return array
-     */
-    public function toArray()
-    {
-        $array = array();
-        $transform = function ($letters) {
-            $letter = array_shift($letters);
-            return '_' . strtolower($letter);
-        };
-        foreach ($this as $key => $value) {
-            if ($key === '__strictMode__') {
-                continue;
-            }
-            $normalizedKey = preg_replace_callback('/([A-Z])/', $transform, $key);
-            $array[$normalizedKey] = $value;
-        }
-        return $array;
-    }
-
-    /**
-     * Set a configuration property
-     *
-     * @see ParameterObject::__set()
-     * @param string $key
-     * @param mixed $value
-     * @throws Exception\BadMethodCallException
-     * @return void
-     */
-    public function __set($key, $value)
-    {
-        $setter = 'set' . str_replace('_', '', $key);
-
-        if (is_callable(array($this, $setter))) {
-            $this->{$setter}($value);
-
-            return;
-        }
-
-        if ($this->__strictMode__) {
-            throw new Exception\BadMethodCallException(sprintf(
-                'The option "%s" does not have a callable "%s" ("%s") setter method which must be defined',
-                $key,
-                'set' . str_replace(' ', '', ucwords(str_replace('_', ' ', $key))),
-                $setter
-            ));
-        }
-    }
-
-    /**
-     * Get a configuration property
-     *
-     * @see ParameterObject::__get()
-     * @param string $key
-     * @throws Exception\BadMethodCallException
-     * @return mixed
-     */
-    public function __get($key)
-    {
-        $getter = 'get' . str_replace('_', '', $key);
-
-        if (is_callable(array($this, $getter))) {
-            return $this->{$getter}();
-        }
-
-        throw new Exception\BadMethodCallException(sprintf(
-            'The option "%s" does not have a callable "%s" getter method which must be defined',
-            $key,
-            'get' . str_replace(' ', '', ucwords(str_replace('_', ' ', $key)))
-        ));
-    }
-
-    /**
-     * Test if a configuration property is null
-     * @see ParameterObject::__isset()
-     * @param string $key
-     * @return bool
-     */
-    public function __isset($key)
-    {
-        $getter = 'get' . str_replace('_', '', $key);
-
-        return method_exists($this, $getter) && null !== $this->__get($key);
-    }
-
-    /**
-     * Set a configuration property to NULL
-     *
-     * @see ParameterObject::__unset()
-     * @param string $key
-     * @throws Exception\InvalidArgumentException
-     * @return void
-     */
-    public function __unset($key)
-    {
-        try {
-            $this->__set($key, null);
-        } catch (Exception\BadMethodCallException $e) {
-            throw new Exception\InvalidArgumentException(
-                'The class property $' . $key . ' cannot be unset as'
-                . ' NULL is an invalid value for it',
-                0,
-                $e
-            );
-        }
-    }
-}
diff --git a/civicrm/vendor/zendframework/zend-stdlib/src/ArrayObject.php b/civicrm/vendor/zendframework/zend-stdlib/src/ArrayObject.php
deleted file mode 100644
index 44145c8554ebe04a1fb6b19004f7a1084854f245..0000000000000000000000000000000000000000
--- a/civicrm/vendor/zendframework/zend-stdlib/src/ArrayObject.php
+++ /dev/null
@@ -1,432 +0,0 @@
-<?php
-/**
- * Zend Framework (http://framework.zend.com/)
- *
- * @link      http://github.com/zendframework/zf2 for the canonical source repository
- * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
- * @license   http://framework.zend.com/license/new-bsd New BSD License
- */
-
-namespace Zend\Stdlib;
-
-use ArrayAccess;
-use Countable;
-use IteratorAggregate;
-use Serializable;
-
-/**
- * Custom framework ArrayObject implementation
- *
- * Extends version-specific "abstract" implementation.
- */
-class ArrayObject implements IteratorAggregate, ArrayAccess, Serializable, Countable
-{
-    /**
-     * Properties of the object have their normal functionality
-     * when accessed as list (var_dump, foreach, etc.).
-     */
-    const STD_PROP_LIST = 1;
-
-    /**
-     * Entries can be accessed as properties (read and write).
-     */
-    const ARRAY_AS_PROPS = 2;
-
-    /**
-     * @var array
-     */
-    protected $storage;
-
-    /**
-     * @var int
-     */
-    protected $flag;
-
-    /**
-     * @var string
-     */
-    protected $iteratorClass;
-
-    /**
-     * @var array
-     */
-    protected $protectedProperties;
-
-    /**
-     * Constructor
-     *
-     * @param array  $input
-     * @param int    $flags
-     * @param string $iteratorClass
-     */
-    public function __construct($input = array(), $flags = self::STD_PROP_LIST, $iteratorClass = 'ArrayIterator')
-    {
-        $this->setFlags($flags);
-        $this->storage = $input;
-        $this->setIteratorClass($iteratorClass);
-        $this->protectedProperties = array_keys(get_object_vars($this));
-    }
-
-    /**
-     * Returns whether the requested key exists
-     *
-     * @param  mixed $key
-     * @return bool
-     */
-    public function __isset($key)
-    {
-        if ($this->flag == self::ARRAY_AS_PROPS) {
-            return $this->offsetExists($key);
-        }
-        if (in_array($key, $this->protectedProperties)) {
-            throw new Exception\InvalidArgumentException('$key is a protected property, use a different key');
-        }
-
-        return isset($this->$key);
-    }
-
-    /**
-     * Sets the value at the specified key to value
-     *
-     * @param  mixed $key
-     * @param  mixed $value
-     * @return void
-     */
-    public function __set($key, $value)
-    {
-        if ($this->flag == self::ARRAY_AS_PROPS) {
-            return $this->offsetSet($key, $value);
-        }
-        if (in_array($key, $this->protectedProperties)) {
-            throw new Exception\InvalidArgumentException('$key is a protected property, use a different key');
-        }
-        $this->$key = $value;
-    }
-
-    /**
-     * Unsets the value at the specified key
-     *
-     * @param  mixed $key
-     * @return void
-     */
-    public function __unset($key)
-    {
-        if ($this->flag == self::ARRAY_AS_PROPS) {
-            return $this->offsetUnset($key);
-        }
-        if (in_array($key, $this->protectedProperties)) {
-            throw new Exception\InvalidArgumentException('$key is a protected property, use a different key');
-        }
-        unset($this->$key);
-    }
-
-    /**
-     * Returns the value at the specified key by reference
-     *
-     * @param  mixed $key
-     * @return mixed
-     */
-    public function &__get($key)
-    {
-        $ret = null;
-        if ($this->flag == self::ARRAY_AS_PROPS) {
-            $ret =& $this->offsetGet($key);
-
-            return $ret;
-        }
-        if (in_array($key, $this->protectedProperties)) {
-            throw new Exception\InvalidArgumentException('$key is a protected property, use a different key');
-        }
-
-        return $this->$key;
-    }
-
-    /**
-     * Appends the value
-     *
-     * @param  mixed $value
-     * @return void
-     */
-    public function append($value)
-    {
-        $this->storage[] = $value;
-    }
-
-    /**
-     * Sort the entries by value
-     *
-     * @return void
-     */
-    public function asort()
-    {
-        asort($this->storage);
-    }
-
-    /**
-     * Get the number of public properties in the ArrayObject
-     *
-     * @return int
-     */
-    public function count()
-    {
-        return count($this->storage);
-    }
-
-    /**
-     * Exchange the array for another one.
-     *
-     * @param  array|ArrayObject $data
-     * @return array
-     */
-    public function exchangeArray($data)
-    {
-        if (!is_array($data) && !is_object($data)) {
-            throw new Exception\InvalidArgumentException('Passed variable is not an array or object, using empty array instead');
-        }
-
-        if (is_object($data) && ($data instanceof self || $data instanceof \ArrayObject)) {
-            $data = $data->getArrayCopy();
-        }
-        if (!is_array($data)) {
-            $data = (array) $data;
-        }
-
-        $storage = $this->storage;
-
-        $this->storage = $data;
-
-        return $storage;
-    }
-
-    /**
-     * Creates a copy of the ArrayObject.
-     *
-     * @return array
-     */
-    public function getArrayCopy()
-    {
-        return $this->storage;
-    }
-
-    /**
-     * Gets the behavior flags.
-     *
-     * @return int
-     */
-    public function getFlags()
-    {
-        return $this->flag;
-    }
-
-    /**
-     * Create a new iterator from an ArrayObject instance
-     *
-     * @return \Iterator
-     */
-    public function getIterator()
-    {
-        $class = $this->iteratorClass;
-
-        return new $class($this->storage);
-    }
-
-    /**
-     * Gets the iterator classname for the ArrayObject.
-     *
-     * @return string
-     */
-    public function getIteratorClass()
-    {
-        return $this->iteratorClass;
-    }
-
-    /**
-     * Sort the entries by key
-     *
-     * @return void
-     */
-    public function ksort()
-    {
-        ksort($this->storage);
-    }
-
-    /**
-     * Sort an array using a case insensitive "natural order" algorithm
-     *
-     * @return void
-     */
-    public function natcasesort()
-    {
-        natcasesort($this->storage);
-    }
-
-    /**
-     * Sort entries using a "natural order" algorithm
-     *
-     * @return void
-     */
-    public function natsort()
-    {
-        natsort($this->storage);
-    }
-
-    /**
-     * Returns whether the requested key exists
-     *
-     * @param  mixed $key
-     * @return bool
-     */
-    public function offsetExists($key)
-    {
-        return isset($this->storage[$key]);
-    }
-
-    /**
-     * Returns the value at the specified key
-     *
-     * @param  mixed $key
-     * @return mixed
-     */
-    public function &offsetGet($key)
-    {
-        $ret = null;
-        if (!$this->offsetExists($key)) {
-            return $ret;
-        }
-        $ret =& $this->storage[$key];
-
-        return $ret;
-    }
-
-    /**
-     * Sets the value at the specified key to value
-     *
-     * @param  mixed $key
-     * @param  mixed $value
-     * @return void
-     */
-    public function offsetSet($key, $value)
-    {
-        $this->storage[$key] = $value;
-    }
-
-    /**
-     * Unsets the value at the specified key
-     *
-     * @param  mixed $key
-     * @return void
-     */
-    public function offsetUnset($key)
-    {
-        if ($this->offsetExists($key)) {
-            unset($this->storage[$key]);
-        }
-    }
-
-    /**
-     * Serialize an ArrayObject
-     *
-     * @return string
-     */
-    public function serialize()
-    {
-        return serialize(get_object_vars($this));
-    }
-
-    /**
-     * Sets the behavior flags
-     *
-     * @param  int  $flags
-     * @return void
-     */
-    public function setFlags($flags)
-    {
-        $this->flag = $flags;
-    }
-
-    /**
-     * Sets the iterator classname for the ArrayObject
-     *
-     * @param  string $class
-     * @return void
-     */
-    public function setIteratorClass($class)
-    {
-        if (class_exists($class)) {
-            $this->iteratorClass = $class;
-
-            return ;
-        }
-
-        if (strpos($class, '\\') === 0) {
-            $class = '\\' . $class;
-            if (class_exists($class)) {
-                $this->iteratorClass = $class;
-
-                return ;
-            }
-        }
-
-        throw new Exception\InvalidArgumentException('The iterator class does not exist');
-    }
-
-    /**
-     * Sort the entries with a user-defined comparison function and maintain key association
-     *
-     * @param  callable $function
-     * @return void
-     */
-    public function uasort($function)
-    {
-        if (is_callable($function)) {
-            uasort($this->storage, $function);
-        }
-    }
-
-    /**
-     * Sort the entries by keys using a user-defined comparison function
-     *
-     * @param  callable $function
-     * @return void
-     */
-    public function uksort($function)
-    {
-        if (is_callable($function)) {
-            uksort($this->storage, $function);
-        }
-    }
-
-    /**
-     * Unserialize an ArrayObject
-     *
-     * @param  string $data
-     * @return void
-     */
-    public function unserialize($data)
-    {
-        $ar                        = unserialize($data);
-        $this->protectedProperties = array_keys(get_object_vars($this));
-
-        $this->setFlags($ar['flag']);
-        $this->exchangeArray($ar['storage']);
-        $this->setIteratorClass($ar['iteratorClass']);
-
-        foreach ($ar as $k => $v) {
-            switch ($k) {
-                case 'flag':
-                    $this->setFlags($v);
-                    break;
-                case 'storage':
-                    $this->exchangeArray($v);
-                    break;
-                case 'iteratorClass':
-                    $this->setIteratorClass($v);
-                    break;
-                case 'protectedProperties':
-                    continue;
-                default:
-                    $this->__set($k, $v);
-            }
-        }
-    }
-}
diff --git a/civicrm/vendor/zendframework/zend-stdlib/src/ArraySerializableInterface.php b/civicrm/vendor/zendframework/zend-stdlib/src/ArraySerializableInterface.php
deleted file mode 100644
index dcf84719521a1de77ac0c9130222d5e7c3ae424e..0000000000000000000000000000000000000000
--- a/civicrm/vendor/zendframework/zend-stdlib/src/ArraySerializableInterface.php
+++ /dev/null
@@ -1,28 +0,0 @@
-<?php
-/**
- * Zend Framework (http://framework.zend.com/)
- *
- * @link      http://github.com/zendframework/zf2 for the canonical source repository
- * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
- * @license   http://framework.zend.com/license/new-bsd New BSD License
- */
-
-namespace Zend\Stdlib;
-
-interface ArraySerializableInterface
-{
-    /**
-     * Exchange internal values from provided array
-     *
-     * @param  array $array
-     * @return void
-     */
-    public function exchangeArray(array $array);
-
-    /**
-     * Return an array representation of the object
-     *
-     * @return array
-     */
-    public function getArrayCopy();
-}
diff --git a/civicrm/vendor/zendframework/zend-stdlib/src/ArrayStack.php b/civicrm/vendor/zendframework/zend-stdlib/src/ArrayStack.php
deleted file mode 100644
index 39d02aacac19c9654cc89fab28d7a8fca0de8f53..0000000000000000000000000000000000000000
--- a/civicrm/vendor/zendframework/zend-stdlib/src/ArrayStack.php
+++ /dev/null
@@ -1,33 +0,0 @@
-<?php
-/**
- * Zend Framework (http://framework.zend.com/)
- *
- * @link      http://github.com/zendframework/zf2 for the canonical source repository
- * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
- * @license   http://framework.zend.com/license/new-bsd New BSD License
- */
-
-namespace Zend\Stdlib;
-
-use ArrayIterator;
-use ArrayObject as PhpArrayObject;
-
-/**
- * ArrayObject that acts as a stack with regards to iteration
- */
-class ArrayStack extends PhpArrayObject
-{
-    /**
-     * Retrieve iterator
-     *
-     * Retrieve an array copy of the object, reverse its order, and return an
-     * ArrayIterator with that reversed array.
-     *
-     * @return ArrayIterator
-     */
-    public function getIterator()
-    {
-        $array = $this->getArrayCopy();
-        return new ArrayIterator(array_reverse($array));
-    }
-}
diff --git a/civicrm/vendor/zendframework/zend-stdlib/src/ArrayUtils.php b/civicrm/vendor/zendframework/zend-stdlib/src/ArrayUtils.php
deleted file mode 100644
index 3545054ed84832a1dbed8868de6cf0c90430fd7c..0000000000000000000000000000000000000000
--- a/civicrm/vendor/zendframework/zend-stdlib/src/ArrayUtils.php
+++ /dev/null
@@ -1,335 +0,0 @@
-<?php
-/**
- * Zend Framework (http://framework.zend.com/)
- *
- * @link      http://github.com/zendframework/zf2 for the canonical source repository
- * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
- * @license   http://framework.zend.com/license/new-bsd New BSD License
- */
-
-namespace Zend\Stdlib;
-
-use Traversable;
-use Zend\Stdlib\ArrayUtils\MergeRemoveKey;
-use Zend\Stdlib\ArrayUtils\MergeReplaceKeyInterface;
-
-/**
- * Utility class for testing and manipulation of PHP arrays.
- *
- * Declared abstract, as we have no need for instantiation.
- */
-abstract class ArrayUtils
-{
-    /**
-     * Compatibility Flag for ArrayUtils::filter
-     */
-    const ARRAY_FILTER_USE_BOTH = 1;
-
-    /**
-     * Compatibility Flag for ArrayUtils::filter
-     */
-    const ARRAY_FILTER_USE_KEY  = 2;
-
-    /**
-     * Test whether an array contains one or more string keys
-     *
-     * @param  mixed $value
-     * @param  bool  $allowEmpty    Should an empty array() return true
-     * @return bool
-     */
-    public static function hasStringKeys($value, $allowEmpty = false)
-    {
-        if (!is_array($value)) {
-            return false;
-        }
-
-        if (!$value) {
-            return $allowEmpty;
-        }
-
-        return count(array_filter(array_keys($value), 'is_string')) > 0;
-    }
-
-    /**
-     * Test whether an array contains one or more integer keys
-     *
-     * @param  mixed $value
-     * @param  bool  $allowEmpty    Should an empty array() return true
-     * @return bool
-     */
-    public static function hasIntegerKeys($value, $allowEmpty = false)
-    {
-        if (!is_array($value)) {
-            return false;
-        }
-
-        if (!$value) {
-            return $allowEmpty;
-        }
-
-        return count(array_filter(array_keys($value), 'is_int')) > 0;
-    }
-
-    /**
-     * Test whether an array contains one or more numeric keys.
-     *
-     * A numeric key can be one of the following:
-     * - an integer 1,
-     * - a string with a number '20'
-     * - a string with negative number: '-1000'
-     * - a float: 2.2120, -78.150999
-     * - a string with float:  '4000.99999', '-10.10'
-     *
-     * @param  mixed $value
-     * @param  bool  $allowEmpty    Should an empty array() return true
-     * @return bool
-     */
-    public static function hasNumericKeys($value, $allowEmpty = false)
-    {
-        if (!is_array($value)) {
-            return false;
-        }
-
-        if (!$value) {
-            return $allowEmpty;
-        }
-
-        return count(array_filter(array_keys($value), 'is_numeric')) > 0;
-    }
-
-    /**
-     * Test whether an array is a list
-     *
-     * A list is a collection of values assigned to continuous integer keys
-     * starting at 0 and ending at count() - 1.
-     *
-     * For example:
-     * <code>
-     * $list = array('a', 'b', 'c', 'd');
-     * $list = array(
-     *     0 => 'foo',
-     *     1 => 'bar',
-     *     2 => array('foo' => 'baz'),
-     * );
-     * </code>
-     *
-     * @param  mixed $value
-     * @param  bool  $allowEmpty    Is an empty list a valid list?
-     * @return bool
-     */
-    public static function isList($value, $allowEmpty = false)
-    {
-        if (!is_array($value)) {
-            return false;
-        }
-
-        if (!$value) {
-            return $allowEmpty;
-        }
-
-        return (array_values($value) === $value);
-    }
-
-    /**
-     * Test whether an array is a hash table.
-     *
-     * An array is a hash table if:
-     *
-     * 1. Contains one or more non-integer keys, or
-     * 2. Integer keys are non-continuous or misaligned (not starting with 0)
-     *
-     * For example:
-     * <code>
-     * $hash = array(
-     *     'foo' => 15,
-     *     'bar' => false,
-     * );
-     * $hash = array(
-     *     1995  => 'Birth of PHP',
-     *     2009  => 'PHP 5.3.0',
-     *     2012  => 'PHP 5.4.0',
-     * );
-     * $hash = array(
-     *     'formElement,
-     *     'options' => array( 'debug' => true ),
-     * );
-     * </code>
-     *
-     * @param  mixed $value
-     * @param  bool  $allowEmpty    Is an empty array() a valid hash table?
-     * @return bool
-     */
-    public static function isHashTable($value, $allowEmpty = false)
-    {
-        if (!is_array($value)) {
-            return false;
-        }
-
-        if (!$value) {
-            return $allowEmpty;
-        }
-
-        return (array_values($value) !== $value);
-    }
-
-    /**
-     * Checks if a value exists in an array.
-     *
-     * Due to "foo" == 0 === TRUE with in_array when strict = false, an option
-     * has been added to prevent this. When $strict = 0/false, the most secure
-     * non-strict check is implemented. if $strict = -1, the default in_array
-     * non-strict behaviour is used.
-     *
-     * @param mixed $needle
-     * @param array $haystack
-     * @param int|bool $strict
-     * @return bool
-     */
-    public static function inArray($needle, array $haystack, $strict = false)
-    {
-        if (!$strict) {
-            if (is_int($needle) || is_float($needle)) {
-                $needle = (string) $needle;
-            }
-            if (is_string($needle)) {
-                foreach ($haystack as &$h) {
-                    if (is_int($h) || is_float($h)) {
-                        $h = (string) $h;
-                    }
-                }
-            }
-        }
-        return in_array($needle, $haystack, $strict);
-    }
-
-    /**
-     * Convert an iterator to an array.
-     *
-     * Converts an iterator to an array. The $recursive flag, on by default,
-     * hints whether or not you want to do so recursively.
-     *
-     * @param  array|Traversable  $iterator     The array or Traversable object to convert
-     * @param  bool               $recursive    Recursively check all nested structures
-     * @throws Exception\InvalidArgumentException if $iterator is not an array or a Traversable object
-     * @return array
-     */
-    public static function iteratorToArray($iterator, $recursive = true)
-    {
-        if (!is_array($iterator) && !$iterator instanceof Traversable) {
-            throw new Exception\InvalidArgumentException(__METHOD__ . ' expects an array or Traversable object');
-        }
-
-        if (!$recursive) {
-            if (is_array($iterator)) {
-                return $iterator;
-            }
-
-            return iterator_to_array($iterator);
-        }
-
-        if (method_exists($iterator, 'toArray')) {
-            return $iterator->toArray();
-        }
-
-        $array = array();
-        foreach ($iterator as $key => $value) {
-            if (is_scalar($value)) {
-                $array[$key] = $value;
-                continue;
-            }
-
-            if ($value instanceof Traversable) {
-                $array[$key] = static::iteratorToArray($value, $recursive);
-                continue;
-            }
-
-            if (is_array($value)) {
-                $array[$key] = static::iteratorToArray($value, $recursive);
-                continue;
-            }
-
-            $array[$key] = $value;
-        }
-
-        return $array;
-    }
-
-    /**
-     * Merge two arrays together.
-     *
-     * If an integer key exists in both arrays and preserveNumericKeys is false, the value
-     * from the second array will be appended to the first array. If both values are arrays, they
-     * are merged together, else the value of the second array overwrites the one of the first array.
-     *
-     * @param  array $a
-     * @param  array $b
-     * @param  bool  $preserveNumericKeys
-     * @return array
-     */
-    public static function merge(array $a, array $b, $preserveNumericKeys = false)
-    {
-        foreach ($b as $key => $value) {
-            if ($value instanceof MergeReplaceKeyInterface) {
-                $a[$key] = $value->getData();
-            } elseif (isset($a[$key]) || array_key_exists($key, $a)) {
-                if ($value instanceof MergeRemoveKey) {
-                    unset($a[$key]);
-                } elseif (!$preserveNumericKeys && is_int($key)) {
-                    $a[] = $value;
-                } elseif (is_array($value) && is_array($a[$key])) {
-                    $a[$key] = static::merge($a[$key], $value, $preserveNumericKeys);
-                } else {
-                    $a[$key] = $value;
-                }
-            } else {
-                if (!$value instanceof MergeRemoveKey) {
-                    $a[$key] = $value;
-                }
-            }
-        }
-
-        return $a;
-    }
-
-    /**
-     * Compatibility Method for array_filter on <5.6 systems
-     *
-     * @param array $data
-     * @param callable $callback
-     * @param null|int $flag
-     * @return array
-     */
-    public static function filter(array $data, $callback, $flag = null)
-    {
-        if (! is_callable($callback)) {
-            throw new Exception\InvalidArgumentException(sprintf(
-                'Second parameter of %s must be callable',
-                __METHOD__
-            ));
-        }
-
-        if (version_compare(PHP_VERSION, '5.6.0') >= 0) {
-            return array_filter($data, $callback, $flag);
-        }
-
-        $output = array();
-        foreach ($data as $key => $value) {
-            $params = array($value);
-
-            if ($flag === static::ARRAY_FILTER_USE_BOTH) {
-                $params[] = $key;
-            }
-
-            if ($flag === static::ARRAY_FILTER_USE_KEY) {
-                $params = array($key);
-            }
-
-            $response = call_user_func_array($callback, $params);
-            if ($response) {
-                $output[$key] = $value;
-            }
-        }
-
-        return $output;
-    }
-}
diff --git a/civicrm/vendor/zendframework/zend-stdlib/src/ArrayUtils/MergeRemoveKey.php b/civicrm/vendor/zendframework/zend-stdlib/src/ArrayUtils/MergeRemoveKey.php
deleted file mode 100644
index 7c4d097d92cb03c92c6ffa8567af543f87f43ddf..0000000000000000000000000000000000000000
--- a/civicrm/vendor/zendframework/zend-stdlib/src/ArrayUtils/MergeRemoveKey.php
+++ /dev/null
@@ -1,14 +0,0 @@
-<?php
-/**
- * Zend Framework (http://framework.zend.com/)
- *
- * @link      http://github.com/zendframework/zf2 for the canonical source repository
- * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
- * @license   http://framework.zend.com/license/new-bsd New BSD License
- */
-
-namespace Zend\Stdlib\ArrayUtils;
-
-final class MergeRemoveKey
-{
-}
diff --git a/civicrm/vendor/zendframework/zend-stdlib/src/ArrayUtils/MergeReplaceKey.php b/civicrm/vendor/zendframework/zend-stdlib/src/ArrayUtils/MergeReplaceKey.php
deleted file mode 100644
index 24c1df4d7a247736b6e67b9fecfd33fee344e84c..0000000000000000000000000000000000000000
--- a/civicrm/vendor/zendframework/zend-stdlib/src/ArrayUtils/MergeReplaceKey.php
+++ /dev/null
@@ -1,34 +0,0 @@
-<?php
-/**
- * Zend Framework (http://framework.zend.com/)
- *
- * @link      http://github.com/zendframework/zf2 for the canonical source repository
- * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
- * @license   http://framework.zend.com/license/new-bsd New BSD License
- */
-
-namespace Zend\Stdlib\ArrayUtils;
-
-final class MergeReplaceKey implements MergeReplaceKeyInterface
-{
-    /**
-     * @var mixed
-     */
-    protected $data;
-
-    /**
-     * @param mixed $data
-     */
-    public function __construct($data)
-    {
-        $this->data = $data;
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    public function getData()
-    {
-        return $this->data;
-    }
-}
diff --git a/civicrm/vendor/zendframework/zend-stdlib/src/ArrayUtils/MergeReplaceKeyInterface.php b/civicrm/vendor/zendframework/zend-stdlib/src/ArrayUtils/MergeReplaceKeyInterface.php
deleted file mode 100644
index 725cf11bc7da9b1fcc9bed063b06be686514336c..0000000000000000000000000000000000000000
--- a/civicrm/vendor/zendframework/zend-stdlib/src/ArrayUtils/MergeReplaceKeyInterface.php
+++ /dev/null
@@ -1,21 +0,0 @@
-<?php
-/**
- * Zend Framework (http://framework.zend.com/)
- *
- * @link      http://github.com/zendframework/zf2 for the canonical source repository
- * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
- * @license   http://framework.zend.com/license/new-bsd New BSD License
- */
-
-namespace Zend\Stdlib\ArrayUtils;
-
-/**
- * Marker interface: can be used to replace keys completely in {@see ArrayUtils::merge()} operations
- */
-interface MergeReplaceKeyInterface
-{
-    /**
-     * @return mixed
-     */
-    public function getData();
-}
diff --git a/civicrm/vendor/zendframework/zend-stdlib/src/CallbackHandler.php b/civicrm/vendor/zendframework/zend-stdlib/src/CallbackHandler.php
deleted file mode 100644
index 158b0c7d64743972d73dfb12081c02c9bc536663..0000000000000000000000000000000000000000
--- a/civicrm/vendor/zendframework/zend-stdlib/src/CallbackHandler.php
+++ /dev/null
@@ -1,217 +0,0 @@
-<?php
-/**
- * Zend Framework (http://framework.zend.com/)
- *
- * @link      http://github.com/zendframework/zf2 for the canonical source repository
- * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
- * @license   http://framework.zend.com/license/new-bsd New BSD License
- */
-
-namespace Zend\Stdlib;
-
-use ReflectionClass;
-
-/**
- * CallbackHandler
- *
- * A handler for an event, event, filterchain, etc. Abstracts PHP callbacks,
- * primarily to allow for lazy-loading and ensuring availability of default
- * arguments (currying).
- */
-class CallbackHandler
-{
-    /**
-     * @var string|array|callable PHP callback to invoke
-     */
-    protected $callback;
-
-    /**
-     * Callback metadata, if any
-     * @var array
-     */
-    protected $metadata;
-
-    /**
-     * PHP version is greater as 5.4rc1?
-     * @var bool
-     */
-    protected static $isPhp54;
-
-    /**
-     * Constructor
-     *
-     * @param  string|array|object|callable $callback PHP callback
-     * @param  array                        $metadata  Callback metadata
-     */
-    public function __construct($callback, array $metadata = array())
-    {
-        $this->metadata  = $metadata;
-        $this->registerCallback($callback);
-    }
-
-    /**
-     * Registers the callback provided in the constructor
-     *
-     * @param  callable $callback
-     * @throws Exception\InvalidCallbackException
-     * @return void
-     */
-    protected function registerCallback($callback)
-    {
-        if (!is_callable($callback)) {
-            throw new Exception\InvalidCallbackException('Invalid callback provided; not callable');
-        }
-
-        $this->callback = $callback;
-    }
-
-    /**
-     * Retrieve registered callback
-     *
-     * @return callable
-     */
-    public function getCallback()
-    {
-        return $this->callback;
-    }
-
-    /**
-     * Invoke handler
-     *
-     * @param  array $args Arguments to pass to callback
-     * @return mixed
-     */
-    public function call(array $args = array())
-    {
-        $callback = $this->getCallback();
-
-        // Minor performance tweak, if the callback gets called more than once
-        if (!isset(static::$isPhp54)) {
-            static::$isPhp54 = version_compare(PHP_VERSION, '5.4.0rc1', '>=');
-        }
-
-        $argCount = count($args);
-
-        if (static::$isPhp54 && is_string($callback)) {
-            $result = $this->validateStringCallbackFor54($callback);
-
-            if ($result !== true && $argCount <= 3) {
-                $callback       = $result;
-                // Minor performance tweak, if the callback gets called more
-                // than once
-                $this->callback = $result;
-            }
-        }
-
-        // Minor performance tweak; use call_user_func() until > 3 arguments
-        // reached
-        switch ($argCount) {
-            case 0:
-                if (static::$isPhp54) {
-                    return $callback();
-                }
-                return call_user_func($callback);
-            case 1:
-                if (static::$isPhp54) {
-                    return $callback(array_shift($args));
-                }
-                return call_user_func($callback, array_shift($args));
-            case 2:
-                $arg1 = array_shift($args);
-                $arg2 = array_shift($args);
-                if (static::$isPhp54) {
-                    return $callback($arg1, $arg2);
-                }
-                return call_user_func($callback, $arg1, $arg2);
-            case 3:
-                $arg1 = array_shift($args);
-                $arg2 = array_shift($args);
-                $arg3 = array_shift($args);
-                if (static::$isPhp54) {
-                    return $callback($arg1, $arg2, $arg3);
-                }
-                return call_user_func($callback, $arg1, $arg2, $arg3);
-            default:
-                return call_user_func_array($callback, $args);
-        }
-    }
-
-    /**
-     * Invoke as functor
-     *
-     * @return mixed
-     */
-    public function __invoke()
-    {
-        return $this->call(func_get_args());
-    }
-
-    /**
-     * Get all callback metadata
-     *
-     * @return array
-     */
-    public function getMetadata()
-    {
-        return $this->metadata;
-    }
-
-    /**
-     * Retrieve a single metadatum
-     *
-     * @param  string $name
-     * @return mixed
-     */
-    public function getMetadatum($name)
-    {
-        if (array_key_exists($name, $this->metadata)) {
-            return $this->metadata[$name];
-        }
-        return;
-    }
-
-    /**
-     * Validate a static method call
-     *
-     * Validates that a static method call in PHP 5.4 will actually work
-     *
-     * @param  string $callback
-     * @return true|array
-     * @throws Exception\InvalidCallbackException if invalid
-     */
-    protected function validateStringCallbackFor54($callback)
-    {
-        if (!strstr($callback, '::')) {
-            return true;
-        }
-
-        list($class, $method) = explode('::', $callback, 2);
-
-        if (!class_exists($class)) {
-            throw new Exception\InvalidCallbackException(sprintf(
-                'Static method call "%s" refers to a class that does not exist',
-                $callback
-            ));
-        }
-
-        $r = new ReflectionClass($class);
-        if (!$r->hasMethod($method)) {
-            throw new Exception\InvalidCallbackException(sprintf(
-                'Static method call "%s" refers to a method that does not exist',
-                $callback
-            ));
-        }
-        $m = $r->getMethod($method);
-        if (!$m->isStatic()) {
-            throw new Exception\InvalidCallbackException(sprintf(
-                'Static method call "%s" refers to a method that is not static',
-                $callback
-            ));
-        }
-
-        // returning a non boolean value may not be nice for a validate method,
-        // but that allows the usage of a static string callback without using
-        // the call_user_func function.
-        return array($class, $method);
-    }
-}
diff --git a/civicrm/vendor/zendframework/zend-stdlib/src/DateTime.php b/civicrm/vendor/zendframework/zend-stdlib/src/DateTime.php
deleted file mode 100644
index cdab67d6e83f515d200c727673d3dd5f2a488077..0000000000000000000000000000000000000000
--- a/civicrm/vendor/zendframework/zend-stdlib/src/DateTime.php
+++ /dev/null
@@ -1,47 +0,0 @@
-<?php
-/**
- * Zend Framework (http://framework.zend.com/)
- *
- * @link      http://github.com/zendframework/zf2 for the canonical source repository
- * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
- * @license   http://framework.zend.com/license/new-bsd New BSD License
- */
-
-namespace Zend\Stdlib;
-
-use DateTimeZone;
-
-trigger_error('DateTime extension deprecated as of ZF 2.1.4; use the \DateTime constructor to parse extended ISO8601 dates instead', E_USER_DEPRECATED);
-
-/**
- * DateTime
- *
- * An extension of the \DateTime object.
- *
- * @deprecated
- */
-class DateTime extends \DateTime
-{
-    /**
-     * The DateTime::ISO8601 constant used by php's native DateTime object does
-     * not allow for fractions of a second. This function better handles ISO8601
-     * formatted date strings.
-     *
-     * @param  string       $time
-     * @param  DateTimeZone $timezone
-     * @return mixed
-     */
-    public static function createFromISO8601($time, DateTimeZone $timezone = null)
-    {
-        $format = self::ISO8601;
-        if (isset($time[19]) && $time[19] === '.') {
-            $format = 'Y-m-d\TH:i:s.uO';
-        }
-
-        if ($timezone !== null) {
-            return self::createFromFormat($format, $time, $timezone);
-        }
-
-        return self::createFromFormat($format, $time);
-    }
-}
diff --git a/civicrm/vendor/zendframework/zend-stdlib/src/DispatchableInterface.php b/civicrm/vendor/zendframework/zend-stdlib/src/DispatchableInterface.php
deleted file mode 100644
index 4f74d1e8af4ae09e7eb2ca52c3305a172b00da80..0000000000000000000000000000000000000000
--- a/civicrm/vendor/zendframework/zend-stdlib/src/DispatchableInterface.php
+++ /dev/null
@@ -1,22 +0,0 @@
-<?php
-/**
- * Zend Framework (http://framework.zend.com/)
- *
- * @link      http://github.com/zendframework/zf2 for the canonical source repository
- * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
- * @license   http://framework.zend.com/license/new-bsd New BSD License
- */
-
-namespace Zend\Stdlib;
-
-interface DispatchableInterface
-{
-    /**
-     * Dispatch a request
-     *
-     * @param RequestInterface $request
-     * @param null|ResponseInterface $response
-     * @return Response|mixed
-     */
-    public function dispatch(RequestInterface $request, ResponseInterface $response = null);
-}
diff --git a/civicrm/vendor/zendframework/zend-stdlib/src/ErrorHandler.php b/civicrm/vendor/zendframework/zend-stdlib/src/ErrorHandler.php
deleted file mode 100644
index 01949d1efee14f92397cd144dcb7afa2b629442f..0000000000000000000000000000000000000000
--- a/civicrm/vendor/zendframework/zend-stdlib/src/ErrorHandler.php
+++ /dev/null
@@ -1,115 +0,0 @@
-<?php
-/**
- * Zend Framework (http://framework.zend.com/)
- *
- * @link      http://github.com/zendframework/zf2 for the canonical source repository
- * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
- * @license   http://framework.zend.com/license/new-bsd New BSD License
- */
-
-namespace Zend\Stdlib;
-
-use ErrorException;
-
-/**
- * ErrorHandler that can be used to catch internal PHP errors
- * and convert to an ErrorException instance.
- */
-abstract class ErrorHandler
-{
-    /**
-     * Active stack
-     *
-     * @var array
-     */
-    protected static $stack = array();
-
-    /**
-     * Check if this error handler is active
-     *
-     * @return bool
-     */
-    public static function started()
-    {
-        return (bool) static::getNestedLevel();
-    }
-
-    /**
-     * Get the current nested level
-     *
-     * @return int
-     */
-    public static function getNestedLevel()
-    {
-        return count(static::$stack);
-    }
-
-    /**
-     * Starting the error handler
-     *
-     * @param int $errorLevel
-     */
-    public static function start($errorLevel = \E_WARNING)
-    {
-        if (!static::$stack) {
-            set_error_handler(array(get_called_class(), 'addError'), $errorLevel);
-        }
-
-        static::$stack[] = null;
-    }
-
-    /**
-     * Stopping the error handler
-     *
-     * @param  bool $throw Throw the ErrorException if any
-     * @return null|ErrorException
-     * @throws ErrorException If an error has been catched and $throw is true
-     */
-    public static function stop($throw = false)
-    {
-        $errorException = null;
-
-        if (static::$stack) {
-            $errorException = array_pop(static::$stack);
-
-            if (!static::$stack) {
-                restore_error_handler();
-            }
-
-            if ($errorException && $throw) {
-                throw $errorException;
-            }
-        }
-
-        return $errorException;
-    }
-
-    /**
-     * Stop all active handler
-     *
-     * @return void
-     */
-    public static function clean()
-    {
-        if (static::$stack) {
-            restore_error_handler();
-        }
-
-        static::$stack = array();
-    }
-
-    /**
-     * Add an error to the stack
-     *
-     * @param int    $errno
-     * @param string $errstr
-     * @param string $errfile
-     * @param int    $errline
-     * @return void
-     */
-    public static function addError($errno, $errstr = '', $errfile = '', $errline = 0)
-    {
-        $stack = & static::$stack[count(static::$stack) - 1];
-        $stack = new ErrorException($errstr, 0, $errno, $errfile, $errline, $stack);
-    }
-}
diff --git a/civicrm/vendor/zendframework/zend-stdlib/src/Exception/BadMethodCallException.php b/civicrm/vendor/zendframework/zend-stdlib/src/Exception/BadMethodCallException.php
deleted file mode 100644
index 0254e45bffbd397d736734ca2f80ff29c15b8c0b..0000000000000000000000000000000000000000
--- a/civicrm/vendor/zendframework/zend-stdlib/src/Exception/BadMethodCallException.php
+++ /dev/null
@@ -1,17 +0,0 @@
-<?php
-/**
- * Zend Framework (http://framework.zend.com/)
- *
- * @link      http://github.com/zendframework/zf2 for the canonical source repository
- * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
- * @license   http://framework.zend.com/license/new-bsd New BSD License
- */
-
-namespace Zend\Stdlib\Exception;
-
-/**
- * Bad method call exception
- */
-class BadMethodCallException extends \BadMethodCallException implements ExceptionInterface
-{
-}
diff --git a/civicrm/vendor/zendframework/zend-stdlib/src/Exception/DomainException.php b/civicrm/vendor/zendframework/zend-stdlib/src/Exception/DomainException.php
deleted file mode 100644
index 6d2ac714a1f3aa0d3b3f530cd8c4d2bec0af6ac3..0000000000000000000000000000000000000000
--- a/civicrm/vendor/zendframework/zend-stdlib/src/Exception/DomainException.php
+++ /dev/null
@@ -1,17 +0,0 @@
-<?php
-/**
- * Zend Framework (http://framework.zend.com/)
- *
- * @link      http://github.com/zendframework/zf2 for the canonical source repository
- * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
- * @license   http://framework.zend.com/license/new-bsd New BSD License
- */
-
-namespace Zend\Stdlib\Exception;
-
-/**
- * Domain exception
- */
-class DomainException extends \DomainException implements ExceptionInterface
-{
-}
diff --git a/civicrm/vendor/zendframework/zend-stdlib/src/Exception/ExceptionInterface.php b/civicrm/vendor/zendframework/zend-stdlib/src/Exception/ExceptionInterface.php
deleted file mode 100644
index 60b795f8ddef76344633a0ad5071ac97c829c394..0000000000000000000000000000000000000000
--- a/civicrm/vendor/zendframework/zend-stdlib/src/Exception/ExceptionInterface.php
+++ /dev/null
@@ -1,17 +0,0 @@
-<?php
-/**
- * Zend Framework (http://framework.zend.com/)
- *
- * @link      http://github.com/zendframework/zf2 for the canonical source repository
- * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
- * @license   http://framework.zend.com/license/new-bsd New BSD License
- */
-
-namespace Zend\Stdlib\Exception;
-
-/**
- * Exception marker interface
- */
-interface ExceptionInterface
-{
-}
diff --git a/civicrm/vendor/zendframework/zend-stdlib/src/Exception/ExtensionNotLoadedException.php b/civicrm/vendor/zendframework/zend-stdlib/src/Exception/ExtensionNotLoadedException.php
deleted file mode 100644
index 4b51475f246e676bf3f2356e4495c27708b32ac5..0000000000000000000000000000000000000000
--- a/civicrm/vendor/zendframework/zend-stdlib/src/Exception/ExtensionNotLoadedException.php
+++ /dev/null
@@ -1,17 +0,0 @@
-<?php
-/**
- * Zend Framework (http://framework.zend.com/)
- *
- * @link      http://github.com/zendframework/zf2 for the canonical source repository
- * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
- * @license   http://framework.zend.com/license/new-bsd New BSD License
- */
-
-namespace Zend\Stdlib\Exception;
-
-/**
- * Extension not loaded exception
- */
-class ExtensionNotLoadedException extends RuntimeException
-{
-}
diff --git a/civicrm/vendor/zendframework/zend-stdlib/src/Exception/InvalidArgumentException.php b/civicrm/vendor/zendframework/zend-stdlib/src/Exception/InvalidArgumentException.php
deleted file mode 100644
index 8028c4717562886729c03a3c140192710fc85077..0000000000000000000000000000000000000000
--- a/civicrm/vendor/zendframework/zend-stdlib/src/Exception/InvalidArgumentException.php
+++ /dev/null
@@ -1,17 +0,0 @@
-<?php
-/**
- * Zend Framework (http://framework.zend.com/)
- *
- * @link      http://github.com/zendframework/zf2 for the canonical source repository
- * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
- * @license   http://framework.zend.com/license/new-bsd New BSD License
- */
-
-namespace Zend\Stdlib\Exception;
-
-/**
- * Invalid Argument Exception
- */
-class InvalidArgumentException extends \InvalidArgumentException implements ExceptionInterface
-{
-}
diff --git a/civicrm/vendor/zendframework/zend-stdlib/src/Exception/InvalidCallbackException.php b/civicrm/vendor/zendframework/zend-stdlib/src/Exception/InvalidCallbackException.php
deleted file mode 100644
index aa36f98632db1a08e3ba275b44efa729db9e08b1..0000000000000000000000000000000000000000
--- a/civicrm/vendor/zendframework/zend-stdlib/src/Exception/InvalidCallbackException.php
+++ /dev/null
@@ -1,17 +0,0 @@
-<?php
-/**
- * Zend Framework (http://framework.zend.com/)
- *
- * @link      http://github.com/zendframework/zf2 for the canonical source repository
- * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
- * @license   http://framework.zend.com/license/new-bsd New BSD License
- */
-
-namespace Zend\Stdlib\Exception;
-
-/**
- * Invalid callback exception
- */
-class InvalidCallbackException extends DomainException implements ExceptionInterface
-{
-}
diff --git a/civicrm/vendor/zendframework/zend-stdlib/src/Exception/LogicException.php b/civicrm/vendor/zendframework/zend-stdlib/src/Exception/LogicException.php
deleted file mode 100644
index 087ac0e83fd9cd7742232bcbe4574d4b632c869a..0000000000000000000000000000000000000000
--- a/civicrm/vendor/zendframework/zend-stdlib/src/Exception/LogicException.php
+++ /dev/null
@@ -1,17 +0,0 @@
-<?php
-/**
- * Zend Framework (http://framework.zend.com/)
- *
- * @link      http://github.com/zendframework/zf2 for the canonical source repository
- * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
- * @license   http://framework.zend.com/license/new-bsd New BSD License
- */
-
-namespace Zend\Stdlib\Exception;
-
-/**
- * Logic exception
- */
-class LogicException extends \LogicException implements ExceptionInterface
-{
-}
diff --git a/civicrm/vendor/zendframework/zend-stdlib/src/Exception/RuntimeException.php b/civicrm/vendor/zendframework/zend-stdlib/src/Exception/RuntimeException.php
deleted file mode 100644
index f3891d64b6a5392ef82ef0d4d83bd23bac831331..0000000000000000000000000000000000000000
--- a/civicrm/vendor/zendframework/zend-stdlib/src/Exception/RuntimeException.php
+++ /dev/null
@@ -1,17 +0,0 @@
-<?php
-/**
- * Zend Framework (http://framework.zend.com/)
- *
- * @link      http://github.com/zendframework/zf2 for the canonical source repository
- * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
- * @license   http://framework.zend.com/license/new-bsd New BSD License
- */
-
-namespace Zend\Stdlib\Exception;
-
-/**
- * Runtime exception
- */
-class RuntimeException extends \RuntimeException implements ExceptionInterface
-{
-}
diff --git a/civicrm/vendor/zendframework/zend-stdlib/src/Extractor/ExtractionInterface.php b/civicrm/vendor/zendframework/zend-stdlib/src/Extractor/ExtractionInterface.php
deleted file mode 100644
index 297d557746cc20c46a9b0f285213249f82176484..0000000000000000000000000000000000000000
--- a/civicrm/vendor/zendframework/zend-stdlib/src/Extractor/ExtractionInterface.php
+++ /dev/null
@@ -1,21 +0,0 @@
-<?php
-/**
- * Zend Framework (http://framework.zend.com/)
- *
- * @link      http://github.com/zendframework/zf2 for the canonical source repository
- * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
- * @license   http://framework.zend.com/license/new-bsd New BSD License
- */
-
-namespace Zend\Stdlib\Extractor;
-
-interface ExtractionInterface
-{
-    /**
-     * Extract values from an object
-     *
-     * @param  object $object
-     * @return array
-     */
-    public function extract($object);
-}
diff --git a/civicrm/vendor/zendframework/zend-stdlib/src/Glob.php b/civicrm/vendor/zendframework/zend-stdlib/src/Glob.php
deleted file mode 100644
index a4d0068a09152255939bbcd32282a2e5bc8ddf05..0000000000000000000000000000000000000000
--- a/civicrm/vendor/zendframework/zend-stdlib/src/Glob.php
+++ /dev/null
@@ -1,202 +0,0 @@
-<?php
-/**
- * Zend Framework (http://framework.zend.com/)
- *
- * @link      http://github.com/zendframework/zf2 for the canonical source repository
- * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
- * @license   http://framework.zend.com/license/new-bsd New BSD License
- */
-
-namespace Zend\Stdlib;
-
-/**
- * Wrapper for glob with fallback if GLOB_BRACE is not available.
- */
-abstract class Glob
-{
-    /**#@+
-     * Glob constants.
-     */
-    const GLOB_MARK     = 0x01;
-    const GLOB_NOSORT   = 0x02;
-    const GLOB_NOCHECK  = 0x04;
-    const GLOB_NOESCAPE = 0x08;
-    const GLOB_BRACE    = 0x10;
-    const GLOB_ONLYDIR  = 0x20;
-    const GLOB_ERR      = 0x40;
-    /**#@-*/
-
-    /**
-     * Find pathnames matching a pattern.
-     *
-     * @see    http://docs.php.net/glob
-     * @param  string  $pattern
-     * @param  int $flags
-     * @param  bool $forceFallback
-     * @return array
-     * @throws Exception\RuntimeException
-     */
-    public static function glob($pattern, $flags = 0, $forceFallback = false)
-    {
-        if (!defined('GLOB_BRACE') || $forceFallback) {
-            return static::fallbackGlob($pattern, $flags);
-        }
-
-        return static::systemGlob($pattern, $flags);
-    }
-
-    /**
-     * Use the glob function provided by the system.
-     *
-     * @param  string  $pattern
-     * @param  int     $flags
-     * @return array
-     * @throws Exception\RuntimeException
-     */
-    protected static function systemGlob($pattern, $flags)
-    {
-        if ($flags) {
-            $flagMap = array(
-                self::GLOB_MARK     => GLOB_MARK,
-                self::GLOB_NOSORT   => GLOB_NOSORT,
-                self::GLOB_NOCHECK  => GLOB_NOCHECK,
-                self::GLOB_NOESCAPE => GLOB_NOESCAPE,
-                self::GLOB_BRACE    => GLOB_BRACE,
-                self::GLOB_ONLYDIR  => GLOB_ONLYDIR,
-                self::GLOB_ERR      => GLOB_ERR,
-            );
-
-            $globFlags = 0;
-
-            foreach ($flagMap as $internalFlag => $globFlag) {
-                if ($flags & $internalFlag) {
-                    $globFlags |= $globFlag;
-                }
-            }
-        } else {
-            $globFlags = 0;
-        }
-
-        ErrorHandler::start();
-        $res = glob($pattern, $globFlags);
-        $err = ErrorHandler::stop();
-        if ($res === false) {
-            throw new Exception\RuntimeException("glob('{$pattern}', {$globFlags}) failed", 0, $err);
-        }
-        return $res;
-    }
-
-    /**
-     * Expand braces manually, then use the system glob.
-     *
-     * @param  string  $pattern
-     * @param  int     $flags
-     * @return array
-     * @throws Exception\RuntimeException
-     */
-    protected static function fallbackGlob($pattern, $flags)
-    {
-        if (!$flags & self::GLOB_BRACE) {
-            return static::systemGlob($pattern, $flags);
-        }
-
-        $flags &= ~self::GLOB_BRACE;
-        $length = strlen($pattern);
-        $paths  = array();
-
-        if ($flags & self::GLOB_NOESCAPE) {
-            $begin = strpos($pattern, '{');
-        } else {
-            $begin = 0;
-
-            while (true) {
-                if ($begin === $length) {
-                    $begin = false;
-                    break;
-                } elseif ($pattern[$begin] === '\\' && ($begin + 1) < $length) {
-                    $begin++;
-                } elseif ($pattern[$begin] === '{') {
-                    break;
-                }
-
-                $begin++;
-            }
-        }
-
-        if ($begin === false) {
-            return static::systemGlob($pattern, $flags);
-        }
-
-        $next = static::nextBraceSub($pattern, $begin + 1, $flags);
-
-        if ($next === null) {
-            return static::systemGlob($pattern, $flags);
-        }
-
-        $rest = $next;
-
-        while ($pattern[$rest] !== '}') {
-            $rest = static::nextBraceSub($pattern, $rest + 1, $flags);
-
-            if ($rest === null) {
-                return static::systemGlob($pattern, $flags);
-            }
-        }
-
-        $p = $begin + 1;
-
-        while (true) {
-            $subPattern = substr($pattern, 0, $begin)
-                        . substr($pattern, $p, $next - $p)
-                        . substr($pattern, $rest + 1);
-
-            $result = static::fallbackGlob($subPattern, $flags | self::GLOB_BRACE);
-
-            if ($result) {
-                $paths = array_merge($paths, $result);
-            }
-
-            if ($pattern[$next] === '}') {
-                break;
-            }
-
-            $p    = $next + 1;
-            $next = static::nextBraceSub($pattern, $p, $flags);
-        }
-
-        return array_unique($paths);
-    }
-
-    /**
-     * Find the end of the sub-pattern in a brace expression.
-     *
-     * @param  string  $pattern
-     * @param  int $begin
-     * @param  int $flags
-     * @return int|null
-     */
-    protected static function nextBraceSub($pattern, $begin, $flags)
-    {
-        $length  = strlen($pattern);
-        $depth   = 0;
-        $current = $begin;
-
-        while ($current < $length) {
-            if (!$flags & self::GLOB_NOESCAPE && $pattern[$current] === '\\') {
-                if (++$current === $length) {
-                    break;
-                }
-
-                $current++;
-            } else {
-                if (($pattern[$current] === '}' && $depth-- === 0) || ($pattern[$current] === ',' && $depth === 0)) {
-                    break;
-                } elseif ($pattern[$current++] === '{') {
-                    $depth++;
-                }
-            }
-        }
-
-        return ($current < $length ? $current : null);
-    }
-}
diff --git a/civicrm/vendor/zendframework/zend-stdlib/src/Guard/AllGuardsTrait.php b/civicrm/vendor/zendframework/zend-stdlib/src/Guard/AllGuardsTrait.php
deleted file mode 100644
index 95bc5162d38407e1d2dc19cfe0ff104f26db2b72..0000000000000000000000000000000000000000
--- a/civicrm/vendor/zendframework/zend-stdlib/src/Guard/AllGuardsTrait.php
+++ /dev/null
@@ -1,20 +0,0 @@
-<?php
-/**
- * Zend Framework (http://framework.zend.com/)
- *
- * @link      http://github.com/zendframework/zf2 for the canonical source repository
- * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
- * @license   http://framework.zend.com/license/new-bsd New BSD License
- */
-
-namespace Zend\Stdlib\Guard;
-
-/**
- * An aggregate for all guard traits
- */
-trait AllGuardsTrait
-{
-    use ArrayOrTraversableGuardTrait;
-    use EmptyGuardTrait;
-    use NullGuardTrait;
-}
diff --git a/civicrm/vendor/zendframework/zend-stdlib/src/Guard/ArrayOrTraversableGuardTrait.php b/civicrm/vendor/zendframework/zend-stdlib/src/Guard/ArrayOrTraversableGuardTrait.php
deleted file mode 100644
index e6959a5ef42ec4192a3a031b88186e2ccbd8dfb8..0000000000000000000000000000000000000000
--- a/civicrm/vendor/zendframework/zend-stdlib/src/Guard/ArrayOrTraversableGuardTrait.php
+++ /dev/null
@@ -1,41 +0,0 @@
-<?php
-/**
- * Zend Framework (http://framework.zend.com/)
- *
- * @link      http://github.com/zendframework/zf2 for the canonical source repository
- * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
- * @license   http://framework.zend.com/license/new-bsd New BSD License
- */
-
-namespace Zend\Stdlib\Guard;
-
-use Traversable;
-
-/**
- * Provide a guard method for array or Traversable data
- */
-trait ArrayOrTraversableGuardTrait
-{
-    /**
-     * Verifies that the data is an array or Traversable
-     *
-     * @param  mixed  $data           the data to verify
-     * @param  string $dataName       the data name
-     * @param  string $exceptionClass FQCN for the exception
-     * @throws \Exception
-     */
-    protected function guardForArrayOrTraversable(
-        $data,
-        $dataName = 'Argument',
-        $exceptionClass = 'Zend\Stdlib\Exception\InvalidArgumentException'
-    ) {
-        if (!is_array($data) && !($data instanceof Traversable)) {
-            $message = sprintf(
-                "%s must be an array or Traversable, [%s] given",
-                $dataName,
-                is_object($data) ? get_class($data) : gettype($data)
-            );
-            throw new $exceptionClass($message);
-        }
-    }
-}
diff --git a/civicrm/vendor/zendframework/zend-stdlib/src/Guard/EmptyGuardTrait.php b/civicrm/vendor/zendframework/zend-stdlib/src/Guard/EmptyGuardTrait.php
deleted file mode 100644
index c6751cc35a216ecf89b80ad400d83680c6018d0e..0000000000000000000000000000000000000000
--- a/civicrm/vendor/zendframework/zend-stdlib/src/Guard/EmptyGuardTrait.php
+++ /dev/null
@@ -1,35 +0,0 @@
-<?php
-/**
- * Zend Framework (http://framework.zend.com/)
- *
- * @link      http://github.com/zendframework/zf2 for the canonical source repository
- * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
- * @license   http://framework.zend.com/license/new-bsd New BSD License
- */
-
-namespace Zend\Stdlib\Guard;
-
-/**
- * Provide a guard method against empty data
- */
-trait EmptyGuardTrait
-{
-    /**
-     * Verify that the data is not empty
-     *
-     * @param  mixed  $data           the data to verify
-     * @param  string $dataName       the data name
-     * @param  string $exceptionClass FQCN for the exception
-     * @throws \Exception
-     */
-    protected function guardAgainstEmpty(
-        $data,
-        $dataName = 'Argument',
-        $exceptionClass = 'Zend\Stdlib\Exception\InvalidArgumentException'
-    ) {
-        if (empty($data)) {
-            $message = sprintf('%s cannot be empty', $dataName);
-            throw new $exceptionClass($message);
-        }
-    }
-}
diff --git a/civicrm/vendor/zendframework/zend-stdlib/src/Guard/GuardUtils.php b/civicrm/vendor/zendframework/zend-stdlib/src/Guard/GuardUtils.php
deleted file mode 100644
index 4fe4ccacb913c71bbe30e8e2f3c34084ff9f7256..0000000000000000000000000000000000000000
--- a/civicrm/vendor/zendframework/zend-stdlib/src/Guard/GuardUtils.php
+++ /dev/null
@@ -1,85 +0,0 @@
-<?php
-/**
- * Zend Framework (http://framework.zend.com/)
- *
- * @link      http://github.com/zendframework/zf2 for the canonical source repository
- * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
- * @license   http://framework.zend.com/license/new-bsd New BSD License
- */
-
-namespace Zend\Stdlib\Guard;
-
-use Traversable;
-
-/**
- * Static guard helper class
- *
- * Bridges the gap for allowing refactoring until traits can be used by default.
- *
- * @deprecated
- */
-abstract class GuardUtils
-{
-    const DEFAULT_EXCEPTION_CLASS = 'Zend\Stdlib\Exception\InvalidArgumentException';
-
-    /**
-     * Verifies that the data is an array or Traversable
-     *
-     * @param  mixed  $data           the data to verify
-     * @param  string $dataName       the data name
-     * @param  string $exceptionClass FQCN for the exception
-     * @throws \Exception
-     */
-    public static function guardForArrayOrTraversable(
-        $data,
-        $dataName = 'Argument',
-        $exceptionClass = self::DEFAULT_EXCEPTION_CLASS
-    ) {
-        if (!is_array($data) && !($data instanceof Traversable)) {
-            $message = sprintf(
-                '%s must be an array or Traversable, [%s] given',
-                $dataName,
-                is_object($data) ? get_class($data) : gettype($data)
-            );
-            throw new $exceptionClass($message);
-        }
-    }
-
-    /**
-     * Verify that the data is not empty
-     *
-     * @param  mixed  $data           the data to verify
-     * @param  string $dataName       the data name
-     * @param  string $exceptionClass FQCN for the exception
-     * @throws \Exception
-     */
-    public static function guardAgainstEmpty(
-        $data,
-        $dataName = 'Argument',
-        $exceptionClass = self::DEFAULT_EXCEPTION_CLASS
-    ) {
-        if (empty($data)) {
-            $message = sprintf('%s cannot be empty', $dataName);
-            throw new $exceptionClass($message);
-        }
-    }
-
-    /**
-     * Verify that the data is not null
-     *
-     * @param  mixed  $data           the data to verify
-     * @param  string $dataName       the data name
-     * @param  string $exceptionClass FQCN for the exception
-     * @throws \Exception
-     */
-    public static function guardAgainstNull(
-        $data,
-        $dataName = 'Argument',
-        $exceptionClass = self::DEFAULT_EXCEPTION_CLASS
-    ) {
-        if (null === $data) {
-            $message = sprintf('%s cannot be null', $dataName);
-            throw new $exceptionClass($message);
-        }
-    }
-}
diff --git a/civicrm/vendor/zendframework/zend-stdlib/src/Guard/NullGuardTrait.php b/civicrm/vendor/zendframework/zend-stdlib/src/Guard/NullGuardTrait.php
deleted file mode 100644
index eac716281cd6767114d9501377f15e3542862252..0000000000000000000000000000000000000000
--- a/civicrm/vendor/zendframework/zend-stdlib/src/Guard/NullGuardTrait.php
+++ /dev/null
@@ -1,35 +0,0 @@
-<?php
-/**
- * Zend Framework (http://framework.zend.com/)
- *
- * @link      http://github.com/zendframework/zf2 for the canonical source repository
- * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
- * @license   http://framework.zend.com/license/new-bsd New BSD License
- */
-
-namespace Zend\Stdlib\Guard;
-
-/**
- * Provide a guard method against null data
- */
-trait NullGuardTrait
-{
-    /**
-     * Verify that the data is not null
-     *
-     * @param  mixed  $data           the data to verify
-     * @param  string $dataName       the data name
-     * @param  string $exceptionClass FQCN for the exception
-     * @throws \Exception
-     */
-    protected function guardAgainstNull(
-        $data,
-        $dataName = 'Argument',
-        $exceptionClass = 'Zend\Stdlib\Exception\InvalidArgumentException'
-    ) {
-        if (null === $data) {
-            $message = sprintf('%s cannot be null', $dataName);
-            throw new $exceptionClass($message);
-        }
-    }
-}
diff --git a/civicrm/vendor/zendframework/zend-stdlib/src/Hydrator/AbstractHydrator.php b/civicrm/vendor/zendframework/zend-stdlib/src/Hydrator/AbstractHydrator.php
deleted file mode 100644
index 338ed804422f19e6e3e3897cee4e934afee6d97b..0000000000000000000000000000000000000000
--- a/civicrm/vendor/zendframework/zend-stdlib/src/Hydrator/AbstractHydrator.php
+++ /dev/null
@@ -1,287 +0,0 @@
-<?php
-/**
- * Zend Framework (http://framework.zend.com/)
- *
- * @link      http://github.com/zendframework/zf2 for the canonical source repository
- * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
- * @license   http://framework.zend.com/license/new-bsd New BSD License
- */
-
-namespace Zend\Stdlib\Hydrator;
-
-use ArrayObject;
-use Zend\Stdlib\Exception;
-use Zend\Stdlib\Hydrator\Filter\FilterComposite;
-use Zend\Stdlib\Hydrator\NamingStrategy\NamingStrategyInterface;
-use Zend\Stdlib\Hydrator\Strategy\StrategyInterface;
-
-abstract class AbstractHydrator implements
-    HydratorInterface,
-    StrategyEnabledInterface,
-    FilterEnabledInterface,
-    NamingStrategyEnabledInterface
-{
-    /**
-     * The list with strategies that this hydrator has.
-     *
-     * @var ArrayObject
-     */
-    protected $strategies;
-
-    /**
-     * An instance of NamingStrategyInterface
-     *
-     * @var NamingStrategyInterface
-     */
-    protected $namingStrategy;
-
-    /**
-     * Composite to filter the methods, that need to be hydrated
-     *
-     * @var Filter\FilterComposite
-     */
-    protected $filterComposite;
-
-    /**
-     * Initializes a new instance of this class.
-     */
-    public function __construct()
-    {
-        $this->strategies = new ArrayObject();
-        $this->filterComposite = new FilterComposite();
-    }
-
-    /**
-     * Gets the strategy with the given name.
-     *
-     * @param string $name The name of the strategy to get.
-     *
-     * @throws \Zend\Stdlib\Exception\InvalidArgumentException
-     * @return StrategyInterface
-     */
-    public function getStrategy($name)
-    {
-        if (isset($this->strategies[$name])) {
-            return $this->strategies[$name];
-        }
-
-        if (!isset($this->strategies['*'])) {
-            throw new Exception\InvalidArgumentException(sprintf(
-                '%s: no strategy by name of "%s", and no wildcard strategy present',
-                __METHOD__,
-                $name
-            ));
-        }
-
-        return $this->strategies['*'];
-    }
-
-    /**
-     * Checks if the strategy with the given name exists.
-     *
-     * @param string $name The name of the strategy to check for.
-     * @return bool
-     */
-    public function hasStrategy($name)
-    {
-        return array_key_exists($name, $this->strategies)
-               || array_key_exists('*', $this->strategies);
-    }
-
-    /**
-     * Adds the given strategy under the given name.
-     *
-     * @param string $name The name of the strategy to register.
-     * @param StrategyInterface $strategy The strategy to register.
-     * @return HydratorInterface
-     */
-    public function addStrategy($name, StrategyInterface $strategy)
-    {
-        $this->strategies[$name] = $strategy;
-        return $this;
-    }
-
-    /**
-     * Removes the strategy with the given name.
-     *
-     * @param string $name The name of the strategy to remove.
-     * @return HydratorInterface
-     */
-    public function removeStrategy($name)
-    {
-        unset($this->strategies[$name]);
-        return $this;
-    }
-
-    /**
-     * Converts a value for extraction. If no strategy exists the plain value is returned.
-     *
-     * @param  string $name  The name of the strategy to use.
-     * @param  mixed  $value  The value that should be converted.
-     * @param  mixed  $object The object is optionally provided as context.
-     * @return mixed
-     */
-    public function extractValue($name, $value, $object = null)
-    {
-        if ($this->hasStrategy($name)) {
-            $strategy = $this->getStrategy($name);
-            $value = $strategy->extract($value, $object);
-        }
-        return $value;
-    }
-
-    /**
-     * Converts a value for hydration. If no strategy exists the plain value is returned.
-     *
-     * @param string $name The name of the strategy to use.
-     * @param mixed $value The value that should be converted.
-     * @param array $data The whole data is optionally provided as context.
-     * @return mixed
-     */
-    public function hydrateValue($name, $value, $data = null)
-    {
-        if ($this->hasStrategy($name)) {
-            $strategy = $this->getStrategy($name);
-            $value = $strategy->hydrate($value, $data);
-        }
-        return $value;
-    }
-
-    /**
-     * Convert a name for extraction. If no naming strategy exists, the plain value is returned.
-     *
-     * @param string $name    The name to convert.
-     * @param null   $object  The object is optionally provided as context.
-     * @return mixed
-     */
-    public function extractName($name, $object = null)
-    {
-        if ($this->hasNamingStrategy()) {
-            $name = $this->getNamingStrategy()->extract($name, $object);
-        }
-        return $name;
-    }
-
-    /**
-     * Converts a value for hydration. If no naming strategy exists, the plain value is returned.
-     *
-     * @param string $name  The name to convert.
-     * @param array  $data  The whole data is optionally provided as context.
-     * @return mixed
-     */
-    public function hydrateName($name, $data = null)
-    {
-        if ($this->hasNamingStrategy()) {
-            $name = $this->getNamingStrategy()->hydrate($name, $data);
-        }
-        return $name;
-    }
-
-    /**
-     * Get the filter instance
-     *
-     * @return Filter\FilterComposite
-     */
-    public function getFilter()
-    {
-        return $this->filterComposite;
-    }
-
-    /**
-     * Add a new filter to take care of what needs to be hydrated.
-     * To exclude e.g. the method getServiceLocator:
-     *
-     * <code>
-     * $composite->addFilter("servicelocator",
-     *     function ($property) {
-     *         list($class, $method) = explode('::', $property);
-     *         if ($method === 'getServiceLocator') {
-     *             return false;
-     *         }
-     *         return true;
-     *     }, FilterComposite::CONDITION_AND
-     * );
-     * </code>
-     *
-     * @param string $name Index in the composite
-     * @param callable|Filter\FilterInterface $filter
-     * @param int $condition
-     * @return Filter\FilterComposite
-     */
-    public function addFilter($name, $filter, $condition = FilterComposite::CONDITION_OR)
-    {
-        return $this->filterComposite->addFilter($name, $filter, $condition);
-    }
-
-    /**
-     * Check whether a specific filter exists at key $name or not
-     *
-     * @param string $name Index in the composite
-     * @return bool
-     */
-    public function hasFilter($name)
-    {
-        return $this->filterComposite->hasFilter($name);
-    }
-
-    /**
-     * Remove a filter from the composition.
-     * To not extract "has" methods, you simply need to unregister it
-     *
-     * <code>
-     * $filterComposite->removeFilter('has');
-     * </code>
-     *
-     * @param $name
-     * @return Filter\FilterComposite
-     */
-    public function removeFilter($name)
-    {
-        return $this->filterComposite->removeFilter($name);
-    }
-
-    /**
-     * Adds the given naming strategy
-     *
-     * @param NamingStrategyInterface $strategy The naming to register.
-     * @return self
-     */
-    public function setNamingStrategy(NamingStrategyInterface $strategy)
-    {
-        $this->namingStrategy = $strategy;
-
-        return $this;
-    }
-
-    /**
-     * Gets the naming strategy.
-     *
-     * @return NamingStrategyInterface
-     */
-    public function getNamingStrategy()
-    {
-        return $this->namingStrategy;
-    }
-
-    /**
-     * Checks if a naming strategy exists.
-     *
-     * @return bool
-     */
-    public function hasNamingStrategy()
-    {
-        return isset($this->namingStrategy);
-    }
-
-    /**
-     * Removes the naming strategy
-     *
-     * @return self
-     */
-    public function removeNamingStrategy()
-    {
-        $this->namingStrategy = null;
-
-        return $this;
-    }
-}
diff --git a/civicrm/vendor/zendframework/zend-stdlib/src/Hydrator/Aggregate/AggregateHydrator.php b/civicrm/vendor/zendframework/zend-stdlib/src/Hydrator/Aggregate/AggregateHydrator.php
deleted file mode 100644
index 38a868e022e3ce330070d65c2d735d2119efba51..0000000000000000000000000000000000000000
--- a/civicrm/vendor/zendframework/zend-stdlib/src/Hydrator/Aggregate/AggregateHydrator.php
+++ /dev/null
@@ -1,85 +0,0 @@
-<?php
-/**
- * Zend Framework (http://framework.zend.com/)
- *
- * @link      http://github.com/zendframework/zf2 for the canonical source repository
- * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
- * @license   http://framework.zend.com/license/new-bsd New BSD License
- */
-
-namespace Zend\Stdlib\Hydrator\Aggregate;
-
-use Zend\EventManager\EventManager;
-use Zend\EventManager\EventManagerAwareInterface;
-use Zend\EventManager\EventManagerInterface;
-use Zend\Stdlib\Hydrator\HydratorInterface;
-
-/**
- * Aggregate hydrator that composes multiple hydrators via events
- */
-class AggregateHydrator implements HydratorInterface, EventManagerAwareInterface
-{
-    const DEFAULT_PRIORITY = 1;
-
-    /**
-     * @var \Zend\EventManager\EventManagerInterface|null
-     */
-    protected $eventManager;
-
-    /**
-     * Attaches the provided hydrator to the list of hydrators to be used while hydrating/extracting data
-     *
-     * @param \Zend\Stdlib\Hydrator\HydratorInterface $hydrator
-     * @param int                                     $priority
-     */
-    public function add(HydratorInterface $hydrator, $priority = self::DEFAULT_PRIORITY)
-    {
-        $this->getEventManager()->attachAggregate(new HydratorListener($hydrator), $priority);
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    public function extract($object)
-    {
-        $event = new ExtractEvent($this, $object);
-
-        $this->getEventManager()->trigger($event);
-
-        return $event->getExtractedData();
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    public function hydrate(array $data, $object)
-    {
-        $event = new HydrateEvent($this, $object, $data);
-
-        $this->getEventManager()->trigger($event);
-
-        return $event->getHydratedObject();
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    public function setEventManager(EventManagerInterface $eventManager)
-    {
-        $eventManager->setIdentifiers(array(__CLASS__, get_class($this)));
-
-        $this->eventManager = $eventManager;
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    public function getEventManager()
-    {
-        if (null === $this->eventManager) {
-            $this->setEventManager(new EventManager());
-        }
-
-        return $this->eventManager;
-    }
-}
diff --git a/civicrm/vendor/zendframework/zend-stdlib/src/Hydrator/Aggregate/ExtractEvent.php b/civicrm/vendor/zendframework/zend-stdlib/src/Hydrator/Aggregate/ExtractEvent.php
deleted file mode 100644
index b13bc5c70b2cdf3399fd11562564c971b3bdb599..0000000000000000000000000000000000000000
--- a/civicrm/vendor/zendframework/zend-stdlib/src/Hydrator/Aggregate/ExtractEvent.php
+++ /dev/null
@@ -1,98 +0,0 @@
-<?php
-/**
- * Zend Framework (http://framework.zend.com/)
- *
- * @link      http://github.com/zendframework/zf2 for the canonical source repository
- * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
- * @license   http://framework.zend.com/license/new-bsd New BSD License
- */
-
-namespace Zend\Stdlib\Hydrator\Aggregate;
-
-use Zend\EventManager\Event;
-
-/**
- * Event triggered when the {@see \Zend\Stdlib\Hydrator\Aggregate\AggregateHydrator} extracts
- * data from an object
- */
-class ExtractEvent extends Event
-{
-    const EVENT_EXTRACT = 'extract';
-
-    /**
-     * {@inheritDoc}
-     */
-    protected $name = self::EVENT_EXTRACT;
-
-    /**
-     * @var object
-     */
-    protected $extractionObject;
-
-    /**
-     * @var array
-     */
-    protected $extractedData = array();
-
-    /**
-     * @param object $target
-     * @param object $extractionObject
-     */
-    public function __construct($target, $extractionObject)
-    {
-        $this->target           = $target;
-        $this->extractionObject = $extractionObject;
-    }
-
-    /**
-     * Retrieves the object from which data is extracted
-     *
-     * @return object
-     */
-    public function getExtractionObject()
-    {
-        return $this->extractionObject;
-    }
-
-    /**
-     * @param object $extractionObject
-     *
-     * @return void
-     */
-    public function setExtractionObject($extractionObject)
-    {
-        $this->extractionObject = $extractionObject;
-    }
-
-    /**
-     * Retrieves the data that has been extracted
-     *
-     * @return array
-     */
-    public function getExtractedData()
-    {
-        return $this->extractedData;
-    }
-
-    /**
-     * @param array $extractedData
-     *
-     * @return void
-     */
-    public function setExtractedData(array $extractedData)
-    {
-        $this->extractedData = $extractedData;
-    }
-
-    /**
-     * Merge provided data with the extracted data
-     *
-     * @param array $additionalData
-     *
-     * @return void
-     */
-    public function mergeExtractedData(array $additionalData)
-    {
-        $this->extractedData = array_merge($this->extractedData, $additionalData);
-    }
-}
diff --git a/civicrm/vendor/zendframework/zend-stdlib/src/Hydrator/Aggregate/HydrateEvent.php b/civicrm/vendor/zendframework/zend-stdlib/src/Hydrator/Aggregate/HydrateEvent.php
deleted file mode 100644
index a7c91eec261194793a1a1fc001db658d72ac017d..0000000000000000000000000000000000000000
--- a/civicrm/vendor/zendframework/zend-stdlib/src/Hydrator/Aggregate/HydrateEvent.php
+++ /dev/null
@@ -1,84 +0,0 @@
-<?php
-/**
- * Zend Framework (http://framework.zend.com/)
- *
- * @link      http://github.com/zendframework/zf2 for the canonical source repository
- * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
- * @license   http://framework.zend.com/license/new-bsd New BSD License
- */
-
-namespace Zend\Stdlib\Hydrator\Aggregate;
-
-use Zend\EventManager\Event;
-
-/**
- * Event triggered when the {@see \Zend\Stdlib\Hydrator\Aggregate\AggregateHydrator} hydrates
- * data into an object
- */
-class HydrateEvent extends Event
-{
-    const EVENT_HYDRATE = 'hydrate';
-
-    /**
-     * {@inheritDoc}
-     */
-    protected $name = self::EVENT_HYDRATE;
-
-    /**
-     * @var object
-     */
-    protected $hydratedObject;
-
-    /**
-     * @var array
-     */
-    protected $hydrationData;
-
-    /**
-     * @param object $target
-     * @param object $hydratedObject
-     * @param array  $hydrationData
-     */
-    public function __construct($target, $hydratedObject, array $hydrationData)
-    {
-        $this->target         = $target;
-        $this->hydratedObject = $hydratedObject;
-        $this->hydrationData  = $hydrationData;
-    }
-
-    /**
-     * Retrieves the object that is being hydrated
-     *
-     * @return object
-     */
-    public function getHydratedObject()
-    {
-        return $this->hydratedObject;
-    }
-
-    /**
-     * @param object $hydratedObject
-     */
-    public function setHydratedObject($hydratedObject)
-    {
-        $this->hydratedObject = $hydratedObject;
-    }
-
-    /**
-     * Retrieves the data that is being used for hydration
-     *
-     * @return array
-     */
-    public function getHydrationData()
-    {
-        return $this->hydrationData;
-    }
-
-    /**
-     * @param array $hydrationData
-     */
-    public function setHydrationData(array $hydrationData)
-    {
-        $this->hydrationData = $hydrationData;
-    }
-}
diff --git a/civicrm/vendor/zendframework/zend-stdlib/src/Hydrator/Aggregate/HydratorListener.php b/civicrm/vendor/zendframework/zend-stdlib/src/Hydrator/Aggregate/HydratorListener.php
deleted file mode 100644
index 1c25ff3c4611d0cc6f500e3b80c0ce163d80e71e..0000000000000000000000000000000000000000
--- a/civicrm/vendor/zendframework/zend-stdlib/src/Hydrator/Aggregate/HydratorListener.php
+++ /dev/null
@@ -1,80 +0,0 @@
-<?php
-/**
- * Zend Framework (http://framework.zend.com/)
- *
- * @link      http://github.com/zendframework/zf2 for the canonical source repository
- * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
- * @license   http://framework.zend.com/license/new-bsd New BSD License
- */
-
-namespace Zend\Stdlib\Hydrator\Aggregate;
-
-use Zend\EventManager\AbstractListenerAggregate;
-use Zend\EventManager\EventManagerInterface;
-use Zend\Stdlib\Hydrator\HydratorInterface;
-
-/**
- * Aggregate listener wrapping around a hydrator. Listens
- * to {@see \Zend\Stdlib\Hydrator\Aggregate::EVENT_HYDRATE} and
- * {@see \Zend\Stdlib\Hydrator\Aggregate::EVENT_EXTRACT}
- */
-class HydratorListener extends AbstractListenerAggregate
-{
-    /**
-     * @var \Zend\Stdlib\Hydrator\HydratorInterface
-     */
-    protected $hydrator;
-
-    /**
-     * @param \Zend\Stdlib\Hydrator\HydratorInterface $hydrator
-     */
-    public function __construct(HydratorInterface $hydrator)
-    {
-        $this->hydrator = $hydrator;
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    public function attach(EventManagerInterface $events, $priority = 1)
-    {
-        $this->listeners[] = $events->attach(HydrateEvent::EVENT_HYDRATE, array($this, 'onHydrate'), $priority);
-        $this->listeners[] = $events->attach(ExtractEvent::EVENT_EXTRACT, array($this, 'onExtract'), $priority);
-    }
-
-    /**
-     * Callback to be used when {@see \Zend\Stdlib\Hydrator\Aggregate\HydrateEvent::EVENT_HYDRATE} is triggered
-     *
-     * @param \Zend\Stdlib\Hydrator\Aggregate\HydrateEvent $event
-     *
-     * @return object
-     *
-     * @internal
-     */
-    public function onHydrate(HydrateEvent $event)
-    {
-        $object = $this->hydrator->hydrate($event->getHydrationData(), $event->getHydratedObject());
-
-        $event->setHydratedObject($object);
-
-        return $object;
-    }
-
-    /**
-     * Callback to be used when {@see \Zend\Stdlib\Hydrator\Aggregate\ExtractEvent::EVENT_EXTRACT} is triggered
-     *
-     * @param \Zend\Stdlib\Hydrator\Aggregate\ExtractEvent $event
-     *
-     * @return array
-     *
-     * @internal
-     */
-    public function onExtract(ExtractEvent $event)
-    {
-        $data = $this->hydrator->extract($event->getExtractionObject());
-
-        $event->mergeExtractedData($data);
-
-        return $data;
-    }
-}
diff --git a/civicrm/vendor/zendframework/zend-stdlib/src/Hydrator/ArraySerializable.php b/civicrm/vendor/zendframework/zend-stdlib/src/Hydrator/ArraySerializable.php
deleted file mode 100644
index 4f4ab2a1333ddba8d28eb8a2e86c7c5568ac2e46..0000000000000000000000000000000000000000
--- a/civicrm/vendor/zendframework/zend-stdlib/src/Hydrator/ArraySerializable.php
+++ /dev/null
@@ -1,83 +0,0 @@
-<?php
-/**
- * Zend Framework (http://framework.zend.com/)
- *
- * @link      http://github.com/zendframework/zf2 for the canonical source repository
- * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
- * @license   http://framework.zend.com/license/new-bsd New BSD License
- */
-
-namespace Zend\Stdlib\Hydrator;
-
-use Zend\Stdlib\Exception;
-
-class ArraySerializable extends AbstractHydrator
-{
-    /**
-     * Extract values from the provided object
-     *
-     * Extracts values via the object's getArrayCopy() method.
-     *
-     * @param  object $object
-     * @return array
-     * @throws Exception\BadMethodCallException for an $object not implementing getArrayCopy()
-     */
-    public function extract($object)
-    {
-        if (!is_callable(array($object, 'getArrayCopy'))) {
-            throw new Exception\BadMethodCallException(
-                sprintf('%s expects the provided object to implement getArrayCopy()', __METHOD__)
-            );
-        }
-
-        $data = $object->getArrayCopy();
-        $filter = $this->getFilter();
-
-        foreach ($data as $name => $value) {
-            if (!$filter->filter($name)) {
-                unset($data[$name]);
-                continue;
-            }
-            $extractedName = $this->extractName($name, $object);
-            // replace the original key with extracted, if differ
-            if ($extractedName !== $name) {
-                unset($data[$name]);
-                $name = $extractedName;
-            }
-            $data[$name] = $this->extractValue($name, $value, $object);
-        }
-
-        return $data;
-    }
-
-    /**
-     * Hydrate an object
-     *
-     * Hydrates an object by passing $data to either its exchangeArray() or
-     * populate() method.
-     *
-     * @param  array $data
-     * @param  object $object
-     * @return object
-     * @throws Exception\BadMethodCallException for an $object not implementing exchangeArray() or populate()
-     */
-    public function hydrate(array $data, $object)
-    {
-        $replacement = array();
-        foreach ($data as $key => $value) {
-            $name = $this->hydrateName($key, $data);
-            $replacement[$name] = $this->hydrateValue($name, $value, $data);
-        }
-
-        if (is_callable(array($object, 'exchangeArray'))) {
-            $object->exchangeArray($replacement);
-        } elseif (is_callable(array($object, 'populate'))) {
-            $object->populate($replacement);
-        } else {
-            throw new Exception\BadMethodCallException(
-                sprintf('%s expects the provided object to implement exchangeArray() or populate()', __METHOD__)
-            );
-        }
-        return $object;
-    }
-}
diff --git a/civicrm/vendor/zendframework/zend-stdlib/src/Hydrator/ClassMethods.php b/civicrm/vendor/zendframework/zend-stdlib/src/Hydrator/ClassMethods.php
deleted file mode 100644
index 4edb1f4dcd61c9488330f54d674de6e105428fc5..0000000000000000000000000000000000000000
--- a/civicrm/vendor/zendframework/zend-stdlib/src/Hydrator/ClassMethods.php
+++ /dev/null
@@ -1,274 +0,0 @@
-<?php
-/**
- * Zend Framework (http://framework.zend.com/)
- *
- * @link      http://github.com/zendframework/zf2 for the canonical source repository
- * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
- * @license   http://framework.zend.com/license/new-bsd New BSD License
- */
-
-namespace Zend\Stdlib\Hydrator;
-
-use Traversable;
-use Zend\Stdlib\Exception;
-use Zend\Stdlib\ArrayUtils;
-use Zend\Stdlib\Hydrator\Filter\FilterComposite;
-use Zend\Stdlib\Hydrator\Filter\FilterProviderInterface;
-use Zend\Stdlib\Hydrator\Filter\GetFilter;
-use Zend\Stdlib\Hydrator\Filter\HasFilter;
-use Zend\Stdlib\Hydrator\Filter\IsFilter;
-use Zend\Stdlib\Hydrator\Filter\MethodMatchFilter;
-use Zend\Stdlib\Hydrator\Filter\OptionalParametersFilter;
-use Zend\Stdlib\Hydrator\NamingStrategy\NamingStrategyInterface;
-use Zend\Stdlib\Hydrator\NamingStrategy\UnderscoreNamingStrategy;
-
-class ClassMethods extends AbstractHydrator implements HydratorOptionsInterface
-{
-    /**
-     * Holds the names of the methods used for hydration, indexed by class::property name,
-     * false if the hydration method is not callable/usable for hydration purposes
-     *
-     * @var string[]|bool[]
-     */
-    private $hydrationMethodsCache = array();
-
-    /**
-     * A map of extraction methods to property name to be used during extraction, indexed
-     * by class name and method name
-     *
-     * @var string[][]
-     */
-    private $extractionMethodsCache = array();
-
-    /**
-     * Flag defining whether array keys are underscore-separated (true) or camel case (false)
-     *
-     * @var bool
-     */
-    protected $underscoreSeparatedKeys = true;
-
-    /**
-     * @var \Zend\Stdlib\Hydrator\Filter\FilterInterface
-     */
-    private $callableMethodFilter;
-
-    /**
-     * Define if extract values will use camel case or name with underscore
-     * @param bool|array $underscoreSeparatedKeys
-     */
-    public function __construct($underscoreSeparatedKeys = true)
-    {
-        parent::__construct();
-        $this->setUnderscoreSeparatedKeys($underscoreSeparatedKeys);
-
-        $this->callableMethodFilter = new OptionalParametersFilter();
-
-        $this->filterComposite->addFilter('is', new IsFilter());
-        $this->filterComposite->addFilter('has', new HasFilter());
-        $this->filterComposite->addFilter('get', new GetFilter());
-        $this->filterComposite->addFilter('parameter', new OptionalParametersFilter(), FilterComposite::CONDITION_AND);
-    }
-
-    /**
-     * @param  array|Traversable                 $options
-     * @return ClassMethods
-     * @throws Exception\InvalidArgumentException
-     */
-    public function setOptions($options)
-    {
-        if ($options instanceof Traversable) {
-            $options = ArrayUtils::iteratorToArray($options);
-        } elseif (!is_array($options)) {
-            throw new Exception\InvalidArgumentException(
-                'The options parameter must be an array or a Traversable'
-            );
-        }
-        if (isset($options['underscoreSeparatedKeys'])) {
-            $this->setUnderscoreSeparatedKeys($options['underscoreSeparatedKeys']);
-        }
-
-        return $this;
-    }
-
-    /**
-     * @param  bool      $underscoreSeparatedKeys
-     * @return ClassMethods
-     */
-    public function setUnderscoreSeparatedKeys($underscoreSeparatedKeys)
-    {
-        $this->underscoreSeparatedKeys = (bool) $underscoreSeparatedKeys;
-
-        if ($this->underscoreSeparatedKeys) {
-            $this->setNamingStrategy(new UnderscoreNamingStrategy);
-        } elseif ($this->getNamingStrategy() instanceof UnderscoreNamingStrategy) {
-            $this->removeNamingStrategy();
-        }
-
-        return $this;
-    }
-
-    /**
-     * @return bool
-     */
-    public function getUnderscoreSeparatedKeys()
-    {
-        return $this->underscoreSeparatedKeys;
-    }
-
-    /**
-     * Extract values from an object with class methods
-     *
-     * Extracts the getter/setter of the given $object.
-     *
-     * @param  object                           $object
-     * @return array
-     * @throws Exception\BadMethodCallException for a non-object $object
-     */
-    public function extract($object)
-    {
-        if (!is_object($object)) {
-            throw new Exception\BadMethodCallException(sprintf(
-                '%s expects the provided $object to be a PHP object)',
-                __METHOD__
-            ));
-        }
-
-        $objectClass = get_class($object);
-
-        // reset the hydrator's hydrator's cache for this object, as the filter may be per-instance
-        if ($object instanceof FilterProviderInterface) {
-            $this->extractionMethodsCache[$objectClass] = null;
-        }
-
-        // pass 1 - finding out which properties can be extracted, with which methods (populate hydration cache)
-        if (! isset($this->extractionMethodsCache[$objectClass])) {
-            $this->extractionMethodsCache[$objectClass] = array();
-            $filter                                     = $this->filterComposite;
-            $methods                                    = get_class_methods($object);
-
-            if ($object instanceof FilterProviderInterface) {
-                $filter = new FilterComposite(
-                    array($object->getFilter()),
-                    array(new MethodMatchFilter('getFilter'))
-                );
-            }
-
-            foreach ($methods as $method) {
-                $methodFqn = $objectClass . '::' . $method;
-
-                if (! ($filter->filter($methodFqn) && $this->callableMethodFilter->filter($methodFqn))) {
-                    continue;
-                }
-
-                $attribute = $method;
-
-                if (strpos($method, 'get') === 0) {
-                    $attribute = substr($method, 3);
-                    if (!property_exists($object, $attribute)) {
-                        $attribute = lcfirst($attribute);
-                    }
-                }
-
-                $this->extractionMethodsCache[$objectClass][$method] = $attribute;
-            }
-        }
-
-        $values = array();
-
-        // pass 2 - actually extract data
-        foreach ($this->extractionMethodsCache[$objectClass] as $methodName => $attributeName) {
-            $realAttributeName          = $this->extractName($attributeName, $object);
-            $values[$realAttributeName] = $this->extractValue($realAttributeName, $object->$methodName(), $object);
-        }
-
-        return $values;
-    }
-
-    /**
-     * Hydrate an object by populating getter/setter methods
-     *
-     * Hydrates an object by getter/setter methods of the object.
-     *
-     * @param  array                            $data
-     * @param  object                           $object
-     * @return object
-     * @throws Exception\BadMethodCallException for a non-object $object
-     */
-    public function hydrate(array $data, $object)
-    {
-        if (!is_object($object)) {
-            throw new Exception\BadMethodCallException(sprintf(
-                '%s expects the provided $object to be a PHP object)',
-                __METHOD__
-            ));
-        }
-
-        $objectClass = get_class($object);
-
-        foreach ($data as $property => $value) {
-            $propertyFqn = $objectClass . '::$' . $property;
-
-            if (! isset($this->hydrationMethodsCache[$propertyFqn])) {
-                $setterName = 'set' . ucfirst($this->hydrateName($property, $data));
-
-                $this->hydrationMethodsCache[$propertyFqn] = is_callable(array($object, $setterName))
-                    ? $setterName
-                    : false;
-            }
-
-            if ($this->hydrationMethodsCache[$propertyFqn]) {
-                $object->{$this->hydrationMethodsCache[$propertyFqn]}($this->hydrateValue($property, $value, $data));
-            }
-        }
-
-        return $object;
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    public function addFilter($name, $filter, $condition = FilterComposite::CONDITION_OR)
-    {
-        $this->resetCaches();
-
-        return parent::addFilter($name, $filter, $condition);
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    public function removeFilter($name)
-    {
-        $this->resetCaches();
-
-        return parent::removeFilter($name);
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    public function setNamingStrategy(NamingStrategyInterface $strategy)
-    {
-        $this->resetCaches();
-
-        return parent::setNamingStrategy($strategy);
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    public function removeNamingStrategy()
-    {
-        $this->resetCaches();
-
-        return parent::removeNamingStrategy();
-    }
-
-    /**
-     * Reset all local hydration/extraction caches
-     */
-    private function resetCaches()
-    {
-        $this->hydrationMethodsCache = $this->extractionMethodsCache = array();
-    }
-}
diff --git a/civicrm/vendor/zendframework/zend-stdlib/src/Hydrator/DelegatingHydrator.php b/civicrm/vendor/zendframework/zend-stdlib/src/Hydrator/DelegatingHydrator.php
deleted file mode 100644
index db234d38ada5aa4064875a7a98833397815b7f61..0000000000000000000000000000000000000000
--- a/civicrm/vendor/zendframework/zend-stdlib/src/Hydrator/DelegatingHydrator.php
+++ /dev/null
@@ -1,57 +0,0 @@
-<?php
-/**
- * Zend Framework (http://framework.zend.com/)
- *
- * @link      http://github.com/zendframework/zf2 for the canonical source repository
- * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
- * @license   http://framework.zend.com/license/new-bsd New BSD License
- */
-
-namespace Zend\Stdlib\Hydrator;
-
-use Zend\ServiceManager\ServiceLocatorInterface;
-
-class DelegatingHydrator implements HydratorInterface
-{
-    /**
-     * @var ServiceLocatorInterface
-     */
-    protected $hydrators;
-
-    /**
-     * Constructor
-     *
-     * @param ServiceLocatorInterface $hydrators
-     */
-    public function __construct(ServiceLocatorInterface $hydrators)
-    {
-        $this->hydrators = $hydrators;
-    }
-
-    /**
-     * {@inheritdoc}
-     */
-    public function hydrate(array $data, $object)
-    {
-        return $this->getHydrator($object)->hydrate($data, $object);
-    }
-
-    /**
-     * {@inheritdoc}
-     */
-    public function extract($object)
-    {
-        return $this->getHydrator($object)->extract($object);
-    }
-
-    /**
-     * Gets hydrator of an object
-     *
-     * @param  object $object
-     * @return HydratorInterface
-     */
-    protected function getHydrator($object)
-    {
-        return $this->hydrators->get(get_class($object));
-    }
-}
diff --git a/civicrm/vendor/zendframework/zend-stdlib/src/Hydrator/DelegatingHydratorFactory.php b/civicrm/vendor/zendframework/zend-stdlib/src/Hydrator/DelegatingHydratorFactory.php
deleted file mode 100644
index c3a0da25e7f7eefc3f6f91f5a3bbc4f4ad256d57..0000000000000000000000000000000000000000
--- a/civicrm/vendor/zendframework/zend-stdlib/src/Hydrator/DelegatingHydratorFactory.php
+++ /dev/null
@@ -1,29 +0,0 @@
-<?php
-/**
- * Zend Framework (http://framework.zend.com/)
- *
- * @link      http://github.com/zendframework/zf2 for the canonical source repository
- * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
- * @license   http://framework.zend.com/license/new-bsd New BSD License
- */
-
-namespace Zend\Stdlib\Hydrator;
-
-use Zend\ServiceManager\FactoryInterface;
-use Zend\ServiceManager\ServiceLocatorInterface;
-
-class DelegatingHydratorFactory implements FactoryInterface
-{
-    /**
-     * Creates DelegatingHydrator
-     *
-     * @param  ServiceLocatorInterface $serviceLocator
-     * @return DelegatingHydrator
-     */
-    public function createService(ServiceLocatorInterface $serviceLocator)
-    {
-        // Assume that this factory is registered with the HydratorManager,
-        // and just pass it directly on.
-        return new DelegatingHydrator($serviceLocator);
-    }
-}
diff --git a/civicrm/vendor/zendframework/zend-stdlib/src/Hydrator/Filter/FilterComposite.php b/civicrm/vendor/zendframework/zend-stdlib/src/Hydrator/Filter/FilterComposite.php
deleted file mode 100644
index 060034bb9332ec83b95d122753a8a487805f658d..0000000000000000000000000000000000000000
--- a/civicrm/vendor/zendframework/zend-stdlib/src/Hydrator/Filter/FilterComposite.php
+++ /dev/null
@@ -1,196 +0,0 @@
-<?php
-/**
- * Zend Framework (http://framework.zend.com/)
- *
- * @link           http://github.com/zendframework/zf2 for the canonical source repository
- * @copyright      Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
- * @license        http://framework.zend.com/license/new-bsd New BSD License
- */
-namespace Zend\Stdlib\Hydrator\Filter;
-
-use ArrayObject;
-use Zend\Stdlib\Exception\InvalidArgumentException;
-
-class FilterComposite implements FilterInterface
-{
-    /**
-     * @var ArrayObject
-     */
-    protected $orFilter;
-
-    /**
-     * @var ArrayObject
-     */
-    protected $andFilter;
-
-    /**
-     * Constant to add with "or" conditition
-     */
-    const CONDITION_OR = 1;
-
-    /**
-     * Constant to add with "and" conditition
-     */
-    const CONDITION_AND = 2;
-
-    /**
-     * Define default Filter
-     *
-     * @param  array $orFilter
-     * @param  array $andFilter
-     * @throws InvalidArgumentException
-     */
-    public function __construct($orFilter = array(), $andFilter = array())
-    {
-        array_walk(
-            $orFilter,
-            function ($value, $key) {
-                if (!is_callable($value) && !$value instanceof FilterInterface) {
-                    throw new InvalidArgumentException(
-                        'The value of ' . $key . ' should be either a callable or ' .
-                        'an instance of Zend\Stdlib\Hydrator\Filter\FilterInterface'
-                    );
-                }
-            }
-        );
-
-        array_walk(
-            $andFilter,
-            function ($value, $key) {
-                if (!is_callable($value) && !$value instanceof FilterInterface) {
-                    throw new InvalidArgumentException(
-                        'The value of ' . $key . '  should be either a callable or ' .
-                        'an instance of Zend\Stdlib\Hydrator\Filter\FilterInterface'
-                    );
-                }
-            }
-        );
-
-        $this->orFilter = new ArrayObject($orFilter);
-        $this->andFilter = new ArrayObject($andFilter);
-    }
-
-    /**
-     * Add a filter to the composite. Has to be indexed with $name in
-     * order to identify a specific filter.
-     *
-     * This example will exclude all methods from the hydration, that starts with 'getService'
-     * <code>
-     * $composite->addFilter('exclude',
-     *     function ($method) {
-     *         if (preg_match('/^getService/', $method) {
-     *             return false;
-     *         }
-     *         return true;
-     *     }, FilterComposite::CONDITION_AND
-     * );
-     * </code>
-     *
-     * @param  string                   $name
-     * @param  callable|FilterInterface $filter
-     * @param  int                      $condition Can be either FilterComposite::CONDITION_OR or FilterComposite::CONDITION_AND
-     * @throws InvalidArgumentException
-     * @return FilterComposite
-     */
-    public function addFilter($name, $filter, $condition = self::CONDITION_OR)
-    {
-        if (!is_callable($filter) && !($filter instanceof FilterInterface)) {
-            throw new InvalidArgumentException(
-                'The value of ' . $name . ' should be either a callable or ' .
-                'an instance of Zend\Stdlib\Hydrator\Filter\FilterInterface'
-            );
-        }
-
-        if ($condition === self::CONDITION_OR) {
-            $this->orFilter[$name] = $filter;
-        } elseif ($condition === self::CONDITION_AND) {
-            $this->andFilter[$name] = $filter;
-        }
-
-        return $this;
-    }
-
-    /**
-     * Remove a filter from the composition
-     *
-     * @param $name string Identifier for the filter
-     * @return FilterComposite
-     */
-    public function removeFilter($name)
-    {
-        if (isset($this->orFilter[$name])) {
-            unset($this->orFilter[$name]);
-        }
-
-        if (isset($this->andFilter[$name])) {
-            unset($this->andFilter[$name]);
-        }
-
-        return $this;
-    }
-
-    /**
-     * Check if $name has a filter registered
-     *
-     * @param $name string Identifier for the filter
-     * @return bool
-     */
-    public function hasFilter($name)
-    {
-        return isset($this->orFilter[$name]) || isset($this->andFilter[$name]);
-    }
-
-    /**
-     * Filter the composite based on the AND and OR condition
-     * Will return true if one from the "or conditions" and all from
-     * the "and condition" returns true. Otherwise false
-     *
-     * @param $property string Parameter will be e.g. Parent\Namespace\Class::method
-     * @return bool
-     */
-    public function filter($property)
-    {
-        $andCount = count($this->andFilter);
-        $orCount = count($this->orFilter);
-        // return true if no filters are registered
-        if ($orCount === 0 && $andCount === 0) {
-            return true;
-        } elseif ($orCount === 0 && $andCount !== 0) {
-            $returnValue = true;
-        } else {
-            $returnValue = false;
-        }
-
-        // Check if 1 from the or filters return true
-        foreach ($this->orFilter as $filter) {
-            if (is_callable($filter)) {
-                if ($filter($property) === true) {
-                    $returnValue = true;
-                    break;
-                }
-                continue;
-            } else {
-                if ($filter->filter($property) === true) {
-                    $returnValue = true;
-                    break;
-                }
-            }
-        }
-
-        // Check if all of the and condition return true
-        foreach ($this->andFilter as $filter) {
-            if (is_callable($filter)) {
-                if ($filter($property) === false) {
-                    return false;
-                }
-                continue;
-            } else {
-                if ($filter->filter($property) === false) {
-                    return false;
-                }
-            }
-        }
-
-        return $returnValue;
-    }
-}
diff --git a/civicrm/vendor/zendframework/zend-stdlib/src/Hydrator/Filter/FilterInterface.php b/civicrm/vendor/zendframework/zend-stdlib/src/Hydrator/Filter/FilterInterface.php
deleted file mode 100644
index 16df098f56032e11cd6e99798a35fe3837b27734..0000000000000000000000000000000000000000
--- a/civicrm/vendor/zendframework/zend-stdlib/src/Hydrator/Filter/FilterInterface.php
+++ /dev/null
@@ -1,21 +0,0 @@
-<?php
-/**
- * Zend Framework (http://framework.zend.com/)
- *
- * @link           http://github.com/zendframework/zf2 for the canonical source repository
- * @copyright      Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
- * @license        http://framework.zend.com/license/new-bsd New BSD License
- */
-namespace Zend\Stdlib\Hydrator\Filter;
-
-interface FilterInterface
-{
-    /**
-     * Should return true, if the given filter
-     * does not match
-     *
-     * @param string $property The name of the property
-     * @return bool
-     */
-    public function filter($property);
-}
diff --git a/civicrm/vendor/zendframework/zend-stdlib/src/Hydrator/Filter/FilterProviderInterface.php b/civicrm/vendor/zendframework/zend-stdlib/src/Hydrator/Filter/FilterProviderInterface.php
deleted file mode 100644
index c2e978877a544375fd894b3897f9e0b002a4f9bb..0000000000000000000000000000000000000000
--- a/civicrm/vendor/zendframework/zend-stdlib/src/Hydrator/Filter/FilterProviderInterface.php
+++ /dev/null
@@ -1,19 +0,0 @@
-<?php
-/**
- * Zend Framework (http://framework.zend.com/)
- *
- * @link           http://github.com/zendframework/zf2 for the canonical source repository
- * @copyright      Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
- * @license        http://framework.zend.com/license/new-bsd New BSD License
- */
-namespace Zend\Stdlib\Hydrator\Filter;
-
-interface FilterProviderInterface
-{
-    /**
-     * Provides a filter for hydration
-     *
-     * @return FilterInterface
-     */
-    public function getFilter();
-}
diff --git a/civicrm/vendor/zendframework/zend-stdlib/src/Hydrator/Filter/GetFilter.php b/civicrm/vendor/zendframework/zend-stdlib/src/Hydrator/Filter/GetFilter.php
deleted file mode 100644
index b4d898dc22fca3eacbcaf33b85f638056b5740f8..0000000000000000000000000000000000000000
--- a/civicrm/vendor/zendframework/zend-stdlib/src/Hydrator/Filter/GetFilter.php
+++ /dev/null
@@ -1,27 +0,0 @@
-<?php
-/**
- * Zend Framework (http://framework.zend.com/)
- *
- * @link           http://github.com/zendframework/zf2 for the canonical source repository
- * @copyright      Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
- * @license        http://framework.zend.com/license/new-bsd New BSD License
- */
-namespace Zend\Stdlib\Hydrator\Filter;
-
-class GetFilter implements FilterInterface
-{
-    public function filter($property)
-    {
-        $pos = strpos($property, '::');
-        if ($pos !== false) {
-            $pos += 2;
-        } else {
-            $pos = 0;
-        }
-
-        if (substr($property, $pos, 3) === 'get') {
-            return true;
-        }
-        return false;
-    }
-}
diff --git a/civicrm/vendor/zendframework/zend-stdlib/src/Hydrator/Filter/HasFilter.php b/civicrm/vendor/zendframework/zend-stdlib/src/Hydrator/Filter/HasFilter.php
deleted file mode 100644
index 0cf57f95e173cf034cf48f718f35f2b534cdf993..0000000000000000000000000000000000000000
--- a/civicrm/vendor/zendframework/zend-stdlib/src/Hydrator/Filter/HasFilter.php
+++ /dev/null
@@ -1,27 +0,0 @@
-<?php
-/**
- * Zend Framework (http://framework.zend.com/)
- *
- * @link           http://github.com/zendframework/zf2 for the canonical source repository
- * @copyright      Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
- * @license        http://framework.zend.com/license/new-bsd New BSD License
- */
-namespace Zend\Stdlib\Hydrator\Filter;
-
-class HasFilter implements FilterInterface
-{
-    public function filter($property)
-    {
-        $pos = strpos($property, '::');
-        if ($pos !== false) {
-            $pos += 2;
-        } else {
-            $pos = 0;
-        }
-
-        if (substr($property, $pos, 3) === 'has') {
-            return true;
-        }
-        return false;
-    }
-}
diff --git a/civicrm/vendor/zendframework/zend-stdlib/src/Hydrator/Filter/IsFilter.php b/civicrm/vendor/zendframework/zend-stdlib/src/Hydrator/Filter/IsFilter.php
deleted file mode 100644
index 3b6e3763742ae3fa5d04cf19c3bdd875afba3915..0000000000000000000000000000000000000000
--- a/civicrm/vendor/zendframework/zend-stdlib/src/Hydrator/Filter/IsFilter.php
+++ /dev/null
@@ -1,27 +0,0 @@
-<?php
-/**
- * Zend Framework (http://framework.zend.com/)
- *
- * @link           http://github.com/zendframework/zf2 for the canonical source repository
- * @copyright      Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
- * @license        http://framework.zend.com/license/new-bsd New BSD License
- */
-namespace Zend\Stdlib\Hydrator\Filter;
-
-class IsFilter implements FilterInterface
-{
-    public function filter($property)
-    {
-        $pos = strpos($property, '::');
-        if ($pos !== false) {
-            $pos += 2;
-        } else {
-            $pos = 0;
-        }
-
-        if (substr($property, $pos, 2) === 'is') {
-            return true;
-        }
-        return false;
-    }
-}
diff --git a/civicrm/vendor/zendframework/zend-stdlib/src/Hydrator/Filter/MethodMatchFilter.php b/civicrm/vendor/zendframework/zend-stdlib/src/Hydrator/Filter/MethodMatchFilter.php
deleted file mode 100644
index 2601a6fb31fdbba15b374ff4b506685b38f62591..0000000000000000000000000000000000000000
--- a/civicrm/vendor/zendframework/zend-stdlib/src/Hydrator/Filter/MethodMatchFilter.php
+++ /dev/null
@@ -1,48 +0,0 @@
-<?php
-/**
- * Zend Framework (http://framework.zend.com/)
- *
- * @link           http://github.com/zendframework/zf2 for the canonical source repository
- * @copyright      Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
- * @license        http://framework.zend.com/license/new-bsd New BSD License
- */
-namespace Zend\Stdlib\Hydrator\Filter;
-
-class MethodMatchFilter implements FilterInterface
-{
-    /**
-     * The method to exclude
-     * @var string
-     */
-    protected $method = null;
-
-    /**
-     * Either an exclude or an include
-     * @var bool
-     */
-    protected $exclude = null;
-
-    /**
-     * @param string $method The method to exclude or include
-     * @param bool $exclude If the method should be excluded
-     */
-    public function __construct($method, $exclude = true)
-    {
-        $this->method = $method;
-        $this->exclude = $exclude;
-    }
-
-    public function filter($property)
-    {
-        $pos = strpos($property, '::');
-        if ($pos !== false) {
-            $pos += 2;
-        } else {
-            $pos = 0;
-        }
-        if (substr($property, $pos) === $this->method) {
-            return !$this->exclude;
-        }
-        return $this->exclude;
-    }
-}
diff --git a/civicrm/vendor/zendframework/zend-stdlib/src/Hydrator/Filter/NumberOfParameterFilter.php b/civicrm/vendor/zendframework/zend-stdlib/src/Hydrator/Filter/NumberOfParameterFilter.php
deleted file mode 100644
index 1254b63b35c29848a7e1efb059bcba79f07bcf17..0000000000000000000000000000000000000000
--- a/civicrm/vendor/zendframework/zend-stdlib/src/Hydrator/Filter/NumberOfParameterFilter.php
+++ /dev/null
@@ -1,49 +0,0 @@
-<?php
-/**
- * Zend Framework (http://framework.zend.com/)
- *
- * @link           http://github.com/zendframework/zf2 for the canonical source repository
- * @copyright      Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
- * @license        http://framework.zend.com/license/new-bsd New BSD License
- */
-
-namespace Zend\Stdlib\Hydrator\Filter;
-
-use ReflectionException;
-use ReflectionMethod;
-use Zend\Stdlib\Exception\InvalidArgumentException;
-
-class NumberOfParameterFilter implements FilterInterface
-{
-    /**
-     * The number of parameters beeing accepted
-     * @var int
-     */
-    protected $numberOfParameters = null;
-
-    /**
-     * @param int $numberOfParameters Number of accepted parameters
-     */
-    public function __construct($numberOfParameters = 0)
-    {
-        $this->numberOfParameters = (int) $numberOfParameters;
-    }
-
-    /**
-     * @param string $property the name of the property
-     * @return bool
-     * @throws InvalidArgumentException
-     */
-    public function filter($property)
-    {
-        try {
-            $reflectionMethod = new ReflectionMethod($property);
-        } catch (ReflectionException $exception) {
-            throw new InvalidArgumentException(
-                "Method $property doesn't exist"
-            );
-        }
-
-        return $reflectionMethod->getNumberOfParameters() === $this->numberOfParameters;
-    }
-}
diff --git a/civicrm/vendor/zendframework/zend-stdlib/src/Hydrator/Filter/OptionalParametersFilter.php b/civicrm/vendor/zendframework/zend-stdlib/src/Hydrator/Filter/OptionalParametersFilter.php
deleted file mode 100644
index ccd67ca54a4beb28486b0b344feeb9efa4643ab3..0000000000000000000000000000000000000000
--- a/civicrm/vendor/zendframework/zend-stdlib/src/Hydrator/Filter/OptionalParametersFilter.php
+++ /dev/null
@@ -1,54 +0,0 @@
-<?php
-/**
- * Zend Framework (http://framework.zend.com/)
- *
- * @link           http://github.com/zendframework/zf2 for the canonical source repository
- * @copyright      Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
- * @license        http://framework.zend.com/license/new-bsd New BSD License
- */
-namespace Zend\Stdlib\Hydrator\Filter;
-
-use InvalidArgumentException;
-use ReflectionException;
-use ReflectionMethod;
-use ReflectionParameter;
-
-/**
- * Filter that includes methods which have no parameters or only optional parameters
- */
-class OptionalParametersFilter implements FilterInterface
-{
-    /**
-     * Map of methods already analyzed
-     * by {@see \Zend\Stdlib\Hydrator\Filter\OptionalParametersFilter::filter()},
-     * cached for performance reasons
-     *
-     * @var bool[]
-     */
-    protected static $propertiesCache = array();
-
-    /**
-     * {@inheritDoc}
-     */
-    public function filter($property)
-    {
-        if (isset(static::$propertiesCache[$property])) {
-            return static::$propertiesCache[$property];
-        }
-
-        try {
-            $reflectionMethod = new ReflectionMethod($property);
-        } catch (ReflectionException $exception) {
-            throw new InvalidArgumentException(sprintf('Method %s doesn\'t exist', $property));
-        }
-
-        $mandatoryParameters = array_filter(
-            $reflectionMethod->getParameters(),
-            function (ReflectionParameter $parameter) {
-                return ! $parameter->isOptional();
-            }
-        );
-
-        return static::$propertiesCache[$property] = empty($mandatoryParameters);
-    }
-}
diff --git a/civicrm/vendor/zendframework/zend-stdlib/src/Hydrator/FilterEnabledInterface.php b/civicrm/vendor/zendframework/zend-stdlib/src/Hydrator/FilterEnabledInterface.php
deleted file mode 100644
index 380aade050ad7fd18f684f916d7876af81643a77..0000000000000000000000000000000000000000
--- a/civicrm/vendor/zendframework/zend-stdlib/src/Hydrator/FilterEnabledInterface.php
+++ /dev/null
@@ -1,63 +0,0 @@
-<?php
-/**
- * Zend Framework (http://framework.zend.com/)
- *
- * @link      http://github.com/zendframework/zf2 for the canonical source repository
- * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
- * @license   http://framework.zend.com/license/new-bsd New BSD License
- */
-
-namespace Zend\Stdlib\Hydrator;
-
-use Zend\Stdlib\Hydrator\Filter\FilterInterface;
-use Zend\Stdlib\Hydrator\Filter\FilterComposite;
-use Zend\Stdlib\Hydrator\Filter\FilterProviderInterface;
-
-interface FilterEnabledInterface extends FilterProviderInterface
-{
-    /**
-     * Add a new filter to take care of what needs to be hydrated.
-     * To exclude e.g. the method getServiceLocator:
-     *
-     * <code>
-     * $composite->addFilter(
-     *     "servicelocator",
-     *     function ($property) {
-     *         list($class, $method) = explode('::', $property);
-     *         if ($method === 'getServiceLocator') {
-     *             return false;
-     *         }
-     *         return true;
-     *     },
-     *     FilterComposite::CONDITION_AND
-     * );
-     * </code>
-     *
-     * @param string $name Index in the composite
-     * @param callable|FilterInterface $filter
-     * @param int $condition
-     * @return FilterComposite
-     */
-    public function addFilter($name, $filter, $condition = FilterComposite::CONDITION_OR);
-
-    /**
-     * Check whether a specific filter exists at key $name or not
-     *
-     * @param string $name Index in the composite
-     * @return bool
-     */
-    public function hasFilter($name);
-
-    /**
-     * Remove a filter from the composition.
-     * To not extract "has" methods, you simply need to unregister it
-     *
-     * <code>
-     * $filterComposite->removeFilter('has');
-     * </code>
-     *
-     * @param $name
-     * @return FilterComposite
-     */
-    public function removeFilter($name);
-}
diff --git a/civicrm/vendor/zendframework/zend-stdlib/src/Hydrator/HydrationInterface.php b/civicrm/vendor/zendframework/zend-stdlib/src/Hydrator/HydrationInterface.php
deleted file mode 100644
index e7deff491ae575b2bdf728d94c37f94e40fac656..0000000000000000000000000000000000000000
--- a/civicrm/vendor/zendframework/zend-stdlib/src/Hydrator/HydrationInterface.php
+++ /dev/null
@@ -1,22 +0,0 @@
-<?php
-/**
- * Zend Framework (http://framework.zend.com/)
- *
- * @link      http://github.com/zendframework/zf2 for the canonical source repository
- * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
- * @license   http://framework.zend.com/license/new-bsd New BSD License
- */
-
-namespace Zend\Stdlib\Hydrator;
-
-interface HydrationInterface
-{
-    /**
-     * Hydrate $object with the provided $data.
-     *
-     * @param  array $data
-     * @param  object $object
-     * @return object
-     */
-    public function hydrate(array $data, $object);
-}
diff --git a/civicrm/vendor/zendframework/zend-stdlib/src/Hydrator/HydratorAwareInterface.php b/civicrm/vendor/zendframework/zend-stdlib/src/Hydrator/HydratorAwareInterface.php
deleted file mode 100644
index d64782ea41ee2ed55cb2be38035a296883533acf..0000000000000000000000000000000000000000
--- a/civicrm/vendor/zendframework/zend-stdlib/src/Hydrator/HydratorAwareInterface.php
+++ /dev/null
@@ -1,28 +0,0 @@
-<?php
-/**
- * Zend Framework (http://framework.zend.com/)
- *
- * @link      http://github.com/zendframework/zf2 for the canonical source repository
- * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
- * @license   http://framework.zend.com/license/new-bsd New BSD License
- */
-
-namespace Zend\Stdlib\Hydrator;
-
-interface HydratorAwareInterface
-{
-    /**
-     * Set hydrator
-     *
-     * @param  HydratorInterface $hydrator
-     * @return HydratorAwareInterface
-     */
-    public function setHydrator(HydratorInterface $hydrator);
-
-    /**
-     * Retrieve hydrator
-     *
-     * @return HydratorInterface
-     */
-    public function getHydrator();
-}
diff --git a/civicrm/vendor/zendframework/zend-stdlib/src/Hydrator/HydratorAwareTrait.php b/civicrm/vendor/zendframework/zend-stdlib/src/Hydrator/HydratorAwareTrait.php
deleted file mode 100644
index 9c772c277a3d451a5a29814ffa5a2c124fbaf1d1..0000000000000000000000000000000000000000
--- a/civicrm/vendor/zendframework/zend-stdlib/src/Hydrator/HydratorAwareTrait.php
+++ /dev/null
@@ -1,47 +0,0 @@
-<?php
-/**
- * Zend Framework (http://framework.zend.com/)
- *
- * @link      http://github.com/zendframework/zf2 for the canonical source repository
- * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
- * @license   http://framework.zend.com/license/new-bsd New BSD License
- */
-
-namespace Zend\Stdlib\Hydrator;
-
-trait HydratorAwareTrait
-{
-    /**
-     * Hydrator instance
-     *
-     * @var HydratorInterface
-     * @access protected
-     */
-    protected $hydrator = null;
-
-    /**
-     * Set hydrator
-     *
-     * @param  HydratorInterface $hydrator
-     * @return self
-     * @access public
-     */
-    public function setHydrator(HydratorInterface $hydrator)
-    {
-        $this->hydrator = $hydrator;
-
-        return $this;
-    }
-
-    /**
-     * Retrieve hydrator
-     *
-     * @param void
-     * @return null|HydratorInterface
-     * @access public
-     */
-    public function getHydrator()
-    {
-        return $this->hydrator;
-    }
-}
diff --git a/civicrm/vendor/zendframework/zend-stdlib/src/Hydrator/HydratorInterface.php b/civicrm/vendor/zendframework/zend-stdlib/src/Hydrator/HydratorInterface.php
deleted file mode 100644
index bc9983d9a5a6cc1d8c0d859cc548f4fd02a940b2..0000000000000000000000000000000000000000
--- a/civicrm/vendor/zendframework/zend-stdlib/src/Hydrator/HydratorInterface.php
+++ /dev/null
@@ -1,16 +0,0 @@
-<?php
-/**
- * Zend Framework (http://framework.zend.com/)
- *
- * @link      http://github.com/zendframework/zf2 for the canonical source repository
- * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
- * @license   http://framework.zend.com/license/new-bsd New BSD License
- */
-
-namespace Zend\Stdlib\Hydrator;
-
-use Zend\Stdlib\Extractor\ExtractionInterface;
-
-interface HydratorInterface extends HydrationInterface, ExtractionInterface
-{
-}
diff --git a/civicrm/vendor/zendframework/zend-stdlib/src/Hydrator/HydratorOptionsInterface.php b/civicrm/vendor/zendframework/zend-stdlib/src/Hydrator/HydratorOptionsInterface.php
deleted file mode 100644
index 44610f7c1e2c7ce7126f5675e88a17269c4eaec3..0000000000000000000000000000000000000000
--- a/civicrm/vendor/zendframework/zend-stdlib/src/Hydrator/HydratorOptionsInterface.php
+++ /dev/null
@@ -1,19 +0,0 @@
-<?php
-/**
- * Zend Framework (http://framework.zend.com/)
- *
- * @link      http://github.com/zendframework/zf2 for the canonical source repository
- * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
- * @license   http://framework.zend.com/license/new-bsd New BSD License
- */
-
-namespace Zend\Stdlib\Hydrator;
-
-interface HydratorOptionsInterface
-{
-    /**
-     * @param  array|\Traversable $options
-     * @return HydratorOptionsInterface
-     */
-    public function setOptions($options);
-}
diff --git a/civicrm/vendor/zendframework/zend-stdlib/src/Hydrator/HydratorPluginManager.php b/civicrm/vendor/zendframework/zend-stdlib/src/Hydrator/HydratorPluginManager.php
deleted file mode 100644
index 1b238e7ccb5b2fd46534f442b16ea7593d6a8ddd..0000000000000000000000000000000000000000
--- a/civicrm/vendor/zendframework/zend-stdlib/src/Hydrator/HydratorPluginManager.php
+++ /dev/null
@@ -1,74 +0,0 @@
-<?php
-/**
- * Zend Framework (http://framework.zend.com/)
- *
- * @link      http://github.com/zendframework/zf2 for the canonical source repository
- * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
- * @license   http://framework.zend.com/license/new-bsd New BSD License
- */
-
-namespace Zend\Stdlib\Hydrator;
-
-use Zend\ServiceManager\AbstractPluginManager;
-use Zend\Stdlib\Exception;
-
-/**
- * Plugin manager implementation for hydrators.
- *
- * Enforces that adapters retrieved are instances of HydratorInterface
- */
-class HydratorPluginManager extends AbstractPluginManager
-{
-    /**
-     * Whether or not to share by default
-     *
-     * @var bool
-     */
-    protected $shareByDefault = false;
-
-    /**
-     * Default aliases
-     *
-     * @var array
-     */
-    protected $aliases = array(
-        'delegatinghydrator' => 'Zend\Stdlib\Hydrator\DelegatingHydrator',
-    );
-
-    /**
-     * Default set of adapters
-     *
-     * @var array
-     */
-    protected $invokableClasses = array(
-        'arrayserializable' => 'Zend\Stdlib\Hydrator\ArraySerializable',
-        'classmethods'      => 'Zend\Stdlib\Hydrator\ClassMethods',
-        'objectproperty'    => 'Zend\Stdlib\Hydrator\ObjectProperty',
-        'reflection'        => 'Zend\Stdlib\Hydrator\Reflection'
-    );
-
-    /**
-     * Default factory-based adapters
-     *
-     * @var array
-     */
-    protected $factories = array(
-        'Zend\Stdlib\Hydrator\DelegatingHydrator' => 'Zend\Stdlib\Hydrator\DelegatingHydratorFactory',
-    );
-
-    /**
-     * {@inheritDoc}
-     */
-    public function validatePlugin($plugin)
-    {
-        if ($plugin instanceof HydratorInterface) {
-            // we're okay
-            return;
-        }
-
-        throw new Exception\RuntimeException(sprintf(
-            'Plugin of type %s is invalid; must implement Zend\Stdlib\Hydrator\HydratorInterface',
-            (is_object($plugin) ? get_class($plugin) : gettype($plugin))
-        ));
-    }
-}
diff --git a/civicrm/vendor/zendframework/zend-stdlib/src/Hydrator/NamingStrategy/ArrayMapNamingStrategy.php b/civicrm/vendor/zendframework/zend-stdlib/src/Hydrator/NamingStrategy/ArrayMapNamingStrategy.php
deleted file mode 100644
index 962303ae151dd49bb38e2347de2777ef7659f1d7..0000000000000000000000000000000000000000
--- a/civicrm/vendor/zendframework/zend-stdlib/src/Hydrator/NamingStrategy/ArrayMapNamingStrategy.php
+++ /dev/null
@@ -1,51 +0,0 @@
-<?php
-/**
- * Zend Framework (http://framework.zend.com/)
- *
- * @link      http://github.com/zendframework/zf2 for the canonical source repository
- * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
- * @license   http://framework.zend.com/license/new-bsd New BSD License
- */
-
-namespace Zend\Stdlib\Hydrator\NamingStrategy;
-
-final class ArrayMapNamingStrategy implements NamingStrategyInterface
-{
-    /**
-     * @var string[]
-     */
-    private $extractionMap = array();
-
-    /**
-     * @var string[]
-     */
-    private $hydrationMap = array();
-
-    /**
-     * Constructor
-     *
-     * @param array $extractionMap A map of string keys and values for symmetric translation of hydrated
-     *                             and extracted field names
-     */
-    public function __construct(array $extractionMap)
-    {
-        $this->extractionMap = $extractionMap;
-        $this->hydrationMap  = array_flip($extractionMap);
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    public function hydrate($name)
-    {
-        return isset($this->hydrationMap[$name]) ? $this->hydrationMap[$name] : $name;
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    public function extract($name)
-    {
-        return isset($this->extractionMap[$name]) ? $this->extractionMap[$name] : $name;
-    }
-}
diff --git a/civicrm/vendor/zendframework/zend-stdlib/src/Hydrator/NamingStrategy/CompositeNamingStrategy.php b/civicrm/vendor/zendframework/zend-stdlib/src/Hydrator/NamingStrategy/CompositeNamingStrategy.php
deleted file mode 100644
index 0887e9288b85b723be62aa8f829bbd1cc1687d1c..0000000000000000000000000000000000000000
--- a/civicrm/vendor/zendframework/zend-stdlib/src/Hydrator/NamingStrategy/CompositeNamingStrategy.php
+++ /dev/null
@@ -1,64 +0,0 @@
-<?php
-/**
- * Zend Framework (http://framework.zend.com/)
- *
- * @link      http://github.com/zendframework/zf2 for the canonical source repository
- * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
- * @license   http://framework.zend.com/license/new-bsd New BSD License
- */
-
-namespace Zend\Stdlib\Hydrator\NamingStrategy;
-
-final class CompositeNamingStrategy implements NamingStrategyInterface
-{
-    /**
-     * @var array
-     */
-    private $namingStrategies = array();
-
-    /**
-     * @var NamingStrategyInterface
-     */
-    private $defaultNamingStrategy;
-
-    /**
-     * @param NamingStrategyInterface[]    $strategies            indexed by the name they translate
-     * @param NamingStrategyInterface|null $defaultNamingStrategy
-     */
-    public function __construct(array $strategies, NamingStrategyInterface $defaultNamingStrategy = null)
-    {
-        $this->namingStrategies = array_map(
-            function (NamingStrategyInterface $strategy) {
-                // this callback is here only to ensure type-safety
-                return $strategy;
-            },
-            $strategies
-        );
-
-        $this->defaultNamingStrategy = $defaultNamingStrategy ?: new IdentityNamingStrategy();
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    public function extract($name)
-    {
-        $strategy = isset($this->namingStrategies[$name])
-            ? $this->namingStrategies[$name]
-            : $this->defaultNamingStrategy;
-
-        return $strategy->extract($name);
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    public function hydrate($name)
-    {
-        $strategy = isset($this->namingStrategies[$name])
-            ? $this->namingStrategies[$name]
-            : $this->defaultNamingStrategy;
-
-        return $strategy->hydrate($name);
-    }
-}
diff --git a/civicrm/vendor/zendframework/zend-stdlib/src/Hydrator/NamingStrategy/IdentityNamingStrategy.php b/civicrm/vendor/zendframework/zend-stdlib/src/Hydrator/NamingStrategy/IdentityNamingStrategy.php
deleted file mode 100644
index ee4b328d34d638e787ec9eca9d10e0c8a034269c..0000000000000000000000000000000000000000
--- a/civicrm/vendor/zendframework/zend-stdlib/src/Hydrator/NamingStrategy/IdentityNamingStrategy.php
+++ /dev/null
@@ -1,29 +0,0 @@
-<?php
-/**
- * Zend Framework (http://framework.zend.com/)
- *
- * @link      http://github.com/zendframework/zf2 for the canonical source repository
- * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
- * @license   http://framework.zend.com/license/new-bsd New BSD License
- */
-
-namespace Zend\Stdlib\Hydrator\NamingStrategy;
-
-final class IdentityNamingStrategy implements NamingStrategyInterface
-{
-    /**
-     * {@inheritDoc}
-     */
-    public function hydrate($name)
-    {
-        return $name;
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    public function extract($name)
-    {
-        return $name;
-    }
-}
diff --git a/civicrm/vendor/zendframework/zend-stdlib/src/Hydrator/NamingStrategy/MapNamingStrategy.php b/civicrm/vendor/zendframework/zend-stdlib/src/Hydrator/NamingStrategy/MapNamingStrategy.php
deleted file mode 100644
index 27fbf321874e9f79040994fa79c3a452414fa50d..0000000000000000000000000000000000000000
--- a/civicrm/vendor/zendframework/zend-stdlib/src/Hydrator/NamingStrategy/MapNamingStrategy.php
+++ /dev/null
@@ -1,89 +0,0 @@
-<?php
-/**
- * Zend Framework (http://framework.zend.com/)
- *
- * @link      http://github.com/zendframework/zf2 for the canonical source repository
- * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
- * @license   http://framework.zend.com/license/new-bsd New BSD License
- */
-
-namespace Zend\Stdlib\Hydrator\NamingStrategy;
-
-use Zend\Stdlib\Exception\InvalidArgumentException;
-
-class MapNamingStrategy implements NamingStrategyInterface
-{
-    /**
-     * Map for hydrate name conversion.
-     *
-     * @var array
-     */
-    protected $mapping = array();
-
-    /**
-     * Reversed map for extract name conversion.
-     *
-     * @var array
-     */
-    protected $reverse = array();
-
-    /**
-     * Initialize.
-     *
-     * @param array $mapping Map for name conversion on hydration
-     * @param array $reverse Reverse map for name conversion on extraction
-     */
-    public function __construct(array $mapping, array $reverse = null)
-    {
-        $this->mapping = $mapping;
-        $this->reverse = $reverse ?: $this->flipMapping($mapping);
-    }
-
-    /**
-     * Safelly flip mapping array.
-     *
-     * @param  array                    $array Array to flip
-     * @return array                    Flipped array
-     * @throws InvalidArgumentException
-     */
-    protected function flipMapping(array $array)
-    {
-        array_walk($array, function ($value) {
-            if (!is_string($value) && !is_int($value)) {
-                throw new InvalidArgumentException('Mapping array can\'t be flipped because of invalid value');
-            }
-        });
-
-        return array_flip($array);
-    }
-
-    /**
-     * Converts the given name so that it can be extracted by the hydrator.
-     *
-     * @param  string $name The original name
-     * @return mixed  The hydrated name
-     */
-    public function hydrate($name)
-    {
-        if (array_key_exists($name, $this->mapping)) {
-            return $this->mapping[$name];
-        }
-
-        return $name;
-    }
-
-    /**
-     * Converts the given name so that it can be hydrated by the hydrator.
-     *
-     * @param  string $name The original name
-     * @return mixed  The extracted name
-     */
-    public function extract($name)
-    {
-        if (array_key_exists($name, $this->reverse)) {
-            return $this->reverse[$name];
-        }
-
-        return $name;
-    }
-}
diff --git a/civicrm/vendor/zendframework/zend-stdlib/src/Hydrator/NamingStrategy/NamingStrategyInterface.php b/civicrm/vendor/zendframework/zend-stdlib/src/Hydrator/NamingStrategy/NamingStrategyInterface.php
deleted file mode 100644
index ff99385c19f98dbdbe641a003e5f7b02be787d6a..0000000000000000000000000000000000000000
--- a/civicrm/vendor/zendframework/zend-stdlib/src/Hydrator/NamingStrategy/NamingStrategyInterface.php
+++ /dev/null
@@ -1,37 +0,0 @@
-<?php
-/**
- * Zend Framework (http://framework.zend.com/)
- *
- * @link      http://github.com/zendframework/zf2 for the canonical source repository
- * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
- * @license   http://framework.zend.com/license/new-bsd New BSD License
- */
-
-namespace Zend\Stdlib\Hydrator\NamingStrategy;
-
-/**
- * Allow property extraction / hydration for hydrator
- *
- * Interface PropertyStrategyInterface
- * @package Zend\Stdlib\Hydrator\NamingStrategy
- */
-interface NamingStrategyInterface
-{
-    /**
-     * Converts the given name so that it can be extracted by the hydrator.
-     *
-     * @param string $name   The original name
-     * @param object $object (optional) The original object for context.
-     * @return mixed         The hydrated name
-     */
-    public function hydrate($name);
-
-    /**
-     * Converts the given name so that it can be hydrated by the hydrator.
-     *
-     * @param string $name The original name
-     * @param array  $data (optional) The original data for context.
-     * @return mixed The extracted name
-     */
-    public function extract($name);
-}
diff --git a/civicrm/vendor/zendframework/zend-stdlib/src/Hydrator/NamingStrategy/UnderscoreNamingStrategy.php b/civicrm/vendor/zendframework/zend-stdlib/src/Hydrator/NamingStrategy/UnderscoreNamingStrategy.php
deleted file mode 100644
index 023b4eec76a6b89616acfe35554e6fe6b45af5fa..0000000000000000000000000000000000000000
--- a/civicrm/vendor/zendframework/zend-stdlib/src/Hydrator/NamingStrategy/UnderscoreNamingStrategy.php
+++ /dev/null
@@ -1,80 +0,0 @@
-<?php
-/**
- * Zend Framework (http://framework.zend.com/)
- *
- * @link      http://github.com/zendframework/zf2 for the canonical source repository
- * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
- * @license   http://framework.zend.com/license/new-bsd New BSD License
- */
-
-namespace Zend\Stdlib\Hydrator\NamingStrategy;
-
-use Zend\Filter\FilterChain;
-
-class UnderscoreNamingStrategy implements NamingStrategyInterface
-{
-    /**
-     * @var FilterChain|null
-     */
-    protected static $camelCaseToUnderscoreFilter;
-
-    /**
-     * @var FilterChain|null
-     */
-    protected static $underscoreToStudlyCaseFilter;
-
-    /**
-     * Remove underscores and capitalize letters
-     *
-     * @param  string $name
-     * @return string
-     */
-    public function hydrate($name)
-    {
-        return $this->getUnderscoreToStudlyCaseFilter()->filter($name);
-    }
-
-    /**
-     * Remove capitalized letters and prepend underscores.
-     *
-     * @param  string $name
-     * @return string
-     */
-    public function extract($name)
-    {
-        return $this->getCamelCaseToUnderscoreFilter()->filter($name);
-    }
-
-    /**
-     * @return FilterChain
-     */
-    protected function getUnderscoreToStudlyCaseFilter()
-    {
-        if (static::$underscoreToStudlyCaseFilter instanceof FilterChain) {
-            return static::$underscoreToStudlyCaseFilter;
-        }
-
-        $filter = new FilterChain();
-
-        $filter->attachByName('WordUnderscoreToStudlyCase');
-
-        return static::$underscoreToStudlyCaseFilter = $filter;
-    }
-
-    /**
-     * @return FilterChain
-     */
-    protected function getCamelCaseToUnderscoreFilter()
-    {
-        if (static::$camelCaseToUnderscoreFilter instanceof FilterChain) {
-            return static::$camelCaseToUnderscoreFilter;
-        }
-
-        $filter = new FilterChain();
-
-        $filter->attachByName('WordCamelCaseToUnderscore');
-        $filter->attachByName('StringToLower');
-
-        return static::$camelCaseToUnderscoreFilter = $filter;
-    }
-}
diff --git a/civicrm/vendor/zendframework/zend-stdlib/src/Hydrator/NamingStrategyEnabledInterface.php b/civicrm/vendor/zendframework/zend-stdlib/src/Hydrator/NamingStrategyEnabledInterface.php
deleted file mode 100644
index f9c6288a760b0948d3f52d27df6239608adfcce7..0000000000000000000000000000000000000000
--- a/civicrm/vendor/zendframework/zend-stdlib/src/Hydrator/NamingStrategyEnabledInterface.php
+++ /dev/null
@@ -1,44 +0,0 @@
-<?php
-/**
- * Zend Framework (http://framework.zend.com/)
- *
- * @link      http://github.com/zendframework/zf2 for the canonical source repository
- * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
- * @license   http://framework.zend.com/license/new-bsd New BSD License
- */
-
-namespace Zend\Stdlib\Hydrator;
-
-use Zend\Stdlib\Hydrator\NamingStrategy\NamingStrategyInterface;
-
-interface NamingStrategyEnabledInterface
-{
-    /**
-     * Adds the given naming strategy
-     *
-     * @param NamingStrategyInterface $strategy The naming to register.
-     * @return NamingStrategyEnabledInterface
-     */
-    public function setNamingStrategy(NamingStrategyInterface $strategy);
-
-    /**
-     * Gets the naming strategy.
-     *
-     * @return NamingStrategyInterface
-     */
-    public function getNamingStrategy();
-
-    /**
-     * Checks if a naming strategy exists.
-     *
-     * @return bool
-     */
-    public function hasNamingStrategy();
-
-    /**
-     * Removes the naming with the given name.
-     *
-     * @return NamingStrategyEnabledInterface
-     */
-    public function removeNamingStrategy();
-}
diff --git a/civicrm/vendor/zendframework/zend-stdlib/src/Hydrator/ObjectProperty.php b/civicrm/vendor/zendframework/zend-stdlib/src/Hydrator/ObjectProperty.php
deleted file mode 100644
index c9f5260a5e8e0d8c4c4bc4f56a4c0ff92621296b..0000000000000000000000000000000000000000
--- a/civicrm/vendor/zendframework/zend-stdlib/src/Hydrator/ObjectProperty.php
+++ /dev/null
@@ -1,110 +0,0 @@
-<?php
-/**
- * Zend Framework (http://framework.zend.com/)
- *
- * @link      http://github.com/zendframework/zf2 for the canonical source repository
- * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
- * @license   http://framework.zend.com/license/new-bsd New BSD License
- */
-
-namespace Zend\Stdlib\Hydrator;
-
-use Zend\Stdlib\Exception;
-use ReflectionClass;
-use ReflectionProperty;
-
-class ObjectProperty extends AbstractHydrator
-{
-    /**
-     * @var array[] indexed by class name and then property name
-     */
-    private static $skippedPropertiesCache = array();
-
-    /**
-     * {@inheritDoc}
-     *
-     * Extracts the accessible non-static properties of the given $object.
-     *
-     * @throws Exception\BadMethodCallException for a non-object $object
-     */
-    public function extract($object)
-    {
-        if (!is_object($object)) {
-            throw new Exception\BadMethodCallException(
-                sprintf('%s expects the provided $object to be a PHP object)', __METHOD__)
-            );
-        }
-
-        $data   = get_object_vars($object);
-        $filter = $this->getFilter();
-
-        foreach ($data as $name => $value) {
-            // Filter keys, removing any we don't want
-            if (! $filter->filter($name)) {
-                unset($data[$name]);
-                continue;
-            }
-
-            // Replace name if extracted differ
-            $extracted = $this->extractName($name, $object);
-
-            if ($extracted !== $name) {
-                unset($data[$name]);
-                $name = $extracted;
-            }
-
-            $data[$name] = $this->extractValue($name, $value, $object);
-        }
-
-        return $data;
-    }
-
-    /**
-     * {@inheritDoc}
-     *
-     * Hydrate an object by populating public properties
-     *
-     * Hydrates an object by setting public properties of the object.
-     *
-     * @throws Exception\BadMethodCallException for a non-object $object
-     */
-    public function hydrate(array $data, $object)
-    {
-        if (!is_object($object)) {
-            throw new Exception\BadMethodCallException(
-                sprintf('%s expects the provided $object to be a PHP object)', __METHOD__)
-            );
-        }
-
-        $properties = & self::$skippedPropertiesCache[get_class($object)];
-
-        if (! isset($properties)) {
-            $reflection = new ReflectionClass($object);
-            $properties = array_fill_keys(
-                array_map(
-                    function (ReflectionProperty $property) {
-                        return $property->getName();
-                    },
-                    $reflection->getProperties(
-                        ReflectionProperty::IS_PRIVATE
-                        + ReflectionProperty::IS_PROTECTED
-                        + ReflectionProperty::IS_STATIC
-                    )
-                ),
-                true
-            );
-        }
-
-        foreach ($data as $name => $value) {
-            $property = $this->hydrateName($name, $data);
-
-            if (isset($properties[$property])) {
-                continue;
-            }
-
-            $object->$property = $this->hydrateValue($property, $value, $data);
-        }
-
-        return $object;
-    }
-}
diff --git a/civicrm/vendor/zendframework/zend-stdlib/src/Hydrator/Reflection.php b/civicrm/vendor/zendframework/zend-stdlib/src/Hydrator/Reflection.php
deleted file mode 100644
index ea8e2d215309c3d3cf56d43c74b56bbd22d9f157..0000000000000000000000000000000000000000
--- a/civicrm/vendor/zendframework/zend-stdlib/src/Hydrator/Reflection.php
+++ /dev/null
@@ -1,95 +0,0 @@
-<?php
-/**
- * Zend Framework (http://framework.zend.com/)
- *
- * @link      http://github.com/zendframework/zf2 for the canonical source repository
- * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
- * @license   http://framework.zend.com/license/new-bsd New BSD License
- */
-
-namespace Zend\Stdlib\Hydrator;
-
-use ReflectionClass;
-use Zend\Stdlib\Exception;
-
-class Reflection extends AbstractHydrator
-{
-    /**
-     * Simple in-memory array cache of ReflectionProperties used.
-     * @var \ReflectionProperty[]
-     */
-    protected static $reflProperties = array();
-
-    /**
-     * Extract values from an object
-     *
-     * @param  object $object
-     * @return array
-     */
-    public function extract($object)
-    {
-        $result = array();
-        foreach (self::getReflProperties($object) as $property) {
-            $propertyName = $this->extractName($property->getName(), $object);
-            if (!$this->filterComposite->filter($propertyName)) {
-                continue;
-            }
-
-            $value = $property->getValue($object);
-            $result[$propertyName] = $this->extractValue($propertyName, $value, $object);
-        }
-
-        return $result;
-    }
-
-    /**
-     * Hydrate $object with the provided $data.
-     *
-     * @param  array $data
-     * @param  object $object
-     * @return object
-     */
-    public function hydrate(array $data, $object)
-    {
-        $reflProperties = self::getReflProperties($object);
-        foreach ($data as $key => $value) {
-            $name = $this->hydrateName($key, $data);
-            if (isset($reflProperties[$name])) {
-                $reflProperties[$name]->setValue($object, $this->hydrateValue($name, $value, $data));
-            }
-        }
-        return $object;
-    }
-
-    /**
-     * Get a reflection properties from in-memory cache and lazy-load if
-     * class has not been loaded.
-     *
-     * @param  string|object $input
-     * @throws Exception\InvalidArgumentException
-     * @return \ReflectionProperty[]
-     */
-    protected static function getReflProperties($input)
-    {
-        if (is_object($input)) {
-            $input = get_class($input);
-        } elseif (!is_string($input)) {
-            throw new Exception\InvalidArgumentException('Input must be a string or an object.');
-        }
-
-        if (isset(static::$reflProperties[$input])) {
-            return static::$reflProperties[$input];
-        }
-
-        static::$reflProperties[$input] = array();
-        $reflClass                      = new ReflectionClass($input);
-        $reflProperties                 = $reflClass->getProperties();
-
-        foreach ($reflProperties as $property) {
-            $property->setAccessible(true);
-            static::$reflProperties[$input][$property->getName()] = $property;
-        }
-
-        return static::$reflProperties[$input];
-    }
-}
diff --git a/civicrm/vendor/zendframework/zend-stdlib/src/Hydrator/Strategy/BooleanStrategy.php b/civicrm/vendor/zendframework/zend-stdlib/src/Hydrator/Strategy/BooleanStrategy.php
deleted file mode 100644
index 3c29231f34c5c551ee84b61fd124bcd0ce3a19f1..0000000000000000000000000000000000000000
--- a/civicrm/vendor/zendframework/zend-stdlib/src/Hydrator/Strategy/BooleanStrategy.php
+++ /dev/null
@@ -1,106 +0,0 @@
-<?php
-/**
- * Zend Framework (http://framework.zend.com/)
- *
- * @link      http://github.com/zendframework/zf2 for the canonical source repository
- * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
- * @license   http://framework.zend.com/license/new-bsd New BSD License
- */
-
-namespace Zend\Stdlib\Hydrator\Strategy;
-
-use Zend\Stdlib\Exception\InvalidArgumentException;
-
-/**
- * This Strategy extracts and hydrates int and string values to Boolean values
- *
- * @package Zend\Stdlib\Hydrator\Strategy
- */
-final class BooleanStrategy implements StrategyInterface
-{
-    /**
-     * @var int|string
-     */
-    private $trueValue;
-
-    /**
-     * @var int|string
-     */
-    private $falseValue;
-
-    /**
-     * @param int|string $trueValue
-     * @param int|string $falseValue
-     * @throws InvalidArgumentException
-     */
-    public function __construct($trueValue, $falseValue)
-    {
-        if (!is_int($trueValue) && !is_string($trueValue)) {
-            throw new InvalidArgumentException(sprintf(
-                'Unable to instantiate BooleanStrategy. Expected int or string as $trueValue. %s was given',
-                is_object($trueValue) ? get_class($trueValue) : gettype($trueValue)
-            ));
-        }
-
-        if (!is_int($falseValue) && !is_string($falseValue)) {
-            throw new InvalidArgumentException(sprintf(
-                'Unable to instantiate BooleanStrategy. Expected int or string as $falseValue. %s was given',
-                is_object($falseValue) ? get_class($falseValue) : gettype($falseValue)
-            ));
-        }
-
-        $this->trueValue  = $trueValue;
-        $this->falseValue = $falseValue;
-    }
-
-    /**
-     * Converts the given value so that it can be extracted by the hydrator.
-     *
-     * @param  bool $value The original value.
-     * @throws InvalidArgumentException
-     * @return int|string Returns the value that should be extracted.
-     */
-    public function extract($value)
-    {
-        if (!is_bool($value)) {
-            throw new InvalidArgumentException(sprintf(
-                'Unable to extract. Expected bool. %s was given.',
-                is_object($value) ? get_class($value) : gettype($value)
-            ));
-        }
-
-        return $value === true ? $this->trueValue : $this->falseValue;
-    }
-
-    /**
-     * Converts the given value so that it can be hydrated by the hydrator.
-     *
-     * @param  int|string $value The original value.
-     * @throws InvalidArgumentException
-     * @return bool Returns the value that should be hydrated.
-     */
-    public function hydrate($value)
-    {
-        if (!is_string($value) && !is_int($value)) {
-            throw new InvalidArgumentException(sprintf(
-                'Unable to hydrate. Expected string or int. %s was given.',
-                is_object($value) ? get_class($value) : gettype($value)
-            ));
-        }
-
-        if ($value === $this->trueValue) {
-            return true;
-        }
-
-        if ($value === $this->falseValue) {
-            return false;
-        }
-
-        throw new InvalidArgumentException(sprintf(
-            'Unexpected value %s can\'t be hydrated. Expect %s or %s as Value.',
-            $value,
-            $this->trueValue,
-            $this->falseValue
-        ));
-    }
-}
diff --git a/civicrm/vendor/zendframework/zend-stdlib/src/Hydrator/Strategy/ClosureStrategy.php b/civicrm/vendor/zendframework/zend-stdlib/src/Hydrator/Strategy/ClosureStrategy.php
deleted file mode 100644
index bf456a7fc434991ba4ae49654cf05f8800de0da3..0000000000000000000000000000000000000000
--- a/civicrm/vendor/zendframework/zend-stdlib/src/Hydrator/Strategy/ClosureStrategy.php
+++ /dev/null
@@ -1,102 +0,0 @@
-<?php
-/**
- * Zend Framework (http://framework.zend.com/)
- *
- * @link      http://github.com/zendframework/zf2 for the canonical source repository
- * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
- * @license   http://framework.zend.com/license/new-bsd New BSD License
- */
-
-namespace Zend\Stdlib\Hydrator\Strategy;
-
-class ClosureStrategy implements StrategyInterface
-{
-    /**
-     * Function, used in extract method, default:
-     * function ($value) {
-     *     return $value;
-     * };
-     * @var callable
-     */
-    protected $extractFunc = null;
-
-    /**
-     * Function, used in hydrate method, default:
-     * function ($value) {
-     *     return $value;
-     * };
-     * @var callable
-     */
-    protected $hydrateFunc = null;
-
-    /**
-     * You can describe how your values will extract and hydrate, like this:
-     * $hydrator->addStrategy('category', new ClosureStrategy(
-     *     function (Category $value) {
-     *         return (int) $value->id;
-     *     },
-     *     function ($value) {
-     *         return new Category((int) $value);
-     *     }
-     * ));
-     *
-     * @param callable $extractFunc - anonymous function, that extract values
-     * from object
-     * @param callable $hydrateFunc - anonymous function, that hydrate values
-     * into object
-     */
-    public function __construct($extractFunc = null, $hydrateFunc = null)
-    {
-        if (isset($extractFunc)) {
-            if (!is_callable($extractFunc)) {
-                throw new \Exception('$extractFunc must be callable');
-            }
-
-            $this->extractFunc = $extractFunc;
-        } else {
-            $this->extractFunc = function ($value) {
-                return $value;
-            };
-        }
-
-        if (isset($hydrateFunc)) {
-            if (!is_callable($hydrateFunc)) {
-                throw new \Exception('$hydrateFunc must be callable');
-            }
-
-            $this->hydrateFunc = $hydrateFunc;
-        } else {
-            $this->hydrateFunc = function ($value) {
-                return $value;
-            };
-        }
-    }
-
-    /**
-     * Converts the given value so that it can be extracted by the hydrator.
-     *
-     * @param  mixed $value  The original value.
-     * @param  array $object The object is optionally provided as context.
-     * @return mixed Returns the value that should be extracted.
-     */
-    public function extract($value, $object = null)
-    {
-        $func = $this->extractFunc;
-
-        return $func($value, $object);
-    }
-
-    /**
-     * Converts the given value so that it can be hydrated by the hydrator.
-     *
-     * @param  mixed $value The original value.
-     * @param  array $data  The whole data is optionally provided as context.
-     * @return mixed Returns the value that should be hydrated.
-     */
-    public function hydrate($value, $data = null)
-    {
-        $func = $this->hydrateFunc;
-
-        return $func($value, $data);
-    }
-}
diff --git a/civicrm/vendor/zendframework/zend-stdlib/src/Hydrator/Strategy/DateTimeFormatterStrategy.php b/civicrm/vendor/zendframework/zend-stdlib/src/Hydrator/Strategy/DateTimeFormatterStrategy.php
deleted file mode 100644
index 62d92c588bc4d042e4e010152ef0485b53efb137..0000000000000000000000000000000000000000
--- a/civicrm/vendor/zendframework/zend-stdlib/src/Hydrator/Strategy/DateTimeFormatterStrategy.php
+++ /dev/null
@@ -1,80 +0,0 @@
-<?php
-/**
- * Zend Framework (http://framework.zend.com/)
- *
- * @link      http://github.com/zendframework/zf2 for the canonical source repository
- * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
- * @license   http://framework.zend.com/license/new-bsd New BSD License
- */
-
-namespace Zend\Stdlib\Hydrator\Strategy;
-
-use DateTime;
-use DateTimeZone;
-
-final class DateTimeFormatterStrategy implements StrategyInterface
-{
-    /**
-     * @var string
-     */
-    private $format;
-
-    /**
-     * @var DateTimeZone|null
-     */
-    private $timezone;
-
-    /**
-     * Constructor
-     *
-     * @param string            $format
-     * @param DateTimeZone|null $timezone
-     */
-    public function __construct($format = DateTime::RFC3339, DateTimeZone $timezone = null)
-    {
-        $this->format   = (string) $format;
-        $this->timezone = $timezone;
-    }
-
-    /**
-     * {@inheritDoc}
-     *
-     * Converts to date time string
-     *
-     * @param mixed|DateTime $value
-     *
-     * @return mixed|string
-     */
-    public function extract($value)
-    {
-        if ($value instanceof DateTime) {
-            return $value->format($this->format);
-        }
-
-        return $value;
-    }
-
-    /**
-     * Converts date time string to DateTime instance for injecting to object
-     *
-     * {@inheritDoc}
-     *
-     * @param mixed|string $value
-     *
-     * @return mixed|DateTime
-     */
-    public function hydrate($value)
-    {
-        if ($value === '' || $value === null) {
-            return;
-        }
-
-        if ($this->timezone) {
-            $hydrated = DateTime::createFromFormat($this->format, $value, $this->timezone);
-        } else {
-            $hydrated = DateTime::createFromFormat($this->format, $value);
-        }
-
-        return $hydrated ?: $value;
-    }
-}
diff --git a/civicrm/vendor/zendframework/zend-stdlib/src/Hydrator/Strategy/DefaultStrategy.php b/civicrm/vendor/zendframework/zend-stdlib/src/Hydrator/Strategy/DefaultStrategy.php
deleted file mode 100644
index b2c5c29b433a319a11e27f0b92f9fe0fe72a02ba..0000000000000000000000000000000000000000
--- a/civicrm/vendor/zendframework/zend-stdlib/src/Hydrator/Strategy/DefaultStrategy.php
+++ /dev/null
@@ -1,35 +0,0 @@
-<?php
-/**
- * Zend Framework (http://framework.zend.com/)
- *
- * @link      http://github.com/zendframework/zf2 for the canonical source repository
- * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
- * @license   http://framework.zend.com/license/new-bsd New BSD License
- */
-
-namespace Zend\Stdlib\Hydrator\Strategy;
-
-class DefaultStrategy implements StrategyInterface
-{
-    /**
-     * Converts the given value so that it can be extracted by the hydrator.
-     *
-     * @param mixed $value The original value.
-     * @return mixed Returns the value that should be extracted.
-     */
-    public function extract($value)
-    {
-        return $value;
-    }
-
-    /**
-     * Converts the given value so that it can be hydrated by the hydrator.
-     *
-     * @param mixed $value The original value.
-     * @return mixed Returns the value that should be hydrated.
-     */
-    public function hydrate($value)
-    {
-        return $value;
-    }
-}
diff --git a/civicrm/vendor/zendframework/zend-stdlib/src/Hydrator/Strategy/Exception/ExceptionInterface.php b/civicrm/vendor/zendframework/zend-stdlib/src/Hydrator/Strategy/Exception/ExceptionInterface.php
deleted file mode 100644
index c7b576ce3c0324a87729597ba2c3b099d548ba5c..0000000000000000000000000000000000000000
--- a/civicrm/vendor/zendframework/zend-stdlib/src/Hydrator/Strategy/Exception/ExceptionInterface.php
+++ /dev/null
@@ -1,14 +0,0 @@
-<?php
-/**
- * Zend Framework (http://framework.zend.com/)
- *
- * @link      http://github.com/zendframework/zf2 for the canonical source repository
- * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
- * @license   http://framework.zend.com/license/new-bsd New BSD License
- */
-
-namespace Zend\Stdlib\Hydrator\Strategy\Exception;
-
-interface ExceptionInterface
-{
-}
diff --git a/civicrm/vendor/zendframework/zend-stdlib/src/Hydrator/Strategy/Exception/InvalidArgumentException.php b/civicrm/vendor/zendframework/zend-stdlib/src/Hydrator/Strategy/Exception/InvalidArgumentException.php
deleted file mode 100644
index 2e6510df45e0bfe39c0c53c9a9ca863caff894f4..0000000000000000000000000000000000000000
--- a/civicrm/vendor/zendframework/zend-stdlib/src/Hydrator/Strategy/Exception/InvalidArgumentException.php
+++ /dev/null
@@ -1,14 +0,0 @@
-<?php
-/**
- * Zend Framework (http://framework.zend.com/)
- *
- * @link      http://github.com/zendframework/zf2 for the canonical source repository
- * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
- * @license   http://framework.zend.com/license/new-bsd New BSD License
- */
-
-namespace Zend\Stdlib\Hydrator\Strategy\Exception;
-
-class InvalidArgumentException extends \InvalidArgumentException implements ExceptionInterface
-{
-}
diff --git a/civicrm/vendor/zendframework/zend-stdlib/src/Hydrator/Strategy/ExplodeStrategy.php b/civicrm/vendor/zendframework/zend-stdlib/src/Hydrator/Strategy/ExplodeStrategy.php
deleted file mode 100644
index 49ec9c24b550d4ef7925abe0b18b998539bd34e1..0000000000000000000000000000000000000000
--- a/civicrm/vendor/zendframework/zend-stdlib/src/Hydrator/Strategy/ExplodeStrategy.php
+++ /dev/null
@@ -1,113 +0,0 @@
-<?php
-/**
- * Zend Framework (http://framework.zend.com/)
- *
- * @link      http://github.com/zendframework/zf2 for the canonical source repository
- * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
- * @license   http://framework.zend.com/license/new-bsd New BSD License
- */
-
-namespace Zend\Stdlib\Hydrator\Strategy;
-
-final class ExplodeStrategy implements StrategyInterface
-{
-    /**
-     * @var string
-     */
-    private $valueDelimiter;
-
-    /**
-     * @var int|null
-     */
-    private $explodeLimit;
-
-    /**
-     * Constructor
-     *
-     * @param string   $delimiter    String that the values will be split upon
-     * @param int|null $explodeLimit Explode limit
-     */
-    public function __construct($delimiter = ',', $explodeLimit = null)
-    {
-        $this->setValueDelimiter($delimiter);
-
-        $this->explodeLimit = ($explodeLimit === null) ? null : (int) $explodeLimit;
-    }
-
-    /**
-     * Sets the delimiter string that the values will be split upon
-     *
-     * @param  string $delimiter
-     * @return self
-     */
-    private function setValueDelimiter($delimiter)
-    {
-        if (!is_string($delimiter)) {
-            throw new Exception\InvalidArgumentException(sprintf(
-                '%s expects Delimiter to be string, %s provided instead',
-                __METHOD__,
-                is_object($delimiter) ? get_class($delimiter) : gettype($delimiter)
-            ));
-        }
-
-        if (empty($delimiter)) {
-            throw new Exception\InvalidArgumentException('Delimiter cannot be empty.');
-        }
-
-        $this->valueDelimiter = $delimiter;
-    }
-
-    /**
-     * {@inheritDoc}
-     *
-     * Split a string by delimiter
-     *
-     * @param string|null $value
-     *
-     * @return string[]
-     *
-     * @throws Exception\InvalidArgumentException
-     */
-    public function hydrate($value)
-    {
-        if (null === $value) {
-            return array();
-        }
-
-        if (!(is_string($value) || is_numeric($value))) {
-            throw new Exception\InvalidArgumentException(sprintf(
-                '%s expects argument 1 to be string, %s provided instead',
-                __METHOD__,
-                is_object($value) ? get_class($value) : gettype($value)
-            ));
-        }
-
-        if ($this->explodeLimit !== null) {
-            return explode($this->valueDelimiter, $value, $this->explodeLimit);
-        }
-
-        return explode($this->valueDelimiter, $value);
-    }
-
-    /**
-     * {@inheritDoc}
-     *
-     * Join array elements with delimiter
-     *
-     * @param string[] $value The original value.
-     *
-     * @return string|null
-     */
-    public function extract($value)
-    {
-        if (!is_array($value)) {
-            throw new Exception\InvalidArgumentException(sprintf(
-                '%s expects argument 1 to be array, %s provided instead',
-                __METHOD__,
-                is_object($value) ? get_class($value) : gettype($value)
-            ));
-        }
-
-        return empty($value) ? null : implode($this->valueDelimiter, $value);
-    }
-}
diff --git a/civicrm/vendor/zendframework/zend-stdlib/src/Hydrator/Strategy/SerializableStrategy.php b/civicrm/vendor/zendframework/zend-stdlib/src/Hydrator/Strategy/SerializableStrategy.php
deleted file mode 100644
index 260efa3087b8e516d16d54a7ef28d2faa99d0966..0000000000000000000000000000000000000000
--- a/civicrm/vendor/zendframework/zend-stdlib/src/Hydrator/Strategy/SerializableStrategy.php
+++ /dev/null
@@ -1,123 +0,0 @@
-<?php
-/**
- * Zend Framework (http://framework.zend.com/)
- *
- * @link      http://github.com/zendframework/zf2 for the canonical source repository
- * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
- * @license   http://framework.zend.com/license/new-bsd New BSD License
- */
-
-namespace Zend\Stdlib\Hydrator\Strategy;
-
-use Zend\Stdlib\Exception\InvalidArgumentException;
-use Zend\Serializer\Adapter\AdapterInterface as SerializerAdapter;
-use Zend\Serializer\Serializer as SerializerFactory;
-
-class SerializableStrategy implements StrategyInterface
-{
-    /**
-     * @var string|SerializerAdapter
-     */
-    protected $serializer;
-
-    /**
-     * @var array
-     */
-    protected $serializerOptions = array();
-
-    /**
-     *
-     * @param mixed $serializer string or SerializerAdapter
-     * @param mixed $serializerOptions
-     */
-    public function __construct($serializer, $serializerOptions = null)
-    {
-        $this->setSerializer($serializer);
-        if ($serializerOptions) {
-            $this->setSerializerOptions($serializerOptions);
-        }
-    }
-
-    /**
-     * Serialize the given value so that it can be extracted by the hydrator.
-     *
-     * @param mixed $value The original value.
-     * @return mixed Returns the value that should be extracted.
-     */
-    public function extract($value)
-    {
-        $serializer = $this->getSerializer();
-        return $serializer->serialize($value);
-    }
-
-    /**
-     * Unserialize the given value so that it can be hydrated by the hydrator.
-     *
-     * @param mixed $value The original value.
-     * @return mixed Returns the value that should be hydrated.
-     */
-    public function hydrate($value)
-    {
-        $serializer = $this->getSerializer();
-        return $serializer->unserialize($value);
-    }
-
-    /**
-     * Set serializer
-     *
-     * @param  string|SerializerAdapter $serializer
-     * @return SerializableStrategy
-     */
-    public function setSerializer($serializer)
-    {
-        if (!is_string($serializer) && !$serializer instanceof SerializerAdapter) {
-            throw new InvalidArgumentException(sprintf(
-                '%s expects either a string serializer name or Zend\Serializer\Adapter\AdapterInterface instance; '
-                . 'received "%s"',
-                __METHOD__,
-                (is_object($serializer) ? get_class($serializer) : gettype($serializer))
-            ));
-        }
-        $this->serializer = $serializer;
-        return $this;
-    }
-
-    /**
-     * Get serializer
-     *
-     * @return SerializerAdapter
-     */
-    public function getSerializer()
-    {
-        if (is_string($this->serializer)) {
-            $options = $this->getSerializerOptions();
-            $this->setSerializer(SerializerFactory::factory($this->serializer, $options));
-        } elseif (null === $this->serializer) {
-            $this->setSerializer(SerializerFactory::getDefaultAdapter());
-        }
-
-        return $this->serializer;
-    }
-
-    /**
-     * Set configuration options for instantiating a serializer adapter
-     *
-     * @param  mixed $serializerOptions
-     * @return SerializableStrategy
-     */
-    public function setSerializerOptions($serializerOptions)
-    {
-        $this->serializerOptions = $serializerOptions;
-        return $this;
-    }
-
-    /**
-     * Get configuration options for instantiating a serializer adapter
-     *
-     * @return mixed
-     */
-    public function getSerializerOptions()
-    {
-        return $this->serializerOptions;
-    }
-}
diff --git a/civicrm/vendor/zendframework/zend-stdlib/src/Hydrator/Strategy/StrategyChain.php b/civicrm/vendor/zendframework/zend-stdlib/src/Hydrator/Strategy/StrategyChain.php
deleted file mode 100644
index a9316bbd7c0c1581881a97f6a09b94c543de0ac9..0000000000000000000000000000000000000000
--- a/civicrm/vendor/zendframework/zend-stdlib/src/Hydrator/Strategy/StrategyChain.php
+++ /dev/null
@@ -1,73 +0,0 @@
-<?php
-/**
- * Zend Framework (http://framework.zend.com/)
- *
- * @link      http://github.com/zendframework/zf2 for the canonical source repository
- * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
- * @license   http://framework.zend.com/license/new-bsd New BSD License
- */
-
-namespace Zend\Stdlib\Hydrator\Strategy;
-
-use Traversable;
-use Zend\Stdlib\ArrayUtils;
-
-final class StrategyChain implements StrategyInterface
-{
-    /**
-     * Strategy chain for extraction
-     *
-     * @var StrategyInterface[]
-     */
-    private $extractionStrategies;
-
-    /**
-     * Strategy chain for hydration
-     *
-     * @var StrategyInterface[]
-     */
-    private $hydrationStrategies;
-
-    /**
-     * Constructor
-     *
-     * @param array|Traversable $extractionStrategies
-     */
-    public function __construct($extractionStrategies)
-    {
-        $extractionStrategies = ArrayUtils::iteratorToArray($extractionStrategies);
-        $this->extractionStrategies = array_map(
-            function (StrategyInterface $strategy) {
-                // this callback is here only to ensure type-safety
-                return $strategy;
-            },
-            $extractionStrategies
-        );
-
-        $this->hydrationStrategies = array_reverse($extractionStrategies);
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    public function extract($value)
-    {
-        foreach ($this->extractionStrategies as $strategy) {
-            $value = $strategy->extract($value);
-        }
-
-        return $value;
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    public function hydrate($value)
-    {
-        foreach ($this->hydrationStrategies as $strategy) {
-            $value = $strategy->hydrate($value);
-        }
-
-        return $value;
-    }
-}
diff --git a/civicrm/vendor/zendframework/zend-stdlib/src/Hydrator/Strategy/StrategyInterface.php b/civicrm/vendor/zendframework/zend-stdlib/src/Hydrator/Strategy/StrategyInterface.php
deleted file mode 100644
index 562ec4bd6c12ef761eb3d7e6d5088b0c177dbf0e..0000000000000000000000000000000000000000
--- a/civicrm/vendor/zendframework/zend-stdlib/src/Hydrator/Strategy/StrategyInterface.php
+++ /dev/null
@@ -1,34 +0,0 @@
-<?php
-/**
- * Zend Framework (http://framework.zend.com/)
- *
- * @link      http://github.com/zendframework/zf2 for the canonical source repository
- * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
- * @license   http://framework.zend.com/license/new-bsd New BSD License
- */
-
-namespace Zend\Stdlib\Hydrator\Strategy;
-
-/**
- * @todo v3.0, add optional object/data to extract/hydrate.
- */
-interface StrategyInterface
-{
-    /**
-     * Converts the given value so that it can be extracted by the hydrator.
-     *
-     * @param mixed   $value The original value.
-     * @param object $object (optional) The original object for context.
-     * @return mixed Returns the value that should be extracted.
-     */
-    public function extract($value);
-
-    /**
-     * Converts the given value so that it can be hydrated by the hydrator.
-     *
-     * @param mixed $value The original value.
-     * @param array  $data (optional) The original data for context.
-     * @return mixed Returns the value that should be hydrated.
-     */
-    public function hydrate($value);
-}
diff --git a/civicrm/vendor/zendframework/zend-stdlib/src/Hydrator/StrategyEnabledInterface.php b/civicrm/vendor/zendframework/zend-stdlib/src/Hydrator/StrategyEnabledInterface.php
deleted file mode 100644
index 6f29b16a6dda73f76481b4dee5b20f7f11f7cace..0000000000000000000000000000000000000000
--- a/civicrm/vendor/zendframework/zend-stdlib/src/Hydrator/StrategyEnabledInterface.php
+++ /dev/null
@@ -1,48 +0,0 @@
-<?php
-/**
- * Zend Framework (http://framework.zend.com/)
- *
- * @link      http://github.com/zendframework/zf2 for the canonical source repository
- * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
- * @license   http://framework.zend.com/license/new-bsd New BSD License
- */
-
-namespace Zend\Stdlib\Hydrator;
-
-use Zend\Stdlib\Hydrator\Strategy\StrategyInterface;
-
-interface StrategyEnabledInterface
-{
-    /**
-     * Adds the given strategy under the given name.
-     *
-     * @param string $name The name of the strategy to register.
-     * @param StrategyInterface $strategy The strategy to register.
-     * @return StrategyEnabledInterface
-     */
-    public function addStrategy($name, StrategyInterface $strategy);
-
-    /**
-     * Gets the strategy with the given name.
-     *
-     * @param string $name The name of the strategy to get.
-     * @return StrategyInterface
-     */
-    public function getStrategy($name);
-
-    /**
-     * Checks if the strategy with the given name exists.
-     *
-     * @param string $name The name of the strategy to check for.
-     * @return bool
-     */
-    public function hasStrategy($name);
-
-    /**
-     * Removes the strategy with the given name.
-     *
-     * @param string $name The name of the strategy to remove.
-     * @return StrategyEnabledInterface
-     */
-    public function removeStrategy($name);
-}
diff --git a/civicrm/vendor/zendframework/zend-stdlib/src/InitializableInterface.php b/civicrm/vendor/zendframework/zend-stdlib/src/InitializableInterface.php
deleted file mode 100644
index f78bedef30168b8cfe8c76310f2b0349d1a56314..0000000000000000000000000000000000000000
--- a/civicrm/vendor/zendframework/zend-stdlib/src/InitializableInterface.php
+++ /dev/null
@@ -1,23 +0,0 @@
-<?php
-/**
- * Zend Framework (http://framework.zend.com/)
- *
- * @link      http://github.com/zendframework/zf2 for the canonical source repository
- * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
- * @license   http://framework.zend.com/license/new-bsd New BSD License
- */
-
-namespace Zend\Stdlib;
-
-/**
- * Interface to allow objects to have initialization logic
- */
-interface InitializableInterface
-{
-    /**
-     * Init an object
-     *
-     * @return void
-     */
-    public function init();
-}
diff --git a/civicrm/vendor/zendframework/zend-stdlib/src/JsonSerializable.php b/civicrm/vendor/zendframework/zend-stdlib/src/JsonSerializable.php
deleted file mode 100644
index 6d6c2abe873a7ea45990109b6367747c0cfa1cc6..0000000000000000000000000000000000000000
--- a/civicrm/vendor/zendframework/zend-stdlib/src/JsonSerializable.php
+++ /dev/null
@@ -1,28 +0,0 @@
-<?php
-/**
- * Zend Framework (http://framework.zend.com/)
- *
- * @link      http://github.com/zendframework/zf2 for the canonical source repository
- * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
- * @license   http://framework.zend.com/license/new-bsd New BSD License
- */
-
-namespace Zend\Stdlib;
-
-if (PHP_VERSION_ID < 50400) {
-    class_alias(
-        'Zend\Stdlib\JsonSerializable\PhpLegacyCompatibility',
-        'JsonSerializable'
-    );
-}
-
-/**
- * Polyfill for JsonSerializable
- *
- * JsonSerializable was introduced in PHP 5.4.0.
- *
- * @see http://php.net/manual/class.jsonserializable.php
- */
-interface JsonSerializable extends \JsonSerializable
-{
-}
diff --git a/civicrm/vendor/zendframework/zend-stdlib/src/JsonSerializable/PhpLegacyCompatibility.php b/civicrm/vendor/zendframework/zend-stdlib/src/JsonSerializable/PhpLegacyCompatibility.php
deleted file mode 100644
index ecc7525d4cd59cf1fafe43aea5b056ef0c3bb5ce..0000000000000000000000000000000000000000
--- a/civicrm/vendor/zendframework/zend-stdlib/src/JsonSerializable/PhpLegacyCompatibility.php
+++ /dev/null
@@ -1,28 +0,0 @@
-<?php
-/**
- * Zend Framework (http://framework.zend.com/)
- *
- * @link      http://github.com/zendframework/zf2 for the canonical source repository
- * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
- * @license   http://framework.zend.com/license/new-bsd New BSD License
- */
-
-namespace Zend\Stdlib\JsonSerializable;
-
-/**
- * Interface compatible with the built-in JsonSerializable interface
- *
- * JsonSerializable was introduced in PHP 5.4.0.
- *
- * @see http://php.net/manual/class.jsonserializable.php
- */
-interface PhpLegacyCompatibility
-{
-    /**
-     * Returns data which can be serialized by json_encode().
-     *
-     * @return mixed
-     * @see    http://php.net/manual/jsonserializable.jsonserialize.php
-     */
-    public function jsonSerialize();
-}
diff --git a/civicrm/vendor/zendframework/zend-stdlib/src/Message.php b/civicrm/vendor/zendframework/zend-stdlib/src/Message.php
deleted file mode 100644
index 63ba7c7303c71bf660d6a64899bf2bf9813b2213..0000000000000000000000000000000000000000
--- a/civicrm/vendor/zendframework/zend-stdlib/src/Message.php
+++ /dev/null
@@ -1,118 +0,0 @@
-<?php
-/**
- * Zend Framework (http://framework.zend.com/)
- *
- * @link      http://github.com/zendframework/zf2 for the canonical source repository
- * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
- * @license   http://framework.zend.com/license/new-bsd New BSD License
- */
-
-namespace Zend\Stdlib;
-
-use Traversable;
-
-class Message implements MessageInterface
-{
-    /**
-     * @var array
-     */
-    protected $metadata = array();
-
-    /**
-     * @var string
-     */
-    protected $content = '';
-
-    /**
-     * Set message metadata
-     *
-     * Non-destructive setting of message metadata; always adds to the metadata, never overwrites
-     * the entire metadata container.
-     *
-     * @param  string|int|array|Traversable $spec
-     * @param  mixed $value
-     * @throws Exception\InvalidArgumentException
-     * @return Message
-     */
-    public function setMetadata($spec, $value = null)
-    {
-        if (is_scalar($spec)) {
-            $this->metadata[$spec] = $value;
-            return $this;
-        }
-        if (!is_array($spec) && !$spec instanceof Traversable) {
-            throw new Exception\InvalidArgumentException(sprintf(
-                'Expected a string, array, or Traversable argument in first position; received "%s"',
-                (is_object($spec) ? get_class($spec) : gettype($spec))
-            ));
-        }
-        foreach ($spec as $key => $value) {
-            $this->metadata[$key] = $value;
-        }
-        return $this;
-    }
-
-    /**
-     * Retrieve all metadata or a single metadatum as specified by key
-     *
-     * @param  null|string|int $key
-     * @param  null|mixed $default
-     * @throws Exception\InvalidArgumentException
-     * @return mixed
-     */
-    public function getMetadata($key = null, $default = null)
-    {
-        if (null === $key) {
-            return $this->metadata;
-        }
-
-        if (!is_scalar($key)) {
-            throw new Exception\InvalidArgumentException('Non-scalar argument provided for key');
-        }
-
-        if (array_key_exists($key, $this->metadata)) {
-            return $this->metadata[$key];
-        }
-
-        return $default;
-    }
-
-    /**
-     * Set message content
-     *
-     * @param  mixed $value
-     * @return Message
-     */
-    public function setContent($value)
-    {
-        $this->content = $value;
-        return $this;
-    }
-
-    /**
-     * Get message content
-     *
-     * @return mixed
-     */
-    public function getContent()
-    {
-        return $this->content;
-    }
-
-    /**
-     * @return string
-     */
-    public function toString()
-    {
-        $request = '';
-        foreach ($this->getMetadata() as $key => $value) {
-            $request .= sprintf(
-                "%s: %s\r\n",
-                (string) $key,
-                (string) $value
-            );
-        }
-        $request .= "\r\n" . $this->getContent();
-        return $request;
-    }
-}
diff --git a/civicrm/vendor/zendframework/zend-stdlib/src/MessageInterface.php b/civicrm/vendor/zendframework/zend-stdlib/src/MessageInterface.php
deleted file mode 100644
index 28d8857fcddd31b4d1d14c489ed75c79e13c2e1a..0000000000000000000000000000000000000000
--- a/civicrm/vendor/zendframework/zend-stdlib/src/MessageInterface.php
+++ /dev/null
@@ -1,44 +0,0 @@
-<?php
-/**
- * Zend Framework (http://framework.zend.com/)
- *
- * @link      http://github.com/zendframework/zf2 for the canonical source repository
- * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
- * @license   http://framework.zend.com/license/new-bsd New BSD License
- */
-
-namespace Zend\Stdlib;
-
-interface MessageInterface
-{
-    /**
-     * Set metadata
-     *
-     * @param  string|int|array|\Traversable $spec
-     * @param  mixed $value
-     */
-    public function setMetadata($spec, $value = null);
-
-    /**
-     * Get metadata
-     *
-     * @param  null|string|int $key
-     * @return mixed
-     */
-    public function getMetadata($key = null);
-
-    /**
-     * Set content
-     *
-     * @param  mixed $content
-     * @return mixed
-     */
-    public function setContent($content);
-
-    /**
-     * Get content
-     *
-     * @return mixed
-     */
-    public function getContent();
-}
diff --git a/civicrm/vendor/zendframework/zend-stdlib/src/ParameterObjectInterface.php b/civicrm/vendor/zendframework/zend-stdlib/src/ParameterObjectInterface.php
deleted file mode 100644
index 676a6e2b99169f3354535abeb6d24fe96aea2da2..0000000000000000000000000000000000000000
--- a/civicrm/vendor/zendframework/zend-stdlib/src/ParameterObjectInterface.php
+++ /dev/null
@@ -1,38 +0,0 @@
-<?php
-/**
- * Zend Framework (http://framework.zend.com/)
- *
- * @link      http://github.com/zendframework/zf2 for the canonical source repository
- * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
- * @license   http://framework.zend.com/license/new-bsd New BSD License
- */
-
-namespace Zend\Stdlib;
-
-interface ParameterObjectInterface
-{
-    /**
-     * @param string $key
-     * @param mixed $value
-     * @return void
-     */
-    public function __set($key, $value);
-
-    /**
-     * @param string $key
-     * @return mixed
-     */
-    public function __get($key);
-
-    /**
-     * @param string $key
-     * @return bool
-     */
-    public function __isset($key);
-
-    /**
-     * @param string $key
-     * @return void
-     */
-    public function __unset($key);
-}
diff --git a/civicrm/vendor/zendframework/zend-stdlib/src/Parameters.php b/civicrm/vendor/zendframework/zend-stdlib/src/Parameters.php
deleted file mode 100644
index bef834a8a03ade6a62e21b78d9efeb1be79e35e4..0000000000000000000000000000000000000000
--- a/civicrm/vendor/zendframework/zend-stdlib/src/Parameters.php
+++ /dev/null
@@ -1,115 +0,0 @@
-<?php
-/**
- * Zend Framework (http://framework.zend.com/)
- *
- * @link      http://github.com/zendframework/zf2 for the canonical source repository
- * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
- * @license   http://framework.zend.com/license/new-bsd New BSD License
- */
-
-namespace Zend\Stdlib;
-
-use ArrayObject as PhpArrayObject;
-
-class Parameters extends PhpArrayObject implements ParametersInterface
-{
-    /**
-     * Constructor
-     *
-     * Enforces that we have an array, and enforces parameter access to array
-     * elements.
-     *
-     * @param  array $values
-     */
-    public function __construct(array $values = null)
-    {
-        if (null === $values) {
-            $values = array();
-        }
-        parent::__construct($values, ArrayObject::ARRAY_AS_PROPS);
-    }
-
-    /**
-     * Populate from native PHP array
-     *
-     * @param  array $values
-     * @return void
-     */
-    public function fromArray(array $values)
-    {
-        $this->exchangeArray($values);
-    }
-
-    /**
-     * Populate from query string
-     *
-     * @param  string $string
-     * @return void
-     */
-    public function fromString($string)
-    {
-        $array = array();
-        parse_str($string, $array);
-        $this->fromArray($array);
-    }
-
-    /**
-     * Serialize to native PHP array
-     *
-     * @return array
-     */
-    public function toArray()
-    {
-        return $this->getArrayCopy();
-    }
-
-    /**
-     * Serialize to query string
-     *
-     * @return string
-     */
-    public function toString()
-    {
-        return http_build_query($this);
-    }
-
-    /**
-     * Retrieve by key
-     *
-     * Returns null if the key does not exist.
-     *
-     * @param  string $name
-     * @return mixed
-     */
-    public function offsetGet($name)
-    {
-        if ($this->offsetExists($name)) {
-            return parent::offsetGet($name);
-        }
-        return;
-    }
-
-    /**
-     * @param string $name
-     * @param mixed $default optional default value
-     * @return mixed
-     */
-    public function get($name, $default = null)
-    {
-        if ($this->offsetExists($name)) {
-            return parent::offsetGet($name);
-        }
-        return $default;
-    }
-
-    /**
-     * @param string $name
-     * @param mixed $value
-     * @return Parameters
-     */
-    public function set($name, $value)
-    {
-        $this[$name] = $value;
-        return $this;
-    }
-}
diff --git a/civicrm/vendor/zendframework/zend-stdlib/src/ParametersInterface.php b/civicrm/vendor/zendframework/zend-stdlib/src/ParametersInterface.php
deleted file mode 100644
index feeda580735f9607bec0fcc2ada8b47b7eb3a93a..0000000000000000000000000000000000000000
--- a/civicrm/vendor/zendframework/zend-stdlib/src/ParametersInterface.php
+++ /dev/null
@@ -1,86 +0,0 @@
-<?php
-/**
- * Zend Framework (http://framework.zend.com/)
- *
- * @link      http://github.com/zendframework/zf2 for the canonical source repository
- * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
- * @license   http://framework.zend.com/license/new-bsd New BSD License
- */
-
-namespace Zend\Stdlib;
-
-use ArrayAccess;
-use Countable;
-use Serializable;
-use Traversable;
-
-/*
- * Basically, an ArrayObject. You could simply define something like:
- *     class QueryParams extends ArrayObject implements Parameters {}
- * and have 90% of the functionality
- */
-interface ParametersInterface extends ArrayAccess, Countable, Serializable, Traversable
-{
-    /**
-     * Constructor
-     *
-     * @param array $values
-     */
-    public function __construct(array $values = null);
-
-    /**
-     * From array
-     *
-     * Allow deserialization from standard array
-     *
-     * @param array $values
-     * @return mixed
-     */
-    public function fromArray(array $values);
-
-    /**
-     * From string
-     *
-     * Allow deserialization from raw body; e.g., for PUT requests
-     *
-     * @param $string
-     * @return mixed
-     */
-    public function fromString($string);
-
-    /**
-     * To array
-     *
-     * Allow serialization back to standard array
-     *
-     * @return mixed
-     */
-    public function toArray();
-
-    /**
-     * To string
-     *
-     * Allow serialization to query format; e.g., for PUT or POST requests
-     *
-     * @return mixed
-     */
-    public function toString();
-
-    /**
-     * Get
-     *
-     * @param string $name
-     * @param mixed|null $default
-     * @return mixed
-     */
-    public function get($name, $default = null);
-
-    /**
-     * Set
-     *
-     * @param string $name
-     * @param mixed $value
-     * @return ParametersInterface
-     */
-    public function set($name, $value);
-}
diff --git a/civicrm/vendor/zendframework/zend-stdlib/src/PriorityList.php b/civicrm/vendor/zendframework/zend-stdlib/src/PriorityList.php
deleted file mode 100644
index 45aa2d8f6a99c73fd27f87673ecbe0436af8f109..0000000000000000000000000000000000000000
--- a/civicrm/vendor/zendframework/zend-stdlib/src/PriorityList.php
+++ /dev/null
@@ -1,274 +0,0 @@
-<?php
-/**
- * Zend Framework (http://framework.zend.com/)
- *
- * @link      http://github.com/zendframework/zf2 for the canonical source repository
- * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
- * @license   http://framework.zend.com/license/new-bsd New BSD License
- */
-
-namespace Zend\Stdlib;
-
-use Countable;
-use Iterator;
-
-class PriorityList implements Iterator, Countable
-{
-    const EXTR_DATA     = 0x00000001;
-    const EXTR_PRIORITY = 0x00000002;
-    const EXTR_BOTH     = 0x00000003;
-    /**
-     * Internal list of all items.
-     *
-     * @var array[]
-     */
-    protected $items = array();
-
-    /**
-     * Serial assigned to items to preserve LIFO.
-     *
-     * @var int
-     */
-    protected $serial = 0;
-
-    /**
-     * Serial order mode
-     * @var integer
-     */
-    protected $isLIFO = 1;
-
-    /**
-     * Internal counter to avoid usage of count().
-     *
-     * @var int
-     */
-    protected $count = 0;
-
-    /**
-     * Whether the list was already sorted.
-     *
-     * @var bool
-     */
-    protected $sorted = false;
-
-    /**
-     * Insert a new item.
-     *
-     * @param  string  $name
-     * @param  mixed   $value
-     * @param  int     $priority
-     *
-     * @return void
-     */
-    public function insert($name, $value, $priority = 0)
-    {
-        if (!isset($this->items[$name])) {
-            $this->count++;
-        }
-
-        $this->sorted = false;
-
-        $this->items[$name] = array(
-            'data'     => $value,
-            'priority' => (int) $priority,
-            'serial'   => $this->serial++,
-        );
-    }
-
-    /**
-     * @param string $name
-     * @param int    $priority
-     *
-     * @return $this
-     *
-     * @throws \Exception
-     */
-    public function setPriority($name, $priority)
-    {
-        if (!isset($this->items[$name])) {
-            throw new \Exception("item $name not found");
-        }
-
-        $this->items[$name]['priority'] = (int) $priority;
-        $this->sorted                   = false;
-
-        return $this;
-    }
-
-    /**
-     * Remove a item.
-     *
-     * @param  string $name
-     * @return void
-     */
-    public function remove($name)
-    {
-        if (isset($this->items[$name])) {
-            $this->count--;
-        }
-
-        unset($this->items[$name]);
-    }
-
-    /**
-     * Remove all items.
-     *
-     * @return void
-     */
-    public function clear()
-    {
-        $this->items  = array();
-        $this->serial = 0;
-        $this->count  = 0;
-        $this->sorted = false;
-    }
-
-    /**
-     * Get a item.
-     *
-     * @param  string $name
-     * @return mixed
-     */
-    public function get($name)
-    {
-        if (!isset($this->items[$name])) {
-            return;
-        }
-
-        return $this->items[$name]['data'];
-    }
-
-    /**
-     * Sort all items.
-     *
-     * @return void
-     */
-    protected function sort()
-    {
-        if (!$this->sorted) {
-            uasort($this->items, array($this, 'compare'));
-            $this->sorted = true;
-        }
-    }
-
-    /**
-     * Compare the priority of two items.
-     *
-     * @param  array $item1,
-     * @param  array $item2
-     * @return int
-     */
-    protected function compare(array $item1, array $item2)
-    {
-        return ($item1['priority'] === $item2['priority'])
-            ? ($item1['serial']   > $item2['serial']   ? -1 : 1) * $this->isLIFO
-            : ($item1['priority'] > $item2['priority'] ? -1 : 1);
-    }
-
-    /**
-     * Get/Set serial order mode
-     *
-     * @param bool|null $flag
-     *
-     * @return bool
-     */
-    public function isLIFO($flag = null)
-    {
-        if ($flag !== null) {
-            $isLifo = $flag === true ? 1 : -1;
-
-            if ($isLifo !== $this->isLIFO) {
-                $this->isLIFO = $isLifo;
-                $this->sorted = false;
-            }
-        }
-
-        return 1 === $this->isLIFO;
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    public function rewind()
-    {
-        $this->sort();
-        reset($this->items);
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    public function current()
-    {
-        $this->sorted || $this->sort();
-        $node = current($this->items);
-
-        return $node ? $node['data'] : false;
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    public function key()
-    {
-        $this->sorted || $this->sort();
-        return key($this->items);
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    public function next()
-    {
-        $node = next($this->items);
-
-        return $node ? $node['data'] : false;
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    public function valid()
-    {
-        return current($this->items) !== false;
-    }
-
-    /**
-     * @return self
-     */
-    public function getIterator()
-    {
-        return clone $this;
-    }
-
-    /**
-     * {@inheritDoc}
-     */
-    public function count()
-    {
-        return $this->count;
-    }
-
-    /**
-     * Return list as array
-     *
-     * @param int $flag
-     *
-     * @return array
-     */
-    public function toArray($flag = self::EXTR_DATA)
-    {
-        $this->sort();
-
-        if ($flag == self::EXTR_BOTH) {
-            return $this->items;
-        }
-
-        return array_map(
-            function ($item) use ($flag) {
-                return ($flag == PriorityList::EXTR_PRIORITY) ? $item['priority'] : $item['data'];
-            },
-            $this->items
-        );
-    }
-}
diff --git a/civicrm/vendor/zendframework/zend-stdlib/src/PriorityQueue.php b/civicrm/vendor/zendframework/zend-stdlib/src/PriorityQueue.php
deleted file mode 100644
index 1baf44e895b6278a6b50684e4743fce8ab340dd9..0000000000000000000000000000000000000000
--- a/civicrm/vendor/zendframework/zend-stdlib/src/PriorityQueue.php
+++ /dev/null
@@ -1,301 +0,0 @@
-<?php
-/**
- * Zend Framework (http://framework.zend.com/)
- *
- * @link      http://github.com/zendframework/zf2 for the canonical source repository
- * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
- * @license   http://framework.zend.com/license/new-bsd New BSD License
- */
-
-namespace Zend\Stdlib;
-
-use Countable;
-use IteratorAggregate;
-use Serializable;
-
-/**
- * Re-usable, serializable priority queue implementation
- *
- * SplPriorityQueue acts as a heap; on iteration, each item is removed from the
- * queue. If you wish to re-use such a queue, you need to clone it first. This
- * makes for some interesting issues if you wish to delete items from the queue,
- * or, as already stated, iterate over it multiple times.
- *
- * This class aggregates items for the queue itself, but also composes an
- * "inner" iterator in the form of an SplPriorityQueue object for performing
- * the actual iteration.
- */
-class PriorityQueue implements Countable, IteratorAggregate, Serializable
-{
-    const EXTR_DATA     = 0x00000001;
-    const EXTR_PRIORITY = 0x00000002;
-    const EXTR_BOTH     = 0x00000003;
-
-    /**
-     * Inner queue class to use for iteration
-     * @var string
-     */
-    protected $queueClass = 'Zend\Stdlib\SplPriorityQueue';
-
-    /**
-     * Actual items aggregated in the priority queue. Each item is an array
-     * with keys "data" and "priority".
-     * @var array
-     */
-    protected $items      = array();
-
-    /**
-     * Inner queue object
-     * @var SplPriorityQueue
-     */
-    protected $queue;
-
-    /**
-     * Insert an item into the queue
-     *
-     * Priority defaults to 1 (low priority) if none provided.
-     *
-     * @param  mixed $data
-     * @param  int $priority
-     * @return PriorityQueue
-     */
-    public function insert($data, $priority = 1)
-    {
-        $priority = (int) $priority;
-        $this->items[] = array(
-            'data'     => $data,
-            'priority' => $priority,
-        );
-        $this->getQueue()->insert($data, $priority);
-        return $this;
-    }
-
-    /**
-     * Remove an item from the queue
-     *
-     * This is different than {@link extract()}; its purpose is to dequeue an
-     * item.
-     *
-     * This operation is potentially expensive, as it requires
-     * re-initialization and re-population of the inner queue.
-     *
-     * Note: this removes the first item matching the provided item found. If
-     * the same item has been added multiple times, it will not remove other
-     * instances.
-     *
-     * @param  mixed $datum
-     * @return bool False if the item was not found, true otherwise.
-     */
-    public function remove($datum)
-    {
-        $found = false;
-        foreach ($this->items as $key => $item) {
-            if ($item['data'] === $datum) {
-                $found = true;
-                break;
-            }
-        }
-        if ($found) {
-            unset($this->items[$key]);
-            $this->queue = null;
-
-            if (!$this->isEmpty()) {
-                $queue = $this->getQueue();
-                foreach ($this->items as $item) {
-                    $queue->insert($item['data'], $item['priority']);
-                }
-            }
-            return true;
-        }
-        return false;
-    }
-
-    /**
-     * Is the queue empty?
-     *
-     * @return bool
-     */
-    public function isEmpty()
-    {
-        return (0 === $this->count());
-    }
-
-    /**
-     * How many items are in the queue?
-     *
-     * @return int
-     */
-    public function count()
-    {
-        return count($this->items);
-    }
-
-    /**
-     * Peek at the top node in the queue, based on priority.
-     *
-     * @return mixed
-     */
-    public function top()
-    {
-        return $this->getIterator()->top();
-    }
-
-    /**
-     * Extract a node from the inner queue and sift up
-     *
-     * @return mixed
-     */
-    public function extract()
-    {
-        return $this->getQueue()->extract();
-    }
-
-    /**
-     * Retrieve the inner iterator
-     *
-     * SplPriorityQueue acts as a heap, which typically implies that as items
-     * are iterated, they are also removed. This does not work for situations
-     * where the queue may be iterated multiple times. As such, this class
-     * aggregates the values, and also injects an SplPriorityQueue. This method
-     * retrieves the inner queue object, and clones it for purposes of
-     * iteration.
-     *
-     * @return SplPriorityQueue
-     */
-    public function getIterator()
-    {
-        $queue = $this->getQueue();
-        return clone $queue;
-    }
-
-    /**
-     * Serialize the data structure
-     *
-     * @return string
-     */
-    public function serialize()
-    {
-        return serialize($this->items);
-    }
-
-    /**
-     * Unserialize a string into a PriorityQueue object
-     *
-     * Serialization format is compatible with {@link Zend\Stdlib\SplPriorityQueue}
-     *
-     * @param  string $data
-     * @return void
-     */
-    public function unserialize($data)
-    {
-        foreach (unserialize($data) as $item) {
-            $this->insert($item['data'], $item['priority']);
-        }
-    }
-
-    /**
-     * Serialize to an array
-     *
-     * By default, returns only the item data, and in the order registered (not
-     * sorted). You may provide one of the EXTR_* flags as an argument, allowing
-     * the ability to return priorities or both data and priority.
-     *
-     * @param  int $flag
-     * @return array
-     */
-    public function toArray($flag = self::EXTR_DATA)
-    {
-        switch ($flag) {
-            case self::EXTR_BOTH:
-                return $this->items;
-            case self::EXTR_PRIORITY:
-                return array_map(function ($item) {
-                    return $item['priority'];
-                }, $this->items);
-            case self::EXTR_DATA:
-            default:
-                return array_map(function ($item) {
-                    return $item['data'];
-                }, $this->items);
-        }
-    }
-
-    /**
-     * Specify the internal queue class
-     *
-     * Please see {@link getIterator()} for details on the necessity of an
-     * internal queue class. The class provided should extend SplPriorityQueue.
-     *
-     * @param  string $class
-     * @return PriorityQueue
-     */
-    public function setInternalQueueClass($class)
-    {
-        $this->queueClass = (string) $class;
-        return $this;
-    }
-
-    /**
-     * Does the queue contain the given datum?
-     *
-     * @param  mixed $datum
-     * @return bool
-     */
-    public function contains($datum)
-    {
-        foreach ($this->items as $item) {
-            if ($item['data'] === $datum) {
-                return true;
-            }
-        }
-        return false;
-    }
-
-    /**
-     * Does the queue have an item with the given priority?
-     *
-     * @param  int $priority
-     * @return bool
-     */
-    public function hasPriority($priority)
-    {
-        foreach ($this->items as $item) {
-            if ($item['priority'] === $priority) {
-                return true;
-            }
-        }
-        return false;
-    }
-
-    /**
-     * Get the inner priority queue instance
-     *
-     * @throws Exception\DomainException
-     * @return SplPriorityQueue
-     */
-    protected function getQueue()
-    {
-        if (null === $this->queue) {
-            $this->queue = new $this->queueClass();
-            if (!$this->queue instanceof \SplPriorityQueue) {
-                throw new Exception\DomainException(sprintf(
-                    'PriorityQueue expects an internal queue of type SplPriorityQueue; received "%s"',
-                    get_class($this->queue)
-                ));
-            }
-        }
-        return $this->queue;
-    }
-
-    /**
-     * Add support for deep cloning
-     *
-     * @return void
-     */
-    public function __clone()
-    {
-        if (null !== $this->queue) {
-            $this->queue = clone $this->queue;
-        }
-    }
-}
diff --git a/civicrm/vendor/zendframework/zend-stdlib/src/Request.php b/civicrm/vendor/zendframework/zend-stdlib/src/Request.php
deleted file mode 100644
index 7c0840395e31505772bee163189c1689af895aa9..0000000000000000000000000000000000000000
--- a/civicrm/vendor/zendframework/zend-stdlib/src/Request.php
+++ /dev/null
@@ -1,15 +0,0 @@
-<?php
-/**
- * Zend Framework (http://framework.zend.com/)
- *
- * @link      http://github.com/zendframework/zf2 for the canonical source repository
- * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
- * @license   http://framework.zend.com/license/new-bsd New BSD License
- */
-
-namespace Zend\Stdlib;
-
-class Request extends Message implements RequestInterface
-{
-    // generic request implementation
-}
diff --git a/civicrm/vendor/zendframework/zend-stdlib/src/RequestInterface.php b/civicrm/vendor/zendframework/zend-stdlib/src/RequestInterface.php
deleted file mode 100644
index c2bac316d4ce4cae2f05280b278d4b6457904d0a..0000000000000000000000000000000000000000
--- a/civicrm/vendor/zendframework/zend-stdlib/src/RequestInterface.php
+++ /dev/null
@@ -1,14 +0,0 @@
-<?php
-/**
- * Zend Framework (http://framework.zend.com/)
- *
- * @link      http://github.com/zendframework/zf2 for the canonical source repository
- * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
- * @license   http://framework.zend.com/license/new-bsd New BSD License
- */
-
-namespace Zend\Stdlib;
-
-interface RequestInterface extends MessageInterface
-{
-}
diff --git a/civicrm/vendor/zendframework/zend-stdlib/src/Response.php b/civicrm/vendor/zendframework/zend-stdlib/src/Response.php
deleted file mode 100644
index f3074bad5e9f3263610441a9761f1deae6061f4a..0000000000000000000000000000000000000000
--- a/civicrm/vendor/zendframework/zend-stdlib/src/Response.php
+++ /dev/null
@@ -1,15 +0,0 @@
-<?php
-/**
- * Zend Framework (http://framework.zend.com/)
- *
- * @link      http://github.com/zendframework/zf2 for the canonical source repository
- * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
- * @license   http://framework.zend.com/license/new-bsd New BSD License
- */
-
-namespace Zend\Stdlib;
-
-class Response extends Message implements ResponseInterface
-{
-    // generic response implementation
-}
diff --git a/civicrm/vendor/zendframework/zend-stdlib/src/ResponseInterface.php b/civicrm/vendor/zendframework/zend-stdlib/src/ResponseInterface.php
deleted file mode 100644
index fe94d3043a2874239cd36cf376fc9ca92e2b7b06..0000000000000000000000000000000000000000
--- a/civicrm/vendor/zendframework/zend-stdlib/src/ResponseInterface.php
+++ /dev/null
@@ -1,14 +0,0 @@
-<?php
-/**
- * Zend Framework (http://framework.zend.com/)
- *
- * @link      http://github.com/zendframework/zf2 for the canonical source repository
- * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
- * @license   http://framework.zend.com/license/new-bsd New BSD License
- */
-
-namespace Zend\Stdlib;
-
-interface ResponseInterface extends MessageInterface
-{
-}
diff --git a/civicrm/vendor/zendframework/zend-stdlib/src/SplPriorityQueue.php b/civicrm/vendor/zendframework/zend-stdlib/src/SplPriorityQueue.php
deleted file mode 100644
index 029d8e9f059a3ab049f67dbc5f534bac718bed97..0000000000000000000000000000000000000000
--- a/civicrm/vendor/zendframework/zend-stdlib/src/SplPriorityQueue.php
+++ /dev/null
@@ -1,91 +0,0 @@
-<?php
-/**
- * Zend Framework (http://framework.zend.com/)
- *
- * @link      http://github.com/zendframework/zf2 for the canonical source repository
- * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
- * @license   http://framework.zend.com/license/new-bsd New BSD License
- */
-
-namespace Zend\Stdlib;
-
-use Serializable;
-
-/**
- * Serializable version of SplPriorityQueue
- *
- * Also, provides predictable heap order for datums added with the same priority
- * (i.e., they will be emitted in the same order they are enqueued).
- */
-class SplPriorityQueue extends \SplPriorityQueue implements Serializable
-{
-    /**
-     * @var int Seed used to ensure queue order for items of the same priority
-     */
-    protected $serial = PHP_INT_MAX;
-
-    /**
-     * Insert a value with a given priority
-     *
-     * Utilizes {@var $serial} to ensure that values of equal priority are
-     * emitted in the same order in which they are inserted.
-     *
-     * @param  mixed $datum
-     * @param  mixed $priority
-     * @return void
-     */
-    public function insert($datum, $priority)
-    {
-        if (!is_array($priority)) {
-            $priority = array($priority, $this->serial--);
-        }
-        parent::insert($datum, $priority);
-    }
-
-    /**
-     * Serialize to an array
-     *
-     * Array will be priority => data pairs
-     *
-     * @return array
-     */
-    public function toArray()
-    {
-        $array = array();
-        foreach (clone $this as $item) {
-            $array[] = $item;
-        }
-        return $array;
-    }
-
-    /**
-     * Serialize
-     *
-     * @return string
-     */
-    public function serialize()
-    {
-        $clone = clone $this;
-        $clone->setExtractFlags(self::EXTR_BOTH);
-
-        $data = array();
-        foreach ($clone as $item) {
-            $data[] = $item;
-        }
-
-        return serialize($data);
-    }
-
-    /**
-     * Deserialize
-     *
-     * @param  string $data
-     * @return void
-     */
-    public function unserialize($data)
-    {
-        foreach (unserialize($data) as $item) {
-            $this->insert($item['data'], $item['priority']);
-        }
-    }
-}
diff --git a/civicrm/vendor/zendframework/zend-stdlib/src/SplQueue.php b/civicrm/vendor/zendframework/zend-stdlib/src/SplQueue.php
deleted file mode 100644
index 029bc9f127310037589f03297a80ea15815f2bd3..0000000000000000000000000000000000000000
--- a/civicrm/vendor/zendframework/zend-stdlib/src/SplQueue.php
+++ /dev/null
@@ -1,55 +0,0 @@
-<?php
-/**
- * Zend Framework (http://framework.zend.com/)
- *
- * @link      http://github.com/zendframework/zf2 for the canonical source repository
- * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
- * @license   http://framework.zend.com/license/new-bsd New BSD License
- */
-
-namespace Zend\Stdlib;
-
-use Serializable;
-
-/**
- * Serializable version of SplQueue
- */
-class SplQueue extends \SplQueue implements Serializable
-{
-    /**
-     * Return an array representing the queue
-     *
-     * @return array
-     */
-    public function toArray()
-    {
-        $array = array();
-        foreach ($this as $item) {
-            $array[] = $item;
-        }
-        return $array;
-    }
-
-    /**
-     * Serialize
-     *
-     * @return string
-     */
-    public function serialize()
-    {
-        return serialize($this->toArray());
-    }
-
-    /**
-     * Unserialize
-     *
-     * @param  string $data
-     * @return void
-     */
-    public function unserialize($data)
-    {
-        foreach (unserialize($data) as $item) {
-            $this->push($item);
-        }
-    }
-}
diff --git a/civicrm/vendor/zendframework/zend-stdlib/src/SplStack.php b/civicrm/vendor/zendframework/zend-stdlib/src/SplStack.php
deleted file mode 100644
index fac77a5d0475c38c0325121a7879b4fd954fc9f4..0000000000000000000000000000000000000000
--- a/civicrm/vendor/zendframework/zend-stdlib/src/SplStack.php
+++ /dev/null
@@ -1,55 +0,0 @@
-<?php
-/**
- * Zend Framework (http://framework.zend.com/)
- *
- * @link      http://github.com/zendframework/zf2 for the canonical source repository
- * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
- * @license   http://framework.zend.com/license/new-bsd New BSD License
- */
-
-namespace Zend\Stdlib;
-
-use Serializable;
-
-/**
- * Serializable version of SplStack
- */
-class SplStack extends \SplStack implements Serializable
-{
-    /**
-     * Serialize to an array representing the stack
-     *
-     * @return array
-     */
-    public function toArray()
-    {
-        $array = array();
-        foreach ($this as $item) {
-            $array[] = $item;
-        }
-        return $array;
-    }
-
-    /**
-     * Serialize
-     *
-     * @return string
-     */
-    public function serialize()
-    {
-        return serialize($this->toArray());
-    }
-
-    /**
-     * Unserialize
-     *
-     * @param  string $data
-     * @return void
-     */
-    public function unserialize($data)
-    {
-        foreach (unserialize($data) as $item) {
-            $this->unshift($item);
-        }
-    }
-}
diff --git a/civicrm/vendor/zendframework/zend-stdlib/src/StringUtils.php b/civicrm/vendor/zendframework/zend-stdlib/src/StringUtils.php
deleted file mode 100644
index 9bbb4a46e31fd20fe9f6968a5b076850a37f4e08..0000000000000000000000000000000000000000
--- a/civicrm/vendor/zendframework/zend-stdlib/src/StringUtils.php
+++ /dev/null
@@ -1,187 +0,0 @@
-<?php
-/**
- * Zend Framework (http://framework.zend.com/)
- *
- * @link      http://github.com/zendframework/zf2 for the canonical source repository
- * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
- * @license   http://framework.zend.com/license/new-bsd New BSD License
- */
-
-namespace Zend\Stdlib;
-
-use Zend\Stdlib\StringWrapper\StringWrapperInterface;
-
-/**
- * Utility class for handling strings of different character encodings
- * using available PHP extensions.
- *
- * Declared abstract, as we have no need for instantiation.
- */
-abstract class StringUtils
-{
-    /**
-     * Ordered list of registered string wrapper instances
-     *
-     * @var StringWrapperInterface[]
-     */
-    protected static $wrapperRegistry = null;
-
-    /**
-     * A list of known single-byte character encodings (upper-case)
-     *
-     * @var string[]
-     */
-    protected static $singleByteEncodings = array(
-        'ASCII', '7BIT', '8BIT',
-        'ISO-8859-1', 'ISO-8859-2', 'ISO-8859-3', 'ISO-8859-4', 'ISO-8859-5',
-        'ISO-8859-6', 'ISO-8859-7', 'ISO-8859-8', 'ISO-8859-9', 'ISO-8859-10',
-        'ISO-8859-11', 'ISO-8859-13', 'ISO-8859-14', 'ISO-8859-15', 'ISO-8859-16',
-        'CP-1251', 'CP-1252',
-        // TODO
-    );
-
-    /**
-     * Is PCRE compiled with Unicode support?
-     *
-     * @var bool
-     **/
-    protected static $hasPcreUnicodeSupport = null;
-
-    /**
-     * Get registered wrapper classes
-     *
-     * @return string[]
-     */
-    public static function getRegisteredWrappers()
-    {
-        if (static::$wrapperRegistry === null) {
-            static::$wrapperRegistry = array();
-
-            if (extension_loaded('intl')) {
-                static::$wrapperRegistry[] = 'Zend\Stdlib\StringWrapper\Intl';
-            }
-
-            if (extension_loaded('mbstring')) {
-                static::$wrapperRegistry[] = 'Zend\Stdlib\StringWrapper\MbString';
-            }
-
-            if (extension_loaded('iconv')) {
-                static::$wrapperRegistry[] = 'Zend\Stdlib\StringWrapper\Iconv';
-            }
-
-            static::$wrapperRegistry[] = 'Zend\Stdlib\StringWrapper\Native';
-        }
-
-        return static::$wrapperRegistry;
-    }
-
-    /**
-     * Register a string wrapper class
-     *
-     * @param string $wrapper
-     * @return void
-     */
-    public static function registerWrapper($wrapper)
-    {
-        $wrapper = (string) $wrapper;
-        if (!in_array($wrapper, static::$wrapperRegistry, true)) {
-            static::$wrapperRegistry[] = $wrapper;
-        }
-    }
-
-    /**
-     * Unregister a string wrapper class
-     *
-     * @param string $wrapper
-     * @return void
-     */
-    public static function unregisterWrapper($wrapper)
-    {
-        $index = array_search((string) $wrapper, static::$wrapperRegistry, true);
-        if ($index !== false) {
-            unset(static::$wrapperRegistry[$index]);
-        }
-    }
-
-    /**
-     * Reset all registered wrappers so the default wrappers will be used
-     *
-     * @return void
-     */
-    public static function resetRegisteredWrappers()
-    {
-        static::$wrapperRegistry = null;
-    }
-
-    /**
-     * Get the first string wrapper supporting the given character encoding
-     * and supports to convert into the given convert encoding.
-     *
-     * @param string      $encoding        Character encoding to support
-     * @param string|null $convertEncoding OPTIONAL character encoding to convert in
-     * @return StringWrapperInterface
-     * @throws Exception\RuntimeException If no wrapper supports given character encodings
-     */
-    public static function getWrapper($encoding = 'UTF-8', $convertEncoding = null)
-    {
-        foreach (static::getRegisteredWrappers() as $wrapperClass) {
-            if ($wrapperClass::isSupported($encoding, $convertEncoding)) {
-                $wrapper = new $wrapperClass($encoding, $convertEncoding);
-                $wrapper->setEncoding($encoding, $convertEncoding);
-                return $wrapper;
-            }
-        }
-
-        throw new Exception\RuntimeException(
-            'No wrapper found supporting "' . $encoding . '"'
-            . (($convertEncoding !== null) ? ' and "' . $convertEncoding . '"' : '')
-        );
-    }
-
-    /**
-     * Get a list of all known single-byte character encodings
-     *
-     * @return string[]
-     */
-    public static function getSingleByteEncodings()
-    {
-        return static::$singleByteEncodings;
-    }
-
-    /**
-     * Check if a given encoding is a known single-byte character encoding
-     *
-     * @param string $encoding
-     * @return bool
-     */
-    public static function isSingleByteEncoding($encoding)
-    {
-        return in_array(strtoupper($encoding), static::$singleByteEncodings);
-    }
-
-    /**
-     * Check if a given string is valid UTF-8 encoded
-     *
-     * @param string $str
-     * @return bool
-     */
-    public static function isValidUtf8($str)
-    {
-        return is_string($str) && ($str === '' || preg_match('/^./su', $str) == 1);
-    }
-
-    /**
-     * Is PCRE compiled with Unicode support?
-     *
-     * @return bool
-     */
-    public static function hasPcreUnicodeSupport()
-    {
-        if (static::$hasPcreUnicodeSupport === null) {
-            ErrorHandler::start();
-            static::$hasPcreUnicodeSupport = defined('PREG_BAD_UTF8_OFFSET_ERROR') && preg_match('/\pL/u', 'a') == 1;
-            ErrorHandler::stop();
-        }
-        return static::$hasPcreUnicodeSupport;
-    }
-}
diff --git a/civicrm/vendor/zendframework/zend-stdlib/src/StringWrapper/AbstractStringWrapper.php b/civicrm/vendor/zendframework/zend-stdlib/src/StringWrapper/AbstractStringWrapper.php
deleted file mode 100644
index 3e395ccc5ae6784175ded8f07f5bd6f16e654ae7..0000000000000000000000000000000000000000
--- a/civicrm/vendor/zendframework/zend-stdlib/src/StringWrapper/AbstractStringWrapper.php
+++ /dev/null
@@ -1,269 +0,0 @@
-<?php
-/**
- * Zend Framework (http://framework.zend.com/)
- *
- * @link      http://github.com/zendframework/zf2 for the canonical source repository
- * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
- * @license   http://framework.zend.com/license/new-bsd New BSD License
- */
-
-namespace Zend\Stdlib\StringWrapper;
-
-use Zend\Stdlib\Exception;
-use Zend\Stdlib\StringUtils;
-
-abstract class AbstractStringWrapper implements StringWrapperInterface
-{
-    /**
-     * The character encoding working on
-     * @var string|null
-     */
-    protected $encoding = 'UTF-8';
-
-    /**
-     * An optionally character encoding to convert to
-     * @var string|null
-     */
-    protected $convertEncoding;
-
-    /**
-     * Check if the given character encoding is supported by this wrapper
-     * and the character encoding to convert to is also supported.
-     *
-     * @param  string      $encoding
-     * @param  string|null $convertEncoding
-     * @return bool
-     */
-    public static function isSupported($encoding, $convertEncoding = null)
-    {
-        $supportedEncodings = static::getSupportedEncodings();
-
-        if (!in_array(strtoupper($encoding), $supportedEncodings)) {
-            return false;
-        }
-
-        if ($convertEncoding !== null && !in_array(strtoupper($convertEncoding), $supportedEncodings)) {
-            return false;
-        }
-
-        return true;
-    }
-
-    /**
-     * Set character encoding working with and convert to
-     *
-     * @param string      $encoding         The character encoding to work with
-     * @param string|null $convertEncoding  The character encoding to convert to
-     * @return StringWrapperInterface
-     */
-    public function setEncoding($encoding, $convertEncoding = null)
-    {
-        $supportedEncodings = static::getSupportedEncodings();
-
-        $encodingUpper = strtoupper($encoding);
-        if (!in_array($encodingUpper, $supportedEncodings)) {
-            throw new Exception\InvalidArgumentException(
-                'Wrapper doesn\'t support character encoding "' . $encoding . '"'
-            );
-        }
-
-        if ($convertEncoding !== null) {
-            $convertEncodingUpper = strtoupper($convertEncoding);
-            if (!in_array($convertEncodingUpper, $supportedEncodings)) {
-                throw new Exception\InvalidArgumentException(
-                    'Wrapper doesn\'t support character encoding "' . $convertEncoding . '"'
-                );
-            }
-
-            $this->convertEncoding = $convertEncodingUpper;
-        } else {
-            $this->convertEncoding = null;
-        }
-        $this->encoding = $encodingUpper;
-
-        return $this;
-    }
-
-    /**
-     * Get the defined character encoding to work with
-     *
-     * @return string
-     * @throws Exception\LogicException If no encoding was defined
-     */
-    public function getEncoding()
-    {
-        return $this->encoding;
-    }
-
-    /**
-     * Get the defined character encoding to convert to
-     *
-     * @return string|null
-    */
-    public function getConvertEncoding()
-    {
-        return $this->convertEncoding;
-    }
-
-    /**
-     * Convert a string from defined character encoding to the defined convert encoding
-     *
-     * @param string  $str
-     * @param bool $reverse
-     * @return string|false
-     */
-    public function convert($str, $reverse = false)
-    {
-        $encoding        = $this->getEncoding();
-        $convertEncoding = $this->getConvertEncoding();
-        if ($convertEncoding === null) {
-            throw new Exception\LogicException(
-                'No convert encoding defined'
-            );
-        }
-
-        if ($encoding === $convertEncoding) {
-            return $str;
-        }
-
-        $from = $reverse ? $convertEncoding : $encoding;
-        $to   = $reverse ? $encoding : $convertEncoding;
-        throw new Exception\RuntimeException(sprintf(
-            'Converting from "%s" to "%s" isn\'t supported by this string wrapper',
-            $from,
-            $to
-        ));
-    }
-
-    /**
-     * Wraps a string to a given number of characters
-     *
-     * @param  string  $string
-     * @param  int $width
-     * @param  string  $break
-     * @param  bool $cut
-     * @return string|false
-     */
-    public function wordWrap($string, $width = 75, $break = "\n", $cut = false)
-    {
-        $string = (string) $string;
-        if ($string === '') {
-            return '';
-        }
-
-        $break = (string) $break;
-        if ($break === '') {
-            throw new Exception\InvalidArgumentException('Break string cannot be empty');
-        }
-
-        $width = (int) $width;
-        if ($width === 0 && $cut) {
-            throw new Exception\InvalidArgumentException('Cannot force cut when width is zero');
-        }
-
-        if (StringUtils::isSingleByteEncoding($this->getEncoding())) {
-            return wordwrap($string, $width, $break, $cut);
-        }
-
-        $stringWidth = $this->strlen($string);
-        $breakWidth  = $this->strlen($break);
-
-        $result    = '';
-        $lastStart = $lastSpace = 0;
-
-        for ($current = 0; $current < $stringWidth; $current++) {
-            $char = $this->substr($string, $current, 1);
-
-            $possibleBreak = $char;
-            if ($breakWidth !== 1) {
-                $possibleBreak = $this->substr($string, $current, $breakWidth);
-            }
-
-            if ($possibleBreak === $break) {
-                $result    .= $this->substr($string, $lastStart, $current - $lastStart + $breakWidth);
-                $current   += $breakWidth - 1;
-                $lastStart  = $lastSpace = $current + 1;
-                continue;
-            }
-
-            if ($char === ' ') {
-                if ($current - $lastStart >= $width) {
-                    $result    .= $this->substr($string, $lastStart, $current - $lastStart) . $break;
-                    $lastStart  = $current + 1;
-                }
-
-                $lastSpace = $current;
-                continue;
-            }
-
-            if ($current - $lastStart >= $width && $cut && $lastStart >= $lastSpace) {
-                $result    .= $this->substr($string, $lastStart, $current - $lastStart) . $break;
-                $lastStart  = $lastSpace = $current;
-                continue;
-            }
-
-            if ($current - $lastStart >= $width && $lastStart < $lastSpace) {
-                $result    .= $this->substr($string, $lastStart, $lastSpace - $lastStart) . $break;
-                $lastStart  = $lastSpace = $lastSpace + 1;
-                continue;
-            }
-        }
-
-        if ($lastStart !== $current) {
-            $result .= $this->substr($string, $lastStart, $current - $lastStart);
-        }
-
-        return $result;
-    }
-
-    /**
-     * Pad a string to a certain length with another string
-     *
-     * @param  string  $input
-     * @param  int $padLength
-     * @param  string  $padString
-     * @param  int $padType
-     * @return string
-     */
-    public function strPad($input, $padLength, $padString = ' ', $padType = STR_PAD_RIGHT)
-    {
-        if (StringUtils::isSingleByteEncoding($this->getEncoding())) {
-            return str_pad($input, $padLength, $padString, $padType);
-        }
-
-        $lengthOfPadding = $padLength - $this->strlen($input);
-        if ($lengthOfPadding <= 0) {
-            return $input;
-        }
-
-        $padStringLength = $this->strlen($padString);
-        if ($padStringLength === 0) {
-            return $input;
-        }
-
-        $repeatCount = floor($lengthOfPadding / $padStringLength);
-
-        if ($padType === STR_PAD_BOTH) {
-            $repeatCountLeft = $repeatCountRight = ($repeatCount - $repeatCount % 2) / 2;
-
-            $lastStringLength       = $lengthOfPadding - 2 * $repeatCountLeft * $padStringLength;
-            $lastStringLeftLength   = $lastStringRightLength = floor($lastStringLength / 2);
-            $lastStringRightLength += $lastStringLength % 2;
-
-            $lastStringLeft  = $this->substr($padString, 0, $lastStringLeftLength);
-            $lastStringRight = $this->substr($padString, 0, $lastStringRightLength);
-
-            return str_repeat($padString, $repeatCountLeft) . $lastStringLeft
-                . $input
-                . str_repeat($padString, $repeatCountRight) . $lastStringRight;
-        }
-
-        $lastString = $this->substr($padString, 0, $lengthOfPadding % $padStringLength);
-
-        if ($padType === STR_PAD_LEFT) {
-            return str_repeat($padString, $repeatCount) . $lastString . $input;
-        }
-
-        return $input . str_repeat($padString, $repeatCount) . $lastString;
-    }
-}
diff --git a/civicrm/vendor/zendframework/zend-stdlib/src/StringWrapper/Iconv.php b/civicrm/vendor/zendframework/zend-stdlib/src/StringWrapper/Iconv.php
deleted file mode 100644
index 04930ff453d06fd79dbf9ad4d696b17d97af4863..0000000000000000000000000000000000000000
--- a/civicrm/vendor/zendframework/zend-stdlib/src/StringWrapper/Iconv.php
+++ /dev/null
@@ -1,289 +0,0 @@
-<?php
-/**
- * Zend Framework (http://framework.zend.com/)
- *
- * @link      http://github.com/zendframework/zf2 for the canonical source repository
- * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
- * @license   http://framework.zend.com/license/new-bsd New BSD License
- */
-
-namespace Zend\Stdlib\StringWrapper;
-
-use Zend\Stdlib\Exception;
-
-class Iconv extends AbstractStringWrapper
-{
-    /**
-     * List of supported character sets (upper case)
-     *
-     * @var string[]
-     * @link http://www.gnu.org/software/libiconv/
-     */
-    protected static $encodings = array(
-        // European languages
-        'ASCII',
-        'ISO-8859-1',
-        'ISO-8859-2',
-        'ISO-8859-3',
-        'ISO-8859-4',
-        'ISO-8859-5',
-        'ISO-8859-7',
-        'ISO-8859-9',
-        'ISO-8859-10',
-        'ISO-8859-13',
-        'ISO-8859-14',
-        'ISO-8859-15',
-        'ISO-8859-16',
-        'KOI8-R',
-        'KOI8-U',
-        'KOI8-RU',
-        'CP1250',
-        'CP1251',
-        'CP1252',
-        'CP1253',
-        'CP1254',
-        'CP1257',
-        'CP850',
-        'CP866',
-        'CP1131',
-        'MACROMAN',
-        'MACCENTRALEUROPE',
-        'MACICELAND',
-        'MACCROATIAN',
-        'MACROMANIA',
-        'MACCYRILLIC',
-        'MACUKRAINE',
-        'MACGREEK',
-        'MACTURKISH',
-        'MACINTOSH',
-
-        // Semitic languages
-        'ISO-8859-6',
-        'ISO-8859-8',
-        'CP1255',
-        'CP1256',
-        'CP862',
-        'MACHEBREW',
-        'MACARABIC',
-
-        // Japanese
-        'EUC-JP',
-        'SHIFT_JIS',
-        'CP932',
-        'ISO-2022-JP',
-        'ISO-2022-JP-2',
-        'ISO-2022-JP-1',
-
-        // Chinese
-        'EUC-CN',
-        'HZ',
-        'GBK',
-        'CP936',
-        'GB18030',
-        'EUC-TW',
-        'BIG5',
-        'CP950',
-        'BIG5-HKSCS',
-        'BIG5-HKSCS:2004',
-        'BIG5-HKSCS:2001',
-        'BIG5-HKSCS:1999',
-        'ISO-2022-CN',
-        'ISO-2022-CN-EXT',
-
-        // Korean
-        'EUC-KR',
-        'CP949',
-        'ISO-2022-KR',
-        'JOHAB',
-
-        // Armenian
-        'ARMSCII-8',
-
-        // Georgian
-        'GEORGIAN-ACADEMY',
-        'GEORGIAN-PS',
-
-        // Tajik
-        'KOI8-T',
-
-        // Kazakh
-        'PT154',
-        'RK1048',
-
-        // Thai
-        'ISO-8859-11',
-        'TIS-620',
-        'CP874',
-        'MACTHAI',
-
-        // Laotian
-        'MULELAO-1',
-        'CP1133',
-
-        // Vietnamese
-        'VISCII',
-        'TCVN',
-        'CP1258',
-
-        // Platform specifics
-        'HP-ROMAN8',
-        'NEXTSTEP',
-
-        // Full Unicode
-        'UTF-8',
-        'UCS-2',
-        'UCS-2BE',
-        'UCS-2LE',
-        'UCS-4',
-        'UCS-4BE',
-        'UCS-4LE',
-        'UTF-16',
-        'UTF-16BE',
-        'UTF-16LE',
-        'UTF-32',
-        'UTF-32BE',
-        'UTF-32LE',
-        'UTF-7',
-        'C99',
-        'JAVA',
-
-        /* Commented out because that's internal encodings not existing in real world
-        // Full Unicode, in terms of uint16_t or uint32_t (with machine dependent endianness and alignment)
-        'UCS-2-INTERNAL',
-        'UCS-4-INTERNAL',
-
-        // Locale dependent, in terms of `char' or `wchar_t' (with machine dependent endianness and alignment,
-        // and with OS and locale dependent semantics)
-        'char',
-        'wchar_t',
-        '', // The empty encoding name is equivalent to "char": it denotes the locale dependent character encoding.
-        */
-
-        // When configured with the option --enable-extra-encodings,
-        // it also provides support for a few extra encodings:
-
-        // European languages
-        'CP437',
-        'CP737',
-        'CP775',
-        'CP852',
-        'CP853',
-        'CP855',
-        'CP857',
-        'CP858',
-        'CP860',
-        'CP861',
-        'CP863',
-        'CP865',
-        'CP869',
-        'CP1125',
-
-        // Semitic languages
-        'CP864',
-
-        // Japanese
-        'EUC-JISX0213',
-        'Shift_JISX0213',
-        'ISO-2022-JP-3',
-
-        // Chinese
-        'BIG5-2003', // (experimental)
-
-        // Turkmen
-        'TDS565',
-
-        // Platform specifics
-        'ATARIST',
-        'RISCOS-LATIN1',
-    );
-
-    /**
-     * Get a list of supported character encodings
-     *
-     * @return string[]
-     */
-    public static function getSupportedEncodings()
-    {
-        return static::$encodings;
-    }
-
-    /**
-     * Constructor
-     *
-     * @throws Exception\ExtensionNotLoadedException
-     */
-    public function __construct()
-    {
-        if (!extension_loaded('iconv')) {
-            throw new Exception\ExtensionNotLoadedException(
-                'PHP extension "iconv" is required for this wrapper'
-            );
-        }
-    }
-
-    /**
-     * Returns the length of the given string
-     *
-     * @param string $str
-     * @return int|false
-     */
-    public function strlen($str)
-    {
-        return iconv_strlen($str, $this->getEncoding());
-    }
-
-    /**
-     * Returns the portion of string specified by the start and length parameters
-     *
-     * @param string   $str
-     * @param int      $offset
-     * @param int|null $length
-     * @return string|false
-     */
-    public function substr($str, $offset = 0, $length = null)
-    {
-        return iconv_substr($str, $offset, $length, $this->getEncoding());
-    }
-
-    /**
-     * Find the position of the first occurrence of a substring in a string
-     *
-     * @param string $haystack
-     * @param string $needle
-     * @param int    $offset
-     * @return int|false
-     */
-    public function strpos($haystack, $needle, $offset = 0)
-    {
-        return iconv_strpos($haystack, $needle, $offset, $this->getEncoding());
-    }
-
-    /**
-     * Convert a string from defined encoding to the defined convert encoding
-     *
-     * @param string  $str
-     * @param bool $reverse
-     * @return string|false
-     */
-    public function convert($str, $reverse = false)
-    {
-        $encoding        = $this->getEncoding();
-        $convertEncoding = $this->getConvertEncoding();
-        if ($convertEncoding === null) {
-            throw new Exception\LogicException(
-                'No convert encoding defined'
-            );
-        }
-
-        if ($encoding === $convertEncoding) {
-            return $str;
-        }
-
-        $fromEncoding = $reverse ? $convertEncoding : $encoding;
-        $toEncoding   = $reverse ? $encoding : $convertEncoding;
-
-        // automatically add "//IGNORE" to not stop converting on invalid characters
-        // invalid characters triggers a notice anyway
-        return iconv($fromEncoding, $toEncoding . '//IGNORE', $str);
-    }
-}
diff --git a/civicrm/vendor/zendframework/zend-stdlib/src/StringWrapper/Intl.php b/civicrm/vendor/zendframework/zend-stdlib/src/StringWrapper/Intl.php
deleted file mode 100644
index 1b01277367832995f8c3aecd290f31d16cc9f73c..0000000000000000000000000000000000000000
--- a/civicrm/vendor/zendframework/zend-stdlib/src/StringWrapper/Intl.php
+++ /dev/null
@@ -1,88 +0,0 @@
-<?php
-/**
- * Zend Framework (http://framework.zend.com/)
- *
- * @link      http://github.com/zendframework/zf2 for the canonical source repository
- * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
- * @license   http://framework.zend.com/license/new-bsd New BSD License
- */
-
-namespace Zend\Stdlib\StringWrapper;
-
-use Zend\Stdlib\Exception;
-
-class Intl extends AbstractStringWrapper
-{
-    /**
-     * List of supported character sets (upper case)
-     *
-     * @var string[]
-     */
-    protected static $encodings = array('UTF-8');
-
-    /**
-     * Get a list of supported character encodings
-     *
-     * @return string[]
-     */
-    public static function getSupportedEncodings()
-    {
-        return static::$encodings;
-    }
-
-    /**
-     * Constructor
-     *
-     * @throws Exception\ExtensionNotLoadedException
-     */
-    public function __construct()
-    {
-        if (!extension_loaded('intl')) {
-            throw new Exception\ExtensionNotLoadedException(
-                'PHP extension "intl" is required for this wrapper'
-            );
-        }
-    }
-
-    /**
-     * Returns the length of the given string
-     *
-     * @param string $str
-     * @return int|false
-     */
-    public function strlen($str)
-    {
-        return grapheme_strlen($str);
-    }
-
-    /**
-     * Returns the portion of string specified by the start and length parameters
-     *
-     * @param string   $str
-     * @param int      $offset
-     * @param int|null $length
-     * @return string|false
-     */
-    public function substr($str, $offset = 0, $length = null)
-    {
-        // Due fix of PHP #62759 The third argument returns an empty string if is 0 or null.
-        if ($length !== null) {
-            return grapheme_substr($str, $offset, $length);
-        }
-
-        return grapheme_substr($str, $offset);
-    }
-
-    /**
-     * Find the position of the first occurrence of a substring in a string
-     *
-     * @param string $haystack
-     * @param string $needle
-     * @param int    $offset
-     * @return int|false
-     */
-    public function strpos($haystack, $needle, $offset = 0)
-    {
-        return grapheme_strpos($haystack, $needle, $offset);
-    }
-}
diff --git a/civicrm/vendor/zendframework/zend-stdlib/src/StringWrapper/MbString.php b/civicrm/vendor/zendframework/zend-stdlib/src/StringWrapper/MbString.php
deleted file mode 100644
index d6db18566d247dbbcab313b09ecd14902919c220..0000000000000000000000000000000000000000
--- a/civicrm/vendor/zendframework/zend-stdlib/src/StringWrapper/MbString.php
+++ /dev/null
@@ -1,121 +0,0 @@
-<?php
-/**
- * Zend Framework (http://framework.zend.com/)
- *
- * @link      http://github.com/zendframework/zf2 for the canonical source repository
- * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
- * @license   http://framework.zend.com/license/new-bsd New BSD License
- */
-
-namespace Zend\Stdlib\StringWrapper;
-
-use Zend\Stdlib\Exception;
-
-class MbString extends AbstractStringWrapper
-{
-    /**
-     * List of supported character sets (upper case)
-     *
-     * @var null|string[]
-     * @link http://php.net/manual/mbstring.supported-encodings.php
-     */
-    protected static $encodings = null;
-
-    /**
-     * Get a list of supported character encodings
-     *
-     * @return string[]
-     */
-    public static function getSupportedEncodings()
-    {
-        if (static::$encodings === null) {
-            static::$encodings = array_map('strtoupper', mb_list_encodings());
-
-            // FIXME: Converting € (UTF-8) to ISO-8859-16 gives a wrong result
-            $indexIso885916 = array_search('ISO-8859-16', static::$encodings, true);
-            if ($indexIso885916 !== false) {
-                unset(static::$encodings[$indexIso885916]);
-            }
-        }
-
-        return static::$encodings;
-    }
-
-    /**
-     * Constructor
-     *
-     * @throws Exception\ExtensionNotLoadedException
-     */
-    public function __construct()
-    {
-        if (!extension_loaded('mbstring')) {
-            throw new Exception\ExtensionNotLoadedException(
-                'PHP extension "mbstring" is required for this wrapper'
-            );
-        }
-    }
-
-    /**
-     * Returns the length of the given string
-     *
-     * @param string $str
-     * @return int|false
-     */
-    public function strlen($str)
-    {
-        return mb_strlen($str, $this->getEncoding());
-    }
-
-    /**
-     * Returns the portion of string specified by the start and length parameters
-     *
-     * @param string   $str
-     * @param int      $offset
-     * @param int|null $length
-     * @return string|false
-     */
-    public function substr($str, $offset = 0, $length = null)
-    {
-        return mb_substr($str, $offset, $length, $this->getEncoding());
-    }
-
-    /**
-     * Find the position of the first occurrence of a substring in a string
-     *
-     * @param string $haystack
-     * @param string $needle
-     * @param int    $offset
-     * @return int|false
-     */
-    public function strpos($haystack, $needle, $offset = 0)
-    {
-        return mb_strpos($haystack, $needle, $offset, $this->getEncoding());
-    }
-
-    /**
-     * Convert a string from defined encoding to the defined convert encoding
-     *
-     * @param string  $str
-     * @param bool $reverse
-     * @return string|false
-     */
-    public function convert($str, $reverse = false)
-    {
-        $encoding        = $this->getEncoding();
-        $convertEncoding = $this->getConvertEncoding();
-
-        if ($convertEncoding === null) {
-            throw new Exception\LogicException(
-                'No convert encoding defined'
-            );
-        }
-
-        if ($encoding === $convertEncoding) {
-            return $str;
-        }
-
-        $fromEncoding = $reverse ? $convertEncoding : $encoding;
-        $toEncoding   = $reverse ? $encoding : $convertEncoding;
-        return mb_convert_encoding($str, $toEncoding, $fromEncoding);
-    }
-}
diff --git a/civicrm/vendor/zendframework/zend-stdlib/src/StringWrapper/Native.php b/civicrm/vendor/zendframework/zend-stdlib/src/StringWrapper/Native.php
deleted file mode 100644
index 38b3c10a41c515f0358a32cd712677be54311f80..0000000000000000000000000000000000000000
--- a/civicrm/vendor/zendframework/zend-stdlib/src/StringWrapper/Native.php
+++ /dev/null
@@ -1,134 +0,0 @@
-<?php
-/**
- * Zend Framework (http://framework.zend.com/)
- *
- * @link      http://github.com/zendframework/zf2 for the canonical source repository
- * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
- * @license   http://framework.zend.com/license/new-bsd New BSD License
- */
-
-namespace Zend\Stdlib\StringWrapper;
-
-use Zend\Stdlib\Exception;
-use Zend\Stdlib\StringUtils;
-
-class Native extends AbstractStringWrapper
-{
-    /**
-     * The character encoding working on
-     * (overwritten to change defaut encoding)
-     *
-     * @var string
-     */
-    protected $encoding = 'ASCII';
-
-    /**
-     * Check if the given character encoding is supported by this wrapper
-     * and the character encoding to convert to is also supported.
-     *
-     * @param  string      $encoding
-     * @param  string|null $convertEncoding
-     * @return bool
-     */
-    public static function isSupported($encoding, $convertEncoding = null)
-    {
-        $encodingUpper      = strtoupper($encoding);
-        $supportedEncodings = static::getSupportedEncodings();
-
-        if (!in_array($encodingUpper, $supportedEncodings)) {
-            return false;
-        }
-
-        // This adapter doesn't support to convert between encodings
-        if ($convertEncoding !== null && $encodingUpper !== strtoupper($convertEncoding)) {
-            return false;
-        }
-
-        return true;
-    }
-
-    /**
-     * Get a list of supported character encodings
-     *
-     * @return string[]
-     */
-    public static function getSupportedEncodings()
-    {
-        return StringUtils::getSingleByteEncodings();
-    }
-
-    /**
-     * Set character encoding working with and convert to
-     *
-     * @param string      $encoding         The character encoding to work with
-     * @param string|null $convertEncoding  The character encoding to convert to
-     * @return StringWrapperInterface
-     */
-    public function setEncoding($encoding, $convertEncoding = null)
-    {
-        $supportedEncodings = static::getSupportedEncodings();
-
-        $encodingUpper = strtoupper($encoding);
-        if (!in_array($encodingUpper, $supportedEncodings)) {
-            throw new Exception\InvalidArgumentException(
-                'Wrapper doesn\'t support character encoding "' . $encoding . '"'
-            );
-        }
-
-        if ($encodingUpper !== strtoupper($convertEncoding)) {
-            $this->convertEncoding = $encodingUpper;
-        }
-
-        if ($convertEncoding !== null) {
-            if ($encodingUpper !== strtoupper($convertEncoding)) {
-                throw new Exception\InvalidArgumentException(
-                    'Wrapper doesn\'t support to convert between character encodings'
-                );
-            }
-
-            $this->convertEncoding = $encodingUpper;
-        } else {
-            $this->convertEncoding = null;
-        }
-        $this->encoding = $encodingUpper;
-
-        return $this;
-    }
-
-    /**
-     * Returns the length of the given string
-     *
-     * @param string $str
-     * @return int|false
-     */
-    public function strlen($str)
-    {
-        return strlen($str);
-    }
-
-    /**
-     * Returns the portion of string specified by the start and length parameters
-     *
-     * @param string   $str
-     * @param int      $offset
-     * @param int|null $length
-     * @return string|false
-     */
-    public function substr($str, $offset = 0, $length = null)
-    {
-        return substr($str, $offset, $length);
-    }
-
-    /**
-     * Find the position of the first occurrence of a substring in a string
-     *
-     * @param string $haystack
-     * @param string $needle
-     * @param int    $offset
-     * @return int|false
-     */
-    public function strpos($haystack, $needle, $offset = 0)
-    {
-        return strpos($haystack, $needle, $offset);
-    }
-}
diff --git a/civicrm/vendor/zendframework/zend-stdlib/src/StringWrapper/StringWrapperInterface.php b/civicrm/vendor/zendframework/zend-stdlib/src/StringWrapper/StringWrapperInterface.php
deleted file mode 100644
index f25b3253fc3fd535435103e33338436a73195c24..0000000000000000000000000000000000000000
--- a/civicrm/vendor/zendframework/zend-stdlib/src/StringWrapper/StringWrapperInterface.php
+++ /dev/null
@@ -1,111 +0,0 @@
-<?php
-/**
- * Zend Framework (http://framework.zend.com/)
- *
- * @link      http://github.com/zendframework/zf2 for the canonical source repository
- * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
- * @license   http://framework.zend.com/license/new-bsd New BSD License
- */
-
-namespace Zend\Stdlib\StringWrapper;
-
-interface StringWrapperInterface
-{
-    /**
-     * Check if the given character encoding is supported by this wrapper
-     * and the character encoding to convert to is also supported.
-     *
-     * @param string      $encoding
-     * @param string|null $convertEncoding
-     */
-    public static function isSupported($encoding, $convertEncoding = null);
-
-    /**
-     * Get a list of supported character encodings
-     *
-     * @return string[]
-     */
-    public static function getSupportedEncodings();
-
-    /**
-     * Set character encoding working with and convert to
-     *
-     * @param string      $encoding         The character encoding to work with
-     * @param string|null $convertEncoding  The character encoding to convert to
-     * @return StringWrapperInterface
-     */
-    public function setEncoding($encoding, $convertEncoding = null);
-
-    /**
-     * Get the defined character encoding to work with (upper case)
-     *
-     * @return string
-     */
-    public function getEncoding();
-
-    /**
-     * Get the defined character encoding to convert to (upper case)
-     *
-     * @return string|null
-     */
-    public function getConvertEncoding();
-
-    /**
-     * Returns the length of the given string
-     *
-     * @param string $str
-     * @return int|false
-     */
-    public function strlen($str);
-
-    /**
-     * Returns the portion of string specified by the start and length parameters
-     *
-     * @param string   $str
-     * @param int      $offset
-     * @param int|null $length
-     * @return string|false
-     */
-    public function substr($str, $offset = 0, $length = null);
-
-    /**
-     * Find the position of the first occurrence of a substring in a string
-     *
-     * @param string $haystack
-     * @param string $needle
-     * @param int    $offset
-     * @return int|false
-     */
-    public function strpos($haystack, $needle, $offset = 0);
-
-    /**
-     * Convert a string from defined encoding to the defined convert encoding
-     *
-     * @param string  $str
-     * @param bool $reverse
-     * @return string|false
-     */
-    public function convert($str, $reverse = false);
-
-    /**
-     * Wraps a string to a given number of characters
-     *
-     * @param  string  $str
-     * @param  int $width
-     * @param  string  $break
-     * @param  bool $cut
-     * @return string
-     */
-    public function wordWrap($str, $width = 75, $break = "\n", $cut = false);
-
-    /**
-     * Pad a string to a certain length with another string
-     *
-     * @param  string  $input
-     * @param  int $padLength
-     * @param  string  $padString
-     * @param  int $padType
-     * @return string
-     */
-    public function strPad($input, $padLength, $padString = ' ', $padType = STR_PAD_RIGHT);
-}
diff --git a/civicrm/vendor/zendframework/zend-stdlib/src/compatibility/autoload.php b/civicrm/vendor/zendframework/zend-stdlib/src/compatibility/autoload.php
deleted file mode 100644
index f8670cc16b6c352d38369449e6a83f835312da92..0000000000000000000000000000000000000000
--- a/civicrm/vendor/zendframework/zend-stdlib/src/compatibility/autoload.php
+++ /dev/null
@@ -1,14 +0,0 @@
-<?php
-/**
- * Zend Framework (http://framework.zend.com/)
- *
- * @link      http://github.com/zendframework/zf2 for the canonical source repository
- * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
- * @license   http://framework.zend.com/license/new-bsd New BSD License
- * @deprecated
- */
-
-/**
- * Legacy purposes only, to prevent code that references it from breaking.
- */
-trigger_error('Polyfill autoload support (file library/Zend/Stdlib/compatibility/autoload.php) is no longer necessary; please remove your require statement referencing this file', E_USER_DEPRECATED);
diff --git a/civicrm/vendor/zendframework/zend-validator/.coveralls.yml b/civicrm/vendor/zendframework/zend-validator/.coveralls.yml
deleted file mode 100644
index 53bda829c8127d2fc8263e6fb6a54fb66f4916b1..0000000000000000000000000000000000000000
--- a/civicrm/vendor/zendframework/zend-validator/.coveralls.yml
+++ /dev/null
@@ -1,3 +0,0 @@
-coverage_clover: clover.xml
-json_path: coveralls-upload.json
-src_dir: src
diff --git a/civicrm/vendor/zendframework/zend-validator/CHANGELOG.md b/civicrm/vendor/zendframework/zend-validator/CHANGELOG.md
deleted file mode 100644
index ef9b738565b599655e62fc13466f8efdb59fcc00..0000000000000000000000000000000000000000
--- a/civicrm/vendor/zendframework/zend-validator/CHANGELOG.md
+++ /dev/null
@@ -1,27 +0,0 @@
-# Changelog
-
-All notable changes to this project will be documented in this file, in reverse chronological order by release.
-
-## 2.4.8 - 2015-09-08
-
-### Added
-
-- Nothing.
-
-### Deprecated
-
-- Nothing.
-
-### Removed
-
-- Nothing.
-
-### Fixed
-
-- [#25](https://github.com/zendframework/zend-validator/pull/25) updates the
-  `Date` validator to perform checks against `DateTimeImmutable` instead of
-  `DateTimeInterface` (as the latter has engine-level restrictions against
-  when it is valid for type hints).
-- [#35](https://github.com/zendframework/zend-validator/pull/35) ensures that
-  the default behavior of the `NotEmpty` validator is to treat `0.0` as
-  non-empty.
diff --git a/civicrm/vendor/zendframework/zend-validator/CONTRIBUTING.md b/civicrm/vendor/zendframework/zend-validator/CONTRIBUTING.md
deleted file mode 100644
index f465f007848223b887a34847f1b03e5185a477b4..0000000000000000000000000000000000000000
--- a/civicrm/vendor/zendframework/zend-validator/CONTRIBUTING.md
+++ /dev/null
@@ -1,229 +0,0 @@
-# CONTRIBUTING
-
-## RESOURCES
-
-If you wish to contribute to Zend Framework, please be sure to
-read/subscribe to the following resources:
-
- -  [Coding Standards](https://github.com/zendframework/zf2/wiki/Coding-Standards)
- -  [Contributor's Guide](http://framework.zend.com/participate/contributor-guide)
- -  ZF Contributor's mailing list:
-    Archives: http://zend-framework-community.634137.n4.nabble.com/ZF-Contributor-f680267.html
-    Subscribe: zf-contributors-subscribe@lists.zend.com
- -  ZF Contributor's IRC channel:
-    #zftalk.dev on Freenode.net
-
-If you are working on new features or refactoring [create a proposal](https://github.com/zendframework/zend-validator/issues/new).
-
-## Reporting Potential Security Issues
-
-If you have encountered a potential security vulnerability, please **DO NOT** report it on the public
-issue tracker: send it to us at [zf-security@zend.com](mailto:zf-security@zend.com) instead.
-We will work with you to verify the vulnerability and patch it as soon as possible.
-
-When reporting issues, please provide the following information:
-
-- Component(s) affected
-- A description indicating how to reproduce the issue
-- A summary of the security vulnerability and impact
-
-We request that you contact us via the email address above and give the project
-contributors a chance to resolve the vulnerability and issue a new release prior
-to any public exposure; this helps protect users and provides them with a chance
-to upgrade and/or update in order to protect their applications.
-
-For sensitive email communications, please use [our PGP key](http://framework.zend.com/zf-security-pgp-key.asc).
-
-## RUNNING TESTS
-
-> ### Note: testing versions prior to 2.4
->
-> This component originates with Zend Framework 2. During the lifetime of ZF2,
-> testing infrastructure migrated from PHPUnit 3 to PHPUnit 4. In most cases, no
-> changes were necessary. However, due to the migration, tests may not run on
-> versions < 2.4. As such, you may need to change the PHPUnit dependency if
-> attempting a fix on such a version.
-
-To run tests:
-
-- Clone the repository:
-
-  ```console
-  $ git clone git@github.com:zendframework/zend-validator.git
-  $ cd
-  ```
-
-- Install dependencies via composer:
-
-  ```console
-  $ curl -sS https://getcomposer.org/installer | php --
-  $ ./composer.phar install
-  ```
-
-  If you don't have `curl` installed, you can also download `composer.phar` from https://getcomposer.org/
-
-- Run the tests via `phpunit` and the provided PHPUnit config, like in this example:
-
-  ```console
-  $ ./vendor/bin/phpunit
-  ```
-
-You can turn on conditional tests with the phpunit.xml file.
-To do so:
-
- -  Copy `phpunit.xml.dist` file to `phpunit.xml`
- -  Edit `phpunit.xml` to enable any specific functionality you
-    want to test, as well as to provide test values to utilize.
-
-## Running Coding Standards Checks
-
-This component uses [php-cs-fixer](http://cs.sensiolabs.org/) for coding
-standards checks, and provides configuration for our selected checks.
-`php-cs-fixer` is installed by default via Composer.
-
-To run checks only:
-
-```console
-$ ./vendor/bin/php-cs-fixer fix . -v --diff --dry-run --config-file=.php_cs
-```
-
-To have `php-cs-fixer` attempt to fix problems for you, omit the `--dry-run`
-flag:
-
-```console
-$ ./vendor/bin/php-cs-fixer fix . -v --diff --config-file=.php_cs
-```
-
-If you allow php-cs-fixer to fix CS issues, please re-run the tests to ensure
-they pass, and make sure you add and commit the changes after verification.
-
-## Recommended Workflow for Contributions
-
-Your first step is to establish a public repository from which we can
-pull your work into the master repository. We recommend using
-[GitHub](https://github.com), as that is where the component is already hosted.
-
-1. Setup a [GitHub account](http://github.com/), if you haven't yet
-2. Fork the repository (http://github.com/zendframework/zend-validator)
-3. Clone the canonical repository locally and enter it.
-
-   ```console
-   $ git clone git://github.com:zendframework/zend-validator.git
-   $ cd zend-validator
-   ```
-
-4. Add a remote to your fork; substitute your GitHub username in the command
-   below.
-
-   ```console
-   $ git remote add {username} git@github.com:{username}/zend-validator.git
-   $ git fetch {username}
-   ```
-
-### Keeping Up-to-Date
-
-Periodically, you should update your fork or personal repository to
-match the canonical ZF repository. Assuming you have setup your local repository
-per the instructions above, you can do the following:
-
-
-```console
-$ git checkout master
-$ git fetch origin
-$ git rebase origin/master
-# OPTIONALLY, to keep your remote up-to-date -
-$ git push {username} master:master
-```
-
-If you're tracking other branches -- for example, the "develop" branch, where
-new feature development occurs -- you'll want to do the same operations for that
-branch; simply substitute  "develop" for "master".
-
-### Working on a patch
-
-We recommend you do each new feature or bugfix in a new branch. This simplifies
-the task of code review as well as the task of merging your changes into the
-canonical repository.
-
-A typical workflow will then consist of the following:
-
-1. Create a new local branch based off either your master or develop branch.
-2. Switch to your new local branch. (This step can be combined with the
-   previous step with the use of `git checkout -b`.)
-3. Do some work, commit, repeat as necessary.
-4. Push the local branch to your remote repository.
-5. Send a pull request.
-
-The mechanics of this process are actually quite trivial. Below, we will
-create a branch for fixing an issue in the tracker.
-
-```console
-$ git checkout -b hotfix/9295
-Switched to a new branch 'hotfix/9295'
-```
-
-... do some work ...
-
-
-```console
-$ git commit
-```
-
-... write your log message ...
-
-
-```console
-$ git push {username} hotfix/9295:hotfix/9295
-Counting objects: 38, done.
-Delta compression using up to 2 threads.
-Compression objects: 100% (18/18), done.
-Writing objects: 100% (20/20), 8.19KiB, done.
-Total 20 (delta 12), reused 0 (delta 0)
-To ssh://git@github.com/{username}/zend-validator.git
-   b5583aa..4f51698  HEAD -> master
-```
-
-To send a pull request, you have two options.
-
-If using GitHub, you can do the pull request from there. Navigate to
-your repository, select the branch you just created, and then select the
-"Pull Request" button in the upper right. Select the user/organization
-"zendframework" as the recipient.
-
-If using your own repository - or even if using GitHub - you can use `git
-format-patch` to create a patchset for us to apply; in fact, this is
-**recommended** for security-related patches. If you use `format-patch`, please
-send the patches as attachments to:
-
--  zf-devteam@zend.com for patches without security implications
--  zf-security@zend.com for security patches
-
-#### What branch to issue the pull request against?
-
-Which branch should you issue a pull request against?
-
-- For fixes against the stable release, issue the pull request against the
-  "master" branch.
-- For new features, or fixes that introduce new elements to the public API (such
-  as new public methods or properties), issue the pull request against the
-  "develop" branch.
-
-### Branch Cleanup
-
-As you might imagine, if you are a frequent contributor, you'll start to
-get a ton of branches both locally and on your remote.
-
-Once you know that your changes have been accepted to the master
-repository, we suggest doing some cleanup of these branches.
-
--  Local branch cleanup
-
-   ```console
-   $ git branch -d <branchname>
-   ```
-
--  Remote branch removal
-
-   ```console
-   $ git push {username} :<branchname>
-   ```
diff --git a/civicrm/vendor/zendframework/zend-validator/LICENSE.txt b/civicrm/vendor/zendframework/zend-validator/LICENSE.txt
deleted file mode 100644
index 6eab5aa14fd421059dfecada369abb8dd79c8a48..0000000000000000000000000000000000000000
--- a/civicrm/vendor/zendframework/zend-validator/LICENSE.txt
+++ /dev/null
@@ -1,27 +0,0 @@
-Copyright (c) 2005-2015, Zend Technologies USA, Inc.
-All rights reserved.
-
-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 Zend Technologies USA, Inc. nor the names of its
-      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.
diff --git a/civicrm/vendor/zendframework/zend-validator/README.md b/civicrm/vendor/zendframework/zend-validator/README.md
deleted file mode 100644
index 72506d2667844dbfa00db9783f0fd0327e8f8a5d..0000000000000000000000000000000000000000
--- a/civicrm/vendor/zendframework/zend-validator/README.md
+++ /dev/null
@@ -1,9 +0,0 @@
-# zend-validator
-
-The `Zend\Validator` component provides a set of commonly needed validators. It
-also provides a simple validator chaining mechanism by which multiple validators
-may be applied to a single datum in a user-defined order.
-
-
-- File issues at https://github.com/zendframework/zend-validator/issues
-- Documentation is at http://framework.zend.com/manual/current/en/index.html#zend-validator
diff --git a/civicrm/vendor/zendframework/zend-validator/composer.json b/civicrm/vendor/zendframework/zend-validator/composer.json
deleted file mode 100644
index 8d213f0c1ea92a7e037529a3bfee42c4e46de3ae..0000000000000000000000000000000000000000
--- a/civicrm/vendor/zendframework/zend-validator/composer.json
+++ /dev/null
@@ -1,53 +0,0 @@
-{
-    "name": "zendframework/zend-validator",
-    "description": "provides a set of commonly needed validators",
-    "license": "BSD-3-Clause",
-    "keywords": [
-        "zf2",
-        "validator"
-    ],
-    "homepage": "https://github.com/zendframework/zend-validator",
-    "autoload": {
-        "psr-4": {
-            "Zend\\Validator\\": "src/"
-        }
-    },
-    "require": {
-        "php": ">=5.3.23",
-        "zendframework/zend-stdlib": "~2.4.0"
-    },
-    "require-dev": {
-        "zendframework/zend-config": "~2.4.0",
-        "zendframework/zend-db": "~2.4.0",
-        "zendframework/zend-filter": "~2.4.0",
-        "zendframework/zend-i18n": "~2.4.0",
-        "zendframework/zend-math": "~2.4.0",
-        "zendframework/zend-servicemanager": "~2.4.0",
-        "zendframework/zend-session": "~2.4.0",
-        "zendframework/zend-uri": "~2.4.0",
-        "fabpot/php-cs-fixer": "1.7.*",
-        "satooshi/php-coveralls": "dev-master",
-        "phpunit/PHPUnit": "~4.0"
-    },
-    "suggest": {
-        "zendframework/zend-db": "Zend\\Db component",
-        "zendframework/zend-filter": "Zend\\Filter component, required by the Digits validator",
-        "zendframework/zend-i18n": "Zend\\I18n component to allow translation of validation error messages as well as to use the various Date validators",
-        "zendframework/zend-math": "Zend\\Math component",
-        "zendframework/zend-resources": "Translations of validator messages",
-        "zendframework/zend-servicemanager": "Zend\\ServiceManager component to allow using the ValidatorPluginManager and validator chains",
-        "zendframework/zend-session": "Zend\\Session component",
-        "zendframework/zend-uri": "Zend\\Uri component, required by the Uri and Sitemap\\Loc validators"
-    },
-    "extra": {
-        "branch-alias": {
-            "dev-master": "2.4-dev",
-            "dev-develop": "2.5-dev"
-        }
-    },
-    "autoload-dev": {
-        "psr-4": {
-            "ZendTest\\Validator\\": "test/"
-        }
-    }
-}
diff --git a/civicrm/vendor/zendframework/zend-validator/phpunit.xml.dist b/civicrm/vendor/zendframework/zend-validator/phpunit.xml.dist
deleted file mode 100644
index f53d2183321f14640b3663820f248c5a20e4c3a5..0000000000000000000000000000000000000000
--- a/civicrm/vendor/zendframework/zend-validator/phpunit.xml.dist
+++ /dev/null
@@ -1,35 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<phpunit xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-         xsi:noNamespaceSchemaLocation="./vendor/phpunit/phpunit/phpunit.xsd"
-         bootstrap="./test/bootstrap.php"
-         colors="true">
-    <testsuites>
-        <testsuite name="zend-validator Test Suite">
-            <directory>./test/</directory>
-        </testsuite>
-    </testsuites>
-
-    <groups>
-        <exclude>
-            <group>disable</group>
-        </exclude>
-    </groups>
-
-    <filter>
-        <whitelist addUncoveredFilesFromWhitelist="true">
-            <directory suffix=".php">./src</directory>
-        </whitelist>
-    </filter>
-
-    <php>
-        <ini name="date.timezone" value="UTC"/>
-
-        <!-- OB_ENABLED should be enabled for some tests to check if all
-             functionality works as expected. Such tests include those for
-             Zend\Soap and Zend\Session, which require that headers not be sent
-             in order to work. -->
-        <const name="TESTS_ZEND_OB_ENABLED" value="false" />
-
-        <const name="TESTS_ZEND_VALIDATOR_ONLINE_ENABLED" value="false" />
-    </php>
-</phpunit>
diff --git a/civicrm/vendor/zendframework/zend-validator/phpunit.xml.travis b/civicrm/vendor/zendframework/zend-validator/phpunit.xml.travis
deleted file mode 100644
index f53d2183321f14640b3663820f248c5a20e4c3a5..0000000000000000000000000000000000000000
--- a/civicrm/vendor/zendframework/zend-validator/phpunit.xml.travis
+++ /dev/null
@@ -1,35 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<phpunit xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-         xsi:noNamespaceSchemaLocation="./vendor/phpunit/phpunit/phpunit.xsd"
-         bootstrap="./test/bootstrap.php"
-         colors="true">
-    <testsuites>
-        <testsuite name="zend-validator Test Suite">
-            <directory>./test/</directory>
-        </testsuite>
-    </testsuites>
-
-    <groups>
-        <exclude>
-            <group>disable</group>
-        </exclude>
-    </groups>
-
-    <filter>
-        <whitelist addUncoveredFilesFromWhitelist="true">
-            <directory suffix=".php">./src</directory>
-        </whitelist>
-    </filter>
-
-    <php>
-        <ini name="date.timezone" value="UTC"/>
-
-        <!-- OB_ENABLED should be enabled for some tests to check if all
-             functionality works as expected. Such tests include those for
-             Zend\Soap and Zend\Session, which require that headers not be sent
-             in order to work. -->
-        <const name="TESTS_ZEND_OB_ENABLED" value="false" />
-
-        <const name="TESTS_ZEND_VALIDATOR_ONLINE_ENABLED" value="false" />
-    </php>
-</phpunit>
diff --git a/civicrm/vendor/zendframework/zend-validator/src/AbstractValidator.php b/civicrm/vendor/zendframework/zend-validator/src/AbstractValidator.php
deleted file mode 100644
index 93af2cab463530eb0eb57bae4936268352ae1dc3..0000000000000000000000000000000000000000
--- a/civicrm/vendor/zendframework/zend-validator/src/AbstractValidator.php
+++ /dev/null
@@ -1,574 +0,0 @@
-<?php
-/**
- * Zend Framework (http://framework.zend.com/)
- *
- * @link      http://github.com/zendframework/zf2 for the canonical source repository
- * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
- * @license   http://framework.zend.com/license/new-bsd New BSD License
- */
-
-namespace Zend\Validator;
-
-use Traversable;
-use Zend\Stdlib\ArrayUtils;
-
-abstract class AbstractValidator implements
-    Translator\TranslatorAwareInterface,
-    ValidatorInterface
-{
-    /**
-     * The value to be validated
-     *
-     * @var mixed
-     */
-    protected $value;
-
-    /**
-     * Default translation object for all validate objects
-     * @var Translator\TranslatorInterface
-     */
-    protected static $defaultTranslator;
-
-    /**
-     * Default text domain to be used with translator
-     * @var string
-     */
-    protected static $defaultTranslatorTextDomain = 'default';
-
-    /**
-     * Limits the maximum returned length of an error message
-     *
-     * @var int
-     */
-    protected static $messageLength = -1;
-
-    protected $abstractOptions = array(
-        'messages'             => array(), // Array of validation failure messages
-        'messageTemplates'     => array(), // Array of validation failure message templates
-        'messageVariables'     => array(), // Array of additional variables available for validation failure messages
-        'translator'           => null,    // Translation object to used -> Translator\TranslatorInterface
-        'translatorTextDomain' => null,    // Translation text domain
-        'translatorEnabled'    => true,    // Is translation enabled?
-        'valueObscured'        => false,   // Flag indicating whether or not value should be obfuscated
-                                           // in error messages
-    );
-
-    /**
-     * Abstract constructor for all validators
-     * A validator should accept following parameters:
-     *  - nothing f.e. Validator()
-     *  - one or multiple scalar values f.e. Validator($first, $second, $third)
-     *  - an array f.e. Validator(array($first => 'first', $second => 'second', $third => 'third'))
-     *  - an instance of Traversable f.e. Validator($config_instance)
-     *
-     * @param array|Traversable $options
-     */
-    public function __construct($options = null)
-    {
-        // The abstract constructor allows no scalar values
-        if ($options instanceof Traversable) {
-            $options = ArrayUtils::iteratorToArray($options);
-        }
-
-        if (isset($this->messageTemplates)) {
-            $this->abstractOptions['messageTemplates'] = $this->messageTemplates;
-        }
-
-        if (isset($this->messageVariables)) {
-            $this->abstractOptions['messageVariables'] = $this->messageVariables;
-        }
-
-        if (is_array($options)) {
-            $this->setOptions($options);
-        }
-    }
-
-    /**
-     * Returns an option
-     *
-     * @param string $option Option to be returned
-     * @return mixed Returned option
-     * @throws Exception\InvalidArgumentException
-     */
-    public function getOption($option)
-    {
-        if (array_key_exists($option, $this->abstractOptions)) {
-            return $this->abstractOptions[$option];
-        }
-
-        if (isset($this->options) && array_key_exists($option, $this->options)) {
-            return $this->options[$option];
-        }
-
-        throw new Exception\InvalidArgumentException("Invalid option '$option'");
-    }
-
-    /**
-     * Returns all available options
-     *
-     * @return array Array with all available options
-     */
-    public function getOptions()
-    {
-        $result = $this->abstractOptions;
-        if (isset($this->options)) {
-            $result += $this->options;
-        }
-        return $result;
-    }
-
-    /**
-     * Sets one or multiple options
-     *
-     * @param  array|Traversable $options Options to set
-     * @throws Exception\InvalidArgumentException If $options is not an array or Traversable
-     * @return AbstractValidator Provides fluid interface
-     */
-    public function setOptions($options = array())
-    {
-        if (!is_array($options) && !$options instanceof Traversable) {
-            throw new Exception\InvalidArgumentException(__METHOD__ . ' expects an array or Traversable');
-        }
-
-        foreach ($options as $name => $option) {
-            $fname = 'set' . ucfirst($name);
-            $fname2 = 'is' . ucfirst($name);
-            if (($name != 'setOptions') && method_exists($this, $name)) {
-                $this->{$name}($option);
-            } elseif (($fname != 'setOptions') && method_exists($this, $fname)) {
-                $this->{$fname}($option);
-            } elseif (method_exists($this, $fname2)) {
-                $this->{$fname2}($option);
-            } elseif (isset($this->options)) {
-                $this->options[$name] = $option;
-            } else {
-                $this->abstractOptions[$name] = $option;
-            }
-        }
-
-        return $this;
-    }
-
-    /**
-     * Returns array of validation failure messages
-     *
-     * @return array
-     */
-    public function getMessages()
-    {
-        return array_unique($this->abstractOptions['messages'], SORT_REGULAR);
-    }
-
-    /**
-     * Invoke as command
-     *
-     * @param  mixed $value
-     * @return bool
-     */
-    public function __invoke($value)
-    {
-        return $this->isValid($value);
-    }
-
-    /**
-     * Returns an array of the names of variables that are used in constructing validation failure messages
-     *
-     * @return array
-     */
-    public function getMessageVariables()
-    {
-        return array_keys($this->abstractOptions['messageVariables']);
-    }
-
-    /**
-     * Returns the message templates from the validator
-     *
-     * @return array
-     */
-    public function getMessageTemplates()
-    {
-        return $this->abstractOptions['messageTemplates'];
-    }
-
-    /**
-     * Sets the validation failure message template for a particular key
-     *
-     * @param  string $messageString
-     * @param  string $messageKey     OPTIONAL
-     * @return AbstractValidator Provides a fluent interface
-     * @throws Exception\InvalidArgumentException
-     */
-    public function setMessage($messageString, $messageKey = null)
-    {
-        if ($messageKey === null) {
-            $keys = array_keys($this->abstractOptions['messageTemplates']);
-            foreach ($keys as $key) {
-                $this->setMessage($messageString, $key);
-            }
-            return $this;
-        }
-
-        if (!isset($this->abstractOptions['messageTemplates'][$messageKey])) {
-            throw new Exception\InvalidArgumentException("No message template exists for key '$messageKey'");
-        }
-
-        $this->abstractOptions['messageTemplates'][$messageKey] = $messageString;
-        return $this;
-    }
-
-    /**
-     * Sets validation failure message templates given as an array, where the array keys are the message keys,
-     * and the array values are the message template strings.
-     *
-     * @param  array $messages
-     * @return AbstractValidator
-     */
-    public function setMessages(array $messages)
-    {
-        foreach ($messages as $key => $message) {
-            $this->setMessage($message, $key);
-        }
-        return $this;
-    }
-
-    /**
-     * Magic function returns the value of the requested property, if and only if it is the value or a
-     * message variable.
-     *
-     * @param  string $property
-     * @return mixed
-     * @throws Exception\InvalidArgumentException
-     */
-    public function __get($property)
-    {
-        if ($property == 'value') {
-            return $this->value;
-        }
-
-        if (array_key_exists($property, $this->abstractOptions['messageVariables'])) {
-            $result = $this->abstractOptions['messageVariables'][$property];
-            if (is_array($result)) {
-                return $this->{key($result)}[current($result)];
-            }
-            return $this->{$result};
-        }
-
-        if (isset($this->messageVariables) && array_key_exists($property, $this->messageVariables)) {
-            $result = $this->{$this->messageVariables[$property]};
-            if (is_array($result)) {
-                return $this->{key($result)}[current($result)];
-            }
-            return $this->{$result};
-        }
-
-        throw new Exception\InvalidArgumentException("No property exists by the name '$property'");
-    }
-
-    /**
-     * Constructs and returns a validation failure message with the given message key and value.
-     *
-     * Returns null if and only if $messageKey does not correspond to an existing template.
-     *
-     * If a translator is available and a translation exists for $messageKey,
-     * the translation will be used.
-     *
-     * @param  string              $messageKey
-     * @param  string|array|object $value
-     * @return string
-     */
-    protected function createMessage($messageKey, $value)
-    {
-        if (!isset($this->abstractOptions['messageTemplates'][$messageKey])) {
-            return;
-        }
-
-        $message = $this->abstractOptions['messageTemplates'][$messageKey];
-
-        $message = $this->translateMessage($messageKey, $message);
-
-        if (is_object($value) &&
-            !in_array('__toString', get_class_methods($value))
-        ) {
-            $value = get_class($value) . ' object';
-        } elseif (is_array($value)) {
-            $value = var_export($value, 1);
-        } else {
-            $value = (string) $value;
-        }
-
-        if ($this->isValueObscured()) {
-            $value = str_repeat('*', strlen($value));
-        }
-
-        $message = str_replace('%value%', (string) $value, $message);
-        foreach ($this->abstractOptions['messageVariables'] as $ident => $property) {
-            if (is_array($property)) {
-                $value = $this->{key($property)}[current($property)];
-                if (is_array($value)) {
-                    $value = '[' . implode(', ', $value) . ']';
-                }
-            } else {
-                $value = $this->$property;
-            }
-            $message = str_replace("%$ident%", (string) $value, $message);
-        }
-
-        $length = self::getMessageLength();
-        if (($length > -1) && (strlen($message) > $length)) {
-            $message = substr($message, 0, ($length - 3)) . '...';
-        }
-
-        return $message;
-    }
-
-    /**
-     * @param  string $messageKey
-     * @param  string $value      OPTIONAL
-     * @return void
-     */
-    protected function error($messageKey, $value = null)
-    {
-        if ($messageKey === null) {
-            $keys = array_keys($this->abstractOptions['messageTemplates']);
-            $messageKey = current($keys);
-        }
-
-        if ($value === null) {
-            $value = $this->value;
-        }
-
-        $this->abstractOptions['messages'][$messageKey] = $this->createMessage($messageKey, $value);
-    }
-
-    /**
-     * Returns the validation value
-     *
-     * @return mixed Value to be validated
-     */
-    protected function getValue()
-    {
-        return $this->value;
-    }
-
-    /**
-     * Sets the value to be validated and clears the messages and errors arrays
-     *
-     * @param  mixed $value
-     * @return void
-     */
-    protected function setValue($value)
-    {
-        $this->value               = $value;
-        $this->abstractOptions['messages'] = array();
-    }
-
-    /**
-     * Set flag indicating whether or not value should be obfuscated in messages
-     *
-     * @param  bool $flag
-     * @return AbstractValidator
-     */
-    public function setValueObscured($flag)
-    {
-        $this->abstractOptions['valueObscured'] = (bool) $flag;
-        return $this;
-    }
-
-    /**
-     * Retrieve flag indicating whether or not value should be obfuscated in
-     * messages
-     *
-     * @return bool
-     */
-    public function isValueObscured()
-    {
-        return $this->abstractOptions['valueObscured'];
-    }
-
-    /**
-     * Set translation object
-     *
-     * @param  Translator\TranslatorInterface|null $translator
-     * @param  string          $textDomain (optional)
-     * @return AbstractValidator
-     * @throws Exception\InvalidArgumentException
-     */
-    public function setTranslator(Translator\TranslatorInterface $translator = null, $textDomain = null)
-    {
-        $this->abstractOptions['translator'] = $translator;
-        if (null !== $textDomain) {
-            $this->setTranslatorTextDomain($textDomain);
-        }
-        return $this;
-    }
-
-    /**
-     * Return translation object
-     *
-     * @return Translator\TranslatorInterface|null
-     */
-    public function getTranslator()
-    {
-        if (! $this->isTranslatorEnabled()) {
-            return;
-        }
-
-        if (null === $this->abstractOptions['translator']) {
-            $this->abstractOptions['translator'] = self::getDefaultTranslator();
-        }
-
-        return $this->abstractOptions['translator'];
-    }
-
-    /**
-     * Does this validator have its own specific translator?
-     *
-     * @return bool
-     */
-    public function hasTranslator()
-    {
-        return (bool) $this->abstractOptions['translator'];
-    }
-
-    /**
-     * Set translation text domain
-     *
-     * @param  string $textDomain
-     * @return AbstractValidator
-     */
-    public function setTranslatorTextDomain($textDomain = 'default')
-    {
-        $this->abstractOptions['translatorTextDomain'] = $textDomain;
-        return $this;
-    }
-
-    /**
-     * Return the translation text domain
-     *
-     * @return string
-     */
-    public function getTranslatorTextDomain()
-    {
-        if (null === $this->abstractOptions['translatorTextDomain']) {
-            $this->abstractOptions['translatorTextDomain'] =
-                self::getDefaultTranslatorTextDomain();
-        }
-        return $this->abstractOptions['translatorTextDomain'];
-    }
-
-    /**
-     * Set default translation object for all validate objects
-     *
-     * @param  Translator\TranslatorInterface|null $translator
-     * @param  string          $textDomain (optional)
-     * @return void
-     * @throws Exception\InvalidArgumentException
-     */
-    public static function setDefaultTranslator(Translator\TranslatorInterface $translator = null, $textDomain = null)
-    {
-        static::$defaultTranslator = $translator;
-        if (null !== $textDomain) {
-            self::setDefaultTranslatorTextDomain($textDomain);
-        }
-    }
-
-    /**
-     * Get default translation object for all validate objects
-     *
-     * @return Translator\TranslatorInterface|null
-     */
-    public static function getDefaultTranslator()
-    {
-        return static::$defaultTranslator;
-    }
-
-    /**
-     * Is there a default translation object set?
-     *
-     * @return bool
-     */
-    public static function hasDefaultTranslator()
-    {
-        return (bool) static::$defaultTranslator;
-    }
-
-    /**
-     * Set default translation text domain for all validate objects
-     *
-     * @param  string $textDomain
-     * @return void
-     */
-    public static function setDefaultTranslatorTextDomain($textDomain = 'default')
-    {
-        static::$defaultTranslatorTextDomain = $textDomain;
-    }
-
-    /**
-     * Get default translation text domain for all validate objects
-     *
-     * @return string
-     */
-    public static function getDefaultTranslatorTextDomain()
-    {
-        return static::$defaultTranslatorTextDomain;
-    }
-
-    /**
-     * Indicate whether or not translation should be enabled
-     *
-     * @param  bool $flag
-     * @return AbstractValidator
-     */
-    public function setTranslatorEnabled($flag = true)
-    {
-        $this->abstractOptions['translatorEnabled'] = (bool) $flag;
-        return $this;
-    }
-
-    /**
-     * Is translation enabled?
-     *
-     * @return bool
-     */
-    public function isTranslatorEnabled()
-    {
-        return $this->abstractOptions['translatorEnabled'];
-    }
-
-    /**
-     * Returns the maximum allowed message length
-     *
-     * @return int
-     */
-    public static function getMessageLength()
-    {
-        return static::$messageLength;
-    }
-
-    /**
-     * Sets the maximum allowed message length
-     *
-     * @param int $length
-     */
-    public static function setMessageLength($length = -1)
-    {
-        static::$messageLength = $length;
-    }
-
-    /**
-     * Translate a validation message
-     *
-     * @param  string $messageKey
-     * @param  string $message
-     * @return string
-     */
-    protected function translateMessage($messageKey, $message)
-    {
-        $translator = $this->getTranslator();
-        if (!$translator) {
-            return $message;
-        }
-
-        return $translator->translate($message, $this->getTranslatorTextDomain());
-    }
-}
diff --git a/civicrm/vendor/zendframework/zend-validator/src/Barcode.php b/civicrm/vendor/zendframework/zend-validator/src/Barcode.php
deleted file mode 100644
index cfa6cdc0aedec5ce82a88b063a96f34c87935336..0000000000000000000000000000000000000000
--- a/civicrm/vendor/zendframework/zend-validator/src/Barcode.php
+++ /dev/null
@@ -1,183 +0,0 @@
-<?php
-/**
- * Zend Framework (http://framework.zend.com/)
- *
- * @link      http://github.com/zendframework/zf2 for the canonical source repository
- * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
- * @license   http://framework.zend.com/license/new-bsd New BSD License
- */
-
-namespace Zend\Validator;
-
-use Traversable;
-
-class Barcode extends AbstractValidator
-{
-    const INVALID        = 'barcodeInvalid';
-    const FAILED         = 'barcodeFailed';
-    const INVALID_CHARS  = 'barcodeInvalidChars';
-    const INVALID_LENGTH = 'barcodeInvalidLength';
-
-    protected $messageTemplates = array(
-        self::FAILED         => "The input failed checksum validation",
-        self::INVALID_CHARS  => "The input contains invalid characters",
-        self::INVALID_LENGTH => "The input should have a length of %length% characters",
-        self::INVALID        => "Invalid type given. String expected",
-    );
-
-    /**
-     * Additional variables available for validation failure messages
-     *
-     * @var array
-     */
-    protected $messageVariables = array(
-        'length' => array('options' => 'length'),
-    );
-
-    protected $options = array(
-        'adapter'     => null,  // Barcode adapter Zend\Validator\Barcode\AbstractAdapter
-        'options'     => null,  // Options for this adapter
-        'length'      => null,
-        'useChecksum' => null,
-    );
-
-    /**
-     * Constructor for barcodes
-     *
-     * @param array|string $options Options to use
-     */
-    public function __construct($options = null)
-    {
-        if (!is_array($options) && !($options instanceof Traversable)) {
-            $options = array('adapter' => $options);
-        }
-
-        if (array_key_exists('options', $options)) {
-            $options['options'] = array('options' => $options['options']);
-        }
-
-        parent::__construct($options);
-    }
-
-    /**
-     * Returns the set adapter
-     *
-     * @return Barcode\AbstractAdapter
-     */
-    public function getAdapter()
-    {
-        if (!($this->options['adapter'] instanceof Barcode\AdapterInterface)) {
-            $this->setAdapter('Ean13');
-        }
-
-        return $this->options['adapter'];
-    }
-
-    /**
-     * Sets a new barcode adapter
-     *
-     * @param  string|Barcode\AbstractAdapter $adapter Barcode adapter to use
-     * @param  array  $options Options for this adapter
-     * @return Barcode
-     * @throws Exception\InvalidArgumentException
-     */
-    public function setAdapter($adapter, $options = null)
-    {
-        if (is_string($adapter)) {
-            $adapter = ucfirst(strtolower($adapter));
-            $adapter = 'Zend\\Validator\\Barcode\\' . $adapter;
-
-            if (!class_exists($adapter)) {
-                throw new Exception\InvalidArgumentException('Barcode adapter matching "' . $adapter . '" not found');
-            }
-
-            $adapter = new $adapter($options);
-        }
-
-        if (!$adapter instanceof Barcode\AdapterInterface) {
-            throw new Exception\InvalidArgumentException(
-                sprintf(
-                    "Adapter %s does not implement Zend\\Validator\\Barcode\\AdapterInterface",
-                    (is_object($adapter) ? get_class($adapter) : gettype($adapter))
-                )
-            );
-        }
-
-        $this->options['adapter'] = $adapter;
-
-        return $this;
-    }
-
-    /**
-     * Returns the checksum option
-     *
-     * @return string
-     */
-    public function getChecksum()
-    {
-        return $this->getAdapter()->getChecksum();
-    }
-
-    /**
-     * Sets if checksum should be validated, if no value is given the actual setting is returned
-     *
-     * @param  bool $checksum
-     * @return bool
-     */
-    public function useChecksum($checksum = null)
-    {
-        return $this->getAdapter()->useChecksum($checksum);
-    }
-
-    /**
-     * Defined by Zend\Validator\ValidatorInterface
-     *
-     * Returns true if and only if $value contains a valid barcode
-     *
-     * @param  string $value
-     * @return bool
-     */
-    public function isValid($value)
-    {
-        if (!is_string($value)) {
-            $this->error(self::INVALID);
-            return false;
-        }
-
-        $this->setValue($value);
-        $adapter                 = $this->getAdapter();
-        $this->options['length'] = $adapter->getLength();
-        $result                  = $adapter->hasValidLength($value);
-        if (!$result) {
-            if (is_array($this->options['length'])) {
-                $temp = $this->options['length'];
-                $this->options['length'] = "";
-                foreach ($temp as $length) {
-                    $this->options['length'] .= "/";
-                    $this->options['length'] .= $length;
-                }
-
-                $this->options['length'] = substr($this->options['length'], 1);
-            }
-
-            $this->error(self::INVALID_LENGTH);
-            return false;
-        }
-
-        $result = $adapter->hasValidCharacters($value);
-        if (!$result) {
-            $this->error(self::INVALID_CHARS);
-            return false;
-        }
-
-        if ($this->useChecksum(null)) {
-            $result = $adapter->hasValidChecksum($value);
-            if (!$result) {
-                $this->error(self::FAILED);
-                return false;
-            }
-        }
-
-        return true;
-    }
-}
diff --git a/civicrm/vendor/zendframework/zend-validator/src/Barcode/AbstractAdapter.php b/civicrm/vendor/zendframework/zend-validator/src/Barcode/AbstractAdapter.php
deleted file mode 100644
index a2842d849a791d8268a71fb15a864eb3f2f26d74..0000000000000000000000000000000000000000
--- a/civicrm/vendor/zendframework/zend-validator/src/Barcode/AbstractAdapter.php
+++ /dev/null
@@ -1,310 +0,0 @@
-<?php
-/**
- * Zend Framework (http://framework.zend.com/)
- *
- * @link      http://github.com/zendframework/zf2 for the canonical source repository
- * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
- * @license   http://framework.zend.com/license/new-bsd New BSD License
- */
-
-namespace Zend\Validator\Barcode;
-
-abstract class AbstractAdapter implements AdapterInterface
-{
-    /**
-     * Allowed options for this adapter
-     * @var array
-     */
-    protected $options = array(
-        'length'     => null,   // Allowed barcode lengths, integer, array, string
-        'characters' => null,   // Allowed barcode characters
-        'checksum'   => null,   // Callback to checksum function
-        'useChecksum' => true,  // Is a checksum value included?, boolean
-    );
-
-    /**
-     * Checks the length of a barcode
-     *
-     * @param  string $value The barcode to check for proper length
-     * @return bool
-     */
-    public function hasValidLength($value)
-    {
-        if (!is_string($value)) {
-            return false;
-        }
-
-        $fixum  = strlen($value);
-        $found  = false;
-        $length = $this->getLength();
-        if (is_array($length)) {
-            foreach ($length as $value) {
-                if ($fixum == $value) {
-                    $found = true;
-                }
-
-                if ($value == -1) {
-                    $found = true;
-                }
-            }
-        } elseif ($fixum == $length) {
-            $found = true;
-        } elseif ($length == -1) {
-            $found = true;
-        } elseif ($length == 'even') {
-            $count = $fixum % 2;
-            $found = (0 == $count);
-        } elseif ($length == 'odd') {
-            $count = $fixum % 2;
-            $found = (1 == $count);
-        }
-
-        return $found;
-    }
-
-    /**
-     * Checks for allowed characters within the barcode
-     *
-     * @param  string $value The barcode to check for allowed characters
-     * @return bool
-     */
-    public function hasValidCharacters($value)
-    {
-        if (!is_string($value)) {
-            return false;
-        }
-
-        $characters = $this->getCharacters();
-        if ($characters == 128) {
-            for ($x = 0; $x < 128; ++$x) {
-                $value = str_replace(chr($x), '', $value);
-            }
-        } else {
-            $chars = str_split($characters);
-            foreach ($chars as $char) {
-                $value = str_replace($char, '', $value);
-            }
-        }
-
-        if (strlen($value) > 0) {
-            return false;
-        }
-
-        return true;
-    }
-
-    /**
-     * Validates the checksum
-     *
-     * @param  string $value The barcode to check the checksum for
-     * @return bool
-     */
-    public function hasValidChecksum($value)
-    {
-        $checksum = $this->getChecksum();
-        if (!empty($checksum)) {
-            if (method_exists($this, $checksum)) {
-                return $this->$checksum($value);
-            }
-        }
-
-        return false;
-    }
-
-    /**
-     * Returns the allowed barcode length
-     *
-     * @return int|array
-     */
-    public function getLength()
-    {
-        return $this->options['length'];
-    }
-
-    /**
-     * Returns the allowed characters
-     *
-     * @return int|string|array
-     */
-    public function getCharacters()
-    {
-        return $this->options['characters'];
-    }
-
-    /**
-     * Returns the checksum function name
-     *
-     */
-    public function getChecksum()
-    {
-        return $this->options['checksum'];
-    }
-
-    /**
-     * Sets the checksum validation method
-     *
-     * @param callable $checksum Checksum method to call
-     * @return AbstractAdapter
-     */
-    protected function setChecksum($checksum)
-    {
-        $this->options['checksum'] = $checksum;
-        return $this;
-    }
-
-    /**
-     * Sets the checksum validation, if no value is given, the actual setting is returned
-     *
-     * @param  bool $check
-     * @return AbstractAdapter|bool
-     */
-    public function useChecksum($check = null)
-    {
-        if ($check === null) {
-            return $this->options['useChecksum'];
-        }
-
-        $this->options['useChecksum'] = (bool) $check;
-        return $this;
-    }
-
-    /**
-     * Sets the length of this barcode
-     *
-     * @param int|array $length
-     * @return AbstractAdapter
-     */
-    protected function setLength($length)
-    {
-        $this->options['length'] = $length;
-        return $this;
-    }
-
-    /**
-     * Sets the allowed characters of this barcode
-     *
-     * @param int $characters
-     * @return AbstractAdapter
-     */
-    protected function setCharacters($characters)
-    {
-        $this->options['characters'] = $characters;
-        return $this;
-    }
-
-    /**
-     * Validates the checksum (Modulo 10)
-     * GTIN implementation factor 3
-     *
-     * @param  string $value The barcode to validate
-     * @return bool
-     */
-    protected function gtin($value)
-    {
-        $barcode = substr($value, 0, -1);
-        $sum     = 0;
-        $length  = strlen($barcode) - 1;
-
-        for ($i = 0; $i <= $length; $i++) {
-            if (($i % 2) === 0) {
-                $sum += $barcode[$length - $i] * 3;
-            } else {
-                $sum += $barcode[$length - $i];
-            }
-        }
-
-        $calc     = $sum % 10;
-        $checksum = ($calc === 0) ? 0 : (10 - $calc);
-        if ($value[$length + 1] != $checksum) {
-            return false;
-        }
-
-        return true;
-    }
-
-    /**
-     * Validates the checksum (Modulo 10)
-     * IDENTCODE implementation factors 9 and 4
-     *
-     * @param  string $value The barcode to validate
-     * @return bool
-     */
-    protected function identcode($value)
-    {
-        $barcode = substr($value, 0, -1);
-        $sum     = 0;
-        $length  = strlen($value) - 2;
-
-        for ($i = 0; $i <= $length; $i++) {
-            if (($i % 2) === 0) {
-                $sum += $barcode[$length - $i] * 4;
-            } else {
-                $sum += $barcode[$length - $i] * 9;
-            }
-        }
-
-        $calc     = $sum % 10;
-        $checksum = ($calc === 0) ? 0 : (10 - $calc);
-        if ($value[$length + 1] != $checksum) {
-            return false;
-        }
-
-        return true;
-    }
-
-    /**
-     * Validates the checksum (Modulo 10)
-     * CODE25 implementation factor 3
-     *
-     * @param  string $value The barcode to validate
-     * @return bool
-     */
-    protected function code25($value)
-    {
-        $barcode = substr($value, 0, -1);
-        $sum     = 0;
-        $length  = strlen($barcode) - 1;
-
-        for ($i = 0; $i <= $length; $i++) {
-            if (($i % 2) === 0) {
-                $sum += $barcode[$i] * 3;
-            } else {
-                $sum += $barcode[$i];
-            }
-        }
-
-        $calc     = $sum % 10;
-        $checksum = ($calc === 0) ? 0 : (10 - $calc);
-        if ($value[$length + 1] != $checksum) {
-            return false;
-        }
-
-        return true;
-    }
-
-    /**
-     * Validates the checksum ()
-     * POSTNET implementation
-     *
-     * @param  string $value The barcode to validate
-     * @return bool
-     */
-    protected function postnet($value)
-    {
-        $checksum = substr($value, -1, 1);
-        $values   = str_split(substr($value, 0, -1));
-
-        $check = 0;
-        foreach ($values as $row) {
-            $check += $row;
-        }
-
-        $check %= 10;
-        $check = 10 - $check;
-        if ($check == $checksum) {
-            return true;
-        }
-
-        return false;
-    }
-}
diff --git a/civicrm/vendor/zendframework/zend-validator/src/Barcode/AdapterInterface.php b/civicrm/vendor/zendframework/zend-validator/src/Barcode/AdapterInterface.php
deleted file mode 100644
index f30fe93ee1884fc02b3792f8acab4e5e408a2909..0000000000000000000000000000000000000000
--- a/civicrm/vendor/zendframework/zend-validator/src/Barcode/AdapterInterface.php
+++ /dev/null
@@ -1,66 +0,0 @@
-<?php
-/**
- * Zend Framework (http://framework.zend.com/)
- *
- * @link      http://github.com/zendframework/zf2 for the canonical source repository
- * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
- * @license   http://framework.zend.com/license/new-bsd New BSD License
- */
-
-namespace Zend\Validator\Barcode;
-
-interface AdapterInterface
-{
-    /**
-     * Checks the length of a barcode
-     *
-     * @param  string $value  The barcode to check for proper length
-     * @return bool
-     */
-    public function hasValidLength($value);
-
-    /**
-     * Checks for allowed characters within the barcode
-     *
-     * @param  string $value The barcode to check for allowed characters
-     * @return bool
-     */
-    public function hasValidCharacters($value);
-
-    /**
-     * Validates the checksum
-     *
-     * @param string $value The barcode to check the checksum for
-     * @return bool
-     */
-    public function hasValidChecksum($value);
-
-    /**
-     * Returns the allowed barcode length
-     *
-     * @return int|array
-     */
-    public function getLength();
-
-    /**
-     * Returns the allowed characters
-     *
-     * @return int|string|array
-     */
-    public function getCharacters();
-
-    /**
-     * Returns if barcode uses a checksum
-     *
-     * @return bool
-     */
-    public function getChecksum();
-
-    /**
-     * Sets the checksum validation, if no value is given, the actual setting is returned
-     *
-     * @param  bool $check
-     * @return AbstractAdapter|bool
-     */
-    public function useChecksum($check = null);
-}
diff --git a/civicrm/vendor/zendframework/zend-validator/src/Barcode/Codabar.php b/civicrm/vendor/zendframework/zend-validator/src/Barcode/Codabar.php
deleted file mode 100644
index eca14e2121aaed36d00b3cdeb9d2c2c4a187f3b2..0000000000000000000000000000000000000000
--- a/civicrm/vendor/zendframework/zend-validator/src/Barcode/Codabar.php
+++ /dev/null
@@ -1,66 +0,0 @@
-<?php
-/**
- * Zend Framework (http://framework.zend.com/)
- *
- * @link      http://github.com/zendframework/zf2 for the canonical source repository
- * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
- * @license   http://framework.zend.com/license/new-bsd New BSD License
- */
-
-namespace Zend\Validator\Barcode;
-
-class Codabar extends AbstractAdapter
-{
-    /**
-     * Constructor for this barcode adapter
-     */
-    public function __construct()
-    {
-        $this->setLength(-1);
-        $this->setCharacters('0123456789-$:/.+ABCDTN*E');
-        $this->useChecksum(false);
-    }
-
-    /**
-     * Checks for allowed characters
-     * @see Zend\Validator\Barcode.AbstractAdapter::checkChars()
-     */
-    public function hasValidCharacters($value)
-    {
-        if (strpbrk($value, 'ABCD')) {
-            $first = $value[0];
-            if (!strpbrk($first, 'ABCD')) {
-                // Missing start char
-                return false;
-            }
-
-            $last = substr($value, -1, 1);
-            if (!strpbrk($last, 'ABCD')) {
-                // Missing stop char
-                return false;
-            }
-
-            $value = substr($value, 1, -1);
-        } elseif (strpbrk($value, 'TN*E')) {
-            $first = $value[0];
-            if (!strpbrk($first, 'TN*E')) {
-                // Missing start char
-                return false;
-            }
-
-            $last = substr($value, -1, 1);
-            if (!strpbrk($last, 'TN*E')) {
-                // Missing stop char
-                return false;
-            }
-
-            $value = substr($value, 1, -1);
-        }
-
-        $chars  = $this->getCharacters();
-        $this->setCharacters('0123456789-$:/.+');
-        $result = parent::hasValidCharacters($value);
-        $this->setCharacters($chars);
-        return $result;
-    }
-}
diff --git a/civicrm/vendor/zendframework/zend-validator/src/Barcode/Code128.php b/civicrm/vendor/zendframework/zend-validator/src/Barcode/Code128.php
deleted file mode 100644
index 06a0b5e603405955f89dc0c074b814112f5584e2..0000000000000000000000000000000000000000
--- a/civicrm/vendor/zendframework/zend-validator/src/Barcode/Code128.php
+++ /dev/null
@@ -1,448 +0,0 @@
-<?php
-/**
- * Zend Framework (http://framework.zend.com/)
- *
- * @link      http://github.com/zendframework/zf2 for the canonical source repository
- * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
- * @license   http://framework.zend.com/license/new-bsd New BSD License
- */
-
-namespace Zend\Validator\Barcode;
-
-use Zend\Stdlib\StringUtils;
-use Zend\Stdlib\StringWrapper\StringWrapperInterface;
-use Zend\Validator\Exception;
-
-class Code128 extends AbstractAdapter
-{
-    /**
-     * The used string wrapper used for basic UTF-8 string functions
-     *
-     * @var StringWrapperInterface
-     */
-    protected $utf8StringWrapper;
-
-    /**
-     * Constructor for this barcode adapter
-     */
-    public function __construct()
-    {
-        $this->setLength(-1);
-        $this->setCharacters(array(
-            'A' => array(
-                 0 => ' ',  1 => '!',  2 => '"',  3 => '#',  4 => '$',  5 => '%',  6 => '&',  7 => "'",
-                 8 => '(',  9 => ')', 10 => '*', 11 => '+', 12 => ',', 13 => '-', 14 => '.', 15 => '/',
-                16 => '0', 17 => '1', 18 => '2', 19 => '3', 20 => '4', 21 => '5', 22 => '6', 23 => '7',
-                24 => '8', 25 => '9', 26 => ':', 27 => ';', 28 => '<', 29 => '=', 30 => '>', 31 => '?',
-                32 => '@', 33 => 'A', 34 => 'B', 35 => 'C', 36 => 'D', 37 => 'E', 38 => 'F', 39 => 'G',
-                40 => 'H', 41 => 'I', 42 => 'J', 43 => 'K', 44 => 'L', 45 => 'M', 46 => 'N', 47 => 'O',
-                48 => 'P', 49 => 'Q', 50 => 'R', 51 => 'S', 52 => 'T', 53 => 'U', 54 => 'V', 55 => 'W',
-                56 => 'X', 57 => 'Y', 58 => 'Z', 59 => '[', 60 => '\\', 61 => ']', 62 => '^', 63 => '_',
-                64 =>0x00, 65 =>0x01, 66 =>0x02, 67 =>0x03, 68 =>0x04, 69 =>0x05, 70 =>0x06, 71 =>0x07,
-                72 =>0x08, 73 =>0x09, 74 =>0x0A, 75 =>0x0B, 76 =>0x0C, 77 =>0x0D, 78 =>0x0E, 79 =>0x0F,
-                80 =>0x10, 81 =>0x11, 82 =>0x12, 83 =>0x13, 84 =>0x14, 85 =>0x15, 86 =>0x16, 87 =>0x17,
-                88 =>0x18, 89 =>0x19, 90 =>0x1A, 91 =>0x1B, 92 =>0x1C, 93 =>0x1D, 94 =>0x1E, 95 =>0x1F,
-                96 => 'Ç', 97 => 'ü', 98 => 'é', 99 => 'â', 100 => 'ä', 101 => 'à', 102 => 'å', 103 => '‡',
-               104 => 'ˆ', 105 => '‰', 106 => 'Š'),
-            'B' => array(
-                 0 => ' ',  1 => '!',  2 => '"',  3 => '#',  4 => '$',  5 => '%',  6 => '&',  7 => "'",
-                 8 => '(',  9 => ')', 10 => '*', 11 => '+', 12 => ',', 13 => '-', 14 => '.', 15 => '/',
-                16 => '0', 17 => '1', 18 => '2', 19 => '3', 20 => '4', 21 => '5', 22 => '6', 23 => '7',
-                24 => '8', 25 => '9', 26 => ':', 27 => ';', 28 => '<', 29 => '=', 30 => '>', 31 => '?',
-                32 => '@', 33 => 'A', 34 => 'B', 35 => 'C', 36 => 'D', 37 => 'E', 38 => 'F', 39 => 'G',
-                40 => 'H', 41 => 'I', 42 => 'J', 43 => 'K', 44 => 'L', 45 => 'M', 46 => 'N', 47 => 'O',
-                48 => 'P', 49 => 'Q', 50 => 'R', 51 => 'S', 52 => 'T', 53 => 'U', 54 => 'V', 55 => 'W',
-                56 => 'X', 57 => 'Y', 58 => 'Z', 59 => '[', 60 => '\\', 61 => ']', 62 => '^', 63 => '_',
-                64 => '`', 65 => 'a', 66 => 'b', 67 => 'c', 68 => 'd', 69 => 'e', 70 => 'f', 71 => 'g',
-                72 => 'h', 73 => 'i', 74 => 'j', 75 => 'k', 76 => 'l', 77 => 'm', 78 => 'n', 79 => 'o',
-                80 => 'p', 81 => 'q', 82 => 'r', 83 => 's', 84 => 't', 85 => 'u', 86 => 'v', 87 => 'w',
-                88 => 'x', 89 => 'y', 90 => 'z', 91 => '{', 92 => '|', 93 => '}', 94 => '~', 95 =>0x7F,
-                96 => 'Ç', 97 => 'ü', 98 => 'é', 99 => 'â', 100 => 'ä', 101 => 'à', 102 => 'å', 103 => '‡',
-               104 => 'ˆ', 105 => '‰', 106 => 'Š'),
-            'C' => array(
-                 0 => '00',  1 => '01',  2 => '02',  3 => '03',  4 => '04',  5 => '05',  6 => '06',  7 => '07',
-                 8 => '08',  9 => '09', 10 => '10', 11 => '11', 12 => '12', 13 => '13', 14 => '14', 15 => '15',
-                16 => '16', 17 => '17', 18 => '18', 19 => '19', 20 => '20', 21 => '21', 22 => '22', 23 => '23',
-                24 => '24', 25 => '25', 26 => '26', 27 => '27', 28 => '28', 29 => '29', 30 => '30', 31 => '31',
-                32 => '32', 33 => '33', 34 => '34', 35 => '35', 36 => '36', 37 => '37', 38 => '38', 39 => '39',
-                40 => '40', 41 => '41', 42 => '42', 43 => '43', 44 => '44', 45 => '45', 46 => '46', 47 => '47',
-                48 => '48', 49 => '49', 50 => '50', 51 => '51', 52 => '52', 53 => '53', 54 => '54', 55 => '55',
-                56 => '56', 57 => '57', 58 => '58', 59 => '59', 60 => '60', 61 => '61', 62 => '62', 63 => '63',
-                64 => '64', 65 => '65', 66 => '66', 67 => '67', 68 => '68', 69 => '69', 70 => '70', 71 => '71',
-                72 => '72', 73 => '73', 74 => '74', 75 => '75', 76 => '76', 77 => '77', 78 => '78', 79 => '79',
-                80 => '80', 81 => '81', 82 => '82', 83 => '83', 84 => '84', 85 => '85', 86 => '86', 87 => '87',
-                88 => '88', 89 => '89', 90 => '90', 91 => '91', 92 => '92', 93 => '93', 94 => '94', 95 => '95',
-                96 => '96', 97 => '97', 98 => '98', 99 => '99', 100 => 'ä', 101 => 'à', 102 => 'å', 103 => '‡',
-               104 => 'ˆ', 105 => '‰', 106 => 'Š')
-        ));
-        $this->setChecksum('code128');
-    }
-
-    public function setUtf8StringWrapper(StringWrapperInterface $utf8StringWrapper)
-    {
-        if (!$utf8StringWrapper->isSupported('UTF-8')) {
-            throw new Exception\InvalidArgumentException(
-                "The string wrapper needs to support UTF-8 character encoding"
-            );
-        }
-        $this->utf8StringWrapper = $utf8StringWrapper;
-    }
-
-    /**
-     * Get the string wrapper supporting UTF-8 character encoding
-     *
-     * @return StringWrapperInterface
-     */
-    public function getUtf8StringWrapper()
-    {
-        if (!$this->utf8StringWrapper) {
-            $this->utf8StringWrapper = StringUtils::getWrapper('UTF-8');
-        }
-        return $this->utf8StringWrapper;
-    }
-
-    /**
-     * Checks for allowed characters within the barcode
-     *
-     * @param  string $value The barcode to check for allowed characters
-     * @return bool
-     */
-    public function hasValidCharacters($value)
-    {
-        if (!is_string($value)) {
-            return false;
-        }
-
-        // get used string wrapper for UTF-8 character encoding
-        $strWrapper = $this->getUtf8StringWrapper();
-
-        // detect starting charset
-        $set        = $this->getCodingSet($value);
-        $read       = $set;
-        if ($set != '') {
-            $value = $strWrapper->substr($value, 1, null);
-        }
-
-        // process barcode
-        while ($value != '') {
-            $char = $strWrapper->substr($value, 0, 1);
-
-            switch ($char) {
-                // Function definition
-                case 'Ç':
-                case 'ü':
-                case 'Ã¥':
-                    break;
-
-                // Switch 1 char between A and B
-                case 'é':
-                    if ($set == 'A') {
-                        $read = 'B';
-                    } elseif ($set == 'B') {
-                        $read = 'A';
-                    }
-                    break;
-
-                // Switch to C
-                case 'â':
-                    $set = 'C';
-                    $read = 'C';
-                    break;
-
-                // Switch to B
-                case 'ä':
-                    $set  = 'B';
-                    $read = 'B';
-                    break;
-
-                // Switch to A
-                case 'à':
-                    $set  = 'A';
-                    $read = 'A';
-                    break;
-
-                // Doubled start character
-                case '‡':
-                case 'ˆ':
-                case '‰':
-                    return false;
-
-                // Chars after the stop character
-                case 'Å ':
-                    break 2;
-
-                default:
-                    // Does the char exist within the charset to read?
-                    if ($this->ord128($char, $read) == -1) {
-                        return false;
-                    }
-
-                    break;
-            }
-
-            $value = $strWrapper->substr($value, 1, null);
-            $read  = $set;
-        }
-
-        if (($value != '') && ($strWrapper->strlen($value) != 1)) {
-            return false;
-        }
-
-        return true;
-    }
-
-    /**
-     * Validates the checksum ()
-     *
-     * @param  string $value The barcode to validate
-     * @return bool
-     */
-    protected function code128($value)
-    {
-        $sum        = 0;
-        $pos        = 1;
-        $set        = $this->getCodingSet($value);
-        $read       = $set;
-        $usecheck   = $this->useChecksum(null);
-        $strWrapper = $this->getUtf8StringWrapper();
-        $char       = $strWrapper->substr($value, 0, 1);
-        if ($char == '‡') {
-            $sum = 103;
-        } elseif ($char == 'ˆ') {
-            $sum = 104;
-        } elseif ($char == '‰') {
-            $sum = 105;
-        } elseif ($usecheck == true) {
-            // no start value, unable to detect a proper checksum
-            return false;
-        }
-
-        $value = $strWrapper->substr($value, 1, null);
-        while ($strWrapper->strpos($value, 'Å ') || ($value != '')) {
-            $char = $strWrapper->substr($value, 0, 1);
-            if ($read == 'C') {
-                $char = $strWrapper->substr($value, 0, 2);
-            }
-
-            switch ($char) {
-                // Function definition
-                case 'Ç':
-                case 'ü':
-                case 'Ã¥':
-                    $sum += ($pos * $this->ord128($char, $set));
-                    break;
-
-                case 'é':
-                    $sum += ($pos * $this->ord128($char, $set));
-                    if ($set == 'A') {
-                        $read = 'B';
-                    } elseif ($set == 'B') {
-                        $read = 'A';
-                    }
-                    break;
-
-                // Switch to C
-                case 'â':
-                    $sum += ($pos * $this->ord128($char, $set));
-                    $set = 'C';
-                    $read = 'C';
-                    break;
-
-                // Switch to B
-                case 'ä':
-                    $sum += ($pos * $this->ord128($char, $set));
-                    $set  = 'B';
-                    $read = 'B';
-                    break;
-
-                // Switch to A
-                case 'à':
-                    $sum += ($pos * $this->ord128($char, $set));
-                    $set  = 'A';
-                    $read = 'A';
-                    break;
-
-                case '‡':
-                case 'ˆ':
-                case '‰':
-                    return false;
-                    break;
-
-                default:
-                    // Does the char exist within the charset to read?
-                    if ($this->ord128($char, $read) == -1) {
-                        return false;
-                    }
-
-                    $sum += ($pos * $this->ord128($char, $set));
-                    break;
-            }
-
-            $value = $strWrapper->substr($value, 1);
-            ++$pos;
-            if (($strWrapper->strpos($value, 'Å ') == 1) && ($strWrapper->strlen($value) == 2)) {
-                // break by stop and checksum char
-                break;
-            }
-            $read  = $set;
-        }
-
-        if (($strWrapper->strpos($value, 'Å ') != 1) || ($strWrapper->strlen($value) != 2)) {
-            // return false if checksum is not readable and true if no startvalue is detected
-            return (!$usecheck);
-        }
-
-        $mod = $sum % 103;
-        if ($strWrapper->substr($value, 0, 1) == $this->chr128($mod, $set)) {
-            return true;
-        }
-
-        return false;
-    }
-
-    /**
-     * Returns the coding set for a barcode
-     *
-     * @param string $value Barcode
-     * @return string
-     */
-    protected function getCodingSet($value)
-    {
-        $value = $this->getUtf8StringWrapper()->substr($value, 0, 1);
-        switch ($value) {
-            case '‡':
-                return 'A';
-                break;
-            case 'ˆ':
-                return 'B';
-                break;
-            case '‰':
-                return 'C';
-                break;
-        }
-
-        return '';
-    }
-
-    /**
-     * Internal method to return the code128 integer from an ascii value
-     *
-     * Table A
-     *    ASCII       CODE128
-     *  32 to  95 ==  0 to  63
-     *   0 to  31 == 64 to  95
-     * 128 to 138 == 96 to 106
-     *
-     * Table B
-     *    ASCII       CODE128
-     *  32 to 138 == 0 to 106
-     *
-     * Table C
-     *    ASCII       CODE128
-     *  "00" to "99" ==   0 to  99
-     *   132 to  138 == 100 to 106
-     *
-     * @param string $value
-     * @param string $set
-     * @return int
-     */
-    protected function ord128($value, $set)
-    {
-        $ord = ord($value);
-        if ($set == 'A') {
-            if ($ord < 32) {
-                return ($ord + 64);
-            } elseif ($ord < 96) {
-                return ($ord - 32);
-            } elseif ($ord > 138) {
-                return -1;
-            } else {
-                return ($ord - 32);
-            }
-        } elseif ($set == 'B') {
-            if ($ord < 32) {
-                return -1;
-            } elseif ($ord <= 138) {
-                return ($ord - 32);
-            } else {
-                return -1;
-            }
-        } elseif ($set == 'C') {
-            $val = (int) $value;
-            if (($val >= 0) && ($val <= 99)) {
-                return $val;
-            } elseif (($ord >= 132) && ($ord <= 138)) {
-                return ($ord - 32);
-            } else {
-                return -1;
-            }
-        } else {
-            if ($ord < 32) {
-                return ($ord +64);
-            } elseif ($ord <= 138) {
-                return ($ord - 32);
-            } else {
-                return -1;
-            }
-        }
-    }
-
-    /**
-     * Internal Method to return the ascii value from a code128 integer
-     *
-     * Table A
-     *    ASCII       CODE128
-     *  32 to  95 ==  0 to  63
-     *   0 to  31 == 64 to  95
-     * 128 to 138 == 96 to 106
-     *
-     * Table B
-     *    ASCII       CODE128
-     *  32 to 138 == 0 to 106
-     *
-     * Table C
-     *    ASCII       CODE128
-     *  "00" to "99" ==   0 to  99
-     *   132 to  138 == 100 to 106
-     *
-     * @param int $value
-     * @param string $set
-     * @return string
-     */
-    protected function chr128($value, $set)
-    {
-        if ($set == 'A') {
-            if ($value < 64) {
-                return chr($value + 32);
-            } elseif ($value < 96) {
-                return chr($value - 64);
-            } elseif ($value > 106) {
-                return -1;
-            } else {
-                return chr($value + 32);
-            }
-        } elseif ($set == 'B') {
-            if ($value > 106) {
-                return -1;
-            } else {
-                return chr($value + 32);
-            }
-        } elseif ($set == 'C') {
-            if (($value >= 0) && ($value <= 9)) {
-                return "0" . (string) $value;
-            } elseif ($value <= 99) {
-                return (string) $value;
-            } elseif ($value <= 106) {
-                return chr($value + 32);
-            } else {
-                return -1;
-            }
-        } else {
-            if ($value <= 106) {
-                return ($value + 32);
-            } else {
-                return -1;
-            }
-        }
-    }
-}
diff --git a/civicrm/vendor/zendframework/zend-validator/src/Barcode/Code25.php b/civicrm/vendor/zendframework/zend-validator/src/Barcode/Code25.php
deleted file mode 100644
index 8235c437d12df2fe30cfce714c34b2e2b7cb6db2..0000000000000000000000000000000000000000
--- a/civicrm/vendor/zendframework/zend-validator/src/Barcode/Code25.php
+++ /dev/null
@@ -1,24 +0,0 @@
-<?php
-/**
- * Zend Framework (http://framework.zend.com/)
- *
- * @link      http://github.com/zendframework/zf2 for the canonical source repository
- * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
- * @license   http://framework.zend.com/license/new-bsd New BSD License
- */
-
-namespace Zend\Validator\Barcode;
-
-class Code25 extends AbstractAdapter
-{
-    /**
-     * Constructor for this barcode adapter
-     */
-    public function __construct()
-    {
-        $this->setLength(-1);
-        $this->setCharacters('0123456789');
-        $this->setChecksum('code25');
-        $this->useChecksum(false);
-    }
-}
diff --git a/civicrm/vendor/zendframework/zend-validator/src/Barcode/Code25interleaved.php b/civicrm/vendor/zendframework/zend-validator/src/Barcode/Code25interleaved.php
deleted file mode 100644
index cb41c76e5f1ff97d9eeb1572f7eb4d55c0a67bf0..0000000000000000000000000000000000000000
--- a/civicrm/vendor/zendframework/zend-validator/src/Barcode/Code25interleaved.php
+++ /dev/null
@@ -1,26 +0,0 @@
-<?php
-/**
- * Zend Framework (http://framework.zend.com/)
- *
- * @link      http://github.com/zendframework/zf2 for the canonical source repository
- * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
- * @license   http://framework.zend.com/license/new-bsd New BSD License
- */
-
-namespace Zend\Validator\Barcode;
-
-class Code25interleaved extends AbstractAdapter
-{
-    /**
-     * Constructor
-     *
-     * Sets check flag to false.
-     */
-    public function __construct()
-    {
-        $this->setLength('even');
-        $this->setCharacters('0123456789');
-        $this->setChecksum('code25');
-        $this->useChecksum(false);
-    }
-}
diff --git a/civicrm/vendor/zendframework/zend-validator/src/Barcode/Code39.php b/civicrm/vendor/zendframework/zend-validator/src/Barcode/Code39.php
deleted file mode 100644
index 01208ce2c4a974fbb9302efa11d1896b4c91ce26..0000000000000000000000000000000000000000
--- a/civicrm/vendor/zendframework/zend-validator/src/Barcode/Code39.php
+++ /dev/null
@@ -1,60 +0,0 @@
-<?php
-/**
- * Zend Framework (http://framework.zend.com/)
- *
- * @link      http://github.com/zendframework/zf2 for the canonical source repository
- * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
- * @license   http://framework.zend.com/license/new-bsd New BSD License
- */
-
-namespace Zend\Validator\Barcode;
-
-class Code39 extends AbstractAdapter
-{
-    /**
-     * @var array
-     */
-    protected $check = array(
-        '0' =>  0, '1' =>  1, '2' =>  2, '3' =>  3, '4' =>  4, '5' =>  5, '6' =>  6,
-        '7' =>  7, '8' =>  8, '9' =>  9, 'A' => 10, 'B' => 11, 'C' => 12, 'D' => 13,
-        'E' => 14, 'F' => 15, 'G' => 16, 'H' => 17, 'I' => 18, 'J' => 19, 'K' => 20,
-        'L' => 21, 'M' => 22, 'N' => 23, 'O' => 24, 'P' => 25, 'Q' => 26, 'R' => 27,
-        'S' => 28, 'T' => 29, 'U' => 30, 'V' => 31, 'W' => 32, 'X' => 33, 'Y' => 34,
-        'Z' => 35, '-' => 36, '.' => 37, ' ' => 38, '$' => 39, '/' => 40, '+' => 41,
-        '%' => 42,
-    );
-
-    /**
-     * Constructor for this barcode adapter
-     */
-    public function __construct()
-    {
-        $this->setLength(-1);
-        $this->setCharacters('0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ -.$/+%');
-        $this->setChecksum('code39');
-        $this->useChecksum(false);
-    }
-
-    /**
-     * Validates the checksum (Modulo 43)
-     *
-     * @param  string $value The barcode to validate
-     * @return bool
-     */
-    protected function code39($value)
-    {
-        $checksum = substr($value, -1, 1);
-        $value    = str_split(substr($value, 0, -1));
-        $count    = 0;
-        foreach ($value as $char) {
-            $count += $this->check[$char];
-        }
-
-        $mod = $count % 43;
-        if ($mod == $this->check[$checksum]) {
-            return true;
-        }
-
-        return false;
-    }
-}
diff --git a/civicrm/vendor/zendframework/zend-validator/src/Barcode/Code39ext.php b/civicrm/vendor/zendframework/zend-validator/src/Barcode/Code39ext.php
deleted file mode 100644
index e65d491c85655f5a161688ffa7105902e05a0a9b..0000000000000000000000000000000000000000
--- a/civicrm/vendor/zendframework/zend-validator/src/Barcode/Code39ext.php
+++ /dev/null
@@ -1,23 +0,0 @@
-<?php
-/**
- * Zend Framework (http://framework.zend.com/)
- *
- * @link      http://github.com/zendframework/zf2 for the canonical source repository
- * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
- * @license   http://framework.zend.com/license/new-bsd New BSD License
- */
-
-namespace Zend\Validator\Barcode;
-
-class Code39ext extends AbstractAdapter
-{
-    /**
-     * Constructor for this barcode adapter
-     */
-    public function __construct()
-    {
-        $this->setLength(-1);
-        $this->setCharacters(128);
-        $this->useChecksum(false);
-    }
-}
diff --git a/civicrm/vendor/zendframework/zend-validator/src/Barcode/Code93.php b/civicrm/vendor/zendframework/zend-validator/src/Barcode/Code93.php
deleted file mode 100644
index f312a13863757e33ad70ee50b16ecd127e6c3bbb..0000000000000000000000000000000000000000
--- a/civicrm/vendor/zendframework/zend-validator/src/Barcode/Code93.php
+++ /dev/null
@@ -1,80 +0,0 @@
-<?php
-/**
- * Zend Framework (http://framework.zend.com/)
- *
- * @link      http://github.com/zendframework/zf2 for the canonical source repository
- * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
- * @license   http://framework.zend.com/license/new-bsd New BSD License
- */
-
-namespace Zend\Validator\Barcode;
-
-class Code93 extends AbstractAdapter
-{
-    /**
-     * Note that the characters !"§& are only synonyms
-     * @var array
-     */
-    protected $check = array(
-        '0' =>  0, '1' =>  1, '2' =>  2, '3' =>  3, '4' =>  4, '5' =>  5, '6' =>  6,
-        '7' =>  7, '8' =>  8, '9' =>  9, 'A' => 10, 'B' => 11, 'C' => 12, 'D' => 13,
-        'E' => 14, 'F' => 15, 'G' => 16, 'H' => 17, 'I' => 18, 'J' => 19, 'K' => 20,
-        'L' => 21, 'M' => 22, 'N' => 23, 'O' => 24, 'P' => 25, 'Q' => 26, 'R' => 27,
-        'S' => 28, 'T' => 29, 'U' => 30, 'V' => 31, 'W' => 32, 'X' => 33, 'Y' => 34,
-        'Z' => 35, '-' => 36, '.' => 37, ' ' => 38, '$' => 39, '/' => 40, '+' => 41,
-        '%' => 42, '!' => 43, '"' => 44, '§' => 45, '&' => 46,
-    );
-
-    /**
-     * Constructor for this barcode adapter
-     */
-    public function __construct()
-    {
-        $this->setLength(-1);
-        $this->setCharacters('0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ -.$/+%');
-        $this->setChecksum('code93');
-        $this->useChecksum(false);
-    }
-
-    /**
-     * Validates the checksum (Modulo CK)
-     *
-     * @param  string $value The barcode to validate
-     * @return bool
-     */
-    protected function code93($value)
-    {
-        $checksum = substr($value, -2, 2);
-        $value    = str_split(substr($value, 0, -2));
-        $count    = 0;
-        $length   = count($value) % 20;
-        foreach ($value as $char) {
-            if ($length == 0) {
-                $length = 20;
-            }
-
-            $count += $this->check[$char] * $length;
-            --$length;
-        }
-
-        $check   = array_search(($count % 47), $this->check);
-        $value[] = $check;
-        $count   = 0;
-        $length  = count($value) % 15;
-        foreach ($value as $char) {
-            if ($length == 0) {
-                $length = 15;
-            }
-
-            $count += $this->check[$char] * $length;
-            --$length;
-        }
-        $check .= array_search(($count % 47), $this->check);
-
-        if ($check == $checksum) {
-            return true;
-        }
-
-        return false;
-    }
-}
diff --git a/civicrm/vendor/zendframework/zend-validator/src/Barcode/Code93ext.php b/civicrm/vendor/zendframework/zend-validator/src/Barcode/Code93ext.php
deleted file mode 100644
index 99503a14772facb5c69f20ed5d8a542b29500331..0000000000000000000000000000000000000000
--- a/civicrm/vendor/zendframework/zend-validator/src/Barcode/Code93ext.php
+++ /dev/null
@@ -1,23 +0,0 @@
-<?php
-/**
- * Zend Framework (http://framework.zend.com/)
- *
- * @link      http://github.com/zendframework/zf2 for the canonical source repository
- * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
- * @license   http://framework.zend.com/license/new-bsd New BSD License
- */
-
-namespace Zend\Validator\Barcode;
-
-class Code93ext extends AbstractAdapter
-{
-    /**
-     * Constructor for this barcode adapter
-     */
-    public function __construct()
-    {
-        $this->setLength(-1);
-        $this->setCharacters(128);
-        $this->useChecksum(false);
-    }
-}
diff --git a/civicrm/vendor/zendframework/zend-validator/src/Barcode/Ean12.php b/civicrm/vendor/zendframework/zend-validator/src/Barcode/Ean12.php
deleted file mode 100644
index 4805145a1f9101b895a6da310a46ee641eb0c0c2..0000000000000000000000000000000000000000
--- a/civicrm/vendor/zendframework/zend-validator/src/Barcode/Ean12.php
+++ /dev/null
@@ -1,23 +0,0 @@
-<?php
-/**
- * Zend Framework (http://framework.zend.com/)
- *
- * @link      http://github.com/zendframework/zf2 for the canonical source repository
- * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
- * @license   http://framework.zend.com/license/new-bsd New BSD License
- */
-
-namespace Zend\Validator\Barcode;
-
-class Ean12 extends AbstractAdapter
-{
-    /**
-     * Constructor for this barcode adapter
-     */
-    public function __construct()
-    {
-        $this->setLength(12);
-        $this->setCharacters('0123456789');
-        $this->setChecksum('gtin');
-    }
-}
diff --git a/civicrm/vendor/zendframework/zend-validator/src/Barcode/Ean13.php b/civicrm/vendor/zendframework/zend-validator/src/Barcode/Ean13.php
deleted file mode 100644
index e271cbea6dae90c93a52978417b815ea248df74c..0000000000000000000000000000000000000000
--- a/civicrm/vendor/zendframework/zend-validator/src/Barcode/Ean13.php
+++ /dev/null
@@ -1,23 +0,0 @@
-<?php
-/**
- * Zend Framework (http://framework.zend.com/)
- *
- * @link      http://github.com/zendframework/zf2 for the canonical source repository
- * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
- * @license   http://framework.zend.com/license/new-bsd New BSD License
- */
-
-namespace Zend\Validator\Barcode;
-
-class Ean13 extends AbstractAdapter
-{
-    /**
-     * Constructor for this barcode adapter
-     */
-    public function __construct()
-    {
-        $this->setLength(13);
-        $this->setCharacters('0123456789');
-        $this->setChecksum('gtin');
-    }
-}
diff --git a/civicrm/vendor/zendframework/zend-validator/src/Barcode/Ean14.php b/civicrm/vendor/zendframework/zend-validator/src/Barcode/Ean14.php
deleted file mode 100644
index 9d8168bb24a321f64ef7173712fb067956d9036e..0000000000000000000000000000000000000000
--- a/civicrm/vendor/zendframework/zend-validator/src/Barcode/Ean14.php
+++ /dev/null
@@ -1,23 +0,0 @@
-<?php
-/**
- * Zend Framework (http://framework.zend.com/)
- *
- * @link      http://github.com/zendframework/zf2 for the canonical source repository
- * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
- * @license   http://framework.zend.com/license/new-bsd New BSD License
- */
-
-namespace Zend\Validator\Barcode;
-
-class Ean14 extends AbstractAdapter
-{
-    /**
-     * Constructor for this barcode adapter
-     */
-    public function __construct()
-    {
-        $this->setLength(14);
-        $this->setCharacters('0123456789');
-        $this->setChecksum('gtin');
-    }
-}
diff --git a/civicrm/vendor/zendframework/zend-validator/src/Barcode/Ean18.php b/civicrm/vendor/zendframework/zend-validator/src/Barcode/Ean18.php
deleted file mode 100644
index 7388b7326dac7928be40b7b0a3c959e82e5008a5..0000000000000000000000000000000000000000
--- a/civicrm/vendor/zendframework/zend-validator/src/Barcode/Ean18.php
+++ /dev/null
@@ -1,23 +0,0 @@
-<?php
-/**
- * Zend Framework (http://framework.zend.com/)
- *
- * @link      http://github.com/zendframework/zf2 for the canonical source repository
- * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
- * @license   http://framework.zend.com/license/new-bsd New BSD License
- */
-
-namespace Zend\Validator\Barcode;
-
-class Ean18 extends AbstractAdapter
-{
-    /**
-     * Constructor for this barcode adapter
-     */
-    public function __construct()
-    {
-        $this->setLength(18);
-        $this->setCharacters('0123456789');
-        $this->setChecksum('gtin');
-    }
-}
diff --git a/civicrm/vendor/zendframework/zend-validator/src/Barcode/Ean2.php b/civicrm/vendor/zendframework/zend-validator/src/Barcode/Ean2.php
deleted file mode 100644
index 99a87bfe2ab1b5d099d24ce18e82aa1329e447bd..0000000000000000000000000000000000000000
--- a/civicrm/vendor/zendframework/zend-validator/src/Barcode/Ean2.php
+++ /dev/null
@@ -1,23 +0,0 @@
-<?php
-/**
- * Zend Framework (http://framework.zend.com/)
- *
- * @link      http://github.com/zendframework/zf2 for the canonical source repository
- * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
- * @license   http://framework.zend.com/license/new-bsd New BSD License
- */
-
-namespace Zend\Validator\Barcode;
-
-class Ean2 extends AbstractAdapter
-{
-    /**
-     * Constructor for this barcode adapter
-     */
-    public function __construct()
-    {
-        $this->setLength(2);
-        $this->setCharacters('0123456789');
-        $this->useChecksum(false);
-    }
-}
diff --git a/civicrm/vendor/zendframework/zend-validator/src/Barcode/Ean5.php b/civicrm/vendor/zendframework/zend-validator/src/Barcode/Ean5.php
deleted file mode 100644
index 8ef2d519a0a4b18f6780d0aa76d72d45d9bb5838..0000000000000000000000000000000000000000
--- a/civicrm/vendor/zendframework/zend-validator/src/Barcode/Ean5.php
+++ /dev/null
@@ -1,25 +0,0 @@
-<?php
-/**
- * Zend Framework (http://framework.zend.com/)
- *
- * @link      http://github.com/zendframework/zf2 for the canonical source repository
- * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
- * @license   http://framework.zend.com/license/new-bsd New BSD License
- */
-
-namespace Zend\Validator\Barcode;
-
-class Ean5 extends AbstractAdapter
-{
-    /**
-     * Constructor
-     *
-     * Sets check flag to false.
-     */
-    public function __construct()
-    {
-        $this->setLength(5);
-        $this->setCharacters('0123456789');
-        $this->useChecksum(false);
-    }
-}
diff --git a/civicrm/vendor/zendframework/zend-validator/src/Barcode/Ean8.php b/civicrm/vendor/zendframework/zend-validator/src/Barcode/Ean8.php
deleted file mode 100644
index a34c8b45fce9bb2d582ff95c562e50f94ca2b32f..0000000000000000000000000000000000000000
--- a/civicrm/vendor/zendframework/zend-validator/src/Barcode/Ean8.php
+++ /dev/null
@@ -1,40 +0,0 @@
-<?php
-/**
- * Zend Framework (http://framework.zend.com/)
- *
- * @link      http://github.com/zendframework/zf2 for the canonical source repository
- * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
- * @license   http://framework.zend.com/license/new-bsd New BSD License
- */
-
-namespace Zend\Validator\Barcode;
-
-class Ean8 extends AbstractAdapter
-{
-    /**
-     * Constructor for this barcode adapter
-     */
-    public function __construct()
-    {
-        $this->setLength(array(7, 8));
-        $this->setCharacters('0123456789');
-        $this->setChecksum('gtin');
-    }
-
-    /**
-     * Overrides parent checkLength
-     *
-     * @param string $value Value
-     * @return bool
-     */
-    public function hasValidLength($value)
-    {
-        if (strlen($value) == 7) {
-            $this->useChecksum(false);
-        } else {
-            $this->useChecksum(true);
-        }
-
-        return parent::hasValidLength($value);
-    }
-}
diff --git a/civicrm/vendor/zendframework/zend-validator/src/Barcode/Gtin12.php b/civicrm/vendor/zendframework/zend-validator/src/Barcode/Gtin12.php
deleted file mode 100644
index 44464445ef5208efd8df14545000ceb496baba2b..0000000000000000000000000000000000000000
--- a/civicrm/vendor/zendframework/zend-validator/src/Barcode/Gtin12.php
+++ /dev/null
@@ -1,23 +0,0 @@
-<?php
-/**
- * Zend Framework (http://framework.zend.com/)
- *
- * @link      http://github.com/zendframework/zf2 for the canonical source repository
- * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
- * @license   http://framework.zend.com/license/new-bsd New BSD License
- */
-
-namespace Zend\Validator\Barcode;
-
-class Gtin12 extends AbstractAdapter
-{
-    /**
-     * Constructor for this barcode adapter
-     */
-    public function __construct()
-    {
-        $this->setLength(12);
-        $this->setCharacters('0123456789');
-        $this->setChecksum('gtin');
-    }
-}
diff --git a/civicrm/vendor/zendframework/zend-validator/src/Barcode/Gtin13.php b/civicrm/vendor/zendframework/zend-validator/src/Barcode/Gtin13.php
deleted file mode 100644
index b8dcd095b1aed12af4799b2371eeab11b4570a21..0000000000000000000000000000000000000000
--- a/civicrm/vendor/zendframework/zend-validator/src/Barcode/Gtin13.php
+++ /dev/null
@@ -1,23 +0,0 @@
-<?php
-/**
- * Zend Framework (http://framework.zend.com/)
- *
- * @link      http://github.com/zendframework/zf2 for the canonical source repository
- * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
- * @license   http://framework.zend.com/license/new-bsd New BSD License
- */
-
-namespace Zend\Validator\Barcode;
-
-class Gtin13 extends AbstractAdapter
-{
-    /**
-     * Constructor for this barcode adapter
-     */
-    public function __construct()
-    {
-        $this->setLength(13);
-        $this->setCharacters('0123456789');
-        $this->setChecksum('gtin');
-    }
-}
diff --git a/civicrm/vendor/zendframework/zend-validator/src/Barcode/Gtin14.php b/civicrm/vendor/zendframework/zend-validator/src/Barcode/Gtin14.php
deleted file mode 100644
index 862d3e147e40bf9eb5961d0efe355ed75e929e99..0000000000000000000000000000000000000000
--- a/civicrm/vendor/zendframework/zend-validator/src/Barcode/Gtin14.php
+++ /dev/null
@@ -1,23 +0,0 @@
-<?php
-/**
- * Zend Framework (http://framework.zend.com/)
- *
- * @link      http://github.com/zendframework/zf2 for the canonical source repository
- * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
- * @license   http://framework.zend.com/license/new-bsd New BSD License
- */
-
-namespace Zend\Validator\Barcode;
-
-class Gtin14 extends AbstractAdapter
-{
-    /**
-     * Constructor for this barcode adapter
-     */
-    public function __construct()
-    {
-        $this->setLength(14);
-        $this->setCharacters('0123456789');
-        $this->setChecksum('gtin');
-    }
-}
diff --git a/civicrm/vendor/zendframework/zend-validator/src/Barcode/Identcode.php b/civicrm/vendor/zendframework/zend-validator/src/Barcode/Identcode.php
deleted file mode 100644
index 5b392715560c9d8786e54f85e8a8c480f29cb9e2..0000000000000000000000000000000000000000
--- a/civicrm/vendor/zendframework/zend-validator/src/Barcode/Identcode.php
+++ /dev/null
@@ -1,41 +0,0 @@
-<?php
-/**
- * Zend Framework (http://framework.zend.com/)
- *
- * @link      http://github.com/zendframework/zf2 for the canonical source repository
- * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
- * @license   http://framework.zend.com/license/new-bsd New BSD License
- */
-
-namespace Zend\Validator\Barcode;
-
-class Identcode extends AbstractAdapter
-{
-    /**
-     * Allowed barcode lengths
-     * @var int
-     */
-    protected $length = 12;
-
-    /**
-     * Allowed barcode characters
-     * @var string
-     */
-    protected $characters = '0123456789';
-
-    /**
-     * Checksum function
-     * @var string
-     */
-    protected $checksum = 'identcode';
-
-    /**
-     * Constructor for this barcode adapter
-     */
-    public function __construct()
-    {
-        $this->setLength(12);
-        $this->setCharacters('0123456789');
-        $this->setChecksum('identcode');
-    }
-}
diff --git a/civicrm/vendor/zendframework/zend-validator/src/Barcode/Intelligentmail.php b/civicrm/vendor/zendframework/zend-validator/src/Barcode/Intelligentmail.php
deleted file mode 100644
index d26cce68a7346ab1bf094872bbf1e47831cd4251..0000000000000000000000000000000000000000
--- a/civicrm/vendor/zendframework/zend-validator/src/Barcode/Intelligentmail.php
+++ /dev/null
@@ -1,25 +0,0 @@
-<?php
-/**
- * Zend Framework (http://framework.zend.com/)
- *
- * @link      http://github.com/zendframework/zf2 for the canonical source repository
- * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
- * @license   http://framework.zend.com/license/new-bsd New BSD License
- */
-
-namespace Zend\Validator\Barcode;
-
-class Intelligentmail extends AbstractAdapter
-{
-    /**
-     * Constructor
-     *
-     * Sets check flag to false.
-     */
-    public function __construct()
-    {
-        $this->setLength(array(20, 25, 29, 31));
-        $this->setCharacters('0123456789');
-        $this->useChecksum(false);
-    }
-}
diff --git a/civicrm/vendor/zendframework/zend-validator/src/Barcode/Issn.php b/civicrm/vendor/zendframework/zend-validator/src/Barcode/Issn.php
deleted file mode 100644
index e66451a1a0640d0efeaae8e459f372c1bf5ffde7..0000000000000000000000000000000000000000
--- a/civicrm/vendor/zendframework/zend-validator/src/Barcode/Issn.php
+++ /dev/null
@@ -1,90 +0,0 @@
-<?php
-/**
- * Zend Framework (http://framework.zend.com/)
- *
- * @link      http://github.com/zendframework/zf2 for the canonical source repository
- * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
- * @license   http://framework.zend.com/license/new-bsd New BSD License
- */
-
-namespace Zend\Validator\Barcode;
-
-class Issn extends AbstractAdapter
-{
-    /**
-     * Constructor for this barcode adapter
-     */
-    public function __construct()
-    {
-        $this->setLength(array(8, 13));
-        $this->setCharacters('0123456789X');
-        $this->setChecksum('gtin');
-    }
-
-    /**
-     * Allows X on length of 8 chars
-     *
-     * @param  string $value The barcode to check for allowed characters
-     * @return bool
-     */
-    public function hasValidCharacters($value)
-    {
-        if (strlen($value) != 8) {
-            if (strpos($value, 'X') !== false) {
-                return false;
-            }
-        }
-
-        return parent::hasValidCharacters($value);
-    }
-
-    /**
-     * Validates the checksum
-     *
-     * @param  string $value The barcode to check the checksum for
-     * @return bool
-     */
-    public function hasValidChecksum($value)
-    {
-        if (strlen($value) == 8) {
-            $this->setChecksum('issn');
-        } else {
-            $this->setChecksum('gtin');
-        }
-
-        return parent::hasValidChecksum($value);
-    }
-
-    /**
-     * Validates the checksum ()
-     * ISSN implementation (reversed mod11)
-     *
-     * @param  string $value The barcode to validate
-     * @return bool
-     */
-    protected function issn($value)
-    {
-        $checksum = substr($value, -1, 1);
-        $values   = str_split(substr($value, 0, -1));
-        $check    = 0;
-        $multi    = 8;
-        foreach ($values as $token) {
-            if ($token == 'X') {
-                $token = 10;
-            }
-
-            $check += ($token * $multi);
-            --$multi;
-        }
-
-        $check %= 11;
-        $check  = ($check === 0 ? 0 : (11 - $check));
-        if ($check == $checksum) {
-            return true;
-        } elseif (($check == 10) && ($checksum == 'X')) {
-            return true;
-        }
-
-        return false;
-    }
-}
diff --git a/civicrm/vendor/zendframework/zend-validator/src/Barcode/Itf14.php b/civicrm/vendor/zendframework/zend-validator/src/Barcode/Itf14.php
deleted file mode 100644
index b17eb705dae84989c40796fd4ec967c249425f5d..0000000000000000000000000000000000000000
--- a/civicrm/vendor/zendframework/zend-validator/src/Barcode/Itf14.php
+++ /dev/null
@@ -1,23 +0,0 @@
-<?php
-/**
- * Zend Framework (http://framework.zend.com/)
- *
- * @link      http://github.com/zendframework/zf2 for the canonical source repository
- * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
- * @license   http://framework.zend.com/license/new-bsd New BSD License
- */
-
-namespace Zend\Validator\Barcode;
-
-class Itf14 extends AbstractAdapter
-{
-    /**
-     * Constructor for this barcode adapter
-     */
-    public function __construct()
-    {
-        $this->setLength(14);
-        $this->setCharacters('0123456789');
-        $this->setChecksum('gtin');
-    }
-}
diff --git a/civicrm/vendor/zendframework/zend-validator/src/Barcode/Leitcode.php b/civicrm/vendor/zendframework/zend-validator/src/Barcode/Leitcode.php
deleted file mode 100644
index c1b82c3c28d610ce7db91a58ca2c0d0e3c893828..0000000000000000000000000000000000000000
--- a/civicrm/vendor/zendframework/zend-validator/src/Barcode/Leitcode.php
+++ /dev/null
@@ -1,23 +0,0 @@
-<?php
-/**
- * Zend Framework (http://framework.zend.com/)
- *
- * @link      http://github.com/zendframework/zf2 for the canonical source repository
- * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
- * @license   http://framework.zend.com/license/new-bsd New BSD License
- */
-
-namespace Zend\Validator\Barcode;
-
-class Leitcode extends AbstractAdapter
-{
-    /**
-     * Constructor for this barcode adapter
-     */
-    public function __construct()
-    {
-        $this->setLength(14);
-        $this->setCharacters('0123456789');
-        $this->setChecksum('identcode');
-    }
-}
diff --git a/civicrm/vendor/zendframework/zend-validator/src/Barcode/Planet.php b/civicrm/vendor/zendframework/zend-validator/src/Barcode/Planet.php
deleted file mode 100644
index 0708b7c8180d3797d17078d31bdfad1f5849aab6..0000000000000000000000000000000000000000
--- a/civicrm/vendor/zendframework/zend-validator/src/Barcode/Planet.php
+++ /dev/null
@@ -1,23 +0,0 @@
-<?php
-/**
- * Zend Framework (http://framework.zend.com/)
- *
- * @link      http://github.com/zendframework/zf2 for the canonical source repository
- * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
- * @license   http://framework.zend.com/license/new-bsd New BSD License
- */
-
-namespace Zend\Validator\Barcode;
-
-class Planet extends AbstractAdapter
-{
-    /**
-     * Constructor for this barcode adapter
-     */
-    public function __construct()
-    {
-        $this->setLength(array(12, 14));
-        $this->setCharacters('0123456789');
-        $this->setChecksum('postnet');
-    }
-}
diff --git a/civicrm/vendor/zendframework/zend-validator/src/Barcode/Postnet.php b/civicrm/vendor/zendframework/zend-validator/src/Barcode/Postnet.php
deleted file mode 100644
index 2942d4ca0d5b9d3566dd447bf94954eeea230cf7..0000000000000000000000000000000000000000
--- a/civicrm/vendor/zendframework/zend-validator/src/Barcode/Postnet.php
+++ /dev/null
@@ -1,23 +0,0 @@
-<?php
-/**
- * Zend Framework (http://framework.zend.com/)
- *
- * @link      http://github.com/zendframework/zf2 for the canonical source repository
- * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
- * @license   http://framework.zend.com/license/new-bsd New BSD License
- */
-
-namespace Zend\Validator\Barcode;
-
-class Postnet extends AbstractAdapter
-{
-    /**
-     * Constructor for this barcode adapter
-     */
-    public function __construct()
-    {
-        $this->setLength(array(6, 7, 10, 12));
-        $this->setCharacters('0123456789');
-        $this->setChecksum('postnet');
-    }
-}
diff --git a/civicrm/vendor/zendframework/zend-validator/src/Barcode/Royalmail.php b/civicrm/vendor/zendframework/zend-validator/src/Barcode/Royalmail.php
deleted file mode 100644
index 77555ed5a0cf92d00dc8e95e561d06a1f9244dee..0000000000000000000000000000000000000000
--- a/civicrm/vendor/zendframework/zend-validator/src/Barcode/Royalmail.php
+++ /dev/null
@@ -1,93 +0,0 @@
-<?php
-/**
- * Zend Framework (http://framework.zend.com/)
- *
- * @link      http://github.com/zendframework/zf2 for the canonical source repository
- * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
- * @license   http://framework.zend.com/license/new-bsd New BSD License
- */
-
-namespace Zend\Validator\Barcode;
-
-class Royalmail extends AbstractAdapter
-{
-    protected $rows = array(
-        '0' => 1, '1' => 1, '2' => 1, '3' => 1, '4' => 1, '5' => 1,
-        '6' => 2, '7' => 2, '8' => 2, '9' => 2, 'A' => 2, 'B' => 2,
-        'C' => 3, 'D' => 3, 'E' => 3, 'F' => 3, 'G' => 3, 'H' => 3,
-        'I' => 4, 'J' => 4, 'K' => 4, 'L' => 4, 'M' => 4, 'N' => 4,
-        'O' => 5, 'P' => 5, 'Q' => 5, 'R' => 5, 'S' => 5, 'T' => 5,
-        'U' => 0, 'V' => 0, 'W' => 0, 'X' => 0, 'Y' => 0, 'Z' => 0,
-     );
-
-    protected $columns = array(
-        '0' => 1, '1' => 2, '2' => 3, '3' => 4, '4' => 5, '5' => 0,
-        '6' => 1, '7' => 2, '8' => 3, '9' => 4, 'A' => 5, 'B' => 0,
-        'C' => 1, 'D' => 2, 'E' => 3, 'F' => 4, 'G' => 5, 'H' => 0,
-        'I' => 1, 'J' => 2, 'K' => 3, 'L' => 4, 'M' => 5, 'N' => 0,
-        'O' => 1, 'P' => 2, 'Q' => 3, 'R' => 4, 'S' => 5, 'T' => 0,
-        'U' => 1, 'V' => 2, 'W' => 3, 'X' => 4, 'Y' => 5, 'Z' => 0,
-    );
-
-    /**
-     * Constructor for this barcode adapter
-     */
-    public function __construct()
-    {
-        $this->setLength(-1);
-        $this->setCharacters('0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ');
-        $this->setChecksum('royalmail');
-    }
-
-    /**
-     * Validates the checksum ()
-     *
-     * @param  string $value The barcode to validate
-     * @return bool
-     */
-    protected function royalmail($value)
-    {
-        $checksum = substr($value, -1, 1);
-        $values   = str_split(substr($value, 0, -1));
-        $rowvalue = 0;
-        $colvalue = 0;
-        foreach ($values as $row) {
-            $rowvalue += $this->rows[$row];
-            $colvalue += $this->columns[$row];
-        }
-
-        $rowvalue %= 6;
-        $colvalue %= 6;
-
-        $rowchkvalue = array_keys($this->rows, $rowvalue);
-        $colchkvalue = array_keys($this->columns, $colvalue);
-        $intersect = array_intersect($rowchkvalue, $colchkvalue);
-        $chkvalue    = current($intersect);
-        if ($chkvalue == $checksum) {
-            return true;
-        }
-
-        return false;
-    }
-
-    /**
-     * Allows start and stop tag within checked chars
-     *
-     * @param  string $value The barcode to check for allowed characters
-     * @return bool
-     */
-    public function hasValidCharacters($value)
-    {
-        if ($value[0] == '(') {
-            $value = substr($value, 1);
-
-            if ($value[strlen($value) - 1] == ')') {
-                $value = substr($value, 0, -1);
-            } else {
-                return false;
-            }
-        }
-
-        return parent::hasValidCharacters($value);
-    }
-}
diff --git a/civicrm/vendor/zendframework/zend-validator/src/Barcode/Sscc.php b/civicrm/vendor/zendframework/zend-validator/src/Barcode/Sscc.php
deleted file mode 100644
index 57f9c8a3733a8f0880ae1c6757d59efbaa84ab91..0000000000000000000000000000000000000000
--- a/civicrm/vendor/zendframework/zend-validator/src/Barcode/Sscc.php
+++ /dev/null
@@ -1,23 +0,0 @@
-<?php
-/**
- * Zend Framework (http://framework.zend.com/)
- *
- * @link      http://github.com/zendframework/zf2 for the canonical source repository
- * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
- * @license   http://framework.zend.com/license/new-bsd New BSD License
- */
-
-namespace Zend\Validator\Barcode;
-
-class Sscc extends AbstractAdapter
-{
-    /**
-     * Constructor for this barcode adapter
-     */
-    public function __construct()
-    {
-        $this->setLength(18);
-        $this->setCharacters('0123456789');
-        $this->setChecksum('gtin');
-    }
-}
diff --git a/civicrm/vendor/zendframework/zend-validator/src/Barcode/Upca.php b/civicrm/vendor/zendframework/zend-validator/src/Barcode/Upca.php
deleted file mode 100644
index afb2a7a44e42061279e45d103c4ef541ad91564b..0000000000000000000000000000000000000000
--- a/civicrm/vendor/zendframework/zend-validator/src/Barcode/Upca.php
+++ /dev/null
@@ -1,23 +0,0 @@
-<?php
-/**
- * Zend Framework (http://framework.zend.com/)
- *
- * @link      http://github.com/zendframework/zf2 for the canonical source repository
- * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
- * @license   http://framework.zend.com/license/new-bsd New BSD License
- */
-
-namespace Zend\Validator\Barcode;
-
-class Upca extends AbstractAdapter
-{
-    /**
-     * Constructor for this barcode adapter
-     */
-    public function __construct()
-    {
-        $this->setLength(12);
-        $this->setCharacters('0123456789');
-        $this->setChecksum('gtin');
-    }
-}
diff --git a/civicrm/vendor/zendframework/zend-validator/src/Barcode/Upce.php b/civicrm/vendor/zendframework/zend-validator/src/Barcode/Upce.php
deleted file mode 100644
index 32a573f1ce245136b8e3ea331efdce36848c9ea5..0000000000000000000000000000000000000000
--- a/civicrm/vendor/zendframework/zend-validator/src/Barcode/Upce.php
+++ /dev/null
@@ -1,40 +0,0 @@
-<?php
-/**
- * Zend Framework (http://framework.zend.com/)
- *
- * @link      http://github.com/zendframework/zf2 for the canonical source repository
- * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
- * @license   http://framework.zend.com/license/new-bsd New BSD License
- */
-
-namespace Zend\Validator\Barcode;
-
-class Upce extends AbstractAdapter
-{
-    /**
-     * Constructor for this barcode adapter
-     */
-    public function __construct()
-    {
-        $this->setLength(array(6, 7, 8));
-        $this->setCharacters('0123456789');
-        $this->setChecksum('gtin');
-    }
-
-    /**
-     * Overrides parent checkLength
-     *
-     * @param string $value Value
-     * @return bool
-     */
-    public function hasValidLength($value)
-    {
-        if (strlen($value) != 8) {
-            $this->useChecksum(false);
-        } else {
-            $this->useChecksum(true);
-        }
-
-        return parent::hasValidLength($value);
-    }
-}
diff --git a/civicrm/vendor/zendframework/zend-validator/src/Between.php b/civicrm/vendor/zendframework/zend-validator/src/Between.php
deleted file mode 100644
index 28101538b39cde9317f6d5ecd12e5bbc08b5a499..0000000000000000000000000000000000000000
--- a/civicrm/vendor/zendframework/zend-validator/src/Between.php
+++ /dev/null
@@ -1,181 +0,0 @@
-<?php
-/**
- * Zend Framework (http://framework.zend.com/)
- *
- * @link      http://github.com/zendframework/zf2 for the canonical source repository
- * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
- * @license   http://framework.zend.com/license/new-bsd New BSD License
- */
-
-namespace Zend\Validator;
-
-use Traversable;
-use Zend\Stdlib\ArrayUtils;
-
-class Between extends AbstractValidator
-{
-    const NOT_BETWEEN        = 'notBetween';
-    const NOT_BETWEEN_STRICT = 'notBetweenStrict';
-
-    /**
-     * Validation failure message template definitions
-     *
-     * @var array
-     */
-    protected $messageTemplates = array(
-        self::NOT_BETWEEN        => "The input is not between '%min%' and '%max%', inclusively",
-        self::NOT_BETWEEN_STRICT => "The input is not strictly between '%min%' and '%max%'"
-    );
-
-    /**
-     * Additional variables available for validation failure messages
-     *
-     * @var array
-     */
-    protected $messageVariables = array(
-        'min' => array('options' => 'min'),
-        'max' => array('options' => 'max'),
-    );
-
-    /**
-     * Options for the between validator
-     *
-     * @var array
-     */
-    protected $options = array(
-        'inclusive' => true,  // Whether to do inclusive comparisons, allowing equivalence to min and/or max
-        'min'       => 0,
-        'max'       => PHP_INT_MAX,
-    );
-
-    /**
-     * Sets validator options
-     * Accepts the following option keys:
-     *   'min' => scalar, minimum border
-     *   'max' => scalar, maximum border
-     *   'inclusive' => boolean, inclusive border values
-     *
-     * @param  array|Traversable $options
-     *
-     * @throws Exception\InvalidArgumentException
-     */
-    public function __construct($options = null)
-    {
-        if ($options instanceof Traversable) {
-            $options = ArrayUtils::iteratorToArray($options);
-        }
-        if (!is_array($options)) {
-            $options = func_get_args();
-            $temp['min'] = array_shift($options);
-            if (!empty($options)) {
-                $temp['max'] = array_shift($options);
-            }
-
-            if (!empty($options)) {
-                $temp['inclusive'] = array_shift($options);
-            }
-
-            $options = $temp;
-        }
-
-        if (count($options) !== 2
-            && (!array_key_exists('min', $options) || !array_key_exists('max', $options))
-        ) {
-            throw new Exception\InvalidArgumentException("Missing option. 'min' and 'max' have to be given");
-        }
-
-        parent::__construct($options);
-    }
-
-    /**
-     * Returns the min option
-     *
-     * @return mixed
-     */
-    public function getMin()
-    {
-        return $this->options['min'];
-    }
-
-    /**
-     * Sets the min option
-     *
-     * @param  mixed $min
-     * @return Between Provides a fluent interface
-     */
-    public function setMin($min)
-    {
-        $this->options['min'] = $min;
-        return $this;
-    }
-
-    /**
-     * Returns the max option
-     *
-     * @return mixed
-     */
-    public function getMax()
-    {
-        return $this->options['max'];
-    }
-
-    /**
-     * Sets the max option
-     *
-     * @param  mixed $max
-     * @return Between Provides a fluent interface
-     */
-    public function setMax($max)
-    {
-        $this->options['max'] = $max;
-        return $this;
-    }
-
-    /**
-     * Returns the inclusive option
-     *
-     * @return bool
-     */
-    public function getInclusive()
-    {
-        return $this->options['inclusive'];
-    }
-
-    /**
-     * Sets the inclusive option
-     *
-     * @param  bool $inclusive
-     * @return Between Provides a fluent interface
-     */
-    public function setInclusive($inclusive)
-    {
-        $this->options['inclusive'] = $inclusive;
-        return $this;
-    }
-
-    /**
-     * Returns true if and only if $value is between min and max options, inclusively
-     * if inclusive option is true.
-     *
-     * @param  mixed $value
-     * @return bool
-     */
-    public function isValid($value)
-    {
-        $this->setValue($value);
-
-        if ($this->getInclusive()) {
-            if ($this->getMin() > $value || $value > $this->getMax()) {
-                $this->error(self::NOT_BETWEEN);
-                return false;
-            }
-        } else {
-            if ($this->getMin() >= $value || $value >= $this->getMax()) {
-                $this->error(self::NOT_BETWEEN_STRICT);
-                return false;
-            }
-        }
-
-        return true;
-    }
-}
diff --git a/civicrm/vendor/zendframework/zend-validator/src/Bitwise.php b/civicrm/vendor/zendframework/zend-validator/src/Bitwise.php
deleted file mode 100644
index 7f676cff583374bc4961529747d25d6520c20dfd..0000000000000000000000000000000000000000
--- a/civicrm/vendor/zendframework/zend-validator/src/Bitwise.php
+++ /dev/null
@@ -1,192 +0,0 @@
-<?php
-/**
- * Zend Framework (http://framework.zend.com/)
- *
- * @link      http://github.com/zendframework/zf2 for the canonical source repository
- * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
- * @license   http://framework.zend.com/license/new-bsd New BSD License
- */
-
-namespace Zend\Validator;
-
-use Traversable;
-
-class Bitwise extends AbstractValidator
-{
-    const OP_AND = 'and';
-    const OP_XOR = 'xor';
-
-    const NOT_AND        = 'notAnd';
-    const NOT_AND_STRICT = 'notAndStrict';
-    const NOT_XOR        = 'notXor';
-
-    /**
-     * @var integer
-     */
-    protected $control;
-
-    /**
-     * Validation failure message template definitions
-     *
-     * @var array
-     */
-    protected $messageTemplates = array(
-        self::NOT_AND        => "The input has no common bit set with '%control%'",
-        self::NOT_AND_STRICT => "The input doesn't have the same bits set as '%control%'",
-        self::NOT_XOR        => "The input has common bit set with '%control%'",
-    );
-
-    /**
-     * Additional variables available for validation failure messages
-     *
-     * @var array
-     */
-    protected $messageVariables = array(
-        'control' => 'control',
-    );
-
-    /**
-     * @var integer
-     */
-    protected $operator;
-
-    /**
-     * @var boolean
-     */
-    protected $strict = false;
-
-    /**
-     * Sets validator options
-     * Accepts the following option keys:
-     *   'control'  => integer
-     *   'operator' =>
-     *   'strict'   => boolean
-     *
-     * @param array|Traversable $options
-     */
-    public function __construct($options = null)
-    {
-        if ($options instanceof Traversable) {
-            $options = iterator_to_array($options);
-        }
-
-        if (!is_array($options)) {
-            $options = func_get_args();
-
-            $temp['control'] = array_shift($options);
-
-            if (!empty($options)) {
-                $temp['operator'] = array_shift($options);
-            }
-
-            if (!empty($options)) {
-                $temp['strict'] = array_shift($options);
-            }
-
-            $options = $temp;
-        }
-
-        parent::__construct($options);
-    }
-
-    /**
-     * Returns the control parameter.
-     *
-     * @return integer
-     */
-    public function getControl()
-    {
-        return $this->control;
-    }
-
-    /**
-     * Returns the operator parameter.
-     *
-     * @return string
-     */
-    public function getOperator()
-    {
-        return $this->operator;
-    }
-
-    /**
-     * Returns the strict parameter.
-     *
-     * @return boolean
-     */
-    public function getStrict()
-    {
-        return $this->strict;
-    }
-
-    /**
-     * Returns true if and only if $value is between min and max options, inclusively
-     * if inclusive option is true.
-     *
-     * @param  mixed $value
-     * @return bool
-     */
-    public function isValid($value)
-    {
-        $this->setValue($value);
-
-        if (self::OP_AND === $this->operator) {
-            if ($this->strict) {
-                // All the bits set in value must be set in control
-                $this->error(self::NOT_AND_STRICT);
-
-                return (bool) (($this->control & $value) == $value);
-            } else {
-                // At least one of the bits must be common between value and control
-                $this->error(self::NOT_AND);
-
-                return (bool) ($this->control & $value);
-            }
-        } elseif (self::OP_XOR === $this->operator) {
-            $this->error(self::NOT_XOR);
-
-            return (bool) (($this->control ^ $value) === ($this->control | $value));
-        }
-
-        return false;
-    }
-
-    /**
-     * Sets the control parameter.
-     *
-     * @param  integer $control
-     * @return Bitwise
-     */
-    public function setControl($control)
-    {
-        $this->control = (int) $control;
-
-        return $this;
-    }
-
-    /**
-     * Sets the operator parameter.
-     *
-     * @param  string  $operator
-     * @return Bitwise
-     */
-    public function setOperator($operator)
-    {
-        $this->operator = $operator;
-
-        return $this;
-    }
-
-    /**
-     * Sets the strict parameter.
-     *
-     * @param  boolean $strict
-     * @return Bitwise
-     */
-    public function setStrict($strict)
-    {
-        $this->strict = (bool) $strict;
-
-        return $this;
-    }
-}
diff --git a/civicrm/vendor/zendframework/zend-validator/src/Callback.php b/civicrm/vendor/zendframework/zend-validator/src/Callback.php
deleted file mode 100644
index 7a5005bb26ab3dc485f06e8304df2150568232b3..0000000000000000000000000000000000000000
--- a/civicrm/vendor/zendframework/zend-validator/src/Callback.php
+++ /dev/null
@@ -1,150 +0,0 @@
-<?php
-/**
- * Zend Framework (http://framework.zend.com/)
- *
- * @link      http://github.com/zendframework/zf2 for the canonical source repository
- * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
- * @license   http://framework.zend.com/license/new-bsd New BSD License
- */
-
-namespace Zend\Validator;
-
-class Callback extends AbstractValidator
-{
-    /**
-     * Invalid callback
-     */
-    const INVALID_CALLBACK = 'callbackInvalid';
-
-    /**
-     * Invalid value
-     */
-    const INVALID_VALUE = 'callbackValue';
-
-    /**
-     * Validation failure message template definitions
-     *
-     * @var array
-     */
-    protected $messageTemplates = array(
-        self::INVALID_VALUE    => "The input is not valid",
-        self::INVALID_CALLBACK => "An exception has been raised within the callback",
-    );
-
-    /**
-     * Default options to set for the validator
-     *
-     * @var mixed
-     */
-    protected $options = array(
-        'callback'         => null,     // Callback in a call_user_func format, string || array
-        'callbackOptions'  => array(),  // Options for the callback
-    );
-
-    /**
-     * Constructor
-     *
-     * @param array|callable $options
-     */
-    public function __construct($options = null)
-    {
-        if (is_callable($options)) {
-            $options = array('callback' => $options);
-        }
-
-        parent::__construct($options);
-    }
-
-    /**
-     * Returns the set callback
-     *
-     * @return mixed
-     */
-    public function getCallback()
-    {
-        return $this->options['callback'];
-    }
-
-    /**
-     * Sets the callback
-     *
-     * @param  string|array|callable $callback
-     * @return Callback Provides a fluent interface
-     * @throws Exception\InvalidArgumentException
-     */
-    public function setCallback($callback)
-    {
-        if (!is_callable($callback)) {
-            throw new Exception\InvalidArgumentException('Invalid callback given');
-        }
-
-        $this->options['callback'] = $callback;
-        return $this;
-    }
-
-    /**
-     * Returns the set options for the callback
-     *
-     * @return mixed
-     */
-    public function getCallbackOptions()
-    {
-        return $this->options['callbackOptions'];
-    }
-
-    /**
-     * Sets options for the callback
-     *
-     * @param  mixed $options
-     * @return Callback Provides a fluent interface
-     */
-    public function setCallbackOptions($options)
-    {
-        $this->options['callbackOptions'] = (array) $options;
-        return $this;
-    }
-
-    /**
-     * Returns true if and only if the set callback returns
-     * for the provided $value
-     *
-     * @param  mixed $value
-     * @param  mixed $context Additional context to provide to the callback
-     * @return bool
-     * @throws Exception\InvalidArgumentException
-     */
-    public function isValid($value, $context = null)
-    {
-        $this->setValue($value);
-
-        $options  = $this->getCallbackOptions();
-        $callback = $this->getCallback();
-        if (empty($callback)) {
-            throw new Exception\InvalidArgumentException('No callback given');
-        }
-
-        $args = array($value);
-        if (empty($options) && !empty($context)) {
-            $args[] = $context;
-        }
-        if (!empty($options) && empty($context)) {
-            $args = array_merge($args, $options);
-        }
-        if (!empty($options) && !empty($context)) {
-            $args[] = $context;
-            $args   = array_merge($args, $options);
-        }
-
-        try {
-            if (!call_user_func_array($callback, $args)) {
-                $this->error(self::INVALID_VALUE);
-                return false;
-            }
-        } catch (\Exception $e) {
-            $this->error(self::INVALID_CALLBACK);
-            return false;
-        }
-
-        return true;
-    }
-}
diff --git a/civicrm/vendor/zendframework/zend-validator/src/CreditCard.php b/civicrm/vendor/zendframework/zend-validator/src/CreditCard.php
deleted file mode 100644
index 0f637f3796cb4cf3cbc8ae8b8e9a57df6776b5a2..0000000000000000000000000000000000000000
--- a/civicrm/vendor/zendframework/zend-validator/src/CreditCard.php
+++ /dev/null
@@ -1,319 +0,0 @@
-<?php
-/**
- * Zend Framework (http://framework.zend.com/)
- *
- * @link      http://github.com/zendframework/zf2 for the canonical source repository
- * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
- * @license   http://framework.zend.com/license/new-bsd New BSD License
- */
-
-namespace Zend\Validator;
-
-use Traversable;
-use Zend\Stdlib\ArrayUtils;
-
-class CreditCard extends AbstractValidator
-{
-    /**
-     * Detected CCI list
-     *
-     * @var string
-     */
-    const ALL              = 'All';
-    const AMERICAN_EXPRESS = 'American_Express';
-    const UNIONPAY         = 'Unionpay';
-    const DINERS_CLUB      = 'Diners_Club';
-    const DINERS_CLUB_US   = 'Diners_Club_US';
-    const DISCOVER         = 'Discover';
-    const JCB              = 'JCB';
-    const LASER            = 'Laser';
-    const MAESTRO          = 'Maestro';
-    const MASTERCARD       = 'Mastercard';
-    const SOLO             = 'Solo';
-    const VISA             = 'Visa';
-
-    const CHECKSUM       = 'creditcardChecksum';
-    const CONTENT        = 'creditcardContent';
-    const INVALID        = 'creditcardInvalid';
-    const LENGTH         = 'creditcardLength';
-    const PREFIX         = 'creditcardPrefix';
-    const SERVICE        = 'creditcardService';
-    const SERVICEFAILURE = 'creditcardServiceFailure';
-
-    /**
-     * Validation failure message template definitions
-     *
-     * @var array
-     */
-    protected $messageTemplates = array(
-        self::CHECKSUM       => "The input seems to contain an invalid checksum",
-        self::CONTENT        => "The input must contain only digits",
-        self::INVALID        => "Invalid type given. String expected",
-        self::LENGTH         => "The input contains an invalid amount of digits",
-        self::PREFIX         => "The input is not from an allowed institute",
-        self::SERVICE        => "The input seems to be an invalid credit card number",
-        self::SERVICEFAILURE => "An exception has been raised while validating the input",
-    );
-
-    /**
-     * List of CCV names
-     *
-     * @var array
-     */
-    protected $cardName = array(
-        0  => self::AMERICAN_EXPRESS,
-        1  => self::DINERS_CLUB,
-        2  => self::DINERS_CLUB_US,
-        3  => self::DISCOVER,
-        4  => self::JCB,
-        5  => self::LASER,
-        6  => self::MAESTRO,
-        7  => self::MASTERCARD,
-        8  => self::SOLO,
-        9  => self::UNIONPAY,
-        10 => self::VISA,
-    );
-
-    /**
-     * List of allowed CCV lengths
-     *
-     * @var array
-     */
-    protected $cardLength = array(
-        self::AMERICAN_EXPRESS => array(15),
-        self::DINERS_CLUB      => array(14),
-        self::DINERS_CLUB_US   => array(16),
-        self::DISCOVER         => array(16),
-        self::JCB              => array(15, 16),
-        self::LASER            => array(16, 17, 18, 19),
-        self::MAESTRO          => array(12, 13, 14, 15, 16, 17, 18, 19),
-        self::MASTERCARD       => array(16),
-        self::SOLO             => array(16, 18, 19),
-        self::UNIONPAY         => array(16, 17, 18, 19),
-        self::VISA             => array(16),
-    );
-
-    /**
-     * List of accepted CCV provider tags
-     *
-     * @var array
-     */
-    protected $cardType = array(
-        self::AMERICAN_EXPRESS => array('34', '37'),
-        self::DINERS_CLUB      => array('300', '301', '302', '303', '304', '305', '36'),
-        self::DINERS_CLUB_US   => array('54', '55'),
-        self::DISCOVER         => array('6011', '622126', '622127', '622128', '622129', '62213',
-                                        '62214', '62215', '62216', '62217', '62218', '62219',
-                                        '6222', '6223', '6224', '6225', '6226', '6227', '6228',
-                                        '62290', '62291', '622920', '622921', '622922', '622923',
-                                        '622924', '622925', '644', '645', '646', '647', '648',
-                                        '649', '65'),
-        self::JCB              => array('1800', '2131', '3528', '3529', '353', '354', '355', '356', '357', '358'),
-        self::LASER            => array('6304', '6706', '6771', '6709'),
-        self::MAESTRO          => array('5018', '5020', '5038', '6304', '6759', '6761', '6762', '6763',
-                                        '6764', '6765', '6766'),
-        self::MASTERCARD       => array('51', '52', '53', '54', '55'),
-        self::SOLO             => array('6334', '6767'),
-        self::UNIONPAY         => array('622126', '622127', '622128', '622129', '62213', '62214',
-                                        '62215', '62216', '62217', '62218', '62219', '6222', '6223',
-                                        '6224', '6225', '6226', '6227', '6228', '62290', '62291',
-                                        '622920', '622921', '622922', '622923', '622924', '622925'),
-        self::VISA             => array('4'),
-    );
-
-    /**
-     * Options for this validator
-     *
-     * @var array
-     */
-    protected $options = array(
-        'service' => null,     // Service callback for additional validation
-        'type'    => array(),  // CCIs which are accepted by validation
-    );
-
-    /**
-     * Constructor
-     *
-     * @param string|array|Traversable $options OPTIONAL Type of CCI to allow
-     */
-    public function __construct($options = array())
-    {
-        if ($options instanceof Traversable) {
-            $options = ArrayUtils::iteratorToArray($options);
-        } elseif (!is_array($options)) {
-            $options = func_get_args();
-            $temp['type'] = array_shift($options);
-            if (!empty($options)) {
-                $temp['service'] = array_shift($options);
-            }
-
-            $options = $temp;
-        }
-
-        if (!array_key_exists('type', $options)) {
-            $options['type'] = self::ALL;
-        }
-
-        $this->setType($options['type']);
-        unset($options['type']);
-
-        if (array_key_exists('service', $options)) {
-            $this->setService($options['service']);
-            unset($options['service']);
-        }
-
-        parent::__construct($options);
-    }
-
-    /**
-     * Returns a list of accepted CCIs
-     *
-     * @return array
-     */
-    public function getType()
-    {
-        return $this->options['type'];
-    }
-
-    /**
-     * Sets CCIs which are accepted by validation
-     *
-     * @param  string|array $type Type to allow for validation
-     * @return CreditCard Provides a fluid interface
-     */
-    public function setType($type)
-    {
-        $this->options['type'] = array();
-        return $this->addType($type);
-    }
-
-    /**
-     * Adds a CCI to be accepted by validation
-     *
-     * @param  string|array $type Type to allow for validation
-     * @return CreditCard Provides a fluid interface
-     */
-    public function addType($type)
-    {
-        if (is_string($type)) {
-            $type = array($type);
-        }
-
-        foreach ($type as $typ) {
-            if (defined('self::' . strtoupper($typ)) && !in_array($typ, $this->options['type'])) {
-                $this->options['type'][] = $typ;
-            }
-
-            if (($typ == self::ALL)) {
-                $this->options['type'] = array_keys($this->cardLength);
-            }
-        }
-
-        return $this;
-    }
-
-    /**
-     * Returns the actual set service
-     *
-     * @return callable
-     */
-    public function getService()
-    {
-        return $this->options['service'];
-    }
-
-    /**
-     * Sets a new callback for service validation
-     *
-     * @param  callable $service
-     * @return CreditCard
-     * @throws Exception\InvalidArgumentException on invalid service callback
-     */
-    public function setService($service)
-    {
-        if (!is_callable($service)) {
-            throw new Exception\InvalidArgumentException('Invalid callback given');
-        }
-
-        $this->options['service'] = $service;
-        return $this;
-    }
-
-    /**
-     * Returns true if and only if $value follows the Luhn algorithm (mod-10 checksum)
-     *
-     * @param  string $value
-     * @return bool
-     */
-    public function isValid($value)
-    {
-        $this->setValue($value);
-
-        if (!is_string($value)) {
-            $this->error(self::INVALID, $value);
-            return false;
-        }
-
-        if (!ctype_digit($value)) {
-            $this->error(self::CONTENT, $value);
-            return false;
-        }
-
-        $length = strlen($value);
-        $types  = $this->getType();
-        $foundp = false;
-        $foundl = false;
-        foreach ($types as $type) {
-            foreach ($this->cardType[$type] as $prefix) {
-                if (substr($value, 0, strlen($prefix)) == $prefix) {
-                    $foundp = true;
-                    if (in_array($length, $this->cardLength[$type])) {
-                        $foundl = true;
-                        break 2;
-                    }
-                }
-            }
-        }
-
-        if ($foundp == false) {
-            $this->error(self::PREFIX, $value);
-            return false;
-        }
-
-        if ($foundl == false) {
-            $this->error(self::LENGTH, $value);
-            return false;
-        }
-
-        $sum    = 0;
-        $weight = 2;
-
-        for ($i = $length - 2; $i >= 0; $i--) {
-            $digit = $weight * $value[$i];
-            $sum += floor($digit / 10) + $digit % 10;
-            $weight = $weight % 2 + 1;
-        }
-
-        if ((10 - $sum % 10) % 10 != $value[$length - 1]) {
-            $this->error(self::CHECKSUM, $value);
-            return false;
-        }
-
-        $service = $this->getService();
-        if (!empty($service)) {
-            try {
-                $callback = new Callback($service);
-                $callback->setOptions($this->getType());
-                if (!$callback->isValid($value)) {
-                    $this->error(self::SERVICE, $value);
-                    return false;
-                }
-            } catch (\Exception $e) {
-                $this->error(self::SERVICEFAILURE, $value);
-                return false;
-            }
-        }
-
-        return true;
-    }
-}
diff --git a/civicrm/vendor/zendframework/zend-validator/src/Csrf.php b/civicrm/vendor/zendframework/zend-validator/src/Csrf.php
deleted file mode 100644
index ef64ee3c19cfbd4366cfc866806a76aeef711fab..0000000000000000000000000000000000000000
--- a/civicrm/vendor/zendframework/zend-validator/src/Csrf.php
+++ /dev/null
@@ -1,374 +0,0 @@
-<?php
-/**
- * Zend Framework (http://framework.zend.com/)
- *
- * @link      http://github.com/zendframework/zf2 for the canonical source repository
- * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
- * @license   http://framework.zend.com/license/new-bsd New BSD License
- */
-
-namespace Zend\Validator;
-
-use Traversable;
-use Zend\Math\Rand;
-use Zend\Session\Container as SessionContainer;
-use Zend\Stdlib\ArrayUtils;
-
-class Csrf extends AbstractValidator
-{
-    /**
-     * Error codes
-     * @const string
-     */
-    const NOT_SAME = 'notSame';
-
-    /**
-     * Error messages
-     * @var array
-     */
-    protected $messageTemplates = array(
-        self::NOT_SAME => "The form submitted did not originate from the expected site",
-    );
-
-    /**
-     * Actual hash used.
-     *
-     * @var mixed
-     */
-    protected $hash;
-
-    /**
-     * Static cache of the session names to generated hashes
-     * @todo unused, left here to avoid BC breaks
-     *
-     * @var array
-     */
-    protected static $hashCache;
-
-    /**
-     * Name of CSRF element (used to create non-colliding hashes)
-     *
-     * @var string
-     */
-    protected $name = 'csrf';
-
-    /**
-     * Salt for CSRF token
-     * @var string
-     */
-    protected $salt = 'salt';
-
-    /**
-     * @var SessionContainer
-     */
-    protected $session;
-
-    /**
-     * TTL for CSRF token
-     * @var int|null
-     */
-    protected $timeout = 300;
-
-    /**
-     * Constructor
-     *
-     * @param  array|Traversable $options
-     */
-    public function __construct($options = array())
-    {
-        parent::__construct($options);
-
-        if ($options instanceof Traversable) {
-            $options = ArrayUtils::iteratorToArray($options);
-        }
-
-        if (!is_array($options)) {
-            $options = (array) $options;
-        }
-
-        foreach ($options as $key => $value) {
-            switch (strtolower($key)) {
-                case 'name':
-                    $this->setName($value);
-                    break;
-                case 'salt':
-                    $this->setSalt($value);
-                    break;
-                case 'session':
-                    $this->setSession($value);
-                    break;
-                case 'timeout':
-                    $this->setTimeout($value);
-                    break;
-                default:
-                    // ignore unknown options
-                    break;
-            }
-        }
-    }
-
-    /**
-     * Does the provided token match the one generated?
-     *
-     * @param  string $value
-     * @param  mixed $context
-     * @return bool
-     */
-    public function isValid($value, $context = null)
-    {
-        $this->setValue((string) $value);
-
-        $tokenId = $this->getTokenIdFromHash($value);
-        $hash = $this->getValidationToken($tokenId);
-
-        $tokenFromValue = $this->getTokenFromHash($value);
-        $tokenFromHash = $this->getTokenFromHash($hash);
-
-        if (!$tokenFromValue || !$tokenFromHash || ($tokenFromValue !== $tokenFromHash)) {
-            $this->error(self::NOT_SAME);
-            return false;
-        }
-
-        return true;
-    }
-
-    /**
-     * Set CSRF name
-     *
-     * @param  string $name
-     * @return Csrf
-     */
-    public function setName($name)
-    {
-        $this->name = (string) $name;
-        return $this;
-    }
-
-    /**
-     * Get CSRF name
-     *
-     * @return string
-     */
-    public function getName()
-    {
-        return $this->name;
-    }
-
-    /**
-     * Set session container
-     *
-     * @param  SessionContainer $session
-     * @return Csrf
-     */
-    public function setSession(SessionContainer $session)
-    {
-        $this->session = $session;
-        if ($this->hash) {
-            $this->initCsrfToken();
-        }
-        return $this;
-    }
-
-    /**
-     * Get session container
-     *
-     * Instantiate session container if none currently exists
-     *
-     * @return SessionContainer
-     */
-    public function getSession()
-    {
-        if (null === $this->session) {
-            // Using fully qualified name, to ensure polyfill class alias is used
-            $this->session = new SessionContainer($this->getSessionName());
-        }
-        return $this->session;
-    }
-
-    /**
-     * Salt for CSRF token
-     *
-     * @param  string $salt
-     * @return Csrf
-     */
-    public function setSalt($salt)
-    {
-        $this->salt = (string) $salt;
-        return $this;
-    }
-
-    /**
-     * Retrieve salt for CSRF token
-     *
-     * @return string
-     */
-    public function getSalt()
-    {
-        return $this->salt;
-    }
-
-    /**
-     * Retrieve CSRF token
-     *
-     * If no CSRF token currently exists, or should be regenerated,
-     * generates one.
-     *
-     * @param  bool $regenerate    default false
-     * @return string
-     */
-    public function getHash($regenerate = false)
-    {
-        if ((null === $this->hash) || $regenerate) {
-            $this->generateHash();
-        }
-        return $this->hash;
-    }
-
-    /**
-     * Get session namespace for CSRF token
-     *
-     * Generates a session namespace based on salt, element name, and class.
-     *
-     * @return string
-     */
-    public function getSessionName()
-    {
-        return str_replace('\\', '_', __CLASS__) . '_'
-            . $this->getSalt() . '_'
-            . strtr($this->getName(), array('[' => '_', ']' => ''));
-    }
-
-    /**
-     * Set timeout for CSRF session token
-     *
-     * @param  int|null $ttl
-     * @return Csrf
-     */
-    public function setTimeout($ttl)
-    {
-        $this->timeout = ($ttl !== null) ? (int) $ttl : null;
-        return $this;
-    }
-
-    /**
-     * Get CSRF session token timeout
-     *
-     * @return int
-     */
-    public function getTimeout()
-    {
-        return $this->timeout;
-    }
-
-    /**
-     * Initialize CSRF token in session
-     *
-     * @return void
-     */
-    protected function initCsrfToken()
-    {
-        $session = $this->getSession();
-        $timeout = $this->getTimeout();
-        if (null !== $timeout) {
-            $session->setExpirationSeconds($timeout);
-        }
-
-        $hash = $this->getHash();
-        $token = $this->getTokenFromHash($hash);
-        $tokenId = $this->getTokenIdFromHash($hash);
-
-        if (! $session->tokenList) {
-            $session->tokenList = array();
-        }
-        $session->tokenList[$tokenId] = $token;
-        $session->hash = $hash; // @todo remove this, left for BC
-    }
-
-    /**
-     * Generate CSRF token
-     *
-     * Generates CSRF token and stores both in {@link $hash} and element
-     * value.
-     *
-     * @return void
-     */
-    protected function generateHash()
-    {
-        $token = md5($this->getSalt() . Rand::getBytes(32) .  $this->getName());
-
-        $this->hash = $this->formatHash($token, $this->generateTokenId());
-
-        $this->setValue($this->hash);
-        $this->initCsrfToken();
-    }
-
-    /**
-     * @return string
-     */
-    protected function generateTokenId()
-    {
-        return md5(Rand::getBytes(32));
-    }
-
-    /**
-     * Get validation token
-     *
-     * Retrieve token from session, if it exists.
-     *
-     * @param string $tokenId
-     * @return null|string
-     */
-    protected function getValidationToken($tokenId = null)
-    {
-        $session = $this->getSession();
-
-        /**
-         * if no tokenId is passed we revert to the old behaviour
-         * @todo remove, here for BC
-         */
-        if (! $tokenId && isset($session->hash)) {
-            return $session->hash;
-        }
-
-        if ($tokenId && isset($session->tokenList[$tokenId])) {
-            return $this->formatHash($session->tokenList[$tokenId], $tokenId);
-        }
-
-        return;
-    }
-
-    /**
-     * @param $token
-     * @param $tokenId
-     * @return string
-     */
-    protected function formatHash($token, $tokenId)
-    {
-        return sprintf('%s-%s', $token, $tokenId);
-    }
-
-    /**
-     * @param $hash
-     * @return string
-     */
-    protected function getTokenFromHash($hash)
-    {
-        $data = explode('-', $hash);
-        return $data[0] ?: null;
-    }
-
-    /**
-     * @param $hash
-     * @return string
-     */
-    protected function getTokenIdFromHash($hash)
-    {
-        $data = explode('-', $hash);
-
-        if (! isset($data[1])) {
-            return;
-        }
-
-        return $data[1];
-    }
-}
diff --git a/civicrm/vendor/zendframework/zend-validator/src/Date.php b/civicrm/vendor/zendframework/zend-validator/src/Date.php
deleted file mode 100644
index c3a3ab74f91a5caf6aa9caf3631e05af6adffce0..0000000000000000000000000000000000000000
--- a/civicrm/vendor/zendframework/zend-validator/src/Date.php
+++ /dev/null
@@ -1,204 +0,0 @@
-<?php
-/**
- * Zend Framework (http://framework.zend.com/)
- *
- * @link      http://github.com/zendframework/zf2 for the canonical source repository
- * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
- * @license   http://framework.zend.com/license/new-bsd New BSD License
- */
-
-namespace Zend\Validator;
-
-use DateTime;
-use DateTimeImmutable;
-use Traversable;
-
-/**
- * Validates that a given value is a DateTime instance or can be converted into one.
- */
-class Date extends AbstractValidator
-{
-    /**#@+
-     * Validity constants
-     * @var string
-     */
-    const INVALID        = 'dateInvalid';
-    const INVALID_DATE   = 'dateInvalidDate';
-    const FALSEFORMAT    = 'dateFalseFormat';
-    /**#@-*/
-
-    /**
-     * Default format constant
-     * @var string
-     */
-    const FORMAT_DEFAULT = 'Y-m-d';
-
-    /**
-     * Validation failure message template definitions
-     *
-     * @var array
-     */
-    protected $messageTemplates = array(
-        self::INVALID      => "Invalid type given. String, integer, array or DateTime expected",
-        self::INVALID_DATE => "The input does not appear to be a valid date",
-        self::FALSEFORMAT  => "The input does not fit the date format '%format%'",
-    );
-
-    /**
-     * @var array
-     */
-    protected $messageVariables = array(
-        'format' => 'format',
-    );
-
-    /**
-     * @var string
-     */
-    protected $format = self::FORMAT_DEFAULT;
-
-    /**
-     * Sets validator options
-     *
-     * @param  string|array|Traversable $options OPTIONAL
-     */
-    public function __construct($options = array())
-    {
-        if ($options instanceof Traversable) {
-            $options = iterator_to_array($options);
-        } elseif (!is_array($options)) {
-            $options = func_get_args();
-            $temp['format'] = array_shift($options);
-            $options = $temp;
-        }
-
-        parent::__construct($options);
-    }
-
-    /**
-     * Returns the format option
-     *
-     * @return string|null
-     */
-    public function getFormat()
-    {
-        return $this->format;
-    }
-
-    /**
-     * Sets the format option
-     *
-     * Format cannot be null.  It will always default to 'Y-m-d', even
-     * if null is provided.
-     *
-     * @param  string $format
-     * @return Date provides a fluent interface
-     * @todo   validate the format
-     */
-    public function setFormat($format = self::FORMAT_DEFAULT)
-    {
-        $this->format = (empty($format)) ? self::FORMAT_DEFAULT : $format;
-        return $this;
-    }
-
-    /**
-     * Returns true if $value is a DateTime instance or can be converted into one.
-     *
-     * @param  string|array|int|DateTime $value
-     * @return bool
-     */
-    public function isValid($value)
-    {
-        $this->setValue($value);
-
-        if (!$this->convertToDateTime($value)) {
-            $this->error(self::INVALID_DATE);
-            return false;
-        }
-
-        return true;
-    }
-
-    /**
-     * Attempts to convert an int, string, or array to a DateTime object
-     *
-     * @param  string|int|array $param
-     * @param  bool             $addErrors
-     * @return bool|DateTime
-     */
-    protected function convertToDateTime($param, $addErrors = true)
-    {
-        if ($param instanceof DateTime || $param instanceof DateTimeImmutable) {
-            return $param;
-        }
-
-        $type = gettype($param);
-        if (!in_array($type, array('string', 'integer', 'double', 'array'))) {
-            if ($addErrors) {
-                $this->error(self::INVALID);
-            }
-            return false;
-        }
-
-        $convertMethod = 'convert' . ucfirst($type);
-        return $this->{$convertMethod}($param, $addErrors);
-    }
-
-    /**
-     * Attempts to convert an integer into a DateTime object
-     *
-     * @param  integer $value
-     * @return bool|DateTime
-     */
-    protected function convertInteger($value)
-    {
-        return date_create("@$value");
-    }
-
-    /**
-     * Attempts to convert an double into a DateTime object
-     *
-     * @param  double $value
-     * @return bool|DateTime
-     */
-    protected function convertDouble($value)
-    {
-        return DateTime::createFromFormat('U', $value);
-    }
-
-    /**
-     * Attempts to convert a string into a DateTime object
-     *
-     * @param  string $value
-     * @param  bool   $addErrors
-     * @return bool|DateTime
-     */
-    protected function convertString($value, $addErrors = true)
-    {
-        $date = DateTime::createFromFormat($this->format, $value);
-
-        // Invalid dates can show up as warnings (ie. "2007-02-99")
-        // and still return a DateTime object.
-        $errors = DateTime::getLastErrors();
-        if ($errors['warning_count'] > 0) {
-            if ($addErrors) {
-                $this->error(self::FALSEFORMAT);
-            }
-            return false;
-        }
-
-        return $date;
-    }
-
-    /**
-     * Implodes the array into a string and proxies to {@link convertString()}.
-     *
-     * @param  array $value
-     * @param  bool  $addErrors
-     * @return bool|DateTime
-     * @todo   enhance the implosion
-     */
-    protected function convertArray(array $value, $addErrors = true)
-    {
-        return $this->convertString(implode('-', $value), $addErrors);
-    }
-}
diff --git a/civicrm/vendor/zendframework/zend-validator/src/DateStep.php b/civicrm/vendor/zendframework/zend-validator/src/DateStep.php
deleted file mode 100644
index 67465d34ebc8109ec56105b36b222b1315c1300b..0000000000000000000000000000000000000000
--- a/civicrm/vendor/zendframework/zend-validator/src/DateStep.php
+++ /dev/null
@@ -1,479 +0,0 @@
-<?php
-/**
- * Zend Framework (http://framework.zend.com/)
- *
- * @link      http://github.com/zendframework/zf2 for the canonical source repository
- * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
- * @license   http://framework.zend.com/license/new-bsd New BSD License
- */
-
-namespace Zend\Validator;
-
-use DateInterval;
-use DateTime;
-use DateTimeZone;
-use Traversable;
-use Zend\Stdlib\ArrayUtils;
-
-class DateStep extends Date
-{
-    const NOT_STEP       = 'dateStepNotStep';
-
-    const FORMAT_DEFAULT = DateTime::ISO8601;
-
-    /**
-     * @var array
-     */
-    protected $messageTemplates = array(
-        self::INVALID      => "Invalid type given. String, integer, array or DateTime expected",
-        self::INVALID_DATE => "The input does not appear to be a valid date",
-        self::FALSEFORMAT  => "The input does not fit the date format '%format%'",
-        self::NOT_STEP     => "The input is not a valid step",
-    );
-
-    /**
-     * Optional base date value
-     *
-     * @var string|int|\DateTime
-     */
-    protected $baseValue = '1970-01-01T00:00:00Z';
-
-    /**
-     * Date step interval (defaults to 1 day).
-     * Uses the DateInterval specification.
-     *
-     * @var DateInterval
-     */
-    protected $step;
-
-    /**
-     * Optional timezone to be used when the baseValue
-     * and validation values do not contain timezone info
-     *
-     * @var DateTimeZone
-     */
-    protected $timezone;
-
-    /**
-     * Set default options for this instance
-     *
-     * @param array $options
-     */
-    public function __construct($options = array())
-    {
-        if ($options instanceof Traversable) {
-            $options = ArrayUtils::iteratorToArray($options);
-        } elseif (!is_array($options)) {
-            $options = func_get_args();
-            $temp['baseValue'] = array_shift($options);
-            if (!empty($options)) {
-                $temp['step'] = array_shift($options);
-            }
-            if (!empty($options)) {
-                $temp['format'] = array_shift($options);
-            }
-            if (!empty($options)) {
-                $temp['timezone'] = array_shift($options);
-            }
-
-            $options = $temp;
-        }
-
-        if (!isset($options['step'])) {
-            $options['step'] = new DateInterval('P1D');
-        }
-        if (!isset($options['timezone'])) {
-            $options['timezone'] = new DateTimeZone(date_default_timezone_get());
-        }
-
-        parent::__construct($options);
-    }
-
-    /**
-     * Sets the base value from which the step should be computed
-     *
-     * @param  string|int|\DateTime $baseValue
-     * @return DateStep
-     */
-    public function setBaseValue($baseValue)
-    {
-        $this->baseValue = $baseValue;
-        return $this;
-    }
-
-    /**
-     * Returns the base value from which the step should be computed
-     *
-     * @return string|int|\DateTime
-     */
-    public function getBaseValue()
-    {
-        return $this->baseValue;
-    }
-
-    /**
-     * Sets the step date interval
-     *
-     * @param  DateInterval $step
-     * @return DateStep
-     */
-    public function setStep(DateInterval $step)
-    {
-        $this->step = $step;
-        return $this;
-    }
-
-    /**
-     * Returns the step date interval
-     *
-     * @return DateInterval
-     */
-    public function getStep()
-    {
-        return $this->step;
-    }
-
-    /**
-     * Returns the timezone option
-     *
-     * @return DateTimeZone
-     */
-    public function getTimezone()
-    {
-        return $this->timezone;
-    }
-
-    /**
-     * Sets the timezone option
-     *
-     * @param  DateTimeZone $timezone
-     * @return DateStep
-     */
-    public function setTimezone(DateTimeZone $timezone)
-    {
-        $this->timezone = $timezone;
-        return $this;
-    }
-
-    /**
-     * Supports formats with ISO week (W) definitions
-     *
-     * @see Date::convertString()
-     */
-    protected function convertString($value, $addErrors = true)
-    {
-        // Custom week format support
-        if (strpos($this->format, 'Y-\WW') === 0
-            && preg_match('/^([0-9]{4})\-W([0-9]{2})/', $value, $matches)
-        ) {
-            $date = new DateTime;
-            $date->setISODate($matches[1], $matches[2]);
-        } else {
-            $date = DateTime::createFromFormat($this->format, $value, $this->timezone);
-        }
-
-        // Invalid dates can show up as warnings (ie. "2007-02-99")
-        // and still return a DateTime object.
-        $errors = DateTime::getLastErrors();
-        if ($errors['warning_count'] > 0) {
-            if ($addErrors) {
-                $this->error(self::FALSEFORMAT);
-            }
-            return false;
-        }
-
-        return $date;
-    }
-
-    /**
-     * Returns true if a date is within a valid step
-     *
-     * @param  string|int|\DateTime $value
-     * @return bool
-     * @throws Exception\InvalidArgumentException
-     */
-    public function isValid($value)
-    {
-        if (!parent::isValid($value)) {
-            return false;
-        }
-
-        $valueDate = $this->convertToDateTime($value, false); // avoid duplicate errors
-        $baseDate  = $this->convertToDateTime($this->baseValue, false);
-        $step      = $this->getStep();
-
-        // Same date?
-        if ($valueDate == $baseDate) {
-            return true;
-        }
-
-        // Optimization for simple intervals.
-        // Handle intervals of just one date or time unit.
-        $intervalParts = explode('|', $step->format('%y|%m|%d|%h|%i|%s'));
-        $partCounts    = array_count_values($intervalParts);
-
-        $unitKeys = array('years', 'months', 'days', 'hours', 'minutes', 'seconds');
-        $intervalParts = array_combine($unitKeys, $intervalParts);
-
-        // Get absolute time difference to avoid special cases of missing/added time
-        $absoluteValueDate = new DateTime($valueDate->format('Y-m-d H:i:s'), new DateTimeZone('UTC'));
-        $absoluteBaseDate = new DateTime($baseDate->format('Y-m-d H:i:s'), new DateTimeZone('UTC'));
-
-        $timeDiff  = $absoluteValueDate->diff($absoluteBaseDate, 1);
-        $diffParts = array_combine($unitKeys, explode('|', $timeDiff->format('%y|%m|%d|%h|%i|%s')));
-
-        if (5 === $partCounts["0"]) {
-            // Find the unit with the non-zero interval
-            $intervalUnit = null;
-            $stepValue    = null;
-            foreach ($intervalParts as $key => $value) {
-                if (0 != $value) {
-                    $intervalUnit = $key;
-                    $stepValue    = (int) $value;
-                    break;
-                }
-            }
-
-            // Check date units
-            if (in_array($intervalUnit, array('years', 'months', 'days'))) {
-                switch ($intervalUnit) {
-                    case 'years':
-                        if (0 == $diffParts['months'] && 0 == $diffParts['days']
-                            && 0 == $diffParts['hours'] && 0 == $diffParts['minutes']
-                            && 0 == $diffParts['seconds']
-                        ) {
-                            if (($diffParts['years'] % $stepValue) === 0) {
-                                return true;
-                            }
-                        }
-                        break;
-                    case 'months':
-                        if (0 == $diffParts['days'] && 0 == $diffParts['hours']
-                            && 0 == $diffParts['minutes'] && 0 == $diffParts['seconds']
-                        ) {
-                            $months = ($diffParts['years'] * 12) + $diffParts['months'];
-                            if (($months % $stepValue) === 0) {
-                                return true;
-                            }
-                        }
-                        break;
-                    case 'days':
-                        if (0 == $diffParts['hours'] && 0 == $diffParts['minutes']
-                            && 0 == $diffParts['seconds']
-                        ) {
-                            $days = $timeDiff->format('%a'); // Total days
-                            if (($days % $stepValue) === 0) {
-                                return true;
-                            }
-                        }
-                        break;
-                }
-                $this->error(self::NOT_STEP);
-                return false;
-            }
-
-            // Check time units
-            if (in_array($intervalUnit, array('hours', 'minutes', 'seconds'))) {
-                // Simple test if $stepValue is 1.
-                if (1 == $stepValue) {
-                    if ('hours' === $intervalUnit
-                        && 0 == $diffParts['minutes'] && 0 == $diffParts['seconds']
-                    ) {
-                        return true;
-                    } elseif ('minutes' === $intervalUnit && 0 == $diffParts['seconds']) {
-                        return true;
-                    } elseif ('seconds' === $intervalUnit) {
-                        return true;
-                    }
-
-                    $this->error(self::NOT_STEP);
-
-                    return false;
-                }
-
-                // Simple test for same day, when using default baseDate
-                if ($baseDate->format('Y-m-d') == $valueDate->format('Y-m-d')
-                    && $baseDate->format('Y-m-d') == '1970-01-01'
-                ) {
-                    switch ($intervalUnit) {
-                        case 'hours':
-                            if (0 == $diffParts['minutes'] && 0 == $diffParts['seconds']) {
-                                if (($diffParts['hours'] % $stepValue) === 0) {
-                                    return true;
-                                }
-                            }
-                            break;
-                        case 'minutes':
-                            if (0 == $diffParts['seconds']) {
-                                $minutes = ($diffParts['hours'] * 60) + $diffParts['minutes'];
-                                if (($minutes % $stepValue) === 0) {
-                                    return true;
-                                }
-                            }
-                            break;
-                        case 'seconds':
-                            $seconds = ($diffParts['hours'] * 60 * 60)
-                                       + ($diffParts['minutes'] * 60)
-                                       + $diffParts['seconds'];
-                            if (($seconds % $stepValue) === 0) {
-                                return true;
-                            }
-                            break;
-                    }
-                    $this->error(self::NOT_STEP);
-                    return false;
-                }
-            }
-        }
-
-        return $this->fallbackIncrementalIterationLogic($baseDate, $valueDate, $intervalParts, $diffParts, $step);
-    }
-
-    /**
-     * Fall back to slower (but accurate) method for complex intervals.
-     * Keep adding steps to the base date until a match is found
-     * or until the value is exceeded.
-     *
-     * This is really slow if the interval is small, especially if the
-     * default base date of 1/1/1970 is used. We can skip a chunk of
-     * iterations by starting at the lower bound of steps needed to reach
-     * the target
-     *
-     * @param DateTime     $baseDate
-     * @param DateTime     $valueDate
-     * @param int[]        $intervalParts
-     * @param int[]        $diffParts
-     * @param DateInterval $step
-     *
-     * @return bool
-     */
-    private function fallbackIncrementalIterationLogic(
-        DateTime $baseDate,
-        DateTime $valueDate,
-        array $intervalParts,
-        array $diffParts,
-        DateInterval $step
-    ) {
-        list($minSteps, $requiredIterations) = $this->computeMinStepAndRequiredIterations($intervalParts, $diffParts);
-        $minimumInterval                     = $this->computeMinimumInterval($intervalParts, $minSteps);
-        $isIncrementalStepping               = $baseDate < $valueDate;
-        $dateModificationOperation           = $isIncrementalStepping ? 'add' : 'sub';
-
-        for ($offsetIterations = 0; $offsetIterations < $requiredIterations; $offsetIterations += 1) {
-            $baseDate->{$dateModificationOperation}($minimumInterval);
-        }
-
-        while (($isIncrementalStepping && $baseDate < $valueDate)
-            || (! $isIncrementalStepping && $baseDate > $valueDate)
-        ) {
-            $baseDate->{$dateModificationOperation}($step);
-
-            if ($baseDate == $valueDate) {
-                return true;
-            }
-        }
-
-        $this->error(self::NOT_STEP);
-
-        return false;
-    }
-
-    /**
-     * Computes minimum interval to use for iterations while checking steps
-     *
-     * @param int[] $intervalParts
-     * @param int   $minSteps
-     *
-     * @return DateInterval
-     */
-    private function computeMinimumInterval(array $intervalParts, $minSteps)
-    {
-        return new DateInterval(sprintf(
-            'P%dY%dM%dDT%dH%dM%dS',
-            $intervalParts['years'] * $minSteps,
-            $intervalParts['months'] * $minSteps,
-            $intervalParts['days'] * $minSteps,
-            $intervalParts['hours'] * $minSteps,
-            $intervalParts['minutes'] * $minSteps,
-            $intervalParts['seconds'] * $minSteps
-        ));
-    }
-
-    /**
-     * @param int[] $intervalParts
-     * @param int[] $diffParts
-     *
-     * @return int[] (ordered tuple containing minimum steps and required step iterations
-     */
-    private function computeMinStepAndRequiredIterations(array $intervalParts, array $diffParts)
-    {
-        $minSteps = $this->computeMinSteps($intervalParts, $diffParts);
-
-        // If we use PHP_INT_MAX DateInterval::__construct falls over with a bad format error
-        // before we reach the max on 64 bit machines
-        $maxInteger             = min(pow(2, 31), PHP_INT_MAX);
-        // check for integer overflow and split $minimum interval if needed
-        $maximumInterval        = max($intervalParts);
-        $requiredStepIterations = 1;
-
-        if (($minSteps * $maximumInterval) > $maxInteger) {
-            $requiredStepIterations = ceil(($minSteps * $maximumInterval) / $maxInteger);
-            $minSteps               = floor($minSteps / $requiredStepIterations);
-        }
-
-        return array($minSteps, $minSteps ? $requiredStepIterations : 0);
-    }
-
-    /**
-     * Multiply the step interval by the lower bound of steps to reach the target
-     *
-     * @param int[] $intervalParts
-     * @param int[] $diffParts
-     *
-     * @return int
-     */
-    private function computeMinSteps(array $intervalParts, array $diffParts)
-    {
-        $intervalMaxSeconds = $this->computeIntervalMaxSeconds($intervalParts);
-
-        return (0 == $intervalMaxSeconds)
-            ? 0
-            : max(floor($this->computeDiffMinSeconds($diffParts) / $intervalMaxSeconds) - 1, 0);
-    }
-
-    /**
-     * Get upper bound of the given interval in seconds
-     * Converts a given `$intervalParts` array into seconds
-     *
-     * @param int[] $intervalParts
-     *
-     * @return int
-     */
-    private function computeIntervalMaxSeconds(array $intervalParts)
-    {
-        return ($intervalParts['years'] * 60 * 60 * 24 * 366)
-            + ($intervalParts['months'] * 60 * 60 * 24 * 31)
-            + ($intervalParts['days'] * 60 * 60 * 24)
-            + ($intervalParts['hours'] * 60 * 60)
-            + ($intervalParts['minutes'] * 60)
-            + $intervalParts['seconds'];
-    }
-
-    /**
-     * Get lower bound of difference in secondss
-     * Converts a given `$diffParts` array into seconds
-     *
-     * @param int[] $diffParts
-     *
-     * @return int
-     */
-    private function computeDiffMinSeconds(array $diffParts)
-    {
-        return ($diffParts['years'] * 60 * 60 * 24 * 365)
-            + ($diffParts['months'] * 60 * 60 * 24 * 28)
-            + ($diffParts['days'] * 60 * 60 * 24)
-            + ($diffParts['hours'] * 60 * 60)
-            + ($diffParts['minutes'] * 60)
-            + $diffParts['seconds'];
-    }
-}
diff --git a/civicrm/vendor/zendframework/zend-validator/src/Db/AbstractDb.php b/civicrm/vendor/zendframework/zend-validator/src/Db/AbstractDb.php
deleted file mode 100644
index 9dac88853876171e6f33e62d1099e230fb873ec2..0000000000000000000000000000000000000000
--- a/civicrm/vendor/zendframework/zend-validator/src/Db/AbstractDb.php
+++ /dev/null
@@ -1,330 +0,0 @@
-<?php
-/**
- * Zend Framework (http://framework.zend.com/)
- *
- * @link      http://github.com/zendframework/zf2 for the canonical source repository
- * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
- * @license   http://framework.zend.com/license/new-bsd New BSD License
- */
-
-namespace Zend\Validator\Db;
-
-use Traversable;
-use Zend\Db\Adapter\Adapter as DbAdapter;
-use Zend\Db\Sql\Select;
-use Zend\Db\Sql\Sql;
-use Zend\Db\Sql\TableIdentifier;
-use Zend\Stdlib\ArrayUtils;
-use Zend\Validator\AbstractValidator;
-use Zend\Validator\Exception;
-
-/**
- * Class for Database record validation
- */
-abstract class AbstractDb extends AbstractValidator
-{
-    /**
-     * Error constants
-     */
-    const ERROR_NO_RECORD_FOUND = 'noRecordFound';
-    const ERROR_RECORD_FOUND    = 'recordFound';
-
-    /**
-     * @var array Message templates
-     */
-    protected $messageTemplates = array(
-        self::ERROR_NO_RECORD_FOUND => "No record matching the input was found",
-        self::ERROR_RECORD_FOUND    => "A record matching the input was found",
-    );
-
-    /**
-     * Select object to use. can be set, or will be auto-generated
-     *
-     * @var Select
-     */
-    protected $select;
-
-    /**
-     * @var string
-     */
-    protected $schema = null;
-
-    /**
-     * @var string
-     */
-    protected $table = '';
-
-    /**
-     * @var string
-     */
-    protected $field = '';
-
-    /**
-     * @var mixed
-     */
-    protected $exclude = null;
-
-    /**
-     * Database adapter to use. If null isValid() will throw an exception
-     *
-     * @var \Zend\Db\Adapter\Adapter
-     */
-    protected $adapter = null;
-
-    /**
-     * Provides basic configuration for use with Zend\Validator\Db Validators
-     * Setting $exclude allows a single record to be excluded from matching.
-     * Exclude can either be a String containing a where clause, or an array with `field` and `value` keys
-     * to define the where clause added to the sql.
-     * A database adapter may optionally be supplied to avoid using the registered default adapter.
-     *
-     * The following option keys are supported:
-     * 'table'   => The database table to validate against
-     * 'schema'  => The schema keys
-     * 'field'   => The field to check for a match
-     * 'exclude' => An optional where clause or field/value pair to exclude from the query
-     * 'adapter' => An optional database adapter to use
-     *
-     * @param array|Traversable|Select $options Options to use for this validator
-     * @throws \Zend\Validator\Exception\InvalidArgumentException
-     */
-    public function __construct($options = null)
-    {
-        parent::__construct($options);
-
-        if ($options instanceof Select) {
-            $this->setSelect($options);
-            return;
-        }
-
-        if ($options instanceof Traversable) {
-            $options = ArrayUtils::iteratorToArray($options);
-        } elseif (func_num_args() > 1) {
-            $options       = func_get_args();
-            $firstArgument = array_shift($options);
-            if (is_array($firstArgument)) {
-                $temp = ArrayUtils::iteratorToArray($firstArgument);
-            } else {
-                $temp['table'] = $firstArgument;
-            }
-
-            $temp['field'] = array_shift($options);
-
-            if (!empty($options)) {
-                $temp['exclude'] = array_shift($options);
-            }
-
-            if (!empty($options)) {
-                $temp['adapter'] = array_shift($options);
-            }
-
-            $options = $temp;
-        }
-
-        if (!array_key_exists('table', $options) && !array_key_exists('schema', $options)) {
-            throw new Exception\InvalidArgumentException('Table or Schema option missing!');
-        }
-
-        if (!array_key_exists('field', $options)) {
-            throw new Exception\InvalidArgumentException('Field option missing!');
-        }
-
-        if (array_key_exists('adapter', $options)) {
-            $this->setAdapter($options['adapter']);
-        }
-
-        if (array_key_exists('exclude', $options)) {
-            $this->setExclude($options['exclude']);
-        }
-
-        $this->setField($options['field']);
-        if (array_key_exists('table', $options)) {
-            $this->setTable($options['table']);
-        }
-
-        if (array_key_exists('schema', $options)) {
-            $this->setSchema($options['schema']);
-        }
-    }
-
-    /**
-     * Returns the set adapter
-     *
-     * @throws \Zend\Validator\Exception\RuntimeException When no database adapter is defined
-     * @return DbAdapter
-     */
-    public function getAdapter()
-    {
-        return $this->adapter;
-    }
-
-    /**
-     * Sets a new database adapter
-     *
-     * @param  DbAdapter $adapter
-     * @return self Provides a fluent interface
-     */
-    public function setAdapter(DbAdapter $adapter)
-    {
-        $this->adapter = $adapter;
-        return $this;
-    }
-
-    /**
-     * Returns the set exclude clause
-     *
-     * @return string|array
-     */
-    public function getExclude()
-    {
-        return $this->exclude;
-    }
-
-    /**
-     * Sets a new exclude clause
-     *
-     * @param string|array $exclude
-     * @return self Provides a fluent interface
-     */
-    public function setExclude($exclude)
-    {
-        $this->exclude = $exclude;
-        $this->select  = null;
-        return $this;
-    }
-
-    /**
-     * Returns the set field
-     *
-     * @return string|array
-     */
-    public function getField()
-    {
-        return $this->field;
-    }
-
-    /**
-     * Sets a new field
-     *
-     * @param string $field
-     * @return AbstractDb
-     */
-    public function setField($field)
-    {
-        $this->field  = (string) $field;
-        $this->select = null;
-        return $this;
-    }
-
-    /**
-     * Returns the set table
-     *
-     * @return string
-     */
-    public function getTable()
-    {
-        return $this->table;
-    }
-
-    /**
-     * Sets a new table
-     *
-     * @param string $table
-     * @return self Provides a fluent interface
-     */
-    public function setTable($table)
-    {
-        $this->table  = (string) $table;
-        $this->select = null;
-        return $this;
-    }
-
-    /**
-     * Returns the set schema
-     *
-     * @return string
-     */
-    public function getSchema()
-    {
-        return $this->schema;
-    }
-
-    /**
-     * Sets a new schema
-     *
-     * @param string $schema
-     * @return self Provides a fluent interface
-     */
-    public function setSchema($schema)
-    {
-        $this->schema = $schema;
-        $this->select = null;
-        return $this;
-    }
-
-    /**
-     * Sets the select object to be used by the validator
-     *
-     * @param  Select $select
-     * @return self Provides a fluent interface
-     */
-    public function setSelect(Select $select)
-    {
-        $this->select = $select;
-        return $this;
-    }
-
-    /**
-     * Gets the select object to be used by the validator.
-     * If no select object was supplied to the constructor,
-     * then it will auto-generate one from the given table,
-     * schema, field, and adapter options.
-     *
-     * @return Select The Select object which will be used
-     */
-    public function getSelect()
-    {
-        if ($this->select instanceof Select) {
-            return $this->select;
-        }
-
-        // Build select object
-        $select          = new Select();
-        $tableIdentifier = new TableIdentifier($this->table, $this->schema);
-        $select->from($tableIdentifier)->columns(array($this->field));
-        $select->where->equalTo($this->field, null);
-
-        if ($this->exclude !== null) {
-            if (is_array($this->exclude)) {
-                $select->where->notEqualTo(
-                    $this->exclude['field'],
-                    $this->exclude['value']
-                );
-            } else {
-                $select->where($this->exclude);
-            }
-        }
-
-        $this->select = $select;
-
-        return $this->select;
-    }
-
-    /**
-     * Run query and returns matches, or null if no matches are found.
-     *
-     * @param  string $value
-     * @return array when matches are found.
-     */
-    protected function query($value)
-    {
-        $sql = new Sql($this->getAdapter());
-        $select = $this->getSelect();
-        $statement = $sql->prepareStatementForSqlObject($select);
-        $parameters = $statement->getParameterContainer();
-        $parameters['where1'] = $value;
-        $result = $statement->execute();
-
-        return $result->current();
-    }
-}
diff --git a/civicrm/vendor/zendframework/zend-validator/src/Db/NoRecordExists.php b/civicrm/vendor/zendframework/zend-validator/src/Db/NoRecordExists.php
deleted file mode 100644
index e87fdd6858e565e5fd7e952229732f68566e04ce..0000000000000000000000000000000000000000
--- a/civicrm/vendor/zendframework/zend-validator/src/Db/NoRecordExists.php
+++ /dev/null
@@ -1,39 +0,0 @@
-<?php
-/**
- * Zend Framework (http://framework.zend.com/)
- *
- * @link      http://github.com/zendframework/zf2 for the canonical source repository
- * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
- * @license   http://framework.zend.com/license/new-bsd New BSD License
- */
-
-namespace Zend\Validator\Db;
-
-use Zend\Validator\Exception;
-
-/**
- * Confirms a record does not exist in a table.
- */
-class NoRecordExists extends AbstractDb
-{
-    public function isValid($value)
-    {
-        /*
-         * Check for an adapter being defined. If not, throw an exception.
-         */
-        if (null === $this->adapter) {
-            throw new Exception\RuntimeException('No database adapter present');
-        }
-
-        $valid = true;
-        $this->setValue($value);
-
-        $result = $this->query($value);
-        if ($result) {
-            $valid = false;
-            $this->error(self::ERROR_RECORD_FOUND);
-        }
-
-        return $valid;
-    }
-}
diff --git a/civicrm/vendor/zendframework/zend-validator/src/Db/RecordExists.php b/civicrm/vendor/zendframework/zend-validator/src/Db/RecordExists.php
deleted file mode 100644
index a7d06d33c125341ec0189d1a449ede8c462ddb31..0000000000000000000000000000000000000000
--- a/civicrm/vendor/zendframework/zend-validator/src/Db/RecordExists.php
+++ /dev/null
@@ -1,39 +0,0 @@
-<?php
-/**
- * Zend Framework (http://framework.zend.com/)
- *
- * @link      http://github.com/zendframework/zf2 for the canonical source repository
- * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
- * @license   http://framework.zend.com/license/new-bsd New BSD License
- */
-
-namespace Zend\Validator\Db;
-
-use Zend\Validator\Exception;
-
-/**
- * Confirms a record exists in a table.
- */
-class RecordExists extends AbstractDb
-{
-    public function isValid($value)
-    {
-        /*
-         * Check for an adapter being defined. If not, throw an exception.
-         */
-        if (null === $this->adapter) {
-            throw new Exception\RuntimeException('No database adapter present');
-        }
-
-        $valid = true;
-        $this->setValue($value);
-
-        $result = $this->query($value);
-        if (!$result) {
-            $valid = false;
-            $this->error(self::ERROR_NO_RECORD_FOUND);
-        }
-
-        return $valid;
-    }
-}
diff --git a/civicrm/vendor/zendframework/zend-validator/src/Digits.php b/civicrm/vendor/zendframework/zend-validator/src/Digits.php
deleted file mode 100644
index 94210c917d9c61fc45ba7e5fc1c4e44dd49d5f03..0000000000000000000000000000000000000000
--- a/civicrm/vendor/zendframework/zend-validator/src/Digits.php
+++ /dev/null
@@ -1,69 +0,0 @@
-<?php
-/**
- * Zend Framework (http://framework.zend.com/)
- *
- * @link      http://github.com/zendframework/zf2 for the canonical source repository
- * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
- * @license   http://framework.zend.com/license/new-bsd New BSD License
- */
-
-namespace Zend\Validator;
-
-use Zend\Filter\Digits as DigitsFilter;
-
-class Digits extends AbstractValidator
-{
-    const NOT_DIGITS   = 'notDigits';
-    const STRING_EMPTY = 'digitsStringEmpty';
-    const INVALID      = 'digitsInvalid';
-
-    /**
-     * Digits filter used for validation
-     *
-     * @var \Zend\Filter\Digits
-     */
-    protected static $filter = null;
-
-    /**
-     * Validation failure message template definitions
-     *
-     * @var array
-     */
-    protected $messageTemplates = array(
-        self::NOT_DIGITS   => "The input must contain only digits",
-        self::STRING_EMPTY => "The input is an empty string",
-        self::INVALID      => "Invalid type given. String, integer or float expected",
-    );
-
-    /**
-     * Returns true if and only if $value only contains digit characters
-     *
-     * @param  string $value
-     * @return bool
-     */
-    public function isValid($value)
-    {
-        if (!is_string($value) && !is_int($value) && !is_float($value)) {
-            $this->error(self::INVALID);
-            return false;
-        }
-
-        $this->setValue((string) $value);
-
-        if ('' === $this->getValue()) {
-            $this->error(self::STRING_EMPTY);
-            return false;
-        }
-
-        if (null === static::$filter) {
-            static::$filter = new DigitsFilter();
-        }
-
-        if ($this->getValue() !== static::$filter->filter($this->getValue())) {
-            $this->error(self::NOT_DIGITS);
-            return false;
-        }
-
-        return true;
-    }
-}
diff --git a/civicrm/vendor/zendframework/zend-validator/src/EmailAddress.php b/civicrm/vendor/zendframework/zend-validator/src/EmailAddress.php
deleted file mode 100644
index c12368665ec8d5b5ae84572d19b1feae38654289..0000000000000000000000000000000000000000
--- a/civicrm/vendor/zendframework/zend-validator/src/EmailAddress.php
+++ /dev/null
@@ -1,549 +0,0 @@
-<?php
-/**
- * Zend Framework (http://framework.zend.com/)
- *
- * @link      http://github.com/zendframework/zf2 for the canonical source repository
- * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
- * @license   http://framework.zend.com/license/new-bsd New BSD License
- */
-
-namespace Zend\Validator;
-
-class EmailAddress extends AbstractValidator
-{
-    const INVALID            = 'emailAddressInvalid';
-    const INVALID_FORMAT     = 'emailAddressInvalidFormat';
-    const INVALID_HOSTNAME   = 'emailAddressInvalidHostname';
-    const INVALID_MX_RECORD  = 'emailAddressInvalidMxRecord';
-    const INVALID_SEGMENT    = 'emailAddressInvalidSegment';
-    const DOT_ATOM           = 'emailAddressDotAtom';
-    const QUOTED_STRING      = 'emailAddressQuotedString';
-    const INVALID_LOCAL_PART = 'emailAddressInvalidLocalPart';
-    const LENGTH_EXCEEDED    = 'emailAddressLengthExceeded';
-
-    /**
-     * @var array
-     */
-    protected $messageTemplates = array(
-        self::INVALID            => "Invalid type given. String expected",
-        self::INVALID_FORMAT     => "The input is not a valid email address. Use the basic format local-part@hostname",
-        self::INVALID_HOSTNAME   => "'%hostname%' is not a valid hostname for the email address",
-        self::INVALID_MX_RECORD  => "'%hostname%' does not appear to have any valid MX or A records for the email address",
-        self::INVALID_SEGMENT    => "'%hostname%' is not in a routable network segment. The email address should not be resolved from public network",
-        self::DOT_ATOM           => "'%localPart%' can not be matched against dot-atom format",
-        self::QUOTED_STRING      => "'%localPart%' can not be matched against quoted-string format",
-        self::INVALID_LOCAL_PART => "'%localPart%' is not a valid local part for the email address",
-        self::LENGTH_EXCEEDED    => "The input exceeds the allowed length",
-    );
-
-    /**
-     * @var array
-     */
-    protected $messageVariables = array(
-        'hostname'  => 'hostname',
-        'localPart' => 'localPart'
-    );
-
-    /**
-     * @var string
-     */
-    protected $hostname;
-
-    /**
-     * @var string
-     */
-    protected $localPart;
-
-    /**
-     * Returns the found mx record informations
-     *
-     * @var array
-     */
-    protected $mxRecord;
-
-    /**
-     * Internal options array
-     */
-    protected $options = array(
-        'useMxCheck'        => false,
-        'useDeepMxCheck'    => false,
-        'useDomainCheck'    => true,
-        'allow'             => Hostname::ALLOW_DNS,
-        'hostnameValidator' => null,
-    );
-
-    /**
-     * Instantiates hostname validator for local use
-     *
-     * The following additional option keys are supported:
-     * 'hostnameValidator' => A hostname validator, see Zend\Validator\Hostname
-     * 'allow'             => Options for the hostname validator, see Zend\Validator\Hostname::ALLOW_*
-     * 'useMxCheck'        => If MX check should be enabled, boolean
-     * 'useDeepMxCheck'    => If a deep MX check should be done, boolean
-     *
-     * @param array|\Traversable $options OPTIONAL
-     */
-    public function __construct($options = array())
-    {
-        if (!is_array($options)) {
-            $options = func_get_args();
-            $temp['allow'] = array_shift($options);
-            if (!empty($options)) {
-                $temp['useMxCheck'] = array_shift($options);
-            }
-
-            if (!empty($options)) {
-                $temp['hostnameValidator'] = array_shift($options);
-            }
-
-            $options = $temp;
-        }
-
-        parent::__construct($options);
-    }
-
-    /**
-     * Sets the validation failure message template for a particular key
-     * Adds the ability to set messages to the attached hostname validator
-     *
-     * @param  string $messageString
-     * @param  string $messageKey     OPTIONAL
-     * @return AbstractValidator Provides a fluent interface
-     */
-    public function setMessage($messageString, $messageKey = null)
-    {
-        if ($messageKey === null) {
-            $this->getHostnameValidator()->setMessage($messageString);
-            parent::setMessage($messageString);
-            return $this;
-        }
-
-        if (!isset($this->messageTemplates[$messageKey])) {
-            $this->getHostnameValidator()->setMessage($messageString, $messageKey);
-        } else {
-            parent::setMessage($messageString, $messageKey);
-        }
-
-        return $this;
-    }
-
-    /**
-     * Returns the set hostname validator
-     *
-     * If was not previously set then lazy load a new one
-     *
-     * @return Hostname
-     */
-    public function getHostnameValidator()
-    {
-        if (!isset($this->options['hostnameValidator'])) {
-            $this->options['hostnameValidator'] = new Hostname($this->getAllow());
-        }
-
-        return $this->options['hostnameValidator'];
-    }
-
-    /**
-     * @param Hostname $hostnameValidator OPTIONAL
-     * @return EmailAddress Provides a fluent interface
-     */
-    public function setHostnameValidator(Hostname $hostnameValidator = null)
-    {
-        $this->options['hostnameValidator'] = $hostnameValidator;
-
-        return $this;
-    }
-
-    /**
-     * Returns the allow option of the attached hostname validator
-     *
-     * @return int
-     */
-    public function getAllow()
-    {
-        return $this->options['allow'];
-    }
-
-    /**
-     * Sets the allow option of the hostname validator to use
-     *
-     * @param int $allow
-     * @return EmailAddress Provides a fluent interface
-     */
-    public function setAllow($allow)
-    {
-        $this->options['allow'] = $allow;
-        if (isset($this->options['hostnameValidator'])) {
-            $this->options['hostnameValidator']->setAllow($allow);
-        }
-
-        return $this;
-    }
-
-    /**
-     * Whether MX checking via getmxrr is supported or not
-     *
-     * @return bool
-     */
-    public function isMxSupported()
-    {
-        return function_exists('getmxrr');
-    }
-
-    /**
-     * Returns the set validateMx option
-     *
-     * @return bool
-     */
-    public function getMxCheck()
-    {
-        return $this->options['useMxCheck'];
-    }
-
-    /**
-     * Set whether we check for a valid MX record via DNS
-     *
-     * This only applies when DNS hostnames are validated
-     *
-     * @param  bool $mx Set allowed to true to validate for MX records, and false to not validate them
-     * @return EmailAddress Fluid Interface
-     */
-    public function useMxCheck($mx)
-    {
-        $this->options['useMxCheck'] = (bool) $mx;
-        return $this;
-    }
-
-    /**
-     * Returns the set deepMxCheck option
-     *
-     * @return bool
-     */
-    public function getDeepMxCheck()
-    {
-        return $this->options['useDeepMxCheck'];
-    }
-
-    /**
-     * Use deep validation for MX records
-     *
-     * @param  bool $deep Set deep to true to perform a deep validation process for MX records
-     * @return EmailAddress Fluid Interface
-     */
-    public function useDeepMxCheck($deep)
-    {
-        $this->options['useDeepMxCheck'] = (bool) $deep;
-        return $this;
-    }
-
-    /**
-     * Returns the set domainCheck option
-     *
-     * @return bool
-     */
-    public function getDomainCheck()
-    {
-        return $this->options['useDomainCheck'];
-    }
-
-    /**
-     * Sets if the domain should also be checked
-     * or only the local part of the email address
-     *
-     * @param  bool $domain
-     * @return EmailAddress Fluid Interface
-     */
-    public function useDomainCheck($domain = true)
-    {
-        $this->options['useDomainCheck'] = (bool) $domain;
-        return $this;
-    }
-
-    /**
-     * Returns if the given host is reserved
-     *
-     * The following addresses are seen as reserved
-     * '0.0.0.0/8', '10.0.0.0/8', '127.0.0.0/8'
-     * '100.64.0.0/10'
-     * '172.16.0.0/12'
-     * '198.18.0.0/15'
-     * '169.254.0.0/16', '192.168.0.0/16'
-     * '192.0.2.0/24', '192.88.99.0/24', '198.51.100.0/24', '203.0.113.0/24'
-     * '224.0.0.0/4', '240.0.0.0/4'
-     * @see http://en.wikipedia.org/wiki/Reserved_IP_addresses
-     *
-     * As of RFC5753 (JAN 2010), the following blocks are no longer reserved:
-     *   - 128.0.0.0/16
-     *   - 191.255.0.0/16
-     *   - 223.255.255.0/24
-     * @see http://tools.ietf.org/html/rfc5735#page-6
-     *
-     * As of RFC6598 (APR 2012), the following blocks are now reserved:
-     *   - 100.64.0.0/10
-     * @see http://tools.ietf.org/html/rfc6598#section-7
-     *
-     * @param string $host
-     * @return bool Returns false when minimal one of the given addresses is not reserved
-     */
-    protected function isReserved($host)
-    {
-        if (!preg_match('/^([0-9]{1,3}\.){3}[0-9]{1,3}$/', $host)) {
-            $host = gethostbynamel($host);
-        } else {
-            $host = array($host);
-        }
-
-        if (empty($host)) {
-            return false;
-        }
-
-        foreach ($host as $server) {
-            // Search for 0.0.0.0/8, 10.0.0.0/8, 127.0.0.0/8
-            if (!preg_match('/^(0|10|127)(\.([0-9]|[1-9][0-9]|1([0-9][0-9])|2([0-4][0-9]|5[0-5]))){3}$/', $server) &&
-                // Search for 100.64.0.0/10
-                !preg_match('/^100\.(6[0-4]|[7-9][0-9]|1[0-1][0-9]|12[0-7])(\.([0-9]|[1-9][0-9]|1([0-9][0-9])|2([0-4][0-9]|5[0-5]))){2}$/', $server) &&
-                // Search for 172.16.0.0/12
-                !preg_match('/^172\.(1[6-9]|2[0-9]|3[0-1])(\.([0-9]|[1-9][0-9]|1([0-9][0-9])|2([0-4][0-9]|5[0-5]))){2}$/', $server) &&
-                // Search for 198.18.0.0/15
-                !preg_match('/^198\.(1[8-9])(\.([0-9]|[1-9][0-9]|1([0-9][0-9])|2([0-4][0-9]|5[0-5]))){2}$/', $server) &&
-                // Search for 169.254.0.0/16, 192.168.0.0/16
-                !preg_match('/^(169\.254|192\.168)(\.([0-9]|[1-9][0-9]|1([0-9][0-9])|2([0-4][0-9]|5[0-5]))){2}$/', $server) &&
-                // Search for 192.0.2.0/24, 192.88.99.0/24, 198.51.100.0/24, 203.0.113.0/24
-                !preg_match('/^(192\.0\.2|192\.88\.99|198\.51\.100|203\.0\.113)\.([0-9]|[1-9][0-9]|1([0-9][0-9])|2([0-4][0-9]|5[0-5]))$/', $server) &&
-                // Search for 224.0.0.0/4, 240.0.0.0/4
-                !preg_match('/^(2(2[4-9]|[3-4][0-9]|5[0-5]))(\.([0-9]|[1-9][0-9]|1([0-9][0-9])|2([0-4][0-9]|5[0-5]))){3}$/', $server)
-            ) {
-                return false;
-            }
-        }
-
-        return true;
-    }
-
-    /**
-     * Internal method to validate the local part of the email address
-     *
-     * @return bool
-     */
-    protected function validateLocalPart()
-    {
-        // First try to match the local part on the common dot-atom format
-        $result = false;
-
-        // Dot-atom characters are: 1*atext *("." 1*atext)
-        // atext: ALPHA / DIGIT / and "!", "#", "$", "%", "&", "'", "*",
-        //        "+", "-", "/", "=", "?", "^", "_", "`", "{", "|", "}", "~"
-        $atext = 'a-zA-Z0-9\x21\x23\x24\x25\x26\x27\x2a\x2b\x2d\x2f\x3d\x3f\x5e\x5f\x60\x7b\x7c\x7d\x7e';
-        if (preg_match('/^[' . $atext . ']+(\x2e+[' . $atext . ']+)*$/', $this->idnToAscii($this->localPart))) {
-            $result = true;
-        } else {
-            // Try quoted string format (RFC 5321 Chapter 4.1.2)
-
-            // Quoted-string characters are: DQUOTE *(qtext/quoted-pair) DQUOTE
-            $qtext      = '\x20-\x21\x23-\x5b\x5d-\x7e'; // %d32-33 / %d35-91 / %d93-126
-            $quotedPair = '\x20-\x7e'; // %d92 %d32-126
-            if (preg_match('/^"(['. $qtext .']|\x5c[' . $quotedPair . '])*"$/', $this->localPart)) {
-                $result = true;
-            } else {
-                $this->error(self::DOT_ATOM);
-                $this->error(self::QUOTED_STRING);
-                $this->error(self::INVALID_LOCAL_PART);
-            }
-        }
-
-        return $result;
-    }
-
-    /**
-     * Returns the found MX Record information after validation including weight for further processing
-     *
-     * @return array
-     */
-    public function getMXRecord()
-    {
-        return $this->mxRecord;
-    }
-
-    /**
-     * Internal method to validate the servers MX records
-     *
-     * @return bool
-     */
-    protected function validateMXRecords()
-    {
-        $mxHosts = array();
-        $weight  = array();
-        $result = getmxrr($this->idnToAscii($this->hostname), $mxHosts, $weight);
-        if (!empty($mxHosts) && !empty($weight)) {
-            $this->mxRecord = array_combine($mxHosts, $weight);
-        } else {
-            $this->mxRecord = $mxHosts;
-        }
-
-        arsort($this->mxRecord);
-
-        // Fallback to IPv4 hosts if no MX record found (RFC 2821 SS 5).
-        if (!$result) {
-            $result = gethostbynamel($this->hostname);
-            if (is_array($result)) {
-                $this->mxRecord = array_flip($result);
-            }
-        }
-
-        if (!$result) {
-            $this->error(self::INVALID_MX_RECORD);
-            return $result;
-        }
-
-        if (!$this->options['useDeepMxCheck']) {
-            return $result;
-        }
-
-        $validAddress = false;
-        $reserved     = true;
-        foreach ($this->mxRecord as $hostname => $weight) {
-            $res = $this->isReserved($hostname);
-            if (!$res) {
-                $reserved = false;
-            }
-
-            if (!$res
-                && (checkdnsrr($hostname, "A")
-                || checkdnsrr($hostname, "AAAA")
-                || checkdnsrr($hostname, "A6"))
-            ) {
-                $validAddress = true;
-                break;
-            }
-        }
-
-        if (!$validAddress) {
-            $result = false;
-            $error  = ($reserved) ? self::INVALID_SEGMENT : self::INVALID_MX_RECORD;
-            $this->error($error);
-        }
-
-        return $result;
-    }
-
-    /**
-     * Internal method to validate the hostname part of the email address
-     *
-     * @return bool
-     */
-    protected function validateHostnamePart()
-    {
-        $hostname = $this->getHostnameValidator()->setTranslator($this->getTranslator())
-                         ->isValid($this->hostname);
-        if (!$hostname) {
-            $this->error(self::INVALID_HOSTNAME);
-            // Get messages and errors from hostnameValidator
-            foreach ($this->getHostnameValidator()->getMessages() as $code => $message) {
-                $this->abstractOptions['messages'][$code] = $message;
-            }
-        } elseif ($this->options['useMxCheck']) {
-            // MX check on hostname
-            $hostname = $this->validateMXRecords();
-        }
-
-        return $hostname;
-    }
-
-    /**
-     * Splits the given value in hostname and local part of the email address
-     *
-     * @param string $value Email address to be split
-     * @return bool Returns false when the email can not be split
-     */
-    protected function splitEmailParts($value)
-    {
-        $value = is_string($value) ? $value : '';
-
-        // Split email address up and disallow '..'
-        if (strpos($value, '..') !== false
-            || ! preg_match('/^(.+)@([^@]+)$/', $value, $matches)
-        ) {
-            return false;
-        }
-
-        $this->localPart = $matches[1];
-        $this->hostname  = $matches[2];
-
-        return true;
-    }
-
-    /**
-     * Defined by Zend\Validator\ValidatorInterface
-     *
-     * Returns true if and only if $value is a valid email address
-     * according to RFC2822
-     *
-     * @link   http://www.ietf.org/rfc/rfc2822.txt RFC2822
-     * @link   http://www.columbia.edu/kermit/ascii.html US-ASCII characters
-     * @param  string $value
-     * @return bool
-     */
-    public function isValid($value)
-    {
-        if (!is_string($value)) {
-            $this->error(self::INVALID);
-            return false;
-        }
-
-        $length  = true;
-        $this->setValue($this->idnToUtf8($value));
-
-        // Split email address up and disallow '..'
-        if (!$this->splitEmailParts($this->getValue())) {
-            $this->error(self::INVALID_FORMAT);
-            return false;
-        }
-
-        if ((strlen($this->localPart) > 64) || (strlen($this->hostname) > 255)) {
-            $length = false;
-            $this->error(self::LENGTH_EXCEEDED);
-        }
-
-        // Match hostname part
-        if ($this->options['useDomainCheck']) {
-            $hostname = $this->validateHostnamePart();
-        }
-
-        $local = $this->validateLocalPart();
-
-        // If both parts valid, return true
-        if ($local && $length) {
-            if (($this->options['useDomainCheck'] && $hostname) || !$this->options['useDomainCheck']) {
-                return true;
-            }
-        }
-
-        return false;
-    }
-
-    /**
-     * Safely convert UTF-8 encoded domain name to ASCII
-     * @param string $email  the UTF-8 encoded email
-     * @return string
-     */
-    protected function idnToAscii($email)
-    {
-        if (extension_loaded('intl')) {
-            return (idn_to_ascii($email) ?: $email);
-        }
-        return $email;
-    }
-
-    /**
-     * Safely convert ASCII encoded domain name to UTF-8
-     * @param string $email the ASCII encoded email
-     * @return string
-     */
-    protected function idnToUtf8($email)
-    {
-        if (extension_loaded('intl')) {
-            return idn_to_utf8($email);
-        }
-        return $email;
-    }
-}
diff --git a/civicrm/vendor/zendframework/zend-validator/src/Exception/BadMethodCallException.php b/civicrm/vendor/zendframework/zend-validator/src/Exception/BadMethodCallException.php
deleted file mode 100644
index a4aa15f412271f93b1c60977da194e8b4e13e182..0000000000000000000000000000000000000000
--- a/civicrm/vendor/zendframework/zend-validator/src/Exception/BadMethodCallException.php
+++ /dev/null
@@ -1,14 +0,0 @@
-<?php
-/**
- * Zend Framework (http://framework.zend.com/)
- *
- * @link      http://github.com/zendframework/zf2 for the canonical source repository
- * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
- * @license   http://framework.zend.com/license/new-bsd New BSD License
- */
-
-namespace Zend\Validator\Exception;
-
-class BadMethodCallException extends \BadMethodCallException implements ExceptionInterface
-{
-}
diff --git a/civicrm/vendor/zendframework/zend-validator/src/Exception/ExceptionInterface.php b/civicrm/vendor/zendframework/zend-validator/src/Exception/ExceptionInterface.php
deleted file mode 100644
index 7f4f0b1af539170eb8faaa0c54f8010306fee32d..0000000000000000000000000000000000000000
--- a/civicrm/vendor/zendframework/zend-validator/src/Exception/ExceptionInterface.php
+++ /dev/null
@@ -1,14 +0,0 @@
-<?php
-/**
- * Zend Framework (http://framework.zend.com/)
- *
- * @link      http://github.com/zendframework/zf2 for the canonical source repository
- * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
- * @license   http://framework.zend.com/license/new-bsd New BSD License
- */
-
-namespace Zend\Validator\Exception;
-
-interface ExceptionInterface
-{
-}
diff --git a/civicrm/vendor/zendframework/zend-validator/src/Exception/ExtensionNotLoadedException.php b/civicrm/vendor/zendframework/zend-validator/src/Exception/ExtensionNotLoadedException.php
deleted file mode 100644
index 4a6b7c03b66cd32d5d914e43cb620882211baa9a..0000000000000000000000000000000000000000
--- a/civicrm/vendor/zendframework/zend-validator/src/Exception/ExtensionNotLoadedException.php
+++ /dev/null
@@ -1,14 +0,0 @@
-<?php
-/**
- * Zend Framework (http://framework.zend.com/)
- *
- * @link      http://github.com/zendframework/zf2 for the canonical source repository
- * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
- * @license   http://framework.zend.com/license/new-bsd New BSD License
- */
-
-namespace Zend\Validator\Exception;
-
-class ExtensionNotLoadedException extends RuntimeException
-{
-}
diff --git a/civicrm/vendor/zendframework/zend-validator/src/Exception/InvalidArgumentException.php b/civicrm/vendor/zendframework/zend-validator/src/Exception/InvalidArgumentException.php
deleted file mode 100644
index b6518b03d673ee0547b13638a573521210f209de..0000000000000000000000000000000000000000
--- a/civicrm/vendor/zendframework/zend-validator/src/Exception/InvalidArgumentException.php
+++ /dev/null
@@ -1,14 +0,0 @@
-<?php
-/**
- * Zend Framework (http://framework.zend.com/)
- *
- * @link      http://github.com/zendframework/zf2 for the canonical source repository
- * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
- * @license   http://framework.zend.com/license/new-bsd New BSD License
- */
-
-namespace Zend\Validator\Exception;
-
-class InvalidArgumentException extends \InvalidArgumentException implements ExceptionInterface
-{
-}
diff --git a/civicrm/vendor/zendframework/zend-validator/src/Exception/InvalidMagicMimeFileException.php b/civicrm/vendor/zendframework/zend-validator/src/Exception/InvalidMagicMimeFileException.php
deleted file mode 100644
index 4e65bd86a187b7239833c3a045dad1a3aa80b6b4..0000000000000000000000000000000000000000
--- a/civicrm/vendor/zendframework/zend-validator/src/Exception/InvalidMagicMimeFileException.php
+++ /dev/null
@@ -1,14 +0,0 @@
-<?php
-/**
- * Zend Framework (http://framework.zend.com/)
- *
- * @link      http://github.com/zendframework/zf2 for the canonical source repository
- * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
- * @license   http://framework.zend.com/license/new-bsd New BSD License
- */
-
-namespace Zend\Validator\Exception;
-
-class InvalidMagicMimeFileException extends InvalidArgumentException
-{
-}
diff --git a/civicrm/vendor/zendframework/zend-validator/src/Exception/RuntimeException.php b/civicrm/vendor/zendframework/zend-validator/src/Exception/RuntimeException.php
deleted file mode 100644
index a6319e05910f90f615e879b993c9e13ec76e470a..0000000000000000000000000000000000000000
--- a/civicrm/vendor/zendframework/zend-validator/src/Exception/RuntimeException.php
+++ /dev/null
@@ -1,14 +0,0 @@
-<?php
-/**
- * Zend Framework (http://framework.zend.com/)
- *
- * @link      http://github.com/zendframework/zf2 for the canonical source repository
- * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
- * @license   http://framework.zend.com/license/new-bsd New BSD License
- */
-
-namespace Zend\Validator\Exception;
-
-class RuntimeException extends \RuntimeException implements ExceptionInterface
-{
-}
diff --git a/civicrm/vendor/zendframework/zend-validator/src/Explode.php b/civicrm/vendor/zendframework/zend-validator/src/Explode.php
deleted file mode 100644
index 54177ec293f7af30a3e77b72b116881fcfac0f71..0000000000000000000000000000000000000000
--- a/civicrm/vendor/zendframework/zend-validator/src/Explode.php
+++ /dev/null
@@ -1,210 +0,0 @@
-<?php
-/**
- * Zend Framework (http://framework.zend.com/)
- *
- * @link      http://github.com/zendframework/zf2 for the canonical source repository
- * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
- * @license   http://framework.zend.com/license/new-bsd New BSD License
- */
-
-namespace Zend\Validator;
-
-use Traversable;
-use Zend\Stdlib\ArrayUtils;
-
-class Explode extends AbstractValidator implements ValidatorPluginManagerAwareInterface
-{
-    const INVALID = 'explodeInvalid';
-
-    protected $pluginManager;
-
-    /**
-     * @var array
-     */
-    protected $messageTemplates = array(
-        self::INVALID => "Invalid type given",
-    );
-
-    /**
-     * @var array
-     */
-    protected $messageVariables = array();
-
-    /**
-     * @var string
-     */
-    protected $valueDelimiter = ',';
-
-    /**
-     * @var ValidatorInterface
-     */
-    protected $validator;
-
-    /**
-     * @var bool
-     */
-    protected $breakOnFirstFailure = false;
-
-    /**
-     * Sets the delimiter string that the values will be split upon
-     *
-     * @param string $delimiter
-     * @return Explode
-     */
-    public function setValueDelimiter($delimiter)
-    {
-        $this->valueDelimiter = $delimiter;
-        return $this;
-    }
-
-    /**
-     * Returns the delimiter string that the values will be split upon
-     *
-     * @return string
-     */
-    public function getValueDelimiter()
-    {
-        return $this->valueDelimiter;
-    }
-
-    /**
-     * Set validator plugin manager
-     *
-     * @param ValidatorPluginManager $pluginManager
-     */
-    public function setValidatorPluginManager(ValidatorPluginManager $pluginManager)
-    {
-        $this->pluginManager = $pluginManager;
-    }
-
-    /**
-     * Get validator plugin manager
-     *
-     * @return ValidatorPluginManager
-     */
-    public function getValidatorPluginManager()
-    {
-        if (!$this->pluginManager) {
-            $this->setValidatorPluginManager(new ValidatorPluginManager());
-        }
-
-        return $this->pluginManager;
-    }
-
-    /**
-     * Sets the Validator for validating each value
-     *
-     * @param ValidatorInterface|array $validator
-     * @throws Exception\RuntimeException
-     * @return Explode
-     */
-    public function setValidator($validator)
-    {
-        if (is_array($validator)) {
-            if (!isset($validator['name'])) {
-                throw new Exception\RuntimeException(
-                    'Invalid validator specification provided; does not include "name" key'
-                );
-            }
-            $name = $validator['name'];
-            $options = isset($validator['options']) ? $validator['options'] : array();
-            $validator = $this->getValidatorPluginManager()->get($name, $options);
-        }
-
-        if (!$validator instanceof ValidatorInterface) {
-            throw new Exception\RuntimeException(
-                'Invalid validator given'
-            );
-        }
-
-        $this->validator = $validator;
-        return $this;
-    }
-
-    /**
-     * Gets the Validator for validating each value
-     *
-     * @return ValidatorInterface
-     */
-    public function getValidator()
-    {
-        return $this->validator;
-    }
-
-    /**
-     * Set break on first failure setting
-     *
-     * @param  bool $break
-     * @return Explode
-     */
-    public function setBreakOnFirstFailure($break)
-    {
-        $this->breakOnFirstFailure = (bool) $break;
-        return $this;
-    }
-
-    /**
-     * Get break on first failure setting
-     *
-     * @return bool
-     */
-    public function isBreakOnFirstFailure()
-    {
-        return $this->breakOnFirstFailure;
-    }
-
-    /**
-     * Defined by Zend\Validator\ValidatorInterface
-     *
-     * Returns true if all values validate true
-     *
-     * @param  mixed $value
-     * @param  mixed $context Extra "context" to provide the composed validator
-     * @return bool
-     * @throws Exception\RuntimeException
-     */
-    public function isValid($value, $context = null)
-    {
-        $this->setValue($value);
-
-        if ($value instanceof Traversable) {
-            $value = ArrayUtils::iteratorToArray($value);
-        }
-
-        if (is_array($value)) {
-            $values = $value;
-        } elseif (is_string($value)) {
-            $delimiter = $this->getValueDelimiter();
-            // Skip explode if delimiter is null,
-            // used when value is expected to be either an
-            // array when multiple values and a string for
-            // single values (ie. MultiCheckbox form behavior)
-            $values = (null !== $delimiter)
-                      ? explode($this->valueDelimiter, $value)
-                      : array($value);
-        } else {
-            $values = array($value);
-        }
-
-        $validator = $this->getValidator();
-
-        if (!$validator) {
-            throw new Exception\RuntimeException(sprintf(
-                '%s expects a validator to be set; none given',
-                __METHOD__
-            ));
-        }
-
-        foreach ($values as $value) {
-            if (!$validator->isValid($value, $context)) {
-                $this->abstractOptions['messages'][] = $validator->getMessages();
-
-                if ($this->isBreakOnFirstFailure()) {
-                    return false;
-                }
-            }
-        }
-
-        return count($this->abstractOptions['messages']) == 0;
-    }
-}
diff --git a/civicrm/vendor/zendframework/zend-validator/src/File/Count.php b/civicrm/vendor/zendframework/zend-validator/src/File/Count.php
deleted file mode 100644
index 6a6ba37632ef17b0da773883708f36f1b53df7f2..0000000000000000000000000000000000000000
--- a/civicrm/vendor/zendframework/zend-validator/src/File/Count.php
+++ /dev/null
@@ -1,251 +0,0 @@
-<?php
-/**
- * Zend Framework (http://framework.zend.com/)
- *
- * @link      http://github.com/zendframework/zf2 for the canonical source repository
- * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
- * @license   http://framework.zend.com/license/new-bsd New BSD License
- */
-
-namespace Zend\Validator\File;
-
-use Zend\Validator\AbstractValidator;
-use Zend\Validator\Exception;
-
-/**
- * Validator for counting all given files
- *
- */
-class Count extends AbstractValidator
-{
-    /**#@+
-     * @const string Error constants
-     */
-    const TOO_MANY = 'fileCountTooMany';
-    const TOO_FEW  = 'fileCountTooFew';
-    /**#@-*/
-
-    /**
-     * @var array Error message templates
-     */
-    protected $messageTemplates = array(
-        self::TOO_MANY => "Too many files, maximum '%max%' are allowed but '%count%' are given",
-        self::TOO_FEW  => "Too few files, minimum '%min%' are expected but '%count%' are given",
-    );
-
-    /**
-     * @var array Error message template variables
-     */
-    protected $messageVariables = array(
-        'min'   => array('options' => 'min'),
-        'max'   => array('options' => 'max'),
-        'count' => 'count'
-    );
-
-    /**
-     * Actual filecount
-     *
-     * @var int
-     */
-    protected $count;
-
-    /**
-     * Internal file array
-     * @var array
-     */
-    protected $files;
-
-    /**
-     * Options for this validator
-     *
-     * @var array
-     */
-    protected $options = array(
-        'min' => null,  // Minimum file count, if null there is no minimum file count
-        'max' => null,  // Maximum file count, if null there is no maximum file count
-    );
-
-    /**
-     * Sets validator options
-     *
-     * Min limits the file count, when used with max=null it is the maximum file count
-     * It also accepts an array with the keys 'min' and 'max'
-     *
-     * If $options is an integer, it will be used as maximum file count
-     * As Array is accepts the following keys:
-     * 'min': Minimum filecount
-     * 'max': Maximum filecount
-     *
-     * @param  int|array|\Traversable $options Options for the adapter
-     */
-    public function __construct($options = null)
-    {
-        if (is_string($options) || is_numeric($options)) {
-            $options = array('max' => $options);
-        }
-
-        if (1 < func_num_args()) {
-            $options['min'] = func_get_arg(0);
-            $options['max'] = func_get_arg(1);
-        }
-
-        parent::__construct($options);
-    }
-
-    /**
-     * Returns the minimum file count
-     *
-     * @return int
-     */
-    public function getMin()
-    {
-        return $this->options['min'];
-    }
-
-    /**
-     * Sets the minimum file count
-     *
-     * @param  int|array $min The minimum file count
-     * @return Count Provides a fluent interface
-     * @throws Exception\InvalidArgumentException When min is greater than max
-     */
-    public function setMin($min)
-    {
-        if (is_array($min) and isset($min['min'])) {
-            $min = $min['min'];
-        }
-
-        if (!is_string($min) and !is_numeric($min)) {
-            throw new Exception\InvalidArgumentException('Invalid options to validator provided');
-        }
-
-        $min = (int) $min;
-        if (($this->getMax() !== null) && ($min > $this->getMax())) {
-            throw new Exception\InvalidArgumentException(
-                "The minimum must be less than or equal to the maximum file count, but {$min} > {$this->getMax()}"
-            );
-        }
-
-        $this->options['min'] = $min;
-        return $this;
-    }
-
-    /**
-     * Returns the maximum file count
-     *
-     * @return int
-     */
-    public function getMax()
-    {
-        return $this->options['max'];
-    }
-
-    /**
-     * Sets the maximum file count
-     *
-     * @param  int|array $max The maximum file count
-     * @return Count Provides a fluent interface
-     * @throws Exception\InvalidArgumentException When max is smaller than min
-     */
-    public function setMax($max)
-    {
-        if (is_array($max) and isset($max['max'])) {
-            $max = $max['max'];
-        }
-
-        if (!is_string($max) and !is_numeric($max)) {
-            throw new Exception\InvalidArgumentException('Invalid options to validator provided');
-        }
-
-        $max = (int) $max;
-        if (($this->getMin() !== null) && ($max < $this->getMin())) {
-            throw new Exception\InvalidArgumentException(
-                "The maximum must be greater than or equal to the minimum file count, but {$max} < {$this->getMin()}"
-            );
-        }
-
-        $this->options['max'] = $max;
-        return $this;
-    }
-
-    /**
-     * Adds a file for validation
-     *
-     * @param string|array $file
-     * @return Count
-     */
-    public function addFile($file)
-    {
-        if (is_string($file)) {
-            $file = array($file);
-        }
-
-        if (is_array($file)) {
-            foreach ($file as $name) {
-                if (!isset($this->files[$name]) && !empty($name)) {
-                    $this->files[$name] = $name;
-                }
-            }
-        }
-
-        return $this;
-    }
-
-    /**
-     * Returns true if and only if the file count of all checked files is at least min and
-     * not bigger than max (when max is not null). Attention: When checking with set min you
-     * must give all files with the first call, otherwise you will get a false.
-     *
-     * @param  string|array $value Filenames to check for count
-     * @param  array        $file  File data from \Zend\File\Transfer\Transfer
-     * @return bool
-     */
-    public function isValid($value, $file = null)
-    {
-        if (($file !== null) && !array_key_exists('destination', $file)) {
-            $file['destination'] = dirname($value);
-        }
-
-        if (($file !== null) && array_key_exists('tmp_name', $file)) {
-            $value = $file['destination'] . DIRECTORY_SEPARATOR . $file['name'];
-        }
-
-        if (($file === null) || !empty($file['tmp_name'])) {
-            $this->addFile($value);
-        }
-
-        $this->count = count($this->files);
-        if (($this->getMax() !== null) && ($this->count > $this->getMax())) {
-            return $this->throwError($file, self::TOO_MANY);
-        }
-
-        if (($this->getMin() !== null) && ($this->count < $this->getMin())) {
-            return $this->throwError($file, self::TOO_FEW);
-        }
-
-        return true;
-    }
-
-    /**
-     * Throws an error of the given type
-     *
-     * @param  string $file
-     * @param  string $errorType
-     * @return false
-     */
-    protected function throwError($file, $errorType)
-    {
-        if ($file !== null) {
-            if (is_array($file)) {
-                if (array_key_exists('name', $file)) {
-                    $this->value = $file['name'];
-                }
-            } elseif (is_string($file)) {
-                $this->value = $file;
-            }
-        }
-
-        $this->error($errorType);
-        return false;
-    }
-}
diff --git a/civicrm/vendor/zendframework/zend-validator/src/File/Crc32.php b/civicrm/vendor/zendframework/zend-validator/src/File/Crc32.php
deleted file mode 100644
index a5f3de8740b771db54edaa4268c49927915bc860..0000000000000000000000000000000000000000
--- a/civicrm/vendor/zendframework/zend-validator/src/File/Crc32.php
+++ /dev/null
@@ -1,128 +0,0 @@
-<?php
-/**
- * Zend Framework (http://framework.zend.com/)
- *
- * @link      http://github.com/zendframework/zf2 for the canonical source repository
- * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
- * @license   http://framework.zend.com/license/new-bsd New BSD License
- */
-
-namespace Zend\Validator\File;
-
-use Zend\Validator\Exception;
-
-/**
- * Validator for the crc32 hash of given files
- */
-class Crc32 extends Hash
-{
-    /**
-     * @const string Error constants
-     */
-    const DOES_NOT_MATCH = 'fileCrc32DoesNotMatch';
-    const NOT_DETECTED   = 'fileCrc32NotDetected';
-    const NOT_FOUND      = 'fileCrc32NotFound';
-
-    /**
-     * @var array Error message templates
-     */
-    protected $messageTemplates = array(
-        self::DOES_NOT_MATCH => "File does not match the given crc32 hashes",
-        self::NOT_DETECTED   => "A crc32 hash could not be evaluated for the given file",
-        self::NOT_FOUND      => "File is not readable or does not exist",
-    );
-
-    /**
-     * Options for this validator
-     *
-     * @var string
-     */
-    protected $options = array(
-        'algorithm' => 'crc32',
-        'hash'      => null,
-    );
-
-    /**
-     * Returns all set crc32 hashes
-     *
-     * @return array
-     */
-    public function getCrc32()
-    {
-        return $this->getHash();
-    }
-
-    /**
-     * Sets the crc32 hash for one or multiple files
-     *
-     * @param  string|array $options
-     * @return Crc32 Provides a fluent interface
-     */
-    public function setCrc32($options)
-    {
-        $this->setHash($options);
-        return $this;
-    }
-
-    /**
-     * Adds the crc32 hash for one or multiple files
-     *
-     * @param  string|array $options
-     * @return Crc32 Provides a fluent interface
-     */
-    public function addCrc32($options)
-    {
-        $this->addHash($options);
-        return $this;
-    }
-
-    /**
-     * Returns true if and only if the given file confirms the set hash
-     *
-     * @param  string|array $value Filename to check for hash
-     * @param  array        $file  File data from \Zend\File\Transfer\Transfer (optional)
-     * @return bool
-     */
-    public function isValid($value, $file = null)
-    {
-        if (is_string($value) && is_array($file)) {
-            // Legacy Zend\Transfer API support
-            $filename = $file['name'];
-            $file     = $file['tmp_name'];
-        } elseif (is_array($value)) {
-            if (!isset($value['tmp_name']) || !isset($value['name'])) {
-                throw new Exception\InvalidArgumentException(
-                    'Value array must be in $_FILES format'
-                );
-            }
-            $file     = $value['tmp_name'];
-            $filename = $value['name'];
-        } else {
-            $file     = $value;
-            $filename = basename($file);
-        }
-        $this->setValue($filename);
-
-        // Is file readable ?
-        if (empty($file) || false === stream_resolve_include_path($file)) {
-            $this->error(self::NOT_FOUND);
-            return false;
-        }
-
-        $hashes = array_unique(array_keys($this->getHash()));
-        $filehash = hash_file('crc32', $file);
-        if ($filehash === false) {
-            $this->error(self::NOT_DETECTED);
-            return false;
-        }
-
-        foreach ($hashes as $hash) {
-            if ($filehash === $hash) {
-                return true;
-            }
-        }
-
-        $this->error(self::DOES_NOT_MATCH);
-        return false;
-    }
-}
diff --git a/civicrm/vendor/zendframework/zend-validator/src/File/ExcludeExtension.php b/civicrm/vendor/zendframework/zend-validator/src/File/ExcludeExtension.php
deleted file mode 100644
index e73d25bdcbc7d43c5d40e0d6725e159511fe87a2..0000000000000000000000000000000000000000
--- a/civicrm/vendor/zendframework/zend-validator/src/File/ExcludeExtension.php
+++ /dev/null
@@ -1,86 +0,0 @@
-<?php
-/**
- * Zend Framework (http://framework.zend.com/)
- *
- * @link      http://github.com/zendframework/zf2 for the canonical source repository
- * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
- * @license   http://framework.zend.com/license/new-bsd New BSD License
- */
-
-namespace Zend\Validator\File;
-
-use Zend\Validator\Exception;
-
-/**
- * Validator for the excluding file extensions
- */
-class ExcludeExtension extends Extension
-{
-    /**
-     * @const string Error constants
-     */
-    const FALSE_EXTENSION = 'fileExcludeExtensionFalse';
-    const NOT_FOUND       = 'fileExcludeExtensionNotFound';
-
-    /**
-     * @var array Error message templates
-     */
-    protected $messageTemplates = array(
-        self::FALSE_EXTENSION => "File has an incorrect extension",
-        self::NOT_FOUND       => "File is not readable or does not exist",
-    );
-
-    /**
-     * Returns true if and only if the file extension of $value is not included in the
-     * set extension list
-     *
-     * @param  string|array $value Real file to check for extension
-     * @param  array        $file  File data from \Zend\File\Transfer\Transfer (optional)
-     * @return bool
-     */
-    public function isValid($value, $file = null)
-    {
-        if (is_string($value) && is_array($file)) {
-            // Legacy Zend\Transfer API support
-            $filename = $file['name'];
-            $file     = $file['tmp_name'];
-        } elseif (is_array($value)) {
-            if (!isset($value['tmp_name']) || !isset($value['name'])) {
-                throw new Exception\InvalidArgumentException(
-                    'Value array must be in $_FILES format'
-                );
-            }
-            $file     = $value['tmp_name'];
-            $filename = $value['name'];
-        } else {
-            $file     = $value;
-            $filename = basename($file);
-        }
-        $this->setValue($filename);
-
-        // Is file readable ?
-        if (empty($file) || false === stream_resolve_include_path($file)) {
-            $this->error(self::NOT_FOUND);
-            return false;
-        }
-
-        $extension  = substr($filename, strrpos($filename, '.') + 1);
-        $extensions = $this->getExtension();
-
-        if ($this->getCase() && (!in_array($extension, $extensions))) {
-            return true;
-        } elseif (!$this->getCase()) {
-            foreach ($extensions as $ext) {
-                if (strtolower($ext) == strtolower($extension)) {
-                    $this->error(self::FALSE_EXTENSION);
-                    return false;
-                }
-            }
-
-            return true;
-        }
-
-        $this->error(self::FALSE_EXTENSION);
-        return false;
-    }
-}
diff --git a/civicrm/vendor/zendframework/zend-validator/src/File/ExcludeMimeType.php b/civicrm/vendor/zendframework/zend-validator/src/File/ExcludeMimeType.php
deleted file mode 100644
index f0bd4f8cce3b488de36bbba21f1ab15ff70347f6..0000000000000000000000000000000000000000
--- a/civicrm/vendor/zendframework/zend-validator/src/File/ExcludeMimeType.php
+++ /dev/null
@@ -1,105 +0,0 @@
-<?php
-/**
- * Zend Framework (http://framework.zend.com/)
- *
- * @link      http://github.com/zendframework/zf2 for the canonical source repository
- * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
- * @license   http://framework.zend.com/license/new-bsd New BSD License
- */
-
-namespace Zend\Validator\File;
-
-use finfo;
-use Zend\Validator\Exception;
-
-/**
- * Validator for the mime type of a file
- */
-class ExcludeMimeType extends MimeType
-{
-    const FALSE_TYPE   = 'fileExcludeMimeTypeFalse';
-    const NOT_DETECTED = 'fileExcludeMimeTypeNotDetected';
-    const NOT_READABLE = 'fileExcludeMimeTypeNotReadable';
-
-    /**
-     * Returns true if the mimetype of the file does not matche the given ones. Also parts
-     * of mimetypes can be checked. If you give for example "image" all image
-     * mime types will not be accepted like "image/gif", "image/jpeg" and so on.
-     *
-     * @param  string|array $value Real file to check for mimetype
-     * @param  array        $file  File data from \Zend\File\Transfer\Transfer (optional)
-     * @return bool
-     */
-    public function isValid($value, $file = null)
-    {
-        if (is_string($value) && is_array($file)) {
-            // Legacy Zend\Transfer API support
-            $filename = $file['name'];
-            $filetype = $file['type'];
-            $file     = $file['tmp_name'];
-        } elseif (is_array($value)) {
-            if (!isset($value['tmp_name']) || !isset($value['name']) || !isset($value['type'])) {
-                throw new Exception\InvalidArgumentException(
-                    'Value array must be in $_FILES format'
-                );
-            }
-            $file     = $value['tmp_name'];
-            $filename = $value['name'];
-            $filetype = $value['type'];
-        } else {
-            $file     = $value;
-            $filename = basename($file);
-            $filetype = null;
-        }
-        $this->setValue($filename);
-
-        // Is file readable ?
-        if (empty($file) || false === stream_resolve_include_path($file)) {
-            $this->error(self::NOT_READABLE);
-            return false;
-        }
-
-        $mimefile = $this->getMagicFile();
-        if (class_exists('finfo', false)) {
-            if (!$this->isMagicFileDisabled() && (!empty($mimefile) && empty($this->finfo))) {
-                $this->finfo = finfo_open(FILEINFO_MIME_TYPE, $mimefile);
-            }
-
-            if (empty($this->finfo)) {
-                $this->finfo = finfo_open(FILEINFO_MIME_TYPE);
-            }
-
-            $this->type = null;
-            if (!empty($this->finfo)) {
-                $this->type = finfo_file($this->finfo, $file);
-            }
-        }
-
-        if (empty($this->type) && $this->getHeaderCheck()) {
-            $this->type = $filetype;
-        }
-
-        if (empty($this->type)) {
-            $this->error(self::NOT_DETECTED);
-            return false;
-        }
-
-        $mimetype = $this->getMimeType(true);
-        if (in_array($this->type, $mimetype)) {
-            $this->error(self::FALSE_TYPE);
-            return false;
-        }
-
-        $types = explode('/', $this->type);
-        $types = array_merge($types, explode('-', $this->type));
-        $types = array_merge($types, explode(';', $this->type));
-        foreach ($mimetype as $mime) {
-            if (in_array($mime, $types)) {
-                $this->error(self::FALSE_TYPE);
-                return false;
-            }
-        }
-
-        return true;
-    }
-}
diff --git a/civicrm/vendor/zendframework/zend-validator/src/File/Exists.php b/civicrm/vendor/zendframework/zend-validator/src/File/Exists.php
deleted file mode 100644
index f141b8240ef21bd5d9510ffd58c7cf9f97f9a268..0000000000000000000000000000000000000000
--- a/civicrm/vendor/zendframework/zend-validator/src/File/Exists.php
+++ /dev/null
@@ -1,196 +0,0 @@
-<?php
-/**
- * Zend Framework (http://framework.zend.com/)
- *
- * @link      http://github.com/zendframework/zf2 for the canonical source repository
- * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
- * @license   http://framework.zend.com/license/new-bsd New BSD License
- */
-
-namespace Zend\Validator\File;
-
-use Zend\Validator\AbstractValidator;
-use Zend\Validator\Exception;
-
-/**
- * Validator which checks if the file already exists in the directory
- */
-class Exists extends AbstractValidator
-{
-    /**
-     * @const string Error constants
-     */
-    const DOES_NOT_EXIST = 'fileExistsDoesNotExist';
-
-    /**
-     * @var array Error message templates
-     */
-    protected $messageTemplates = array(
-        self::DOES_NOT_EXIST => "File does not exist",
-    );
-
-    /**
-     * Options for this validator
-     *
-     * @var array
-     */
-    protected $options = array(
-        'directory' => null,  // internal list of directories
-    );
-
-    /**
-     * @var array Error message template variables
-     */
-    protected $messageVariables = array(
-        'directory' => array('options' => 'directory'),
-    );
-
-    /**
-     * Sets validator options
-     *
-     * @param  string|array|\Traversable $options
-     */
-    public function __construct($options = null)
-    {
-        if (is_string($options)) {
-            $options = explode(',', $options);
-        }
-
-        if (is_array($options) && !array_key_exists('directory', $options)) {
-            $options = array('directory' => $options);
-        }
-
-        parent::__construct($options);
-    }
-
-    /**
-     * Returns the set file directories which are checked
-     *
-     * @param  bool $asArray Returns the values as array; when false, a concatenated string is returned
-     * @return string|null
-     */
-    public function getDirectory($asArray = false)
-    {
-        $asArray   = (bool) $asArray;
-        $directory = $this->options['directory'];
-        if ($asArray && isset($directory)) {
-            $directory = explode(',', (string) $directory);
-        }
-
-        return $directory;
-    }
-
-    /**
-     * Sets the file directory which will be checked
-     *
-     * @param  string|array $directory The directories to validate
-     * @return Extension Provides a fluent interface
-     */
-    public function setDirectory($directory)
-    {
-        $this->options['directory'] = null;
-        $this->addDirectory($directory);
-        return $this;
-    }
-
-    /**
-     * Adds the file directory which will be checked
-     *
-     * @param  string|array $directory The directory to add for validation
-     * @return Extension Provides a fluent interface
-     * @throws Exception\InvalidArgumentException
-     */
-    public function addDirectory($directory)
-    {
-        $directories = $this->getDirectory(true);
-        if (!isset($directories)) {
-            $directories = array();
-        }
-
-        if (is_string($directory)) {
-            $directory = explode(',', $directory);
-        } elseif (!is_array($directory)) {
-            throw new Exception\InvalidArgumentException('Invalid options to validator provided');
-        }
-
-        foreach ($directory as $content) {
-            if (empty($content) || !is_string($content)) {
-                continue;
-            }
-
-            $directories[] = trim($content);
-        }
-        $directories = array_unique($directories);
-
-        // Sanity check to ensure no empty values
-        foreach ($directories as $key => $dir) {
-            if (empty($dir)) {
-                unset($directories[$key]);
-            }
-        }
-
-        $this->options['directory'] = (!empty($directory))
-            ? implode(',', $directories) : null;
-
-        return $this;
-    }
-
-    /**
-     * Returns true if and only if the file already exists in the set directories
-     *
-     * @param  string|array $value Real file to check for existence
-     * @param  array        $file  File data from \Zend\File\Transfer\Transfer (optional)
-     * @return bool
-     */
-    public function isValid($value, $file = null)
-    {
-        if (is_string($value) && is_array($file)) {
-            // Legacy Zend\Transfer API support
-            $filename = $file['name'];
-            $file     = $file['tmp_name'];
-            $this->setValue($filename);
-        } elseif (is_array($value)) {
-            if (!isset($value['tmp_name']) || !isset($value['name'])) {
-                throw new Exception\InvalidArgumentException(
-                    'Value array must be in $_FILES format'
-                );
-            }
-            $file     = $value['tmp_name'];
-            $filename = basename($file);
-            $this->setValue($value['name']);
-        } else {
-            $file     = $value;
-            $filename = basename($file);
-            $this->setValue($filename);
-        }
-
-        $check = false;
-        $directories = $this->getDirectory(true);
-        if (!isset($directories)) {
-            $check = true;
-            if (!file_exists($file)) {
-                $this->error(self::DOES_NOT_EXIST);
-                return false;
-            }
-        } else {
-            foreach ($directories as $directory) {
-                if (!isset($directory) || '' === $directory) {
-                    continue;
-                }
-
-                $check = true;
-                if (!file_exists($directory . DIRECTORY_SEPARATOR . $filename)) {
-                    $this->error(self::DOES_NOT_EXIST);
-                    return false;
-                }
-            }
-        }
-
-        if (!$check) {
-            $this->error(self::DOES_NOT_EXIST);
-            return false;
-        }
-
-        return true;
-    }
-}
diff --git a/civicrm/vendor/zendframework/zend-validator/src/File/Extension.php b/civicrm/vendor/zendframework/zend-validator/src/File/Extension.php
deleted file mode 100644
index a779832fe9e1a3d018aef5d92bd7d5b5ab1e9b8d..0000000000000000000000000000000000000000
--- a/civicrm/vendor/zendframework/zend-validator/src/File/Extension.php
+++ /dev/null
@@ -1,220 +0,0 @@
-<?php
-/**
- * Zend Framework (http://framework.zend.com/)
- *
- * @link      http://github.com/zendframework/zf2 for the canonical source repository
- * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
- * @license   http://framework.zend.com/license/new-bsd New BSD License
- */
-
-namespace Zend\Validator\File;
-
-use Traversable;
-use Zend\Stdlib\ArrayUtils;
-use Zend\Validator\AbstractValidator;
-use Zend\Validator\Exception;
-
-/**
- * Validator for the file extension of a file
- */
-class Extension extends AbstractValidator
-{
-    /**
-     * @const string Error constants
-     */
-    const FALSE_EXTENSION = 'fileExtensionFalse';
-    const NOT_FOUND       = 'fileExtensionNotFound';
-
-    /**
-     * @var array Error message templates
-     */
-    protected $messageTemplates = array(
-        self::FALSE_EXTENSION => "File has an incorrect extension",
-        self::NOT_FOUND       => "File is not readable or does not exist",
-    );
-
-    /**
-     * Options for this validator
-     *
-     * @var array
-     */
-    protected $options = array(
-        'case'      => false,   // Validate case sensitive
-        'extension' => '',      // List of extensions
-    );
-
-    /**
-     * @var array Error message template variables
-     */
-    protected $messageVariables = array(
-        'extension' => array('options' => 'extension'),
-    );
-
-    /**
-     * Sets validator options
-     *
-     * @param  string|array|Traversable $options
-     */
-    public function __construct($options = null)
-    {
-        if ($options instanceof Traversable) {
-            $options = ArrayUtils::iteratorToArray($options);
-        }
-
-        $case = null;
-        if (1 < func_num_args()) {
-            $case = func_get_arg(1);
-        }
-
-        if (is_array($options)) {
-            if (isset($options['case'])) {
-                $case = $options['case'];
-                unset($options['case']);
-            }
-
-            if (!array_key_exists('extension', $options)) {
-                $options = array('extension' => $options);
-            }
-        } else {
-            $options = array('extension' => $options);
-        }
-
-        if ($case !== null) {
-            $options['case'] = $case;
-        }
-
-        parent::__construct($options);
-    }
-
-    /**
-     * Returns the case option
-     *
-     * @return bool
-     */
-    public function getCase()
-    {
-        return $this->options['case'];
-    }
-
-    /**
-     * Sets the case to use
-     *
-     * @param  bool $case
-     * @return Extension Provides a fluent interface
-     */
-    public function setCase($case)
-    {
-        $this->options['case'] = (bool) $case;
-        return $this;
-    }
-
-    /**
-     * Returns the set file extension
-     *
-     * @return array
-     */
-    public function getExtension()
-    {
-        $extension = explode(',', $this->options['extension']);
-
-        return $extension;
-    }
-
-    /**
-     * Sets the file extensions
-     *
-     * @param  string|array $extension The extensions to validate
-     * @return Extension Provides a fluent interface
-     */
-    public function setExtension($extension)
-    {
-        $this->options['extension'] = null;
-        $this->addExtension($extension);
-        return $this;
-    }
-
-    /**
-     * Adds the file extensions
-     *
-     * @param  string|array $extension The extensions to add for validation
-     * @return Extension Provides a fluent interface
-     */
-    public function addExtension($extension)
-    {
-        $extensions = $this->getExtension();
-        if (is_string($extension)) {
-            $extension = explode(',', $extension);
-        }
-
-        foreach ($extension as $content) {
-            if (empty($content) || !is_string($content)) {
-                continue;
-            }
-
-            $extensions[] = trim($content);
-        }
-
-        $extensions = array_unique($extensions);
-
-        // Sanity check to ensure no empty values
-        foreach ($extensions as $key => $ext) {
-            if (empty($ext)) {
-                unset($extensions[$key]);
-            }
-        }
-
-        $this->options['extension'] = implode(',', $extensions);
-        return $this;
-    }
-
-    /**
-     * Returns true if and only if the file extension of $value is included in the
-     * set extension list
-     *
-     * @param  string|array $value Real file to check for extension
-     * @param  array        $file  File data from \Zend\File\Transfer\Transfer (optional)
-     * @return bool
-     */
-    public function isValid($value, $file = null)
-    {
-        if (is_string($value) && is_array($file)) {
-            // Legacy Zend\Transfer API support
-            $filename = $file['name'];
-            $file     = $file['tmp_name'];
-        } elseif (is_array($value)) {
-            if (!isset($value['tmp_name']) || !isset($value['name'])) {
-                throw new Exception\InvalidArgumentException(
-                    'Value array must be in $_FILES format'
-                );
-            }
-            $file     = $value['tmp_name'];
-            $filename = $value['name'];
-        } else {
-            $file     = $value;
-            $filename = basename($file);
-        }
-        $this->setValue($filename);
-
-        // Is file readable ?
-        if (empty($file) || false === stream_resolve_include_path($file)) {
-            $this->error(self::NOT_FOUND);
-            return false;
-        }
-
-        $extension  = substr($filename, strrpos($filename, '.') + 1);
-        $extensions = $this->getExtension();
-
-        if ($this->getCase() && (in_array($extension, $extensions))) {
-            return true;
-        } elseif (!$this->getCase()) {
-            foreach ($extensions as $ext) {
-                if (strtolower($ext) == strtolower($extension)) {
-                    return true;
-                }
-            }
-        }
-
-        $this->error(self::FALSE_EXTENSION);
-        return false;
-    }
-}
diff --git a/civicrm/vendor/zendframework/zend-validator/src/File/FilesSize.php b/civicrm/vendor/zendframework/zend-validator/src/File/FilesSize.php
deleted file mode 100644
index c1ea7644dae42d8307d4eac277abdcf3685cacca..0000000000000000000000000000000000000000
--- a/civicrm/vendor/zendframework/zend-validator/src/File/FilesSize.php
+++ /dev/null
@@ -1,183 +0,0 @@
-<?php
-/**
- * Zend Framework (http://framework.zend.com/)
- *
- * @link      http://github.com/zendframework/zf2 for the canonical source repository
- * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
- * @license   http://framework.zend.com/license/new-bsd New BSD License
- */
-
-namespace Zend\Validator\File;
-
-use Traversable;
-use Zend\Stdlib\ArrayUtils;
-use Zend\Stdlib\ErrorHandler;
-use Zend\Validator\Exception;
-
-/**
- * Validator for the size of all files which will be validated in sum
- *
- */
-class FilesSize extends Size
-{
-    /**
-     * @const string Error constants
-     */
-    const TOO_BIG      = 'fileFilesSizeTooBig';
-    const TOO_SMALL    = 'fileFilesSizeTooSmall';
-    const NOT_READABLE = 'fileFilesSizeNotReadable';
-
-    /**
-     * @var array Error message templates
-     */
-    protected $messageTemplates = array(
-        self::TOO_BIG      => "All files in sum should have a maximum size of '%max%' but '%size%' were detected",
-        self::TOO_SMALL    => "All files in sum should have a minimum size of '%min%' but '%size%' were detected",
-        self::NOT_READABLE => "One or more files can not be read",
-    );
-
-    /**
-     * Internal file array
-     *
-     * @var array
-     */
-    protected $files;
-
-    /**
-     * Sets validator options
-     *
-     * Min limits the used disk space for all files, when used with max=null it is the maximum file size
-     * It also accepts an array with the keys 'min' and 'max'
-     *
-     * @param  int|array|Traversable $options Options for this validator
-     * @throws \Zend\Validator\Exception\InvalidArgumentException
-     */
-    public function __construct($options = null)
-    {
-        $this->files = array();
-        $this->setSize(0);
-
-        if ($options instanceof Traversable) {
-            $options = ArrayUtils::iteratorToArray($options);
-        } elseif (is_scalar($options)) {
-            $options = array('max' => $options);
-        } elseif (!is_array($options)) {
-            throw new Exception\InvalidArgumentException('Invalid options to validator provided');
-        }
-
-        if (1 < func_num_args()) {
-            $argv = func_get_args();
-            array_shift($argv);
-            $options['max'] = array_shift($argv);
-            if (!empty($argv)) {
-                $options['useByteString'] = array_shift($argv);
-            }
-        }
-
-        parent::__construct($options);
-    }
-
-    /**
-     * Returns true if and only if the disk usage of all files is at least min and
-     * not bigger than max (when max is not null).
-     *
-     * @param  string|array $value Real file to check for size
-     * @param  array        $file  File data from \Zend\File\Transfer\Transfer
-     * @return bool
-     */
-    public function isValid($value, $file = null)
-    {
-        if (is_string($value)) {
-            $value = array($value);
-        } elseif (is_array($value) && isset($value['tmp_name'])) {
-            $value = array($value);
-        }
-
-        $min  = $this->getMin(true);
-        $max  = $this->getMax(true);
-        $size = $this->getSize();
-        foreach ($value as $files) {
-            if (is_array($files)) {
-                if (!isset($files['tmp_name']) || !isset($files['name'])) {
-                    throw new Exception\InvalidArgumentException(
-                        'Value array must be in $_FILES format'
-                    );
-                }
-                $file = $files;
-                $files = $files['tmp_name'];
-            }
-
-            // Is file readable ?
-            if (empty($files) || false === stream_resolve_include_path($files)) {
-                $this->throwError($file, self::NOT_READABLE);
-                continue;
-            }
-
-            if (!isset($this->files[$files])) {
-                $this->files[$files] = $files;
-            } else {
-                // file already counted... do not count twice
-                continue;
-            }
-
-            // limited to 2GB files
-            ErrorHandler::start();
-            $size += filesize($files);
-            ErrorHandler::stop();
-            $this->size = $size;
-            if (($max !== null) && ($max < $size)) {
-                if ($this->getByteString()) {
-                    $this->options['max'] = $this->toByteString($max);
-                    $this->size          = $this->toByteString($size);
-                    $this->throwError($file, self::TOO_BIG);
-                    $this->options['max'] = $max;
-                    $this->size          = $size;
-                } else {
-                    $this->throwError($file, self::TOO_BIG);
-                }
-            }
-        }
-
-        // Check that aggregate files are >= minimum size
-        if (($min !== null) && ($size < $min)) {
-            if ($this->getByteString()) {
-                $this->options['min'] = $this->toByteString($min);
-                $this->size          = $this->toByteString($size);
-                $this->throwError($file, self::TOO_SMALL);
-                $this->options['min'] = $min;
-                $this->size          = $size;
-            } else {
-                $this->throwError($file, self::TOO_SMALL);
-            }
-        }
-
-        if (count($this->getMessages()) > 0) {
-            return false;
-        }
-
-        return true;
-    }
-
-    /**
-     * Throws an error of the given type
-     *
-     * @param  string $file
-     * @param  string $errorType
-     * @return false
-     */
-    protected function throwError($file, $errorType)
-    {
-        if ($file !== null) {
-            if (is_array($file)) {
-                if (array_key_exists('name', $file)) {
-                    $this->value = $file['name'];
-                }
-            } elseif (is_string($file)) {
-                $this->value = $file;
-            }
-        }
-
-        $this->error($errorType);
-        return false;
-    }
-}
diff --git a/civicrm/vendor/zendframework/zend-validator/src/File/Hash.php b/civicrm/vendor/zendframework/zend-validator/src/File/Hash.php
deleted file mode 100644
index 99b9bca05afdbe47a1ad7f4656d9029ea514981b..0000000000000000000000000000000000000000
--- a/civicrm/vendor/zendframework/zend-validator/src/File/Hash.php
+++ /dev/null
@@ -1,175 +0,0 @@
-<?php
-/**
- * Zend Framework (http://framework.zend.com/)
- *
- * @link      http://github.com/zendframework/zf2 for the canonical source repository
- * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
- * @license   http://framework.zend.com/license/new-bsd New BSD License
- */
-
-namespace Zend\Validator\File;
-
-use Zend\Validator\AbstractValidator;
-use Zend\Validator\Exception;
-
-/**
- * Validator for the hash of given files
- */
-class Hash extends AbstractValidator
-{
-    /**
-     * @const string Error constants
-     */
-    const DOES_NOT_MATCH = 'fileHashDoesNotMatch';
-    const NOT_DETECTED   = 'fileHashHashNotDetected';
-    const NOT_FOUND      = 'fileHashNotFound';
-
-    /**
-     * @var array Error message templates
-     */
-    protected $messageTemplates = array(
-        self::DOES_NOT_MATCH => "File does not match the given hashes",
-        self::NOT_DETECTED   => "A hash could not be evaluated for the given file",
-        self::NOT_FOUND      => "File is not readable or does not exist"
-    );
-
-    /**
-     * Options for this validator
-     *
-     * @var string
-     */
-    protected $options = array(
-        'algorithm' => 'crc32',
-        'hash'      => null,
-    );
-
-    /**
-     * Sets validator options
-     *
-     * @param string|array $options
-     */
-    public function __construct($options = null)
-    {
-        if (is_scalar($options) ||
-            (is_array($options) && !array_key_exists('hash', $options))) {
-            $options = array('hash' => $options);
-        }
-
-        if (1 < func_num_args()) {
-            $options['algorithm'] = func_get_arg(1);
-        }
-
-        parent::__construct($options);
-    }
-
-    /**
-     * Returns the set hash values as array, the hash as key and the algorithm the value
-     *
-     * @return array
-     */
-    public function getHash()
-    {
-        return $this->options['hash'];
-    }
-
-    /**
-     * Sets the hash for one or multiple files
-     *
-     * @param  string|array $options
-     * @return Hash Provides a fluent interface
-     */
-    public function setHash($options)
-    {
-        $this->options['hash'] = null;
-        $this->addHash($options);
-
-        return $this;
-    }
-
-    /**
-     * Adds the hash for one or multiple files
-     *
-     * @param  string|array $options
-     * @return Hash Provides a fluent interface
-     * @throws Exception\InvalidArgumentException
-     */
-    public function addHash($options)
-    {
-        if (is_string($options)) {
-            $options = array($options);
-        } elseif (!is_array($options)) {
-            throw new Exception\InvalidArgumentException("False parameter given");
-        }
-
-        $known = hash_algos();
-        if (!isset($options['algorithm'])) {
-            $algorithm = $this->options['algorithm'];
-        } else {
-            $algorithm = $options['algorithm'];
-            unset($options['algorithm']);
-        }
-
-        if (!in_array($algorithm, $known)) {
-            throw new Exception\InvalidArgumentException("Unknown algorithm '{$algorithm}'");
-        }
-
-        foreach ($options as $value) {
-            $this->options['hash'][$value] = $algorithm;
-        }
-
-        return $this;
-    }
-
-    /**
-     * Returns true if and only if the given file confirms the set hash
-     *
-     * @param  string|array $value File to check for hash
-     * @param  array        $file  File data from \Zend\File\Transfer\Transfer (optional)
-     * @return bool
-     */
-    public function isValid($value, $file = null)
-    {
-        if (is_string($value) && is_array($file)) {
-            // Legacy Zend\Transfer API support
-            $filename = $file['name'];
-            $file     = $file['tmp_name'];
-        } elseif (is_array($value)) {
-            if (!isset($value['tmp_name']) || !isset($value['name'])) {
-                throw new Exception\InvalidArgumentException(
-                    'Value array must be in $_FILES format'
-                );
-            }
-            $file     = $value['tmp_name'];
-            $filename = $value['name'];
-        } else {
-            $file     = $value;
-            $filename = basename($file);
-        }
-        $this->setValue($filename);
-
-        // Is file readable ?
-        if (empty($file) || false === stream_resolve_include_path($file)) {
-            $this->error(self::NOT_FOUND);
-            return false;
-        }
-
-        $algos  = array_unique(array_values($this->getHash()));
-        $hashes = array_unique(array_keys($this->getHash()));
-        foreach ($algos as $algorithm) {
-            $filehash = hash_file($algorithm, $file);
-            if ($filehash === false) {
-                $this->error(self::NOT_DETECTED);
-                return false;
-            }
-
-            foreach ($hashes as $hash) {
-                if ($filehash === $hash) {
-                    return true;
-                }
-            }
-        }
-
-        $this->error(self::DOES_NOT_MATCH);
-        return false;
-    }
-}
diff --git a/civicrm/vendor/zendframework/zend-validator/src/File/ImageSize.php b/civicrm/vendor/zendframework/zend-validator/src/File/ImageSize.php
deleted file mode 100644
index 018e5f90834b00e0b31edd65cf06d89fa71a97af..0000000000000000000000000000000000000000
--- a/civicrm/vendor/zendframework/zend-validator/src/File/ImageSize.php
+++ /dev/null
@@ -1,392 +0,0 @@
-<?php
-/**
- * Zend Framework (http://framework.zend.com/)
- *
- * @link      http://github.com/zendframework/zf2 for the canonical source repository
- * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
- * @license   http://framework.zend.com/license/new-bsd New BSD License
- */
-
-namespace Zend\Validator\File;
-
-use Zend\Stdlib\ErrorHandler;
-use Zend\Validator\AbstractValidator;
-use Zend\Validator\Exception;
-
-/**
- * Validator for the image size of an image file
- */
-class ImageSize extends AbstractValidator
-{
-    /**
-     * @const string Error constants
-     */
-    const WIDTH_TOO_BIG    = 'fileImageSizeWidthTooBig';
-    const WIDTH_TOO_SMALL  = 'fileImageSizeWidthTooSmall';
-    const HEIGHT_TOO_BIG   = 'fileImageSizeHeightTooBig';
-    const HEIGHT_TOO_SMALL = 'fileImageSizeHeightTooSmall';
-    const NOT_DETECTED     = 'fileImageSizeNotDetected';
-    const NOT_READABLE     = 'fileImageSizeNotReadable';
-
-    /**
-     * @var array Error message template
-     */
-    protected $messageTemplates = array(
-        self::WIDTH_TOO_BIG    => "Maximum allowed width for image should be '%maxwidth%' but '%width%' detected",
-        self::WIDTH_TOO_SMALL  => "Minimum expected width for image should be '%minwidth%' but '%width%' detected",
-        self::HEIGHT_TOO_BIG   => "Maximum allowed height for image should be '%maxheight%' but '%height%' detected",
-        self::HEIGHT_TOO_SMALL => "Minimum expected height for image should be '%minheight%' but '%height%' detected",
-        self::NOT_DETECTED     => "The size of image could not be detected",
-        self::NOT_READABLE     => "File is not readable or does not exist",
-    );
-
-    /**
-     * @var array Error message template variables
-     */
-    protected $messageVariables = array(
-        'minwidth'  => array('options' => 'minWidth'),
-        'maxwidth'  => array('options' => 'maxWidth'),
-        'minheight' => array('options' => 'minHeight'),
-        'maxheight' => array('options' => 'maxHeight'),
-        'width'     => 'width',
-        'height'    => 'height'
-    );
-
-    /**
-     * Detected width
-     *
-     * @var int
-     */
-    protected $width;
-
-    /**
-     * Detected height
-     *
-     * @var int
-     */
-    protected $height;
-
-    /**
-     * Options for this validator
-     *
-     * @var array
-     */
-    protected $options = array(
-        'minWidth'  => null,  // Minimum image width
-        'maxWidth'  => null,  // Maximum image width
-        'minHeight' => null,  // Minimum image height
-        'maxHeight' => null,  // Maximum image height
-    );
-
-    /**
-     * Sets validator options
-     *
-     * Accepts the following option keys:
-     * - minheight
-     * - minwidth
-     * - maxheight
-     * - maxwidth
-     *
-     * @param  array|\Traversable $options
-     */
-    public function __construct($options = null)
-    {
-        if (1 < func_num_args()) {
-            if (!is_array($options)) {
-                $options = array('minWidth' => $options);
-            }
-
-            $argv = func_get_args();
-            array_shift($argv);
-            $options['minHeight'] = array_shift($argv);
-            if (!empty($argv)) {
-                $options['maxWidth'] = array_shift($argv);
-                if (!empty($argv)) {
-                    $options['maxHeight'] = array_shift($argv);
-                }
-            }
-        }
-
-        parent::__construct($options);
-    }
-
-    /**
-     * Returns the minimum allowed width
-     *
-     * @return int
-     */
-    public function getMinWidth()
-    {
-        return $this->options['minWidth'];
-    }
-
-    /**
-     * Sets the minimum allowed width
-     *
-     * @param  int $minWidth
-     * @return ImageSize Provides a fluid interface
-     * @throws Exception\InvalidArgumentException When minwidth is greater than maxwidth
-     */
-    public function setMinWidth($minWidth)
-    {
-        if (($this->getMaxWidth() !== null) && ($minWidth > $this->getMaxWidth())) {
-            throw new Exception\InvalidArgumentException(
-                "The minimum image width must be less than or equal to the "
-                . " maximum image width, but {$minWidth} > {$this->getMaxWidth()}"
-            );
-        }
-
-        $this->options['minWidth']  = (int) $minWidth;
-        return $this;
-    }
-
-    /**
-     * Returns the maximum allowed width
-     *
-     * @return int
-     */
-    public function getMaxWidth()
-    {
-        return $this->options['maxWidth'];
-    }
-
-    /**
-     * Sets the maximum allowed width
-     *
-     * @param  int $maxWidth
-     * @return ImageSize Provides a fluid interface
-     * @throws Exception\InvalidArgumentException When maxwidth is less than minwidth
-     */
-    public function setMaxWidth($maxWidth)
-    {
-        if (($this->getMinWidth() !== null) && ($maxWidth < $this->getMinWidth())) {
-            throw new Exception\InvalidArgumentException(
-                "The maximum image width must be greater than or equal to the "
-                . "minimum image width, but {$maxWidth} < {$this->getMinWidth()}"
-            );
-        }
-
-        $this->options['maxWidth']  = (int) $maxWidth;
-        return $this;
-    }
-
-    /**
-     * Returns the minimum allowed height
-     *
-     * @return int
-     */
-    public function getMinHeight()
-    {
-        return $this->options['minHeight'];
-    }
-
-    /**
-     * Sets the minimum allowed height
-     *
-     * @param  int $minHeight
-     * @return ImageSize Provides a fluid interface
-     * @throws Exception\InvalidArgumentException When minheight is greater than maxheight
-     */
-    public function setMinHeight($minHeight)
-    {
-        if (($this->getMaxHeight() !== null) && ($minHeight > $this->getMaxHeight())) {
-            throw new Exception\InvalidArgumentException(
-                "The minimum image height must be less than or equal to the "
-                . " maximum image height, but {$minHeight} > {$this->getMaxHeight()}"
-            );
-        }
-
-        $this->options['minHeight']  = (int) $minHeight;
-        return $this;
-    }
-
-    /**
-     * Returns the maximum allowed height
-     *
-     * @return int
-     */
-    public function getMaxHeight()
-    {
-        return $this->options['maxHeight'];
-    }
-
-    /**
-     * Sets the maximum allowed height
-     *
-     * @param  int $maxHeight
-     * @return ImageSize Provides a fluid interface
-     * @throws Exception\InvalidArgumentException When maxheight is less than minheight
-     */
-    public function setMaxHeight($maxHeight)
-    {
-        if (($this->getMinHeight() !== null) && ($maxHeight < $this->getMinHeight())) {
-            throw new Exception\InvalidArgumentException(
-                "The maximum image height must be greater than or equal to the "
-                . "minimum image height, but {$maxHeight} < {$this->getMinHeight()}"
-            );
-        }
-
-        $this->options['maxHeight']  = (int) $maxHeight;
-        return $this;
-    }
-
-    /**
-     * Returns the set minimum image sizes
-     *
-     * @return array
-     */
-    public function getImageMin()
-    {
-        return array('minWidth' => $this->getMinWidth(), 'minHeight' => $this->getMinHeight());
-    }
-
-    /**
-     * Returns the set maximum image sizes
-     *
-     * @return array
-     */
-    public function getImageMax()
-    {
-        return array('maxWidth' => $this->getMaxWidth(), 'maxHeight' => $this->getMaxHeight());
-    }
-
-    /**
-     * Returns the set image width sizes
-     *
-     * @return array
-     */
-    public function getImageWidth()
-    {
-        return array('minWidth' => $this->getMinWidth(), 'maxWidth' => $this->getMaxWidth());
-    }
-
-    /**
-     * Returns the set image height sizes
-     *
-     * @return array
-     */
-    public function getImageHeight()
-    {
-        return array('minHeight' => $this->getMinHeight(), 'maxHeight' => $this->getMaxHeight());
-    }
-
-    /**
-     * Sets the minimum image size
-     *
-     * @param  array $options                 The minimum image dimensions
-     * @return ImageSize Provides a fluent interface
-     */
-    public function setImageMin($options)
-    {
-        $this->setOptions($options);
-        return $this;
-    }
-
-    /**
-     * Sets the maximum image size
-     *
-     * @param  array|\Traversable $options The maximum image dimensions
-     * @return ImageSize Provides a fluent interface
-     */
-    public function setImageMax($options)
-    {
-        $this->setOptions($options);
-        return $this;
-    }
-
-    /**
-     * Sets the minimum and maximum image width
-     *
-     * @param  array $options               The image width dimensions
-     * @return ImageSize Provides a fluent interface
-     */
-    public function setImageWidth($options)
-    {
-        $this->setImageMin($options);
-        $this->setImageMax($options);
-
-        return $this;
-    }
-
-    /**
-     * Sets the minimum and maximum image height
-     *
-     * @param  array $options               The image height dimensions
-     * @return ImageSize Provides a fluent interface
-     */
-    public function setImageHeight($options)
-    {
-        $this->setImageMin($options);
-        $this->setImageMax($options);
-
-        return $this;
-    }
-
-    /**
-     * Returns true if and only if the image size of $value is at least min and
-     * not bigger than max
-     *
-     * @param  string|array $value Real file to check for image size
-     * @param  array        $file  File data from \Zend\File\Transfer\Transfer (optional)
-     * @return bool
-     */
-    public function isValid($value, $file = null)
-    {
-        if (is_string($value) && is_array($file)) {
-            // Legacy Zend\Transfer API support
-            $filename = $file['name'];
-            $file     = $file['tmp_name'];
-        } elseif (is_array($value)) {
-            if (!isset($value['tmp_name']) || !isset($value['name'])) {
-                throw new Exception\InvalidArgumentException(
-                    'Value array must be in $_FILES format'
-                );
-            }
-            $file     = $value['tmp_name'];
-            $filename = $value['name'];
-        } else {
-            $file     = $value;
-            $filename = basename($file);
-        }
-        $this->setValue($filename);
-
-        // Is file readable ?
-        if (empty($file) || false === stream_resolve_include_path($file)) {
-            $this->error(self::NOT_READABLE);
-            return false;
-        }
-
-        ErrorHandler::start();
-        $size = getimagesize($file);
-        ErrorHandler::stop();
-
-        if (empty($size) || ($size[0] === 0) || ($size[1] === 0)) {
-            $this->error(self::NOT_DETECTED);
-            return false;
-        }
-
-        $this->width  = $size[0];
-        $this->height = $size[1];
-        if ($this->width < $this->getMinWidth()) {
-            $this->error(self::WIDTH_TOO_SMALL);
-        }
-
-        if (($this->getMaxWidth() !== null) && ($this->getMaxWidth() < $this->width)) {
-            $this->error(self::WIDTH_TOO_BIG);
-        }
-
-        if ($this->height < $this->getMinHeight()) {
-            $this->error(self::HEIGHT_TOO_SMALL);
-        }
-
-        if (($this->getMaxHeight() !== null) && ($this->getMaxHeight() < $this->height)) {
-            $this->error(self::HEIGHT_TOO_BIG);
-        }
-
-        if (count($this->getMessages()) > 0) {
-            return false;
-        }
-
-        return true;
-    }
-}
diff --git a/civicrm/vendor/zendframework/zend-validator/src/File/IsCompressed.php b/civicrm/vendor/zendframework/zend-validator/src/File/IsCompressed.php
deleted file mode 100644
index ebd2e77da91f65ecd23912dac02bd92d8be4374f..0000000000000000000000000000000000000000
--- a/civicrm/vendor/zendframework/zend-validator/src/File/IsCompressed.php
+++ /dev/null
@@ -1,93 +0,0 @@
-<?php
-/**
- * Zend Framework (http://framework.zend.com/)
- *
- * @link      http://github.com/zendframework/zf2 for the canonical source repository
- * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
- * @license   http://framework.zend.com/license/new-bsd New BSD License
- */
-
-namespace Zend\Validator\File;
-
-use Traversable;
-use Zend\Stdlib\ArrayUtils;
-
-/**
- * Validator which checks if the file already exists in the directory
- */
-class IsCompressed extends MimeType
-{
-    /**
-     * @const string Error constants
-     */
-    const FALSE_TYPE   = 'fileIsCompressedFalseType';
-    const NOT_DETECTED = 'fileIsCompressedNotDetected';
-    const NOT_READABLE = 'fileIsCompressedNotReadable';
-
-    /**
-     * @var array Error message templates
-     */
-    protected $messageTemplates = array(
-        self::FALSE_TYPE   => "File is not compressed, '%type%' detected",
-        self::NOT_DETECTED => "The mimetype could not be detected from the file",
-        self::NOT_READABLE => "File is not readable or does not exist",
-    );
-
-    /**
-     * Sets validator options
-     *
-     * @param string|array|Traversable $options
-     */
-    public function __construct($options = array())
-    {
-        // http://hul.harvard.edu/ois/systems/wax/wax-public-help/mimetypes.htm
-        $default = array(
-            'application/arj',
-            'application/gnutar',
-            'application/lha',
-            'application/lzx',
-            'application/vnd.ms-cab-compressed',
-            'application/x-ace-compressed',
-            'application/x-arc',
-            'application/x-archive',
-            'application/x-arj',
-            'application/x-bzip',
-            'application/x-bzip2',
-            'application/x-cab-compressed',
-            'application/x-compress',
-            'application/x-compressed',
-            'application/x-cpio',
-            'application/x-debian-package',
-            'application/x-eet',
-            'application/x-gzip',
-            'application/x-java-pack200',
-            'application/x-lha',
-            'application/x-lharc',
-            'application/x-lzh',
-            'application/x-lzma',
-            'application/x-lzx',
-            'application/x-rar',
-            'application/x-sit',
-            'application/x-stuffit',
-            'application/x-tar',
-            'application/zip',
-            'application/x-zip',
-            'application/zoo',
-            'multipart/x-gzip',
-        );
-
-        if ($options instanceof Traversable) {
-            $options = ArrayUtils::iteratorToArray($options);
-        }
-
-        if ($options === null) {
-            $options = array();
-        }
-
-        parent::__construct($options);
-
-        if (!$this->getMimeType()) {
-            $this->setMimeType($default);
-        }
-    }
-}
diff --git a/civicrm/vendor/zendframework/zend-validator/src/File/IsImage.php b/civicrm/vendor/zendframework/zend-validator/src/File/IsImage.php
deleted file mode 100644
index a13bc043df2c3b0507045108ef6e9deb47c55259..0000000000000000000000000000000000000000
--- a/civicrm/vendor/zendframework/zend-validator/src/File/IsImage.php
+++ /dev/null
@@ -1,116 +0,0 @@
-<?php
-/**
- * Zend Framework (http://framework.zend.com/)
- *
- * @link      http://github.com/zendframework/zf2 for the canonical source repository
- * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
- * @license   http://framework.zend.com/license/new-bsd New BSD License
- */
-
-namespace Zend\Validator\File;
-
-use Traversable;
-use Zend\Stdlib\ArrayUtils;
-
-/**
- * Validator which checks if the file is an image
- */
-class IsImage extends MimeType
-{
-    /**
-     * @const string Error constants
-     */
-    const FALSE_TYPE   = 'fileIsImageFalseType';
-    const NOT_DETECTED = 'fileIsImageNotDetected';
-    const NOT_READABLE = 'fileIsImageNotReadable';
-
-    /**
-     * @var array Error message templates
-     */
-    protected $messageTemplates = array(
-        self::FALSE_TYPE   => "File is no image, '%type%' detected",
-        self::NOT_DETECTED => "The mimetype could not be detected from the file",
-        self::NOT_READABLE => "File is not readable or does not exist",
-    );
-
-    /**
-     * Sets validator options
-     *
-     * @param array|Traversable|string $options
-     */
-    public function __construct($options = array())
-    {
-        // http://www.iana.org/assignments/media-types/media-types.xhtml#image
-        $default = array(
-            'application/cdf',
-            'application/dicom',
-            'application/fractals',
-            'application/postscript',
-            'application/vnd.hp-hpgl',
-            'application/vnd.oasis.opendocument.graphics',
-            'application/x-cdf',
-            'application/x-cmu-raster',
-            'application/x-ima',
-            'application/x-inventor',
-            'application/x-koan',
-            'application/x-portable-anymap',
-            'application/x-world-x-3dmf',
-            'image/bmp',
-            'image/c',
-            'image/cgm',
-            'image/fif',
-            'image/gif',
-            'image/jpeg',
-            'image/jpm',
-            'image/jpx',
-            'image/jp2',
-            'image/naplps',
-            'image/pjpeg',
-            'image/png',
-            'image/svg',
-            'image/svg+xml',
-            'image/tiff',
-            'image/vnd.adobe.photoshop',
-            'image/vnd.djvu',
-            'image/vnd.fpx',
-            'image/vnd.net-fpx',
-            'image/x-cmu-raster',
-            'image/x-cmx',
-            'image/x-coreldraw',
-            'image/x-cpi',
-            'image/x-emf',
-            'image/x-ico',
-            'image/x-icon',
-            'image/x-jg',
-            'image/x-ms-bmp',
-            'image/x-niff',
-            'image/x-pict',
-            'image/x-pcx',
-            'image/x-png',
-            'image/x-portable-anymap',
-            'image/x-portable-bitmap',
-            'image/x-portable-greymap',
-            'image/x-portable-pixmap',
-            'image/x-quicktime',
-            'image/x-rgb',
-            'image/x-tiff',
-            'image/x-unknown',
-            'image/x-windows-bmp',
-            'image/x-xpmi',
-        );
-
-        if ($options instanceof Traversable) {
-            $options = ArrayUtils::iteratorToArray($options);
-        }
-
-        if ($options === null) {
-            $options = array();
-        }
-
-        parent::__construct($options);
-
-        if (!$this->getMimeType()) {
-            $this->setMimeType($default);
-        }
-    }
-}
diff --git a/civicrm/vendor/zendframework/zend-validator/src/File/Md5.php b/civicrm/vendor/zendframework/zend-validator/src/File/Md5.php
deleted file mode 100644
index e1d1e973efbfa71fb5f8695340fb2e8eea5ada53..0000000000000000000000000000000000000000
--- a/civicrm/vendor/zendframework/zend-validator/src/File/Md5.php
+++ /dev/null
@@ -1,128 +0,0 @@
-<?php
-/**
- * Zend Framework (http://framework.zend.com/)
- *
- * @link      http://github.com/zendframework/zf2 for the canonical source repository
- * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
- * @license   http://framework.zend.com/license/new-bsd New BSD License
- */
-
-namespace Zend\Validator\File;
-
-use Zend\Validator\Exception;
-
-/**
- * Validator for the md5 hash of given files
- */
-class Md5 extends Hash
-{
-    /**
-     * @const string Error constants
-     */
-    const DOES_NOT_MATCH = 'fileMd5DoesNotMatch';
-    const NOT_DETECTED   = 'fileMd5NotDetected';
-    const NOT_FOUND      = 'fileMd5NotFound';
-
-    /**
-     * @var array Error message templates
-     */
-    protected $messageTemplates = array(
-        self::DOES_NOT_MATCH => "File does not match the given md5 hashes",
-        self::NOT_DETECTED   => "An md5 hash could not be evaluated for the given file",
-        self::NOT_FOUND      => "File is not readable or does not exist",
-    );
-
-    /**
-     * Options for this validator
-     *
-     * @var string
-     */
-    protected $options = array(
-        'algorithm' => 'md5',
-        'hash'      => null,
-    );
-
-    /**
-     * Returns all set md5 hashes
-     *
-     * @return array
-     */
-    public function getMd5()
-    {
-        return $this->getHash();
-    }
-
-    /**
-     * Sets the md5 hash for one or multiple files
-     *
-     * @param  string|array $options
-     * @return Hash Provides a fluent interface
-     */
-    public function setMd5($options)
-    {
-        $this->setHash($options);
-        return $this;
-    }
-
-    /**
-     * Adds the md5 hash for one or multiple files
-     *
-     * @param  string|array $options
-     * @return Hash Provides a fluent interface
-     */
-    public function addMd5($options)
-    {
-        $this->addHash($options);
-        return $this;
-    }
-
-    /**
-     * Returns true if and only if the given file confirms the set hash
-     *
-     * @param  string|array $value Filename to check for hash
-     * @param  array        $file  File data from \Zend\File\Transfer\Transfer (optional)
-     * @return bool
-     */
-    public function isValid($value, $file = null)
-    {
-        if (is_string($value) && is_array($file)) {
-            // Legacy Zend\Transfer API support
-            $filename = $file['name'];
-            $file     = $file['tmp_name'];
-        } elseif (is_array($value)) {
-            if (!isset($value['tmp_name']) || !isset($value['name'])) {
-                throw new Exception\InvalidArgumentException(
-                    'Value array must be in $_FILES format'
-                );
-            }
-            $file     = $value['tmp_name'];
-            $filename = $value['name'];
-        } else {
-            $file     = $value;
-            $filename = basename($file);
-        }
-        $this->setValue($filename);
-
-        // Is file readable ?
-        if (empty($file) || false === stream_resolve_include_path($file)) {
-            $this->error(self::NOT_FOUND);
-            return false;
-        }
-
-        $hashes = array_unique(array_keys($this->getHash()));
-        $filehash = hash_file('md5', $file);
-        if ($filehash === false) {
-            $this->error(self::NOT_DETECTED);
-            return false;
-        }
-
-        foreach ($hashes as $hash) {
-            if ($filehash === $hash) {
-                return true;
-            }
-        }
-
-        $this->error(self::DOES_NOT_MATCH);
-        return false;
-    }
-}
diff --git a/civicrm/vendor/zendframework/zend-validator/src/File/MimeType.php b/civicrm/vendor/zendframework/zend-validator/src/File/MimeType.php
deleted file mode 100644
index a91c4dda8526d6752ddb4514a45f08c0e7959c52..0000000000000000000000000000000000000000
--- a/civicrm/vendor/zendframework/zend-validator/src/File/MimeType.php
+++ /dev/null
@@ -1,422 +0,0 @@
-<?php
-/**
- * Zend Framework (http://framework.zend.com/)
- *
- * @link      http://github.com/zendframework/zf2 for the canonical source repository
- * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
- * @license   http://framework.zend.com/license/new-bsd New BSD License
- */
-
-namespace Zend\Validator\File;
-
-use Traversable;
-use Zend\Stdlib\ArrayUtils;
-use Zend\Stdlib\ErrorHandler;
-use Zend\Validator\AbstractValidator;
-use Zend\Validator\Exception;
-
-/**
- * Validator for the mime type of a file
- */
-class MimeType extends AbstractValidator
-{
-    /**#@+
-     * @const Error type constants
-     */
-    const FALSE_TYPE   = 'fileMimeTypeFalse';
-    const NOT_DETECTED = 'fileMimeTypeNotDetected';
-    const NOT_READABLE = 'fileMimeTypeNotReadable';
-    /**#@-*/
-
-    /**
-     * @var array Error message templates
-     */
-    protected $messageTemplates = array(
-        self::FALSE_TYPE   => "File has an incorrect mimetype of '%type%'",
-        self::NOT_DETECTED => "The mimetype could not be detected from the file",
-        self::NOT_READABLE => "File is not readable or does not exist",
-    );
-
-    /**
-     * @var array
-     */
-    protected $messageVariables = array(
-        'type' => 'type'
-    );
-
-    /**
-     * @var string
-     */
-    protected $type;
-
-    /**
-     * Finfo object to use
-     *
-     * @var resource
-     */
-    protected $finfo;
-
-    /**
-     * If no environment variable 'MAGIC' is set, try and autodiscover it based on common locations
-     * @var array
-     */
-    protected $magicFiles = array(
-        '/usr/share/misc/magic',
-        '/usr/share/misc/magic.mime',
-        '/usr/share/misc/magic.mgc',
-        '/usr/share/mime/magic',
-        '/usr/share/mime/magic.mime',
-        '/usr/share/mime/magic.mgc',
-        '/usr/share/file/magic',
-        '/usr/share/file/magic.mime',
-        '/usr/share/file/magic.mgc',
-    );
-
-    /**
-     * Options for this validator
-     *
-     * @var array
-     */
-    protected $options = array(
-        'enableHeaderCheck' => false,  // Allow header check
-        'disableMagicFile'  => false,  // Disable usage of magicfile
-        'magicFile'         => null,   // Magicfile to use
-        'mimeType'          => null,   // Mimetype to allow
-    );
-
-    /**
-     * Sets validator options
-     *
-     * Mimetype to accept
-     * - NULL means default PHP usage by using the environment variable 'magic'
-     * - FALSE means disabling searching for mimetype, should be used for PHP 5.3
-     * - A string is the mimetype file to use
-     *
-     * @param  string|array|Traversable $options
-     */
-    public function __construct($options = null)
-    {
-        if ($options instanceof Traversable) {
-            $options = ArrayUtils::iteratorToArray($options);
-        } elseif (is_string($options)) {
-            $this->setMimeType($options);
-            $options = array();
-        } elseif (is_array($options)) {
-            if (isset($options['magicFile'])) {
-                $this->setMagicFile($options['magicFile']);
-                unset($options['magicFile']);
-            }
-
-            if (isset($options['enableHeaderCheck'])) {
-                $this->enableHeaderCheck($options['enableHeaderCheck']);
-                unset($options['enableHeaderCheck']);
-            }
-
-            if (array_key_exists('mimeType', $options)) {
-                $this->setMimeType($options['mimeType']);
-                unset($options['mimeType']);
-            }
-
-            // Handle cases where mimetypes are interspersed with options, or
-            // options are simply an array of mime types
-            foreach (array_keys($options) as $key) {
-                if (!is_int($key)) {
-                    continue;
-                }
-                $this->addMimeType($options[$key]);
-                unset($options[$key]);
-            }
-        }
-
-        parent::__construct($options);
-    }
-
-    /**
-     * Returns the actual set magicfile
-     *
-     * @return string
-     */
-    public function getMagicFile()
-    {
-        if (null === $this->options['magicFile']) {
-            $magic = getenv('magic');
-            if (!empty($magic)) {
-                $this->setMagicFile($magic);
-                if ($this->options['magicFile'] === null) {
-                    $this->options['magicFile'] = false;
-                }
-                return $this->options['magicFile'];
-            }
-
-            ErrorHandler::start();
-            $safeMode = ini_get('safe_mode');
-            ErrorHandler::stop();
-
-            if (!($safeMode == 'On' || $safeMode === 1)) {
-                foreach ($this->magicFiles as $file) {
-                    // suppressing errors which are thrown due to openbase_dir restrictions
-                    try {
-                        $this->setMagicFile($file);
-                        if ($this->options['magicFile'] !== null) {
-                            break;
-                        }
-                    } catch (Exception\ExceptionInterface $e) {
-                        // Intentionally, catch and fall through
-                    }
-                }
-            }
-
-            if ($this->options['magicFile'] === null) {
-                $this->options['magicFile'] = false;
-            }
-        }
-
-        return $this->options['magicFile'];
-    }
-
-    /**
-     * Sets the magicfile to use
-     * if null, the MAGIC constant from php is used
-     * if the MAGIC file is erroneous, no file will be set
-     * if false, the default MAGIC file from PHP will be used
-     *
-     * @param  string $file
-     * @return MimeType Provides fluid interface
-     * @throws Exception\RuntimeException When finfo can not read the magicfile
-     * @throws Exception\InvalidArgumentException
-     * @throws Exception\InvalidMagicMimeFileException
-     */
-    public function setMagicFile($file)
-    {
-        if ($file === false) {
-            $this->options['magicFile'] = false;
-        } elseif (empty($file)) {
-            $this->options['magicFile'] = null;
-        } elseif (!(class_exists('finfo', false))) {
-            $this->options['magicFile'] = null;
-            throw new Exception\RuntimeException('Magicfile can not be set; there is no finfo extension installed');
-        } elseif (!is_file($file) || !is_readable($file)) {
-            throw new Exception\InvalidArgumentException(sprintf(
-                'The given magicfile ("%s") could not be read',
-                $file
-            ));
-        } else {
-            ErrorHandler::start(E_NOTICE|E_WARNING);
-            $this->finfo = finfo_open(FILEINFO_MIME_TYPE, $file);
-            $error       = ErrorHandler::stop();
-            if (empty($this->finfo)) {
-                $this->finfo = null;
-                throw new Exception\InvalidMagicMimeFileException(sprintf(
-                    'The given magicfile ("%s") could not be used by ext/finfo',
-                    $file
-                ), 0, $error);
-            }
-            $this->options['magicFile'] = $file;
-        }
-
-        return $this;
-    }
-
-    /**
-     * Disables usage of MagicFile
-     *
-     * @param $disable boolean False disables usage of magic file
-     * @return MimeType Provides fluid interface
-     */
-    public function disableMagicFile($disable)
-    {
-        $this->options['disableMagicFile'] = (bool) $disable;
-        return $this;
-    }
-
-    /**
-     * Is usage of MagicFile disabled?
-     *
-     * @return bool
-     */
-    public function isMagicFileDisabled()
-    {
-        return $this->options['disableMagicFile'];
-    }
-
-    /**
-     * Returns the Header Check option
-     *
-     * @return bool
-     */
-    public function getHeaderCheck()
-    {
-        return $this->options['enableHeaderCheck'];
-    }
-
-    /**
-     * Defines if the http header should be used
-     * Note that this is unsafe and therefor the default value is false
-     *
-     * @param  bool $headerCheck
-     * @return MimeType Provides fluid interface
-     */
-    public function enableHeaderCheck($headerCheck = true)
-    {
-        $this->options['enableHeaderCheck'] = (bool) $headerCheck;
-        return $this;
-    }
-
-    /**
-     * Returns the set mimetypes
-     *
-     * @param  bool $asArray Returns the values as array, when false a concatenated string is returned
-     * @return string|array
-     */
-    public function getMimeType($asArray = false)
-    {
-        $asArray  = (bool) $asArray;
-        $mimetype = (string) $this->options['mimeType'];
-        if ($asArray) {
-            $mimetype = explode(',', $mimetype);
-        }
-
-        return $mimetype;
-    }
-
-    /**
-     * Sets the mimetypes
-     *
-     * @param  string|array $mimetype The mimetypes to validate
-     * @return MimeType Provides a fluent interface
-     */
-    public function setMimeType($mimetype)
-    {
-        $this->options['mimeType'] = null;
-        $this->addMimeType($mimetype);
-        return $this;
-    }
-
-    /**
-     * Adds the mimetypes
-     *
-     * @param  string|array $mimetype The mimetypes to add for validation
-     * @return MimeType Provides a fluent interface
-     * @throws Exception\InvalidArgumentException
-     */
-    public function addMimeType($mimetype)
-    {
-        $mimetypes = $this->getMimeType(true);
-
-        if (is_string($mimetype)) {
-            $mimetype = explode(',', $mimetype);
-        } elseif (!is_array($mimetype)) {
-            throw new Exception\InvalidArgumentException("Invalid options to validator provided");
-        }
-
-        if (isset($mimetype['magicFile'])) {
-            unset($mimetype['magicFile']);
-        }
-
-        foreach ($mimetype as $content) {
-            if (empty($content) || !is_string($content)) {
-                continue;
-            }
-            $mimetypes[] = trim($content);
-        }
-        $mimetypes = array_unique($mimetypes);
-
-        // Sanity check to ensure no empty values
-        foreach ($mimetypes as $key => $mt) {
-            if (empty($mt)) {
-                unset($mimetypes[$key]);
-            }
-        }
-
-        $this->options['mimeType'] = implode(',', $mimetypes);
-
-        return $this;
-    }
-
-    /**
-     * Defined by Zend\Validator\ValidatorInterface
-     *
-     * Returns true if the mimetype of the file matches the given ones. Also parts
-     * of mimetypes can be checked. If you give for example "image" all image
-     * mime types will be accepted like "image/gif", "image/jpeg" and so on.
-     *
-     * @param  string|array $value Real file to check for mimetype
-     * @param  array        $file  File data from \Zend\File\Transfer\Transfer (optional)
-     * @return bool
-     */
-    public function isValid($value, $file = null)
-    {
-        if (is_string($value) && is_array($file)) {
-            // Legacy Zend\Transfer API support
-            $filename = $file['name'];
-            $filetype = $file['type'];
-            $file     = $file['tmp_name'];
-        } elseif (is_array($value)) {
-            if (!isset($value['tmp_name']) || !isset($value['name']) || !isset($value['type'])) {
-                throw new Exception\InvalidArgumentException(
-                    'Value array must be in $_FILES format'
-                );
-            }
-            $file     = $value['tmp_name'];
-            $filename = $value['name'];
-            $filetype = $value['type'];
-        } else {
-            $file     = $value;
-            $filename = basename($file);
-            $filetype = null;
-        }
-        $this->setValue($filename);
-
-        // Is file readable ?
-        if (empty($file) || false === stream_resolve_include_path($file)) {
-            $this->error(static::NOT_READABLE);
-            return false;
-        }
-
-        $mimefile = $this->getMagicFile();
-        if (class_exists('finfo', false)) {
-            if (!$this->isMagicFileDisabled() && (!empty($mimefile) && empty($this->finfo))) {
-                ErrorHandler::start(E_NOTICE|E_WARNING);
-                $this->finfo = finfo_open(FILEINFO_MIME_TYPE, $mimefile);
-                ErrorHandler::stop();
-            }
-
-            if (empty($this->finfo)) {
-                ErrorHandler::start(E_NOTICE|E_WARNING);
-                $this->finfo = finfo_open(FILEINFO_MIME_TYPE);
-                ErrorHandler::stop();
-            }
-
-            $this->type = null;
-            if (!empty($this->finfo)) {
-                $this->type = finfo_file($this->finfo, $file);
-            }
-        }
-
-        if (empty($this->type) && $this->getHeaderCheck()) {
-            $this->type = $filetype;
-        }
-
-        if (empty($this->type)) {
-            $this->error(static::NOT_DETECTED);
-            return false;
-        }
-
-        $mimetype = $this->getMimeType(true);
-        if (in_array($this->type, $mimetype)) {
-            return true;
-        }
-
-        $types = explode('/', $this->type);
-        $types = array_merge($types, explode('-', $this->type));
-        $types = array_merge($types, explode(';', $this->type));
-        foreach ($mimetype as $mime) {
-            if (in_array($mime, $types)) {
-                return true;
-            }
-        }
-
-        $this->error(static::FALSE_TYPE);
-        return false;
-    }
-}
diff --git a/civicrm/vendor/zendframework/zend-validator/src/File/NotExists.php b/civicrm/vendor/zendframework/zend-validator/src/File/NotExists.php
deleted file mode 100644
index e50adef6c78c37bc0963219f13977011b6cf6cb1..0000000000000000000000000000000000000000
--- a/civicrm/vendor/zendframework/zend-validator/src/File/NotExists.php
+++ /dev/null
@@ -1,89 +0,0 @@
-<?php
-/**
- * Zend Framework (http://framework.zend.com/)
- *
- * @link      http://github.com/zendframework/zf2 for the canonical source repository
- * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
- * @license   http://framework.zend.com/license/new-bsd New BSD License
- */
-
-namespace Zend\Validator\File;
-
-use Zend\Validator\Exception;
-
-/**
- * Validator which checks if the destination file does not exist
- */
-class NotExists extends Exists
-{
-    /**
-     * @const string Error constants
-     */
-    const DOES_EXIST = 'fileNotExistsDoesExist';
-
-    /**
-     * @var array Error message templates
-     */
-    protected $messageTemplates = array(
-        self::DOES_EXIST => "File exists",
-    );
-
-    /**
-     * Returns true if and only if the file does not exist in the set destinations
-     *
-     * @param  string|array $value Real file to check for existence
-     * @param  array        $file  File data from \Zend\File\Transfer\Transfer (optional)
-     * @return bool
-     */
-    public function isValid($value, $file = null)
-    {
-        if (is_string($value) && is_array($file)) {
-            // Legacy Zend\Transfer API support
-            $filename = $file['name'];
-            $file     = $file['tmp_name'];
-            $this->setValue($filename);
-        } elseif (is_array($value)) {
-            if (!isset($value['tmp_name']) || !isset($value['name'])) {
-                throw new Exception\InvalidArgumentException(
-                    'Value array must be in $_FILES format'
-                );
-            }
-            $file     = $value['tmp_name'];
-            $filename = basename($file);
-            $this->setValue($value['name']);
-        } else {
-            $file     = $value;
-            $filename = basename($file);
-            $this->setValue($filename);
-        }
-
-        $check = false;
-        $directories = $this->getDirectory(true);
-        if (!isset($directories)) {
-            $check = true;
-            if (file_exists($file)) {
-                $this->error(self::DOES_EXIST);
-                return false;
-            }
-        } else {
-            foreach ($directories as $directory) {
-                if (!isset($directory) || '' === $directory) {
-                    continue;
-                }
-
-                $check = true;
-                if (file_exists($directory . DIRECTORY_SEPARATOR . $filename)) {
-                    $this->error(self::DOES_EXIST);
-                    return false;
-                }
-            }
-        }
-
-        if (!$check) {
-            $this->error(self::DOES_EXIST);
-            return false;
-        }
-
-        return true;
-    }
-}
diff --git a/civicrm/vendor/zendframework/zend-validator/src/File/Sha1.php b/civicrm/vendor/zendframework/zend-validator/src/File/Sha1.php
deleted file mode 100644
index 7d172da4353610439436a87f0519f3fd3a4688d5..0000000000000000000000000000000000000000
--- a/civicrm/vendor/zendframework/zend-validator/src/File/Sha1.php
+++ /dev/null
@@ -1,128 +0,0 @@
-<?php
-/**
- * Zend Framework (http://framework.zend.com/)
- *
- * @link      http://github.com/zendframework/zf2 for the canonical source repository
- * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
- * @license   http://framework.zend.com/license/new-bsd New BSD License
- */
-
-namespace Zend\Validator\File;
-
-use Zend\Validator\Exception;
-
-/**
- * Validator for the sha1 hash of given files
- */
-class Sha1 extends Hash
-{
-    /**
-     * @const string Error constants
-     */
-    const DOES_NOT_MATCH = 'fileSha1DoesNotMatch';
-    const NOT_DETECTED   = 'fileSha1NotDetected';
-    const NOT_FOUND      = 'fileSha1NotFound';
-
-    /**
-     * @var array Error message templates
-     */
-    protected $messageTemplates = array(
-        self::DOES_NOT_MATCH => "File does not match the given sha1 hashes",
-        self::NOT_DETECTED   => "A sha1 hash could not be evaluated for the given file",
-        self::NOT_FOUND      => "File is not readable or does not exist",
-    );
-
-    /**
-     * Options for this validator
-     *
-     * @var string
-     */
-    protected $options = array(
-        'algorithm' => 'sha1',
-        'hash'      => null,
-    );
-
-    /**
-     * Returns all set sha1 hashes
-     *
-     * @return array
-     */
-    public function getSha1()
-    {
-        return $this->getHash();
-    }
-
-    /**
-     * Sets the sha1 hash for one or multiple files
-     *
-     * @param  string|array $options
-     * @return Hash Provides a fluent interface
-     */
-    public function setSha1($options)
-    {
-        $this->setHash($options);
-        return $this;
-    }
-
-    /**
-     * Adds the sha1 hash for one or multiple files
-     *
-     * @param  string|array $options
-     * @return Hash Provides a fluent interface
-     */
-    public function addSha1($options)
-    {
-        $this->addHash($options);
-        return $this;
-    }
-
-    /**
-     * Returns true if and only if the given file confirms the set hash
-     *
-     * @param  string $value|array Filename to check for hash
-     * @param  array        $file  File data from \Zend\File\Transfer\Transfer (optional)
-     * @return bool
-     */
-    public function isValid($value, $file = null)
-    {
-        if (is_string($value) && is_array($file)) {
-            // Legacy Zend\Transfer API support
-            $filename = $file['name'];
-            $file     = $file['tmp_name'];
-        } elseif (is_array($value)) {
-            if (!isset($value['tmp_name']) || !isset($value['name'])) {
-                throw new Exception\InvalidArgumentException(
-                    'Value array must be in $_FILES format'
-                );
-            }
-            $file     = $value['tmp_name'];
-            $filename = $value['name'];
-        } else {
-            $file     = $value;
-            $filename = basename($file);
-        }
-        $this->setValue($filename);
-
-        // Is file readable ?
-        if (empty($file) || false === stream_resolve_include_path($file)) {
-            $this->error(self::NOT_FOUND);
-            return false;
-        }
-
-        $hashes = array_unique(array_keys($this->getHash()));
-        $filehash = hash_file('sha1', $file);
-        if ($filehash === false) {
-            $this->error(self::NOT_DETECTED);
-            return false;
-        }
-
-        foreach ($hashes as $hash) {
-            if ($filehash === $hash) {
-                return true;
-            }
-        }
-
-        $this->error(self::DOES_NOT_MATCH);
-        return false;
-    }
-}
diff --git a/civicrm/vendor/zendframework/zend-validator/src/File/Size.php b/civicrm/vendor/zendframework/zend-validator/src/File/Size.php
deleted file mode 100644
index e709fb5a82678b0b9ee50897d21eaa6c089d7dd3..0000000000000000000000000000000000000000
--- a/civicrm/vendor/zendframework/zend-validator/src/File/Size.php
+++ /dev/null
@@ -1,368 +0,0 @@
-<?php
-/**
- * Zend Framework (http://framework.zend.com/)
- *
- * @link      http://github.com/zendframework/zf2 for the canonical source repository
- * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
- * @license   http://framework.zend.com/license/new-bsd New BSD License
- */
-
-namespace Zend\Validator\File;
-
-use Zend\Stdlib\ErrorHandler;
-use Zend\Validator\AbstractValidator;
-use Zend\Validator\Exception;
-
-/**
- * Validator for the maximum size of a file up to a max of 2GB
- */
-class Size extends AbstractValidator
-{
-    /**
-     * @const string Error constants
-     */
-    const TOO_BIG   = 'fileSizeTooBig';
-    const TOO_SMALL = 'fileSizeTooSmall';
-    const NOT_FOUND = 'fileSizeNotFound';
-
-    /**
-     * @var array Error message templates
-     */
-    protected $messageTemplates = array(
-        self::TOO_BIG   => "Maximum allowed size for file is '%max%' but '%size%' detected",
-        self::TOO_SMALL => "Minimum expected size for file is '%min%' but '%size%' detected",
-        self::NOT_FOUND => "File is not readable or does not exist",
-    );
-
-    /**
-     * @var array Error message template variables
-     */
-    protected $messageVariables = array(
-        'min'  => array('options' => 'min'),
-        'max'  => array('options' => 'max'),
-        'size' => 'size',
-    );
-
-    /**
-     * Detected size
-     *
-     * @var int
-     */
-    protected $size;
-
-    /**
-     * Options for this validator
-     *
-     * @var array
-     */
-    protected $options = array(
-        'min'           => null, // Minimum file size, if null there is no minimum
-        'max'           => null, // Maximum file size, if null there is no maximum
-        'useByteString' => true, // Use byte string?
-    );
-
-    /**
-     * Sets validator options
-     *
-     * If $options is an integer, it will be used as maximum file size
-     * As Array is accepts the following keys:
-     * 'min': Minimum file size
-     * 'max': Maximum file size
-     * 'useByteString': Use bytestring or real size for messages
-     *
-     * @param  int|array|\Traversable $options Options for the adapter
-     */
-    public function __construct($options = null)
-    {
-        if (is_string($options) || is_numeric($options)) {
-            $options = array('max' => $options);
-        }
-
-        if (1 < func_num_args()) {
-            $argv = func_get_args();
-            array_shift($argv);
-            $options['max'] = array_shift($argv);
-            if (!empty($argv)) {
-                $options['useByteString'] = array_shift($argv);
-            }
-        }
-
-        parent::__construct($options);
-    }
-
-    /**
-     * Should messages return bytes as integer or as string in SI notation
-     *
-     * @param  bool $byteString Use bytestring ?
-     * @return int
-     */
-    public function useByteString($byteString = true)
-    {
-        $this->options['useByteString'] = (bool) $byteString;
-        return $this;
-    }
-
-    /**
-     * Will bytestring be used?
-     *
-     * @return bool
-     */
-    public function getByteString()
-    {
-        return $this->options['useByteString'];
-    }
-
-    /**
-     * Returns the minimum file size
-     *
-     * @param  bool $raw Whether or not to force return of the raw value (defaults off)
-     * @return int|string
-     */
-    public function getMin($raw = false)
-    {
-        $min = $this->options['min'];
-        if (!$raw && $this->getByteString()) {
-            $min = $this->toByteString($min);
-        }
-
-        return $min;
-    }
-
-    /**
-     * Sets the minimum file size
-     *
-     * File size can be an integer or a byte string
-     * This includes 'B', 'kB', 'MB', 'GB', 'TB', 'PB', 'EB', 'ZB', 'YB'
-     * For example: 2000, 2MB, 0.2GB
-     *
-     * @param  int|string $min The minimum file size
-     * @return Size Provides a fluent interface
-     * @throws Exception\InvalidArgumentException When min is greater than max
-     */
-    public function setMin($min)
-    {
-        if (!is_string($min) and !is_numeric($min)) {
-            throw new Exception\InvalidArgumentException('Invalid options to validator provided');
-        }
-
-        $min = (int) $this->fromByteString($min);
-        $max = $this->getMax(true);
-        if (($max !== null) && ($min > $max)) {
-            throw new Exception\InvalidArgumentException(
-                "The minimum must be less than or equal to the maximum file size, but $min > $max"
-            );
-        }
-
-        $this->options['min'] = $min;
-        return $this;
-    }
-
-    /**
-     * Returns the maximum file size
-     *
-     * @param  bool $raw Whether or not to force return of the raw value (defaults off)
-     * @return int|string
-     */
-    public function getMax($raw = false)
-    {
-        $max = $this->options['max'];
-        if (!$raw && $this->getByteString()) {
-            $max = $this->toByteString($max);
-        }
-
-        return $max;
-    }
-
-    /**
-     * Sets the maximum file size
-     *
-     * File size can be an integer or a byte string
-     * This includes 'B', 'kB', 'MB', 'GB', 'TB', 'PB', 'EB', 'ZB', 'YB'
-     * For example: 2000, 2MB, 0.2GB
-     *
-     * @param  int|string $max The maximum file size
-     * @return Size Provides a fluent interface
-     * @throws Exception\InvalidArgumentException When max is smaller than min
-     */
-    public function setMax($max)
-    {
-        if (!is_string($max) && !is_numeric($max)) {
-            throw new Exception\InvalidArgumentException('Invalid options to validator provided');
-        }
-
-        $max = (int) $this->fromByteString($max);
-        $min = $this->getMin(true);
-        if (($min !== null) && ($max < $min)) {
-            throw new Exception\InvalidArgumentException(
-                "The maximum must be greater than or equal to the minimum file size, but $max < $min"
-            );
-        }
-
-        $this->options['max'] = $max;
-        return $this;
-    }
-
-    /**
-     * Retrieve current detected file size
-     *
-     * @return int
-     */
-    protected function getSize()
-    {
-        return $this->size;
-    }
-
-    /**
-     * Set current size
-     *
-     * @param  int $size
-     * @return Size
-     */
-    protected function setSize($size)
-    {
-        $this->size = $size;
-        return $this;
-    }
-
-    /**
-     * Returns true if and only if the file size of $value is at least min and
-     * not bigger than max (when max is not null).
-     *
-     * @param  string|array $value File to check for size
-     * @param  array        $file  File data from \Zend\File\Transfer\Transfer (optional)
-     * @return bool
-     */
-    public function isValid($value, $file = null)
-    {
-        if (is_string($value) && is_array($file)) {
-            // Legacy Zend\Transfer API support
-            $filename = $file['name'];
-            $file     = $file['tmp_name'];
-        } elseif (is_array($value)) {
-            if (!isset($value['tmp_name']) || !isset($value['name'])) {
-                throw new Exception\InvalidArgumentException(
-                    'Value array must be in $_FILES format'
-                );
-            }
-            $file     = $value['tmp_name'];
-            $filename = $value['name'];
-        } else {
-            $file     = $value;
-            $filename = basename($file);
-        }
-        $this->setValue($filename);
-
-        // Is file readable ?
-        if (empty($file) || false === stream_resolve_include_path($file)) {
-            $this->error(self::NOT_FOUND);
-            return false;
-        }
-
-        // limited to 4GB files
-        ErrorHandler::start();
-        $size = sprintf("%u", filesize($file));
-        ErrorHandler::stop();
-        $this->size = $size;
-
-        // Check to see if it's smaller than min size
-        $min = $this->getMin(true);
-        $max = $this->getMax(true);
-        if (($min !== null) && ($size < $min)) {
-            if ($this->getByteString()) {
-                $this->options['min'] = $this->toByteString($min);
-                $this->size          = $this->toByteString($size);
-                $this->error(self::TOO_SMALL);
-                $this->options['min'] = $min;
-                $this->size          = $size;
-            } else {
-                $this->error(self::TOO_SMALL);
-            }
-        }
-
-        // Check to see if it's larger than max size
-        if (($max !== null) && ($max < $size)) {
-            if ($this->getByteString()) {
-                $this->options['max'] = $this->toByteString($max);
-                $this->size          = $this->toByteString($size);
-                $this->error(self::TOO_BIG);
-                $this->options['max'] = $max;
-                $this->size          = $size;
-            } else {
-                $this->error(self::TOO_BIG);
-            }
-        }
-
-        if (count($this->getMessages()) > 0) {
-            return false;
-        }
-
-        return true;
-    }
-
-    /**
-     * Returns the formatted size
-     *
-     * @param  int $size
-     * @return string
-     */
-    protected function toByteString($size)
-    {
-        $sizes = array('B', 'kB', 'MB', 'GB', 'TB', 'PB', 'EB', 'ZB', 'YB');
-        for ($i=0; $size >= 1024 && $i < 9; $i++) {
-            $size /= 1024;
-        }
-
-        return round($size, 2) . $sizes[$i];
-    }
-
-    /**
-     * Returns the unformatted size
-     *
-     * @param  string $size
-     * @return int
-     */
-    protected function fromByteString($size)
-    {
-        if (is_numeric($size)) {
-            return (int) $size;
-        }
-
-        $type  = trim(substr($size, -2, 1));
-
-        $value = substr($size, 0, -1);
-        if (!is_numeric($value)) {
-            $value = substr($value, 0, -1);
-        }
-
-        switch (strtoupper($type)) {
-            case 'Y':
-                $value *= (1024 * 1024 * 1024 * 1024 * 1024 * 1024 * 1024 * 1024);
-                break;
-            case 'Z':
-                $value *= (1024 * 1024 * 1024 * 1024 * 1024 * 1024 * 1024);
-                break;
-            case 'E':
-                $value *= (1024 * 1024 * 1024 * 1024 * 1024 * 1024);
-                break;
-            case 'P':
-                $value *= (1024 * 1024 * 1024 * 1024 * 1024);
-                break;
-            case 'T':
-                $value *= (1024 * 1024 * 1024 * 1024);
-                break;
-            case 'G':
-                $value *= (1024 * 1024 * 1024);
-                break;
-            case 'M':
-                $value *= (1024 * 1024);
-                break;
-            case 'K':
-                $value *= 1024;
-                break;
-            default:
-                break;
-        }
-
-        return $value;
-    }
-}
diff --git a/civicrm/vendor/zendframework/zend-validator/src/File/Upload.php b/civicrm/vendor/zendframework/zend-validator/src/File/Upload.php
deleted file mode 100644
index 1524e4ca6c89743b908cf22b6391581349fa2c51..0000000000000000000000000000000000000000
--- a/civicrm/vendor/zendframework/zend-validator/src/File/Upload.php
+++ /dev/null
@@ -1,233 +0,0 @@
-<?php
-/**
- * Zend Framework (http://framework.zend.com/)
- *
- * @link      http://github.com/zendframework/zf2 for the canonical source repository
- * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
- * @license   http://framework.zend.com/license/new-bsd New BSD License
- */
-
-namespace Zend\Validator\File;
-
-use Zend\Validator\AbstractValidator;
-use Zend\Validator\Exception;
-
-/**
- * Validator for the maximum size of a file up to a max of 2GB
- *
- */
-class Upload extends AbstractValidator
-{
-    /**
-     * @const string Error constants
-     */
-    const INI_SIZE       = 'fileUploadErrorIniSize';
-    const FORM_SIZE      = 'fileUploadErrorFormSize';
-    const PARTIAL        = 'fileUploadErrorPartial';
-    const NO_FILE        = 'fileUploadErrorNoFile';
-    const NO_TMP_DIR     = 'fileUploadErrorNoTmpDir';
-    const CANT_WRITE     = 'fileUploadErrorCantWrite';
-    const EXTENSION      = 'fileUploadErrorExtension';
-    const ATTACK         = 'fileUploadErrorAttack';
-    const FILE_NOT_FOUND = 'fileUploadErrorFileNotFound';
-    const UNKNOWN        = 'fileUploadErrorUnknown';
-
-    /**
-     * @var array Error message templates
-     */
-    protected $messageTemplates = array(
-        self::INI_SIZE       => "File '%value%' exceeds the defined ini size",
-        self::FORM_SIZE      => "File '%value%' exceeds the defined form size",
-        self::PARTIAL        => "File '%value%' was only partially uploaded",
-        self::NO_FILE        => "File '%value%' was not uploaded",
-        self::NO_TMP_DIR     => "No temporary directory was found for file '%value%'",
-        self::CANT_WRITE     => "File '%value%' can't be written",
-        self::EXTENSION      => "A PHP extension returned an error while uploading the file '%value%'",
-        self::ATTACK         => "File '%value%' was illegally uploaded. This could be a possible attack",
-        self::FILE_NOT_FOUND => "File '%value%' was not found",
-        self::UNKNOWN        => "Unknown error while uploading file '%value%'"
-    );
-
-    protected $options = array(
-        'files' => array(),
-    );
-
-    /**
-     * Sets validator options
-     *
-     * The array $files must be given in syntax of Zend\File\Transfer\Transfer to be checked
-     * If no files are given the $_FILES array will be used automatically.
-     * NOTE: This validator will only work with HTTP POST uploads!
-     *
-     * @param  array|\Traversable $options Array of files in syntax of \Zend\File\Transfer\Transfer
-     */
-    public function __construct($options = array())
-    {
-        if (is_array($options) && !array_key_exists('files', $options)) {
-            $options = array('files' => $options);
-        }
-
-        parent::__construct($options);
-    }
-
-    /**
-     * Returns the array of set files
-     *
-     * @param  string $file (Optional) The file to return in detail
-     * @return array
-     * @throws Exception\InvalidArgumentException If file is not found
-     */
-    public function getFiles($file = null)
-    {
-        if ($file !== null) {
-            $return = array();
-            foreach ($this->options['files'] as $name => $content) {
-                if ($name === $file) {
-                    $return[$file] = $this->options['files'][$name];
-                }
-
-                if ($content['name'] === $file) {
-                    $return[$name] = $this->options['files'][$name];
-                }
-            }
-
-            if (count($return) === 0) {
-                throw new Exception\InvalidArgumentException("The file '$file' was not found");
-            }
-
-            return $return;
-        }
-
-        return $this->options['files'];
-    }
-
-    /**
-     * Sets the files to be checked
-     *
-     * @param  array $files The files to check in syntax of \Zend\File\Transfer\Transfer
-     * @return Upload Provides a fluent interface
-     */
-    public function setFiles($files = array())
-    {
-        if (count($files) === 0) {
-            $this->options['files'] = $_FILES;
-        } else {
-            $this->options['files'] = $files;
-        }
-
-        if ($this->options['files'] === null) {
-            $this->options['files'] = array();
-        }
-
-        foreach ($this->options['files'] as $file => $content) {
-            if (!isset($content['error'])) {
-                unset($this->options['files'][$file]);
-            }
-        }
-
-        return $this;
-    }
-
-    /**
-     * Returns true if and only if the file was uploaded without errors
-     *
-     * @param  string $value Single file to check for upload errors, when giving null the $_FILES array
-     *                       from initialization will be used
-     * @param  mixed  $file
-     * @return bool
-     */
-    public function isValid($value, $file = null)
-    {
-        $files = array();
-        $this->setValue($value);
-        if (array_key_exists($value, $this->getFiles())) {
-            $files = array_merge($files, $this->getFiles($value));
-        } else {
-            foreach ($this->getFiles() as $file => $content) {
-                if (isset($content['name']) && ($content['name'] === $value)) {
-                    $files = array_merge($files, $this->getFiles($file));
-                }
-
-                if (isset($content['tmp_name']) && ($content['tmp_name'] === $value)) {
-                    $files = array_merge($files, $this->getFiles($file));
-                }
-            }
-        }
-
-        if (empty($files)) {
-            return $this->throwError($file, self::FILE_NOT_FOUND);
-        }
-
-        foreach ($files as $file => $content) {
-            $this->value = $file;
-            switch ($content['error']) {
-                case 0:
-                    if (!is_uploaded_file($content['tmp_name'])) {
-                        $this->throwError($content, self::ATTACK);
-                    }
-                    break;
-
-                case 1:
-                    $this->throwError($content, self::INI_SIZE);
-                    break;
-
-                case 2:
-                    $this->throwError($content, self::FORM_SIZE);
-                    break;
-
-                case 3:
-                    $this->throwError($content, self::PARTIAL);
-                    break;
-
-                case 4:
-                    $this->throwError($content, self::NO_FILE);
-                    break;
-
-                case 6:
-                    $this->throwError($content, self::NO_TMP_DIR);
-                    break;
-
-                case 7:
-                    $this->throwError($content, self::CANT_WRITE);
-                    break;
-
-                case 8:
-                    $this->throwError($content, self::EXTENSION);
-                    break;
-
-                default:
-                    $this->throwError($content, self::UNKNOWN);
-                    break;
-            }
-        }
-
-        if (count($this->getMessages()) > 0) {
-            return false;
-        }
-
-        return true;
-    }
-
-    /**
-     * Throws an error of the given type
-     *
-     * @param  string $file
-     * @param  string $errorType
-     * @return false
-     */
-    protected function throwError($file, $errorType)
-    {
-        if ($file !== null) {
-            if (is_array($file)) {
-                if (array_key_exists('name', $file)) {
-                    $this->value = $file['name'];
-                }
-            } elseif (is_string($file)) {
-                $this->value = $file;
-            }
-        }
-
-        $this->error($errorType);
-        return false;
-    }
-}
diff --git a/civicrm/vendor/zendframework/zend-validator/src/File/UploadFile.php b/civicrm/vendor/zendframework/zend-validator/src/File/UploadFile.php
deleted file mode 100644
index f34958fce2bc42b3a39a6a07f2810182767f04dc..0000000000000000000000000000000000000000
--- a/civicrm/vendor/zendframework/zend-validator/src/File/UploadFile.php
+++ /dev/null
@@ -1,123 +0,0 @@
-<?php
-/**
- * Zend Framework (http://framework.zend.com/)
- *
- * @link      http://github.com/zendframework/zf2 for the canonical source repository
- * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
- * @license   http://framework.zend.com/license/new-bsd New BSD License
- */
-
-namespace Zend\Validator\File;
-
-use Zend\Validator\AbstractValidator;
-use Zend\Validator\Exception;
-
-/**
- * Validator for the maximum size of a file up to a max of 2GB
- */
-class UploadFile extends AbstractValidator
-{
-    /**
-     * @const string Error constants
-     */
-    const INI_SIZE       = 'fileUploadFileErrorIniSize';
-    const FORM_SIZE      = 'fileUploadFileErrorFormSize';
-    const PARTIAL        = 'fileUploadFileErrorPartial';
-    const NO_FILE        = 'fileUploadFileErrorNoFile';
-    const NO_TMP_DIR     = 'fileUploadFileErrorNoTmpDir';
-    const CANT_WRITE     = 'fileUploadFileErrorCantWrite';
-    const EXTENSION      = 'fileUploadFileErrorExtension';
-    const ATTACK         = 'fileUploadFileErrorAttack';
-    const FILE_NOT_FOUND = 'fileUploadFileErrorFileNotFound';
-    const UNKNOWN        = 'fileUploadFileErrorUnknown';
-
-    /**
-     * @var array Error message templates
-     */
-    protected $messageTemplates = array(
-        self::INI_SIZE       => "File exceeds the defined ini size",
-        self::FORM_SIZE      => "File exceeds the defined form size",
-        self::PARTIAL        => "File was only partially uploaded",
-        self::NO_FILE        => "File was not uploaded",
-        self::NO_TMP_DIR     => "No temporary directory was found for file",
-        self::CANT_WRITE     => "File can't be written",
-        self::EXTENSION      => "A PHP extension returned an error while uploading the file",
-        self::ATTACK         => "File was illegally uploaded. This could be a possible attack",
-        self::FILE_NOT_FOUND => "File was not found",
-        self::UNKNOWN        => "Unknown error while uploading file",
-    );
-
-    /**
-     * Returns true if and only if the file was uploaded without errors
-     *
-     * @param  string $value File to check for upload errors
-     * @return bool
-     * @throws Exception\InvalidArgumentException
-     */
-    public function isValid($value)
-    {
-        if (is_array($value)) {
-            if (!isset($value['tmp_name']) || !isset($value['name']) || !isset($value['error'])) {
-                throw new Exception\InvalidArgumentException(
-                    'Value array must be in $_FILES format'
-                );
-            }
-            $file     = $value['tmp_name'];
-            $filename = $value['name'];
-            $error    = $value['error'];
-        } else {
-            $file     = $value;
-            $filename = basename($file);
-            $error    = 0;
-        }
-        $this->setValue($filename);
-
-        switch ($error) {
-            case UPLOAD_ERR_OK:
-                if (empty($file) || false === is_file($file)) {
-                    $this->error(self::FILE_NOT_FOUND);
-                } elseif (! is_uploaded_file($file)) {
-                    $this->error(self::ATTACK);
-                }
-                break;
-
-            case UPLOAD_ERR_INI_SIZE:
-                $this->error(self::INI_SIZE);
-                break;
-
-            case UPLOAD_ERR_FORM_SIZE:
-                $this->error(self::FORM_SIZE);
-                break;
-
-            case UPLOAD_ERR_PARTIAL:
-                $this->error(self::PARTIAL);
-                break;
-
-            case UPLOAD_ERR_NO_FILE:
-                $this->error(self::NO_FILE);
-                break;
-
-            case UPLOAD_ERR_NO_TMP_DIR:
-                $this->error(self::NO_TMP_DIR);
-                break;
-
-            case UPLOAD_ERR_CANT_WRITE:
-                $this->error(self::CANT_WRITE);
-                break;
-
-            case UPLOAD_ERR_EXTENSION:
-                $this->error(self::EXTENSION);
-                break;
-
-            default:
-                $this->error(self::UNKNOWN);
-                break;
-        }
-
-        if (count($this->getMessages()) > 0) {
-            return false;
-        }
-
-        return true;
-    }
-}
diff --git a/civicrm/vendor/zendframework/zend-validator/src/File/WordCount.php b/civicrm/vendor/zendframework/zend-validator/src/File/WordCount.php
deleted file mode 100644
index 460b06a69e09f226b24ff3e0ab2f8ed4383e20af..0000000000000000000000000000000000000000
--- a/civicrm/vendor/zendframework/zend-validator/src/File/WordCount.php
+++ /dev/null
@@ -1,213 +0,0 @@
-<?php
-/**
- * Zend Framework (http://framework.zend.com/)
- *
- * @link      http://github.com/zendframework/zf2 for the canonical source repository
- * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
- * @license   http://framework.zend.com/license/new-bsd New BSD License
- */
-
-namespace Zend\Validator\File;
-
-use Zend\Validator\AbstractValidator;
-use Zend\Validator\Exception;
-
-/**
- * Validator for counting all words in a file
- */
-class WordCount extends AbstractValidator
-{
-    /**
-     * @const string Error constants
-     */
-    const TOO_MUCH  = 'fileWordCountTooMuch';
-    const TOO_LESS  = 'fileWordCountTooLess';
-    const NOT_FOUND = 'fileWordCountNotFound';
-
-    /**
-     * @var array Error message templates
-     */
-    protected $messageTemplates = array(
-        self::TOO_MUCH => "Too many words, maximum '%max%' are allowed but '%count%' were counted",
-        self::TOO_LESS => "Too few words, minimum '%min%' are expected but '%count%' were counted",
-        self::NOT_FOUND => "File is not readable or does not exist",
-    );
-
-    /**
-     * @var array Error message template variables
-     */
-    protected $messageVariables = array(
-        'min'   => array('options' => 'min'),
-        'max'   => array('options' => 'max'),
-        'count' => 'count'
-    );
-
-    /**
-     * Word count
-     *
-     * @var int
-     */
-    protected $count;
-
-    /**
-     * Options for this validator
-     *
-     * @var array
-     */
-    protected $options = array(
-        'min' => null,  // Minimum word count, if null there is no minimum word count
-        'max' => null,  // Maximum word count, if null there is no maximum word count
-    );
-
-    /**
-     * Sets validator options
-     *
-     * Min limits the word count, when used with max=null it is the maximum word count
-     * It also accepts an array with the keys 'min' and 'max'
-     *
-     * If $options is an integer, it will be used as maximum word count
-     * As Array is accepts the following keys:
-     * 'min': Minimum word count
-     * 'max': Maximum word count
-     *
-     * @param  int|array|\Traversable $options Options for the adapter
-     */
-    public function __construct($options = null)
-    {
-        if (is_string($options) || is_numeric($options)) {
-            $options = array('max' => $options);
-        }
-
-        if (1 < func_num_args()) {
-            $options['min'] = func_get_arg(0);
-            $options['max'] = func_get_arg(1);
-        }
-
-        parent::__construct($options);
-    }
-
-    /**
-     * Returns the minimum word count
-     *
-     * @return int
-     */
-    public function getMin()
-    {
-        return $this->options['min'];
-    }
-
-    /**
-     * Sets the minimum word count
-     *
-     * @param  int|array $min The minimum word count
-     * @return WordCount Provides a fluent interface
-     * @throws Exception\InvalidArgumentException When min is greater than max
-     */
-    public function setMin($min)
-    {
-        if (is_array($min) and isset($min['min'])) {
-            $min = $min['min'];
-        }
-
-        if (!is_string($min) and !is_numeric($min)) {
-            throw new Exception\InvalidArgumentException('Invalid options to validator provided');
-        }
-
-        $min = (int) $min;
-        if (($this->getMax() !== null) && ($min > $this->getMax())) {
-            throw new Exception\InvalidArgumentException(
-                "The minimum must be less than or equal to the maximum word count, but $min > {$this->getMax()}"
-            );
-        }
-
-        $this->options['min'] = $min;
-        return $this;
-    }
-
-    /**
-     * Returns the maximum word count
-     *
-     * @return int
-     */
-    public function getMax()
-    {
-        return $this->options['max'];
-    }
-
-    /**
-     * Sets the maximum file count
-     *
-     * @param  int|array $max The maximum word count
-     * @return WordCount Provides a fluent interface
-     * @throws Exception\InvalidArgumentException When max is smaller than min
-     */
-    public function setMax($max)
-    {
-        if (is_array($max) and isset($max['max'])) {
-            $max = $max['max'];
-        }
-
-        if (!is_string($max) and !is_numeric($max)) {
-            throw new Exception\InvalidArgumentException('Invalid options to validator provided');
-        }
-
-        $max = (int) $max;
-        if (($this->getMin() !== null) && ($max < $this->getMin())) {
-            throw new Exception\InvalidArgumentException(
-                "The maximum must be greater than or equal to the minimum word count, but $max < {$this->getMin()}"
-            );
-        }
-
-        $this->options['max'] = $max;
-        return $this;
-    }
-
-    /**
-     * Returns true if and only if the counted words are at least min and
-     * not bigger than max (when max is not null).
-     *
-     * @param  string|array $value Filename to check for word count
-     * @param  array        $file  File data from \Zend\File\Transfer\Transfer (optional)
-     * @return bool
-     */
-    public function isValid($value, $file = null)
-    {
-        if (is_string($value) && is_array($file)) {
-            // Legacy Zend\Transfer API support
-            $filename = $file['name'];
-            $file     = $file['tmp_name'];
-        } elseif (is_array($value)) {
-            if (!isset($value['tmp_name']) || !isset($value['name'])) {
-                throw new Exception\InvalidArgumentException(
-                    'Value array must be in $_FILES format'
-                );
-            }
-            $file     = $value['tmp_name'];
-            $filename = $value['name'];
-        } else {
-            $file     = $value;
-            $filename = basename($file);
-        }
-        $this->setValue($filename);
-
-        // Is file readable ?
-        if (empty($file) || false === stream_resolve_include_path($file)) {
-            $this->error(self::NOT_FOUND);
-            return false;
-        }
-
-        $content     = file_get_contents($file);
-        $this->count = str_word_count($content);
-        if (($this->getMax() !== null) && ($this->count > $this->getMax())) {
-            $this->error(self::TOO_MUCH);
-            return false;
-        }
-
-        if (($this->getMin() !== null) && ($this->count < $this->getMin())) {
-            $this->error(self::TOO_LESS);
-            return false;
-        }
-
-        return true;
-    }
-}
diff --git a/civicrm/vendor/zendframework/zend-validator/src/GreaterThan.php b/civicrm/vendor/zendframework/zend-validator/src/GreaterThan.php
deleted file mode 100644
index 7f106e8c5d68f410e3bbb222daf15e6927d5d5c6..0000000000000000000000000000000000000000
--- a/civicrm/vendor/zendframework/zend-validator/src/GreaterThan.php
+++ /dev/null
@@ -1,158 +0,0 @@
-<?php
-/**
- * Zend Framework (http://framework.zend.com/)
- *
- * @link      http://github.com/zendframework/zf2 for the canonical source repository
- * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
- * @license   http://framework.zend.com/license/new-bsd New BSD License
- */
-
-namespace Zend\Validator;
-
-use Traversable;
-use Zend\Stdlib\ArrayUtils;
-
-class GreaterThan extends AbstractValidator
-{
-    const NOT_GREATER           = 'notGreaterThan';
-    const NOT_GREATER_INCLUSIVE = 'notGreaterThanInclusive';
-
-    /**
-     * Validation failure message template definitions
-     *
-     * @var array
-     */
-    protected $messageTemplates = array(
-        self::NOT_GREATER => "The input is not greater than '%min%'",
-        self::NOT_GREATER_INCLUSIVE => "The input is not greater or equal than '%min%'"
-    );
-
-    /**
-     * @var array
-     */
-    protected $messageVariables = array(
-        'min' => 'min'
-    );
-
-    /**
-     * Minimum value
-     *
-     * @var mixed
-     */
-    protected $min;
-
-    /**
-     * Whether to do inclusive comparisons, allowing equivalence to max
-     *
-     * If false, then strict comparisons are done, and the value may equal
-     * the min option
-     *
-     * @var bool
-     */
-    protected $inclusive;
-
-    /**
-     * Sets validator options
-     *
-     * @param  array|Traversable $options
-     * @throws Exception\InvalidArgumentException
-     */
-    public function __construct($options = null)
-    {
-        if ($options instanceof Traversable) {
-            $options = ArrayUtils::iteratorToArray($options);
-        }
-        if (!is_array($options)) {
-            $options = func_get_args();
-            $temp['min'] = array_shift($options);
-
-            if (!empty($options)) {
-                $temp['inclusive'] = array_shift($options);
-            }
-
-            $options = $temp;
-        }
-
-        if (!array_key_exists('min', $options)) {
-            throw new Exception\InvalidArgumentException("Missing option 'min'");
-        }
-
-        if (!array_key_exists('inclusive', $options)) {
-            $options['inclusive'] = false;
-        }
-
-        $this->setMin($options['min'])
-             ->setInclusive($options['inclusive']);
-
-        parent::__construct($options);
-    }
-
-    /**
-     * Returns the min option
-     *
-     * @return mixed
-     */
-    public function getMin()
-    {
-        return $this->min;
-    }
-
-    /**
-     * Sets the min option
-     *
-     * @param  mixed $min
-     * @return GreaterThan Provides a fluent interface
-     */
-    public function setMin($min)
-    {
-        $this->min = $min;
-        return $this;
-    }
-
-    /**
-     * Returns the inclusive option
-     *
-     * @return bool
-     */
-    public function getInclusive()
-    {
-        return $this->inclusive;
-    }
-
-    /**
-     * Sets the inclusive option
-     *
-     * @param  bool $inclusive
-     * @return GreaterThan Provides a fluent interface
-     */
-    public function setInclusive($inclusive)
-    {
-        $this->inclusive = $inclusive;
-        return $this;
-    }
-
-    /**
-     * Returns true if and only if $value is greater than min option
-     *
-     * @param  mixed $value
-     * @return bool
-     */
-    public function isValid($value)
-    {
-        $this->setValue($value);
-
-        if ($this->inclusive) {
-            if ($this->min > $value) {
-                $this->error(self::NOT_GREATER_INCLUSIVE);
-                return false;
-            }
-        } else {
-            if ($this->min >= $value) {
-                $this->error(self::NOT_GREATER);
-                return false;
-            }
-        }
-
-        return true;
-    }
-}
diff --git a/civicrm/vendor/zendframework/zend-validator/src/Hex.php b/civicrm/vendor/zendframework/zend-validator/src/Hex.php
deleted file mode 100644
index 64ae8930df699d284e3e45c67bbe5492c941036e..0000000000000000000000000000000000000000
--- a/civicrm/vendor/zendframework/zend-validator/src/Hex.php
+++ /dev/null
@@ -1,48 +0,0 @@
-<?php
-/**
- * Zend Framework (http://framework.zend.com/)
- *
- * @link      http://github.com/zendframework/zf2 for the canonical source repository
- * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
- * @license   http://framework.zend.com/license/new-bsd New BSD License
- */
-
-namespace Zend\Validator;
-
-class Hex extends AbstractValidator
-{
-    const INVALID = 'hexInvalid';
-    const NOT_HEX = 'notHex';
-
-    /**
-     * Validation failure message template definitions
-     *
-     * @var array
-     */
-    protected $messageTemplates = array(
-        self::INVALID => "Invalid type given. String expected",
-        self::NOT_HEX => "The input contains non-hexadecimal characters",
-    );
-
-    /**
-     * Returns true if and only if $value contains only hexadecimal digit characters
-     *
-     * @param  string $value
-     * @return bool
-     */
-    public function isValid($value)
-    {
-        if (!is_string($value) && !is_int($value)) {
-            $this->error(self::INVALID);
-            return false;
-        }
-
-        $this->setValue($value);
-        if (!ctype_xdigit((string) $value)) {
-            $this->error(self::NOT_HEX);
-            return false;
-        }
-
-        return true;
-    }
-}
diff --git a/civicrm/vendor/zendframework/zend-validator/src/Hostname.php b/civicrm/vendor/zendframework/zend-validator/src/Hostname.php
deleted file mode 100644
index 3306fb874ff900901701cb292a70646b43ed5497..0000000000000000000000000000000000000000
--- a/civicrm/vendor/zendframework/zend-validator/src/Hostname.php
+++ /dev/null
@@ -1,1585 +0,0 @@
-<?php
-/**
- * Zend Framework (http://framework.zend.com/)
- *
- * @link      http://github.com/zendframework/zf2 for the canonical source repository
- * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
- * @license   http://framework.zend.com/license/new-bsd New BSD License
- */
-
-namespace Zend\Validator;
-
-use Zend\Stdlib\StringUtils;
-
-/**
- * Please note there are two standalone test scripts for testing IDN characters due to problems
- * with file encoding.
- *
- * The first is tests/Zend/Validator/HostnameTestStandalone.php which is designed to be run on
- * the command line.
- *
- * The second is tests/Zend/Validator/HostnameTestForm.php which is designed to be run via HTML
- * to allow users to test entering UTF-8 characters in a form.
- */
-class Hostname extends AbstractValidator
-{
-    const CANNOT_DECODE_PUNYCODE  = 'hostnameCannotDecodePunycode';
-    const INVALID                 = 'hostnameInvalid';
-    const INVALID_DASH            = 'hostnameDashCharacter';
-    const INVALID_HOSTNAME        = 'hostnameInvalidHostname';
-    const INVALID_HOSTNAME_SCHEMA = 'hostnameInvalidHostnameSchema';
-    const INVALID_LOCAL_NAME      = 'hostnameInvalidLocalName';
-    const INVALID_URI             = 'hostnameInvalidUri';
-    const IP_ADDRESS_NOT_ALLOWED  = 'hostnameIpAddressNotAllowed';
-    const LOCAL_NAME_NOT_ALLOWED  = 'hostnameLocalNameNotAllowed';
-    const UNDECIPHERABLE_TLD      = 'hostnameUndecipherableTld';
-    const UNKNOWN_TLD             = 'hostnameUnknownTld';
-
-    /**
-     * @var array
-     */
-    protected $messageTemplates = array(
-        self::CANNOT_DECODE_PUNYCODE  => "The input appears to be a DNS hostname but the given punycode notation cannot be decoded",
-        self::INVALID                 => "Invalid type given. String expected",
-        self::INVALID_DASH            => "The input appears to be a DNS hostname but contains a dash in an invalid position",
-        self::INVALID_HOSTNAME        => "The input does not match the expected structure for a DNS hostname",
-        self::INVALID_HOSTNAME_SCHEMA => "The input appears to be a DNS hostname but cannot match against hostname schema for TLD '%tld%'",
-        self::INVALID_LOCAL_NAME      => "The input does not appear to be a valid local network name",
-        self::INVALID_URI             => "The input does not appear to be a valid URI hostname",
-        self::IP_ADDRESS_NOT_ALLOWED  => "The input appears to be an IP address, but IP addresses are not allowed",
-        self::LOCAL_NAME_NOT_ALLOWED  => "The input appears to be a local network name but local network names are not allowed",
-        self::UNDECIPHERABLE_TLD      => "The input appears to be a DNS hostname but cannot extract TLD part",
-        self::UNKNOWN_TLD             => "The input appears to be a DNS hostname but cannot match TLD against known list",
-    );
-
-    /**
-     * @var array
-     */
-    protected $messageVariables = array(
-        'tld' => 'tld',
-    );
-
-    const ALLOW_DNS   = 1;  // Allows Internet domain names (e.g., example.com)
-    const ALLOW_IP    = 2;  // Allows IP addresses
-    const ALLOW_LOCAL = 4;  // Allows local network names (e.g., localhost, www.localdomain)
-    const ALLOW_URI   = 8;  // Allows URI hostnames
-    const ALLOW_ALL   = 15;  // Allows all types of hostnames
-
-    /**
-     * Array of valid top-level-domains
-     *
-     * @see ftp://data.iana.org/TLD/tlds-alpha-by-domain.txt  List of all TLDs by domain
-     * @see http://www.iana.org/domains/root/db/ Official list of supported TLDs
-     * @var array
-     */
-    protected $validTlds = array(
-        'abbott',
-        'abogado',
-        'ac',
-        'academy',
-        'accountants',
-        'active',
-        'actor',
-        'ad',
-        'adult',
-        'ae',
-        'aero',
-        'af',
-        'ag',
-        'agency',
-        'ai',
-        'airforce',
-        'al',
-        'allfinanz',
-        'alsace',
-        'am',
-        'amsterdam',
-        'an',
-        'android',
-        'ao',
-        'apartments',
-        'aq',
-        'aquarelle',
-        'ar',
-        'archi',
-        'army',
-        'arpa',
-        'as',
-        'asia',
-        'associates',
-        'at',
-        'attorney',
-        'au',
-        'auction',
-        'audio',
-        'autos',
-        'aw',
-        'ax',
-        'axa',
-        'az',
-        'ba',
-        'band',
-        'bank',
-        'bar',
-        'barclaycard',
-        'barclays',
-        'bargains',
-        'bayern',
-        'bb',
-        'bd',
-        'be',
-        'beer',
-        'berlin',
-        'best',
-        'bf',
-        'bg',
-        'bh',
-        'bi',
-        'bid',
-        'bike',
-        'bingo',
-        'bio',
-        'biz',
-        'bj',
-        'black',
-        'blackfriday',
-        'bloomberg',
-        'blue',
-        'bm',
-        'bmw',
-        'bn',
-        'bnpparibas',
-        'bo',
-        'boats',
-        'boo',
-        'boutique',
-        'br',
-        'brussels',
-        'bs',
-        'bt',
-        'budapest',
-        'build',
-        'builders',
-        'business',
-        'buzz',
-        'bv',
-        'bw',
-        'by',
-        'bz',
-        'bzh',
-        'ca',
-        'cab',
-        'cal',
-        'camera',
-        'camp',
-        'cancerresearch',
-        'canon',
-        'capetown',
-        'capital',
-        'caravan',
-        'cards',
-        'care',
-        'career',
-        'careers',
-        'cartier',
-        'casa',
-        'cash',
-        'casino',
-        'cat',
-        'catering',
-        'cbn',
-        'cc',
-        'cd',
-        'center',
-        'ceo',
-        'cern',
-        'cf',
-        'cfd',
-        'cg',
-        'ch',
-        'channel',
-        'chat',
-        'cheap',
-        'chloe',
-        'christmas',
-        'chrome',
-        'church',
-        'ci',
-        'citic',
-        'city',
-        'ck',
-        'cl',
-        'claims',
-        'cleaning',
-        'click',
-        'clinic',
-        'clothing',
-        'club',
-        'cm',
-        'cn',
-        'co',
-        'coach',
-        'codes',
-        'coffee',
-        'college',
-        'cologne',
-        'com',
-        'community',
-        'company',
-        'computer',
-        'condos',
-        'construction',
-        'consulting',
-        'contractors',
-        'cooking',
-        'cool',
-        'coop',
-        'country',
-        'courses',
-        'cr',
-        'credit',
-        'creditcard',
-        'cricket',
-        'crs',
-        'cruises',
-        'cu',
-        'cuisinella',
-        'cv',
-        'cw',
-        'cx',
-        'cy',
-        'cymru',
-        'cz',
-        'dabur',
-        'dad',
-        'dance',
-        'dating',
-        'datsun',
-        'day',
-        'dclk',
-        'de',
-        'deals',
-        'degree',
-        'delivery',
-        'democrat',
-        'dental',
-        'dentist',
-        'desi',
-        'design',
-        'dev',
-        'diamonds',
-        'diet',
-        'digital',
-        'direct',
-        'directory',
-        'discount',
-        'dj',
-        'dk',
-        'dm',
-        'dnp',
-        'do',
-        'docs',
-        'domains',
-        'doosan',
-        'durban',
-        'dvag',
-        'dz',
-        'eat',
-        'ec',
-        'edu',
-        'education',
-        'ee',
-        'eg',
-        'email',
-        'emerck',
-        'energy',
-        'engineer',
-        'engineering',
-        'enterprises',
-        'epson',
-        'equipment',
-        'er',
-        'erni',
-        'es',
-        'esq',
-        'estate',
-        'et',
-        'eu',
-        'eurovision',
-        'eus',
-        'events',
-        'everbank',
-        'exchange',
-        'expert',
-        'exposed',
-        'fail',
-        'fan',
-        'fans',
-        'farm',
-        'fashion',
-        'feedback',
-        'fi',
-        'finance',
-        'financial',
-        'firmdale',
-        'fish',
-        'fishing',
-        'fit',
-        'fitness',
-        'fj',
-        'fk',
-        'flights',
-        'florist',
-        'flowers',
-        'flsmidth',
-        'fly',
-        'fm',
-        'fo',
-        'foo',
-        'football',
-        'forex',
-        'forsale',
-        'foundation',
-        'fr',
-        'frl',
-        'frogans',
-        'fund',
-        'furniture',
-        'futbol',
-        'ga',
-        'gal',
-        'gallery',
-        'garden',
-        'gb',
-        'gbiz',
-        'gd',
-        'gdn',
-        'ge',
-        'gent',
-        'gf',
-        'gg',
-        'ggee',
-        'gh',
-        'gi',
-        'gift',
-        'gifts',
-        'gives',
-        'gl',
-        'glass',
-        'gle',
-        'global',
-        'globo',
-        'gm',
-        'gmail',
-        'gmo',
-        'gmx',
-        'gn',
-        'goldpoint',
-        'goo',
-        'goog',
-        'google',
-        'gop',
-        'gov',
-        'gp',
-        'gq',
-        'gr',
-        'graphics',
-        'gratis',
-        'green',
-        'gripe',
-        'gs',
-        'gt',
-        'gu',
-        'guide',
-        'guitars',
-        'guru',
-        'gw',
-        'gy',
-        'hamburg',
-        'hangout',
-        'haus',
-        'healthcare',
-        'help',
-        'here',
-        'hermes',
-        'hiphop',
-        'hiv',
-        'hk',
-        'hm',
-        'hn',
-        'holdings',
-        'holiday',
-        'homes',
-        'horse',
-        'host',
-        'hosting',
-        'house',
-        'how',
-        'hr',
-        'ht',
-        'hu',
-        'ibm',
-        'id',
-        'ie',
-        'ifm',
-        'il',
-        'im',
-        'immo',
-        'immobilien',
-        'in',
-        'industries',
-        'infiniti',
-        'info',
-        'ing',
-        'ink',
-        'institute',
-        'insure',
-        'int',
-        'international',
-        'investments',
-        'io',
-        'iq',
-        'ir',
-        'irish',
-        'is',
-        'it',
-        'iwc',
-        'java',
-        'jcb',
-        'je',
-        'jetzt',
-        'jm',
-        'jo',
-        'jobs',
-        'joburg',
-        'jp',
-        'juegos',
-        'kaufen',
-        'kddi',
-        'ke',
-        'kg',
-        'kh',
-        'ki',
-        'kim',
-        'kitchen',
-        'kiwi',
-        'km',
-        'kn',
-        'koeln',
-        'kp',
-        'kr',
-        'krd',
-        'kred',
-        'kw',
-        'ky',
-        'kyoto',
-        'kz',
-        'la',
-        'lacaixa',
-        'land',
-        'lat',
-        'latrobe',
-        'lawyer',
-        'lb',
-        'lc',
-        'lds',
-        'lease',
-        'leclerc',
-        'legal',
-        'lgbt',
-        'li',
-        'lidl',
-        'life',
-        'lighting',
-        'limited',
-        'limo',
-        'link',
-        'lk',
-        'loans',
-        'london',
-        'lotte',
-        'lotto',
-        'lr',
-        'ls',
-        'lt',
-        'ltda',
-        'lu',
-        'luxe',
-        'luxury',
-        'lv',
-        'ly',
-        'ma',
-        'madrid',
-        'maif',
-        'maison',
-        'management',
-        'mango',
-        'market',
-        'marketing',
-        'markets',
-        'marriott',
-        'mc',
-        'md',
-        'me',
-        'media',
-        'meet',
-        'melbourne',
-        'meme',
-        'memorial',
-        'menu',
-        'mg',
-        'mh',
-        'miami',
-        'mil',
-        'mini',
-        'mk',
-        'ml',
-        'mm',
-        'mn',
-        'mo',
-        'mobi',
-        'moda',
-        'moe',
-        'monash',
-        'money',
-        'mormon',
-        'mortgage',
-        'moscow',
-        'motorcycles',
-        'mov',
-        'mp',
-        'mq',
-        'mr',
-        'ms',
-        'mt',
-        'mtpc',
-        'mu',
-        'museum',
-        'mv',
-        'mw',
-        'mx',
-        'my',
-        'mz',
-        'na',
-        'nagoya',
-        'name',
-        'navy',
-        'nc',
-        'ne',
-        'net',
-        'network',
-        'neustar',
-        'new',
-        'nexus',
-        'nf',
-        'ng',
-        'ngo',
-        'nhk',
-        'ni',
-        'nico',
-        'ninja',
-        'nissan',
-        'nl',
-        'no',
-        'np',
-        'nr',
-        'nra',
-        'nrw',
-        'ntt',
-        'nu',
-        'nyc',
-        'nz',
-        'okinawa',
-        'om',
-        'one',
-        'ong',
-        'onl',
-        'online',
-        'ooo',
-        'oracle',
-        'org',
-        'organic',
-        'osaka',
-        'otsuka',
-        'ovh',
-        'pa',
-        'page',
-        'paris',
-        'partners',
-        'parts',
-        'party',
-        'pe',
-        'pf',
-        'pg',
-        'ph',
-        'pharmacy',
-        'photo',
-        'photography',
-        'photos',
-        'physio',
-        'piaget',
-        'pics',
-        'pictet',
-        'pictures',
-        'pink',
-        'pizza',
-        'pk',
-        'pl',
-        'place',
-        'plumbing',
-        'pm',
-        'pn',
-        'pohl',
-        'poker',
-        'porn',
-        'post',
-        'pr',
-        'praxi',
-        'press',
-        'pro',
-        'prod',
-        'productions',
-        'prof',
-        'properties',
-        'property',
-        'ps',
-        'pt',
-        'pub',
-        'pw',
-        'py',
-        'qa',
-        'qpon',
-        'quebec',
-        're',
-        'realtor',
-        'recipes',
-        'red',
-        'rehab',
-        'reise',
-        'reisen',
-        'reit',
-        'ren',
-        'rentals',
-        'repair',
-        'report',
-        'republican',
-        'rest',
-        'restaurant',
-        'reviews',
-        'rich',
-        'rio',
-        'rip',
-        'ro',
-        'rocks',
-        'rodeo',
-        'rs',
-        'rsvp',
-        'ru',
-        'ruhr',
-        'rw',
-        'ryukyu',
-        'sa',
-        'saarland',
-        'sale',
-        'samsung',
-        'sarl',
-        'saxo',
-        'sb',
-        'sc',
-        'sca',
-        'scb',
-        'schmidt',
-        'school',
-        'schule',
-        'schwarz',
-        'science',
-        'scot',
-        'sd',
-        'se',
-        'services',
-        'sew',
-        'sexy',
-        'sg',
-        'sh',
-        'shiksha',
-        'shoes',
-        'shriram',
-        'si',
-        'singles',
-        'site',
-        'sj',
-        'sk',
-        'sky',
-        'sl',
-        'sm',
-        'sn',
-        'so',
-        'social',
-        'software',
-        'sohu',
-        'solar',
-        'solutions',
-        'soy',
-        'space',
-        'spiegel',
-        'spreadbetting',
-        'sr',
-        'st',
-        'study',
-        'style',
-        'su',
-        'sucks',
-        'supplies',
-        'supply',
-        'support',
-        'surf',
-        'surgery',
-        'suzuki',
-        'sv',
-        'sx',
-        'sy',
-        'sydney',
-        'systems',
-        'sz',
-        'taipei',
-        'tatar',
-        'tattoo',
-        'tax',
-        'tc',
-        'td',
-        'technology',
-        'tel',
-        'temasek',
-        'tennis',
-        'tf',
-        'tg',
-        'th',
-        'tienda',
-        'tips',
-        'tires',
-        'tirol',
-        'tj',
-        'tk',
-        'tl',
-        'tm',
-        'tn',
-        'to',
-        'today',
-        'tokyo',
-        'tools',
-        'top',
-        'toshiba',
-        'town',
-        'toys',
-        'tr',
-        'trade',
-        'trading',
-        'training',
-        'travel',
-        'trust',
-        'tt',
-        'tui',
-        'tv',
-        'tw',
-        'tz',
-        'ua',
-        'ug',
-        'uk',
-        'university',
-        'uno',
-        'uol',
-        'us',
-        'uy',
-        'uz',
-        'va',
-        'vacations',
-        'vc',
-        've',
-        'vegas',
-        'ventures',
-        'versicherung',
-        'vet',
-        'vg',
-        'vi',
-        'viajes',
-        'video',
-        'villas',
-        'vision',
-        'vlaanderen',
-        'vn',
-        'vodka',
-        'vote',
-        'voting',
-        'voto',
-        'voyage',
-        'vu',
-        'wales',
-        'wang',
-        'watch',
-        'webcam',
-        'website',
-        'wed',
-        'wedding',
-        'wf',
-        'whoswho',
-        'wien',
-        'wiki',
-        'williamhill',
-        'wme',
-        'work',
-        'works',
-        'world',
-        'ws',
-        'wtc',
-        'wtf',
-        'xin',
-        '佛山',
-        '集团',
-        '在线',
-        '한국',
-        'ভারত',
-        '八卦',
-        'موقع',
-        '公益',
-        '公司',
-        '移动',
-        '我爱你',
-        'москва',
-        'қаз',
-        'онлайн',
-        'сайт',
-        'срб',
-        'бел',
-        '淡马锡',
-        'орг',
-        '삼성',
-        'சிங்கப்பூர்',
-        '商标',
-        '商店',
-        '商城',
-        'дети',
-        'мкд',
-        '中文网',
-        '中信',
-        '中国',
-        '中國',
-        '谷歌',
-        'భారత్',
-        'ලංකා',
-        'ભારત',
-        'भारत',
-        '网店',
-        'संगठन',
-        '网络',
-        'укр',
-        '香港',
-        '台湾',
-        '台灣',
-        '手机',
-        'мон',
-        'الجزائر',
-        'عمان',
-        'ایران',
-        'امارات',
-        'بازار',
-        'الاردن',
-        'بھارت',
-        'المغرب',
-        'السعودية',
-        'مليسيا',
-        '政府',
-        'شبكة',
-        'გე',
-        '机构',
-        '组织机构',
-        'ไทย',
-        'سورية',
-        'рус',
-        'рф',
-        'تونس',
-        'みんな',
-        'グーグル',
-        '世界',
-        'ਭਾਰਤ',
-        '网址',
-        '游戏',
-        'vermögensberater',
-        'vermögensberatung',
-        '企业',
-        'مصر',
-        'قطر',
-        '广东',
-        'இலங்கை',
-        'இந்தியா',
-        '新加坡',
-        'فلسطين',
-        '政务',
-        'xxx',
-        'xyz',
-        'yachts',
-        'yandex',
-        'ye',
-        'yodobashi',
-        'yoga',
-        'yokohama',
-        'youtube',
-        'yt',
-        'za',
-        'zip',
-        'zm',
-        'zone',
-        'zuerich',
-        'zw',
-    );
-
-    /**
-     * Array for valid Idns
-     * @see http://www.iana.org/domains/idn-tables/ Official list of supported IDN Chars
-     * (.AC) Ascension Island http://www.nic.ac/pdf/AC-IDN-Policy.pdf
-     * (.AR) Argentina http://www.nic.ar/faqidn.html
-     * (.AS) American Samoa http://www.nic.as/idn/chars.cfm
-     * (.AT) Austria http://www.nic.at/en/service/technical_information/idn/charset_converter/
-     * (.BIZ) International http://www.iana.org/domains/idn-tables/
-     * (.BR) Brazil http://registro.br/faq/faq6.html
-     * (.BV) Bouvett Island http://www.norid.no/domeneregistrering/idn/idn_nyetegn.en.html
-     * (.CAT) Catalan http://www.iana.org/domains/idn-tables/tables/cat_ca_1.0.html
-     * (.CH) Switzerland https://nic.switch.ch/reg/ocView.action?res=EF6GW2JBPVTG67DLNIQXU234MN6SC33JNQQGI7L6#anhang1
-     * (.CL) Chile http://www.iana.org/domains/idn-tables/tables/cl_latn_1.0.html
-     * (.COM) International http://www.verisign.com/information-services/naming-services/internationalized-domain-names/index.html
-     * (.DE) Germany http://www.denic.de/en/domains/idns/liste.html
-     * (.DK) Danmark http://www.dk-hostmaster.dk/index.php?id=151
-     * (.EE) Estonia https://www.iana.org/domains/idn-tables/tables/pl_et-pl_1.0.html
-     * (.ES) Spain https://www.nic.es/media/2008-05/1210147705287.pdf
-     * (.FI) Finland http://www.ficora.fi/en/index/palvelut/fiverkkotunnukset/aakkostenkaytto.html
-     * (.GR) Greece https://grweb.ics.forth.gr/CharacterTable1_en.jsp
-     * (.HU) Hungary http://www.domain.hu/domain/English/szabalyzat/szabalyzat.html
-     * (.IL) Israel http://www.isoc.org.il/domains/il-domain-rules.html
-     * (.INFO) International http://www.nic.info/info/idn
-     * (.IO) British Indian Ocean Territory http://www.nic.io/IO-IDN-Policy.pdf
-     * (.IR) Iran http://www.nic.ir/Allowable_Characters_dot-iran
-     * (.IS) Iceland http://www.isnic.is/domain/rules.php
-     * (.KR) Korea http://www.iana.org/domains/idn-tables/tables/kr_ko-kr_1.0.html
-     * (.LI) Liechtenstein https://nic.switch.ch/reg/ocView.action?res=EF6GW2JBPVTG67DLNIQXU234MN6SC33JNQQGI7L6#anhang1
-     * (.LT) Lithuania http://www.domreg.lt/static/doc/public/idn_symbols-en.pdf
-     * (.MD) Moldova http://www.register.md/
-     * (.MUSEUM) International http://www.iana.org/domains/idn-tables/tables/museum_latn_1.0.html
-     * (.NET) International http://www.verisign.com/information-services/naming-services/internationalized-domain-names/index.html
-     * (.NO) Norway http://www.norid.no/domeneregistrering/idn/idn_nyetegn.en.html
-     * (.NU) Niue http://www.worldnames.net/
-     * (.ORG) International http://www.pir.org/index.php?db=content/FAQs&tbl=FAQs_Registrant&id=2
-     * (.PE) Peru https://www.nic.pe/nuevas_politicas_faq_2.php
-     * (.PL) Poland http://www.dns.pl/IDN/allowed_character_sets.pdf
-     * (.PR) Puerto Rico http://www.nic.pr/idn_rules.asp
-     * (.PT) Portugal https://online.dns.pt/dns_2008/do?com=DS;8216320233;111;+PAGE(4000058)+K-CAT-CODIGO(C.125)+RCNT(100);
-     * (.RU) Russia http://www.iana.org/domains/idn-tables/tables/ru_ru-ru_1.0.html
-     * (.SA) Saudi Arabia http://www.iana.org/domains/idn-tables/tables/sa_ar_1.0.html
-     * (.SE) Sweden http://www.iis.se/english/IDN_campaignsite.shtml?lang=en
-     * (.SH) Saint Helena http://www.nic.sh/SH-IDN-Policy.pdf
-     * (.SJ) Svalbard and Jan Mayen http://www.norid.no/domeneregistrering/idn/idn_nyetegn.en.html
-     * (.TH) Thailand http://www.iana.org/domains/idn-tables/tables/th_th-th_1.0.html
-     * (.TM) Turkmenistan http://www.nic.tm/TM-IDN-Policy.pdf
-     * (.TR) Turkey https://www.nic.tr/index.php
-     * (.UA) Ukraine http://www.iana.org/domains/idn-tables/tables/ua_cyrl_1.2.html
-     * (.VE) Venice http://www.iana.org/domains/idn-tables/tables/ve_es_1.0.html
-     * (.VN) Vietnam http://www.vnnic.vn/english/5-6-300-2-2-04-20071115.htm#1.%20Introduction
-     *
-     * @var array
-     */
-    protected $validIdns = array(
-        'AC'  => array(1 => '/^[\x{002d}0-9a-zà-öø-ÿāăąćĉċčďđēėęěĝġģĥħīįĵķĺļľŀłńņňŋőœŕŗřśŝşšţťŧūŭůűųŵŷźżž]{1,63}$/iu'),
-        'AR'  => array(1 => '/^[\x{002d}0-9a-zà-ãç-êìíñ-õü]{1,63}$/iu'),
-        'AS'  => array(1 => '/^[\x{002d}0-9a-zà-öø-ÿāăąćĉċčďđēĕėęěĝğġģĥħĩīĭįıĵķĸĺļľłńņňŋōŏőœŕŗřśŝşšţťŧũūŭůűųŵŷźż]{1,63}$/iu'),
-        'AT'  => array(1 => '/^[\x{002d}0-9a-zà-öø-ÿœšž]{1,63}$/iu'),
-        'BIZ' => 'Hostname/Biz.php',
-        'BR'  => array(1 => '/^[\x{002d}0-9a-zà-ãçéíó-õúü]{1,63}$/iu'),
-        'BV'  => array(1 => '/^[\x{002d}0-9a-zàáä-éêñ-ôöøüčđńŋšŧž]{1,63}$/iu'),
-        'CAT' => array(1 => '/^[\x{002d}0-9a-z·àç-éíïòóúü]{1,63}$/iu'),
-        'CH'  => array(1 => '/^[\x{002d}0-9a-zà-öø-ÿœ]{1,63}$/iu'),
-        'CL'  => array(1 => '/^[\x{002d}0-9a-záéíñóúü]{1,63}$/iu'),
-        'CN'  => 'Hostname/Cn.php',
-        'COM' => 'Hostname/Com.php',
-        'DE'  => array(1 => '/^[\x{002d}0-9a-zà-öø-ÿăąāćĉčċďđĕěėęēğĝġģĥħĭĩįīıĵķĺľļłńňņŋŏőōœĸŕřŗśŝšşťţŧŭůűũųūŵŷźžż]{1,63}$/iu'),
-        'DK'  => array(1 => '/^[\x{002d}0-9a-zäéöü]{1,63}$/iu'),
-        'EE'  => array(1 => '/^[\x{002d}0-9a-zäõöüšž]{1,63}$/iu'),
-        'ES'  => array(1 => '/^[\x{002d}0-9a-zàáçèéíïñòóúü·]{1,63}$/iu'),
-        'EU'  => array(1 => '/^[\x{002d}0-9a-zà-öø-ÿ]{1,63}$/iu',
-            2 => '/^[\x{002d}0-9a-zāăąćĉċčďđēĕėęěĝğġģĥħĩīĭįıĵķĺļľŀłńņňʼnŋōŏőœŕŗřśŝšťŧũūŭůűųŵŷźżž]{1,63}$/iu',
-            3 => '/^[\x{002d}0-9a-zșț]{1,63}$/iu',
-            4 => '/^[\x{002d}0-9a-zΐάέήίΰαβγδεζηθικλμνξοπρςστυφχψωϊϋόύώ]{1,63}$/iu',
-            5 => '/^[\x{002d}0-9a-zабвгдежзийклмнопрстуфхцчшщъыьэюя]{1,63}$/iu',
-            6 => '/^[\x{002d}0-9a-zἀ-ἇἐ-ἕἠ-ἧἰ-ἷὀ-ὅὐ-ὗὠ-ὧὰ-ὼώᾀ-ᾇᾐ-ᾗᾠ-ᾧᾰ-ᾴᾶᾷῂῃῄῆῇῐ-ῒΐῖῗῠ-ῧῲῳῴῶῷ]{1,63}$/iu'),
-        'FI'  => array(1 => '/^[\x{002d}0-9a-zäåö]{1,63}$/iu'),
-        'GR'  => array(1 => '/^[\x{002d}0-9a-zΆΈΉΊΌΎ-ΡΣ-ώἀ-ἕἘ-Ἕἠ-ὅὈ-Ὅὐ-ὗὙὛὝὟ-ώᾀ-ᾴᾶ-ᾼῂῃῄῆ-ῌῐ-ΐῖ-Ίῠ-Ῥῲῳῴῶ-ῼ]{1,63}$/iu'),
-        'HK'  => 'Hostname/Cn.php',
-        'HU'  => array(1 => '/^[\x{002d}0-9a-záéíóöúüőű]{1,63}$/iu'),
-        'IL'  => array(1 => '/^[\x{002d}0-9\x{05D0}-\x{05EA}]{1,63}$/iu',
-            2 => '/^[\x{002d}0-9a-z]{1,63}$/i'),
-        'INFO'=> array(1 => '/^[\x{002d}0-9a-zäåæéöøü]{1,63}$/iu',
-            2 => '/^[\x{002d}0-9a-záéíóöúüőű]{1,63}$/iu',
-            3 => '/^[\x{002d}0-9a-záæéíðóöúýþ]{1,63}$/iu',
-            4 => '/^[\x{AC00}-\x{D7A3}]{1,17}$/iu',
-            5 => '/^[\x{002d}0-9a-zāčēģīķļņōŗšūž]{1,63}$/iu',
-            6 => '/^[\x{002d}0-9a-ząčėęįšūųž]{1,63}$/iu',
-            7 => '/^[\x{002d}0-9a-zóąćęłńśźż]{1,63}$/iu',
-            8 => '/^[\x{002d}0-9a-záéíñóúü]{1,63}$/iu'),
-        'IO'  => array(1 => '/^[\x{002d}0-9a-zà-öø-ÿăąāćĉčċďđĕěėęēğĝġģĥħĭĩįīıĵķĺľļłńňņŋŏőōœĸŕřŗśŝšşťţŧŭůűũųūŵŷźžż]{1,63}$/iu'),
-        'IS'  => array(1 => '/^[\x{002d}0-9a-záéýúíóþæöð]{1,63}$/iu'),
-        'IT'  => array(1 => '/^[\x{002d}0-9a-zàâäèéêëìîïòôöùûüæœçÿß-]{1,63}$/iu'),
-        'JP'  => 'Hostname/Jp.php',
-        'KR'  => array(1 => '/^[\x{AC00}-\x{D7A3}]{1,17}$/iu'),
-        'LI'  => array(1 => '/^[\x{002d}0-9a-zà-öø-ÿœ]{1,63}$/iu'),
-        'LT'  => array(1 => '/^[\x{002d}0-9ąčęėįšųūž]{1,63}$/iu'),
-        'MD'  => array(1 => '/^[\x{002d}0-9ăâîşţ]{1,63}$/iu'),
-        'MUSEUM' => array(1 => '/^[\x{002d}0-9a-zà-öø-ÿāăąćċčďđēėęěğġģħīįıķĺļľłńņňŋōőœŕŗřśşšţťŧūůűųŵŷźżžǎǐǒǔ\x{01E5}\x{01E7}\x{01E9}\x{01EF}ə\x{0292}ẁẃẅỳ]{1,63}$/iu'),
-        'NET' => 'Hostname/Com.php',
-        'NO'  => array(1 => '/^[\x{002d}0-9a-zàáä-éêñ-ôöøüčđńŋšŧž]{1,63}$/iu'),
-        'NU'  => 'Hostname/Com.php',
-        'ORG' => array(1 => '/^[\x{002d}0-9a-záéíñóúü]{1,63}$/iu',
-            2 => '/^[\x{002d}0-9a-zóąćęłńśźż]{1,63}$/iu',
-            3 => '/^[\x{002d}0-9a-záäåæéëíðóöøúüýþ]{1,63}$/iu',
-            4 => '/^[\x{002d}0-9a-záéíóöúüőű]{1,63}$/iu',
-            5 => '/^[\x{002d}0-9a-ząčėęįšūųž]{1,63}$/iu',
-            6 => '/^[\x{AC00}-\x{D7A3}]{1,17}$/iu',
-            7 => '/^[\x{002d}0-9a-zāčēģīķļņōŗšūž]{1,63}$/iu'),
-        'PE'  => array(1 => '/^[\x{002d}0-9a-zñáéíóúü]{1,63}$/iu'),
-        'PL'  => array(1 => '/^[\x{002d}0-9a-zāčēģīķļņōŗšūž]{1,63}$/iu',
-            2 => '/^[\x{002d}а-ик-ш\x{0450}ѓѕјљњќџ]{1,63}$/iu',
-            3 => '/^[\x{002d}0-9a-zâîăşţ]{1,63}$/iu',
-            4 => '/^[\x{002d}0-9а-яё\x{04C2}]{1,63}$/iu',
-            5 => '/^[\x{002d}0-9a-zàáâèéêìíîòóôùúûċġħż]{1,63}$/iu',
-            6 => '/^[\x{002d}0-9a-zàäåæéêòóôöøü]{1,63}$/iu',
-            7 => '/^[\x{002d}0-9a-zóąćęłńśźż]{1,63}$/iu',
-            8 => '/^[\x{002d}0-9a-zàáâãçéêíòóôõúü]{1,63}$/iu',
-            9 => '/^[\x{002d}0-9a-zâîăşţ]{1,63}$/iu',
-            10=> '/^[\x{002d}0-9a-záäéíóôúýčďĺľňŕšťž]{1,63}$/iu',
-            11=> '/^[\x{002d}0-9a-zçë]{1,63}$/iu',
-            12=> '/^[\x{002d}0-9а-ик-шђјљњћџ]{1,63}$/iu',
-            13=> '/^[\x{002d}0-9a-zćčđšž]{1,63}$/iu',
-            14=> '/^[\x{002d}0-9a-zâçöûüğış]{1,63}$/iu',
-            15=> '/^[\x{002d}0-9a-záéíñóúü]{1,63}$/iu',
-            16=> '/^[\x{002d}0-9a-zäõöüšž]{1,63}$/iu',
-            17=> '/^[\x{002d}0-9a-zĉĝĥĵŝŭ]{1,63}$/iu',
-            18=> '/^[\x{002d}0-9a-zâäéëîô]{1,63}$/iu',
-            19=> '/^[\x{002d}0-9a-zàáâäåæçèéêëìíîïðñòôöøùúûüýćčłńřśš]{1,63}$/iu',
-            20=> '/^[\x{002d}0-9a-zäåæõöøüšž]{1,63}$/iu',
-            21=> '/^[\x{002d}0-9a-zàáçèéìíòóùú]{1,63}$/iu',
-            22=> '/^[\x{002d}0-9a-zàáéíóöúüőű]{1,63}$/iu',
-            23=> '/^[\x{002d}0-9ΐά-ώ]{1,63}$/iu',
-            24=> '/^[\x{002d}0-9a-zàáâåæçèéêëðóôöøüþœ]{1,63}$/iu',
-            25=> '/^[\x{002d}0-9a-záäéíóöúüýčďěňřšťůž]{1,63}$/iu',
-            26=> '/^[\x{002d}0-9a-z·àçèéíïòóúü]{1,63}$/iu',
-            27=> '/^[\x{002d}0-9а-ъьюя\x{0450}\x{045D}]{1,63}$/iu',
-            28=> '/^[\x{002d}0-9а-яёіў]{1,63}$/iu',
-            29=> '/^[\x{002d}0-9a-ząčėęįšūųž]{1,63}$/iu',
-            30=> '/^[\x{002d}0-9a-záäåæéëíðóöøúüýþ]{1,63}$/iu',
-            31=> '/^[\x{002d}0-9a-zàâæçèéêëîïñôùûüÿœ]{1,63}$/iu',
-            32=> '/^[\x{002d}0-9а-щъыьэюяёєіїґ]{1,63}$/iu',
-            33=> '/^[\x{002d}0-9א-ת]{1,63}$/iu'),
-        'PR'  => array(1 => '/^[\x{002d}0-9a-záéíóúñäëïüöâêîôûàèùæçœãõ]{1,63}$/iu'),
-        'PT'  => array(1 => '/^[\x{002d}0-9a-záàâãçéêíóôõú]{1,63}$/iu'),
-        'RU'  => array(1 => '/^[\x{002d}0-9а-яё]{1,63}$/iu'),
-        'SA'  => array(1 => '/^[\x{002d}.0-9\x{0621}-\x{063A}\x{0641}-\x{064A}\x{0660}-\x{0669}]{1,63}$/iu'),
-        'SE'  => array(1 => '/^[\x{002d}0-9a-zäåéöü]{1,63}$/iu'),
-        'SH'  => array(1 => '/^[\x{002d}0-9a-zà-öø-ÿăąāćĉčċďđĕěėęēğĝġģĥħĭĩįīıĵķĺľļłńňņŋŏőōœĸŕřŗśŝšşťţŧŭůűũųūŵŷźžż]{1,63}$/iu'),
-        'SI'  => array(
-            1 => '/^[\x{002d}0-9a-zà-öø-ÿ]{1,63}$/iu',
-            2 => '/^[\x{002d}0-9a-zāăąćĉċčďđēĕėęěĝğġģĥħĩīĭįıĵķĺļľŀłńņňʼnŋōŏőœŕŗřśŝšťŧũūŭůűųŵŷźżž]{1,63}$/iu',
-            3 => '/^[\x{002d}0-9a-zșț]{1,63}$/iu'),
-        'SJ'  => array(1 => '/^[\x{002d}0-9a-zàáä-éêñ-ôöøüčđńŋšŧž]{1,63}$/iu'),
-        'TH'  => array(1 => '/^[\x{002d}0-9a-z\x{0E01}-\x{0E3A}\x{0E40}-\x{0E4D}\x{0E50}-\x{0E59}]{1,63}$/iu'),
-        'TM'  => array(1 => '/^[\x{002d}0-9a-zà-öø-ÿāăąćĉċčďđēėęěĝġģĥħīįĵķĺļľŀłńņňŋőœŕŗřśŝşšţťŧūŭůűųŵŷźżž]{1,63}$/iu'),
-        'TW'  => 'Hostname/Cn.php',
-        'TR'  => array(1 => '/^[\x{002d}0-9a-zğıüşöç]{1,63}$/iu'),
-        'UA'  => array(1 => '/^[\x{002d}0-9a-zабвгдежзийклмнопрстуфхцчшщъыьэюяѐёђѓєѕіїјљњћќѝўџґӂʼ]{1,63}$/iu'),
-        'VE'  => array(1 => '/^[\x{002d}0-9a-záéíóúüñ]{1,63}$/iu'),
-        'VN'  => array(1 => '/^[ÀÁÂÃÈÉÊÌÍÒÓÔÕÙÚÝàáâãèéêìíòóôõùúýĂăĐđĨĩŨũƠơƯư\x{1EA0}-\x{1EF9}]{1,63}$/iu'),
-        'мон' => array(1 => '/^[\x{002d}0-9\x{0430}-\x{044F}]{1,63}$/iu'),
-        'срб' => array(1 => '/^[\x{002d}0-9а-ик-шђјљњћџ]{1,63}$/iu'),
-        'сайт' => array(1 => '/^[\x{002d}0-9а-яёіїѝйўґг]{1,63}$/iu'),
-        'онлайн' => array(1 => '/^[\x{002d}0-9а-яёіїѝйўґг]{1,63}$/iu'),
-        '中国' => 'Hostname/Cn.php',
-        '中國' => 'Hostname/Cn.php',
-        'ලංකා' => array(1 => '/^[\x{0d80}-\x{0dff}]{1,63}$/iu'),
-        '香港' => 'Hostname/Cn.php',
-        '台湾' => 'Hostname/Cn.php',
-        '台灣' => 'Hostname/Cn.php',
-        'امارات'   => array(1 => '/^[\x{0621}-\x{0624}\x{0626}-\x{063A}\x{0641}\x{0642}\x{0644}-\x{0648}\x{067E}\x{0686}\x{0698}\x{06A9}\x{06AF}\x{06CC}\x{06F0}-\x{06F9}]{1,30}$/iu'),
-        'الاردن'    => array(1 => '/^[\x{0621}-\x{0624}\x{0626}-\x{063A}\x{0641}\x{0642}\x{0644}-\x{0648}\x{067E}\x{0686}\x{0698}\x{06A9}\x{06AF}\x{06CC}\x{06F0}-\x{06F9}]{1,30}$/iu'),
-        'السعودية' => array(1 => '/^[\x{0621}-\x{0624}\x{0626}-\x{063A}\x{0641}\x{0642}\x{0644}-\x{0648}\x{067E}\x{0686}\x{0698}\x{06A9}\x{06AF}\x{06CC}\x{06F0}-\x{06F9}]{1,30}$/iu'),
-        'ไทย' => array(1 => '/^[\x{002d}0-9a-z\x{0E01}-\x{0E3A}\x{0E40}-\x{0E4D}\x{0E50}-\x{0E59}]{1,63}$/iu'),
-        'рф' => array(1 => '/^[\x{002d}0-9а-яё]{1,63}$/iu'),
-        'تونس' => array(1 => '/^[\x{0621}-\x{0624}\x{0626}-\x{063A}\x{0641}\x{0642}\x{0644}-\x{0648}\x{067E}\x{0686}\x{0698}\x{06A9}\x{06AF}\x{06CC}\x{06F0}-\x{06F9}]{1,30}$/iu'),
-        'مصر' => array(1 => '/^[\x{0621}-\x{0624}\x{0626}-\x{063A}\x{0641}\x{0642}\x{0644}-\x{0648}\x{067E}\x{0686}\x{0698}\x{06A9}\x{06AF}\x{06CC}\x{06F0}-\x{06F9}]{1,30}$/iu'),
-        'இலங்கை' => array(1 => '/^[\x{0b80}-\x{0bff}]{1,63}$/iu'),
-        'فلسطين' => array(1 => '/^[\x{0621}-\x{0624}\x{0626}-\x{063A}\x{0641}\x{0642}\x{0644}-\x{0648}\x{067E}\x{0686}\x{0698}\x{06A9}\x{06AF}\x{06CC}\x{06F0}-\x{06F9}]{1,30}$/iu'),
-        'شبكة'  => array(1 => '/^[\x{0621}-\x{0624}\x{0626}-\x{063A}\x{0641}\x{0642}\x{0644}-\x{0648}\x{067E}\x{0686}\x{0698}\x{06A9}\x{06AF}\x{06CC}\x{06F0}-\x{06F9}]{1,30}$/iu'),
-    );
-
-    protected $idnLength = array(
-        'BIZ' => array(5 => 17, 11 => 15, 12 => 20),
-        'CN'  => array(1 => 20),
-        'COM' => array(3 => 17, 5 => 20),
-        'HK'  => array(1 => 15),
-        'INFO'=> array(4 => 17),
-        'KR'  => array(1 => 17),
-        'NET' => array(3 => 17, 5 => 20),
-        'ORG' => array(6 => 17),
-        'TW'  => array(1 => 20),
-        'امارات' => array(1 => 30),
-        'الاردن' => array(1 => 30),
-        'السعودية' => array(1 => 30),
-        'تونس' => array(1 => 30),
-        'مصر' => array(1 => 30),
-        'فلسطين' => array(1 => 30),
-        'شبكة' => array(1 => 30),
-        '中国' => array(1 => 20),
-        '中國' => array(1 => 20),
-        '香港' => array(1 => 20),
-        '台湾' => array(1 => 20),
-        '台灣' => array(1 => 20),
-    );
-
-    protected $tld;
-
-    /**
-     * Options for the hostname validator
-     *
-     * @var array
-     */
-    protected $options = array(
-        'allow'       => self::ALLOW_DNS, // Allow these hostnames
-        'useIdnCheck' => true,  // Check IDN domains
-        'useTldCheck' => true,  // Check TLD elements
-        'ipValidator' => null,  // IP validator to use
-    );
-
-    /**
-     * Sets validator options.
-     *
-     * @param int  $allow       OPTIONAL Set what types of hostname to allow (default ALLOW_DNS)
-     * @param bool $useIdnCheck OPTIONAL Set whether IDN domains are validated (default true)
-     * @param bool $useTldCheck Set whether the TLD element of a hostname is validated (default true)
-     * @param Ip   $ipValidator OPTIONAL
-     * @see http://www.iana.org/cctld/specifications-policies-cctlds-01apr02.htm  Technical Specifications for ccTLDs
-     */
-    public function __construct($options = array())
-    {
-        if (!is_array($options)) {
-            $options = func_get_args();
-            $temp['allow'] = array_shift($options);
-            if (!empty($options)) {
-                $temp['useIdnCheck'] = array_shift($options);
-            }
-
-            if (!empty($options)) {
-                $temp['useTldCheck'] = array_shift($options);
-            }
-
-            if (!empty($options)) {
-                $temp['ipValidator'] = array_shift($options);
-            }
-
-            $options = $temp;
-        }
-
-        if (!array_key_exists('ipValidator', $options)) {
-            $options['ipValidator'] = null;
-        }
-
-        parent::__construct($options);
-    }
-
-    /**
-     * Returns the set ip validator
-     *
-     * @return Ip
-     */
-    public function getIpValidator()
-    {
-        return $this->options['ipValidator'];
-    }
-
-    /**
-     *
-     * @param Ip $ipValidator OPTIONAL
-     * @return Hostname;
-     */
-    public function setIpValidator(Ip $ipValidator = null)
-    {
-        if ($ipValidator === null) {
-            $ipValidator = new Ip();
-        }
-
-        $this->options['ipValidator'] = $ipValidator;
-        return $this;
-    }
-
-    /**
-     * Returns the allow option
-     *
-     * @return int
-     */
-    public function getAllow()
-    {
-        return $this->options['allow'];
-    }
-
-    /**
-     * Sets the allow option
-     *
-     * @param  int $allow
-     * @return Hostname Provides a fluent interface
-     */
-    public function setAllow($allow)
-    {
-        $this->options['allow'] = $allow;
-        return $this;
-    }
-
-    /**
-     * Returns the set idn option
-     *
-     * @return bool
-     */
-    public function getIdnCheck()
-    {
-        return $this->options['useIdnCheck'];
-    }
-
-    /**
-     * Set whether IDN domains are validated
-     *
-     * This only applies when DNS hostnames are validated
-     *
-     * @param  bool $useIdnCheck Set to true to validate IDN domains
-     * @return Hostname
-     */
-    public function useIdnCheck($useIdnCheck)
-    {
-        $this->options['useIdnCheck'] = (bool) $useIdnCheck;
-        return $this;
-    }
-
-    /**
-     * Returns the set tld option
-     *
-     * @return bool
-     */
-    public function getTldCheck()
-    {
-        return $this->options['useTldCheck'];
-    }
-
-    /**
-     * Set whether the TLD element of a hostname is validated
-     *
-     * This only applies when DNS hostnames are validated
-     *
-     * @param  bool $useTldCheck Set to true to validate TLD elements
-     * @return Hostname
-     */
-    public function useTldCheck($useTldCheck)
-    {
-        $this->options['useTldCheck'] = (bool) $useTldCheck;
-        return $this;
-    }
-
-    /**
-     * Defined by Interface
-     *
-     * Returns true if and only if the $value is a valid hostname with respect to the current allow option
-     *
-     * @param  string $value
-     * @return bool
-     */
-    public function isValid($value)
-    {
-        if (!is_string($value)) {
-            $this->error(self::INVALID);
-            return false;
-        }
-
-        $this->setValue($value);
-        // Check input against IP address schema
-        if (preg_match('/^[0-9a-f:.]*$/i', $value)
-            && $this->getIpValidator()->setTranslator($this->getTranslator())->isValid($value)
-        ) {
-            if (!($this->getAllow() & self::ALLOW_IP)) {
-                $this->error(self::IP_ADDRESS_NOT_ALLOWED);
-                return false;
-            }
-
-            return true;
-        }
-
-        // Local hostnames are allowed to be partial (ending '.')
-        if ($this->getAllow() & self::ALLOW_LOCAL) {
-            if (substr($value, -1) === '.') {
-                $value = substr($value, 0, -1);
-                if (substr($value, -1) === '.') {
-                    // Empty hostnames (ending '..') are not allowed
-                    $this->error(self::INVALID_LOCAL_NAME);
-                    return false;
-                }
-            }
-        }
-
-        $domainParts = explode('.', $value);
-
-        // Prevent partial IP V4 addresses (ending '.')
-        if (count($domainParts) == 4 && preg_match('/^[0-9.a-e:.]*$/i', $value)
-            && $this->getIpValidator()->setTranslator($this->getTranslator())->isValid($value)
-        ) {
-            $this->error(self::INVALID_LOCAL_NAME);
-        }
-
-        $utf8StrWrapper = StringUtils::getWrapper('UTF-8');
-
-        // Check input against DNS hostname schema
-        if (count($domainParts) > 1
-            && $utf8StrWrapper->strlen($value) >= 4
-            && $utf8StrWrapper->strlen($value) <= 254
-        ) {
-            $status = false;
-
-            do {
-                // First check TLD
-                $matches = array();
-                if (preg_match('/([^.]{2,63})$/iu', end($domainParts), $matches)
-                    || (array_key_exists(end($domainParts), $this->validIdns))
-                ) {
-                    reset($domainParts);
-
-                    // Hostname characters are: *(label dot)(label dot label); max 254 chars
-                    // label: id-prefix [*ldh{61} id-prefix]; max 63 chars
-                    // id-prefix: alpha / digit
-                    // ldh: alpha / digit / dash
-
-                    // Match TLD against known list
-                    $this->tld = strtoupper($matches[1]);
-                    if ($this->getTldCheck()) {
-                        if (!in_array(strtolower($this->tld), $this->validTlds)
-                            && !in_array($this->tld, $this->validTlds)) {
-                            $this->error(self::UNKNOWN_TLD);
-                            $status = false;
-                            break;
-                        }
-                        // We have already validated that the TLD is fine. We don't want it to go through the below
-                        // checks as new UTF-8 TLDs will incorrectly fail if there is no IDN regex for it.
-                        array_pop($domainParts);
-                    }
-
-                    /**
-                     * Match against IDN hostnames
-                     * Note: Keep label regex short to avoid issues with long patterns when matching IDN hostnames
-                     *
-                     * @see Hostname\Interface
-                     */
-                    $regexChars = array(0 => '/^[a-z0-9\x2d]{1,63}$/i');
-                    if ($this->getIdnCheck() && isset($this->validIdns[$this->tld])) {
-                        if (is_string($this->validIdns[$this->tld])) {
-                            $regexChars += include __DIR__ . '/' . $this->validIdns[$this->tld];
-                        } else {
-                            $regexChars += $this->validIdns[$this->tld];
-                        }
-                    }
-
-                    // Check each hostname part
-                    $check = 0;
-                    foreach ($domainParts as $domainPart) {
-                        // Decode Punycode domain names to IDN
-                        if (strpos($domainPart, 'xn--') === 0) {
-                            $domainPart = $this->decodePunycode(substr($domainPart, 4));
-                            if ($domainPart === false) {
-                                return false;
-                            }
-                        }
-
-                        // Check dash (-) does not start, end or appear in 3rd and 4th positions
-                        if ($utf8StrWrapper->strpos($domainPart, '-') === 0
-                            || ($utf8StrWrapper->strlen($domainPart) > 2
-                                && $utf8StrWrapper->strpos($domainPart, '-', 2) == 2
-                                && $utf8StrWrapper->strpos($domainPart, '-', 3) == 3
-                            )
-                            || ($utf8StrWrapper->strpos($domainPart, '-') === ($utf8StrWrapper->strlen($domainPart) - 1))
-                        ) {
-                            $this->error(self::INVALID_DASH);
-                            $status = false;
-                            break 2;
-                        }
-
-                        // Check each domain part
-                        $checked = false;
-                        foreach ($regexChars as $regexKey => $regexChar) {
-                            $status = preg_match($regexChar, $domainPart);
-                            if ($status > 0) {
-                                $length = 63;
-                                if (array_key_exists($this->tld, $this->idnLength)
-                                    && array_key_exists($regexKey, $this->idnLength[$this->tld])
-                                ) {
-                                    $length = $this->idnLength[$this->tld];
-                                }
-
-                                if ($utf8StrWrapper->strlen($domainPart) > $length) {
-                                    $this->error(self::INVALID_HOSTNAME);
-                                    $status = false;
-                                } else {
-                                    $checked = true;
-                                    break;
-                                }
-                            }
-                        }
-
-                        if ($checked) {
-                            ++$check;
-                        }
-                    }
-
-                    // If one of the labels doesn't match, the hostname is invalid
-                    if ($check !== count($domainParts)) {
-                        $this->error(self::INVALID_HOSTNAME_SCHEMA);
-                        $status = false;
-                    }
-                } else {
-                    // Hostname not long enough
-                    $this->error(self::UNDECIPHERABLE_TLD);
-                    $status = false;
-                }
-            } while (false);
-
-            // If the input passes as an Internet domain name, and domain names are allowed, then the hostname
-            // passes validation
-            if ($status && ($this->getAllow() & self::ALLOW_DNS)) {
-                return true;
-            }
-        } elseif ($this->getAllow() & self::ALLOW_DNS) {
-            $this->error(self::INVALID_HOSTNAME);
-        }
-
-        // Check for URI Syntax (RFC3986)
-        if ($this->getAllow() & self::ALLOW_URI) {
-            if (preg_match("/^([a-zA-Z0-9-._~!$&\'()*+,;=]|%[[:xdigit:]]{2}){1,254}$/i", $value)) {
-                return true;
-            }
-
-            $this->error(self::INVALID_URI);
-        }
-
-        // Check input against local network name schema; last chance to pass validation
-        $regexLocal = '/^(([a-zA-Z0-9\x2d]{1,63}\x2e)*[a-zA-Z0-9\x2d]{1,63}[\x2e]{0,1}){1,254}$/';
-        $status = preg_match($regexLocal, $value);
-
-        // If the input passes as a local network name, and local network names are allowed, then the
-        // hostname passes validation
-        $allowLocal = $this->getAllow() & self::ALLOW_LOCAL;
-        if ($status && $allowLocal) {
-            return true;
-        }
-
-        // If the input does not pass as a local network name, add a message
-        if (!$status) {
-            $this->error(self::INVALID_LOCAL_NAME);
-        }
-
-        // If local network names are not allowed, add a message
-        if ($status && !$allowLocal) {
-            $this->error(self::LOCAL_NAME_NOT_ALLOWED);
-        }
-
-        return false;
-    }
-
-    /**
-     * Decodes a punycode encoded string to it's original utf8 string
-     * Returns false in case of a decoding failure.
-     *
-     * @param  string $encoded Punycode encoded string to decode
-     * @return string|false
-     */
-    protected function decodePunycode($encoded)
-    {
-        if (!preg_match('/^[a-z0-9-]+$/i', $encoded)) {
-            // no punycode encoded string
-            $this->error(self::CANNOT_DECODE_PUNYCODE);
-            return false;
-        }
-
-        $decoded = array();
-        $separator = strrpos($encoded, '-');
-        if ($separator > 0) {
-            for ($x = 0; $x < $separator; ++$x) {
-                // prepare decoding matrix
-                $decoded[] = ord($encoded[$x]);
-            }
-        }
-
-        $lengthd = count($decoded);
-        $lengthe = strlen($encoded);
-
-        // decoding
-        $init  = true;
-        $base  = 72;
-        $index = 0;
-        $char  = 0x80;
-
-        for ($indexe = ($separator) ? ($separator + 1) : 0; $indexe < $lengthe; ++$lengthd) {
-            for ($oldIndex = $index, $pos = 1, $key = 36; 1; $key += 36) {
-                $hex   = ord($encoded[$indexe++]);
-                $digit = ($hex - 48 < 10) ? $hex - 22
-                       : (($hex - 65 < 26) ? $hex - 65
-                       : (($hex - 97 < 26) ? $hex - 97
-                       : 36));
-
-                $index += $digit * $pos;
-                $tag    = ($key <= $base) ? 1 : (($key >= $base + 26) ? 26 : ($key - $base));
-                if ($digit < $tag) {
-                    break;
-                }
-
-                $pos = (int) ($pos * (36 - $tag));
-            }
-
-            $delta   = intval($init ? (($index - $oldIndex) / 700) : (($index - $oldIndex) / 2));
-            $delta  += intval($delta / ($lengthd + 1));
-            for ($key = 0; $delta > 910 / 2; $key += 36) {
-                $delta = intval($delta / 35);
-            }
-
-            $base   = intval($key + 36 * $delta / ($delta + 38));
-            $init   = false;
-            $char  += (int) ($index / ($lengthd + 1));
-            $index %= ($lengthd + 1);
-            if ($lengthd > 0) {
-                for ($i = $lengthd; $i > $index; $i--) {
-                    $decoded[$i] = $decoded[($i - 1)];
-                }
-            }
-
-            $decoded[$index++] = $char;
-        }
-
-        // convert decoded ucs4 to utf8 string
-        foreach ($decoded as $key => $value) {
-            if ($value < 128) {
-                $decoded[$key] = chr($value);
-            } elseif ($value < (1 << 11)) {
-                $decoded[$key]  = chr(192 + ($value >> 6));
-                $decoded[$key] .= chr(128 + ($value & 63));
-            } elseif ($value < (1 << 16)) {
-                $decoded[$key]  = chr(224 + ($value >> 12));
-                $decoded[$key] .= chr(128 + (($value >> 6) & 63));
-                $decoded[$key] .= chr(128 + ($value & 63));
-            } elseif ($value < (1 << 21)) {
-                $decoded[$key]  = chr(240 + ($value >> 18));
-                $decoded[$key] .= chr(128 + (($value >> 12) & 63));
-                $decoded[$key] .= chr(128 + (($value >> 6) & 63));
-                $decoded[$key] .= chr(128 + ($value & 63));
-            } else {
-                $this->error(self::CANNOT_DECODE_PUNYCODE);
-                return false;
-            }
-        }
-
-        return implode($decoded);
-    }
-}
diff --git a/civicrm/vendor/zendframework/zend-validator/src/Hostname/Biz.php b/civicrm/vendor/zendframework/zend-validator/src/Hostname/Biz.php
deleted file mode 100644
index fd755c7480dc5e9a996772478f03a0108c67ef43..0000000000000000000000000000000000000000
--- a/civicrm/vendor/zendframework/zend-validator/src/Hostname/Biz.php
+++ /dev/null
@@ -1,2903 +0,0 @@
-<?php
-/**
- * Zend Framework (http://framework.zend.com/)
- *
- * @link      http://github.com/zendframework/zf2 for the canonical source repository
- * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
- * @license   http://framework.zend.com/license/new-bsd New BSD License
- */
-
-namespace Zend\Validator\Hostname;
-
-/**
- * Resource file for biz idn validation
- */
-return array(
-    1  => '/^[\x{002d}0-9a-zäåæéöøü]{1,63}$/iu',
-    2  => '/^[\x{002d}0-9a-záéíñóúü]{1,63}$/iu',
-    3  => '/^[\x{002d}0-9a-záéíóöúüőű]{1,63}$/iu',
-    4  => '/^[\x{002d}0-9a-záæéíðóöúýþ]{1,63}$/iu',
-    5  => '/^[\x{AC00}-\x{D7A3}]{1,17}$/iu',
-    6  => '/^[\x{002d}0-9a-ząčėęįšūųž]{1,63}$/iu',
-    7  => '/^[\x{002d}0-9a-zāčēģīķļņōŗšūž]{1,63}$/iu',
-    8  => '/^[\x{002d}0-9a-zàáä-éêñ-ôöøüčđńŋšŧž]{1,63}$/iu',
-    9  => '/^[\x{002d}0-9a-zóąćęłńśźż]{1,63}$/iu',
-    10 => '/^[\x{002d}0-9a-záàâãçéêíóôõú]{1,63}$/iu',
-    11 => '/^[\x{002d}0-9a-z\x{3005}-\x{3007}\x{3041}-\x{3093}\x{309D}\x{309E}\x{30A1}-\x{30F6}\x{30FC}' .
-          '\x{30FD}\x{30FE}\x{4E00}\x{4E01}\x{4E03}\x{4E07}\x{4E08}\x{4E09}\x{4E0A}' .
-          '\x{4E0B}\x{4E0D}\x{4E0E}\x{4E10}\x{4E11}\x{4E14}\x{4E15}\x{4E16}\x{4E17}' .
-          '\x{4E18}\x{4E19}\x{4E1E}\x{4E21}\x{4E26}\x{4E2A}\x{4E2D}\x{4E31}\x{4E32}' .
-          '\x{4E36}\x{4E38}\x{4E39}\x{4E3B}\x{4E3C}\x{4E3F}\x{4E42}\x{4E43}\x{4E45}' .
-          '\x{4E4B}\x{4E4D}\x{4E4E}\x{4E4F}\x{4E55}\x{4E56}\x{4E57}\x{4E58}\x{4E59}' .
-          '\x{4E5D}\x{4E5E}\x{4E5F}\x{4E62}\x{4E71}\x{4E73}\x{4E7E}\x{4E80}\x{4E82}' .
-          '\x{4E85}\x{4E86}\x{4E88}\x{4E89}\x{4E8A}\x{4E8B}\x{4E8C}\x{4E8E}\x{4E91}' .
-          '\x{4E92}\x{4E94}\x{4E95}\x{4E98}\x{4E99}\x{4E9B}\x{4E9C}\x{4E9E}\x{4E9F}' .
-          '\x{4EA0}\x{4EA1}\x{4EA2}\x{4EA4}\x{4EA5}\x{4EA6}\x{4EA8}\x{4EAB}\x{4EAC}' .
-          '\x{4EAD}\x{4EAE}\x{4EB0}\x{4EB3}\x{4EB6}\x{4EBA}\x{4EC0}\x{4EC1}\x{4EC2}' .
-          '\x{4EC4}\x{4EC6}\x{4EC7}\x{4ECA}\x{4ECB}\x{4ECD}\x{4ECE}\x{4ECF}\x{4ED4}' .
-          '\x{4ED5}\x{4ED6}\x{4ED7}\x{4ED8}\x{4ED9}\x{4EDD}\x{4EDE}\x{4EDF}\x{4EE3}' .
-          '\x{4EE4}\x{4EE5}\x{4EED}\x{4EEE}\x{4EF0}\x{4EF2}\x{4EF6}\x{4EF7}\x{4EFB}' .
-          '\x{4F01}\x{4F09}\x{4F0A}\x{4F0D}\x{4F0E}\x{4F0F}\x{4F10}\x{4F11}\x{4F1A}' .
-          '\x{4F1C}\x{4F1D}\x{4F2F}\x{4F30}\x{4F34}\x{4F36}\x{4F38}\x{4F3A}\x{4F3C}' .
-          '\x{4F3D}\x{4F43}\x{4F46}\x{4F47}\x{4F4D}\x{4F4E}\x{4F4F}\x{4F50}\x{4F51}' .
-          '\x{4F53}\x{4F55}\x{4F57}\x{4F59}\x{4F5A}\x{4F5B}\x{4F5C}\x{4F5D}\x{4F5E}' .
-          '\x{4F69}\x{4F6F}\x{4F70}\x{4F73}\x{4F75}\x{4F76}\x{4F7B}\x{4F7C}\x{4F7F}' .
-          '\x{4F83}\x{4F86}\x{4F88}\x{4F8B}\x{4F8D}\x{4F8F}\x{4F91}\x{4F96}\x{4F98}' .
-          '\x{4F9B}\x{4F9D}\x{4FA0}\x{4FA1}\x{4FAB}\x{4FAD}\x{4FAE}\x{4FAF}\x{4FB5}' .
-          '\x{4FB6}\x{4FBF}\x{4FC2}\x{4FC3}\x{4FC4}\x{4FCA}\x{4FCE}\x{4FD0}\x{4FD1}' .
-          '\x{4FD4}\x{4FD7}\x{4FD8}\x{4FDA}\x{4FDB}\x{4FDD}\x{4FDF}\x{4FE1}\x{4FE3}' .
-          '\x{4FE4}\x{4FE5}\x{4FEE}\x{4FEF}\x{4FF3}\x{4FF5}\x{4FF6}\x{4FF8}\x{4FFA}' .
-          '\x{4FFE}\x{5005}\x{5006}\x{5009}\x{500B}\x{500D}\x{500F}\x{5011}\x{5012}' .
-          '\x{5014}\x{5016}\x{5019}\x{501A}\x{501F}\x{5021}\x{5023}\x{5024}\x{5025}' .
-          '\x{5026}\x{5028}\x{5029}\x{502A}\x{502B}\x{502C}\x{502D}\x{5036}\x{5039}' .
-          '\x{5043}\x{5047}\x{5048}\x{5049}\x{504F}\x{5050}\x{5055}\x{5056}\x{505A}' .
-          '\x{505C}\x{5065}\x{506C}\x{5072}\x{5074}\x{5075}\x{5076}\x{5078}\x{507D}' .
-          '\x{5080}\x{5085}\x{508D}\x{5091}\x{5098}\x{5099}\x{509A}\x{50AC}\x{50AD}' .
-          '\x{50B2}\x{50B3}\x{50B4}\x{50B5}\x{50B7}\x{50BE}\x{50C2}\x{50C5}\x{50C9}' .
-          '\x{50CA}\x{50CD}\x{50CF}\x{50D1}\x{50D5}\x{50D6}\x{50DA}\x{50DE}\x{50E3}' .
-          '\x{50E5}\x{50E7}\x{50ED}\x{50EE}\x{50F5}\x{50F9}\x{50FB}\x{5100}\x{5101}' .
-          '\x{5102}\x{5104}\x{5109}\x{5112}\x{5114}\x{5115}\x{5116}\x{5118}\x{511A}' .
-          '\x{511F}\x{5121}\x{512A}\x{5132}\x{5137}\x{513A}\x{513B}\x{513C}\x{513F}' .
-          '\x{5140}\x{5141}\x{5143}\x{5144}\x{5145}\x{5146}\x{5147}\x{5148}\x{5149}' .
-          '\x{514B}\x{514C}\x{514D}\x{514E}\x{5150}\x{5152}\x{5154}\x{515A}\x{515C}' .
-          '\x{5162}\x{5165}\x{5168}\x{5169}\x{516A}\x{516B}\x{516C}\x{516D}\x{516E}' .
-          '\x{5171}\x{5175}\x{5176}\x{5177}\x{5178}\x{517C}\x{5180}\x{5182}\x{5185}' .
-          '\x{5186}\x{5189}\x{518A}\x{518C}\x{518D}\x{518F}\x{5190}\x{5191}\x{5192}' .
-          '\x{5193}\x{5195}\x{5196}\x{5197}\x{5199}\x{51A0}\x{51A2}\x{51A4}\x{51A5}' .
-          '\x{51A6}\x{51A8}\x{51A9}\x{51AA}\x{51AB}\x{51AC}\x{51B0}\x{51B1}\x{51B2}' .
-          '\x{51B3}\x{51B4}\x{51B5}\x{51B6}\x{51B7}\x{51BD}\x{51C4}\x{51C5}\x{51C6}' .
-          '\x{51C9}\x{51CB}\x{51CC}\x{51CD}\x{51D6}\x{51DB}\x{51DC}\x{51DD}\x{51E0}' .
-          '\x{51E1}\x{51E6}\x{51E7}\x{51E9}\x{51EA}\x{51ED}\x{51F0}\x{51F1}\x{51F5}' .
-          '\x{51F6}\x{51F8}\x{51F9}\x{51FA}\x{51FD}\x{51FE}\x{5200}\x{5203}\x{5204}' .
-          '\x{5206}\x{5207}\x{5208}\x{520A}\x{520B}\x{520E}\x{5211}\x{5214}\x{5217}' .
-          '\x{521D}\x{5224}\x{5225}\x{5227}\x{5229}\x{522A}\x{522E}\x{5230}\x{5233}' .
-          '\x{5236}\x{5237}\x{5238}\x{5239}\x{523A}\x{523B}\x{5243}\x{5244}\x{5247}' .
-          '\x{524A}\x{524B}\x{524C}\x{524D}\x{524F}\x{5254}\x{5256}\x{525B}\x{525E}' .
-          '\x{5263}\x{5264}\x{5265}\x{5269}\x{526A}\x{526F}\x{5270}\x{5271}\x{5272}' .
-          '\x{5273}\x{5274}\x{5275}\x{527D}\x{527F}\x{5283}\x{5287}\x{5288}\x{5289}' .
-          '\x{528D}\x{5291}\x{5292}\x{5294}\x{529B}\x{529F}\x{52A0}\x{52A3}\x{52A9}' .
-          '\x{52AA}\x{52AB}\x{52AC}\x{52AD}\x{52B1}\x{52B4}\x{52B5}\x{52B9}\x{52BC}' .
-          '\x{52BE}\x{52C1}\x{52C3}\x{52C5}\x{52C7}\x{52C9}\x{52CD}\x{52D2}\x{52D5}' .
-          '\x{52D7}\x{52D8}\x{52D9}\x{52DD}\x{52DE}\x{52DF}\x{52E0}\x{52E2}\x{52E3}' .
-          '\x{52E4}\x{52E6}\x{52E7}\x{52F2}\x{52F3}\x{52F5}\x{52F8}\x{52F9}\x{52FA}' .
-          '\x{52FE}\x{52FF}\x{5301}\x{5302}\x{5305}\x{5306}\x{5308}\x{530D}\x{530F}' .
-          '\x{5310}\x{5315}\x{5316}\x{5317}\x{5319}\x{531A}\x{531D}\x{5320}\x{5321}' .
-          '\x{5323}\x{532A}\x{532F}\x{5331}\x{5333}\x{5338}\x{5339}\x{533A}\x{533B}' .
-          '\x{533F}\x{5340}\x{5341}\x{5343}\x{5345}\x{5346}\x{5347}\x{5348}\x{5349}' .
-          '\x{534A}\x{534D}\x{5351}\x{5352}\x{5353}\x{5354}\x{5357}\x{5358}\x{535A}' .
-          '\x{535C}\x{535E}\x{5360}\x{5366}\x{5369}\x{536E}\x{536F}\x{5370}\x{5371}' .
-          '\x{5373}\x{5374}\x{5375}\x{5377}\x{5378}\x{537B}\x{537F}\x{5382}\x{5384}' .
-          '\x{5396}\x{5398}\x{539A}\x{539F}\x{53A0}\x{53A5}\x{53A6}\x{53A8}\x{53A9}' .
-          '\x{53AD}\x{53AE}\x{53B0}\x{53B3}\x{53B6}\x{53BB}\x{53C2}\x{53C3}\x{53C8}' .
-          '\x{53C9}\x{53CA}\x{53CB}\x{53CC}\x{53CD}\x{53CE}\x{53D4}\x{53D6}\x{53D7}' .
-          '\x{53D9}\x{53DB}\x{53DF}\x{53E1}\x{53E2}\x{53E3}\x{53E4}\x{53E5}\x{53E8}' .
-          '\x{53E9}\x{53EA}\x{53EB}\x{53EC}\x{53ED}\x{53EE}\x{53EF}\x{53F0}\x{53F1}' .
-          '\x{53F2}\x{53F3}\x{53F6}\x{53F7}\x{53F8}\x{53FA}\x{5401}\x{5403}\x{5404}' .
-          '\x{5408}\x{5409}\x{540A}\x{540B}\x{540C}\x{540D}\x{540E}\x{540F}\x{5410}' .
-          '\x{5411}\x{541B}\x{541D}\x{541F}\x{5420}\x{5426}\x{5429}\x{542B}\x{542C}' .
-          '\x{542D}\x{542E}\x{5436}\x{5438}\x{5439}\x{543B}\x{543C}\x{543D}\x{543E}' .
-          '\x{5440}\x{5442}\x{5446}\x{5448}\x{5449}\x{544A}\x{544E}\x{5451}\x{545F}' .
-          '\x{5468}\x{546A}\x{5470}\x{5471}\x{5473}\x{5475}\x{5476}\x{5477}\x{547B}' .
-          '\x{547C}\x{547D}\x{5480}\x{5484}\x{5486}\x{548B}\x{548C}\x{548E}\x{548F}' .
-          '\x{5490}\x{5492}\x{54A2}\x{54A4}\x{54A5}\x{54A8}\x{54AB}\x{54AC}\x{54AF}' .
-          '\x{54B2}\x{54B3}\x{54B8}\x{54BC}\x{54BD}\x{54BE}\x{54C0}\x{54C1}\x{54C2}' .
-          '\x{54C4}\x{54C7}\x{54C8}\x{54C9}\x{54D8}\x{54E1}\x{54E2}\x{54E5}\x{54E6}' .
-          '\x{54E8}\x{54E9}\x{54ED}\x{54EE}\x{54F2}\x{54FA}\x{54FD}\x{5504}\x{5506}' .
-          '\x{5507}\x{550F}\x{5510}\x{5514}\x{5516}\x{552E}\x{552F}\x{5531}\x{5533}' .
-          '\x{5538}\x{5539}\x{553E}\x{5540}\x{5544}\x{5545}\x{5546}\x{554C}\x{554F}' .
-          '\x{5553}\x{5556}\x{5557}\x{555C}\x{555D}\x{5563}\x{557B}\x{557C}\x{557E}' .
-          '\x{5580}\x{5583}\x{5584}\x{5587}\x{5589}\x{558A}\x{558B}\x{5598}\x{5599}' .
-          '\x{559A}\x{559C}\x{559D}\x{559E}\x{559F}\x{55A7}\x{55A8}\x{55A9}\x{55AA}' .
-          '\x{55AB}\x{55AC}\x{55AE}\x{55B0}\x{55B6}\x{55C4}\x{55C5}\x{55C7}\x{55D4}' .
-          '\x{55DA}\x{55DC}\x{55DF}\x{55E3}\x{55E4}\x{55F7}\x{55F9}\x{55FD}\x{55FE}' .
-          '\x{5606}\x{5609}\x{5614}\x{5616}\x{5617}\x{5618}\x{561B}\x{5629}\x{562F}' .
-          '\x{5631}\x{5632}\x{5634}\x{5636}\x{5638}\x{5642}\x{564C}\x{564E}\x{5650}' .
-          '\x{565B}\x{5664}\x{5668}\x{566A}\x{566B}\x{566C}\x{5674}\x{5678}\x{567A}' .
-          '\x{5680}\x{5686}\x{5687}\x{568A}\x{568F}\x{5694}\x{56A0}\x{56A2}\x{56A5}' .
-          '\x{56AE}\x{56B4}\x{56B6}\x{56BC}\x{56C0}\x{56C1}\x{56C2}\x{56C3}\x{56C8}' .
-          '\x{56CE}\x{56D1}\x{56D3}\x{56D7}\x{56D8}\x{56DA}\x{56DB}\x{56DE}\x{56E0}' .
-          '\x{56E3}\x{56EE}\x{56F0}\x{56F2}\x{56F3}\x{56F9}\x{56FA}\x{56FD}\x{56FF}' .
-          '\x{5700}\x{5703}\x{5704}\x{5708}\x{5709}\x{570B}\x{570D}\x{570F}\x{5712}' .
-          '\x{5713}\x{5716}\x{5718}\x{571C}\x{571F}\x{5726}\x{5727}\x{5728}\x{572D}' .
-          '\x{5730}\x{5737}\x{5738}\x{573B}\x{5740}\x{5742}\x{5747}\x{574A}\x{574E}' .
-          '\x{574F}\x{5750}\x{5751}\x{5761}\x{5764}\x{5766}\x{5769}\x{576A}\x{577F}' .
-          '\x{5782}\x{5788}\x{5789}\x{578B}\x{5793}\x{57A0}\x{57A2}\x{57A3}\x{57A4}' .
-          '\x{57AA}\x{57B0}\x{57B3}\x{57C0}\x{57C3}\x{57C6}\x{57CB}\x{57CE}\x{57D2}' .
-          '\x{57D3}\x{57D4}\x{57D6}\x{57DC}\x{57DF}\x{57E0}\x{57E3}\x{57F4}\x{57F7}' .
-          '\x{57F9}\x{57FA}\x{57FC}\x{5800}\x{5802}\x{5805}\x{5806}\x{580A}\x{580B}' .
-          '\x{5815}\x{5819}\x{581D}\x{5821}\x{5824}\x{582A}\x{582F}\x{5830}\x{5831}' .
-          '\x{5834}\x{5835}\x{583A}\x{583D}\x{5840}\x{5841}\x{584A}\x{584B}\x{5851}' .
-          '\x{5852}\x{5854}\x{5857}\x{5858}\x{5859}\x{585A}\x{585E}\x{5862}\x{5869}' .
-          '\x{586B}\x{5870}\x{5872}\x{5875}\x{5879}\x{587E}\x{5883}\x{5885}\x{5893}' .
-          '\x{5897}\x{589C}\x{589F}\x{58A8}\x{58AB}\x{58AE}\x{58B3}\x{58B8}\x{58B9}' .
-          '\x{58BA}\x{58BB}\x{58BE}\x{58C1}\x{58C5}\x{58C7}\x{58CA}\x{58CC}\x{58D1}' .
-          '\x{58D3}\x{58D5}\x{58D7}\x{58D8}\x{58D9}\x{58DC}\x{58DE}\x{58DF}\x{58E4}' .
-          '\x{58E5}\x{58EB}\x{58EC}\x{58EE}\x{58EF}\x{58F0}\x{58F1}\x{58F2}\x{58F7}' .
-          '\x{58F9}\x{58FA}\x{58FB}\x{58FC}\x{58FD}\x{5902}\x{5909}\x{590A}\x{590F}' .
-          '\x{5910}\x{5915}\x{5916}\x{5918}\x{5919}\x{591A}\x{591B}\x{591C}\x{5922}' .
-          '\x{5925}\x{5927}\x{5929}\x{592A}\x{592B}\x{592C}\x{592D}\x{592E}\x{5931}' .
-          '\x{5932}\x{5937}\x{5938}\x{593E}\x{5944}\x{5947}\x{5948}\x{5949}\x{594E}' .
-          '\x{594F}\x{5950}\x{5951}\x{5954}\x{5955}\x{5957}\x{5958}\x{595A}\x{5960}' .
-          '\x{5962}\x{5965}\x{5967}\x{5968}\x{5969}\x{596A}\x{596C}\x{596E}\x{5973}' .
-          '\x{5974}\x{5978}\x{597D}\x{5981}\x{5982}\x{5983}\x{5984}\x{598A}\x{598D}' .
-          '\x{5993}\x{5996}\x{5999}\x{599B}\x{599D}\x{59A3}\x{59A5}\x{59A8}\x{59AC}' .
-          '\x{59B2}\x{59B9}\x{59BB}\x{59BE}\x{59C6}\x{59C9}\x{59CB}\x{59D0}\x{59D1}' .
-          '\x{59D3}\x{59D4}\x{59D9}\x{59DA}\x{59DC}\x{59E5}\x{59E6}\x{59E8}\x{59EA}' .
-          '\x{59EB}\x{59F6}\x{59FB}\x{59FF}\x{5A01}\x{5A03}\x{5A09}\x{5A11}\x{5A18}' .
-          '\x{5A1A}\x{5A1C}\x{5A1F}\x{5A20}\x{5A25}\x{5A29}\x{5A2F}\x{5A35}\x{5A36}' .
-          '\x{5A3C}\x{5A40}\x{5A41}\x{5A46}\x{5A49}\x{5A5A}\x{5A62}\x{5A66}\x{5A6A}' .
-          '\x{5A6C}\x{5A7F}\x{5A92}\x{5A9A}\x{5A9B}\x{5ABC}\x{5ABD}\x{5ABE}\x{5AC1}' .
-          '\x{5AC2}\x{5AC9}\x{5ACB}\x{5ACC}\x{5AD0}\x{5AD6}\x{5AD7}\x{5AE1}\x{5AE3}' .
-          '\x{5AE6}\x{5AE9}\x{5AFA}\x{5AFB}\x{5B09}\x{5B0B}\x{5B0C}\x{5B16}\x{5B22}' .
-          '\x{5B2A}\x{5B2C}\x{5B30}\x{5B32}\x{5B36}\x{5B3E}\x{5B40}\x{5B43}\x{5B45}' .
-          '\x{5B50}\x{5B51}\x{5B54}\x{5B55}\x{5B57}\x{5B58}\x{5B5A}\x{5B5B}\x{5B5C}' .
-          '\x{5B5D}\x{5B5F}\x{5B63}\x{5B64}\x{5B65}\x{5B66}\x{5B69}\x{5B6B}\x{5B70}' .
-          '\x{5B71}\x{5B73}\x{5B75}\x{5B78}\x{5B7A}\x{5B80}\x{5B83}\x{5B85}\x{5B87}' .
-          '\x{5B88}\x{5B89}\x{5B8B}\x{5B8C}\x{5B8D}\x{5B8F}\x{5B95}\x{5B97}\x{5B98}' .
-          '\x{5B99}\x{5B9A}\x{5B9B}\x{5B9C}\x{5B9D}\x{5B9F}\x{5BA2}\x{5BA3}\x{5BA4}' .
-          '\x{5BA5}\x{5BA6}\x{5BAE}\x{5BB0}\x{5BB3}\x{5BB4}\x{5BB5}\x{5BB6}\x{5BB8}' .
-          '\x{5BB9}\x{5BBF}\x{5BC2}\x{5BC3}\x{5BC4}\x{5BC5}\x{5BC6}\x{5BC7}\x{5BC9}' .
-          '\x{5BCC}\x{5BD0}\x{5BD2}\x{5BD3}\x{5BD4}\x{5BDB}\x{5BDD}\x{5BDE}\x{5BDF}' .
-          '\x{5BE1}\x{5BE2}\x{5BE4}\x{5BE5}\x{5BE6}\x{5BE7}\x{5BE8}\x{5BE9}\x{5BEB}' .
-          '\x{5BEE}\x{5BF0}\x{5BF3}\x{5BF5}\x{5BF6}\x{5BF8}\x{5BFA}\x{5BFE}\x{5BFF}' .
-          '\x{5C01}\x{5C02}\x{5C04}\x{5C05}\x{5C06}\x{5C07}\x{5C08}\x{5C09}\x{5C0A}' .
-          '\x{5C0B}\x{5C0D}\x{5C0E}\x{5C0F}\x{5C11}\x{5C13}\x{5C16}\x{5C1A}\x{5C20}' .
-          '\x{5C22}\x{5C24}\x{5C28}\x{5C2D}\x{5C31}\x{5C38}\x{5C39}\x{5C3A}\x{5C3B}' .
-          '\x{5C3C}\x{5C3D}\x{5C3E}\x{5C3F}\x{5C40}\x{5C41}\x{5C45}\x{5C46}\x{5C48}' .
-          '\x{5C4A}\x{5C4B}\x{5C4D}\x{5C4E}\x{5C4F}\x{5C50}\x{5C51}\x{5C53}\x{5C55}' .
-          '\x{5C5E}\x{5C60}\x{5C61}\x{5C64}\x{5C65}\x{5C6C}\x{5C6E}\x{5C6F}\x{5C71}' .
-          '\x{5C76}\x{5C79}\x{5C8C}\x{5C90}\x{5C91}\x{5C94}\x{5CA1}\x{5CA8}\x{5CA9}' .
-          '\x{5CAB}\x{5CAC}\x{5CB1}\x{5CB3}\x{5CB6}\x{5CB7}\x{5CB8}\x{5CBB}\x{5CBC}' .
-          '\x{5CBE}\x{5CC5}\x{5CC7}\x{5CD9}\x{5CE0}\x{5CE1}\x{5CE8}\x{5CE9}\x{5CEA}' .
-          '\x{5CED}\x{5CEF}\x{5CF0}\x{5CF6}\x{5CFA}\x{5CFB}\x{5CFD}\x{5D07}\x{5D0B}' .
-          '\x{5D0E}\x{5D11}\x{5D14}\x{5D15}\x{5D16}\x{5D17}\x{5D18}\x{5D19}\x{5D1A}' .
-          '\x{5D1B}\x{5D1F}\x{5D22}\x{5D29}\x{5D4B}\x{5D4C}\x{5D4E}\x{5D50}\x{5D52}' .
-          '\x{5D5C}\x{5D69}\x{5D6C}\x{5D6F}\x{5D73}\x{5D76}\x{5D82}\x{5D84}\x{5D87}' .
-          '\x{5D8B}\x{5D8C}\x{5D90}\x{5D9D}\x{5DA2}\x{5DAC}\x{5DAE}\x{5DB7}\x{5DBA}' .
-          '\x{5DBC}\x{5DBD}\x{5DC9}\x{5DCC}\x{5DCD}\x{5DD2}\x{5DD3}\x{5DD6}\x{5DDB}' .
-          '\x{5DDD}\x{5DDE}\x{5DE1}\x{5DE3}\x{5DE5}\x{5DE6}\x{5DE7}\x{5DE8}\x{5DEB}' .
-          '\x{5DEE}\x{5DF1}\x{5DF2}\x{5DF3}\x{5DF4}\x{5DF5}\x{5DF7}\x{5DFB}\x{5DFD}' .
-          '\x{5DFE}\x{5E02}\x{5E03}\x{5E06}\x{5E0B}\x{5E0C}\x{5E11}\x{5E16}\x{5E19}' .
-          '\x{5E1A}\x{5E1B}\x{5E1D}\x{5E25}\x{5E2B}\x{5E2D}\x{5E2F}\x{5E30}\x{5E33}' .
-          '\x{5E36}\x{5E37}\x{5E38}\x{5E3D}\x{5E40}\x{5E43}\x{5E44}\x{5E45}\x{5E47}' .
-          '\x{5E4C}\x{5E4E}\x{5E54}\x{5E55}\x{5E57}\x{5E5F}\x{5E61}\x{5E62}\x{5E63}' .
-          '\x{5E64}\x{5E72}\x{5E73}\x{5E74}\x{5E75}\x{5E76}\x{5E78}\x{5E79}\x{5E7A}' .
-          '\x{5E7B}\x{5E7C}\x{5E7D}\x{5E7E}\x{5E7F}\x{5E81}\x{5E83}\x{5E84}\x{5E87}' .
-          '\x{5E8A}\x{5E8F}\x{5E95}\x{5E96}\x{5E97}\x{5E9A}\x{5E9C}\x{5EA0}\x{5EA6}' .
-          '\x{5EA7}\x{5EAB}\x{5EAD}\x{5EB5}\x{5EB6}\x{5EB7}\x{5EB8}\x{5EC1}\x{5EC2}' .
-          '\x{5EC3}\x{5EC8}\x{5EC9}\x{5ECA}\x{5ECF}\x{5ED0}\x{5ED3}\x{5ED6}\x{5EDA}' .
-          '\x{5EDB}\x{5EDD}\x{5EDF}\x{5EE0}\x{5EE1}\x{5EE2}\x{5EE3}\x{5EE8}\x{5EE9}' .
-          '\x{5EEC}\x{5EF0}\x{5EF1}\x{5EF3}\x{5EF4}\x{5EF6}\x{5EF7}\x{5EF8}\x{5EFA}' .
-          '\x{5EFB}\x{5EFC}\x{5EFE}\x{5EFF}\x{5F01}\x{5F03}\x{5F04}\x{5F09}\x{5F0A}' .
-          '\x{5F0B}\x{5F0C}\x{5F0D}\x{5F0F}\x{5F10}\x{5F11}\x{5F13}\x{5F14}\x{5F15}' .
-          '\x{5F16}\x{5F17}\x{5F18}\x{5F1B}\x{5F1F}\x{5F25}\x{5F26}\x{5F27}\x{5F29}' .
-          '\x{5F2D}\x{5F2F}\x{5F31}\x{5F35}\x{5F37}\x{5F38}\x{5F3C}\x{5F3E}\x{5F41}' .
-          '\x{5F48}\x{5F4A}\x{5F4C}\x{5F4E}\x{5F51}\x{5F53}\x{5F56}\x{5F57}\x{5F59}' .
-          '\x{5F5C}\x{5F5D}\x{5F61}\x{5F62}\x{5F66}\x{5F69}\x{5F6A}\x{5F6B}\x{5F6C}' .
-          '\x{5F6D}\x{5F70}\x{5F71}\x{5F73}\x{5F77}\x{5F79}\x{5F7C}\x{5F7F}\x{5F80}' .
-          '\x{5F81}\x{5F82}\x{5F83}\x{5F84}\x{5F85}\x{5F87}\x{5F88}\x{5F8A}\x{5F8B}' .
-          '\x{5F8C}\x{5F90}\x{5F91}\x{5F92}\x{5F93}\x{5F97}\x{5F98}\x{5F99}\x{5F9E}' .
-          '\x{5FA0}\x{5FA1}\x{5FA8}\x{5FA9}\x{5FAA}\x{5FAD}\x{5FAE}\x{5FB3}\x{5FB4}' .
-          '\x{5FB9}\x{5FBC}\x{5FBD}\x{5FC3}\x{5FC5}\x{5FCC}\x{5FCD}\x{5FD6}\x{5FD7}' .
-          '\x{5FD8}\x{5FD9}\x{5FDC}\x{5FDD}\x{5FE0}\x{5FE4}\x{5FEB}\x{5FF0}\x{5FF1}' .
-          '\x{5FF5}\x{5FF8}\x{5FFB}\x{5FFD}\x{5FFF}\x{600E}\x{600F}\x{6010}\x{6012}' .
-          '\x{6015}\x{6016}\x{6019}\x{601B}\x{601C}\x{601D}\x{6020}\x{6021}\x{6025}' .
-          '\x{6026}\x{6027}\x{6028}\x{6029}\x{602A}\x{602B}\x{602F}\x{6031}\x{603A}' .
-          '\x{6041}\x{6042}\x{6043}\x{6046}\x{604A}\x{604B}\x{604D}\x{6050}\x{6052}' .
-          '\x{6055}\x{6059}\x{605A}\x{605F}\x{6060}\x{6062}\x{6063}\x{6064}\x{6065}' .
-          '\x{6068}\x{6069}\x{606A}\x{606B}\x{606C}\x{606D}\x{606F}\x{6070}\x{6075}' .
-          '\x{6077}\x{6081}\x{6083}\x{6084}\x{6089}\x{608B}\x{608C}\x{608D}\x{6092}' .
-          '\x{6094}\x{6096}\x{6097}\x{609A}\x{609B}\x{609F}\x{60A0}\x{60A3}\x{60A6}' .
-          '\x{60A7}\x{60A9}\x{60AA}\x{60B2}\x{60B3}\x{60B4}\x{60B5}\x{60B6}\x{60B8}' .
-          '\x{60BC}\x{60BD}\x{60C5}\x{60C6}\x{60C7}\x{60D1}\x{60D3}\x{60D8}\x{60DA}' .
-          '\x{60DC}\x{60DF}\x{60E0}\x{60E1}\x{60E3}\x{60E7}\x{60E8}\x{60F0}\x{60F1}' .
-          '\x{60F3}\x{60F4}\x{60F6}\x{60F7}\x{60F9}\x{60FA}\x{60FB}\x{6100}\x{6101}' .
-          '\x{6103}\x{6106}\x{6108}\x{6109}\x{610D}\x{610E}\x{610F}\x{6115}\x{611A}' .
-          '\x{611B}\x{611F}\x{6121}\x{6127}\x{6128}\x{612C}\x{6134}\x{613C}\x{613D}' .
-          '\x{613E}\x{613F}\x{6142}\x{6144}\x{6147}\x{6148}\x{614A}\x{614B}\x{614C}' .
-          '\x{614D}\x{614E}\x{6153}\x{6155}\x{6158}\x{6159}\x{615A}\x{615D}\x{615F}' .
-          '\x{6162}\x{6163}\x{6165}\x{6167}\x{6168}\x{616B}\x{616E}\x{616F}\x{6170}' .
-          '\x{6171}\x{6173}\x{6174}\x{6175}\x{6176}\x{6177}\x{617E}\x{6182}\x{6187}' .
-          '\x{618A}\x{618E}\x{6190}\x{6191}\x{6194}\x{6196}\x{6199}\x{619A}\x{61A4}' .
-          '\x{61A7}\x{61A9}\x{61AB}\x{61AC}\x{61AE}\x{61B2}\x{61B6}\x{61BA}\x{61BE}' .
-          '\x{61C3}\x{61C6}\x{61C7}\x{61C8}\x{61C9}\x{61CA}\x{61CB}\x{61CC}\x{61CD}' .
-          '\x{61D0}\x{61E3}\x{61E6}\x{61F2}\x{61F4}\x{61F6}\x{61F7}\x{61F8}\x{61FA}' .
-          '\x{61FC}\x{61FD}\x{61FE}\x{61FF}\x{6200}\x{6208}\x{6209}\x{620A}\x{620C}' .
-          '\x{620D}\x{620E}\x{6210}\x{6211}\x{6212}\x{6214}\x{6216}\x{621A}\x{621B}' .
-          '\x{621D}\x{621E}\x{621F}\x{6221}\x{6226}\x{622A}\x{622E}\x{622F}\x{6230}' .
-          '\x{6232}\x{6233}\x{6234}\x{6238}\x{623B}\x{623F}\x{6240}\x{6241}\x{6247}' .
-          '\x{6248}\x{6249}\x{624B}\x{624D}\x{624E}\x{6253}\x{6255}\x{6258}\x{625B}' .
-          '\x{625E}\x{6260}\x{6263}\x{6268}\x{626E}\x{6271}\x{6276}\x{6279}\x{627C}' .
-          '\x{627E}\x{627F}\x{6280}\x{6282}\x{6283}\x{6284}\x{6289}\x{628A}\x{6291}' .
-          '\x{6292}\x{6293}\x{6294}\x{6295}\x{6296}\x{6297}\x{6298}\x{629B}\x{629C}' .
-          '\x{629E}\x{62AB}\x{62AC}\x{62B1}\x{62B5}\x{62B9}\x{62BB}\x{62BC}\x{62BD}' .
-          '\x{62C2}\x{62C5}\x{62C6}\x{62C7}\x{62C8}\x{62C9}\x{62CA}\x{62CC}\x{62CD}' .
-          '\x{62CF}\x{62D0}\x{62D1}\x{62D2}\x{62D3}\x{62D4}\x{62D7}\x{62D8}\x{62D9}' .
-          '\x{62DB}\x{62DC}\x{62DD}\x{62E0}\x{62E1}\x{62EC}\x{62ED}\x{62EE}\x{62EF}' .
-          '\x{62F1}\x{62F3}\x{62F5}\x{62F6}\x{62F7}\x{62FE}\x{62FF}\x{6301}\x{6302}' .
-          '\x{6307}\x{6308}\x{6309}\x{630C}\x{6311}\x{6319}\x{631F}\x{6327}\x{6328}' .
-          '\x{632B}\x{632F}\x{633A}\x{633D}\x{633E}\x{633F}\x{6349}\x{634C}\x{634D}' .
-          '\x{634F}\x{6350}\x{6355}\x{6357}\x{635C}\x{6367}\x{6368}\x{6369}\x{636B}' .
-          '\x{636E}\x{6372}\x{6376}\x{6377}\x{637A}\x{637B}\x{6380}\x{6383}\x{6388}' .
-          '\x{6389}\x{638C}\x{638E}\x{638F}\x{6392}\x{6396}\x{6398}\x{639B}\x{639F}' .
-          '\x{63A0}\x{63A1}\x{63A2}\x{63A3}\x{63A5}\x{63A7}\x{63A8}\x{63A9}\x{63AA}' .
-          '\x{63AB}\x{63AC}\x{63B2}\x{63B4}\x{63B5}\x{63BB}\x{63BE}\x{63C0}\x{63C3}' .
-          '\x{63C4}\x{63C6}\x{63C9}\x{63CF}\x{63D0}\x{63D2}\x{63D6}\x{63DA}\x{63DB}' .
-          '\x{63E1}\x{63E3}\x{63E9}\x{63EE}\x{63F4}\x{63F6}\x{63FA}\x{6406}\x{640D}' .
-          '\x{640F}\x{6413}\x{6416}\x{6417}\x{641C}\x{6426}\x{6428}\x{642C}\x{642D}' .
-          '\x{6434}\x{6436}\x{643A}\x{643E}\x{6442}\x{644E}\x{6458}\x{6467}\x{6469}' .
-          '\x{646F}\x{6476}\x{6478}\x{647A}\x{6483}\x{6488}\x{6492}\x{6493}\x{6495}' .
-          '\x{649A}\x{649E}\x{64A4}\x{64A5}\x{64A9}\x{64AB}\x{64AD}\x{64AE}\x{64B0}' .
-          '\x{64B2}\x{64B9}\x{64BB}\x{64BC}\x{64C1}\x{64C2}\x{64C5}\x{64C7}\x{64CD}' .
-          '\x{64D2}\x{64D4}\x{64D8}\x{64DA}\x{64E0}\x{64E1}\x{64E2}\x{64E3}\x{64E6}' .
-          '\x{64E7}\x{64EC}\x{64EF}\x{64F1}\x{64F2}\x{64F4}\x{64F6}\x{64FA}\x{64FD}' .
-          '\x{64FE}\x{6500}\x{6505}\x{6518}\x{651C}\x{651D}\x{6523}\x{6524}\x{652A}' .
-          '\x{652B}\x{652C}\x{652F}\x{6534}\x{6535}\x{6536}\x{6537}\x{6538}\x{6539}' .
-          '\x{653B}\x{653E}\x{653F}\x{6545}\x{6548}\x{654D}\x{654F}\x{6551}\x{6555}' .
-          '\x{6556}\x{6557}\x{6558}\x{6559}\x{655D}\x{655E}\x{6562}\x{6563}\x{6566}' .
-          '\x{656C}\x{6570}\x{6572}\x{6574}\x{6575}\x{6577}\x{6578}\x{6582}\x{6583}' .
-          '\x{6587}\x{6588}\x{6589}\x{658C}\x{658E}\x{6590}\x{6591}\x{6597}\x{6599}' .
-          '\x{659B}\x{659C}\x{659F}\x{65A1}\x{65A4}\x{65A5}\x{65A7}\x{65AB}\x{65AC}' .
-          '\x{65AD}\x{65AF}\x{65B0}\x{65B7}\x{65B9}\x{65BC}\x{65BD}\x{65C1}\x{65C3}' .
-          '\x{65C4}\x{65C5}\x{65C6}\x{65CB}\x{65CC}\x{65CF}\x{65D2}\x{65D7}\x{65D9}' .
-          '\x{65DB}\x{65E0}\x{65E1}\x{65E2}\x{65E5}\x{65E6}\x{65E7}\x{65E8}\x{65E9}' .
-          '\x{65EC}\x{65ED}\x{65F1}\x{65FA}\x{65FB}\x{6602}\x{6603}\x{6606}\x{6607}' .
-          '\x{660A}\x{660C}\x{660E}\x{660F}\x{6613}\x{6614}\x{661C}\x{661F}\x{6620}' .
-          '\x{6625}\x{6627}\x{6628}\x{662D}\x{662F}\x{6634}\x{6635}\x{6636}\x{663C}' .
-          '\x{663F}\x{6641}\x{6642}\x{6643}\x{6644}\x{6649}\x{664B}\x{664F}\x{6652}' .
-          '\x{665D}\x{665E}\x{665F}\x{6662}\x{6664}\x{6666}\x{6667}\x{6668}\x{6669}' .
-          '\x{666E}\x{666F}\x{6670}\x{6674}\x{6676}\x{667A}\x{6681}\x{6683}\x{6684}' .
-          '\x{6687}\x{6688}\x{6689}\x{668E}\x{6691}\x{6696}\x{6697}\x{6698}\x{669D}' .
-          '\x{66A2}\x{66A6}\x{66AB}\x{66AE}\x{66B4}\x{66B8}\x{66B9}\x{66BC}\x{66BE}' .
-          '\x{66C1}\x{66C4}\x{66C7}\x{66C9}\x{66D6}\x{66D9}\x{66DA}\x{66DC}\x{66DD}' .
-          '\x{66E0}\x{66E6}\x{66E9}\x{66F0}\x{66F2}\x{66F3}\x{66F4}\x{66F5}\x{66F7}' .
-          '\x{66F8}\x{66F9}\x{66FC}\x{66FD}\x{66FE}\x{66FF}\x{6700}\x{6703}\x{6708}' .
-          '\x{6709}\x{670B}\x{670D}\x{670F}\x{6714}\x{6715}\x{6716}\x{6717}\x{671B}' .
-          '\x{671D}\x{671E}\x{671F}\x{6726}\x{6727}\x{6728}\x{672A}\x{672B}\x{672C}' .
-          '\x{672D}\x{672E}\x{6731}\x{6734}\x{6736}\x{6737}\x{6738}\x{673A}\x{673D}' .
-          '\x{673F}\x{6741}\x{6746}\x{6749}\x{674E}\x{674F}\x{6750}\x{6751}\x{6753}' .
-          '\x{6756}\x{6759}\x{675C}\x{675E}\x{675F}\x{6760}\x{6761}\x{6762}\x{6763}' .
-          '\x{6764}\x{6765}\x{676A}\x{676D}\x{676F}\x{6770}\x{6771}\x{6772}\x{6773}' .
-          '\x{6775}\x{6777}\x{677C}\x{677E}\x{677F}\x{6785}\x{6787}\x{6789}\x{678B}' .
-          '\x{678C}\x{6790}\x{6795}\x{6797}\x{679A}\x{679C}\x{679D}\x{67A0}\x{67A1}' .
-          '\x{67A2}\x{67A6}\x{67A9}\x{67AF}\x{67B3}\x{67B4}\x{67B6}\x{67B7}\x{67B8}' .
-          '\x{67B9}\x{67C1}\x{67C4}\x{67C6}\x{67CA}\x{67CE}\x{67CF}\x{67D0}\x{67D1}' .
-          '\x{67D3}\x{67D4}\x{67D8}\x{67DA}\x{67DD}\x{67DE}\x{67E2}\x{67E4}\x{67E7}' .
-          '\x{67E9}\x{67EC}\x{67EE}\x{67EF}\x{67F1}\x{67F3}\x{67F4}\x{67F5}\x{67FB}' .
-          '\x{67FE}\x{67FF}\x{6802}\x{6803}\x{6804}\x{6813}\x{6816}\x{6817}\x{681E}' .
-          '\x{6821}\x{6822}\x{6829}\x{682A}\x{682B}\x{6832}\x{6834}\x{6838}\x{6839}' .
-          '\x{683C}\x{683D}\x{6840}\x{6841}\x{6842}\x{6843}\x{6846}\x{6848}\x{684D}' .
-          '\x{684E}\x{6850}\x{6851}\x{6853}\x{6854}\x{6859}\x{685C}\x{685D}\x{685F}' .
-          '\x{6863}\x{6867}\x{6874}\x{6876}\x{6877}\x{687E}\x{687F}\x{6881}\x{6883}' .
-          '\x{6885}\x{688D}\x{688F}\x{6893}\x{6894}\x{6897}\x{689B}\x{689D}\x{689F}' .
-          '\x{68A0}\x{68A2}\x{68A6}\x{68A7}\x{68A8}\x{68AD}\x{68AF}\x{68B0}\x{68B1}' .
-          '\x{68B3}\x{68B5}\x{68B6}\x{68B9}\x{68BA}\x{68BC}\x{68C4}\x{68C6}\x{68C9}' .
-          '\x{68CA}\x{68CB}\x{68CD}\x{68D2}\x{68D4}\x{68D5}\x{68D7}\x{68D8}\x{68DA}' .
-          '\x{68DF}\x{68E0}\x{68E1}\x{68E3}\x{68E7}\x{68EE}\x{68EF}\x{68F2}\x{68F9}' .
-          '\x{68FA}\x{6900}\x{6901}\x{6904}\x{6905}\x{6908}\x{690B}\x{690C}\x{690D}' .
-          '\x{690E}\x{690F}\x{6912}\x{6919}\x{691A}\x{691B}\x{691C}\x{6921}\x{6922}' .
-          '\x{6923}\x{6925}\x{6926}\x{6928}\x{692A}\x{6930}\x{6934}\x{6936}\x{6939}' .
-          '\x{693D}\x{693F}\x{694A}\x{6953}\x{6954}\x{6955}\x{6959}\x{695A}\x{695C}' .
-          '\x{695D}\x{695E}\x{6960}\x{6961}\x{6962}\x{696A}\x{696B}\x{696D}\x{696E}' .
-          '\x{696F}\x{6973}\x{6974}\x{6975}\x{6977}\x{6978}\x{6979}\x{697C}\x{697D}' .
-          '\x{697E}\x{6981}\x{6982}\x{698A}\x{698E}\x{6991}\x{6994}\x{6995}\x{699B}' .
-          '\x{699C}\x{69A0}\x{69A7}\x{69AE}\x{69B1}\x{69B2}\x{69B4}\x{69BB}\x{69BE}' .
-          '\x{69BF}\x{69C1}\x{69C3}\x{69C7}\x{69CA}\x{69CB}\x{69CC}\x{69CD}\x{69CE}' .
-          '\x{69D0}\x{69D3}\x{69D8}\x{69D9}\x{69DD}\x{69DE}\x{69E7}\x{69E8}\x{69EB}' .
-          '\x{69ED}\x{69F2}\x{69F9}\x{69FB}\x{69FD}\x{69FF}\x{6A02}\x{6A05}\x{6A0A}' .
-          '\x{6A0B}\x{6A0C}\x{6A12}\x{6A13}\x{6A14}\x{6A17}\x{6A19}\x{6A1B}\x{6A1E}' .
-          '\x{6A1F}\x{6A21}\x{6A22}\x{6A23}\x{6A29}\x{6A2A}\x{6A2B}\x{6A2E}\x{6A35}' .
-          '\x{6A36}\x{6A38}\x{6A39}\x{6A3A}\x{6A3D}\x{6A44}\x{6A47}\x{6A48}\x{6A4B}' .
-          '\x{6A58}\x{6A59}\x{6A5F}\x{6A61}\x{6A62}\x{6A66}\x{6A72}\x{6A78}\x{6A7F}' .
-          '\x{6A80}\x{6A84}\x{6A8D}\x{6A8E}\x{6A90}\x{6A97}\x{6A9C}\x{6AA0}\x{6AA2}' .
-          '\x{6AA3}\x{6AAA}\x{6AAC}\x{6AAE}\x{6AB3}\x{6AB8}\x{6ABB}\x{6AC1}\x{6AC2}' .
-          '\x{6AC3}\x{6AD1}\x{6AD3}\x{6ADA}\x{6ADB}\x{6ADE}\x{6ADF}\x{6AE8}\x{6AEA}' .
-          '\x{6AFA}\x{6AFB}\x{6B04}\x{6B05}\x{6B0A}\x{6B12}\x{6B16}\x{6B1D}\x{6B1F}' .
-          '\x{6B20}\x{6B21}\x{6B23}\x{6B27}\x{6B32}\x{6B37}\x{6B38}\x{6B39}\x{6B3A}' .
-          '\x{6B3D}\x{6B3E}\x{6B43}\x{6B47}\x{6B49}\x{6B4C}\x{6B4E}\x{6B50}\x{6B53}' .
-          '\x{6B54}\x{6B59}\x{6B5B}\x{6B5F}\x{6B61}\x{6B62}\x{6B63}\x{6B64}\x{6B66}' .
-          '\x{6B69}\x{6B6A}\x{6B6F}\x{6B73}\x{6B74}\x{6B78}\x{6B79}\x{6B7B}\x{6B7F}' .
-          '\x{6B80}\x{6B83}\x{6B84}\x{6B86}\x{6B89}\x{6B8A}\x{6B8B}\x{6B8D}\x{6B95}' .
-          '\x{6B96}\x{6B98}\x{6B9E}\x{6BA4}\x{6BAA}\x{6BAB}\x{6BAF}\x{6BB1}\x{6BB2}' .
-          '\x{6BB3}\x{6BB4}\x{6BB5}\x{6BB7}\x{6BBA}\x{6BBB}\x{6BBC}\x{6BBF}\x{6BC0}' .
-          '\x{6BC5}\x{6BC6}\x{6BCB}\x{6BCD}\x{6BCE}\x{6BD2}\x{6BD3}\x{6BD4}\x{6BD8}' .
-          '\x{6BDB}\x{6BDF}\x{6BEB}\x{6BEC}\x{6BEF}\x{6BF3}\x{6C08}\x{6C0F}\x{6C11}' .
-          '\x{6C13}\x{6C14}\x{6C17}\x{6C1B}\x{6C23}\x{6C24}\x{6C34}\x{6C37}\x{6C38}' .
-          '\x{6C3E}\x{6C40}\x{6C41}\x{6C42}\x{6C4E}\x{6C50}\x{6C55}\x{6C57}\x{6C5A}' .
-          '\x{6C5D}\x{6C5E}\x{6C5F}\x{6C60}\x{6C62}\x{6C68}\x{6C6A}\x{6C70}\x{6C72}' .
-          '\x{6C73}\x{6C7A}\x{6C7D}\x{6C7E}\x{6C81}\x{6C82}\x{6C83}\x{6C88}\x{6C8C}' .
-          '\x{6C8D}\x{6C90}\x{6C92}\x{6C93}\x{6C96}\x{6C99}\x{6C9A}\x{6C9B}\x{6CA1}' .
-          '\x{6CA2}\x{6CAB}\x{6CAE}\x{6CB1}\x{6CB3}\x{6CB8}\x{6CB9}\x{6CBA}\x{6CBB}' .
-          '\x{6CBC}\x{6CBD}\x{6CBE}\x{6CBF}\x{6CC1}\x{6CC4}\x{6CC5}\x{6CC9}\x{6CCA}' .
-          '\x{6CCC}\x{6CD3}\x{6CD5}\x{6CD7}\x{6CD9}\x{6CDB}\x{6CDD}\x{6CE1}\x{6CE2}' .
-          '\x{6CE3}\x{6CE5}\x{6CE8}\x{6CEA}\x{6CEF}\x{6CF0}\x{6CF1}\x{6CF3}\x{6D0B}' .
-          '\x{6D0C}\x{6D12}\x{6D17}\x{6D19}\x{6D1B}\x{6D1E}\x{6D1F}\x{6D25}\x{6D29}' .
-          '\x{6D2A}\x{6D2B}\x{6D32}\x{6D33}\x{6D35}\x{6D36}\x{6D38}\x{6D3B}\x{6D3D}' .
-          '\x{6D3E}\x{6D41}\x{6D44}\x{6D45}\x{6D59}\x{6D5A}\x{6D5C}\x{6D63}\x{6D64}' .
-          '\x{6D66}\x{6D69}\x{6D6A}\x{6D6C}\x{6D6E}\x{6D74}\x{6D77}\x{6D78}\x{6D79}' .
-          '\x{6D85}\x{6D88}\x{6D8C}\x{6D8E}\x{6D93}\x{6D95}\x{6D99}\x{6D9B}\x{6D9C}' .
-          '\x{6DAF}\x{6DB2}\x{6DB5}\x{6DB8}\x{6DBC}\x{6DC0}\x{6DC5}\x{6DC6}\x{6DC7}' .
-          '\x{6DCB}\x{6DCC}\x{6DD1}\x{6DD2}\x{6DD5}\x{6DD8}\x{6DD9}\x{6DDE}\x{6DE1}' .
-          '\x{6DE4}\x{6DE6}\x{6DE8}\x{6DEA}\x{6DEB}\x{6DEC}\x{6DEE}\x{6DF1}\x{6DF3}' .
-          '\x{6DF5}\x{6DF7}\x{6DF9}\x{6DFA}\x{6DFB}\x{6E05}\x{6E07}\x{6E08}\x{6E09}' .
-          '\x{6E0A}\x{6E0B}\x{6E13}\x{6E15}\x{6E19}\x{6E1A}\x{6E1B}\x{6E1D}\x{6E1F}' .
-          '\x{6E20}\x{6E21}\x{6E23}\x{6E24}\x{6E25}\x{6E26}\x{6E29}\x{6E2B}\x{6E2C}' .
-          '\x{6E2D}\x{6E2E}\x{6E2F}\x{6E38}\x{6E3A}\x{6E3E}\x{6E43}\x{6E4A}\x{6E4D}' .
-          '\x{6E4E}\x{6E56}\x{6E58}\x{6E5B}\x{6E5F}\x{6E67}\x{6E6B}\x{6E6E}\x{6E6F}' .
-          '\x{6E72}\x{6E76}\x{6E7E}\x{6E7F}\x{6E80}\x{6E82}\x{6E8C}\x{6E8F}\x{6E90}' .
-          '\x{6E96}\x{6E98}\x{6E9C}\x{6E9D}\x{6E9F}\x{6EA2}\x{6EA5}\x{6EAA}\x{6EAF}' .
-          '\x{6EB2}\x{6EB6}\x{6EB7}\x{6EBA}\x{6EBD}\x{6EC2}\x{6EC4}\x{6EC5}\x{6EC9}' .
-          '\x{6ECB}\x{6ECC}\x{6ED1}\x{6ED3}\x{6ED4}\x{6ED5}\x{6EDD}\x{6EDE}\x{6EEC}' .
-          '\x{6EEF}\x{6EF2}\x{6EF4}\x{6EF7}\x{6EF8}\x{6EFE}\x{6EFF}\x{6F01}\x{6F02}' .
-          '\x{6F06}\x{6F09}\x{6F0F}\x{6F11}\x{6F13}\x{6F14}\x{6F15}\x{6F20}\x{6F22}' .
-          '\x{6F23}\x{6F2B}\x{6F2C}\x{6F31}\x{6F32}\x{6F38}\x{6F3E}\x{6F3F}\x{6F41}' .
-          '\x{6F45}\x{6F54}\x{6F58}\x{6F5B}\x{6F5C}\x{6F5F}\x{6F64}\x{6F66}\x{6F6D}' .
-          '\x{6F6E}\x{6F6F}\x{6F70}\x{6F74}\x{6F78}\x{6F7A}\x{6F7C}\x{6F80}\x{6F81}' .
-          '\x{6F82}\x{6F84}\x{6F86}\x{6F8E}\x{6F91}\x{6F97}\x{6FA1}\x{6FA3}\x{6FA4}' .
-          '\x{6FAA}\x{6FB1}\x{6FB3}\x{6FB9}\x{6FC0}\x{6FC1}\x{6FC2}\x{6FC3}\x{6FC6}' .
-          '\x{6FD4}\x{6FD5}\x{6FD8}\x{6FDB}\x{6FDF}\x{6FE0}\x{6FE1}\x{6FE4}\x{6FEB}' .
-          '\x{6FEC}\x{6FEE}\x{6FEF}\x{6FF1}\x{6FF3}\x{6FF6}\x{6FFA}\x{6FFE}\x{7001}' .
-          '\x{7009}\x{700B}\x{700F}\x{7011}\x{7015}\x{7018}\x{701A}\x{701B}\x{701D}' .
-          '\x{701E}\x{701F}\x{7026}\x{7027}\x{702C}\x{7030}\x{7032}\x{703E}\x{704C}' .
-          '\x{7051}\x{7058}\x{7063}\x{706B}\x{706F}\x{7070}\x{7078}\x{707C}\x{707D}' .
-          '\x{7089}\x{708A}\x{708E}\x{7092}\x{7099}\x{70AC}\x{70AD}\x{70AE}\x{70AF}' .
-          '\x{70B3}\x{70B8}\x{70B9}\x{70BA}\x{70C8}\x{70CB}\x{70CF}\x{70D9}\x{70DD}' .
-          '\x{70DF}\x{70F1}\x{70F9}\x{70FD}\x{7109}\x{7114}\x{7119}\x{711A}\x{711C}' .
-          '\x{7121}\x{7126}\x{7136}\x{713C}\x{7149}\x{714C}\x{714E}\x{7155}\x{7156}' .
-          '\x{7159}\x{7162}\x{7164}\x{7165}\x{7166}\x{7167}\x{7169}\x{716C}\x{716E}' .
-          '\x{717D}\x{7184}\x{7188}\x{718A}\x{718F}\x{7194}\x{7195}\x{7199}\x{719F}' .
-          '\x{71A8}\x{71AC}\x{71B1}\x{71B9}\x{71BE}\x{71C3}\x{71C8}\x{71C9}\x{71CE}' .
-          '\x{71D0}\x{71D2}\x{71D4}\x{71D5}\x{71D7}\x{71DF}\x{71E0}\x{71E5}\x{71E6}' .
-          '\x{71E7}\x{71EC}\x{71ED}\x{71EE}\x{71F5}\x{71F9}\x{71FB}\x{71FC}\x{71FF}' .
-          '\x{7206}\x{720D}\x{7210}\x{721B}\x{7228}\x{722A}\x{722C}\x{722D}\x{7230}' .
-          '\x{7232}\x{7235}\x{7236}\x{723A}\x{723B}\x{723C}\x{723D}\x{723E}\x{723F}' .
-          '\x{7240}\x{7246}\x{7247}\x{7248}\x{724B}\x{724C}\x{7252}\x{7258}\x{7259}' .
-          '\x{725B}\x{725D}\x{725F}\x{7261}\x{7262}\x{7267}\x{7269}\x{7272}\x{7274}' .
-          '\x{7279}\x{727D}\x{727E}\x{7280}\x{7281}\x{7282}\x{7287}\x{7292}\x{7296}' .
-          '\x{72A0}\x{72A2}\x{72A7}\x{72AC}\x{72AF}\x{72B2}\x{72B6}\x{72B9}\x{72C2}' .
-          '\x{72C3}\x{72C4}\x{72C6}\x{72CE}\x{72D0}\x{72D2}\x{72D7}\x{72D9}\x{72DB}' .
-          '\x{72E0}\x{72E1}\x{72E2}\x{72E9}\x{72EC}\x{72ED}\x{72F7}\x{72F8}\x{72F9}' .
-          '\x{72FC}\x{72FD}\x{730A}\x{7316}\x{7317}\x{731B}\x{731C}\x{731D}\x{731F}' .
-          '\x{7325}\x{7329}\x{732A}\x{732B}\x{732E}\x{732F}\x{7334}\x{7336}\x{7337}' .
-          '\x{733E}\x{733F}\x{7344}\x{7345}\x{734E}\x{734F}\x{7357}\x{7363}\x{7368}' .
-          '\x{736A}\x{7370}\x{7372}\x{7375}\x{7378}\x{737A}\x{737B}\x{7384}\x{7387}' .
-          '\x{7389}\x{738B}\x{7396}\x{73A9}\x{73B2}\x{73B3}\x{73BB}\x{73C0}\x{73C2}' .
-          '\x{73C8}\x{73CA}\x{73CD}\x{73CE}\x{73DE}\x{73E0}\x{73E5}\x{73EA}\x{73ED}' .
-          '\x{73EE}\x{73F1}\x{73F8}\x{73FE}\x{7403}\x{7405}\x{7406}\x{7409}\x{7422}' .
-          '\x{7425}\x{7432}\x{7433}\x{7434}\x{7435}\x{7436}\x{743A}\x{743F}\x{7441}' .
-          '\x{7455}\x{7459}\x{745A}\x{745B}\x{745C}\x{745E}\x{745F}\x{7460}\x{7463}' .
-          '\x{7464}\x{7469}\x{746A}\x{746F}\x{7470}\x{7473}\x{7476}\x{747E}\x{7483}' .
-          '\x{748B}\x{749E}\x{74A2}\x{74A7}\x{74B0}\x{74BD}\x{74CA}\x{74CF}\x{74D4}' .
-          '\x{74DC}\x{74E0}\x{74E2}\x{74E3}\x{74E6}\x{74E7}\x{74E9}\x{74EE}\x{74F0}' .
-          '\x{74F1}\x{74F2}\x{74F6}\x{74F7}\x{74F8}\x{7503}\x{7504}\x{7505}\x{750C}' .
-          '\x{750D}\x{750E}\x{7511}\x{7513}\x{7515}\x{7518}\x{751A}\x{751C}\x{751E}' .
-          '\x{751F}\x{7523}\x{7525}\x{7526}\x{7528}\x{752B}\x{752C}\x{7530}\x{7531}' .
-          '\x{7532}\x{7533}\x{7537}\x{7538}\x{753A}\x{753B}\x{753C}\x{7544}\x{7546}' .
-          '\x{7549}\x{754A}\x{754B}\x{754C}\x{754D}\x{754F}\x{7551}\x{7554}\x{7559}' .
-          '\x{755A}\x{755B}\x{755C}\x{755D}\x{7560}\x{7562}\x{7564}\x{7565}\x{7566}' .
-          '\x{7567}\x{7569}\x{756A}\x{756B}\x{756D}\x{7570}\x{7573}\x{7574}\x{7576}' .
-          '\x{7577}\x{7578}\x{757F}\x{7582}\x{7586}\x{7587}\x{7589}\x{758A}\x{758B}' .
-          '\x{758E}\x{758F}\x{7591}\x{7594}\x{759A}\x{759D}\x{75A3}\x{75A5}\x{75AB}' .
-          '\x{75B1}\x{75B2}\x{75B3}\x{75B5}\x{75B8}\x{75B9}\x{75BC}\x{75BD}\x{75BE}' .
-          '\x{75C2}\x{75C3}\x{75C5}\x{75C7}\x{75CA}\x{75CD}\x{75D2}\x{75D4}\x{75D5}' .
-          '\x{75D8}\x{75D9}\x{75DB}\x{75DE}\x{75E2}\x{75E3}\x{75E9}\x{75F0}\x{75F2}' .
-          '\x{75F3}\x{75F4}\x{75FA}\x{75FC}\x{75FE}\x{75FF}\x{7601}\x{7609}\x{760B}' .
-          '\x{760D}\x{761F}\x{7620}\x{7621}\x{7622}\x{7624}\x{7627}\x{7630}\x{7634}' .
-          '\x{763B}\x{7642}\x{7646}\x{7647}\x{7648}\x{764C}\x{7652}\x{7656}\x{7658}' .
-          '\x{765C}\x{7661}\x{7662}\x{7667}\x{7668}\x{7669}\x{766A}\x{766C}\x{7670}' .
-          '\x{7672}\x{7676}\x{7678}\x{767A}\x{767B}\x{767C}\x{767D}\x{767E}\x{7680}' .
-          '\x{7683}\x{7684}\x{7686}\x{7687}\x{7688}\x{768B}\x{768E}\x{7690}\x{7693}' .
-          '\x{7696}\x{7699}\x{769A}\x{76AE}\x{76B0}\x{76B4}\x{76B7}\x{76B8}\x{76B9}' .
-          '\x{76BA}\x{76BF}\x{76C2}\x{76C3}\x{76C6}\x{76C8}\x{76CA}\x{76CD}\x{76D2}' .
-          '\x{76D6}\x{76D7}\x{76DB}\x{76DC}\x{76DE}\x{76DF}\x{76E1}\x{76E3}\x{76E4}' .
-          '\x{76E5}\x{76E7}\x{76EA}\x{76EE}\x{76F2}\x{76F4}\x{76F8}\x{76FB}\x{76FE}' .
-          '\x{7701}\x{7704}\x{7707}\x{7708}\x{7709}\x{770B}\x{770C}\x{771B}\x{771E}' .
-          '\x{771F}\x{7720}\x{7724}\x{7725}\x{7726}\x{7729}\x{7737}\x{7738}\x{773A}' .
-          '\x{773C}\x{7740}\x{7747}\x{775A}\x{775B}\x{7761}\x{7763}\x{7765}\x{7766}' .
-          '\x{7768}\x{776B}\x{7779}\x{777E}\x{777F}\x{778B}\x{778E}\x{7791}\x{779E}' .
-          '\x{77A0}\x{77A5}\x{77AC}\x{77AD}\x{77B0}\x{77B3}\x{77B6}\x{77B9}\x{77BB}' .
-          '\x{77BC}\x{77BD}\x{77BF}\x{77C7}\x{77CD}\x{77D7}\x{77DA}\x{77DB}\x{77DC}' .
-          '\x{77E2}\x{77E3}\x{77E5}\x{77E7}\x{77E9}\x{77ED}\x{77EE}\x{77EF}\x{77F3}' .
-          '\x{77FC}\x{7802}\x{780C}\x{7812}\x{7814}\x{7815}\x{7820}\x{7825}\x{7826}' .
-          '\x{7827}\x{7832}\x{7834}\x{783A}\x{783F}\x{7845}\x{785D}\x{786B}\x{786C}' .
-          '\x{786F}\x{7872}\x{7874}\x{787C}\x{7881}\x{7886}\x{7887}\x{788C}\x{788D}' .
-          '\x{788E}\x{7891}\x{7893}\x{7895}\x{7897}\x{789A}\x{78A3}\x{78A7}\x{78A9}' .
-          '\x{78AA}\x{78AF}\x{78B5}\x{78BA}\x{78BC}\x{78BE}\x{78C1}\x{78C5}\x{78C6}' .
-          '\x{78CA}\x{78CB}\x{78D0}\x{78D1}\x{78D4}\x{78DA}\x{78E7}\x{78E8}\x{78EC}' .
-          '\x{78EF}\x{78F4}\x{78FD}\x{7901}\x{7907}\x{790E}\x{7911}\x{7912}\x{7919}' .
-          '\x{7926}\x{792A}\x{792B}\x{792C}\x{793A}\x{793C}\x{793E}\x{7940}\x{7941}' .
-          '\x{7947}\x{7948}\x{7949}\x{7950}\x{7953}\x{7955}\x{7956}\x{7957}\x{795A}' .
-          '\x{795D}\x{795E}\x{795F}\x{7960}\x{7962}\x{7965}\x{7968}\x{796D}\x{7977}' .
-          '\x{797A}\x{797F}\x{7980}\x{7981}\x{7984}\x{7985}\x{798A}\x{798D}\x{798E}' .
-          '\x{798F}\x{799D}\x{79A6}\x{79A7}\x{79AA}\x{79AE}\x{79B0}\x{79B3}\x{79B9}' .
-          '\x{79BA}\x{79BD}\x{79BE}\x{79BF}\x{79C0}\x{79C1}\x{79C9}\x{79CB}\x{79D1}' .
-          '\x{79D2}\x{79D5}\x{79D8}\x{79DF}\x{79E1}\x{79E3}\x{79E4}\x{79E6}\x{79E7}' .
-          '\x{79E9}\x{79EC}\x{79F0}\x{79FB}\x{7A00}\x{7A08}\x{7A0B}\x{7A0D}\x{7A0E}' .
-          '\x{7A14}\x{7A17}\x{7A18}\x{7A19}\x{7A1A}\x{7A1C}\x{7A1F}\x{7A20}\x{7A2E}' .
-          '\x{7A31}\x{7A32}\x{7A37}\x{7A3B}\x{7A3C}\x{7A3D}\x{7A3E}\x{7A3F}\x{7A40}' .
-          '\x{7A42}\x{7A43}\x{7A46}\x{7A49}\x{7A4D}\x{7A4E}\x{7A4F}\x{7A50}\x{7A57}' .
-          '\x{7A61}\x{7A62}\x{7A63}\x{7A69}\x{7A6B}\x{7A70}\x{7A74}\x{7A76}\x{7A79}' .
-          '\x{7A7A}\x{7A7D}\x{7A7F}\x{7A81}\x{7A83}\x{7A84}\x{7A88}\x{7A92}\x{7A93}' .
-          '\x{7A95}\x{7A96}\x{7A97}\x{7A98}\x{7A9F}\x{7AA9}\x{7AAA}\x{7AAE}\x{7AAF}' .
-          '\x{7AB0}\x{7AB6}\x{7ABA}\x{7ABF}\x{7AC3}\x{7AC4}\x{7AC5}\x{7AC7}\x{7AC8}' .
-          '\x{7ACA}\x{7ACB}\x{7ACD}\x{7ACF}\x{7AD2}\x{7AD3}\x{7AD5}\x{7AD9}\x{7ADA}' .
-          '\x{7ADC}\x{7ADD}\x{7ADF}\x{7AE0}\x{7AE1}\x{7AE2}\x{7AE3}\x{7AE5}\x{7AE6}' .
-          '\x{7AEA}\x{7AED}\x{7AEF}\x{7AF0}\x{7AF6}\x{7AF8}\x{7AF9}\x{7AFA}\x{7AFF}' .
-          '\x{7B02}\x{7B04}\x{7B06}\x{7B08}\x{7B0A}\x{7B0B}\x{7B0F}\x{7B11}\x{7B18}' .
-          '\x{7B19}\x{7B1B}\x{7B1E}\x{7B20}\x{7B25}\x{7B26}\x{7B28}\x{7B2C}\x{7B33}' .
-          '\x{7B35}\x{7B36}\x{7B39}\x{7B45}\x{7B46}\x{7B48}\x{7B49}\x{7B4B}\x{7B4C}' .
-          '\x{7B4D}\x{7B4F}\x{7B50}\x{7B51}\x{7B52}\x{7B54}\x{7B56}\x{7B5D}\x{7B65}' .
-          '\x{7B67}\x{7B6C}\x{7B6E}\x{7B70}\x{7B71}\x{7B74}\x{7B75}\x{7B7A}\x{7B86}' .
-          '\x{7B87}\x{7B8B}\x{7B8D}\x{7B8F}\x{7B92}\x{7B94}\x{7B95}\x{7B97}\x{7B98}' .
-          '\x{7B99}\x{7B9A}\x{7B9C}\x{7B9D}\x{7B9F}\x{7BA1}\x{7BAA}\x{7BAD}\x{7BB1}' .
-          '\x{7BB4}\x{7BB8}\x{7BC0}\x{7BC1}\x{7BC4}\x{7BC6}\x{7BC7}\x{7BC9}\x{7BCB}' .
-          '\x{7BCC}\x{7BCF}\x{7BDD}\x{7BE0}\x{7BE4}\x{7BE5}\x{7BE6}\x{7BE9}\x{7BED}' .
-          '\x{7BF3}\x{7BF6}\x{7BF7}\x{7C00}\x{7C07}\x{7C0D}\x{7C11}\x{7C12}\x{7C13}' .
-          '\x{7C14}\x{7C17}\x{7C1F}\x{7C21}\x{7C23}\x{7C27}\x{7C2A}\x{7C2B}\x{7C37}' .
-          '\x{7C38}\x{7C3D}\x{7C3E}\x{7C3F}\x{7C40}\x{7C43}\x{7C4C}\x{7C4D}\x{7C4F}' .
-          '\x{7C50}\x{7C54}\x{7C56}\x{7C58}\x{7C5F}\x{7C60}\x{7C64}\x{7C65}\x{7C6C}' .
-          '\x{7C73}\x{7C75}\x{7C7E}\x{7C81}\x{7C82}\x{7C83}\x{7C89}\x{7C8B}\x{7C8D}' .
-          '\x{7C90}\x{7C92}\x{7C95}\x{7C97}\x{7C98}\x{7C9B}\x{7C9F}\x{7CA1}\x{7CA2}' .
-          '\x{7CA4}\x{7CA5}\x{7CA7}\x{7CA8}\x{7CAB}\x{7CAD}\x{7CAE}\x{7CB1}\x{7CB2}' .
-          '\x{7CB3}\x{7CB9}\x{7CBD}\x{7CBE}\x{7CC0}\x{7CC2}\x{7CC5}\x{7CCA}\x{7CCE}' .
-          '\x{7CD2}\x{7CD6}\x{7CD8}\x{7CDC}\x{7CDE}\x{7CDF}\x{7CE0}\x{7CE2}\x{7CE7}' .
-          '\x{7CEF}\x{7CF2}\x{7CF4}\x{7CF6}\x{7CF8}\x{7CFA}\x{7CFB}\x{7CFE}\x{7D00}' .
-          '\x{7D02}\x{7D04}\x{7D05}\x{7D06}\x{7D0A}\x{7D0B}\x{7D0D}\x{7D10}\x{7D14}' .
-          '\x{7D15}\x{7D17}\x{7D18}\x{7D19}\x{7D1A}\x{7D1B}\x{7D1C}\x{7D20}\x{7D21}' .
-          '\x{7D22}\x{7D2B}\x{7D2C}\x{7D2E}\x{7D2F}\x{7D30}\x{7D32}\x{7D33}\x{7D35}' .
-          '\x{7D39}\x{7D3A}\x{7D3F}\x{7D42}\x{7D43}\x{7D44}\x{7D45}\x{7D46}\x{7D4B}' .
-          '\x{7D4C}\x{7D4E}\x{7D4F}\x{7D50}\x{7D56}\x{7D5B}\x{7D5E}\x{7D61}\x{7D62}' .
-          '\x{7D63}\x{7D66}\x{7D68}\x{7D6E}\x{7D71}\x{7D72}\x{7D73}\x{7D75}\x{7D76}' .
-          '\x{7D79}\x{7D7D}\x{7D89}\x{7D8F}\x{7D93}\x{7D99}\x{7D9A}\x{7D9B}\x{7D9C}' .
-          '\x{7D9F}\x{7DA2}\x{7DA3}\x{7DAB}\x{7DAC}\x{7DAD}\x{7DAE}\x{7DAF}\x{7DB0}' .
-          '\x{7DB1}\x{7DB2}\x{7DB4}\x{7DB5}\x{7DB8}\x{7DBA}\x{7DBB}\x{7DBD}\x{7DBE}' .
-          '\x{7DBF}\x{7DC7}\x{7DCA}\x{7DCB}\x{7DCF}\x{7DD1}\x{7DD2}\x{7DD5}\x{7DD8}' .
-          '\x{7DDA}\x{7DDC}\x{7DDD}\x{7DDE}\x{7DE0}\x{7DE1}\x{7DE4}\x{7DE8}\x{7DE9}' .
-          '\x{7DEC}\x{7DEF}\x{7DF2}\x{7DF4}\x{7DFB}\x{7E01}\x{7E04}\x{7E05}\x{7E09}' .
-          '\x{7E0A}\x{7E0B}\x{7E12}\x{7E1B}\x{7E1E}\x{7E1F}\x{7E21}\x{7E22}\x{7E23}' .
-          '\x{7E26}\x{7E2B}\x{7E2E}\x{7E31}\x{7E32}\x{7E35}\x{7E37}\x{7E39}\x{7E3A}' .
-          '\x{7E3B}\x{7E3D}\x{7E3E}\x{7E41}\x{7E43}\x{7E46}\x{7E4A}\x{7E4B}\x{7E4D}' .
-          '\x{7E54}\x{7E55}\x{7E56}\x{7E59}\x{7E5A}\x{7E5D}\x{7E5E}\x{7E66}\x{7E67}' .
-          '\x{7E69}\x{7E6A}\x{7E6D}\x{7E70}\x{7E79}\x{7E7B}\x{7E7C}\x{7E7D}\x{7E7F}' .
-          '\x{7E82}\x{7E83}\x{7E88}\x{7E89}\x{7E8C}\x{7E8E}\x{7E8F}\x{7E90}\x{7E92}' .
-          '\x{7E93}\x{7E94}\x{7E96}\x{7E9B}\x{7E9C}\x{7F36}\x{7F38}\x{7F3A}\x{7F45}' .
-          '\x{7F4C}\x{7F4D}\x{7F4E}\x{7F50}\x{7F51}\x{7F54}\x{7F55}\x{7F58}\x{7F5F}' .
-          '\x{7F60}\x{7F67}\x{7F68}\x{7F69}\x{7F6A}\x{7F6B}\x{7F6E}\x{7F70}\x{7F72}' .
-          '\x{7F75}\x{7F77}\x{7F78}\x{7F79}\x{7F82}\x{7F83}\x{7F85}\x{7F86}\x{7F87}' .
-          '\x{7F88}\x{7F8A}\x{7F8C}\x{7F8E}\x{7F94}\x{7F9A}\x{7F9D}\x{7F9E}\x{7FA3}' .
-          '\x{7FA4}\x{7FA8}\x{7FA9}\x{7FAE}\x{7FAF}\x{7FB2}\x{7FB6}\x{7FB8}\x{7FB9}' .
-          '\x{7FBD}\x{7FC1}\x{7FC5}\x{7FC6}\x{7FCA}\x{7FCC}\x{7FD2}\x{7FD4}\x{7FD5}' .
-          '\x{7FE0}\x{7FE1}\x{7FE6}\x{7FE9}\x{7FEB}\x{7FF0}\x{7FF3}\x{7FF9}\x{7FFB}' .
-          '\x{7FFC}\x{8000}\x{8001}\x{8003}\x{8004}\x{8005}\x{8006}\x{800B}\x{800C}' .
-          '\x{8010}\x{8012}\x{8015}\x{8017}\x{8018}\x{8019}\x{801C}\x{8021}\x{8028}' .
-          '\x{8033}\x{8036}\x{803B}\x{803D}\x{803F}\x{8046}\x{804A}\x{8052}\x{8056}' .
-          '\x{8058}\x{805A}\x{805E}\x{805F}\x{8061}\x{8062}\x{8068}\x{806F}\x{8070}' .
-          '\x{8072}\x{8073}\x{8074}\x{8076}\x{8077}\x{8079}\x{807D}\x{807E}\x{807F}' .
-          '\x{8084}\x{8085}\x{8086}\x{8087}\x{8089}\x{808B}\x{808C}\x{8093}\x{8096}' .
-          '\x{8098}\x{809A}\x{809B}\x{809D}\x{80A1}\x{80A2}\x{80A5}\x{80A9}\x{80AA}' .
-          '\x{80AC}\x{80AD}\x{80AF}\x{80B1}\x{80B2}\x{80B4}\x{80BA}\x{80C3}\x{80C4}' .
-          '\x{80C6}\x{80CC}\x{80CE}\x{80D6}\x{80D9}\x{80DA}\x{80DB}\x{80DD}\x{80DE}' .
-          '\x{80E1}\x{80E4}\x{80E5}\x{80EF}\x{80F1}\x{80F4}\x{80F8}\x{80FC}\x{80FD}' .
-          '\x{8102}\x{8105}\x{8106}\x{8107}\x{8108}\x{8109}\x{810A}\x{811A}\x{811B}' .
-          '\x{8123}\x{8129}\x{812F}\x{8131}\x{8133}\x{8139}\x{813E}\x{8146}\x{814B}' .
-          '\x{814E}\x{8150}\x{8151}\x{8153}\x{8154}\x{8155}\x{815F}\x{8165}\x{8166}' .
-          '\x{816B}\x{816E}\x{8170}\x{8171}\x{8174}\x{8178}\x{8179}\x{817A}\x{817F}' .
-          '\x{8180}\x{8182}\x{8183}\x{8188}\x{818A}\x{818F}\x{8193}\x{8195}\x{819A}' .
-          '\x{819C}\x{819D}\x{81A0}\x{81A3}\x{81A4}\x{81A8}\x{81A9}\x{81B0}\x{81B3}' .
-          '\x{81B5}\x{81B8}\x{81BA}\x{81BD}\x{81BE}\x{81BF}\x{81C0}\x{81C2}\x{81C6}' .
-          '\x{81C8}\x{81C9}\x{81CD}\x{81D1}\x{81D3}\x{81D8}\x{81D9}\x{81DA}\x{81DF}' .
-          '\x{81E0}\x{81E3}\x{81E5}\x{81E7}\x{81E8}\x{81EA}\x{81ED}\x{81F3}\x{81F4}' .
-          '\x{81FA}\x{81FB}\x{81FC}\x{81FE}\x{8201}\x{8202}\x{8205}\x{8207}\x{8208}' .
-          '\x{8209}\x{820A}\x{820C}\x{820D}\x{820E}\x{8210}\x{8212}\x{8216}\x{8217}' .
-          '\x{8218}\x{821B}\x{821C}\x{821E}\x{821F}\x{8229}\x{822A}\x{822B}\x{822C}' .
-          '\x{822E}\x{8233}\x{8235}\x{8236}\x{8237}\x{8238}\x{8239}\x{8240}\x{8247}' .
-          '\x{8258}\x{8259}\x{825A}\x{825D}\x{825F}\x{8262}\x{8264}\x{8266}\x{8268}' .
-          '\x{826A}\x{826B}\x{826E}\x{826F}\x{8271}\x{8272}\x{8276}\x{8277}\x{8278}' .
-          '\x{827E}\x{828B}\x{828D}\x{8292}\x{8299}\x{829D}\x{829F}\x{82A5}\x{82A6}' .
-          '\x{82AB}\x{82AC}\x{82AD}\x{82AF}\x{82B1}\x{82B3}\x{82B8}\x{82B9}\x{82BB}' .
-          '\x{82BD}\x{82C5}\x{82D1}\x{82D2}\x{82D3}\x{82D4}\x{82D7}\x{82D9}\x{82DB}' .
-          '\x{82DC}\x{82DE}\x{82DF}\x{82E1}\x{82E3}\x{82E5}\x{82E6}\x{82E7}\x{82EB}' .
-          '\x{82F1}\x{82F3}\x{82F4}\x{82F9}\x{82FA}\x{82FB}\x{8302}\x{8303}\x{8304}' .
-          '\x{8305}\x{8306}\x{8309}\x{830E}\x{8316}\x{8317}\x{8318}\x{831C}\x{8323}' .
-          '\x{8328}\x{832B}\x{832F}\x{8331}\x{8332}\x{8334}\x{8335}\x{8336}\x{8338}' .
-          '\x{8339}\x{8340}\x{8345}\x{8349}\x{834A}\x{834F}\x{8350}\x{8352}\x{8358}' .
-          '\x{8373}\x{8375}\x{8377}\x{837B}\x{837C}\x{8385}\x{8387}\x{8389}\x{838A}' .
-          '\x{838E}\x{8393}\x{8396}\x{839A}\x{839E}\x{839F}\x{83A0}\x{83A2}\x{83A8}' .
-          '\x{83AA}\x{83AB}\x{83B1}\x{83B5}\x{83BD}\x{83C1}\x{83C5}\x{83CA}\x{83CC}' .
-          '\x{83CE}\x{83D3}\x{83D6}\x{83D8}\x{83DC}\x{83DF}\x{83E0}\x{83E9}\x{83EB}' .
-          '\x{83EF}\x{83F0}\x{83F1}\x{83F2}\x{83F4}\x{83F7}\x{83FB}\x{83FD}\x{8403}' .
-          '\x{8404}\x{8407}\x{840B}\x{840C}\x{840D}\x{840E}\x{8413}\x{8420}\x{8422}' .
-          '\x{8429}\x{842A}\x{842C}\x{8431}\x{8435}\x{8438}\x{843C}\x{843D}\x{8446}' .
-          '\x{8449}\x{844E}\x{8457}\x{845B}\x{8461}\x{8462}\x{8463}\x{8466}\x{8469}' .
-          '\x{846B}\x{846C}\x{846D}\x{846E}\x{846F}\x{8471}\x{8475}\x{8477}\x{8479}' .
-          '\x{847A}\x{8482}\x{8484}\x{848B}\x{8490}\x{8494}\x{8499}\x{849C}\x{849F}' .
-          '\x{84A1}\x{84AD}\x{84B2}\x{84B8}\x{84B9}\x{84BB}\x{84BC}\x{84BF}\x{84C1}' .
-          '\x{84C4}\x{84C6}\x{84C9}\x{84CA}\x{84CB}\x{84CD}\x{84D0}\x{84D1}\x{84D6}' .
-          '\x{84D9}\x{84DA}\x{84EC}\x{84EE}\x{84F4}\x{84FC}\x{84FF}\x{8500}\x{8506}' .
-          '\x{8511}\x{8513}\x{8514}\x{8515}\x{8517}\x{8518}\x{851A}\x{851F}\x{8521}' .
-          '\x{8526}\x{852C}\x{852D}\x{8535}\x{853D}\x{8540}\x{8541}\x{8543}\x{8548}' .
-          '\x{8549}\x{854A}\x{854B}\x{854E}\x{8555}\x{8557}\x{8558}\x{855A}\x{8563}' .
-          '\x{8568}\x{8569}\x{856A}\x{856D}\x{8577}\x{857E}\x{8580}\x{8584}\x{8587}' .
-          '\x{8588}\x{858A}\x{8590}\x{8591}\x{8594}\x{8597}\x{8599}\x{859B}\x{859C}' .
-          '\x{85A4}\x{85A6}\x{85A8}\x{85A9}\x{85AA}\x{85AB}\x{85AC}\x{85AE}\x{85AF}' .
-          '\x{85B9}\x{85BA}\x{85C1}\x{85C9}\x{85CD}\x{85CF}\x{85D0}\x{85D5}\x{85DC}' .
-          '\x{85DD}\x{85E4}\x{85E5}\x{85E9}\x{85EA}\x{85F7}\x{85F9}\x{85FA}\x{85FB}' .
-          '\x{85FE}\x{8602}\x{8606}\x{8607}\x{860A}\x{860B}\x{8613}\x{8616}\x{8617}' .
-          '\x{861A}\x{8622}\x{862D}\x{862F}\x{8630}\x{863F}\x{864D}\x{864E}\x{8650}' .
-          '\x{8654}\x{8655}\x{865A}\x{865C}\x{865E}\x{865F}\x{8667}\x{866B}\x{8671}' .
-          '\x{8679}\x{867B}\x{868A}\x{868B}\x{868C}\x{8693}\x{8695}\x{86A3}\x{86A4}' .
-          '\x{86A9}\x{86AA}\x{86AB}\x{86AF}\x{86B0}\x{86B6}\x{86C4}\x{86C6}\x{86C7}' .
-          '\x{86C9}\x{86CB}\x{86CD}\x{86CE}\x{86D4}\x{86D9}\x{86DB}\x{86DE}\x{86DF}' .
-          '\x{86E4}\x{86E9}\x{86EC}\x{86ED}\x{86EE}\x{86EF}\x{86F8}\x{86F9}\x{86FB}' .
-          '\x{86FE}\x{8700}\x{8702}\x{8703}\x{8706}\x{8708}\x{8709}\x{870A}\x{870D}' .
-          '\x{8711}\x{8712}\x{8718}\x{871A}\x{871C}\x{8725}\x{8729}\x{8734}\x{8737}' .
-          '\x{873B}\x{873F}\x{8749}\x{874B}\x{874C}\x{874E}\x{8753}\x{8755}\x{8757}' .
-          '\x{8759}\x{875F}\x{8760}\x{8763}\x{8766}\x{8768}\x{876A}\x{876E}\x{8774}' .
-          '\x{8776}\x{8778}\x{877F}\x{8782}\x{878D}\x{879F}\x{87A2}\x{87AB}\x{87AF}' .
-          '\x{87B3}\x{87BA}\x{87BB}\x{87BD}\x{87C0}\x{87C4}\x{87C6}\x{87C7}\x{87CB}' .
-          '\x{87D0}\x{87D2}\x{87E0}\x{87EF}\x{87F2}\x{87F6}\x{87F7}\x{87F9}\x{87FB}' .
-          '\x{87FE}\x{8805}\x{880D}\x{880E}\x{880F}\x{8811}\x{8815}\x{8816}\x{8821}' .
-          '\x{8822}\x{8823}\x{8827}\x{8831}\x{8836}\x{8839}\x{883B}\x{8840}\x{8842}' .
-          '\x{8844}\x{8846}\x{884C}\x{884D}\x{8852}\x{8853}\x{8857}\x{8859}\x{885B}' .
-          '\x{885D}\x{885E}\x{8861}\x{8862}\x{8863}\x{8868}\x{886B}\x{8870}\x{8872}' .
-          '\x{8875}\x{8877}\x{887D}\x{887E}\x{887F}\x{8881}\x{8882}\x{8888}\x{888B}' .
-          '\x{888D}\x{8892}\x{8896}\x{8897}\x{8899}\x{889E}\x{88A2}\x{88A4}\x{88AB}' .
-          '\x{88AE}\x{88B0}\x{88B1}\x{88B4}\x{88B5}\x{88B7}\x{88BF}\x{88C1}\x{88C2}' .
-          '\x{88C3}\x{88C4}\x{88C5}\x{88CF}\x{88D4}\x{88D5}\x{88D8}\x{88D9}\x{88DC}' .
-          '\x{88DD}\x{88DF}\x{88E1}\x{88E8}\x{88F2}\x{88F3}\x{88F4}\x{88F8}\x{88F9}' .
-          '\x{88FC}\x{88FD}\x{88FE}\x{8902}\x{8904}\x{8907}\x{890A}\x{890C}\x{8910}' .
-          '\x{8912}\x{8913}\x{891D}\x{891E}\x{8925}\x{892A}\x{892B}\x{8936}\x{8938}' .
-          '\x{893B}\x{8941}\x{8943}\x{8944}\x{894C}\x{894D}\x{8956}\x{895E}\x{895F}' .
-          '\x{8960}\x{8964}\x{8966}\x{896A}\x{896D}\x{896F}\x{8972}\x{8974}\x{8977}' .
-          '\x{897E}\x{897F}\x{8981}\x{8983}\x{8986}\x{8987}\x{8988}\x{898A}\x{898B}' .
-          '\x{898F}\x{8993}\x{8996}\x{8997}\x{8998}\x{899A}\x{89A1}\x{89A6}\x{89A7}' .
-          '\x{89A9}\x{89AA}\x{89AC}\x{89AF}\x{89B2}\x{89B3}\x{89BA}\x{89BD}\x{89BF}' .
-          '\x{89C0}\x{89D2}\x{89DA}\x{89DC}\x{89DD}\x{89E3}\x{89E6}\x{89E7}\x{89F4}' .
-          '\x{89F8}\x{8A00}\x{8A02}\x{8A03}\x{8A08}\x{8A0A}\x{8A0C}\x{8A0E}\x{8A10}' .
-          '\x{8A13}\x{8A16}\x{8A17}\x{8A18}\x{8A1B}\x{8A1D}\x{8A1F}\x{8A23}\x{8A25}' .
-          '\x{8A2A}\x{8A2D}\x{8A31}\x{8A33}\x{8A34}\x{8A36}\x{8A3A}\x{8A3B}\x{8A3C}' .
-          '\x{8A41}\x{8A46}\x{8A48}\x{8A50}\x{8A51}\x{8A52}\x{8A54}\x{8A55}\x{8A5B}' .
-          '\x{8A5E}\x{8A60}\x{8A62}\x{8A63}\x{8A66}\x{8A69}\x{8A6B}\x{8A6C}\x{8A6D}' .
-          '\x{8A6E}\x{8A70}\x{8A71}\x{8A72}\x{8A73}\x{8A7C}\x{8A82}\x{8A84}\x{8A85}' .
-          '\x{8A87}\x{8A89}\x{8A8C}\x{8A8D}\x{8A91}\x{8A93}\x{8A95}\x{8A98}\x{8A9A}' .
-          '\x{8A9E}\x{8AA0}\x{8AA1}\x{8AA3}\x{8AA4}\x{8AA5}\x{8AA6}\x{8AA8}\x{8AAC}' .
-          '\x{8AAD}\x{8AB0}\x{8AB2}\x{8AB9}\x{8ABC}\x{8ABF}\x{8AC2}\x{8AC4}\x{8AC7}' .
-          '\x{8ACB}\x{8ACC}\x{8ACD}\x{8ACF}\x{8AD2}\x{8AD6}\x{8ADA}\x{8ADB}\x{8ADC}' .
-          '\x{8ADE}\x{8AE0}\x{8AE1}\x{8AE2}\x{8AE4}\x{8AE6}\x{8AE7}\x{8AEB}\x{8AED}' .
-          '\x{8AEE}\x{8AF1}\x{8AF3}\x{8AF7}\x{8AF8}\x{8AFA}\x{8AFE}\x{8B00}\x{8B01}' .
-          '\x{8B02}\x{8B04}\x{8B07}\x{8B0C}\x{8B0E}\x{8B10}\x{8B14}\x{8B16}\x{8B17}' .
-          '\x{8B19}\x{8B1A}\x{8B1B}\x{8B1D}\x{8B20}\x{8B21}\x{8B26}\x{8B28}\x{8B2B}' .
-          '\x{8B2C}\x{8B33}\x{8B39}\x{8B3E}\x{8B41}\x{8B49}\x{8B4C}\x{8B4E}\x{8B4F}' .
-          '\x{8B56}\x{8B58}\x{8B5A}\x{8B5B}\x{8B5C}\x{8B5F}\x{8B66}\x{8B6B}\x{8B6C}' .
-          '\x{8B6F}\x{8B70}\x{8B71}\x{8B72}\x{8B74}\x{8B77}\x{8B7D}\x{8B80}\x{8B83}' .
-          '\x{8B8A}\x{8B8C}\x{8B8E}\x{8B90}\x{8B92}\x{8B93}\x{8B96}\x{8B99}\x{8B9A}' .
-          '\x{8C37}\x{8C3A}\x{8C3F}\x{8C41}\x{8C46}\x{8C48}\x{8C4A}\x{8C4C}\x{8C4E}' .
-          '\x{8C50}\x{8C55}\x{8C5A}\x{8C61}\x{8C62}\x{8C6A}\x{8C6B}\x{8C6C}\x{8C78}' .
-          '\x{8C79}\x{8C7A}\x{8C7C}\x{8C82}\x{8C85}\x{8C89}\x{8C8A}\x{8C8C}\x{8C8D}' .
-          '\x{8C8E}\x{8C94}\x{8C98}\x{8C9D}\x{8C9E}\x{8CA0}\x{8CA1}\x{8CA2}\x{8CA7}' .
-          '\x{8CA8}\x{8CA9}\x{8CAA}\x{8CAB}\x{8CAC}\x{8CAD}\x{8CAE}\x{8CAF}\x{8CB0}' .
-          '\x{8CB2}\x{8CB3}\x{8CB4}\x{8CB6}\x{8CB7}\x{8CB8}\x{8CBB}\x{8CBC}\x{8CBD}' .
-          '\x{8CBF}\x{8CC0}\x{8CC1}\x{8CC2}\x{8CC3}\x{8CC4}\x{8CC7}\x{8CC8}\x{8CCA}' .
-          '\x{8CCD}\x{8CCE}\x{8CD1}\x{8CD3}\x{8CDA}\x{8CDB}\x{8CDC}\x{8CDE}\x{8CE0}' .
-          '\x{8CE2}\x{8CE3}\x{8CE4}\x{8CE6}\x{8CEA}\x{8CED}\x{8CFA}\x{8CFB}\x{8CFC}' .
-          '\x{8CFD}\x{8D04}\x{8D05}\x{8D07}\x{8D08}\x{8D0A}\x{8D0B}\x{8D0D}\x{8D0F}' .
-          '\x{8D10}\x{8D13}\x{8D14}\x{8D16}\x{8D64}\x{8D66}\x{8D67}\x{8D6B}\x{8D6D}' .
-          '\x{8D70}\x{8D71}\x{8D73}\x{8D74}\x{8D77}\x{8D81}\x{8D85}\x{8D8A}\x{8D99}' .
-          '\x{8DA3}\x{8DA8}\x{8DB3}\x{8DBA}\x{8DBE}\x{8DC2}\x{8DCB}\x{8DCC}\x{8DCF}' .
-          '\x{8DD6}\x{8DDA}\x{8DDB}\x{8DDD}\x{8DDF}\x{8DE1}\x{8DE3}\x{8DE8}\x{8DEA}' .
-          '\x{8DEB}\x{8DEF}\x{8DF3}\x{8DF5}\x{8DFC}\x{8DFF}\x{8E08}\x{8E09}\x{8E0A}' .
-          '\x{8E0F}\x{8E10}\x{8E1D}\x{8E1E}\x{8E1F}\x{8E2A}\x{8E30}\x{8E34}\x{8E35}' .
-          '\x{8E42}\x{8E44}\x{8E47}\x{8E48}\x{8E49}\x{8E4A}\x{8E4C}\x{8E50}\x{8E55}' .
-          '\x{8E59}\x{8E5F}\x{8E60}\x{8E63}\x{8E64}\x{8E72}\x{8E74}\x{8E76}\x{8E7C}' .
-          '\x{8E81}\x{8E84}\x{8E85}\x{8E87}\x{8E8A}\x{8E8B}\x{8E8D}\x{8E91}\x{8E93}' .
-          '\x{8E94}\x{8E99}\x{8EA1}\x{8EAA}\x{8EAB}\x{8EAC}\x{8EAF}\x{8EB0}\x{8EB1}' .
-          '\x{8EBE}\x{8EC5}\x{8EC6}\x{8EC8}\x{8ECA}\x{8ECB}\x{8ECC}\x{8ECD}\x{8ED2}' .
-          '\x{8EDB}\x{8EDF}\x{8EE2}\x{8EE3}\x{8EEB}\x{8EF8}\x{8EFB}\x{8EFC}\x{8EFD}' .
-          '\x{8EFE}\x{8F03}\x{8F05}\x{8F09}\x{8F0A}\x{8F0C}\x{8F12}\x{8F13}\x{8F14}' .
-          '\x{8F15}\x{8F19}\x{8F1B}\x{8F1C}\x{8F1D}\x{8F1F}\x{8F26}\x{8F29}\x{8F2A}' .
-          '\x{8F2F}\x{8F33}\x{8F38}\x{8F39}\x{8F3B}\x{8F3E}\x{8F3F}\x{8F42}\x{8F44}' .
-          '\x{8F45}\x{8F46}\x{8F49}\x{8F4C}\x{8F4D}\x{8F4E}\x{8F57}\x{8F5C}\x{8F5F}' .
-          '\x{8F61}\x{8F62}\x{8F63}\x{8F64}\x{8F9B}\x{8F9C}\x{8F9E}\x{8F9F}\x{8FA3}' .
-          '\x{8FA7}\x{8FA8}\x{8FAD}\x{8FAE}\x{8FAF}\x{8FB0}\x{8FB1}\x{8FB2}\x{8FB7}' .
-          '\x{8FBA}\x{8FBB}\x{8FBC}\x{8FBF}\x{8FC2}\x{8FC4}\x{8FC5}\x{8FCE}\x{8FD1}' .
-          '\x{8FD4}\x{8FDA}\x{8FE2}\x{8FE5}\x{8FE6}\x{8FE9}\x{8FEA}\x{8FEB}\x{8FED}' .
-          '\x{8FEF}\x{8FF0}\x{8FF4}\x{8FF7}\x{8FF8}\x{8FF9}\x{8FFA}\x{8FFD}\x{9000}' .
-          '\x{9001}\x{9003}\x{9005}\x{9006}\x{900B}\x{900D}\x{900E}\x{900F}\x{9010}' .
-          '\x{9011}\x{9013}\x{9014}\x{9015}\x{9016}\x{9017}\x{9019}\x{901A}\x{901D}' .
-          '\x{901E}\x{901F}\x{9020}\x{9021}\x{9022}\x{9023}\x{9027}\x{902E}\x{9031}' .
-          '\x{9032}\x{9035}\x{9036}\x{9038}\x{9039}\x{903C}\x{903E}\x{9041}\x{9042}' .
-          '\x{9045}\x{9047}\x{9049}\x{904A}\x{904B}\x{904D}\x{904E}\x{904F}\x{9050}' .
-          '\x{9051}\x{9052}\x{9053}\x{9054}\x{9055}\x{9056}\x{9058}\x{9059}\x{905C}' .
-          '\x{905E}\x{9060}\x{9061}\x{9063}\x{9065}\x{9068}\x{9069}\x{906D}\x{906E}' .
-          '\x{906F}\x{9072}\x{9075}\x{9076}\x{9077}\x{9078}\x{907A}\x{907C}\x{907D}' .
-          '\x{907F}\x{9080}\x{9081}\x{9082}\x{9083}\x{9084}\x{9087}\x{9089}\x{908A}' .
-          '\x{908F}\x{9091}\x{90A3}\x{90A6}\x{90A8}\x{90AA}\x{90AF}\x{90B1}\x{90B5}' .
-          '\x{90B8}\x{90C1}\x{90CA}\x{90CE}\x{90DB}\x{90E1}\x{90E2}\x{90E4}\x{90E8}' .
-          '\x{90ED}\x{90F5}\x{90F7}\x{90FD}\x{9102}\x{9112}\x{9119}\x{912D}\x{9130}' .
-          '\x{9132}\x{9149}\x{914A}\x{914B}\x{914C}\x{914D}\x{914E}\x{9152}\x{9154}' .
-          '\x{9156}\x{9158}\x{9162}\x{9163}\x{9165}\x{9169}\x{916A}\x{916C}\x{9172}' .
-          '\x{9173}\x{9175}\x{9177}\x{9178}\x{9182}\x{9187}\x{9189}\x{918B}\x{918D}' .
-          '\x{9190}\x{9192}\x{9197}\x{919C}\x{91A2}\x{91A4}\x{91AA}\x{91AB}\x{91AF}' .
-          '\x{91B4}\x{91B5}\x{91B8}\x{91BA}\x{91C0}\x{91C1}\x{91C6}\x{91C7}\x{91C8}' .
-          '\x{91C9}\x{91CB}\x{91CC}\x{91CD}\x{91CE}\x{91CF}\x{91D0}\x{91D1}\x{91D6}' .
-          '\x{91D8}\x{91DB}\x{91DC}\x{91DD}\x{91DF}\x{91E1}\x{91E3}\x{91E6}\x{91E7}' .
-          '\x{91F5}\x{91F6}\x{91FC}\x{91FF}\x{920D}\x{920E}\x{9211}\x{9214}\x{9215}' .
-          '\x{921E}\x{9229}\x{922C}\x{9234}\x{9237}\x{923F}\x{9244}\x{9245}\x{9248}' .
-          '\x{9249}\x{924B}\x{9250}\x{9257}\x{925A}\x{925B}\x{925E}\x{9262}\x{9264}' .
-          '\x{9266}\x{9271}\x{927E}\x{9280}\x{9283}\x{9285}\x{9291}\x{9293}\x{9295}' .
-          '\x{9296}\x{9298}\x{929A}\x{929B}\x{929C}\x{92AD}\x{92B7}\x{92B9}\x{92CF}' .
-          '\x{92D2}\x{92E4}\x{92E9}\x{92EA}\x{92ED}\x{92F2}\x{92F3}\x{92F8}\x{92FA}' .
-          '\x{92FC}\x{9306}\x{930F}\x{9310}\x{9318}\x{9319}\x{931A}\x{9320}\x{9322}' .
-          '\x{9323}\x{9326}\x{9328}\x{932B}\x{932C}\x{932E}\x{932F}\x{9332}\x{9335}' .
-          '\x{933A}\x{933B}\x{9344}\x{934B}\x{934D}\x{9354}\x{9356}\x{935B}\x{935C}' .
-          '\x{9360}\x{936C}\x{936E}\x{9375}\x{937C}\x{937E}\x{938C}\x{9394}\x{9396}' .
-          '\x{9397}\x{939A}\x{93A7}\x{93AC}\x{93AD}\x{93AE}\x{93B0}\x{93B9}\x{93C3}' .
-          '\x{93C8}\x{93D0}\x{93D1}\x{93D6}\x{93D7}\x{93D8}\x{93DD}\x{93E1}\x{93E4}' .
-          '\x{93E5}\x{93E8}\x{9403}\x{9407}\x{9410}\x{9413}\x{9414}\x{9418}\x{9419}' .
-          '\x{941A}\x{9421}\x{942B}\x{9435}\x{9436}\x{9438}\x{943A}\x{9441}\x{9444}' .
-          '\x{9451}\x{9452}\x{9453}\x{945A}\x{945B}\x{945E}\x{9460}\x{9462}\x{946A}' .
-          '\x{9470}\x{9475}\x{9477}\x{947C}\x{947D}\x{947E}\x{947F}\x{9481}\x{9577}' .
-          '\x{9580}\x{9582}\x{9583}\x{9587}\x{9589}\x{958A}\x{958B}\x{958F}\x{9591}' .
-          '\x{9593}\x{9594}\x{9596}\x{9598}\x{9599}\x{95A0}\x{95A2}\x{95A3}\x{95A4}' .
-          '\x{95A5}\x{95A7}\x{95A8}\x{95AD}\x{95B2}\x{95B9}\x{95BB}\x{95BC}\x{95BE}' .
-          '\x{95C3}\x{95C7}\x{95CA}\x{95CC}\x{95CD}\x{95D4}\x{95D5}\x{95D6}\x{95D8}' .
-          '\x{95DC}\x{95E1}\x{95E2}\x{95E5}\x{961C}\x{9621}\x{9628}\x{962A}\x{962E}' .
-          '\x{962F}\x{9632}\x{963B}\x{963F}\x{9640}\x{9642}\x{9644}\x{964B}\x{964C}' .
-          '\x{964D}\x{964F}\x{9650}\x{965B}\x{965C}\x{965D}\x{965E}\x{965F}\x{9662}' .
-          '\x{9663}\x{9664}\x{9665}\x{9666}\x{966A}\x{966C}\x{9670}\x{9672}\x{9673}' .
-          '\x{9675}\x{9676}\x{9677}\x{9678}\x{967A}\x{967D}\x{9685}\x{9686}\x{9688}' .
-          '\x{968A}\x{968B}\x{968D}\x{968E}\x{968F}\x{9694}\x{9695}\x{9697}\x{9698}' .
-          '\x{9699}\x{969B}\x{969C}\x{96A0}\x{96A3}\x{96A7}\x{96A8}\x{96AA}\x{96B0}' .
-          '\x{96B1}\x{96B2}\x{96B4}\x{96B6}\x{96B7}\x{96B8}\x{96B9}\x{96BB}\x{96BC}' .
-          '\x{96C0}\x{96C1}\x{96C4}\x{96C5}\x{96C6}\x{96C7}\x{96C9}\x{96CB}\x{96CC}' .
-          '\x{96CD}\x{96CE}\x{96D1}\x{96D5}\x{96D6}\x{96D9}\x{96DB}\x{96DC}\x{96E2}' .
-          '\x{96E3}\x{96E8}\x{96EA}\x{96EB}\x{96F0}\x{96F2}\x{96F6}\x{96F7}\x{96F9}' .
-          '\x{96FB}\x{9700}\x{9704}\x{9706}\x{9707}\x{9708}\x{970A}\x{970D}\x{970E}' .
-          '\x{970F}\x{9711}\x{9713}\x{9716}\x{9719}\x{971C}\x{971E}\x{9724}\x{9727}' .
-          '\x{972A}\x{9730}\x{9732}\x{9738}\x{9739}\x{973D}\x{973E}\x{9742}\x{9744}' .
-          '\x{9746}\x{9748}\x{9749}\x{9752}\x{9756}\x{9759}\x{975C}\x{975E}\x{9760}' .
-          '\x{9761}\x{9762}\x{9764}\x{9766}\x{9768}\x{9769}\x{976B}\x{976D}\x{9771}' .
-          '\x{9774}\x{9779}\x{977A}\x{977C}\x{9781}\x{9784}\x{9785}\x{9786}\x{978B}' .
-          '\x{978D}\x{978F}\x{9790}\x{9798}\x{979C}\x{97A0}\x{97A3}\x{97A6}\x{97A8}' .
-          '\x{97AB}\x{97AD}\x{97B3}\x{97B4}\x{97C3}\x{97C6}\x{97C8}\x{97CB}\x{97D3}' .
-          '\x{97DC}\x{97ED}\x{97EE}\x{97F2}\x{97F3}\x{97F5}\x{97F6}\x{97FB}\x{97FF}' .
-          '\x{9801}\x{9802}\x{9803}\x{9805}\x{9806}\x{9808}\x{980C}\x{980F}\x{9810}' .
-          '\x{9811}\x{9812}\x{9813}\x{9817}\x{9818}\x{981A}\x{9821}\x{9824}\x{982C}' .
-          '\x{982D}\x{9834}\x{9837}\x{9838}\x{983B}\x{983C}\x{983D}\x{9846}\x{984B}' .
-          '\x{984C}\x{984D}\x{984E}\x{984F}\x{9854}\x{9855}\x{9858}\x{985B}\x{985E}' .
-          '\x{9867}\x{986B}\x{986F}\x{9870}\x{9871}\x{9873}\x{9874}\x{98A8}\x{98AA}' .
-          '\x{98AF}\x{98B1}\x{98B6}\x{98C3}\x{98C4}\x{98C6}\x{98DB}\x{98DC}\x{98DF}' .
-          '\x{98E2}\x{98E9}\x{98EB}\x{98ED}\x{98EE}\x{98EF}\x{98F2}\x{98F4}\x{98FC}' .
-          '\x{98FD}\x{98FE}\x{9903}\x{9905}\x{9909}\x{990A}\x{990C}\x{9910}\x{9912}' .
-          '\x{9913}\x{9914}\x{9918}\x{991D}\x{991E}\x{9920}\x{9921}\x{9924}\x{9928}' .
-          '\x{992C}\x{992E}\x{993D}\x{993E}\x{9942}\x{9945}\x{9949}\x{994B}\x{994C}' .
-          '\x{9950}\x{9951}\x{9952}\x{9955}\x{9957}\x{9996}\x{9997}\x{9998}\x{9999}' .
-          '\x{99A5}\x{99A8}\x{99AC}\x{99AD}\x{99AE}\x{99B3}\x{99B4}\x{99BC}\x{99C1}' .
-          '\x{99C4}\x{99C5}\x{99C6}\x{99C8}\x{99D0}\x{99D1}\x{99D2}\x{99D5}\x{99D8}' .
-          '\x{99DB}\x{99DD}\x{99DF}\x{99E2}\x{99ED}\x{99EE}\x{99F1}\x{99F2}\x{99F8}' .
-          '\x{99FB}\x{99FF}\x{9A01}\x{9A05}\x{9A0E}\x{9A0F}\x{9A12}\x{9A13}\x{9A19}' .
-          '\x{9A28}\x{9A2B}\x{9A30}\x{9A37}\x{9A3E}\x{9A40}\x{9A42}\x{9A43}\x{9A45}' .
-          '\x{9A4D}\x{9A55}\x{9A57}\x{9A5A}\x{9A5B}\x{9A5F}\x{9A62}\x{9A64}\x{9A65}' .
-          '\x{9A69}\x{9A6A}\x{9A6B}\x{9AA8}\x{9AAD}\x{9AB0}\x{9AB8}\x{9ABC}\x{9AC0}' .
-          '\x{9AC4}\x{9ACF}\x{9AD1}\x{9AD3}\x{9AD4}\x{9AD8}\x{9ADE}\x{9ADF}\x{9AE2}' .
-          '\x{9AE3}\x{9AE6}\x{9AEA}\x{9AEB}\x{9AED}\x{9AEE}\x{9AEF}\x{9AF1}\x{9AF4}' .
-          '\x{9AF7}\x{9AFB}\x{9B06}\x{9B18}\x{9B1A}\x{9B1F}\x{9B22}\x{9B23}\x{9B25}' .
-          '\x{9B27}\x{9B28}\x{9B29}\x{9B2A}\x{9B2E}\x{9B2F}\x{9B31}\x{9B32}\x{9B3B}' .
-          '\x{9B3C}\x{9B41}\x{9B42}\x{9B43}\x{9B44}\x{9B45}\x{9B4D}\x{9B4E}\x{9B4F}' .
-          '\x{9B51}\x{9B54}\x{9B58}\x{9B5A}\x{9B6F}\x{9B74}\x{9B83}\x{9B8E}\x{9B91}' .
-          '\x{9B92}\x{9B93}\x{9B96}\x{9B97}\x{9B9F}\x{9BA0}\x{9BA8}\x{9BAA}\x{9BAB}' .
-          '\x{9BAD}\x{9BAE}\x{9BB4}\x{9BB9}\x{9BC0}\x{9BC6}\x{9BC9}\x{9BCA}\x{9BCF}' .
-          '\x{9BD1}\x{9BD2}\x{9BD4}\x{9BD6}\x{9BDB}\x{9BE1}\x{9BE2}\x{9BE3}\x{9BE4}' .
-          '\x{9BE8}\x{9BF0}\x{9BF1}\x{9BF2}\x{9BF5}\x{9C04}\x{9C06}\x{9C08}\x{9C09}' .
-          '\x{9C0A}\x{9C0C}\x{9C0D}\x{9C10}\x{9C12}\x{9C13}\x{9C14}\x{9C15}\x{9C1B}' .
-          '\x{9C21}\x{9C24}\x{9C25}\x{9C2D}\x{9C2E}\x{9C2F}\x{9C30}\x{9C32}\x{9C39}' .
-          '\x{9C3A}\x{9C3B}\x{9C3E}\x{9C46}\x{9C47}\x{9C48}\x{9C52}\x{9C57}\x{9C5A}' .
-          '\x{9C60}\x{9C67}\x{9C76}\x{9C78}\x{9CE5}\x{9CE7}\x{9CE9}\x{9CEB}\x{9CEC}' .
-          '\x{9CF0}\x{9CF3}\x{9CF4}\x{9CF6}\x{9D03}\x{9D06}\x{9D07}\x{9D08}\x{9D09}' .
-          '\x{9D0E}\x{9D12}\x{9D15}\x{9D1B}\x{9D1F}\x{9D23}\x{9D26}\x{9D28}\x{9D2A}' .
-          '\x{9D2B}\x{9D2C}\x{9D3B}\x{9D3E}\x{9D3F}\x{9D41}\x{9D44}\x{9D46}\x{9D48}' .
-          '\x{9D50}\x{9D51}\x{9D59}\x{9D5C}\x{9D5D}\x{9D5E}\x{9D60}\x{9D61}\x{9D64}' .
-          '\x{9D6C}\x{9D6F}\x{9D72}\x{9D7A}\x{9D87}\x{9D89}\x{9D8F}\x{9D9A}\x{9DA4}' .
-          '\x{9DA9}\x{9DAB}\x{9DAF}\x{9DB2}\x{9DB4}\x{9DB8}\x{9DBA}\x{9DBB}\x{9DC1}' .
-          '\x{9DC2}\x{9DC4}\x{9DC6}\x{9DCF}\x{9DD3}\x{9DD9}\x{9DE6}\x{9DED}\x{9DEF}' .
-          '\x{9DF2}\x{9DF8}\x{9DF9}\x{9DFA}\x{9DFD}\x{9E1A}\x{9E1B}\x{9E1E}\x{9E75}' .
-          '\x{9E78}\x{9E79}\x{9E7D}\x{9E7F}\x{9E81}\x{9E88}\x{9E8B}\x{9E8C}\x{9E91}' .
-          '\x{9E92}\x{9E93}\x{9E95}\x{9E97}\x{9E9D}\x{9E9F}\x{9EA5}\x{9EA6}\x{9EA9}' .
-          '\x{9EAA}\x{9EAD}\x{9EB8}\x{9EB9}\x{9EBA}\x{9EBB}\x{9EBC}\x{9EBE}\x{9EBF}' .
-          '\x{9EC4}\x{9ECC}\x{9ECD}\x{9ECE}\x{9ECF}\x{9ED0}\x{9ED2}\x{9ED4}\x{9ED8}' .
-          '\x{9ED9}\x{9EDB}\x{9EDC}\x{9EDD}\x{9EDE}\x{9EE0}\x{9EE5}\x{9EE8}\x{9EEF}' .
-          '\x{9EF4}\x{9EF6}\x{9EF7}\x{9EF9}\x{9EFB}\x{9EFC}\x{9EFD}\x{9F07}\x{9F08}' .
-          '\x{9F0E}\x{9F13}\x{9F15}\x{9F20}\x{9F21}\x{9F2C}\x{9F3B}\x{9F3E}\x{9F4A}' .
-          '\x{9F4B}\x{9F4E}\x{9F4F}\x{9F52}\x{9F54}\x{9F5F}\x{9F60}\x{9F61}\x{9F62}' .
-          '\x{9F63}\x{9F66}\x{9F67}\x{9F6A}\x{9F6C}\x{9F72}\x{9F76}\x{9F77}\x{9F8D}' .
-          '\x{9F95}\x{9F9C}\x{9F9D}\x{9FA0}]{1,15}$/iu',
-    12 => '/^[\x{002d}0-9a-z\x{3447}\x{3473}\x{359E}\x{360E}\x{361A}\x{3918}\x{396E}\x{39CF}\x{39D0}' .
-          '\x{39DF}\x{3A73}\x{3B4E}\x{3C6E}\x{3CE0}\x{4056}\x{415F}\x{4337}\x{43AC}' .
-          '\x{43B1}\x{43DD}\x{44D6}\x{464C}\x{4661}\x{4723}\x{4729}\x{477C}\x{478D}' .
-          '\x{4947}\x{497A}\x{497D}\x{4982}\x{4983}\x{4985}\x{4986}\x{499B}\x{499F}' .
-          '\x{49B6}\x{49B7}\x{4C77}\x{4C9F}\x{4CA0}\x{4CA1}\x{4CA2}\x{4CA3}\x{4D13}' .
-          '\x{4D14}\x{4D15}\x{4D16}\x{4D17}\x{4D18}\x{4D19}\x{4DAE}\x{4E00}\x{4E01}' .
-          '\x{4E02}\x{4E03}\x{4E04}\x{4E05}\x{4E06}\x{4E07}\x{4E08}\x{4E09}\x{4E0A}' .
-          '\x{4E0B}\x{4E0C}\x{4E0D}\x{4E0E}\x{4E0F}\x{4E10}\x{4E11}\x{4E13}\x{4E14}' .
-          '\x{4E15}\x{4E16}\x{4E17}\x{4E18}\x{4E19}\x{4E1A}\x{4E1B}\x{4E1C}\x{4E1D}' .
-          '\x{4E1E}\x{4E1F}\x{4E20}\x{4E21}\x{4E22}\x{4E23}\x{4E24}\x{4E25}\x{4E26}' .
-          '\x{4E27}\x{4E28}\x{4E2A}\x{4E2B}\x{4E2C}\x{4E2D}\x{4E2E}\x{4E2F}\x{4E30}' .
-          '\x{4E31}\x{4E32}\x{4E33}\x{4E34}\x{4E35}\x{4E36}\x{4E37}\x{4E38}\x{4E39}' .
-          '\x{4E3A}\x{4E3B}\x{4E3C}\x{4E3D}\x{4E3E}\x{4E3F}\x{4E40}\x{4E41}\x{4E42}' .
-          '\x{4E43}\x{4E44}\x{4E45}\x{4E46}\x{4E47}\x{4E48}\x{4E49}\x{4E4A}\x{4E4B}' .
-          '\x{4E4C}\x{4E4D}\x{4E4E}\x{4E4F}\x{4E50}\x{4E51}\x{4E52}\x{4E53}\x{4E54}' .
-          '\x{4E56}\x{4E57}\x{4E58}\x{4E59}\x{4E5A}\x{4E5B}\x{4E5C}\x{4E5D}\x{4E5E}' .
-          '\x{4E5F}\x{4E60}\x{4E61}\x{4E62}\x{4E63}\x{4E64}\x{4E65}\x{4E66}\x{4E67}' .
-          '\x{4E69}\x{4E6A}\x{4E6B}\x{4E6C}\x{4E6D}\x{4E6E}\x{4E6F}\x{4E70}\x{4E71}' .
-          '\x{4E72}\x{4E73}\x{4E74}\x{4E75}\x{4E76}\x{4E77}\x{4E78}\x{4E7A}\x{4E7B}' .
-          '\x{4E7C}\x{4E7D}\x{4E7E}\x{4E7F}\x{4E80}\x{4E81}\x{4E82}\x{4E83}\x{4E84}' .
-          '\x{4E85}\x{4E86}\x{4E87}\x{4E88}\x{4E89}\x{4E8B}\x{4E8C}\x{4E8D}\x{4E8E}' .
-          '\x{4E8F}\x{4E90}\x{4E91}\x{4E92}\x{4E93}\x{4E94}\x{4E95}\x{4E97}\x{4E98}' .
-          '\x{4E99}\x{4E9A}\x{4E9B}\x{4E9C}\x{4E9D}\x{4E9E}\x{4E9F}\x{4EA0}\x{4EA1}' .
-          '\x{4EA2}\x{4EA4}\x{4EA5}\x{4EA6}\x{4EA7}\x{4EA8}\x{4EA9}\x{4EAA}\x{4EAB}' .
-          '\x{4EAC}\x{4EAD}\x{4EAE}\x{4EAF}\x{4EB0}\x{4EB1}\x{4EB2}\x{4EB3}\x{4EB4}' .
-          '\x{4EB5}\x{4EB6}\x{4EB7}\x{4EB8}\x{4EB9}\x{4EBA}\x{4EBB}\x{4EBD}\x{4EBE}' .
-          '\x{4EBF}\x{4EC0}\x{4EC1}\x{4EC2}\x{4EC3}\x{4EC4}\x{4EC5}\x{4EC6}\x{4EC7}' .
-          '\x{4EC8}\x{4EC9}\x{4ECA}\x{4ECB}\x{4ECD}\x{4ECE}\x{4ECF}\x{4ED0}\x{4ED1}' .
-          '\x{4ED2}\x{4ED3}\x{4ED4}\x{4ED5}\x{4ED6}\x{4ED7}\x{4ED8}\x{4ED9}\x{4EDA}' .
-          '\x{4EDB}\x{4EDC}\x{4EDD}\x{4EDE}\x{4EDF}\x{4EE0}\x{4EE1}\x{4EE2}\x{4EE3}' .
-          '\x{4EE4}\x{4EE5}\x{4EE6}\x{4EE8}\x{4EE9}\x{4EEA}\x{4EEB}\x{4EEC}\x{4EEF}' .
-          '\x{4EF0}\x{4EF1}\x{4EF2}\x{4EF3}\x{4EF4}\x{4EF5}\x{4EF6}\x{4EF7}\x{4EFB}' .
-          '\x{4EFD}\x{4EFF}\x{4F00}\x{4F01}\x{4F02}\x{4F03}\x{4F04}\x{4F05}\x{4F06}' .
-          '\x{4F08}\x{4F09}\x{4F0A}\x{4F0B}\x{4F0C}\x{4F0D}\x{4F0E}\x{4F0F}\x{4F10}' .
-          '\x{4F11}\x{4F12}\x{4F13}\x{4F14}\x{4F15}\x{4F17}\x{4F18}\x{4F19}\x{4F1A}' .
-          '\x{4F1B}\x{4F1C}\x{4F1D}\x{4F1E}\x{4F1F}\x{4F20}\x{4F21}\x{4F22}\x{4F23}' .
-          '\x{4F24}\x{4F25}\x{4F26}\x{4F27}\x{4F29}\x{4F2A}\x{4F2B}\x{4F2C}\x{4F2D}' .
-          '\x{4F2E}\x{4F2F}\x{4F30}\x{4F32}\x{4F33}\x{4F34}\x{4F36}\x{4F38}\x{4F39}' .
-          '\x{4F3A}\x{4F3B}\x{4F3C}\x{4F3D}\x{4F3E}\x{4F3F}\x{4F41}\x{4F42}\x{4F43}' .
-          '\x{4F45}\x{4F46}\x{4F47}\x{4F48}\x{4F49}\x{4F4A}\x{4F4B}\x{4F4C}\x{4F4D}' .
-          '\x{4F4E}\x{4F4F}\x{4F50}\x{4F51}\x{4F52}\x{4F53}\x{4F54}\x{4F55}\x{4F56}' .
-          '\x{4F57}\x{4F58}\x{4F59}\x{4F5A}\x{4F5B}\x{4F5C}\x{4F5D}\x{4F5E}\x{4F5F}' .
-          '\x{4F60}\x{4F61}\x{4F62}\x{4F63}\x{4F64}\x{4F65}\x{4F66}\x{4F67}\x{4F68}' .
-          '\x{4F69}\x{4F6A}\x{4F6B}\x{4F6C}\x{4F6D}\x{4F6E}\x{4F6F}\x{4F70}\x{4F72}' .
-          '\x{4F73}\x{4F74}\x{4F75}\x{4F76}\x{4F77}\x{4F78}\x{4F79}\x{4F7A}\x{4F7B}' .
-          '\x{4F7C}\x{4F7D}\x{4F7E}\x{4F7F}\x{4F80}\x{4F81}\x{4F82}\x{4F83}\x{4F84}' .
-          '\x{4F85}\x{4F86}\x{4F87}\x{4F88}\x{4F89}\x{4F8A}\x{4F8B}\x{4F8D}\x{4F8F}' .
-          '\x{4F90}\x{4F91}\x{4F92}\x{4F93}\x{4F94}\x{4F95}\x{4F96}\x{4F97}\x{4F98}' .
-          '\x{4F99}\x{4F9A}\x{4F9B}\x{4F9C}\x{4F9D}\x{4F9E}\x{4F9F}\x{4FA0}\x{4FA1}' .
-          '\x{4FA3}\x{4FA4}\x{4FA5}\x{4FA6}\x{4FA7}\x{4FA8}\x{4FA9}\x{4FAA}\x{4FAB}' .
-          '\x{4FAC}\x{4FAE}\x{4FAF}\x{4FB0}\x{4FB1}\x{4FB2}\x{4FB3}\x{4FB4}\x{4FB5}' .
-          '\x{4FB6}\x{4FB7}\x{4FB8}\x{4FB9}\x{4FBA}\x{4FBB}\x{4FBC}\x{4FBE}\x{4FBF}' .
-          '\x{4FC0}\x{4FC1}\x{4FC2}\x{4FC3}\x{4FC4}\x{4FC5}\x{4FC7}\x{4FC9}\x{4FCA}' .
-          '\x{4FCB}\x{4FCD}\x{4FCE}\x{4FCF}\x{4FD0}\x{4FD1}\x{4FD2}\x{4FD3}\x{4FD4}' .
-          '\x{4FD5}\x{4FD6}\x{4FD7}\x{4FD8}\x{4FD9}\x{4FDA}\x{4FDB}\x{4FDC}\x{4FDD}' .
-          '\x{4FDE}\x{4FDF}\x{4FE0}\x{4FE1}\x{4FE3}\x{4FE4}\x{4FE5}\x{4FE6}\x{4FE7}' .
-          '\x{4FE8}\x{4FE9}\x{4FEA}\x{4FEB}\x{4FEC}\x{4FED}\x{4FEE}\x{4FEF}\x{4FF0}' .
-          '\x{4FF1}\x{4FF2}\x{4FF3}\x{4FF4}\x{4FF5}\x{4FF6}\x{4FF7}\x{4FF8}\x{4FF9}' .
-          '\x{4FFA}\x{4FFB}\x{4FFE}\x{4FFF}\x{5000}\x{5001}\x{5002}\x{5003}\x{5004}' .
-          '\x{5005}\x{5006}\x{5007}\x{5008}\x{5009}\x{500A}\x{500B}\x{500C}\x{500D}' .
-          '\x{500E}\x{500F}\x{5011}\x{5012}\x{5013}\x{5014}\x{5015}\x{5016}\x{5017}' .
-          '\x{5018}\x{5019}\x{501A}\x{501B}\x{501C}\x{501D}\x{501E}\x{501F}\x{5020}' .
-          '\x{5021}\x{5022}\x{5023}\x{5024}\x{5025}\x{5026}\x{5027}\x{5028}\x{5029}' .
-          '\x{502A}\x{502B}\x{502C}\x{502D}\x{502E}\x{502F}\x{5030}\x{5031}\x{5032}' .
-          '\x{5033}\x{5035}\x{5036}\x{5037}\x{5039}\x{503A}\x{503B}\x{503C}\x{503E}' .
-          '\x{503F}\x{5040}\x{5041}\x{5043}\x{5044}\x{5045}\x{5046}\x{5047}\x{5048}' .
-          '\x{5049}\x{504A}\x{504B}\x{504C}\x{504D}\x{504E}\x{504F}\x{5051}\x{5053}' .
-          '\x{5054}\x{5055}\x{5056}\x{5057}\x{5059}\x{505A}\x{505B}\x{505C}\x{505D}' .
-          '\x{505E}\x{505F}\x{5060}\x{5061}\x{5062}\x{5063}\x{5064}\x{5065}\x{5066}' .
-          '\x{5067}\x{5068}\x{5069}\x{506A}\x{506B}\x{506C}\x{506D}\x{506E}\x{506F}' .
-          '\x{5070}\x{5071}\x{5072}\x{5073}\x{5074}\x{5075}\x{5076}\x{5077}\x{5078}' .
-          '\x{5079}\x{507A}\x{507B}\x{507D}\x{507E}\x{507F}\x{5080}\x{5082}\x{5083}' .
-          '\x{5084}\x{5085}\x{5086}\x{5087}\x{5088}\x{5089}\x{508A}\x{508B}\x{508C}' .
-          '\x{508D}\x{508E}\x{508F}\x{5090}\x{5091}\x{5092}\x{5094}\x{5095}\x{5096}' .
-          '\x{5098}\x{5099}\x{509A}\x{509B}\x{509C}\x{509D}\x{509E}\x{50A2}\x{50A3}' .
-          '\x{50A4}\x{50A5}\x{50A6}\x{50A7}\x{50A8}\x{50A9}\x{50AA}\x{50AB}\x{50AC}' .
-          '\x{50AD}\x{50AE}\x{50AF}\x{50B0}\x{50B1}\x{50B2}\x{50B3}\x{50B4}\x{50B5}' .
-          '\x{50B6}\x{50B7}\x{50B8}\x{50BA}\x{50BB}\x{50BC}\x{50BD}\x{50BE}\x{50BF}' .
-          '\x{50C0}\x{50C1}\x{50C2}\x{50C4}\x{50C5}\x{50C6}\x{50C7}\x{50C8}\x{50C9}' .
-          '\x{50CA}\x{50CB}\x{50CC}\x{50CD}\x{50CE}\x{50CF}\x{50D0}\x{50D1}\x{50D2}' .
-          '\x{50D3}\x{50D4}\x{50D5}\x{50D6}\x{50D7}\x{50D9}\x{50DA}\x{50DB}\x{50DC}' .
-          '\x{50DD}\x{50DE}\x{50E0}\x{50E3}\x{50E4}\x{50E5}\x{50E6}\x{50E7}\x{50E8}' .
-          '\x{50E9}\x{50EA}\x{50EC}\x{50ED}\x{50EE}\x{50EF}\x{50F0}\x{50F1}\x{50F2}' .
-          '\x{50F3}\x{50F5}\x{50F6}\x{50F8}\x{50F9}\x{50FA}\x{50FB}\x{50FC}\x{50FD}' .
-          '\x{50FE}\x{50FF}\x{5100}\x{5101}\x{5102}\x{5103}\x{5104}\x{5105}\x{5106}' .
-          '\x{5107}\x{5108}\x{5109}\x{510A}\x{510B}\x{510C}\x{510D}\x{510E}\x{510F}' .
-          '\x{5110}\x{5111}\x{5112}\x{5113}\x{5114}\x{5115}\x{5116}\x{5117}\x{5118}' .
-          '\x{5119}\x{511A}\x{511C}\x{511D}\x{511E}\x{511F}\x{5120}\x{5121}\x{5122}' .
-          '\x{5123}\x{5124}\x{5125}\x{5126}\x{5127}\x{5129}\x{512A}\x{512C}\x{512D}' .
-          '\x{512E}\x{512F}\x{5130}\x{5131}\x{5132}\x{5133}\x{5134}\x{5135}\x{5136}' .
-          '\x{5137}\x{5138}\x{5139}\x{513A}\x{513B}\x{513C}\x{513D}\x{513E}\x{513F}' .
-          '\x{5140}\x{5141}\x{5143}\x{5144}\x{5145}\x{5146}\x{5147}\x{5148}\x{5149}' .
-          '\x{514B}\x{514C}\x{514D}\x{514E}\x{5150}\x{5151}\x{5152}\x{5154}\x{5155}' .
-          '\x{5156}\x{5157}\x{5159}\x{515A}\x{515B}\x{515C}\x{515D}\x{515E}\x{515F}' .
-          '\x{5161}\x{5162}\x{5163}\x{5165}\x{5166}\x{5167}\x{5168}\x{5169}\x{516A}' .
-          '\x{516B}\x{516C}\x{516D}\x{516E}\x{516F}\x{5170}\x{5171}\x{5173}\x{5174}' .
-          '\x{5175}\x{5176}\x{5177}\x{5178}\x{5179}\x{517A}\x{517B}\x{517C}\x{517D}' .
-          '\x{517F}\x{5180}\x{5181}\x{5182}\x{5185}\x{5186}\x{5187}\x{5188}\x{5189}' .
-          '\x{518A}\x{518B}\x{518C}\x{518D}\x{518F}\x{5190}\x{5191}\x{5192}\x{5193}' .
-          '\x{5194}\x{5195}\x{5196}\x{5197}\x{5198}\x{5199}\x{519A}\x{519B}\x{519C}' .
-          '\x{519D}\x{519E}\x{519F}\x{51A0}\x{51A2}\x{51A4}\x{51A5}\x{51A6}\x{51A7}' .
-          '\x{51A8}\x{51AA}\x{51AB}\x{51AC}\x{51AE}\x{51AF}\x{51B0}\x{51B1}\x{51B2}' .
-          '\x{51B3}\x{51B5}\x{51B6}\x{51B7}\x{51B9}\x{51BB}\x{51BC}\x{51BD}\x{51BE}' .
-          '\x{51BF}\x{51C0}\x{51C1}\x{51C3}\x{51C4}\x{51C5}\x{51C6}\x{51C7}\x{51C8}' .
-          '\x{51C9}\x{51CA}\x{51CB}\x{51CC}\x{51CD}\x{51CE}\x{51CF}\x{51D0}\x{51D1}' .
-          '\x{51D4}\x{51D5}\x{51D6}\x{51D7}\x{51D8}\x{51D9}\x{51DA}\x{51DB}\x{51DC}' .
-          '\x{51DD}\x{51DE}\x{51E0}\x{51E1}\x{51E2}\x{51E3}\x{51E4}\x{51E5}\x{51E7}' .
-          '\x{51E8}\x{51E9}\x{51EA}\x{51EB}\x{51ED}\x{51EF}\x{51F0}\x{51F1}\x{51F3}' .
-          '\x{51F4}\x{51F5}\x{51F6}\x{51F7}\x{51F8}\x{51F9}\x{51FA}\x{51FB}\x{51FC}' .
-          '\x{51FD}\x{51FE}\x{51FF}\x{5200}\x{5201}\x{5202}\x{5203}\x{5204}\x{5205}' .
-          '\x{5206}\x{5207}\x{5208}\x{5209}\x{520A}\x{520B}\x{520C}\x{520D}\x{520E}' .
-          '\x{520F}\x{5210}\x{5211}\x{5212}\x{5213}\x{5214}\x{5215}\x{5216}\x{5217}' .
-          '\x{5218}\x{5219}\x{521A}\x{521B}\x{521C}\x{521D}\x{521E}\x{521F}\x{5220}' .
-          '\x{5221}\x{5222}\x{5223}\x{5224}\x{5225}\x{5226}\x{5228}\x{5229}\x{522A}' .
-          '\x{522B}\x{522C}\x{522D}\x{522E}\x{522F}\x{5230}\x{5231}\x{5232}\x{5233}' .
-          '\x{5234}\x{5235}\x{5236}\x{5237}\x{5238}\x{5239}\x{523A}\x{523B}\x{523C}' .
-          '\x{523D}\x{523E}\x{523F}\x{5240}\x{5241}\x{5242}\x{5243}\x{5244}\x{5245}' .
-          '\x{5246}\x{5247}\x{5248}\x{5249}\x{524A}\x{524B}\x{524C}\x{524D}\x{524E}' .
-          '\x{5250}\x{5251}\x{5252}\x{5254}\x{5255}\x{5256}\x{5257}\x{5258}\x{5259}' .
-          '\x{525A}\x{525B}\x{525C}\x{525D}\x{525E}\x{525F}\x{5260}\x{5261}\x{5262}' .
-          '\x{5263}\x{5264}\x{5265}\x{5267}\x{5268}\x{5269}\x{526A}\x{526B}\x{526C}' .
-          '\x{526D}\x{526E}\x{526F}\x{5270}\x{5272}\x{5273}\x{5274}\x{5275}\x{5276}' .
-          '\x{5277}\x{5278}\x{527A}\x{527B}\x{527C}\x{527D}\x{527E}\x{527F}\x{5280}' .
-          '\x{5281}\x{5282}\x{5283}\x{5284}\x{5286}\x{5287}\x{5288}\x{5289}\x{528A}' .
-          '\x{528B}\x{528C}\x{528D}\x{528F}\x{5290}\x{5291}\x{5292}\x{5293}\x{5294}' .
-          '\x{5295}\x{5296}\x{5297}\x{5298}\x{5299}\x{529A}\x{529B}\x{529C}\x{529D}' .
-          '\x{529E}\x{529F}\x{52A0}\x{52A1}\x{52A2}\x{52A3}\x{52A5}\x{52A6}\x{52A7}' .
-          '\x{52A8}\x{52A9}\x{52AA}\x{52AB}\x{52AC}\x{52AD}\x{52AE}\x{52AF}\x{52B0}' .
-          '\x{52B1}\x{52B2}\x{52B3}\x{52B4}\x{52B5}\x{52B6}\x{52B7}\x{52B8}\x{52B9}' .
-          '\x{52BA}\x{52BB}\x{52BC}\x{52BD}\x{52BE}\x{52BF}\x{52C0}\x{52C1}\x{52C2}' .
-          '\x{52C3}\x{52C6}\x{52C7}\x{52C9}\x{52CA}\x{52CB}\x{52CD}\x{52CF}\x{52D0}' .
-          '\x{52D2}\x{52D3}\x{52D5}\x{52D6}\x{52D7}\x{52D8}\x{52D9}\x{52DA}\x{52DB}' .
-          '\x{52DC}\x{52DD}\x{52DE}\x{52DF}\x{52E0}\x{52E2}\x{52E3}\x{52E4}\x{52E6}' .
-          '\x{52E7}\x{52E8}\x{52E9}\x{52EA}\x{52EB}\x{52EC}\x{52ED}\x{52EF}\x{52F0}' .
-          '\x{52F1}\x{52F2}\x{52F3}\x{52F4}\x{52F5}\x{52F6}\x{52F7}\x{52F8}\x{52F9}' .
-          '\x{52FA}\x{52FB}\x{52FC}\x{52FD}\x{52FE}\x{52FF}\x{5300}\x{5301}\x{5302}' .
-          '\x{5305}\x{5306}\x{5307}\x{5308}\x{5309}\x{530A}\x{530B}\x{530C}\x{530D}' .
-          '\x{530E}\x{530F}\x{5310}\x{5311}\x{5312}\x{5313}\x{5314}\x{5315}\x{5316}' .
-          '\x{5317}\x{5319}\x{531A}\x{531C}\x{531D}\x{531F}\x{5320}\x{5321}\x{5322}' .
-          '\x{5323}\x{5324}\x{5325}\x{5326}\x{5328}\x{532A}\x{532B}\x{532C}\x{532D}' .
-          '\x{532E}\x{532F}\x{5330}\x{5331}\x{5333}\x{5334}\x{5337}\x{5339}\x{533A}' .
-          '\x{533B}\x{533C}\x{533D}\x{533E}\x{533F}\x{5340}\x{5341}\x{5343}\x{5344}' .
-          '\x{5345}\x{5346}\x{5347}\x{5348}\x{5349}\x{534A}\x{534B}\x{534C}\x{534D}' .
-          '\x{534E}\x{534F}\x{5350}\x{5351}\x{5352}\x{5353}\x{5354}\x{5355}\x{5356}' .
-          '\x{5357}\x{5358}\x{5359}\x{535A}\x{535C}\x{535E}\x{535F}\x{5360}\x{5361}' .
-          '\x{5362}\x{5363}\x{5364}\x{5365}\x{5366}\x{5367}\x{5369}\x{536B}\x{536C}' .
-          '\x{536E}\x{536F}\x{5370}\x{5371}\x{5372}\x{5373}\x{5374}\x{5375}\x{5376}' .
-          '\x{5377}\x{5378}\x{5379}\x{537A}\x{537B}\x{537C}\x{537D}\x{537E}\x{537F}' .
-          '\x{5381}\x{5382}\x{5383}\x{5384}\x{5385}\x{5386}\x{5387}\x{5388}\x{5389}' .
-          '\x{538A}\x{538B}\x{538C}\x{538D}\x{538E}\x{538F}\x{5390}\x{5391}\x{5392}' .
-          '\x{5393}\x{5394}\x{5395}\x{5396}\x{5397}\x{5398}\x{5399}\x{539A}\x{539B}' .
-          '\x{539C}\x{539D}\x{539E}\x{539F}\x{53A0}\x{53A2}\x{53A3}\x{53A4}\x{53A5}' .
-          '\x{53A6}\x{53A7}\x{53A8}\x{53A9}\x{53AC}\x{53AD}\x{53AE}\x{53B0}\x{53B1}' .
-          '\x{53B2}\x{53B3}\x{53B4}\x{53B5}\x{53B6}\x{53B7}\x{53B8}\x{53B9}\x{53BB}' .
-          '\x{53BC}\x{53BD}\x{53BE}\x{53BF}\x{53C0}\x{53C1}\x{53C2}\x{53C3}\x{53C4}' .
-          '\x{53C6}\x{53C7}\x{53C8}\x{53C9}\x{53CA}\x{53CB}\x{53CC}\x{53CD}\x{53CE}' .
-          '\x{53D0}\x{53D1}\x{53D2}\x{53D3}\x{53D4}\x{53D5}\x{53D6}\x{53D7}\x{53D8}' .
-          '\x{53D9}\x{53DB}\x{53DC}\x{53DF}\x{53E0}\x{53E1}\x{53E2}\x{53E3}\x{53E4}' .
-          '\x{53E5}\x{53E6}\x{53E8}\x{53E9}\x{53EA}\x{53EB}\x{53EC}\x{53ED}\x{53EE}' .
-          '\x{53EF}\x{53F0}\x{53F1}\x{53F2}\x{53F3}\x{53F4}\x{53F5}\x{53F6}\x{53F7}' .
-          '\x{53F8}\x{53F9}\x{53FA}\x{53FB}\x{53FC}\x{53FD}\x{53FE}\x{5401}\x{5402}' .
-          '\x{5403}\x{5404}\x{5405}\x{5406}\x{5407}\x{5408}\x{5409}\x{540A}\x{540B}' .
-          '\x{540C}\x{540D}\x{540E}\x{540F}\x{5410}\x{5411}\x{5412}\x{5413}\x{5414}' .
-          '\x{5415}\x{5416}\x{5417}\x{5418}\x{5419}\x{541B}\x{541C}\x{541D}\x{541E}' .
-          '\x{541F}\x{5420}\x{5421}\x{5423}\x{5424}\x{5425}\x{5426}\x{5427}\x{5428}' .
-          '\x{5429}\x{542A}\x{542B}\x{542C}\x{542D}\x{542E}\x{542F}\x{5430}\x{5431}' .
-          '\x{5432}\x{5433}\x{5434}\x{5435}\x{5436}\x{5437}\x{5438}\x{5439}\x{543A}' .
-          '\x{543B}\x{543C}\x{543D}\x{543E}\x{543F}\x{5440}\x{5441}\x{5442}\x{5443}' .
-          '\x{5444}\x{5445}\x{5446}\x{5447}\x{5448}\x{5449}\x{544A}\x{544B}\x{544D}' .
-          '\x{544E}\x{544F}\x{5450}\x{5451}\x{5452}\x{5453}\x{5454}\x{5455}\x{5456}' .
-          '\x{5457}\x{5458}\x{5459}\x{545A}\x{545B}\x{545C}\x{545E}\x{545F}\x{5460}' .
-          '\x{5461}\x{5462}\x{5463}\x{5464}\x{5465}\x{5466}\x{5467}\x{5468}\x{546A}' .
-          '\x{546B}\x{546C}\x{546D}\x{546E}\x{546F}\x{5470}\x{5471}\x{5472}\x{5473}' .
-          '\x{5474}\x{5475}\x{5476}\x{5477}\x{5478}\x{5479}\x{547A}\x{547B}\x{547C}' .
-          '\x{547D}\x{547E}\x{547F}\x{5480}\x{5481}\x{5482}\x{5483}\x{5484}\x{5485}' .
-          '\x{5486}\x{5487}\x{5488}\x{5489}\x{548B}\x{548C}\x{548D}\x{548E}\x{548F}' .
-          '\x{5490}\x{5491}\x{5492}\x{5493}\x{5494}\x{5495}\x{5496}\x{5497}\x{5498}' .
-          '\x{5499}\x{549A}\x{549B}\x{549C}\x{549D}\x{549E}\x{549F}\x{54A0}\x{54A1}' .
-          '\x{54A2}\x{54A3}\x{54A4}\x{54A5}\x{54A6}\x{54A7}\x{54A8}\x{54A9}\x{54AA}' .
-          '\x{54AB}\x{54AC}\x{54AD}\x{54AE}\x{54AF}\x{54B0}\x{54B1}\x{54B2}\x{54B3}' .
-          '\x{54B4}\x{54B6}\x{54B7}\x{54B8}\x{54B9}\x{54BA}\x{54BB}\x{54BC}\x{54BD}' .
-          '\x{54BE}\x{54BF}\x{54C0}\x{54C1}\x{54C2}\x{54C3}\x{54C4}\x{54C5}\x{54C6}' .
-          '\x{54C7}\x{54C8}\x{54C9}\x{54CA}\x{54CB}\x{54CC}\x{54CD}\x{54CE}\x{54CF}' .
-          '\x{54D0}\x{54D1}\x{54D2}\x{54D3}\x{54D4}\x{54D5}\x{54D6}\x{54D7}\x{54D8}' .
-          '\x{54D9}\x{54DA}\x{54DB}\x{54DC}\x{54DD}\x{54DE}\x{54DF}\x{54E0}\x{54E1}' .
-          '\x{54E2}\x{54E3}\x{54E4}\x{54E5}\x{54E6}\x{54E7}\x{54E8}\x{54E9}\x{54EA}' .
-          '\x{54EB}\x{54EC}\x{54ED}\x{54EE}\x{54EF}\x{54F0}\x{54F1}\x{54F2}\x{54F3}' .
-          '\x{54F4}\x{54F5}\x{54F7}\x{54F8}\x{54F9}\x{54FA}\x{54FB}\x{54FC}\x{54FD}' .
-          '\x{54FE}\x{54FF}\x{5500}\x{5501}\x{5502}\x{5503}\x{5504}\x{5505}\x{5506}' .
-          '\x{5507}\x{5508}\x{5509}\x{550A}\x{550B}\x{550C}\x{550D}\x{550E}\x{550F}' .
-          '\x{5510}\x{5511}\x{5512}\x{5513}\x{5514}\x{5516}\x{5517}\x{551A}\x{551B}' .
-          '\x{551C}\x{551D}\x{551E}\x{551F}\x{5520}\x{5521}\x{5522}\x{5523}\x{5524}' .
-          '\x{5525}\x{5526}\x{5527}\x{5528}\x{5529}\x{552A}\x{552B}\x{552C}\x{552D}' .
-          '\x{552E}\x{552F}\x{5530}\x{5531}\x{5532}\x{5533}\x{5534}\x{5535}\x{5536}' .
-          '\x{5537}\x{5538}\x{5539}\x{553A}\x{553B}\x{553C}\x{553D}\x{553E}\x{553F}' .
-          '\x{5540}\x{5541}\x{5542}\x{5543}\x{5544}\x{5545}\x{5546}\x{5548}\x{5549}' .
-          '\x{554A}\x{554B}\x{554C}\x{554D}\x{554E}\x{554F}\x{5550}\x{5551}\x{5552}' .
-          '\x{5553}\x{5554}\x{5555}\x{5556}\x{5557}\x{5558}\x{5559}\x{555A}\x{555B}' .
-          '\x{555C}\x{555D}\x{555E}\x{555F}\x{5561}\x{5562}\x{5563}\x{5564}\x{5565}' .
-          '\x{5566}\x{5567}\x{5568}\x{5569}\x{556A}\x{556B}\x{556C}\x{556D}\x{556E}' .
-          '\x{556F}\x{5570}\x{5571}\x{5572}\x{5573}\x{5574}\x{5575}\x{5576}\x{5577}' .
-          '\x{5578}\x{5579}\x{557B}\x{557C}\x{557D}\x{557E}\x{557F}\x{5580}\x{5581}' .
-          '\x{5582}\x{5583}\x{5584}\x{5585}\x{5586}\x{5587}\x{5588}\x{5589}\x{558A}' .
-          '\x{558B}\x{558C}\x{558D}\x{558E}\x{558F}\x{5590}\x{5591}\x{5592}\x{5593}' .
-          '\x{5594}\x{5595}\x{5596}\x{5597}\x{5598}\x{5599}\x{559A}\x{559B}\x{559C}' .
-          '\x{559D}\x{559E}\x{559F}\x{55A0}\x{55A1}\x{55A2}\x{55A3}\x{55A4}\x{55A5}' .
-          '\x{55A6}\x{55A7}\x{55A8}\x{55A9}\x{55AA}\x{55AB}\x{55AC}\x{55AD}\x{55AE}' .
-          '\x{55AF}\x{55B0}\x{55B1}\x{55B2}\x{55B3}\x{55B4}\x{55B5}\x{55B6}\x{55B7}' .
-          '\x{55B8}\x{55B9}\x{55BA}\x{55BB}\x{55BC}\x{55BD}\x{55BE}\x{55BF}\x{55C0}' .
-          '\x{55C1}\x{55C2}\x{55C3}\x{55C4}\x{55C5}\x{55C6}\x{55C7}\x{55C8}\x{55C9}' .
-          '\x{55CA}\x{55CB}\x{55CC}\x{55CD}\x{55CE}\x{55CF}\x{55D0}\x{55D1}\x{55D2}' .
-          '\x{55D3}\x{55D4}\x{55D5}\x{55D6}\x{55D7}\x{55D8}\x{55D9}\x{55DA}\x{55DB}' .
-          '\x{55DC}\x{55DD}\x{55DE}\x{55DF}\x{55E1}\x{55E2}\x{55E3}\x{55E4}\x{55E5}' .
-          '\x{55E6}\x{55E7}\x{55E8}\x{55E9}\x{55EA}\x{55EB}\x{55EC}\x{55ED}\x{55EE}' .
-          '\x{55EF}\x{55F0}\x{55F1}\x{55F2}\x{55F3}\x{55F4}\x{55F5}\x{55F6}\x{55F7}' .
-          '\x{55F9}\x{55FA}\x{55FB}\x{55FC}\x{55FD}\x{55FE}\x{55FF}\x{5600}\x{5601}' .
-          '\x{5602}\x{5603}\x{5604}\x{5606}\x{5607}\x{5608}\x{5609}\x{560C}\x{560D}' .
-          '\x{560E}\x{560F}\x{5610}\x{5611}\x{5612}\x{5613}\x{5614}\x{5615}\x{5616}' .
-          '\x{5617}\x{5618}\x{5619}\x{561A}\x{561B}\x{561C}\x{561D}\x{561E}\x{561F}' .
-          '\x{5621}\x{5622}\x{5623}\x{5624}\x{5625}\x{5626}\x{5627}\x{5628}\x{5629}' .
-          '\x{562A}\x{562C}\x{562D}\x{562E}\x{562F}\x{5630}\x{5631}\x{5632}\x{5633}' .
-          '\x{5634}\x{5635}\x{5636}\x{5638}\x{5639}\x{563A}\x{563B}\x{563D}\x{563E}' .
-          '\x{563F}\x{5640}\x{5641}\x{5642}\x{5643}\x{5645}\x{5646}\x{5647}\x{5648}' .
-          '\x{5649}\x{564A}\x{564C}\x{564D}\x{564E}\x{564F}\x{5650}\x{5652}\x{5653}' .
-          '\x{5654}\x{5655}\x{5657}\x{5658}\x{5659}\x{565A}\x{565B}\x{565C}\x{565D}' .
-          '\x{565E}\x{5660}\x{5662}\x{5663}\x{5664}\x{5665}\x{5666}\x{5667}\x{5668}' .
-          '\x{5669}\x{566A}\x{566B}\x{566C}\x{566D}\x{566E}\x{566F}\x{5670}\x{5671}' .
-          '\x{5672}\x{5673}\x{5674}\x{5676}\x{5677}\x{5678}\x{5679}\x{567A}\x{567B}' .
-          '\x{567C}\x{567E}\x{567F}\x{5680}\x{5681}\x{5682}\x{5683}\x{5684}\x{5685}' .
-          '\x{5686}\x{5687}\x{568A}\x{568C}\x{568D}\x{568E}\x{568F}\x{5690}\x{5691}' .
-          '\x{5692}\x{5693}\x{5694}\x{5695}\x{5697}\x{5698}\x{5699}\x{569A}\x{569B}' .
-          '\x{569C}\x{569D}\x{569F}\x{56A0}\x{56A1}\x{56A3}\x{56A4}\x{56A5}\x{56A6}' .
-          '\x{56A7}\x{56A8}\x{56A9}\x{56AA}\x{56AB}\x{56AC}\x{56AD}\x{56AE}\x{56AF}' .
-          '\x{56B0}\x{56B1}\x{56B2}\x{56B3}\x{56B4}\x{56B5}\x{56B6}\x{56B7}\x{56B8}' .
-          '\x{56B9}\x{56BB}\x{56BC}\x{56BD}\x{56BE}\x{56BF}\x{56C0}\x{56C1}\x{56C2}' .
-          '\x{56C3}\x{56C4}\x{56C5}\x{56C6}\x{56C7}\x{56C8}\x{56C9}\x{56CA}\x{56CB}' .
-          '\x{56CC}\x{56CD}\x{56CE}\x{56D0}\x{56D1}\x{56D2}\x{56D3}\x{56D4}\x{56D5}' .
-          '\x{56D6}\x{56D7}\x{56D8}\x{56DA}\x{56DB}\x{56DC}\x{56DD}\x{56DE}\x{56DF}' .
-          '\x{56E0}\x{56E1}\x{56E2}\x{56E3}\x{56E4}\x{56E5}\x{56E7}\x{56E8}\x{56E9}' .
-          '\x{56EA}\x{56EB}\x{56EC}\x{56ED}\x{56EE}\x{56EF}\x{56F0}\x{56F1}\x{56F2}' .
-          '\x{56F3}\x{56F4}\x{56F5}\x{56F7}\x{56F9}\x{56FA}\x{56FD}\x{56FE}\x{56FF}' .
-          '\x{5700}\x{5701}\x{5702}\x{5703}\x{5704}\x{5706}\x{5707}\x{5708}\x{5709}' .
-          '\x{570A}\x{570B}\x{570C}\x{570D}\x{570E}\x{570F}\x{5710}\x{5712}\x{5713}' .
-          '\x{5714}\x{5715}\x{5716}\x{5718}\x{5719}\x{571A}\x{571B}\x{571C}\x{571D}' .
-          '\x{571E}\x{571F}\x{5720}\x{5722}\x{5723}\x{5725}\x{5726}\x{5727}\x{5728}' .
-          '\x{5729}\x{572A}\x{572B}\x{572C}\x{572D}\x{572E}\x{572F}\x{5730}\x{5731}' .
-          '\x{5732}\x{5733}\x{5734}\x{5735}\x{5736}\x{5737}\x{5738}\x{5739}\x{573A}' .
-          '\x{573B}\x{573C}\x{573E}\x{573F}\x{5740}\x{5741}\x{5742}\x{5744}\x{5745}' .
-          '\x{5746}\x{5747}\x{5749}\x{574A}\x{574B}\x{574C}\x{574D}\x{574E}\x{574F}' .
-          '\x{5750}\x{5751}\x{5752}\x{5753}\x{5754}\x{5757}\x{5759}\x{575A}\x{575B}' .
-          '\x{575C}\x{575D}\x{575E}\x{575F}\x{5760}\x{5761}\x{5762}\x{5764}\x{5765}' .
-          '\x{5766}\x{5767}\x{5768}\x{5769}\x{576A}\x{576B}\x{576C}\x{576D}\x{576F}' .
-          '\x{5770}\x{5771}\x{5772}\x{5773}\x{5774}\x{5775}\x{5776}\x{5777}\x{5779}' .
-          '\x{577A}\x{577B}\x{577C}\x{577D}\x{577E}\x{577F}\x{5780}\x{5782}\x{5783}' .
-          '\x{5784}\x{5785}\x{5786}\x{5788}\x{5789}\x{578A}\x{578B}\x{578C}\x{578D}' .
-          '\x{578E}\x{578F}\x{5790}\x{5791}\x{5792}\x{5793}\x{5794}\x{5795}\x{5797}' .
-          '\x{5798}\x{5799}\x{579A}\x{579B}\x{579C}\x{579D}\x{579E}\x{579F}\x{57A0}' .
-          '\x{57A1}\x{57A2}\x{57A3}\x{57A4}\x{57A5}\x{57A6}\x{57A7}\x{57A9}\x{57AA}' .
-          '\x{57AB}\x{57AC}\x{57AD}\x{57AE}\x{57AF}\x{57B0}\x{57B1}\x{57B2}\x{57B3}' .
-          '\x{57B4}\x{57B5}\x{57B6}\x{57B7}\x{57B8}\x{57B9}\x{57BA}\x{57BB}\x{57BC}' .
-          '\x{57BD}\x{57BE}\x{57BF}\x{57C0}\x{57C1}\x{57C2}\x{57C3}\x{57C4}\x{57C5}' .
-          '\x{57C6}\x{57C7}\x{57C8}\x{57C9}\x{57CB}\x{57CC}\x{57CD}\x{57CE}\x{57CF}' .
-          '\x{57D0}\x{57D2}\x{57D3}\x{57D4}\x{57D5}\x{57D6}\x{57D8}\x{57D9}\x{57DA}' .
-          '\x{57DC}\x{57DD}\x{57DF}\x{57E0}\x{57E1}\x{57E2}\x{57E3}\x{57E4}\x{57E5}' .
-          '\x{57E6}\x{57E7}\x{57E8}\x{57E9}\x{57EA}\x{57EB}\x{57EC}\x{57ED}\x{57EE}' .
-          '\x{57EF}\x{57F0}\x{57F1}\x{57F2}\x{57F3}\x{57F4}\x{57F5}\x{57F6}\x{57F7}' .
-          '\x{57F8}\x{57F9}\x{57FA}\x{57FB}\x{57FC}\x{57FD}\x{57FE}\x{57FF}\x{5800}' .
-          '\x{5801}\x{5802}\x{5803}\x{5804}\x{5805}\x{5806}\x{5807}\x{5808}\x{5809}' .
-          '\x{580A}\x{580B}\x{580C}\x{580D}\x{580E}\x{580F}\x{5810}\x{5811}\x{5812}' .
-          '\x{5813}\x{5814}\x{5815}\x{5816}\x{5819}\x{581A}\x{581B}\x{581C}\x{581D}' .
-          '\x{581E}\x{581F}\x{5820}\x{5821}\x{5822}\x{5823}\x{5824}\x{5825}\x{5826}' .
-          '\x{5827}\x{5828}\x{5829}\x{582A}\x{582B}\x{582C}\x{582D}\x{582E}\x{582F}' .
-          '\x{5830}\x{5831}\x{5832}\x{5833}\x{5834}\x{5835}\x{5836}\x{5837}\x{5838}' .
-          '\x{5839}\x{583A}\x{583B}\x{583C}\x{583D}\x{583E}\x{583F}\x{5840}\x{5842}' .
-          '\x{5843}\x{5844}\x{5845}\x{5846}\x{5847}\x{5848}\x{5849}\x{584A}\x{584B}' .
-          '\x{584C}\x{584D}\x{584E}\x{584F}\x{5851}\x{5852}\x{5853}\x{5854}\x{5855}' .
-          '\x{5857}\x{5858}\x{5859}\x{585A}\x{585B}\x{585C}\x{585D}\x{585E}\x{585F}' .
-          '\x{5861}\x{5862}\x{5863}\x{5864}\x{5865}\x{5868}\x{5869}\x{586A}\x{586B}' .
-          '\x{586C}\x{586D}\x{586E}\x{586F}\x{5870}\x{5871}\x{5872}\x{5873}\x{5874}' .
-          '\x{5875}\x{5876}\x{5878}\x{5879}\x{587A}\x{587B}\x{587C}\x{587D}\x{587E}' .
-          '\x{587F}\x{5880}\x{5881}\x{5882}\x{5883}\x{5884}\x{5885}\x{5886}\x{5887}' .
-          '\x{5888}\x{5889}\x{588A}\x{588B}\x{588C}\x{588D}\x{588E}\x{588F}\x{5890}' .
-          '\x{5891}\x{5892}\x{5893}\x{5894}\x{5896}\x{5897}\x{5898}\x{5899}\x{589A}' .
-          '\x{589B}\x{589C}\x{589D}\x{589E}\x{589F}\x{58A0}\x{58A1}\x{58A2}\x{58A3}' .
-          '\x{58A4}\x{58A5}\x{58A6}\x{58A7}\x{58A8}\x{58A9}\x{58AB}\x{58AC}\x{58AD}' .
-          '\x{58AE}\x{58AF}\x{58B0}\x{58B1}\x{58B2}\x{58B3}\x{58B4}\x{58B7}\x{58B8}' .
-          '\x{58B9}\x{58BA}\x{58BB}\x{58BC}\x{58BD}\x{58BE}\x{58BF}\x{58C1}\x{58C2}' .
-          '\x{58C5}\x{58C6}\x{58C7}\x{58C8}\x{58C9}\x{58CA}\x{58CB}\x{58CE}\x{58CF}' .
-          '\x{58D1}\x{58D2}\x{58D3}\x{58D4}\x{58D5}\x{58D6}\x{58D7}\x{58D8}\x{58D9}' .
-          '\x{58DA}\x{58DB}\x{58DD}\x{58DE}\x{58DF}\x{58E0}\x{58E2}\x{58E3}\x{58E4}' .
-          '\x{58E5}\x{58E7}\x{58E8}\x{58E9}\x{58EA}\x{58EB}\x{58EC}\x{58ED}\x{58EE}' .
-          '\x{58EF}\x{58F0}\x{58F1}\x{58F2}\x{58F3}\x{58F4}\x{58F6}\x{58F7}\x{58F8}' .
-          '\x{58F9}\x{58FA}\x{58FB}\x{58FC}\x{58FD}\x{58FE}\x{58FF}\x{5900}\x{5902}' .
-          '\x{5903}\x{5904}\x{5906}\x{5907}\x{5909}\x{590A}\x{590B}\x{590C}\x{590D}' .
-          '\x{590E}\x{590F}\x{5910}\x{5912}\x{5914}\x{5915}\x{5916}\x{5917}\x{5918}' .
-          '\x{5919}\x{591A}\x{591B}\x{591C}\x{591D}\x{591E}\x{591F}\x{5920}\x{5921}' .
-          '\x{5922}\x{5924}\x{5925}\x{5926}\x{5927}\x{5928}\x{5929}\x{592A}\x{592B}' .
-          '\x{592C}\x{592D}\x{592E}\x{592F}\x{5930}\x{5931}\x{5932}\x{5934}\x{5935}' .
-          '\x{5937}\x{5938}\x{5939}\x{593A}\x{593B}\x{593C}\x{593D}\x{593E}\x{593F}' .
-          '\x{5940}\x{5941}\x{5942}\x{5943}\x{5944}\x{5945}\x{5946}\x{5947}\x{5948}' .
-          '\x{5949}\x{594A}\x{594B}\x{594C}\x{594D}\x{594E}\x{594F}\x{5950}\x{5951}' .
-          '\x{5952}\x{5953}\x{5954}\x{5955}\x{5956}\x{5957}\x{5958}\x{595A}\x{595C}' .
-          '\x{595D}\x{595E}\x{595F}\x{5960}\x{5961}\x{5962}\x{5963}\x{5964}\x{5965}' .
-          '\x{5966}\x{5967}\x{5968}\x{5969}\x{596A}\x{596B}\x{596C}\x{596D}\x{596E}' .
-          '\x{596F}\x{5970}\x{5971}\x{5972}\x{5973}\x{5974}\x{5975}\x{5976}\x{5977}' .
-          '\x{5978}\x{5979}\x{597A}\x{597B}\x{597C}\x{597D}\x{597E}\x{597F}\x{5980}' .
-          '\x{5981}\x{5982}\x{5983}\x{5984}\x{5985}\x{5986}\x{5987}\x{5988}\x{5989}' .
-          '\x{598A}\x{598B}\x{598C}\x{598D}\x{598E}\x{598F}\x{5990}\x{5991}\x{5992}' .
-          '\x{5993}\x{5994}\x{5995}\x{5996}\x{5997}\x{5998}\x{5999}\x{599A}\x{599C}' .
-          '\x{599D}\x{599E}\x{599F}\x{59A0}\x{59A1}\x{59A2}\x{59A3}\x{59A4}\x{59A5}' .
-          '\x{59A6}\x{59A7}\x{59A8}\x{59A9}\x{59AA}\x{59AB}\x{59AC}\x{59AD}\x{59AE}' .
-          '\x{59AF}\x{59B0}\x{59B1}\x{59B2}\x{59B3}\x{59B4}\x{59B5}\x{59B6}\x{59B8}' .
-          '\x{59B9}\x{59BA}\x{59BB}\x{59BC}\x{59BD}\x{59BE}\x{59BF}\x{59C0}\x{59C1}' .
-          '\x{59C2}\x{59C3}\x{59C4}\x{59C5}\x{59C6}\x{59C7}\x{59C8}\x{59C9}\x{59CA}' .
-          '\x{59CB}\x{59CC}\x{59CD}\x{59CE}\x{59CF}\x{59D0}\x{59D1}\x{59D2}\x{59D3}' .
-          '\x{59D4}\x{59D5}\x{59D6}\x{59D7}\x{59D8}\x{59D9}\x{59DA}\x{59DB}\x{59DC}' .
-          '\x{59DD}\x{59DE}\x{59DF}\x{59E0}\x{59E1}\x{59E2}\x{59E3}\x{59E4}\x{59E5}' .
-          '\x{59E6}\x{59E8}\x{59E9}\x{59EA}\x{59EB}\x{59EC}\x{59ED}\x{59EE}\x{59EF}' .
-          '\x{59F0}\x{59F1}\x{59F2}\x{59F3}\x{59F4}\x{59F5}\x{59F6}\x{59F7}\x{59F8}' .
-          '\x{59F9}\x{59FA}\x{59FB}\x{59FC}\x{59FD}\x{59FE}\x{59FF}\x{5A00}\x{5A01}' .
-          '\x{5A02}\x{5A03}\x{5A04}\x{5A05}\x{5A06}\x{5A07}\x{5A08}\x{5A09}\x{5A0A}' .
-          '\x{5A0B}\x{5A0C}\x{5A0D}\x{5A0E}\x{5A0F}\x{5A10}\x{5A11}\x{5A12}\x{5A13}' .
-          '\x{5A14}\x{5A15}\x{5A16}\x{5A17}\x{5A18}\x{5A19}\x{5A1A}\x{5A1B}\x{5A1C}' .
-          '\x{5A1D}\x{5A1E}\x{5A1F}\x{5A20}\x{5A21}\x{5A22}\x{5A23}\x{5A25}\x{5A27}' .
-          '\x{5A28}\x{5A29}\x{5A2A}\x{5A2B}\x{5A2D}\x{5A2E}\x{5A2F}\x{5A31}\x{5A32}' .
-          '\x{5A33}\x{5A34}\x{5A35}\x{5A36}\x{5A37}\x{5A38}\x{5A39}\x{5A3A}\x{5A3B}' .
-          '\x{5A3C}\x{5A3D}\x{5A3E}\x{5A3F}\x{5A40}\x{5A41}\x{5A42}\x{5A43}\x{5A44}' .
-          '\x{5A45}\x{5A46}\x{5A47}\x{5A48}\x{5A49}\x{5A4A}\x{5A4B}\x{5A4C}\x{5A4D}' .
-          '\x{5A4E}\x{5A4F}\x{5A50}\x{5A51}\x{5A52}\x{5A53}\x{5A55}\x{5A56}\x{5A57}' .
-          '\x{5A58}\x{5A5A}\x{5A5B}\x{5A5C}\x{5A5D}\x{5A5E}\x{5A5F}\x{5A60}\x{5A61}' .
-          '\x{5A62}\x{5A63}\x{5A64}\x{5A65}\x{5A66}\x{5A67}\x{5A68}\x{5A69}\x{5A6A}' .
-          '\x{5A6B}\x{5A6C}\x{5A6D}\x{5A6E}\x{5A70}\x{5A72}\x{5A73}\x{5A74}\x{5A75}' .
-          '\x{5A76}\x{5A77}\x{5A78}\x{5A79}\x{5A7A}\x{5A7B}\x{5A7C}\x{5A7D}\x{5A7E}' .
-          '\x{5A7F}\x{5A80}\x{5A81}\x{5A82}\x{5A83}\x{5A84}\x{5A85}\x{5A86}\x{5A88}' .
-          '\x{5A89}\x{5A8A}\x{5A8B}\x{5A8C}\x{5A8E}\x{5A8F}\x{5A90}\x{5A91}\x{5A92}' .
-          '\x{5A93}\x{5A94}\x{5A95}\x{5A96}\x{5A97}\x{5A98}\x{5A99}\x{5A9A}\x{5A9B}' .
-          '\x{5A9C}\x{5A9D}\x{5A9E}\x{5A9F}\x{5AA0}\x{5AA1}\x{5AA2}\x{5AA3}\x{5AA4}' .
-          '\x{5AA5}\x{5AA6}\x{5AA7}\x{5AA8}\x{5AA9}\x{5AAA}\x{5AAC}\x{5AAD}\x{5AAE}' .
-          '\x{5AAF}\x{5AB0}\x{5AB1}\x{5AB2}\x{5AB3}\x{5AB4}\x{5AB5}\x{5AB6}\x{5AB7}' .
-          '\x{5AB8}\x{5AB9}\x{5ABA}\x{5ABB}\x{5ABC}\x{5ABD}\x{5ABE}\x{5ABF}\x{5AC0}' .
-          '\x{5AC1}\x{5AC2}\x{5AC3}\x{5AC4}\x{5AC5}\x{5AC6}\x{5AC7}\x{5AC8}\x{5AC9}' .
-          '\x{5ACA}\x{5ACB}\x{5ACC}\x{5ACD}\x{5ACE}\x{5ACF}\x{5AD1}\x{5AD2}\x{5AD4}' .
-          '\x{5AD5}\x{5AD6}\x{5AD7}\x{5AD8}\x{5AD9}\x{5ADA}\x{5ADB}\x{5ADC}\x{5ADD}' .
-          '\x{5ADE}\x{5ADF}\x{5AE0}\x{5AE1}\x{5AE2}\x{5AE3}\x{5AE4}\x{5AE5}\x{5AE6}' .
-          '\x{5AE7}\x{5AE8}\x{5AE9}\x{5AEA}\x{5AEB}\x{5AEC}\x{5AED}\x{5AEE}\x{5AF1}' .
-          '\x{5AF2}\x{5AF3}\x{5AF4}\x{5AF5}\x{5AF6}\x{5AF7}\x{5AF8}\x{5AF9}\x{5AFA}' .
-          '\x{5AFB}\x{5AFC}\x{5AFD}\x{5AFE}\x{5AFF}\x{5B00}\x{5B01}\x{5B02}\x{5B03}' .
-          '\x{5B04}\x{5B05}\x{5B06}\x{5B07}\x{5B08}\x{5B09}\x{5B0B}\x{5B0C}\x{5B0E}' .
-          '\x{5B0F}\x{5B10}\x{5B11}\x{5B12}\x{5B13}\x{5B14}\x{5B15}\x{5B16}\x{5B17}' .
-          '\x{5B18}\x{5B19}\x{5B1A}\x{5B1B}\x{5B1C}\x{5B1D}\x{5B1E}\x{5B1F}\x{5B20}' .
-          '\x{5B21}\x{5B22}\x{5B23}\x{5B24}\x{5B25}\x{5B26}\x{5B27}\x{5B28}\x{5B29}' .
-          '\x{5B2A}\x{5B2B}\x{5B2C}\x{5B2D}\x{5B2E}\x{5B2F}\x{5B30}\x{5B31}\x{5B32}' .
-          '\x{5B33}\x{5B34}\x{5B35}\x{5B36}\x{5B37}\x{5B38}\x{5B3A}\x{5B3B}\x{5B3C}' .
-          '\x{5B3D}\x{5B3E}\x{5B3F}\x{5B40}\x{5B41}\x{5B42}\x{5B43}\x{5B44}\x{5B45}' .
-          '\x{5B47}\x{5B48}\x{5B49}\x{5B4A}\x{5B4B}\x{5B4C}\x{5B4D}\x{5B4E}\x{5B50}' .
-          '\x{5B51}\x{5B53}\x{5B54}\x{5B55}\x{5B56}\x{5B57}\x{5B58}\x{5B59}\x{5B5A}' .
-          '\x{5B5B}\x{5B5C}\x{5B5D}\x{5B5E}\x{5B5F}\x{5B62}\x{5B63}\x{5B64}\x{5B65}' .
-          '\x{5B66}\x{5B67}\x{5B68}\x{5B69}\x{5B6A}\x{5B6B}\x{5B6C}\x{5B6D}\x{5B6E}' .
-          '\x{5B70}\x{5B71}\x{5B72}\x{5B73}\x{5B74}\x{5B75}\x{5B76}\x{5B77}\x{5B78}' .
-          '\x{5B7A}\x{5B7B}\x{5B7C}\x{5B7D}\x{5B7F}\x{5B80}\x{5B81}\x{5B82}\x{5B83}' .
-          '\x{5B84}\x{5B85}\x{5B87}\x{5B88}\x{5B89}\x{5B8A}\x{5B8B}\x{5B8C}\x{5B8D}' .
-          '\x{5B8E}\x{5B8F}\x{5B91}\x{5B92}\x{5B93}\x{5B94}\x{5B95}\x{5B96}\x{5B97}' .
-          '\x{5B98}\x{5B99}\x{5B9A}\x{5B9B}\x{5B9C}\x{5B9D}\x{5B9E}\x{5B9F}\x{5BA0}' .
-          '\x{5BA1}\x{5BA2}\x{5BA3}\x{5BA4}\x{5BA5}\x{5BA6}\x{5BA7}\x{5BA8}\x{5BAA}' .
-          '\x{5BAB}\x{5BAC}\x{5BAD}\x{5BAE}\x{5BAF}\x{5BB0}\x{5BB1}\x{5BB3}\x{5BB4}' .
-          '\x{5BB5}\x{5BB6}\x{5BB8}\x{5BB9}\x{5BBA}\x{5BBB}\x{5BBD}\x{5BBE}\x{5BBF}' .
-          '\x{5BC0}\x{5BC1}\x{5BC2}\x{5BC3}\x{5BC4}\x{5BC5}\x{5BC6}\x{5BC7}\x{5BCA}' .
-          '\x{5BCB}\x{5BCC}\x{5BCD}\x{5BCE}\x{5BCF}\x{5BD0}\x{5BD1}\x{5BD2}\x{5BD3}' .
-          '\x{5BD4}\x{5BD5}\x{5BD6}\x{5BD8}\x{5BD9}\x{5BDB}\x{5BDC}\x{5BDD}\x{5BDE}' .
-          '\x{5BDF}\x{5BE0}\x{5BE1}\x{5BE2}\x{5BE3}\x{5BE4}\x{5BE5}\x{5BE6}\x{5BE7}' .
-          '\x{5BE8}\x{5BE9}\x{5BEA}\x{5BEB}\x{5BEC}\x{5BED}\x{5BEE}\x{5BEF}\x{5BF0}' .
-          '\x{5BF1}\x{5BF2}\x{5BF3}\x{5BF4}\x{5BF5}\x{5BF6}\x{5BF7}\x{5BF8}\x{5BF9}' .
-          '\x{5BFA}\x{5BFB}\x{5BFC}\x{5BFD}\x{5BFF}\x{5C01}\x{5C03}\x{5C04}\x{5C05}' .
-          '\x{5C06}\x{5C07}\x{5C08}\x{5C09}\x{5C0A}\x{5C0B}\x{5C0C}\x{5C0D}\x{5C0E}' .
-          '\x{5C0F}\x{5C10}\x{5C11}\x{5C12}\x{5C13}\x{5C14}\x{5C15}\x{5C16}\x{5C17}' .
-          '\x{5C18}\x{5C19}\x{5C1A}\x{5C1C}\x{5C1D}\x{5C1E}\x{5C1F}\x{5C20}\x{5C21}' .
-          '\x{5C22}\x{5C24}\x{5C25}\x{5C27}\x{5C28}\x{5C2A}\x{5C2B}\x{5C2C}\x{5C2D}' .
-          '\x{5C2E}\x{5C2F}\x{5C30}\x{5C31}\x{5C32}\x{5C33}\x{5C34}\x{5C35}\x{5C37}' .
-          '\x{5C38}\x{5C39}\x{5C3A}\x{5C3B}\x{5C3C}\x{5C3D}\x{5C3E}\x{5C3F}\x{5C40}' .
-          '\x{5C41}\x{5C42}\x{5C43}\x{5C44}\x{5C45}\x{5C46}\x{5C47}\x{5C48}\x{5C49}' .
-          '\x{5C4A}\x{5C4B}\x{5C4C}\x{5C4D}\x{5C4E}\x{5C4F}\x{5C50}\x{5C51}\x{5C52}' .
-          '\x{5C53}\x{5C54}\x{5C55}\x{5C56}\x{5C57}\x{5C58}\x{5C59}\x{5C5B}\x{5C5C}' .
-          '\x{5C5D}\x{5C5E}\x{5C5F}\x{5C60}\x{5C61}\x{5C62}\x{5C63}\x{5C64}\x{5C65}' .
-          '\x{5C66}\x{5C67}\x{5C68}\x{5C69}\x{5C6A}\x{5C6B}\x{5C6C}\x{5C6D}\x{5C6E}' .
-          '\x{5C6F}\x{5C70}\x{5C71}\x{5C72}\x{5C73}\x{5C74}\x{5C75}\x{5C76}\x{5C77}' .
-          '\x{5C78}\x{5C79}\x{5C7A}\x{5C7B}\x{5C7C}\x{5C7D}\x{5C7E}\x{5C7F}\x{5C80}' .
-          '\x{5C81}\x{5C82}\x{5C83}\x{5C84}\x{5C86}\x{5C87}\x{5C88}\x{5C89}\x{5C8A}' .
-          '\x{5C8B}\x{5C8C}\x{5C8D}\x{5C8E}\x{5C8F}\x{5C90}\x{5C91}\x{5C92}\x{5C93}' .
-          '\x{5C94}\x{5C95}\x{5C96}\x{5C97}\x{5C98}\x{5C99}\x{5C9A}\x{5C9B}\x{5C9C}' .
-          '\x{5C9D}\x{5C9E}\x{5C9F}\x{5CA0}\x{5CA1}\x{5CA2}\x{5CA3}\x{5CA4}\x{5CA5}' .
-          '\x{5CA6}\x{5CA7}\x{5CA8}\x{5CA9}\x{5CAA}\x{5CAB}\x{5CAC}\x{5CAD}\x{5CAE}' .
-          '\x{5CAF}\x{5CB0}\x{5CB1}\x{5CB2}\x{5CB3}\x{5CB5}\x{5CB6}\x{5CB7}\x{5CB8}' .
-          '\x{5CBA}\x{5CBB}\x{5CBC}\x{5CBD}\x{5CBE}\x{5CBF}\x{5CC1}\x{5CC2}\x{5CC3}' .
-          '\x{5CC4}\x{5CC5}\x{5CC6}\x{5CC7}\x{5CC8}\x{5CC9}\x{5CCA}\x{5CCB}\x{5CCC}' .
-          '\x{5CCD}\x{5CCE}\x{5CCF}\x{5CD0}\x{5CD1}\x{5CD2}\x{5CD3}\x{5CD4}\x{5CD6}' .
-          '\x{5CD7}\x{5CD8}\x{5CD9}\x{5CDA}\x{5CDB}\x{5CDC}\x{5CDE}\x{5CDF}\x{5CE0}' .
-          '\x{5CE1}\x{5CE2}\x{5CE3}\x{5CE4}\x{5CE5}\x{5CE6}\x{5CE7}\x{5CE8}\x{5CE9}' .
-          '\x{5CEA}\x{5CEB}\x{5CEC}\x{5CED}\x{5CEE}\x{5CEF}\x{5CF0}\x{5CF1}\x{5CF2}' .
-          '\x{5CF3}\x{5CF4}\x{5CF6}\x{5CF7}\x{5CF8}\x{5CF9}\x{5CFA}\x{5CFB}\x{5CFC}' .
-          '\x{5CFD}\x{5CFE}\x{5CFF}\x{5D00}\x{5D01}\x{5D02}\x{5D03}\x{5D04}\x{5D05}' .
-          '\x{5D06}\x{5D07}\x{5D08}\x{5D09}\x{5D0A}\x{5D0B}\x{5D0C}\x{5D0D}\x{5D0E}' .
-          '\x{5D0F}\x{5D10}\x{5D11}\x{5D12}\x{5D13}\x{5D14}\x{5D15}\x{5D16}\x{5D17}' .
-          '\x{5D18}\x{5D19}\x{5D1A}\x{5D1B}\x{5D1C}\x{5D1D}\x{5D1E}\x{5D1F}\x{5D20}' .
-          '\x{5D21}\x{5D22}\x{5D23}\x{5D24}\x{5D25}\x{5D26}\x{5D27}\x{5D28}\x{5D29}' .
-          '\x{5D2A}\x{5D2C}\x{5D2D}\x{5D2E}\x{5D30}\x{5D31}\x{5D32}\x{5D33}\x{5D34}' .
-          '\x{5D35}\x{5D36}\x{5D37}\x{5D38}\x{5D39}\x{5D3A}\x{5D3C}\x{5D3D}\x{5D3E}' .
-          '\x{5D3F}\x{5D40}\x{5D41}\x{5D42}\x{5D43}\x{5D44}\x{5D45}\x{5D46}\x{5D47}' .
-          '\x{5D48}\x{5D49}\x{5D4A}\x{5D4B}\x{5D4C}\x{5D4D}\x{5D4E}\x{5D4F}\x{5D50}' .
-          '\x{5D51}\x{5D52}\x{5D54}\x{5D55}\x{5D56}\x{5D58}\x{5D59}\x{5D5A}\x{5D5B}' .
-          '\x{5D5D}\x{5D5E}\x{5D5F}\x{5D61}\x{5D62}\x{5D63}\x{5D64}\x{5D65}\x{5D66}' .
-          '\x{5D67}\x{5D68}\x{5D69}\x{5D6A}\x{5D6B}\x{5D6C}\x{5D6D}\x{5D6E}\x{5D6F}' .
-          '\x{5D70}\x{5D71}\x{5D72}\x{5D73}\x{5D74}\x{5D75}\x{5D76}\x{5D77}\x{5D78}' .
-          '\x{5D79}\x{5D7A}\x{5D7B}\x{5D7C}\x{5D7D}\x{5D7E}\x{5D7F}\x{5D80}\x{5D81}' .
-          '\x{5D82}\x{5D84}\x{5D85}\x{5D86}\x{5D87}\x{5D88}\x{5D89}\x{5D8A}\x{5D8B}' .
-          '\x{5D8C}\x{5D8D}\x{5D8E}\x{5D8F}\x{5D90}\x{5D91}\x{5D92}\x{5D93}\x{5D94}' .
-          '\x{5D95}\x{5D97}\x{5D98}\x{5D99}\x{5D9A}\x{5D9B}\x{5D9C}\x{5D9D}\x{5D9E}' .
-          '\x{5D9F}\x{5DA0}\x{5DA1}\x{5DA2}\x{5DA5}\x{5DA6}\x{5DA7}\x{5DA8}\x{5DA9}' .
-          '\x{5DAA}\x{5DAC}\x{5DAD}\x{5DAE}\x{5DAF}\x{5DB0}\x{5DB1}\x{5DB2}\x{5DB4}' .
-          '\x{5DB5}\x{5DB6}\x{5DB7}\x{5DB8}\x{5DBA}\x{5DBB}\x{5DBC}\x{5DBD}\x{5DBE}' .
-          '\x{5DBF}\x{5DC0}\x{5DC1}\x{5DC2}\x{5DC3}\x{5DC5}\x{5DC6}\x{5DC7}\x{5DC8}' .
-          '\x{5DC9}\x{5DCA}\x{5DCB}\x{5DCC}\x{5DCD}\x{5DCE}\x{5DCF}\x{5DD0}\x{5DD1}' .
-          '\x{5DD2}\x{5DD3}\x{5DD4}\x{5DD5}\x{5DD6}\x{5DD8}\x{5DD9}\x{5DDB}\x{5DDD}' .
-          '\x{5DDE}\x{5DDF}\x{5DE0}\x{5DE1}\x{5DE2}\x{5DE3}\x{5DE4}\x{5DE5}\x{5DE6}' .
-          '\x{5DE7}\x{5DE8}\x{5DE9}\x{5DEA}\x{5DEB}\x{5DEC}\x{5DED}\x{5DEE}\x{5DEF}' .
-          '\x{5DF0}\x{5DF1}\x{5DF2}\x{5DF3}\x{5DF4}\x{5DF5}\x{5DF7}\x{5DF8}\x{5DF9}' .
-          '\x{5DFA}\x{5DFB}\x{5DFC}\x{5DFD}\x{5DFE}\x{5DFF}\x{5E00}\x{5E01}\x{5E02}' .
-          '\x{5E03}\x{5E04}\x{5E05}\x{5E06}\x{5E07}\x{5E08}\x{5E09}\x{5E0A}\x{5E0B}' .
-          '\x{5E0C}\x{5E0D}\x{5E0E}\x{5E0F}\x{5E10}\x{5E11}\x{5E13}\x{5E14}\x{5E15}' .
-          '\x{5E16}\x{5E17}\x{5E18}\x{5E19}\x{5E1A}\x{5E1B}\x{5E1C}\x{5E1D}\x{5E1E}' .
-          '\x{5E1F}\x{5E20}\x{5E21}\x{5E22}\x{5E23}\x{5E24}\x{5E25}\x{5E26}\x{5E27}' .
-          '\x{5E28}\x{5E29}\x{5E2A}\x{5E2B}\x{5E2C}\x{5E2D}\x{5E2E}\x{5E2F}\x{5E30}' .
-          '\x{5E31}\x{5E32}\x{5E33}\x{5E34}\x{5E35}\x{5E36}\x{5E37}\x{5E38}\x{5E39}' .
-          '\x{5E3A}\x{5E3B}\x{5E3C}\x{5E3D}\x{5E3E}\x{5E40}\x{5E41}\x{5E42}\x{5E43}' .
-          '\x{5E44}\x{5E45}\x{5E46}\x{5E47}\x{5E49}\x{5E4A}\x{5E4B}\x{5E4C}\x{5E4D}' .
-          '\x{5E4E}\x{5E4F}\x{5E50}\x{5E52}\x{5E53}\x{5E54}\x{5E55}\x{5E56}\x{5E57}' .
-          '\x{5E58}\x{5E59}\x{5E5A}\x{5E5B}\x{5E5C}\x{5E5D}\x{5E5E}\x{5E5F}\x{5E60}' .
-          '\x{5E61}\x{5E62}\x{5E63}\x{5E64}\x{5E65}\x{5E66}\x{5E67}\x{5E68}\x{5E69}' .
-          '\x{5E6A}\x{5E6B}\x{5E6C}\x{5E6D}\x{5E6E}\x{5E6F}\x{5E70}\x{5E71}\x{5E72}' .
-          '\x{5E73}\x{5E74}\x{5E75}\x{5E76}\x{5E77}\x{5E78}\x{5E79}\x{5E7A}\x{5E7B}' .
-          '\x{5E7C}\x{5E7D}\x{5E7E}\x{5E7F}\x{5E80}\x{5E81}\x{5E82}\x{5E83}\x{5E84}' .
-          '\x{5E85}\x{5E86}\x{5E87}\x{5E88}\x{5E89}\x{5E8A}\x{5E8B}\x{5E8C}\x{5E8D}' .
-          '\x{5E8E}\x{5E8F}\x{5E90}\x{5E91}\x{5E93}\x{5E94}\x{5E95}\x{5E96}\x{5E97}' .
-          '\x{5E98}\x{5E99}\x{5E9A}\x{5E9B}\x{5E9C}\x{5E9D}\x{5E9E}\x{5E9F}\x{5EA0}' .
-          '\x{5EA1}\x{5EA2}\x{5EA3}\x{5EA4}\x{5EA5}\x{5EA6}\x{5EA7}\x{5EA8}\x{5EA9}' .
-          '\x{5EAA}\x{5EAB}\x{5EAC}\x{5EAD}\x{5EAE}\x{5EAF}\x{5EB0}\x{5EB1}\x{5EB2}' .
-          '\x{5EB3}\x{5EB4}\x{5EB5}\x{5EB6}\x{5EB7}\x{5EB8}\x{5EB9}\x{5EBB}\x{5EBC}' .
-          '\x{5EBD}\x{5EBE}\x{5EBF}\x{5EC1}\x{5EC2}\x{5EC3}\x{5EC4}\x{5EC5}\x{5EC6}' .
-          '\x{5EC7}\x{5EC8}\x{5EC9}\x{5ECA}\x{5ECB}\x{5ECC}\x{5ECD}\x{5ECE}\x{5ECF}' .
-          '\x{5ED0}\x{5ED1}\x{5ED2}\x{5ED3}\x{5ED4}\x{5ED5}\x{5ED6}\x{5ED7}\x{5ED8}' .
-          '\x{5ED9}\x{5EDA}\x{5EDB}\x{5EDC}\x{5EDD}\x{5EDE}\x{5EDF}\x{5EE0}\x{5EE1}' .
-          '\x{5EE2}\x{5EE3}\x{5EE4}\x{5EE5}\x{5EE6}\x{5EE7}\x{5EE8}\x{5EE9}\x{5EEA}' .
-          '\x{5EEC}\x{5EED}\x{5EEE}\x{5EEF}\x{5EF0}\x{5EF1}\x{5EF2}\x{5EF3}\x{5EF4}' .
-          '\x{5EF5}\x{5EF6}\x{5EF7}\x{5EF8}\x{5EFA}\x{5EFB}\x{5EFC}\x{5EFD}\x{5EFE}' .
-          '\x{5EFF}\x{5F00}\x{5F01}\x{5F02}\x{5F03}\x{5F04}\x{5F05}\x{5F06}\x{5F07}' .
-          '\x{5F08}\x{5F0A}\x{5F0B}\x{5F0C}\x{5F0D}\x{5F0F}\x{5F11}\x{5F12}\x{5F13}' .
-          '\x{5F14}\x{5F15}\x{5F16}\x{5F17}\x{5F18}\x{5F19}\x{5F1A}\x{5F1B}\x{5F1C}' .
-          '\x{5F1D}\x{5F1E}\x{5F1F}\x{5F20}\x{5F21}\x{5F22}\x{5F23}\x{5F24}\x{5F25}' .
-          '\x{5F26}\x{5F27}\x{5F28}\x{5F29}\x{5F2A}\x{5F2B}\x{5F2C}\x{5F2D}\x{5F2E}' .
-          '\x{5F2F}\x{5F30}\x{5F31}\x{5F32}\x{5F33}\x{5F34}\x{5F35}\x{5F36}\x{5F37}' .
-          '\x{5F38}\x{5F39}\x{5F3A}\x{5F3C}\x{5F3E}\x{5F3F}\x{5F40}\x{5F41}\x{5F42}' .
-          '\x{5F43}\x{5F44}\x{5F45}\x{5F46}\x{5F47}\x{5F48}\x{5F49}\x{5F4A}\x{5F4B}' .
-          '\x{5F4C}\x{5F4D}\x{5F4E}\x{5F4F}\x{5F50}\x{5F51}\x{5F52}\x{5F53}\x{5F54}' .
-          '\x{5F55}\x{5F56}\x{5F57}\x{5F58}\x{5F59}\x{5F5A}\x{5F5B}\x{5F5C}\x{5F5D}' .
-          '\x{5F5E}\x{5F5F}\x{5F60}\x{5F61}\x{5F62}\x{5F63}\x{5F64}\x{5F65}\x{5F66}' .
-          '\x{5F67}\x{5F68}\x{5F69}\x{5F6A}\x{5F6B}\x{5F6C}\x{5F6D}\x{5F6E}\x{5F6F}' .
-          '\x{5F70}\x{5F71}\x{5F72}\x{5F73}\x{5F74}\x{5F75}\x{5F76}\x{5F77}\x{5F78}' .
-          '\x{5F79}\x{5F7A}\x{5F7B}\x{5F7C}\x{5F7D}\x{5F7E}\x{5F7F}\x{5F80}\x{5F81}' .
-          '\x{5F82}\x{5F83}\x{5F84}\x{5F85}\x{5F86}\x{5F87}\x{5F88}\x{5F89}\x{5F8A}' .
-          '\x{5F8B}\x{5F8C}\x{5F8D}\x{5F8E}\x{5F90}\x{5F91}\x{5F92}\x{5F93}\x{5F94}' .
-          '\x{5F95}\x{5F96}\x{5F97}\x{5F98}\x{5F99}\x{5F9B}\x{5F9C}\x{5F9D}\x{5F9E}' .
-          '\x{5F9F}\x{5FA0}\x{5FA1}\x{5FA2}\x{5FA5}\x{5FA6}\x{5FA7}\x{5FA8}\x{5FA9}' .
-          '\x{5FAA}\x{5FAB}\x{5FAC}\x{5FAD}\x{5FAE}\x{5FAF}\x{5FB1}\x{5FB2}\x{5FB3}' .
-          '\x{5FB4}\x{5FB5}\x{5FB6}\x{5FB7}\x{5FB8}\x{5FB9}\x{5FBA}\x{5FBB}\x{5FBC}' .
-          '\x{5FBD}\x{5FBE}\x{5FBF}\x{5FC0}\x{5FC1}\x{5FC3}\x{5FC4}\x{5FC5}\x{5FC6}' .
-          '\x{5FC7}\x{5FC8}\x{5FC9}\x{5FCA}\x{5FCB}\x{5FCC}\x{5FCD}\x{5FCF}\x{5FD0}' .
-          '\x{5FD1}\x{5FD2}\x{5FD3}\x{5FD4}\x{5FD5}\x{5FD6}\x{5FD7}\x{5FD8}\x{5FD9}' .
-          '\x{5FDA}\x{5FDC}\x{5FDD}\x{5FDE}\x{5FE0}\x{5FE1}\x{5FE3}\x{5FE4}\x{5FE5}' .
-          '\x{5FE6}\x{5FE7}\x{5FE8}\x{5FE9}\x{5FEA}\x{5FEB}\x{5FED}\x{5FEE}\x{5FEF}' .
-          '\x{5FF0}\x{5FF1}\x{5FF2}\x{5FF3}\x{5FF4}\x{5FF5}\x{5FF6}\x{5FF7}\x{5FF8}' .
-          '\x{5FF9}\x{5FFA}\x{5FFB}\x{5FFD}\x{5FFE}\x{5FFF}\x{6000}\x{6001}\x{6002}' .
-          '\x{6003}\x{6004}\x{6005}\x{6006}\x{6007}\x{6008}\x{6009}\x{600A}\x{600B}' .
-          '\x{600C}\x{600D}\x{600E}\x{600F}\x{6010}\x{6011}\x{6012}\x{6013}\x{6014}' .
-          '\x{6015}\x{6016}\x{6017}\x{6018}\x{6019}\x{601A}\x{601B}\x{601C}\x{601D}' .
-          '\x{601E}\x{601F}\x{6020}\x{6021}\x{6022}\x{6024}\x{6025}\x{6026}\x{6027}' .
-          '\x{6028}\x{6029}\x{602A}\x{602B}\x{602C}\x{602D}\x{602E}\x{602F}\x{6030}' .
-          '\x{6031}\x{6032}\x{6033}\x{6034}\x{6035}\x{6036}\x{6037}\x{6038}\x{6039}' .
-          '\x{603A}\x{603B}\x{603C}\x{603D}\x{603E}\x{603F}\x{6040}\x{6041}\x{6042}' .
-          '\x{6043}\x{6044}\x{6045}\x{6046}\x{6047}\x{6048}\x{6049}\x{604A}\x{604B}' .
-          '\x{604C}\x{604D}\x{604E}\x{604F}\x{6050}\x{6051}\x{6052}\x{6053}\x{6054}' .
-          '\x{6055}\x{6057}\x{6058}\x{6059}\x{605A}\x{605B}\x{605C}\x{605D}\x{605E}' .
-          '\x{605F}\x{6062}\x{6063}\x{6064}\x{6065}\x{6066}\x{6067}\x{6068}\x{6069}' .
-          '\x{606A}\x{606B}\x{606C}\x{606D}\x{606E}\x{606F}\x{6070}\x{6072}\x{6073}' .
-          '\x{6075}\x{6076}\x{6077}\x{6078}\x{6079}\x{607A}\x{607B}\x{607C}\x{607D}' .
-          '\x{607E}\x{607F}\x{6080}\x{6081}\x{6082}\x{6083}\x{6084}\x{6085}\x{6086}' .
-          '\x{6087}\x{6088}\x{6089}\x{608A}\x{608B}\x{608C}\x{608D}\x{608E}\x{608F}' .
-          '\x{6090}\x{6092}\x{6094}\x{6095}\x{6096}\x{6097}\x{6098}\x{6099}\x{609A}' .
-          '\x{609B}\x{609C}\x{609D}\x{609E}\x{609F}\x{60A0}\x{60A1}\x{60A2}\x{60A3}' .
-          '\x{60A4}\x{60A6}\x{60A7}\x{60A8}\x{60AA}\x{60AB}\x{60AC}\x{60AD}\x{60AE}' .
-          '\x{60AF}\x{60B0}\x{60B1}\x{60B2}\x{60B3}\x{60B4}\x{60B5}\x{60B6}\x{60B7}' .
-          '\x{60B8}\x{60B9}\x{60BA}\x{60BB}\x{60BC}\x{60BD}\x{60BE}\x{60BF}\x{60C0}' .
-          '\x{60C1}\x{60C2}\x{60C3}\x{60C4}\x{60C5}\x{60C6}\x{60C7}\x{60C8}\x{60C9}' .
-          '\x{60CA}\x{60CB}\x{60CC}\x{60CD}\x{60CE}\x{60CF}\x{60D0}\x{60D1}\x{60D3}' .
-          '\x{60D4}\x{60D5}\x{60D7}\x{60D8}\x{60D9}\x{60DA}\x{60DB}\x{60DC}\x{60DD}' .
-          '\x{60DF}\x{60E0}\x{60E1}\x{60E2}\x{60E4}\x{60E6}\x{60E7}\x{60E8}\x{60E9}' .
-          '\x{60EA}\x{60EB}\x{60EC}\x{60ED}\x{60EE}\x{60EF}\x{60F0}\x{60F1}\x{60F2}' .
-          '\x{60F3}\x{60F4}\x{60F5}\x{60F6}\x{60F7}\x{60F8}\x{60F9}\x{60FA}\x{60FB}' .
-          '\x{60FC}\x{60FE}\x{60FF}\x{6100}\x{6101}\x{6103}\x{6104}\x{6105}\x{6106}' .
-          '\x{6108}\x{6109}\x{610A}\x{610B}\x{610C}\x{610D}\x{610E}\x{610F}\x{6110}' .
-          '\x{6112}\x{6113}\x{6114}\x{6115}\x{6116}\x{6117}\x{6118}\x{6119}\x{611A}' .
-          '\x{611B}\x{611C}\x{611D}\x{611F}\x{6120}\x{6122}\x{6123}\x{6124}\x{6125}' .
-          '\x{6126}\x{6127}\x{6128}\x{6129}\x{612A}\x{612B}\x{612C}\x{612D}\x{612E}' .
-          '\x{612F}\x{6130}\x{6132}\x{6134}\x{6136}\x{6137}\x{613A}\x{613B}\x{613C}' .
-          '\x{613D}\x{613E}\x{613F}\x{6140}\x{6141}\x{6142}\x{6143}\x{6144}\x{6145}' .
-          '\x{6146}\x{6147}\x{6148}\x{6149}\x{614A}\x{614B}\x{614C}\x{614D}\x{614E}' .
-          '\x{614F}\x{6150}\x{6151}\x{6152}\x{6153}\x{6154}\x{6155}\x{6156}\x{6157}' .
-          '\x{6158}\x{6159}\x{615A}\x{615B}\x{615C}\x{615D}\x{615E}\x{615F}\x{6161}' .
-          '\x{6162}\x{6163}\x{6164}\x{6165}\x{6166}\x{6167}\x{6168}\x{6169}\x{616A}' .
-          '\x{616B}\x{616C}\x{616D}\x{616E}\x{6170}\x{6171}\x{6172}\x{6173}\x{6174}' .
-          '\x{6175}\x{6176}\x{6177}\x{6178}\x{6179}\x{617A}\x{617C}\x{617E}\x{6180}' .
-          '\x{6181}\x{6182}\x{6183}\x{6184}\x{6185}\x{6187}\x{6188}\x{6189}\x{618A}' .
-          '\x{618B}\x{618C}\x{618D}\x{618E}\x{618F}\x{6190}\x{6191}\x{6192}\x{6193}' .
-          '\x{6194}\x{6195}\x{6196}\x{6198}\x{6199}\x{619A}\x{619B}\x{619D}\x{619E}' .
-          '\x{619F}\x{61A0}\x{61A1}\x{61A2}\x{61A3}\x{61A4}\x{61A5}\x{61A6}\x{61A7}' .
-          '\x{61A8}\x{61A9}\x{61AA}\x{61AB}\x{61AC}\x{61AD}\x{61AE}\x{61AF}\x{61B0}' .
-          '\x{61B1}\x{61B2}\x{61B3}\x{61B4}\x{61B5}\x{61B6}\x{61B7}\x{61B8}\x{61BA}' .
-          '\x{61BC}\x{61BD}\x{61BE}\x{61BF}\x{61C0}\x{61C1}\x{61C2}\x{61C3}\x{61C4}' .
-          '\x{61C5}\x{61C6}\x{61C7}\x{61C8}\x{61C9}\x{61CA}\x{61CB}\x{61CC}\x{61CD}' .
-          '\x{61CE}\x{61CF}\x{61D0}\x{61D1}\x{61D2}\x{61D4}\x{61D6}\x{61D7}\x{61D8}' .
-          '\x{61D9}\x{61DA}\x{61DB}\x{61DC}\x{61DD}\x{61DE}\x{61DF}\x{61E0}\x{61E1}' .
-          '\x{61E2}\x{61E3}\x{61E4}\x{61E5}\x{61E6}\x{61E7}\x{61E8}\x{61E9}\x{61EA}' .
-          '\x{61EB}\x{61ED}\x{61EE}\x{61F0}\x{61F1}\x{61F2}\x{61F3}\x{61F5}\x{61F6}' .
-          '\x{61F7}\x{61F8}\x{61F9}\x{61FA}\x{61FB}\x{61FC}\x{61FD}\x{61FE}\x{61FF}' .
-          '\x{6200}\x{6201}\x{6202}\x{6203}\x{6204}\x{6206}\x{6207}\x{6208}\x{6209}' .
-          '\x{620A}\x{620B}\x{620C}\x{620D}\x{620E}\x{620F}\x{6210}\x{6211}\x{6212}' .
-          '\x{6213}\x{6214}\x{6215}\x{6216}\x{6217}\x{6218}\x{6219}\x{621A}\x{621B}' .
-          '\x{621C}\x{621D}\x{621E}\x{621F}\x{6220}\x{6221}\x{6222}\x{6223}\x{6224}' .
-          '\x{6225}\x{6226}\x{6227}\x{6228}\x{6229}\x{622A}\x{622B}\x{622C}\x{622D}' .
-          '\x{622E}\x{622F}\x{6230}\x{6231}\x{6232}\x{6233}\x{6234}\x{6236}\x{6237}' .
-          '\x{6238}\x{623A}\x{623B}\x{623C}\x{623D}\x{623E}\x{623F}\x{6240}\x{6241}' .
-          '\x{6242}\x{6243}\x{6244}\x{6245}\x{6246}\x{6247}\x{6248}\x{6249}\x{624A}' .
-          '\x{624B}\x{624C}\x{624D}\x{624E}\x{624F}\x{6250}\x{6251}\x{6252}\x{6253}' .
-          '\x{6254}\x{6255}\x{6256}\x{6258}\x{6259}\x{625A}\x{625B}\x{625C}\x{625D}' .
-          '\x{625E}\x{625F}\x{6260}\x{6261}\x{6262}\x{6263}\x{6264}\x{6265}\x{6266}' .
-          '\x{6267}\x{6268}\x{6269}\x{626A}\x{626B}\x{626C}\x{626D}\x{626E}\x{626F}' .
-          '\x{6270}\x{6271}\x{6272}\x{6273}\x{6274}\x{6275}\x{6276}\x{6277}\x{6278}' .
-          '\x{6279}\x{627A}\x{627B}\x{627C}\x{627D}\x{627E}\x{627F}\x{6280}\x{6281}' .
-          '\x{6283}\x{6284}\x{6285}\x{6286}\x{6287}\x{6288}\x{6289}\x{628A}\x{628B}' .
-          '\x{628C}\x{628E}\x{628F}\x{6290}\x{6291}\x{6292}\x{6293}\x{6294}\x{6295}' .
-          '\x{6296}\x{6297}\x{6298}\x{6299}\x{629A}\x{629B}\x{629C}\x{629E}\x{629F}' .
-          '\x{62A0}\x{62A1}\x{62A2}\x{62A3}\x{62A4}\x{62A5}\x{62A7}\x{62A8}\x{62A9}' .
-          '\x{62AA}\x{62AB}\x{62AC}\x{62AD}\x{62AE}\x{62AF}\x{62B0}\x{62B1}\x{62B2}' .
-          '\x{62B3}\x{62B4}\x{62B5}\x{62B6}\x{62B7}\x{62B8}\x{62B9}\x{62BA}\x{62BB}' .
-          '\x{62BC}\x{62BD}\x{62BE}\x{62BF}\x{62C0}\x{62C1}\x{62C2}\x{62C3}\x{62C4}' .
-          '\x{62C5}\x{62C6}\x{62C7}\x{62C8}\x{62C9}\x{62CA}\x{62CB}\x{62CC}\x{62CD}' .
-          '\x{62CE}\x{62CF}\x{62D0}\x{62D1}\x{62D2}\x{62D3}\x{62D4}\x{62D5}\x{62D6}' .
-          '\x{62D7}\x{62D8}\x{62D9}\x{62DA}\x{62DB}\x{62DC}\x{62DD}\x{62DF}\x{62E0}' .
-          '\x{62E1}\x{62E2}\x{62E3}\x{62E4}\x{62E5}\x{62E6}\x{62E7}\x{62E8}\x{62E9}' .
-          '\x{62EB}\x{62EC}\x{62ED}\x{62EE}\x{62EF}\x{62F0}\x{62F1}\x{62F2}\x{62F3}' .
-          '\x{62F4}\x{62F5}\x{62F6}\x{62F7}\x{62F8}\x{62F9}\x{62FA}\x{62FB}\x{62FC}' .
-          '\x{62FD}\x{62FE}\x{62FF}\x{6300}\x{6301}\x{6302}\x{6303}\x{6304}\x{6305}' .
-          '\x{6306}\x{6307}\x{6308}\x{6309}\x{630B}\x{630C}\x{630D}\x{630E}\x{630F}' .
-          '\x{6310}\x{6311}\x{6312}\x{6313}\x{6314}\x{6315}\x{6316}\x{6318}\x{6319}' .
-          '\x{631A}\x{631B}\x{631C}\x{631D}\x{631E}\x{631F}\x{6320}\x{6321}\x{6322}' .
-          '\x{6323}\x{6324}\x{6325}\x{6326}\x{6327}\x{6328}\x{6329}\x{632A}\x{632B}' .
-          '\x{632C}\x{632D}\x{632E}\x{632F}\x{6330}\x{6332}\x{6333}\x{6334}\x{6336}' .
-          '\x{6338}\x{6339}\x{633A}\x{633B}\x{633C}\x{633D}\x{633E}\x{6340}\x{6341}' .
-          '\x{6342}\x{6343}\x{6344}\x{6345}\x{6346}\x{6347}\x{6348}\x{6349}\x{634A}' .
-          '\x{634B}\x{634C}\x{634D}\x{634E}\x{634F}\x{6350}\x{6351}\x{6352}\x{6353}' .
-          '\x{6354}\x{6355}\x{6356}\x{6357}\x{6358}\x{6359}\x{635A}\x{635C}\x{635D}' .
-          '\x{635E}\x{635F}\x{6360}\x{6361}\x{6362}\x{6363}\x{6364}\x{6365}\x{6366}' .
-          '\x{6367}\x{6368}\x{6369}\x{636A}\x{636B}\x{636C}\x{636D}\x{636E}\x{636F}' .
-          '\x{6370}\x{6371}\x{6372}\x{6373}\x{6374}\x{6375}\x{6376}\x{6377}\x{6378}' .
-          '\x{6379}\x{637A}\x{637B}\x{637C}\x{637D}\x{637E}\x{6380}\x{6381}\x{6382}' .
-          '\x{6383}\x{6384}\x{6385}\x{6386}\x{6387}\x{6388}\x{6389}\x{638A}\x{638C}' .
-          '\x{638D}\x{638E}\x{638F}\x{6390}\x{6391}\x{6392}\x{6394}\x{6395}\x{6396}' .
-          '\x{6397}\x{6398}\x{6399}\x{639A}\x{639B}\x{639C}\x{639D}\x{639E}\x{639F}' .
-          '\x{63A0}\x{63A1}\x{63A2}\x{63A3}\x{63A4}\x{63A5}\x{63A6}\x{63A7}\x{63A8}' .
-          '\x{63A9}\x{63AA}\x{63AB}\x{63AC}\x{63AD}\x{63AE}\x{63AF}\x{63B0}\x{63B1}' .
-          '\x{63B2}\x{63B3}\x{63B4}\x{63B5}\x{63B6}\x{63B7}\x{63B8}\x{63B9}\x{63BA}' .
-          '\x{63BC}\x{63BD}\x{63BE}\x{63BF}\x{63C0}\x{63C1}\x{63C2}\x{63C3}\x{63C4}' .
-          '\x{63C5}\x{63C6}\x{63C7}\x{63C8}\x{63C9}\x{63CA}\x{63CB}\x{63CC}\x{63CD}' .
-          '\x{63CE}\x{63CF}\x{63D0}\x{63D2}\x{63D3}\x{63D4}\x{63D5}\x{63D6}\x{63D7}' .
-          '\x{63D8}\x{63D9}\x{63DA}\x{63DB}\x{63DC}\x{63DD}\x{63DE}\x{63DF}\x{63E0}' .
-          '\x{63E1}\x{63E2}\x{63E3}\x{63E4}\x{63E5}\x{63E6}\x{63E7}\x{63E8}\x{63E9}' .
-          '\x{63EA}\x{63EB}\x{63EC}\x{63ED}\x{63EE}\x{63EF}\x{63F0}\x{63F1}\x{63F2}' .
-          '\x{63F3}\x{63F4}\x{63F5}\x{63F6}\x{63F7}\x{63F8}\x{63F9}\x{63FA}\x{63FB}' .
-          '\x{63FC}\x{63FD}\x{63FE}\x{63FF}\x{6400}\x{6401}\x{6402}\x{6403}\x{6404}' .
-          '\x{6405}\x{6406}\x{6408}\x{6409}\x{640A}\x{640B}\x{640C}\x{640D}\x{640E}' .
-          '\x{640F}\x{6410}\x{6411}\x{6412}\x{6413}\x{6414}\x{6415}\x{6416}\x{6417}' .
-          '\x{6418}\x{6419}\x{641A}\x{641B}\x{641C}\x{641D}\x{641E}\x{641F}\x{6420}' .
-          '\x{6421}\x{6422}\x{6423}\x{6424}\x{6425}\x{6426}\x{6427}\x{6428}\x{6429}' .
-          '\x{642A}\x{642B}\x{642C}\x{642D}\x{642E}\x{642F}\x{6430}\x{6431}\x{6432}' .
-          '\x{6433}\x{6434}\x{6435}\x{6436}\x{6437}\x{6438}\x{6439}\x{643A}\x{643D}' .
-          '\x{643E}\x{643F}\x{6440}\x{6441}\x{6443}\x{6444}\x{6445}\x{6446}\x{6447}' .
-          '\x{6448}\x{644A}\x{644B}\x{644C}\x{644D}\x{644E}\x{644F}\x{6450}\x{6451}' .
-          '\x{6452}\x{6453}\x{6454}\x{6455}\x{6456}\x{6457}\x{6458}\x{6459}\x{645B}' .
-          '\x{645C}\x{645D}\x{645E}\x{645F}\x{6460}\x{6461}\x{6462}\x{6463}\x{6464}' .
-          '\x{6465}\x{6466}\x{6467}\x{6468}\x{6469}\x{646A}\x{646B}\x{646C}\x{646D}' .
-          '\x{646E}\x{646F}\x{6470}\x{6471}\x{6472}\x{6473}\x{6474}\x{6475}\x{6476}' .
-          '\x{6477}\x{6478}\x{6479}\x{647A}\x{647B}\x{647C}\x{647D}\x{647F}\x{6480}' .
-          '\x{6481}\x{6482}\x{6483}\x{6484}\x{6485}\x{6487}\x{6488}\x{6489}\x{648A}' .
-          '\x{648B}\x{648C}\x{648D}\x{648E}\x{648F}\x{6490}\x{6491}\x{6492}\x{6493}' .
-          '\x{6494}\x{6495}\x{6496}\x{6497}\x{6498}\x{6499}\x{649A}\x{649B}\x{649C}' .
-          '\x{649D}\x{649E}\x{649F}\x{64A0}\x{64A2}\x{64A3}\x{64A4}\x{64A5}\x{64A6}' .
-          '\x{64A7}\x{64A8}\x{64A9}\x{64AA}\x{64AB}\x{64AC}\x{64AD}\x{64AE}\x{64B0}' .
-          '\x{64B1}\x{64B2}\x{64B3}\x{64B4}\x{64B5}\x{64B7}\x{64B8}\x{64B9}\x{64BA}' .
-          '\x{64BB}\x{64BC}\x{64BD}\x{64BE}\x{64BF}\x{64C0}\x{64C1}\x{64C2}\x{64C3}' .
-          '\x{64C4}\x{64C5}\x{64C6}\x{64C7}\x{64C9}\x{64CA}\x{64CB}\x{64CC}\x{64CD}' .
-          '\x{64CE}\x{64CF}\x{64D0}\x{64D1}\x{64D2}\x{64D3}\x{64D4}\x{64D6}\x{64D7}' .
-          '\x{64D8}\x{64D9}\x{64DA}\x{64DB}\x{64DC}\x{64DD}\x{64DE}\x{64DF}\x{64E0}' .
-          '\x{64E2}\x{64E3}\x{64E4}\x{64E6}\x{64E7}\x{64E8}\x{64E9}\x{64EA}\x{64EB}' .
-          '\x{64EC}\x{64ED}\x{64EF}\x{64F0}\x{64F1}\x{64F2}\x{64F3}\x{64F4}\x{64F6}' .
-          '\x{64F7}\x{64F8}\x{64FA}\x{64FB}\x{64FC}\x{64FD}\x{64FE}\x{64FF}\x{6500}' .
-          '\x{6501}\x{6503}\x{6504}\x{6505}\x{6506}\x{6507}\x{6508}\x{6509}\x{650B}' .
-          '\x{650C}\x{650D}\x{650E}\x{650F}\x{6510}\x{6511}\x{6512}\x{6513}\x{6514}' .
-          '\x{6515}\x{6516}\x{6517}\x{6518}\x{6519}\x{651A}\x{651B}\x{651C}\x{651D}' .
-          '\x{651E}\x{6520}\x{6521}\x{6522}\x{6523}\x{6524}\x{6525}\x{6526}\x{6527}' .
-          '\x{6529}\x{652A}\x{652B}\x{652C}\x{652D}\x{652E}\x{652F}\x{6530}\x{6531}' .
-          '\x{6532}\x{6533}\x{6534}\x{6535}\x{6536}\x{6537}\x{6538}\x{6539}\x{653A}' .
-          '\x{653B}\x{653C}\x{653D}\x{653E}\x{653F}\x{6541}\x{6543}\x{6544}\x{6545}' .
-          '\x{6546}\x{6547}\x{6548}\x{6549}\x{654A}\x{654B}\x{654C}\x{654D}\x{654E}' .
-          '\x{654F}\x{6550}\x{6551}\x{6552}\x{6553}\x{6554}\x{6555}\x{6556}\x{6557}' .
-          '\x{6558}\x{6559}\x{655B}\x{655C}\x{655D}\x{655E}\x{6560}\x{6561}\x{6562}' .
-          '\x{6563}\x{6564}\x{6565}\x{6566}\x{6567}\x{6568}\x{6569}\x{656A}\x{656B}' .
-          '\x{656C}\x{656E}\x{656F}\x{6570}\x{6571}\x{6572}\x{6573}\x{6574}\x{6575}' .
-          '\x{6576}\x{6577}\x{6578}\x{6579}\x{657A}\x{657B}\x{657C}\x{657E}\x{657F}' .
-          '\x{6580}\x{6581}\x{6582}\x{6583}\x{6584}\x{6585}\x{6586}\x{6587}\x{6588}' .
-          '\x{6589}\x{658B}\x{658C}\x{658D}\x{658E}\x{658F}\x{6590}\x{6591}\x{6592}' .
-          '\x{6593}\x{6594}\x{6595}\x{6596}\x{6597}\x{6598}\x{6599}\x{659B}\x{659C}' .
-          '\x{659D}\x{659E}\x{659F}\x{65A0}\x{65A1}\x{65A2}\x{65A3}\x{65A4}\x{65A5}' .
-          '\x{65A6}\x{65A7}\x{65A8}\x{65A9}\x{65AA}\x{65AB}\x{65AC}\x{65AD}\x{65AE}' .
-          '\x{65AF}\x{65B0}\x{65B1}\x{65B2}\x{65B3}\x{65B4}\x{65B6}\x{65B7}\x{65B8}' .
-          '\x{65B9}\x{65BA}\x{65BB}\x{65BC}\x{65BD}\x{65BF}\x{65C0}\x{65C1}\x{65C2}' .
-          '\x{65C3}\x{65C4}\x{65C5}\x{65C6}\x{65C7}\x{65CA}\x{65CB}\x{65CC}\x{65CD}' .
-          '\x{65CE}\x{65CF}\x{65D0}\x{65D2}\x{65D3}\x{65D4}\x{65D5}\x{65D6}\x{65D7}' .
-          '\x{65DA}\x{65DB}\x{65DD}\x{65DE}\x{65DF}\x{65E0}\x{65E1}\x{65E2}\x{65E3}' .
-          '\x{65E5}\x{65E6}\x{65E7}\x{65E8}\x{65E9}\x{65EB}\x{65EC}\x{65ED}\x{65EE}' .
-          '\x{65EF}\x{65F0}\x{65F1}\x{65F2}\x{65F3}\x{65F4}\x{65F5}\x{65F6}\x{65F7}' .
-          '\x{65F8}\x{65FA}\x{65FB}\x{65FC}\x{65FD}\x{6600}\x{6601}\x{6602}\x{6603}' .
-          '\x{6604}\x{6605}\x{6606}\x{6607}\x{6608}\x{6609}\x{660A}\x{660B}\x{660C}' .
-          '\x{660D}\x{660E}\x{660F}\x{6610}\x{6611}\x{6612}\x{6613}\x{6614}\x{6615}' .
-          '\x{6616}\x{6618}\x{6619}\x{661A}\x{661B}\x{661C}\x{661D}\x{661F}\x{6620}' .
-          '\x{6621}\x{6622}\x{6623}\x{6624}\x{6625}\x{6626}\x{6627}\x{6628}\x{6629}' .
-          '\x{662A}\x{662B}\x{662D}\x{662E}\x{662F}\x{6630}\x{6631}\x{6632}\x{6633}' .
-          '\x{6634}\x{6635}\x{6636}\x{6639}\x{663A}\x{663C}\x{663D}\x{663E}\x{6640}' .
-          '\x{6641}\x{6642}\x{6643}\x{6644}\x{6645}\x{6646}\x{6647}\x{6649}\x{664A}' .
-          '\x{664B}\x{664C}\x{664E}\x{664F}\x{6650}\x{6651}\x{6652}\x{6653}\x{6654}' .
-          '\x{6655}\x{6656}\x{6657}\x{6658}\x{6659}\x{665A}\x{665B}\x{665C}\x{665D}' .
-          '\x{665E}\x{665F}\x{6661}\x{6662}\x{6664}\x{6665}\x{6666}\x{6668}\x{6669}' .
-          '\x{666A}\x{666B}\x{666C}\x{666D}\x{666E}\x{666F}\x{6670}\x{6671}\x{6672}' .
-          '\x{6673}\x{6674}\x{6675}\x{6676}\x{6677}\x{6678}\x{6679}\x{667A}\x{667B}' .
-          '\x{667C}\x{667D}\x{667E}\x{667F}\x{6680}\x{6681}\x{6682}\x{6683}\x{6684}' .
-          '\x{6685}\x{6686}\x{6687}\x{6688}\x{6689}\x{668A}\x{668B}\x{668C}\x{668D}' .
-          '\x{668E}\x{668F}\x{6690}\x{6691}\x{6693}\x{6694}\x{6695}\x{6696}\x{6697}' .
-          '\x{6698}\x{6699}\x{669A}\x{669B}\x{669D}\x{669F}\x{66A0}\x{66A1}\x{66A2}' .
-          '\x{66A3}\x{66A4}\x{66A5}\x{66A6}\x{66A7}\x{66A8}\x{66A9}\x{66AA}\x{66AB}' .
-          '\x{66AE}\x{66AF}\x{66B0}\x{66B1}\x{66B2}\x{66B3}\x{66B4}\x{66B5}\x{66B6}' .
-          '\x{66B7}\x{66B8}\x{66B9}\x{66BA}\x{66BB}\x{66BC}\x{66BD}\x{66BE}\x{66BF}' .
-          '\x{66C0}\x{66C1}\x{66C2}\x{66C3}\x{66C4}\x{66C5}\x{66C6}\x{66C7}\x{66C8}' .
-          '\x{66C9}\x{66CA}\x{66CB}\x{66CC}\x{66CD}\x{66CE}\x{66CF}\x{66D1}\x{66D2}' .
-          '\x{66D4}\x{66D5}\x{66D6}\x{66D8}\x{66D9}\x{66DA}\x{66DB}\x{66DC}\x{66DD}' .
-          '\x{66DE}\x{66E0}\x{66E1}\x{66E2}\x{66E3}\x{66E4}\x{66E5}\x{66E6}\x{66E7}' .
-          '\x{66E8}\x{66E9}\x{66EA}\x{66EB}\x{66EC}\x{66ED}\x{66EE}\x{66F0}\x{66F1}' .
-          '\x{66F2}\x{66F3}\x{66F4}\x{66F5}\x{66F6}\x{66F7}\x{66F8}\x{66F9}\x{66FA}' .
-          '\x{66FB}\x{66FC}\x{66FE}\x{66FF}\x{6700}\x{6701}\x{6703}\x{6704}\x{6705}' .
-          '\x{6706}\x{6708}\x{6709}\x{670A}\x{670B}\x{670C}\x{670D}\x{670E}\x{670F}' .
-          '\x{6710}\x{6711}\x{6712}\x{6713}\x{6714}\x{6715}\x{6716}\x{6717}\x{6718}' .
-          '\x{671A}\x{671B}\x{671C}\x{671D}\x{671E}\x{671F}\x{6720}\x{6721}\x{6722}' .
-          '\x{6723}\x{6725}\x{6726}\x{6727}\x{6728}\x{672A}\x{672B}\x{672C}\x{672D}' .
-          '\x{672E}\x{672F}\x{6730}\x{6731}\x{6732}\x{6733}\x{6734}\x{6735}\x{6736}' .
-          '\x{6737}\x{6738}\x{6739}\x{673A}\x{673B}\x{673C}\x{673D}\x{673E}\x{673F}' .
-          '\x{6740}\x{6741}\x{6742}\x{6743}\x{6744}\x{6745}\x{6746}\x{6747}\x{6748}' .
-          '\x{6749}\x{674A}\x{674B}\x{674C}\x{674D}\x{674E}\x{674F}\x{6750}\x{6751}' .
-          '\x{6752}\x{6753}\x{6754}\x{6755}\x{6756}\x{6757}\x{6758}\x{6759}\x{675A}' .
-          '\x{675B}\x{675C}\x{675D}\x{675E}\x{675F}\x{6760}\x{6761}\x{6762}\x{6763}' .
-          '\x{6764}\x{6765}\x{6766}\x{6768}\x{6769}\x{676A}\x{676B}\x{676C}\x{676D}' .
-          '\x{676E}\x{676F}\x{6770}\x{6771}\x{6772}\x{6773}\x{6774}\x{6775}\x{6776}' .
-          '\x{6777}\x{6778}\x{6779}\x{677A}\x{677B}\x{677C}\x{677D}\x{677E}\x{677F}' .
-          '\x{6780}\x{6781}\x{6782}\x{6783}\x{6784}\x{6785}\x{6786}\x{6787}\x{6789}' .
-          '\x{678A}\x{678B}\x{678C}\x{678D}\x{678E}\x{678F}\x{6790}\x{6791}\x{6792}' .
-          '\x{6793}\x{6794}\x{6795}\x{6797}\x{6798}\x{6799}\x{679A}\x{679B}\x{679C}' .
-          '\x{679D}\x{679E}\x{679F}\x{67A0}\x{67A1}\x{67A2}\x{67A3}\x{67A4}\x{67A5}' .
-          '\x{67A6}\x{67A7}\x{67A8}\x{67AA}\x{67AB}\x{67AC}\x{67AD}\x{67AE}\x{67AF}' .
-          '\x{67B0}\x{67B1}\x{67B2}\x{67B3}\x{67B4}\x{67B5}\x{67B6}\x{67B7}\x{67B8}' .
-          '\x{67B9}\x{67BA}\x{67BB}\x{67BC}\x{67BE}\x{67C0}\x{67C1}\x{67C2}\x{67C3}' .
-          '\x{67C4}\x{67C5}\x{67C6}\x{67C7}\x{67C8}\x{67C9}\x{67CA}\x{67CB}\x{67CC}' .
-          '\x{67CD}\x{67CE}\x{67CF}\x{67D0}\x{67D1}\x{67D2}\x{67D3}\x{67D4}\x{67D6}' .
-          '\x{67D8}\x{67D9}\x{67DA}\x{67DB}\x{67DC}\x{67DD}\x{67DE}\x{67DF}\x{67E0}' .
-          '\x{67E1}\x{67E2}\x{67E3}\x{67E4}\x{67E5}\x{67E6}\x{67E7}\x{67E8}\x{67E9}' .
-          '\x{67EA}\x{67EB}\x{67EC}\x{67ED}\x{67EE}\x{67EF}\x{67F0}\x{67F1}\x{67F2}' .
-          '\x{67F3}\x{67F4}\x{67F5}\x{67F6}\x{67F7}\x{67F8}\x{67FA}\x{67FB}\x{67FC}' .
-          '\x{67FD}\x{67FE}\x{67FF}\x{6800}\x{6802}\x{6803}\x{6804}\x{6805}\x{6806}' .
-          '\x{6807}\x{6808}\x{6809}\x{680A}\x{680B}\x{680C}\x{680D}\x{680E}\x{680F}' .
-          '\x{6810}\x{6811}\x{6812}\x{6813}\x{6814}\x{6816}\x{6817}\x{6818}\x{6819}' .
-          '\x{681A}\x{681B}\x{681C}\x{681D}\x{681F}\x{6820}\x{6821}\x{6822}\x{6823}' .
-          '\x{6824}\x{6825}\x{6826}\x{6828}\x{6829}\x{682A}\x{682B}\x{682C}\x{682D}' .
-          '\x{682E}\x{682F}\x{6831}\x{6832}\x{6833}\x{6834}\x{6835}\x{6836}\x{6837}' .
-          '\x{6838}\x{6839}\x{683A}\x{683B}\x{683C}\x{683D}\x{683E}\x{683F}\x{6840}' .
-          '\x{6841}\x{6842}\x{6843}\x{6844}\x{6845}\x{6846}\x{6847}\x{6848}\x{6849}' .
-          '\x{684A}\x{684B}\x{684C}\x{684D}\x{684E}\x{684F}\x{6850}\x{6851}\x{6852}' .
-          '\x{6853}\x{6854}\x{6855}\x{6856}\x{6857}\x{685B}\x{685D}\x{6860}\x{6861}' .
-          '\x{6862}\x{6863}\x{6864}\x{6865}\x{6866}\x{6867}\x{6868}\x{6869}\x{686A}' .
-          '\x{686B}\x{686C}\x{686D}\x{686E}\x{686F}\x{6870}\x{6871}\x{6872}\x{6873}' .
-          '\x{6874}\x{6875}\x{6876}\x{6877}\x{6878}\x{6879}\x{687B}\x{687C}\x{687D}' .
-          '\x{687E}\x{687F}\x{6880}\x{6881}\x{6882}\x{6883}\x{6884}\x{6885}\x{6886}' .
-          '\x{6887}\x{6888}\x{6889}\x{688A}\x{688B}\x{688C}\x{688D}\x{688E}\x{688F}' .
-          '\x{6890}\x{6891}\x{6892}\x{6893}\x{6894}\x{6896}\x{6897}\x{6898}\x{689A}' .
-          '\x{689B}\x{689C}\x{689D}\x{689E}\x{689F}\x{68A0}\x{68A1}\x{68A2}\x{68A3}' .
-          '\x{68A4}\x{68A6}\x{68A7}\x{68A8}\x{68A9}\x{68AA}\x{68AB}\x{68AC}\x{68AD}' .
-          '\x{68AE}\x{68AF}\x{68B0}\x{68B1}\x{68B2}\x{68B3}\x{68B4}\x{68B5}\x{68B6}' .
-          '\x{68B7}\x{68B9}\x{68BB}\x{68BC}\x{68BD}\x{68BE}\x{68BF}\x{68C0}\x{68C1}' .
-          '\x{68C2}\x{68C4}\x{68C6}\x{68C7}\x{68C8}\x{68C9}\x{68CA}\x{68CB}\x{68CC}' .
-          '\x{68CD}\x{68CE}\x{68CF}\x{68D0}\x{68D1}\x{68D2}\x{68D3}\x{68D4}\x{68D5}' .
-          '\x{68D6}\x{68D7}\x{68D8}\x{68DA}\x{68DB}\x{68DC}\x{68DD}\x{68DE}\x{68DF}' .
-          '\x{68E0}\x{68E1}\x{68E3}\x{68E4}\x{68E6}\x{68E7}\x{68E8}\x{68E9}\x{68EA}' .
-          '\x{68EB}\x{68EC}\x{68ED}\x{68EE}\x{68EF}\x{68F0}\x{68F1}\x{68F2}\x{68F3}' .
-          '\x{68F4}\x{68F5}\x{68F6}\x{68F7}\x{68F8}\x{68F9}\x{68FA}\x{68FB}\x{68FC}' .
-          '\x{68FD}\x{68FE}\x{68FF}\x{6901}\x{6902}\x{6903}\x{6904}\x{6905}\x{6906}' .
-          '\x{6907}\x{6908}\x{690A}\x{690B}\x{690C}\x{690D}\x{690E}\x{690F}\x{6910}' .
-          '\x{6911}\x{6912}\x{6913}\x{6914}\x{6915}\x{6916}\x{6917}\x{6918}\x{6919}' .
-          '\x{691A}\x{691B}\x{691C}\x{691D}\x{691E}\x{691F}\x{6920}\x{6921}\x{6922}' .
-          '\x{6923}\x{6924}\x{6925}\x{6926}\x{6927}\x{6928}\x{6929}\x{692A}\x{692B}' .
-          '\x{692C}\x{692D}\x{692E}\x{692F}\x{6930}\x{6931}\x{6932}\x{6933}\x{6934}' .
-          '\x{6935}\x{6936}\x{6937}\x{6938}\x{6939}\x{693A}\x{693B}\x{693C}\x{693D}' .
-          '\x{693F}\x{6940}\x{6941}\x{6942}\x{6943}\x{6944}\x{6945}\x{6946}\x{6947}' .
-          '\x{6948}\x{6949}\x{694A}\x{694B}\x{694C}\x{694E}\x{694F}\x{6950}\x{6951}' .
-          '\x{6952}\x{6953}\x{6954}\x{6955}\x{6956}\x{6957}\x{6958}\x{6959}\x{695A}' .
-          '\x{695B}\x{695C}\x{695D}\x{695E}\x{695F}\x{6960}\x{6961}\x{6962}\x{6963}' .
-          '\x{6964}\x{6965}\x{6966}\x{6967}\x{6968}\x{6969}\x{696A}\x{696B}\x{696C}' .
-          '\x{696D}\x{696E}\x{696F}\x{6970}\x{6971}\x{6972}\x{6973}\x{6974}\x{6975}' .
-          '\x{6976}\x{6977}\x{6978}\x{6979}\x{697A}\x{697B}\x{697C}\x{697D}\x{697E}' .
-          '\x{697F}\x{6980}\x{6981}\x{6982}\x{6983}\x{6984}\x{6985}\x{6986}\x{6987}' .
-          '\x{6988}\x{6989}\x{698A}\x{698B}\x{698C}\x{698D}\x{698E}\x{698F}\x{6990}' .
-          '\x{6991}\x{6992}\x{6993}\x{6994}\x{6995}\x{6996}\x{6997}\x{6998}\x{6999}' .
-          '\x{699A}\x{699B}\x{699C}\x{699D}\x{699E}\x{69A0}\x{69A1}\x{69A3}\x{69A4}' .
-          '\x{69A5}\x{69A6}\x{69A7}\x{69A8}\x{69A9}\x{69AA}\x{69AB}\x{69AC}\x{69AD}' .
-          '\x{69AE}\x{69AF}\x{69B0}\x{69B1}\x{69B2}\x{69B3}\x{69B4}\x{69B5}\x{69B6}' .
-          '\x{69B7}\x{69B8}\x{69B9}\x{69BA}\x{69BB}\x{69BC}\x{69BD}\x{69BE}\x{69BF}' .
-          '\x{69C1}\x{69C2}\x{69C3}\x{69C4}\x{69C5}\x{69C6}\x{69C7}\x{69C8}\x{69C9}' .
-          '\x{69CA}\x{69CB}\x{69CC}\x{69CD}\x{69CE}\x{69CF}\x{69D0}\x{69D3}\x{69D4}' .
-          '\x{69D8}\x{69D9}\x{69DA}\x{69DB}\x{69DC}\x{69DD}\x{69DE}\x{69DF}\x{69E0}' .
-          '\x{69E1}\x{69E2}\x{69E3}\x{69E4}\x{69E5}\x{69E6}\x{69E7}\x{69E8}\x{69E9}' .
-          '\x{69EA}\x{69EB}\x{69EC}\x{69ED}\x{69EE}\x{69EF}\x{69F0}\x{69F1}\x{69F2}' .
-          '\x{69F3}\x{69F4}\x{69F5}\x{69F6}\x{69F7}\x{69F8}\x{69FA}\x{69FB}\x{69FC}' .
-          '\x{69FD}\x{69FE}\x{69FF}\x{6A00}\x{6A01}\x{6A02}\x{6A04}\x{6A05}\x{6A06}' .
-          '\x{6A07}\x{6A08}\x{6A09}\x{6A0A}\x{6A0B}\x{6A0D}\x{6A0E}\x{6A0F}\x{6A10}' .
-          '\x{6A11}\x{6A12}\x{6A13}\x{6A14}\x{6A15}\x{6A16}\x{6A17}\x{6A18}\x{6A19}' .
-          '\x{6A1A}\x{6A1B}\x{6A1D}\x{6A1E}\x{6A1F}\x{6A20}\x{6A21}\x{6A22}\x{6A23}' .
-          '\x{6A25}\x{6A26}\x{6A27}\x{6A28}\x{6A29}\x{6A2A}\x{6A2B}\x{6A2C}\x{6A2D}' .
-          '\x{6A2E}\x{6A2F}\x{6A30}\x{6A31}\x{6A32}\x{6A33}\x{6A34}\x{6A35}\x{6A36}' .
-          '\x{6A38}\x{6A39}\x{6A3A}\x{6A3B}\x{6A3C}\x{6A3D}\x{6A3E}\x{6A3F}\x{6A40}' .
-          '\x{6A41}\x{6A42}\x{6A43}\x{6A44}\x{6A45}\x{6A46}\x{6A47}\x{6A48}\x{6A49}' .
-          '\x{6A4B}\x{6A4C}\x{6A4D}\x{6A4E}\x{6A4F}\x{6A50}\x{6A51}\x{6A52}\x{6A54}' .
-          '\x{6A55}\x{6A56}\x{6A57}\x{6A58}\x{6A59}\x{6A5A}\x{6A5B}\x{6A5D}\x{6A5E}' .
-          '\x{6A5F}\x{6A60}\x{6A61}\x{6A62}\x{6A63}\x{6A64}\x{6A65}\x{6A66}\x{6A67}' .
-          '\x{6A68}\x{6A69}\x{6A6A}\x{6A6B}\x{6A6C}\x{6A6D}\x{6A6F}\x{6A71}\x{6A72}' .
-          '\x{6A73}\x{6A74}\x{6A75}\x{6A76}\x{6A77}\x{6A78}\x{6A79}\x{6A7A}\x{6A7B}' .
-          '\x{6A7C}\x{6A7D}\x{6A7E}\x{6A7F}\x{6A80}\x{6A81}\x{6A82}\x{6A83}\x{6A84}' .
-          '\x{6A85}\x{6A87}\x{6A88}\x{6A89}\x{6A8B}\x{6A8C}\x{6A8D}\x{6A8E}\x{6A90}' .
-          '\x{6A91}\x{6A92}\x{6A93}\x{6A94}\x{6A95}\x{6A96}\x{6A97}\x{6A98}\x{6A9A}' .
-          '\x{6A9B}\x{6A9C}\x{6A9E}\x{6A9F}\x{6AA0}\x{6AA1}\x{6AA2}\x{6AA3}\x{6AA4}' .
-          '\x{6AA5}\x{6AA6}\x{6AA7}\x{6AA8}\x{6AA9}\x{6AAB}\x{6AAC}\x{6AAD}\x{6AAE}' .
-          '\x{6AAF}\x{6AB0}\x{6AB2}\x{6AB3}\x{6AB4}\x{6AB5}\x{6AB6}\x{6AB7}\x{6AB8}' .
-          '\x{6AB9}\x{6ABA}\x{6ABB}\x{6ABC}\x{6ABD}\x{6ABF}\x{6AC1}\x{6AC2}\x{6AC3}' .
-          '\x{6AC5}\x{6AC6}\x{6AC7}\x{6ACA}\x{6ACB}\x{6ACC}\x{6ACD}\x{6ACE}\x{6ACF}' .
-          '\x{6AD0}\x{6AD1}\x{6AD2}\x{6AD3}\x{6AD4}\x{6AD5}\x{6AD6}\x{6AD7}\x{6AD9}' .
-          '\x{6ADA}\x{6ADB}\x{6ADC}\x{6ADD}\x{6ADE}\x{6ADF}\x{6AE0}\x{6AE1}\x{6AE2}' .
-          '\x{6AE3}\x{6AE4}\x{6AE5}\x{6AE6}\x{6AE7}\x{6AE8}\x{6AEA}\x{6AEB}\x{6AEC}' .
-          '\x{6AED}\x{6AEE}\x{6AEF}\x{6AF0}\x{6AF1}\x{6AF2}\x{6AF3}\x{6AF4}\x{6AF5}' .
-          '\x{6AF6}\x{6AF7}\x{6AF8}\x{6AF9}\x{6AFA}\x{6AFB}\x{6AFC}\x{6AFD}\x{6AFE}' .
-          '\x{6AFF}\x{6B00}\x{6B01}\x{6B02}\x{6B03}\x{6B04}\x{6B05}\x{6B06}\x{6B07}' .
-          '\x{6B08}\x{6B09}\x{6B0A}\x{6B0B}\x{6B0C}\x{6B0D}\x{6B0F}\x{6B10}\x{6B11}' .
-          '\x{6B12}\x{6B13}\x{6B14}\x{6B15}\x{6B16}\x{6B17}\x{6B18}\x{6B19}\x{6B1A}' .
-          '\x{6B1C}\x{6B1D}\x{6B1E}\x{6B1F}\x{6B20}\x{6B21}\x{6B22}\x{6B23}\x{6B24}' .
-          '\x{6B25}\x{6B26}\x{6B27}\x{6B28}\x{6B29}\x{6B2A}\x{6B2B}\x{6B2C}\x{6B2D}' .
-          '\x{6B2F}\x{6B30}\x{6B31}\x{6B32}\x{6B33}\x{6B34}\x{6B36}\x{6B37}\x{6B38}' .
-          '\x{6B39}\x{6B3A}\x{6B3B}\x{6B3C}\x{6B3D}\x{6B3E}\x{6B3F}\x{6B41}\x{6B42}' .
-          '\x{6B43}\x{6B44}\x{6B45}\x{6B46}\x{6B47}\x{6B48}\x{6B49}\x{6B4A}\x{6B4B}' .
-          '\x{6B4C}\x{6B4D}\x{6B4E}\x{6B4F}\x{6B50}\x{6B51}\x{6B52}\x{6B53}\x{6B54}' .
-          '\x{6B55}\x{6B56}\x{6B59}\x{6B5A}\x{6B5B}\x{6B5C}\x{6B5E}\x{6B5F}\x{6B60}' .
-          '\x{6B61}\x{6B62}\x{6B63}\x{6B64}\x{6B65}\x{6B66}\x{6B67}\x{6B69}\x{6B6A}' .
-          '\x{6B6B}\x{6B6D}\x{6B6F}\x{6B70}\x{6B72}\x{6B73}\x{6B74}\x{6B76}\x{6B77}' .
-          '\x{6B78}\x{6B79}\x{6B7A}\x{6B7B}\x{6B7C}\x{6B7E}\x{6B7F}\x{6B80}\x{6B81}' .
-          '\x{6B82}\x{6B83}\x{6B84}\x{6B85}\x{6B86}\x{6B87}\x{6B88}\x{6B89}\x{6B8A}' .
-          '\x{6B8B}\x{6B8C}\x{6B8D}\x{6B8E}\x{6B8F}\x{6B90}\x{6B91}\x{6B92}\x{6B93}' .
-          '\x{6B94}\x{6B95}\x{6B96}\x{6B97}\x{6B98}\x{6B99}\x{6B9A}\x{6B9B}\x{6B9C}' .
-          '\x{6B9D}\x{6B9E}\x{6B9F}\x{6BA0}\x{6BA1}\x{6BA2}\x{6BA3}\x{6BA4}\x{6BA5}' .
-          '\x{6BA6}\x{6BA7}\x{6BA8}\x{6BA9}\x{6BAA}\x{6BAB}\x{6BAC}\x{6BAD}\x{6BAE}' .
-          '\x{6BAF}\x{6BB0}\x{6BB2}\x{6BB3}\x{6BB4}\x{6BB5}\x{6BB6}\x{6BB7}\x{6BB9}' .
-          '\x{6BBA}\x{6BBB}\x{6BBC}\x{6BBD}\x{6BBE}\x{6BBF}\x{6BC0}\x{6BC1}\x{6BC2}' .
-          '\x{6BC3}\x{6BC4}\x{6BC5}\x{6BC6}\x{6BC7}\x{6BC8}\x{6BC9}\x{6BCA}\x{6BCB}' .
-          '\x{6BCC}\x{6BCD}\x{6BCE}\x{6BCF}\x{6BD0}\x{6BD1}\x{6BD2}\x{6BD3}\x{6BD4}' .
-          '\x{6BD5}\x{6BD6}\x{6BD7}\x{6BD8}\x{6BD9}\x{6BDA}\x{6BDB}\x{6BDC}\x{6BDD}' .
-          '\x{6BDE}\x{6BDF}\x{6BE0}\x{6BE1}\x{6BE2}\x{6BE3}\x{6BE4}\x{6BE5}\x{6BE6}' .
-          '\x{6BE7}\x{6BE8}\x{6BEA}\x{6BEB}\x{6BEC}\x{6BED}\x{6BEE}\x{6BEF}\x{6BF0}' .
-          '\x{6BF2}\x{6BF3}\x{6BF5}\x{6BF6}\x{6BF7}\x{6BF8}\x{6BF9}\x{6BFB}\x{6BFC}' .
-          '\x{6BFD}\x{6BFE}\x{6BFF}\x{6C00}\x{6C01}\x{6C02}\x{6C03}\x{6C04}\x{6C05}' .
-          '\x{6C06}\x{6C07}\x{6C08}\x{6C09}\x{6C0B}\x{6C0C}\x{6C0D}\x{6C0E}\x{6C0F}' .
-          '\x{6C10}\x{6C11}\x{6C12}\x{6C13}\x{6C14}\x{6C15}\x{6C16}\x{6C18}\x{6C19}' .
-          '\x{6C1A}\x{6C1B}\x{6C1D}\x{6C1E}\x{6C1F}\x{6C20}\x{6C21}\x{6C22}\x{6C23}' .
-          '\x{6C24}\x{6C25}\x{6C26}\x{6C27}\x{6C28}\x{6C29}\x{6C2A}\x{6C2B}\x{6C2C}' .
-          '\x{6C2E}\x{6C2F}\x{6C30}\x{6C31}\x{6C32}\x{6C33}\x{6C34}\x{6C35}\x{6C36}' .
-          '\x{6C37}\x{6C38}\x{6C3A}\x{6C3B}\x{6C3D}\x{6C3E}\x{6C3F}\x{6C40}\x{6C41}' .
-          '\x{6C42}\x{6C43}\x{6C44}\x{6C46}\x{6C47}\x{6C48}\x{6C49}\x{6C4A}\x{6C4B}' .
-          '\x{6C4C}\x{6C4D}\x{6C4E}\x{6C4F}\x{6C50}\x{6C51}\x{6C52}\x{6C53}\x{6C54}' .
-          '\x{6C55}\x{6C56}\x{6C57}\x{6C58}\x{6C59}\x{6C5A}\x{6C5B}\x{6C5C}\x{6C5D}' .
-          '\x{6C5E}\x{6C5F}\x{6C60}\x{6C61}\x{6C62}\x{6C63}\x{6C64}\x{6C65}\x{6C66}' .
-          '\x{6C67}\x{6C68}\x{6C69}\x{6C6A}\x{6C6B}\x{6C6D}\x{6C6F}\x{6C70}\x{6C71}' .
-          '\x{6C72}\x{6C73}\x{6C74}\x{6C75}\x{6C76}\x{6C77}\x{6C78}\x{6C79}\x{6C7A}' .
-          '\x{6C7B}\x{6C7C}\x{6C7D}\x{6C7E}\x{6C7F}\x{6C80}\x{6C81}\x{6C82}\x{6C83}' .
-          '\x{6C84}\x{6C85}\x{6C86}\x{6C87}\x{6C88}\x{6C89}\x{6C8A}\x{6C8B}\x{6C8C}' .
-          '\x{6C8D}\x{6C8E}\x{6C8F}\x{6C90}\x{6C91}\x{6C92}\x{6C93}\x{6C94}\x{6C95}' .
-          '\x{6C96}\x{6C97}\x{6C98}\x{6C99}\x{6C9A}\x{6C9B}\x{6C9C}\x{6C9D}\x{6C9E}' .
-          '\x{6C9F}\x{6CA1}\x{6CA2}\x{6CA3}\x{6CA4}\x{6CA5}\x{6CA6}\x{6CA7}\x{6CA8}' .
-          '\x{6CA9}\x{6CAA}\x{6CAB}\x{6CAC}\x{6CAD}\x{6CAE}\x{6CAF}\x{6CB0}\x{6CB1}' .
-          '\x{6CB2}\x{6CB3}\x{6CB4}\x{6CB5}\x{6CB6}\x{6CB7}\x{6CB8}\x{6CB9}\x{6CBA}' .
-          '\x{6CBB}\x{6CBC}\x{6CBD}\x{6CBE}\x{6CBF}\x{6CC0}\x{6CC1}\x{6CC2}\x{6CC3}' .
-          '\x{6CC4}\x{6CC5}\x{6CC6}\x{6CC7}\x{6CC8}\x{6CC9}\x{6CCA}\x{6CCB}\x{6CCC}' .
-          '\x{6CCD}\x{6CCE}\x{6CCF}\x{6CD0}\x{6CD1}\x{6CD2}\x{6CD3}\x{6CD4}\x{6CD5}' .
-          '\x{6CD6}\x{6CD7}\x{6CD9}\x{6CDA}\x{6CDB}\x{6CDC}\x{6CDD}\x{6CDE}\x{6CDF}' .
-          '\x{6CE0}\x{6CE1}\x{6CE2}\x{6CE3}\x{6CE4}\x{6CE5}\x{6CE6}\x{6CE7}\x{6CE8}' .
-          '\x{6CE9}\x{6CEA}\x{6CEB}\x{6CEC}\x{6CED}\x{6CEE}\x{6CEF}\x{6CF0}\x{6CF1}' .
-          '\x{6CF2}\x{6CF3}\x{6CF5}\x{6CF6}\x{6CF7}\x{6CF8}\x{6CF9}\x{6CFA}\x{6CFB}' .
-          '\x{6CFC}\x{6CFD}\x{6CFE}\x{6CFF}\x{6D00}\x{6D01}\x{6D03}\x{6D04}\x{6D05}' .
-          '\x{6D06}\x{6D07}\x{6D08}\x{6D09}\x{6D0A}\x{6D0B}\x{6D0C}\x{6D0D}\x{6D0E}' .
-          '\x{6D0F}\x{6D10}\x{6D11}\x{6D12}\x{6D13}\x{6D14}\x{6D15}\x{6D16}\x{6D17}' .
-          '\x{6D18}\x{6D19}\x{6D1A}\x{6D1B}\x{6D1D}\x{6D1E}\x{6D1F}\x{6D20}\x{6D21}' .
-          '\x{6D22}\x{6D23}\x{6D25}\x{6D26}\x{6D27}\x{6D28}\x{6D29}\x{6D2A}\x{6D2B}' .
-          '\x{6D2C}\x{6D2D}\x{6D2E}\x{6D2F}\x{6D30}\x{6D31}\x{6D32}\x{6D33}\x{6D34}' .
-          '\x{6D35}\x{6D36}\x{6D37}\x{6D38}\x{6D39}\x{6D3A}\x{6D3B}\x{6D3C}\x{6D3D}' .
-          '\x{6D3E}\x{6D3F}\x{6D40}\x{6D41}\x{6D42}\x{6D43}\x{6D44}\x{6D45}\x{6D46}' .
-          '\x{6D47}\x{6D48}\x{6D49}\x{6D4A}\x{6D4B}\x{6D4C}\x{6D4D}\x{6D4E}\x{6D4F}' .
-          '\x{6D50}\x{6D51}\x{6D52}\x{6D53}\x{6D54}\x{6D55}\x{6D56}\x{6D57}\x{6D58}' .
-          '\x{6D59}\x{6D5A}\x{6D5B}\x{6D5C}\x{6D5D}\x{6D5E}\x{6D5F}\x{6D60}\x{6D61}' .
-          '\x{6D62}\x{6D63}\x{6D64}\x{6D65}\x{6D66}\x{6D67}\x{6D68}\x{6D69}\x{6D6A}' .
-          '\x{6D6B}\x{6D6C}\x{6D6D}\x{6D6E}\x{6D6F}\x{6D70}\x{6D72}\x{6D73}\x{6D74}' .
-          '\x{6D75}\x{6D76}\x{6D77}\x{6D78}\x{6D79}\x{6D7A}\x{6D7B}\x{6D7C}\x{6D7D}' .
-          '\x{6D7E}\x{6D7F}\x{6D80}\x{6D82}\x{6D83}\x{6D84}\x{6D85}\x{6D86}\x{6D87}' .
-          '\x{6D88}\x{6D89}\x{6D8A}\x{6D8B}\x{6D8C}\x{6D8D}\x{6D8E}\x{6D8F}\x{6D90}' .
-          '\x{6D91}\x{6D92}\x{6D93}\x{6D94}\x{6D95}\x{6D97}\x{6D98}\x{6D99}\x{6D9A}' .
-          '\x{6D9B}\x{6D9D}\x{6D9E}\x{6D9F}\x{6DA0}\x{6DA1}\x{6DA2}\x{6DA3}\x{6DA4}' .
-          '\x{6DA5}\x{6DA6}\x{6DA7}\x{6DA8}\x{6DA9}\x{6DAA}\x{6DAB}\x{6DAC}\x{6DAD}' .
-          '\x{6DAE}\x{6DAF}\x{6DB2}\x{6DB3}\x{6DB4}\x{6DB5}\x{6DB7}\x{6DB8}\x{6DB9}' .
-          '\x{6DBA}\x{6DBB}\x{6DBC}\x{6DBD}\x{6DBE}\x{6DBF}\x{6DC0}\x{6DC1}\x{6DC2}' .
-          '\x{6DC3}\x{6DC4}\x{6DC5}\x{6DC6}\x{6DC7}\x{6DC8}\x{6DC9}\x{6DCA}\x{6DCB}' .
-          '\x{6DCC}\x{6DCD}\x{6DCE}\x{6DCF}\x{6DD0}\x{6DD1}\x{6DD2}\x{6DD3}\x{6DD4}' .
-          '\x{6DD5}\x{6DD6}\x{6DD7}\x{6DD8}\x{6DD9}\x{6DDA}\x{6DDB}\x{6DDC}\x{6DDD}' .
-          '\x{6DDE}\x{6DDF}\x{6DE0}\x{6DE1}\x{6DE2}\x{6DE3}\x{6DE4}\x{6DE5}\x{6DE6}' .
-          '\x{6DE7}\x{6DE8}\x{6DE9}\x{6DEA}\x{6DEB}\x{6DEC}\x{6DED}\x{6DEE}\x{6DEF}' .
-          '\x{6DF0}\x{6DF1}\x{6DF2}\x{6DF3}\x{6DF4}\x{6DF5}\x{6DF6}\x{6DF7}\x{6DF8}' .
-          '\x{6DF9}\x{6DFA}\x{6DFB}\x{6DFC}\x{6DFD}\x{6E00}\x{6E03}\x{6E04}\x{6E05}' .
-          '\x{6E07}\x{6E08}\x{6E09}\x{6E0A}\x{6E0B}\x{6E0C}\x{6E0D}\x{6E0E}\x{6E0F}' .
-          '\x{6E10}\x{6E11}\x{6E14}\x{6E15}\x{6E16}\x{6E17}\x{6E19}\x{6E1A}\x{6E1B}' .
-          '\x{6E1C}\x{6E1D}\x{6E1E}\x{6E1F}\x{6E20}\x{6E21}\x{6E22}\x{6E23}\x{6E24}' .
-          '\x{6E25}\x{6E26}\x{6E27}\x{6E28}\x{6E29}\x{6E2B}\x{6E2C}\x{6E2D}\x{6E2E}' .
-          '\x{6E2F}\x{6E30}\x{6E31}\x{6E32}\x{6E33}\x{6E34}\x{6E35}\x{6E36}\x{6E37}' .
-          '\x{6E38}\x{6E39}\x{6E3A}\x{6E3B}\x{6E3C}\x{6E3D}\x{6E3E}\x{6E3F}\x{6E40}' .
-          '\x{6E41}\x{6E42}\x{6E43}\x{6E44}\x{6E45}\x{6E46}\x{6E47}\x{6E48}\x{6E49}' .
-          '\x{6E4A}\x{6E4B}\x{6E4D}\x{6E4E}\x{6E4F}\x{6E50}\x{6E51}\x{6E52}\x{6E53}' .
-          '\x{6E54}\x{6E55}\x{6E56}\x{6E57}\x{6E58}\x{6E59}\x{6E5A}\x{6E5B}\x{6E5C}' .
-          '\x{6E5D}\x{6E5E}\x{6E5F}\x{6E60}\x{6E61}\x{6E62}\x{6E63}\x{6E64}\x{6E65}' .
-          '\x{6E66}\x{6E67}\x{6E68}\x{6E69}\x{6E6A}\x{6E6B}\x{6E6D}\x{6E6E}\x{6E6F}' .
-          '\x{6E70}\x{6E71}\x{6E72}\x{6E73}\x{6E74}\x{6E75}\x{6E77}\x{6E78}\x{6E79}' .
-          '\x{6E7E}\x{6E7F}\x{6E80}\x{6E81}\x{6E82}\x{6E83}\x{6E84}\x{6E85}\x{6E86}' .
-          '\x{6E87}\x{6E88}\x{6E89}\x{6E8A}\x{6E8D}\x{6E8E}\x{6E8F}\x{6E90}\x{6E91}' .
-          '\x{6E92}\x{6E93}\x{6E94}\x{6E96}\x{6E97}\x{6E98}\x{6E99}\x{6E9A}\x{6E9B}' .
-          '\x{6E9C}\x{6E9D}\x{6E9E}\x{6E9F}\x{6EA0}\x{6EA1}\x{6EA2}\x{6EA3}\x{6EA4}' .
-          '\x{6EA5}\x{6EA6}\x{6EA7}\x{6EA8}\x{6EA9}\x{6EAA}\x{6EAB}\x{6EAC}\x{6EAD}' .
-          '\x{6EAE}\x{6EAF}\x{6EB0}\x{6EB1}\x{6EB2}\x{6EB3}\x{6EB4}\x{6EB5}\x{6EB6}' .
-          '\x{6EB7}\x{6EB8}\x{6EB9}\x{6EBA}\x{6EBB}\x{6EBC}\x{6EBD}\x{6EBE}\x{6EBF}' .
-          '\x{6EC0}\x{6EC1}\x{6EC2}\x{6EC3}\x{6EC4}\x{6EC5}\x{6EC6}\x{6EC7}\x{6EC8}' .
-          '\x{6EC9}\x{6ECA}\x{6ECB}\x{6ECC}\x{6ECD}\x{6ECE}\x{6ECF}\x{6ED0}\x{6ED1}' .
-          '\x{6ED2}\x{6ED3}\x{6ED4}\x{6ED5}\x{6ED6}\x{6ED7}\x{6ED8}\x{6ED9}\x{6EDA}' .
-          '\x{6EDC}\x{6EDE}\x{6EDF}\x{6EE0}\x{6EE1}\x{6EE2}\x{6EE4}\x{6EE5}\x{6EE6}' .
-          '\x{6EE7}\x{6EE8}\x{6EE9}\x{6EEA}\x{6EEB}\x{6EEC}\x{6EED}\x{6EEE}\x{6EEF}' .
-          '\x{6EF0}\x{6EF1}\x{6EF2}\x{6EF3}\x{6EF4}\x{6EF5}\x{6EF6}\x{6EF7}\x{6EF8}' .
-          '\x{6EF9}\x{6EFA}\x{6EFB}\x{6EFC}\x{6EFD}\x{6EFE}\x{6EFF}\x{6F00}\x{6F01}' .
-          '\x{6F02}\x{6F03}\x{6F05}\x{6F06}\x{6F07}\x{6F08}\x{6F09}\x{6F0A}\x{6F0C}' .
-          '\x{6F0D}\x{6F0E}\x{6F0F}\x{6F10}\x{6F11}\x{6F12}\x{6F13}\x{6F14}\x{6F15}' .
-          '\x{6F16}\x{6F17}\x{6F18}\x{6F19}\x{6F1A}\x{6F1B}\x{6F1C}\x{6F1D}\x{6F1E}' .
-          '\x{6F1F}\x{6F20}\x{6F21}\x{6F22}\x{6F23}\x{6F24}\x{6F25}\x{6F26}\x{6F27}' .
-          '\x{6F28}\x{6F29}\x{6F2A}\x{6F2B}\x{6F2C}\x{6F2D}\x{6F2E}\x{6F2F}\x{6F30}' .
-          '\x{6F31}\x{6F32}\x{6F33}\x{6F34}\x{6F35}\x{6F36}\x{6F37}\x{6F38}\x{6F39}' .
-          '\x{6F3A}\x{6F3B}\x{6F3C}\x{6F3D}\x{6F3E}\x{6F3F}\x{6F40}\x{6F41}\x{6F43}' .
-          '\x{6F44}\x{6F45}\x{6F46}\x{6F47}\x{6F49}\x{6F4B}\x{6F4C}\x{6F4D}\x{6F4E}' .
-          '\x{6F4F}\x{6F50}\x{6F51}\x{6F52}\x{6F53}\x{6F54}\x{6F55}\x{6F56}\x{6F57}' .
-          '\x{6F58}\x{6F59}\x{6F5A}\x{6F5B}\x{6F5C}\x{6F5D}\x{6F5E}\x{6F5F}\x{6F60}' .
-          '\x{6F61}\x{6F62}\x{6F63}\x{6F64}\x{6F65}\x{6F66}\x{6F67}\x{6F68}\x{6F69}' .
-          '\x{6F6A}\x{6F6B}\x{6F6C}\x{6F6D}\x{6F6E}\x{6F6F}\x{6F70}\x{6F71}\x{6F72}' .
-          '\x{6F73}\x{6F74}\x{6F75}\x{6F76}\x{6F77}\x{6F78}\x{6F7A}\x{6F7B}\x{6F7C}' .
-          '\x{6F7D}\x{6F7E}\x{6F7F}\x{6F80}\x{6F81}\x{6F82}\x{6F83}\x{6F84}\x{6F85}' .
-          '\x{6F86}\x{6F87}\x{6F88}\x{6F89}\x{6F8A}\x{6F8B}\x{6F8C}\x{6F8D}\x{6F8E}' .
-          '\x{6F8F}\x{6F90}\x{6F91}\x{6F92}\x{6F93}\x{6F94}\x{6F95}\x{6F96}\x{6F97}' .
-          '\x{6F99}\x{6F9B}\x{6F9C}\x{6F9D}\x{6F9E}\x{6FA0}\x{6FA1}\x{6FA2}\x{6FA3}' .
-          '\x{6FA4}\x{6FA5}\x{6FA6}\x{6FA7}\x{6FA8}\x{6FA9}\x{6FAA}\x{6FAB}\x{6FAC}' .
-          '\x{6FAD}\x{6FAE}\x{6FAF}\x{6FB0}\x{6FB1}\x{6FB2}\x{6FB3}\x{6FB4}\x{6FB5}' .
-          '\x{6FB6}\x{6FB8}\x{6FB9}\x{6FBA}\x{6FBB}\x{6FBC}\x{6FBD}\x{6FBE}\x{6FBF}' .
-          '\x{6FC0}\x{6FC1}\x{6FC2}\x{6FC3}\x{6FC4}\x{6FC6}\x{6FC7}\x{6FC8}\x{6FC9}' .
-          '\x{6FCA}\x{6FCB}\x{6FCC}\x{6FCD}\x{6FCE}\x{6FCF}\x{6FD1}\x{6FD2}\x{6FD4}' .
-          '\x{6FD5}\x{6FD6}\x{6FD7}\x{6FD8}\x{6FD9}\x{6FDA}\x{6FDB}\x{6FDC}\x{6FDD}' .
-          '\x{6FDE}\x{6FDF}\x{6FE0}\x{6FE1}\x{6FE2}\x{6FE3}\x{6FE4}\x{6FE5}\x{6FE6}' .
-          '\x{6FE7}\x{6FE8}\x{6FE9}\x{6FEA}\x{6FEB}\x{6FEC}\x{6FED}\x{6FEE}\x{6FEF}' .
-          '\x{6FF0}\x{6FF1}\x{6FF2}\x{6FF3}\x{6FF4}\x{6FF6}\x{6FF7}\x{6FF8}\x{6FF9}' .
-          '\x{6FFA}\x{6FFB}\x{6FFC}\x{6FFE}\x{6FFF}\x{7000}\x{7001}\x{7002}\x{7003}' .
-          '\x{7004}\x{7005}\x{7006}\x{7007}\x{7008}\x{7009}\x{700A}\x{700B}\x{700C}' .
-          '\x{700D}\x{700E}\x{700F}\x{7011}\x{7012}\x{7014}\x{7015}\x{7016}\x{7017}' .
-          '\x{7018}\x{7019}\x{701A}\x{701B}\x{701C}\x{701D}\x{701F}\x{7020}\x{7021}' .
-          '\x{7022}\x{7023}\x{7024}\x{7025}\x{7026}\x{7027}\x{7028}\x{7029}\x{702A}' .
-          '\x{702B}\x{702C}\x{702D}\x{702E}\x{702F}\x{7030}\x{7031}\x{7032}\x{7033}' .
-          '\x{7034}\x{7035}\x{7036}\x{7037}\x{7038}\x{7039}\x{703A}\x{703B}\x{703C}' .
-          '\x{703D}\x{703E}\x{703F}\x{7040}\x{7041}\x{7042}\x{7043}\x{7044}\x{7045}' .
-          '\x{7046}\x{7048}\x{7049}\x{704A}\x{704C}\x{704D}\x{704F}\x{7050}\x{7051}' .
-          '\x{7052}\x{7053}\x{7054}\x{7055}\x{7056}\x{7057}\x{7058}\x{7059}\x{705A}' .
-          '\x{705B}\x{705C}\x{705D}\x{705E}\x{705F}\x{7060}\x{7061}\x{7062}\x{7063}' .
-          '\x{7064}\x{7065}\x{7066}\x{7067}\x{7068}\x{7069}\x{706A}\x{706B}\x{706C}' .
-          '\x{706D}\x{706E}\x{706F}\x{7070}\x{7071}\x{7074}\x{7075}\x{7076}\x{7077}' .
-          '\x{7078}\x{7079}\x{707A}\x{707C}\x{707D}\x{707E}\x{707F}\x{7080}\x{7082}' .
-          '\x{7083}\x{7084}\x{7085}\x{7086}\x{7087}\x{7088}\x{7089}\x{708A}\x{708B}' .
-          '\x{708C}\x{708E}\x{708F}\x{7090}\x{7091}\x{7092}\x{7093}\x{7094}\x{7095}' .
-          '\x{7096}\x{7098}\x{7099}\x{709A}\x{709C}\x{709D}\x{709E}\x{709F}\x{70A0}' .
-          '\x{70A1}\x{70A2}\x{70A3}\x{70A4}\x{70A5}\x{70A6}\x{70A7}\x{70A8}\x{70A9}' .
-          '\x{70AB}\x{70AC}\x{70AD}\x{70AE}\x{70AF}\x{70B0}\x{70B1}\x{70B3}\x{70B4}' .
-          '\x{70B5}\x{70B7}\x{70B8}\x{70B9}\x{70BA}\x{70BB}\x{70BC}\x{70BD}\x{70BE}' .
-          '\x{70BF}\x{70C0}\x{70C1}\x{70C2}\x{70C3}\x{70C4}\x{70C5}\x{70C6}\x{70C7}' .
-          '\x{70C8}\x{70C9}\x{70CA}\x{70CB}\x{70CC}\x{70CD}\x{70CE}\x{70CF}\x{70D0}' .
-          '\x{70D1}\x{70D2}\x{70D3}\x{70D4}\x{70D6}\x{70D7}\x{70D8}\x{70D9}\x{70DA}' .
-          '\x{70DB}\x{70DC}\x{70DD}\x{70DE}\x{70DF}\x{70E0}\x{70E1}\x{70E2}\x{70E3}' .
-          '\x{70E4}\x{70E5}\x{70E6}\x{70E7}\x{70E8}\x{70E9}\x{70EA}\x{70EB}\x{70EC}' .
-          '\x{70ED}\x{70EE}\x{70EF}\x{70F0}\x{70F1}\x{70F2}\x{70F3}\x{70F4}\x{70F5}' .
-          '\x{70F6}\x{70F7}\x{70F8}\x{70F9}\x{70FA}\x{70FB}\x{70FC}\x{70FD}\x{70FF}' .
-          '\x{7100}\x{7101}\x{7102}\x{7103}\x{7104}\x{7105}\x{7106}\x{7107}\x{7109}' .
-          '\x{710A}\x{710B}\x{710C}\x{710D}\x{710E}\x{710F}\x{7110}\x{7111}\x{7112}' .
-          '\x{7113}\x{7115}\x{7116}\x{7117}\x{7118}\x{7119}\x{711A}\x{711B}\x{711C}' .
-          '\x{711D}\x{711E}\x{711F}\x{7120}\x{7121}\x{7122}\x{7123}\x{7125}\x{7126}' .
-          '\x{7127}\x{7128}\x{7129}\x{712A}\x{712B}\x{712C}\x{712D}\x{712E}\x{712F}' .
-          '\x{7130}\x{7131}\x{7132}\x{7135}\x{7136}\x{7137}\x{7138}\x{7139}\x{713A}' .
-          '\x{713B}\x{713D}\x{713E}\x{713F}\x{7140}\x{7141}\x{7142}\x{7143}\x{7144}' .
-          '\x{7145}\x{7146}\x{7147}\x{7148}\x{7149}\x{714A}\x{714B}\x{714C}\x{714D}' .
-          '\x{714E}\x{714F}\x{7150}\x{7151}\x{7152}\x{7153}\x{7154}\x{7156}\x{7158}' .
-          '\x{7159}\x{715A}\x{715B}\x{715C}\x{715D}\x{715E}\x{715F}\x{7160}\x{7161}' .
-          '\x{7162}\x{7163}\x{7164}\x{7165}\x{7166}\x{7167}\x{7168}\x{7169}\x{716A}' .
-          '\x{716C}\x{716E}\x{716F}\x{7170}\x{7171}\x{7172}\x{7173}\x{7174}\x{7175}' .
-          '\x{7176}\x{7177}\x{7178}\x{7179}\x{717A}\x{717B}\x{717C}\x{717D}\x{717E}' .
-          '\x{717F}\x{7180}\x{7181}\x{7182}\x{7183}\x{7184}\x{7185}\x{7186}\x{7187}' .
-          '\x{7188}\x{7189}\x{718A}\x{718B}\x{718C}\x{718E}\x{718F}\x{7190}\x{7191}' .
-          '\x{7192}\x{7193}\x{7194}\x{7195}\x{7197}\x{7198}\x{7199}\x{719A}\x{719B}' .
-          '\x{719C}\x{719D}\x{719E}\x{719F}\x{71A0}\x{71A1}\x{71A2}\x{71A3}\x{71A4}' .
-          '\x{71A5}\x{71A7}\x{71A8}\x{71A9}\x{71AA}\x{71AC}\x{71AD}\x{71AE}\x{71AF}' .
-          '\x{71B0}\x{71B1}\x{71B2}\x{71B3}\x{71B4}\x{71B5}\x{71B7}\x{71B8}\x{71B9}' .
-          '\x{71BA}\x{71BB}\x{71BC}\x{71BD}\x{71BE}\x{71BF}\x{71C0}\x{71C1}\x{71C2}' .
-          '\x{71C3}\x{71C4}\x{71C5}\x{71C6}\x{71C7}\x{71C8}\x{71C9}\x{71CA}\x{71CB}' .
-          '\x{71CD}\x{71CE}\x{71CF}\x{71D0}\x{71D1}\x{71D2}\x{71D4}\x{71D5}\x{71D6}' .
-          '\x{71D7}\x{71D8}\x{71D9}\x{71DA}\x{71DB}\x{71DC}\x{71DD}\x{71DE}\x{71DF}' .
-          '\x{71E0}\x{71E1}\x{71E2}\x{71E3}\x{71E4}\x{71E5}\x{71E6}\x{71E7}\x{71E8}' .
-          '\x{71E9}\x{71EA}\x{71EB}\x{71EC}\x{71ED}\x{71EE}\x{71EF}\x{71F0}\x{71F1}' .
-          '\x{71F2}\x{71F4}\x{71F5}\x{71F6}\x{71F7}\x{71F8}\x{71F9}\x{71FB}\x{71FC}' .
-          '\x{71FD}\x{71FE}\x{71FF}\x{7201}\x{7202}\x{7203}\x{7204}\x{7205}\x{7206}' .
-          '\x{7207}\x{7208}\x{7209}\x{720A}\x{720C}\x{720D}\x{720E}\x{720F}\x{7210}' .
-          '\x{7212}\x{7213}\x{7214}\x{7216}\x{7218}\x{7219}\x{721A}\x{721B}\x{721C}' .
-          '\x{721D}\x{721E}\x{721F}\x{7221}\x{7222}\x{7223}\x{7226}\x{7227}\x{7228}' .
-          '\x{7229}\x{722A}\x{722B}\x{722C}\x{722D}\x{722E}\x{7230}\x{7231}\x{7232}' .
-          '\x{7233}\x{7235}\x{7236}\x{7237}\x{7238}\x{7239}\x{723A}\x{723B}\x{723C}' .
-          '\x{723D}\x{723E}\x{723F}\x{7240}\x{7241}\x{7242}\x{7243}\x{7244}\x{7246}' .
-          '\x{7247}\x{7248}\x{7249}\x{724A}\x{724B}\x{724C}\x{724D}\x{724F}\x{7251}' .
-          '\x{7252}\x{7253}\x{7254}\x{7256}\x{7257}\x{7258}\x{7259}\x{725A}\x{725B}' .
-          '\x{725C}\x{725D}\x{725E}\x{725F}\x{7260}\x{7261}\x{7262}\x{7263}\x{7264}' .
-          '\x{7265}\x{7266}\x{7267}\x{7268}\x{7269}\x{726A}\x{726B}\x{726C}\x{726D}' .
-          '\x{726E}\x{726F}\x{7270}\x{7271}\x{7272}\x{7273}\x{7274}\x{7275}\x{7276}' .
-          '\x{7277}\x{7278}\x{7279}\x{727A}\x{727B}\x{727C}\x{727D}\x{727E}\x{727F}' .
-          '\x{7280}\x{7281}\x{7282}\x{7283}\x{7284}\x{7285}\x{7286}\x{7287}\x{7288}' .
-          '\x{7289}\x{728A}\x{728B}\x{728C}\x{728D}\x{728E}\x{728F}\x{7290}\x{7291}' .
-          '\x{7292}\x{7293}\x{7294}\x{7295}\x{7296}\x{7297}\x{7298}\x{7299}\x{729A}' .
-          '\x{729B}\x{729C}\x{729D}\x{729E}\x{729F}\x{72A1}\x{72A2}\x{72A3}\x{72A4}' .
-          '\x{72A5}\x{72A6}\x{72A7}\x{72A8}\x{72A9}\x{72AA}\x{72AC}\x{72AD}\x{72AE}' .
-          '\x{72AF}\x{72B0}\x{72B1}\x{72B2}\x{72B3}\x{72B4}\x{72B5}\x{72B6}\x{72B7}' .
-          '\x{72B8}\x{72B9}\x{72BA}\x{72BB}\x{72BC}\x{72BD}\x{72BF}\x{72C0}\x{72C1}' .
-          '\x{72C2}\x{72C3}\x{72C4}\x{72C5}\x{72C6}\x{72C7}\x{72C8}\x{72C9}\x{72CA}' .
-          '\x{72CB}\x{72CC}\x{72CD}\x{72CE}\x{72CF}\x{72D0}\x{72D1}\x{72D2}\x{72D3}' .
-          '\x{72D4}\x{72D5}\x{72D6}\x{72D7}\x{72D8}\x{72D9}\x{72DA}\x{72DB}\x{72DC}' .
-          '\x{72DD}\x{72DE}\x{72DF}\x{72E0}\x{72E1}\x{72E2}\x{72E3}\x{72E4}\x{72E5}' .
-          '\x{72E6}\x{72E7}\x{72E8}\x{72E9}\x{72EA}\x{72EB}\x{72EC}\x{72ED}\x{72EE}' .
-          '\x{72EF}\x{72F0}\x{72F1}\x{72F2}\x{72F3}\x{72F4}\x{72F5}\x{72F6}\x{72F7}' .
-          '\x{72F8}\x{72F9}\x{72FA}\x{72FB}\x{72FC}\x{72FD}\x{72FE}\x{72FF}\x{7300}' .
-          '\x{7301}\x{7303}\x{7304}\x{7305}\x{7306}\x{7307}\x{7308}\x{7309}\x{730A}' .
-          '\x{730B}\x{730C}\x{730D}\x{730E}\x{730F}\x{7311}\x{7312}\x{7313}\x{7314}' .
-          '\x{7315}\x{7316}\x{7317}\x{7318}\x{7319}\x{731A}\x{731B}\x{731C}\x{731D}' .
-          '\x{731E}\x{7320}\x{7321}\x{7322}\x{7323}\x{7324}\x{7325}\x{7326}\x{7327}' .
-          '\x{7329}\x{732A}\x{732B}\x{732C}\x{732D}\x{732E}\x{7330}\x{7331}\x{7332}' .
-          '\x{7333}\x{7334}\x{7335}\x{7336}\x{7337}\x{7338}\x{7339}\x{733A}\x{733B}' .
-          '\x{733C}\x{733D}\x{733E}\x{733F}\x{7340}\x{7341}\x{7342}\x{7343}\x{7344}' .
-          '\x{7345}\x{7346}\x{7347}\x{7348}\x{7349}\x{734A}\x{734B}\x{734C}\x{734D}' .
-          '\x{734E}\x{7350}\x{7351}\x{7352}\x{7354}\x{7355}\x{7356}\x{7357}\x{7358}' .
-          '\x{7359}\x{735A}\x{735B}\x{735C}\x{735D}\x{735E}\x{735F}\x{7360}\x{7361}' .
-          '\x{7362}\x{7364}\x{7365}\x{7366}\x{7367}\x{7368}\x{7369}\x{736A}\x{736B}' .
-          '\x{736C}\x{736D}\x{736E}\x{736F}\x{7370}\x{7371}\x{7372}\x{7373}\x{7374}' .
-          '\x{7375}\x{7376}\x{7377}\x{7378}\x{7379}\x{737A}\x{737B}\x{737C}\x{737D}' .
-          '\x{737E}\x{737F}\x{7380}\x{7381}\x{7382}\x{7383}\x{7384}\x{7385}\x{7386}' .
-          '\x{7387}\x{7388}\x{7389}\x{738A}\x{738B}\x{738C}\x{738D}\x{738E}\x{738F}' .
-          '\x{7390}\x{7391}\x{7392}\x{7393}\x{7394}\x{7395}\x{7396}\x{7397}\x{7398}' .
-          '\x{7399}\x{739A}\x{739B}\x{739D}\x{739E}\x{739F}\x{73A0}\x{73A1}\x{73A2}' .
-          '\x{73A3}\x{73A4}\x{73A5}\x{73A6}\x{73A7}\x{73A8}\x{73A9}\x{73AA}\x{73AB}' .
-          '\x{73AC}\x{73AD}\x{73AE}\x{73AF}\x{73B0}\x{73B1}\x{73B2}\x{73B3}\x{73B4}' .
-          '\x{73B5}\x{73B6}\x{73B7}\x{73B8}\x{73B9}\x{73BA}\x{73BB}\x{73BC}\x{73BD}' .
-          '\x{73BE}\x{73BF}\x{73C0}\x{73C2}\x{73C3}\x{73C4}\x{73C5}\x{73C6}\x{73C7}' .
-          '\x{73C8}\x{73C9}\x{73CA}\x{73CB}\x{73CC}\x{73CD}\x{73CE}\x{73CF}\x{73D0}' .
-          '\x{73D1}\x{73D2}\x{73D3}\x{73D4}\x{73D5}\x{73D6}\x{73D7}\x{73D8}\x{73D9}' .
-          '\x{73DA}\x{73DB}\x{73DC}\x{73DD}\x{73DE}\x{73DF}\x{73E0}\x{73E2}\x{73E3}' .
-          '\x{73E5}\x{73E6}\x{73E7}\x{73E8}\x{73E9}\x{73EA}\x{73EB}\x{73EC}\x{73ED}' .
-          '\x{73EE}\x{73EF}\x{73F0}\x{73F1}\x{73F2}\x{73F4}\x{73F5}\x{73F6}\x{73F7}' .
-          '\x{73F8}\x{73F9}\x{73FA}\x{73FC}\x{73FD}\x{73FE}\x{73FF}\x{7400}\x{7401}' .
-          '\x{7402}\x{7403}\x{7404}\x{7405}\x{7406}\x{7407}\x{7408}\x{7409}\x{740A}' .
-          '\x{740B}\x{740C}\x{740D}\x{740E}\x{740F}\x{7410}\x{7411}\x{7412}\x{7413}' .
-          '\x{7414}\x{7415}\x{7416}\x{7417}\x{7419}\x{741A}\x{741B}\x{741C}\x{741D}' .
-          '\x{741E}\x{741F}\x{7420}\x{7421}\x{7422}\x{7423}\x{7424}\x{7425}\x{7426}' .
-          '\x{7427}\x{7428}\x{7429}\x{742A}\x{742B}\x{742C}\x{742D}\x{742E}\x{742F}' .
-          '\x{7430}\x{7431}\x{7432}\x{7433}\x{7434}\x{7435}\x{7436}\x{7437}\x{7438}' .
-          '\x{743A}\x{743B}\x{743C}\x{743D}\x{743F}\x{7440}\x{7441}\x{7442}\x{7443}' .
-          '\x{7444}\x{7445}\x{7446}\x{7448}\x{744A}\x{744B}\x{744C}\x{744D}\x{744E}' .
-          '\x{744F}\x{7450}\x{7451}\x{7452}\x{7453}\x{7454}\x{7455}\x{7456}\x{7457}' .
-          '\x{7459}\x{745A}\x{745B}\x{745C}\x{745D}\x{745E}\x{745F}\x{7461}\x{7462}' .
-          '\x{7463}\x{7464}\x{7465}\x{7466}\x{7467}\x{7468}\x{7469}\x{746A}\x{746B}' .
-          '\x{746C}\x{746D}\x{746E}\x{746F}\x{7470}\x{7471}\x{7472}\x{7473}\x{7474}' .
-          '\x{7475}\x{7476}\x{7477}\x{7478}\x{7479}\x{747A}\x{747C}\x{747D}\x{747E}' .
-          '\x{747F}\x{7480}\x{7481}\x{7482}\x{7483}\x{7485}\x{7486}\x{7487}\x{7488}' .
-          '\x{7489}\x{748A}\x{748B}\x{748C}\x{748D}\x{748E}\x{748F}\x{7490}\x{7491}' .
-          '\x{7492}\x{7493}\x{7494}\x{7495}\x{7497}\x{7498}\x{7499}\x{749A}\x{749B}' .
-          '\x{749C}\x{749E}\x{749F}\x{74A0}\x{74A1}\x{74A3}\x{74A4}\x{74A5}\x{74A6}' .
-          '\x{74A7}\x{74A8}\x{74A9}\x{74AA}\x{74AB}\x{74AC}\x{74AD}\x{74AE}\x{74AF}' .
-          '\x{74B0}\x{74B1}\x{74B2}\x{74B3}\x{74B4}\x{74B5}\x{74B6}\x{74B7}\x{74B8}' .
-          '\x{74B9}\x{74BA}\x{74BB}\x{74BC}\x{74BD}\x{74BE}\x{74BF}\x{74C0}\x{74C1}' .
-          '\x{74C2}\x{74C3}\x{74C4}\x{74C5}\x{74C6}\x{74CA}\x{74CB}\x{74CD}\x{74CE}' .
-          '\x{74CF}\x{74D0}\x{74D1}\x{74D2}\x{74D3}\x{74D4}\x{74D5}\x{74D6}\x{74D7}' .
-          '\x{74D8}\x{74D9}\x{74DA}\x{74DB}\x{74DC}\x{74DD}\x{74DE}\x{74DF}\x{74E0}' .
-          '\x{74E1}\x{74E2}\x{74E3}\x{74E4}\x{74E5}\x{74E6}\x{74E7}\x{74E8}\x{74E9}' .
-          '\x{74EA}\x{74EC}\x{74ED}\x{74EE}\x{74EF}\x{74F0}\x{74F1}\x{74F2}\x{74F3}' .
-          '\x{74F4}\x{74F5}\x{74F6}\x{74F7}\x{74F8}\x{74F9}\x{74FA}\x{74FB}\x{74FC}' .
-          '\x{74FD}\x{74FE}\x{74FF}\x{7500}\x{7501}\x{7502}\x{7503}\x{7504}\x{7505}' .
-          '\x{7506}\x{7507}\x{7508}\x{7509}\x{750A}\x{750B}\x{750C}\x{750D}\x{750F}' .
-          '\x{7510}\x{7511}\x{7512}\x{7513}\x{7514}\x{7515}\x{7516}\x{7517}\x{7518}' .
-          '\x{7519}\x{751A}\x{751B}\x{751C}\x{751D}\x{751E}\x{751F}\x{7521}\x{7522}' .
-          '\x{7523}\x{7524}\x{7525}\x{7526}\x{7527}\x{7528}\x{7529}\x{752A}\x{752B}' .
-          '\x{752C}\x{752D}\x{752E}\x{752F}\x{7530}\x{7531}\x{7532}\x{7533}\x{7535}' .
-          '\x{7536}\x{7537}\x{7538}\x{7539}\x{753A}\x{753B}\x{753C}\x{753D}\x{753E}' .
-          '\x{753F}\x{7540}\x{7542}\x{7543}\x{7544}\x{7545}\x{7546}\x{7547}\x{7548}' .
-          '\x{7549}\x{754B}\x{754C}\x{754D}\x{754E}\x{754F}\x{7550}\x{7551}\x{7553}' .
-          '\x{7554}\x{7556}\x{7557}\x{7558}\x{7559}\x{755A}\x{755B}\x{755C}\x{755D}' .
-          '\x{755F}\x{7560}\x{7562}\x{7563}\x{7564}\x{7565}\x{7566}\x{7567}\x{7568}' .
-          '\x{7569}\x{756A}\x{756B}\x{756C}\x{756D}\x{756E}\x{756F}\x{7570}\x{7572}' .
-          '\x{7574}\x{7575}\x{7576}\x{7577}\x{7578}\x{7579}\x{757C}\x{757D}\x{757E}' .
-          '\x{757F}\x{7580}\x{7581}\x{7582}\x{7583}\x{7584}\x{7586}\x{7587}\x{7588}' .
-          '\x{7589}\x{758A}\x{758B}\x{758C}\x{758D}\x{758F}\x{7590}\x{7591}\x{7592}' .
-          '\x{7593}\x{7594}\x{7595}\x{7596}\x{7597}\x{7598}\x{7599}\x{759A}\x{759B}' .
-          '\x{759C}\x{759D}\x{759E}\x{759F}\x{75A0}\x{75A1}\x{75A2}\x{75A3}\x{75A4}' .
-          '\x{75A5}\x{75A6}\x{75A7}\x{75A8}\x{75AA}\x{75AB}\x{75AC}\x{75AD}\x{75AE}' .
-          '\x{75AF}\x{75B0}\x{75B1}\x{75B2}\x{75B3}\x{75B4}\x{75B5}\x{75B6}\x{75B8}' .
-          '\x{75B9}\x{75BA}\x{75BB}\x{75BC}\x{75BD}\x{75BE}\x{75BF}\x{75C0}\x{75C1}' .
-          '\x{75C2}\x{75C3}\x{75C4}\x{75C5}\x{75C6}\x{75C7}\x{75C8}\x{75C9}\x{75CA}' .
-          '\x{75CB}\x{75CC}\x{75CD}\x{75CE}\x{75CF}\x{75D0}\x{75D1}\x{75D2}\x{75D3}' .
-          '\x{75D4}\x{75D5}\x{75D6}\x{75D7}\x{75D8}\x{75D9}\x{75DA}\x{75DB}\x{75DD}' .
-          '\x{75DE}\x{75DF}\x{75E0}\x{75E1}\x{75E2}\x{75E3}\x{75E4}\x{75E5}\x{75E6}' .
-          '\x{75E7}\x{75E8}\x{75EA}\x{75EB}\x{75EC}\x{75ED}\x{75EF}\x{75F0}\x{75F1}' .
-          '\x{75F2}\x{75F3}\x{75F4}\x{75F5}\x{75F6}\x{75F7}\x{75F8}\x{75F9}\x{75FA}' .
-          '\x{75FB}\x{75FC}\x{75FD}\x{75FE}\x{75FF}\x{7600}\x{7601}\x{7602}\x{7603}' .
-          '\x{7604}\x{7605}\x{7606}\x{7607}\x{7608}\x{7609}\x{760A}\x{760B}\x{760C}' .
-          '\x{760D}\x{760E}\x{760F}\x{7610}\x{7611}\x{7612}\x{7613}\x{7614}\x{7615}' .
-          '\x{7616}\x{7617}\x{7618}\x{7619}\x{761A}\x{761B}\x{761C}\x{761D}\x{761E}' .
-          '\x{761F}\x{7620}\x{7621}\x{7622}\x{7623}\x{7624}\x{7625}\x{7626}\x{7627}' .
-          '\x{7628}\x{7629}\x{762A}\x{762B}\x{762D}\x{762E}\x{762F}\x{7630}\x{7631}' .
-          '\x{7632}\x{7633}\x{7634}\x{7635}\x{7636}\x{7637}\x{7638}\x{7639}\x{763A}' .
-          '\x{763B}\x{763C}\x{763D}\x{763E}\x{763F}\x{7640}\x{7641}\x{7642}\x{7643}' .
-          '\x{7646}\x{7647}\x{7648}\x{7649}\x{764A}\x{764B}\x{764C}\x{764D}\x{764F}' .
-          '\x{7650}\x{7652}\x{7653}\x{7654}\x{7656}\x{7657}\x{7658}\x{7659}\x{765A}' .
-          '\x{765B}\x{765C}\x{765D}\x{765E}\x{765F}\x{7660}\x{7661}\x{7662}\x{7663}' .
-          '\x{7664}\x{7665}\x{7666}\x{7667}\x{7668}\x{7669}\x{766A}\x{766B}\x{766C}' .
-          '\x{766D}\x{766E}\x{766F}\x{7670}\x{7671}\x{7672}\x{7674}\x{7675}\x{7676}' .
-          '\x{7677}\x{7678}\x{7679}\x{767B}\x{767C}\x{767D}\x{767E}\x{767F}\x{7680}' .
-          '\x{7681}\x{7682}\x{7683}\x{7684}\x{7685}\x{7686}\x{7687}\x{7688}\x{7689}' .
-          '\x{768A}\x{768B}\x{768C}\x{768E}\x{768F}\x{7690}\x{7691}\x{7692}\x{7693}' .
-          '\x{7694}\x{7695}\x{7696}\x{7697}\x{7698}\x{7699}\x{769A}\x{769B}\x{769C}' .
-          '\x{769D}\x{769E}\x{769F}\x{76A0}\x{76A3}\x{76A4}\x{76A6}\x{76A7}\x{76A9}' .
-          '\x{76AA}\x{76AB}\x{76AC}\x{76AD}\x{76AE}\x{76AF}\x{76B0}\x{76B1}\x{76B2}' .
-          '\x{76B4}\x{76B5}\x{76B7}\x{76B8}\x{76BA}\x{76BB}\x{76BC}\x{76BD}\x{76BE}' .
-          '\x{76BF}\x{76C0}\x{76C2}\x{76C3}\x{76C4}\x{76C5}\x{76C6}\x{76C7}\x{76C8}' .
-          '\x{76C9}\x{76CA}\x{76CD}\x{76CE}\x{76CF}\x{76D0}\x{76D1}\x{76D2}\x{76D3}' .
-          '\x{76D4}\x{76D5}\x{76D6}\x{76D7}\x{76D8}\x{76DA}\x{76DB}\x{76DC}\x{76DD}' .
-          '\x{76DE}\x{76DF}\x{76E0}\x{76E1}\x{76E2}\x{76E3}\x{76E4}\x{76E5}\x{76E6}' .
-          '\x{76E7}\x{76E8}\x{76E9}\x{76EA}\x{76EC}\x{76ED}\x{76EE}\x{76EF}\x{76F0}' .
-          '\x{76F1}\x{76F2}\x{76F3}\x{76F4}\x{76F5}\x{76F6}\x{76F7}\x{76F8}\x{76F9}' .
-          '\x{76FA}\x{76FB}\x{76FC}\x{76FD}\x{76FE}\x{76FF}\x{7701}\x{7703}\x{7704}' .
-          '\x{7705}\x{7706}\x{7707}\x{7708}\x{7709}\x{770A}\x{770B}\x{770C}\x{770D}' .
-          '\x{770F}\x{7710}\x{7711}\x{7712}\x{7713}\x{7714}\x{7715}\x{7716}\x{7717}' .
-          '\x{7718}\x{7719}\x{771A}\x{771B}\x{771C}\x{771D}\x{771E}\x{771F}\x{7720}' .
-          '\x{7722}\x{7723}\x{7725}\x{7726}\x{7727}\x{7728}\x{7729}\x{772A}\x{772C}' .
-          '\x{772D}\x{772E}\x{772F}\x{7730}\x{7731}\x{7732}\x{7733}\x{7734}\x{7735}' .
-          '\x{7736}\x{7737}\x{7738}\x{7739}\x{773A}\x{773B}\x{773C}\x{773D}\x{773E}' .
-          '\x{7740}\x{7741}\x{7743}\x{7744}\x{7745}\x{7746}\x{7747}\x{7748}\x{7749}' .
-          '\x{774A}\x{774B}\x{774C}\x{774D}\x{774E}\x{774F}\x{7750}\x{7751}\x{7752}' .
-          '\x{7753}\x{7754}\x{7755}\x{7756}\x{7757}\x{7758}\x{7759}\x{775A}\x{775B}' .
-          '\x{775C}\x{775D}\x{775E}\x{775F}\x{7760}\x{7761}\x{7762}\x{7763}\x{7765}' .
-          '\x{7766}\x{7767}\x{7768}\x{7769}\x{776A}\x{776B}\x{776C}\x{776D}\x{776E}' .
-          '\x{776F}\x{7770}\x{7771}\x{7772}\x{7773}\x{7774}\x{7775}\x{7776}\x{7777}' .
-          '\x{7778}\x{7779}\x{777A}\x{777B}\x{777C}\x{777D}\x{777E}\x{777F}\x{7780}' .
-          '\x{7781}\x{7782}\x{7783}\x{7784}\x{7785}\x{7786}\x{7787}\x{7788}\x{7789}' .
-          '\x{778A}\x{778B}\x{778C}\x{778D}\x{778E}\x{778F}\x{7790}\x{7791}\x{7792}' .
-          '\x{7793}\x{7794}\x{7795}\x{7797}\x{7798}\x{7799}\x{779A}\x{779B}\x{779C}' .
-          '\x{779D}\x{779E}\x{779F}\x{77A0}\x{77A1}\x{77A2}\x{77A3}\x{77A5}\x{77A6}' .
-          '\x{77A7}\x{77A8}\x{77A9}\x{77AA}\x{77AB}\x{77AC}\x{77AD}\x{77AE}\x{77AF}' .
-          '\x{77B0}\x{77B1}\x{77B2}\x{77B3}\x{77B4}\x{77B5}\x{77B6}\x{77B7}\x{77B8}' .
-          '\x{77B9}\x{77BA}\x{77BB}\x{77BC}\x{77BD}\x{77BF}\x{77C0}\x{77C2}\x{77C3}' .
-          '\x{77C4}\x{77C5}\x{77C6}\x{77C7}\x{77C8}\x{77C9}\x{77CA}\x{77CB}\x{77CC}' .
-          '\x{77CD}\x{77CE}\x{77CF}\x{77D0}\x{77D1}\x{77D3}\x{77D4}\x{77D5}\x{77D6}' .
-          '\x{77D7}\x{77D8}\x{77D9}\x{77DA}\x{77DB}\x{77DC}\x{77DE}\x{77DF}\x{77E0}' .
-          '\x{77E1}\x{77E2}\x{77E3}\x{77E5}\x{77E7}\x{77E8}\x{77E9}\x{77EA}\x{77EB}' .
-          '\x{77EC}\x{77ED}\x{77EE}\x{77EF}\x{77F0}\x{77F1}\x{77F2}\x{77F3}\x{77F6}' .
-          '\x{77F7}\x{77F8}\x{77F9}\x{77FA}\x{77FB}\x{77FC}\x{77FD}\x{77FE}\x{77FF}' .
-          '\x{7800}\x{7801}\x{7802}\x{7803}\x{7804}\x{7805}\x{7806}\x{7808}\x{7809}' .
-          '\x{780A}\x{780B}\x{780C}\x{780D}\x{780E}\x{780F}\x{7810}\x{7811}\x{7812}' .
-          '\x{7813}\x{7814}\x{7815}\x{7816}\x{7817}\x{7818}\x{7819}\x{781A}\x{781B}' .
-          '\x{781C}\x{781D}\x{781E}\x{781F}\x{7820}\x{7821}\x{7822}\x{7823}\x{7825}' .
-          '\x{7826}\x{7827}\x{7828}\x{7829}\x{782A}\x{782B}\x{782C}\x{782D}\x{782E}' .
-          '\x{782F}\x{7830}\x{7831}\x{7832}\x{7833}\x{7834}\x{7835}\x{7837}\x{7838}' .
-          '\x{7839}\x{783A}\x{783B}\x{783C}\x{783D}\x{783E}\x{7840}\x{7841}\x{7843}' .
-          '\x{7844}\x{7845}\x{7847}\x{7848}\x{7849}\x{784A}\x{784C}\x{784D}\x{784E}' .
-          '\x{7850}\x{7851}\x{7852}\x{7853}\x{7854}\x{7855}\x{7856}\x{7857}\x{7858}' .
-          '\x{7859}\x{785A}\x{785B}\x{785C}\x{785D}\x{785E}\x{785F}\x{7860}\x{7861}' .
-          '\x{7862}\x{7863}\x{7864}\x{7865}\x{7866}\x{7867}\x{7868}\x{7869}\x{786A}' .
-          '\x{786B}\x{786C}\x{786D}\x{786E}\x{786F}\x{7870}\x{7871}\x{7872}\x{7873}' .
-          '\x{7874}\x{7875}\x{7877}\x{7878}\x{7879}\x{787A}\x{787B}\x{787C}\x{787D}' .
-          '\x{787E}\x{787F}\x{7880}\x{7881}\x{7882}\x{7883}\x{7884}\x{7885}\x{7886}' .
-          '\x{7887}\x{7889}\x{788A}\x{788B}\x{788C}\x{788D}\x{788E}\x{788F}\x{7890}' .
-          '\x{7891}\x{7892}\x{7893}\x{7894}\x{7895}\x{7896}\x{7897}\x{7898}\x{7899}' .
-          '\x{789A}\x{789B}\x{789C}\x{789D}\x{789E}\x{789F}\x{78A0}\x{78A1}\x{78A2}' .
-          '\x{78A3}\x{78A4}\x{78A5}\x{78A6}\x{78A7}\x{78A8}\x{78A9}\x{78AA}\x{78AB}' .
-          '\x{78AC}\x{78AD}\x{78AE}\x{78AF}\x{78B0}\x{78B1}\x{78B2}\x{78B3}\x{78B4}' .
-          '\x{78B5}\x{78B6}\x{78B7}\x{78B8}\x{78B9}\x{78BA}\x{78BB}\x{78BC}\x{78BD}' .
-          '\x{78BE}\x{78BF}\x{78C0}\x{78C1}\x{78C3}\x{78C4}\x{78C5}\x{78C6}\x{78C8}' .
-          '\x{78C9}\x{78CA}\x{78CB}\x{78CC}\x{78CD}\x{78CE}\x{78CF}\x{78D0}\x{78D1}' .
-          '\x{78D3}\x{78D4}\x{78D5}\x{78D6}\x{78D7}\x{78D8}\x{78D9}\x{78DA}\x{78DB}' .
-          '\x{78DC}\x{78DD}\x{78DE}\x{78DF}\x{78E0}\x{78E1}\x{78E2}\x{78E3}\x{78E4}' .
-          '\x{78E5}\x{78E6}\x{78E7}\x{78E8}\x{78E9}\x{78EA}\x{78EB}\x{78EC}\x{78ED}' .
-          '\x{78EE}\x{78EF}\x{78F1}\x{78F2}\x{78F3}\x{78F4}\x{78F5}\x{78F6}\x{78F7}' .
-          '\x{78F9}\x{78FA}\x{78FB}\x{78FC}\x{78FD}\x{78FE}\x{78FF}\x{7901}\x{7902}' .
-          '\x{7903}\x{7904}\x{7905}\x{7906}\x{7907}\x{7909}\x{790A}\x{790B}\x{790C}' .
-          '\x{790E}\x{790F}\x{7910}\x{7911}\x{7912}\x{7913}\x{7914}\x{7916}\x{7917}' .
-          '\x{7918}\x{7919}\x{791A}\x{791B}\x{791C}\x{791D}\x{791E}\x{7921}\x{7922}' .
-          '\x{7923}\x{7924}\x{7925}\x{7926}\x{7927}\x{7928}\x{7929}\x{792A}\x{792B}' .
-          '\x{792C}\x{792D}\x{792E}\x{792F}\x{7930}\x{7931}\x{7933}\x{7934}\x{7935}' .
-          '\x{7937}\x{7938}\x{7939}\x{793A}\x{793B}\x{793C}\x{793D}\x{793E}\x{793F}' .
-          '\x{7940}\x{7941}\x{7942}\x{7943}\x{7944}\x{7945}\x{7946}\x{7947}\x{7948}' .
-          '\x{7949}\x{794A}\x{794B}\x{794C}\x{794D}\x{794E}\x{794F}\x{7950}\x{7951}' .
-          '\x{7952}\x{7953}\x{7954}\x{7955}\x{7956}\x{7957}\x{7958}\x{795A}\x{795B}' .
-          '\x{795C}\x{795D}\x{795E}\x{795F}\x{7960}\x{7961}\x{7962}\x{7963}\x{7964}' .
-          '\x{7965}\x{7966}\x{7967}\x{7968}\x{7969}\x{796A}\x{796B}\x{796D}\x{796F}' .
-          '\x{7970}\x{7971}\x{7972}\x{7973}\x{7974}\x{7977}\x{7978}\x{7979}\x{797A}' .
-          '\x{797B}\x{797C}\x{797D}\x{797E}\x{797F}\x{7980}\x{7981}\x{7982}\x{7983}' .
-          '\x{7984}\x{7985}\x{7988}\x{7989}\x{798A}\x{798B}\x{798C}\x{798D}\x{798E}' .
-          '\x{798F}\x{7990}\x{7991}\x{7992}\x{7993}\x{7994}\x{7995}\x{7996}\x{7997}' .
-          '\x{7998}\x{7999}\x{799A}\x{799B}\x{799C}\x{799F}\x{79A0}\x{79A1}\x{79A2}' .
-          '\x{79A3}\x{79A4}\x{79A5}\x{79A6}\x{79A7}\x{79A8}\x{79AA}\x{79AB}\x{79AC}' .
-          '\x{79AD}\x{79AE}\x{79AF}\x{79B0}\x{79B1}\x{79B2}\x{79B3}\x{79B4}\x{79B5}' .
-          '\x{79B6}\x{79B7}\x{79B8}\x{79B9}\x{79BA}\x{79BB}\x{79BD}\x{79BE}\x{79BF}' .
-          '\x{79C0}\x{79C1}\x{79C2}\x{79C3}\x{79C5}\x{79C6}\x{79C8}\x{79C9}\x{79CA}' .
-          '\x{79CB}\x{79CD}\x{79CE}\x{79CF}\x{79D0}\x{79D1}\x{79D2}\x{79D3}\x{79D5}' .
-          '\x{79D6}\x{79D8}\x{79D9}\x{79DA}\x{79DB}\x{79DC}\x{79DD}\x{79DE}\x{79DF}' .
-          '\x{79E0}\x{79E1}\x{79E2}\x{79E3}\x{79E4}\x{79E5}\x{79E6}\x{79E7}\x{79E8}' .
-          '\x{79E9}\x{79EA}\x{79EB}\x{79EC}\x{79ED}\x{79EE}\x{79EF}\x{79F0}\x{79F1}' .
-          '\x{79F2}\x{79F3}\x{79F4}\x{79F5}\x{79F6}\x{79F7}\x{79F8}\x{79F9}\x{79FA}' .
-          '\x{79FB}\x{79FC}\x{79FD}\x{79FE}\x{79FF}\x{7A00}\x{7A02}\x{7A03}\x{7A04}' .
-          '\x{7A05}\x{7A06}\x{7A08}\x{7A0A}\x{7A0B}\x{7A0C}\x{7A0D}\x{7A0E}\x{7A0F}' .
-          '\x{7A10}\x{7A11}\x{7A12}\x{7A13}\x{7A14}\x{7A15}\x{7A16}\x{7A17}\x{7A18}' .
-          '\x{7A19}\x{7A1A}\x{7A1B}\x{7A1C}\x{7A1D}\x{7A1E}\x{7A1F}\x{7A20}\x{7A21}' .
-          '\x{7A22}\x{7A23}\x{7A24}\x{7A25}\x{7A26}\x{7A27}\x{7A28}\x{7A29}\x{7A2A}' .
-          '\x{7A2B}\x{7A2D}\x{7A2E}\x{7A2F}\x{7A30}\x{7A31}\x{7A32}\x{7A33}\x{7A34}' .
-          '\x{7A35}\x{7A37}\x{7A39}\x{7A3B}\x{7A3C}\x{7A3D}\x{7A3E}\x{7A3F}\x{7A40}' .
-          '\x{7A41}\x{7A42}\x{7A43}\x{7A44}\x{7A45}\x{7A46}\x{7A47}\x{7A48}\x{7A49}' .
-          '\x{7A4A}\x{7A4B}\x{7A4C}\x{7A4D}\x{7A4E}\x{7A50}\x{7A51}\x{7A52}\x{7A53}' .
-          '\x{7A54}\x{7A55}\x{7A56}\x{7A57}\x{7A58}\x{7A59}\x{7A5A}\x{7A5B}\x{7A5C}' .
-          '\x{7A5D}\x{7A5E}\x{7A5F}\x{7A60}\x{7A61}\x{7A62}\x{7A65}\x{7A66}\x{7A67}' .
-          '\x{7A68}\x{7A69}\x{7A6B}\x{7A6C}\x{7A6D}\x{7A6E}\x{7A70}\x{7A71}\x{7A72}' .
-          '\x{7A73}\x{7A74}\x{7A75}\x{7A76}\x{7A77}\x{7A78}\x{7A79}\x{7A7A}\x{7A7B}' .
-          '\x{7A7C}\x{7A7D}\x{7A7E}\x{7A7F}\x{7A80}\x{7A81}\x{7A83}\x{7A84}\x{7A85}' .
-          '\x{7A86}\x{7A87}\x{7A88}\x{7A89}\x{7A8A}\x{7A8B}\x{7A8C}\x{7A8D}\x{7A8E}' .
-          '\x{7A8F}\x{7A90}\x{7A91}\x{7A92}\x{7A93}\x{7A94}\x{7A95}\x{7A96}\x{7A97}' .
-          '\x{7A98}\x{7A99}\x{7A9C}\x{7A9D}\x{7A9E}\x{7A9F}\x{7AA0}\x{7AA1}\x{7AA2}' .
-          '\x{7AA3}\x{7AA4}\x{7AA5}\x{7AA6}\x{7AA7}\x{7AA8}\x{7AA9}\x{7AAA}\x{7AAB}' .
-          '\x{7AAC}\x{7AAD}\x{7AAE}\x{7AAF}\x{7AB0}\x{7AB1}\x{7AB2}\x{7AB3}\x{7AB4}' .
-          '\x{7AB5}\x{7AB6}\x{7AB7}\x{7AB8}\x{7ABA}\x{7ABE}\x{7ABF}\x{7AC0}\x{7AC1}' .
-          '\x{7AC4}\x{7AC5}\x{7AC7}\x{7AC8}\x{7AC9}\x{7ACA}\x{7ACB}\x{7ACC}\x{7ACD}' .
-          '\x{7ACE}\x{7ACF}\x{7AD0}\x{7AD1}\x{7AD2}\x{7AD3}\x{7AD4}\x{7AD5}\x{7AD6}' .
-          '\x{7AD8}\x{7AD9}\x{7ADB}\x{7ADC}\x{7ADD}\x{7ADE}\x{7ADF}\x{7AE0}\x{7AE1}' .
-          '\x{7AE2}\x{7AE3}\x{7AE4}\x{7AE5}\x{7AE6}\x{7AE7}\x{7AE8}\x{7AEA}\x{7AEB}' .
-          '\x{7AEC}\x{7AED}\x{7AEE}\x{7AEF}\x{7AF0}\x{7AF1}\x{7AF2}\x{7AF3}\x{7AF4}' .
-          '\x{7AF6}\x{7AF7}\x{7AF8}\x{7AF9}\x{7AFA}\x{7AFB}\x{7AFD}\x{7AFE}\x{7AFF}' .
-          '\x{7B00}\x{7B01}\x{7B02}\x{7B03}\x{7B04}\x{7B05}\x{7B06}\x{7B08}\x{7B09}' .
-          '\x{7B0A}\x{7B0B}\x{7B0C}\x{7B0D}\x{7B0E}\x{7B0F}\x{7B10}\x{7B11}\x{7B12}' .
-          '\x{7B13}\x{7B14}\x{7B15}\x{7B16}\x{7B17}\x{7B18}\x{7B19}\x{7B1A}\x{7B1B}' .
-          '\x{7B1C}\x{7B1D}\x{7B1E}\x{7B20}\x{7B21}\x{7B22}\x{7B23}\x{7B24}\x{7B25}' .
-          '\x{7B26}\x{7B28}\x{7B2A}\x{7B2B}\x{7B2C}\x{7B2D}\x{7B2E}\x{7B2F}\x{7B30}' .
-          '\x{7B31}\x{7B32}\x{7B33}\x{7B34}\x{7B35}\x{7B36}\x{7B37}\x{7B38}\x{7B39}' .
-          '\x{7B3A}\x{7B3B}\x{7B3C}\x{7B3D}\x{7B3E}\x{7B3F}\x{7B40}\x{7B41}\x{7B43}' .
-          '\x{7B44}\x{7B45}\x{7B46}\x{7B47}\x{7B48}\x{7B49}\x{7B4A}\x{7B4B}\x{7B4C}' .
-          '\x{7B4D}\x{7B4E}\x{7B4F}\x{7B50}\x{7B51}\x{7B52}\x{7B54}\x{7B55}\x{7B56}' .
-          '\x{7B57}\x{7B58}\x{7B59}\x{7B5A}\x{7B5B}\x{7B5C}\x{7B5D}\x{7B5E}\x{7B5F}' .
-          '\x{7B60}\x{7B61}\x{7B62}\x{7B63}\x{7B64}\x{7B65}\x{7B66}\x{7B67}\x{7B68}' .
-          '\x{7B69}\x{7B6A}\x{7B6B}\x{7B6C}\x{7B6D}\x{7B6E}\x{7B70}\x{7B71}\x{7B72}' .
-          '\x{7B73}\x{7B74}\x{7B75}\x{7B76}\x{7B77}\x{7B78}\x{7B79}\x{7B7B}\x{7B7C}' .
-          '\x{7B7D}\x{7B7E}\x{7B7F}\x{7B80}\x{7B81}\x{7B82}\x{7B83}\x{7B84}\x{7B85}' .
-          '\x{7B87}\x{7B88}\x{7B89}\x{7B8A}\x{7B8B}\x{7B8C}\x{7B8D}\x{7B8E}\x{7B8F}' .
-          '\x{7B90}\x{7B91}\x{7B93}\x{7B94}\x{7B95}\x{7B96}\x{7B97}\x{7B98}\x{7B99}' .
-          '\x{7B9A}\x{7B9B}\x{7B9C}\x{7B9D}\x{7B9E}\x{7B9F}\x{7BA0}\x{7BA1}\x{7BA2}' .
-          '\x{7BA4}\x{7BA6}\x{7BA7}\x{7BA8}\x{7BA9}\x{7BAA}\x{7BAB}\x{7BAC}\x{7BAD}' .
-          '\x{7BAE}\x{7BAF}\x{7BB1}\x{7BB3}\x{7BB4}\x{7BB5}\x{7BB6}\x{7BB7}\x{7BB8}' .
-          '\x{7BB9}\x{7BBA}\x{7BBB}\x{7BBC}\x{7BBD}\x{7BBE}\x{7BBF}\x{7BC0}\x{7BC1}' .
-          '\x{7BC2}\x{7BC3}\x{7BC4}\x{7BC5}\x{7BC6}\x{7BC7}\x{7BC8}\x{7BC9}\x{7BCA}' .
-          '\x{7BCB}\x{7BCC}\x{7BCD}\x{7BCE}\x{7BD0}\x{7BD1}\x{7BD2}\x{7BD3}\x{7BD4}' .
-          '\x{7BD5}\x{7BD6}\x{7BD7}\x{7BD8}\x{7BD9}\x{7BDA}\x{7BDB}\x{7BDC}\x{7BDD}' .
-          '\x{7BDE}\x{7BDF}\x{7BE0}\x{7BE1}\x{7BE2}\x{7BE3}\x{7BE4}\x{7BE5}\x{7BE6}' .
-          '\x{7BE7}\x{7BE8}\x{7BE9}\x{7BEA}\x{7BEB}\x{7BEC}\x{7BED}\x{7BEE}\x{7BEF}' .
-          '\x{7BF0}\x{7BF1}\x{7BF2}\x{7BF3}\x{7BF4}\x{7BF5}\x{7BF6}\x{7BF7}\x{7BF8}' .
-          '\x{7BF9}\x{7BFB}\x{7BFC}\x{7BFD}\x{7BFE}\x{7BFF}\x{7C00}\x{7C01}\x{7C02}' .
-          '\x{7C03}\x{7C04}\x{7C05}\x{7C06}\x{7C07}\x{7C08}\x{7C09}\x{7C0A}\x{7C0B}' .
-          '\x{7C0C}\x{7C0D}\x{7C0E}\x{7C0F}\x{7C10}\x{7C11}\x{7C12}\x{7C13}\x{7C15}' .
-          '\x{7C16}\x{7C17}\x{7C18}\x{7C19}\x{7C1A}\x{7C1C}\x{7C1D}\x{7C1E}\x{7C1F}' .
-          '\x{7C20}\x{7C21}\x{7C22}\x{7C23}\x{7C24}\x{7C25}\x{7C26}\x{7C27}\x{7C28}' .
-          '\x{7C29}\x{7C2A}\x{7C2B}\x{7C2C}\x{7C2D}\x{7C30}\x{7C31}\x{7C32}\x{7C33}' .
-          '\x{7C34}\x{7C35}\x{7C36}\x{7C37}\x{7C38}\x{7C39}\x{7C3A}\x{7C3B}\x{7C3C}' .
-          '\x{7C3D}\x{7C3E}\x{7C3F}\x{7C40}\x{7C41}\x{7C42}\x{7C43}\x{7C44}\x{7C45}' .
-          '\x{7C46}\x{7C47}\x{7C48}\x{7C49}\x{7C4A}\x{7C4B}\x{7C4C}\x{7C4D}\x{7C4E}' .
-          '\x{7C50}\x{7C51}\x{7C53}\x{7C54}\x{7C56}\x{7C57}\x{7C58}\x{7C59}\x{7C5A}' .
-          '\x{7C5B}\x{7C5C}\x{7C5E}\x{7C5F}\x{7C60}\x{7C61}\x{7C62}\x{7C63}\x{7C64}' .
-          '\x{7C65}\x{7C66}\x{7C67}\x{7C68}\x{7C69}\x{7C6A}\x{7C6B}\x{7C6C}\x{7C6D}' .
-          '\x{7C6E}\x{7C6F}\x{7C70}\x{7C71}\x{7C72}\x{7C73}\x{7C74}\x{7C75}\x{7C77}' .
-          '\x{7C78}\x{7C79}\x{7C7A}\x{7C7B}\x{7C7C}\x{7C7D}\x{7C7E}\x{7C7F}\x{7C80}' .
-          '\x{7C81}\x{7C82}\x{7C84}\x{7C85}\x{7C86}\x{7C88}\x{7C89}\x{7C8A}\x{7C8B}' .
-          '\x{7C8C}\x{7C8D}\x{7C8E}\x{7C8F}\x{7C90}\x{7C91}\x{7C92}\x{7C94}\x{7C95}' .
-          '\x{7C96}\x{7C97}\x{7C98}\x{7C99}\x{7C9B}\x{7C9C}\x{7C9D}\x{7C9E}\x{7C9F}' .
-          '\x{7CA0}\x{7CA1}\x{7CA2}\x{7CA3}\x{7CA4}\x{7CA5}\x{7CA6}\x{7CA7}\x{7CA8}' .
-          '\x{7CA9}\x{7CAA}\x{7CAD}\x{7CAE}\x{7CAF}\x{7CB0}\x{7CB1}\x{7CB2}\x{7CB3}' .
-          '\x{7CB4}\x{7CB5}\x{7CB6}\x{7CB7}\x{7CB8}\x{7CB9}\x{7CBA}\x{7CBB}\x{7CBC}' .
-          '\x{7CBD}\x{7CBE}\x{7CBF}\x{7CC0}\x{7CC1}\x{7CC2}\x{7CC3}\x{7CC4}\x{7CC5}' .
-          '\x{7CC6}\x{7CC7}\x{7CC8}\x{7CC9}\x{7CCA}\x{7CCB}\x{7CCC}\x{7CCD}\x{7CCE}' .
-          '\x{7CCF}\x{7CD0}\x{7CD1}\x{7CD2}\x{7CD4}\x{7CD5}\x{7CD6}\x{7CD7}\x{7CD8}' .
-          '\x{7CD9}\x{7CDC}\x{7CDD}\x{7CDE}\x{7CDF}\x{7CE0}\x{7CE2}\x{7CE4}\x{7CE7}' .
-          '\x{7CE8}\x{7CE9}\x{7CEA}\x{7CEB}\x{7CEC}\x{7CED}\x{7CEE}\x{7CEF}\x{7CF0}' .
-          '\x{7CF1}\x{7CF2}\x{7CF3}\x{7CF4}\x{7CF5}\x{7CF6}\x{7CF7}\x{7CF8}\x{7CF9}' .
-          '\x{7CFA}\x{7CFB}\x{7CFD}\x{7CFE}\x{7D00}\x{7D01}\x{7D02}\x{7D03}\x{7D04}' .
-          '\x{7D05}\x{7D06}\x{7D07}\x{7D08}\x{7D09}\x{7D0A}\x{7D0B}\x{7D0C}\x{7D0D}' .
-          '\x{7D0E}\x{7D0F}\x{7D10}\x{7D11}\x{7D12}\x{7D13}\x{7D14}\x{7D15}\x{7D16}' .
-          '\x{7D17}\x{7D18}\x{7D19}\x{7D1A}\x{7D1B}\x{7D1C}\x{7D1D}\x{7D1E}\x{7D1F}' .
-          '\x{7D20}\x{7D21}\x{7D22}\x{7D24}\x{7D25}\x{7D26}\x{7D27}\x{7D28}\x{7D29}' .
-          '\x{7D2B}\x{7D2C}\x{7D2E}\x{7D2F}\x{7D30}\x{7D31}\x{7D32}\x{7D33}\x{7D34}' .
-          '\x{7D35}\x{7D36}\x{7D37}\x{7D38}\x{7D39}\x{7D3A}\x{7D3B}\x{7D3C}\x{7D3D}' .
-          '\x{7D3E}\x{7D3F}\x{7D40}\x{7D41}\x{7D42}\x{7D43}\x{7D44}\x{7D45}\x{7D46}' .
-          '\x{7D47}\x{7D49}\x{7D4A}\x{7D4B}\x{7D4C}\x{7D4E}\x{7D4F}\x{7D50}\x{7D51}' .
-          '\x{7D52}\x{7D53}\x{7D54}\x{7D55}\x{7D56}\x{7D57}\x{7D58}\x{7D59}\x{7D5B}' .
-          '\x{7D5C}\x{7D5D}\x{7D5E}\x{7D5F}\x{7D60}\x{7D61}\x{7D62}\x{7D63}\x{7D65}' .
-          '\x{7D66}\x{7D67}\x{7D68}\x{7D69}\x{7D6A}\x{7D6B}\x{7D6C}\x{7D6D}\x{7D6E}' .
-          '\x{7D6F}\x{7D70}\x{7D71}\x{7D72}\x{7D73}\x{7D74}\x{7D75}\x{7D76}\x{7D77}' .
-          '\x{7D79}\x{7D7A}\x{7D7B}\x{7D7C}\x{7D7D}\x{7D7E}\x{7D7F}\x{7D80}\x{7D81}' .
-          '\x{7D83}\x{7D84}\x{7D85}\x{7D86}\x{7D87}\x{7D88}\x{7D89}\x{7D8A}\x{7D8B}' .
-          '\x{7D8C}\x{7D8D}\x{7D8E}\x{7D8F}\x{7D90}\x{7D91}\x{7D92}\x{7D93}\x{7D94}' .
-          '\x{7D96}\x{7D97}\x{7D99}\x{7D9B}\x{7D9C}\x{7D9D}\x{7D9E}\x{7D9F}\x{7DA0}' .
-          '\x{7DA1}\x{7DA2}\x{7DA3}\x{7DA5}\x{7DA6}\x{7DA7}\x{7DA9}\x{7DAA}\x{7DAB}' .
-          '\x{7DAC}\x{7DAD}\x{7DAE}\x{7DAF}\x{7DB0}\x{7DB1}\x{7DB2}\x{7DB3}\x{7DB4}' .
-          '\x{7DB5}\x{7DB6}\x{7DB7}\x{7DB8}\x{7DB9}\x{7DBA}\x{7DBB}\x{7DBC}\x{7DBD}' .
-          '\x{7DBE}\x{7DBF}\x{7DC0}\x{7DC1}\x{7DC2}\x{7DC3}\x{7DC4}\x{7DC5}\x{7DC6}' .
-          '\x{7DC7}\x{7DC8}\x{7DC9}\x{7DCA}\x{7DCB}\x{7DCC}\x{7DCE}\x{7DCF}\x{7DD0}' .
-          '\x{7DD1}\x{7DD2}\x{7DD4}\x{7DD5}\x{7DD6}\x{7DD7}\x{7DD8}\x{7DD9}\x{7DDA}' .
-          '\x{7DDB}\x{7DDD}\x{7DDE}\x{7DDF}\x{7DE0}\x{7DE1}\x{7DE2}\x{7DE3}\x{7DE6}' .
-          '\x{7DE7}\x{7DE8}\x{7DE9}\x{7DEA}\x{7DEC}\x{7DED}\x{7DEE}\x{7DEF}\x{7DF0}' .
-          '\x{7DF1}\x{7DF2}\x{7DF3}\x{7DF4}\x{7DF5}\x{7DF6}\x{7DF7}\x{7DF8}\x{7DF9}' .
-          '\x{7DFA}\x{7DFB}\x{7DFC}\x{7E00}\x{7E01}\x{7E02}\x{7E03}\x{7E04}\x{7E05}' .
-          '\x{7E06}\x{7E07}\x{7E08}\x{7E09}\x{7E0A}\x{7E0B}\x{7E0C}\x{7E0D}\x{7E0E}' .
-          '\x{7E0F}\x{7E10}\x{7E11}\x{7E12}\x{7E13}\x{7E14}\x{7E15}\x{7E16}\x{7E17}' .
-          '\x{7E19}\x{7E1A}\x{7E1B}\x{7E1C}\x{7E1D}\x{7E1E}\x{7E1F}\x{7E20}\x{7E21}' .
-          '\x{7E22}\x{7E23}\x{7E24}\x{7E25}\x{7E26}\x{7E27}\x{7E28}\x{7E29}\x{7E2A}' .
-          '\x{7E2B}\x{7E2C}\x{7E2D}\x{7E2E}\x{7E2F}\x{7E30}\x{7E31}\x{7E32}\x{7E33}' .
-          '\x{7E34}\x{7E35}\x{7E36}\x{7E37}\x{7E38}\x{7E39}\x{7E3A}\x{7E3B}\x{7E3C}' .
-          '\x{7E3D}\x{7E3E}\x{7E3F}\x{7E40}\x{7E41}\x{7E42}\x{7E43}\x{7E44}\x{7E45}' .
-          '\x{7E46}\x{7E47}\x{7E48}\x{7E49}\x{7E4C}\x{7E4D}\x{7E4E}\x{7E4F}\x{7E50}' .
-          '\x{7E51}\x{7E52}\x{7E53}\x{7E54}\x{7E55}\x{7E56}\x{7E57}\x{7E58}\x{7E59}' .
-          '\x{7E5A}\x{7E5C}\x{7E5D}\x{7E5E}\x{7E5F}\x{7E60}\x{7E61}\x{7E62}\x{7E63}' .
-          '\x{7E65}\x{7E66}\x{7E67}\x{7E68}\x{7E69}\x{7E6A}\x{7E6B}\x{7E6C}\x{7E6D}' .
-          '\x{7E6E}\x{7E6F}\x{7E70}\x{7E71}\x{7E72}\x{7E73}\x{7E74}\x{7E75}\x{7E76}' .
-          '\x{7E77}\x{7E78}\x{7E79}\x{7E7A}\x{7E7B}\x{7E7C}\x{7E7D}\x{7E7E}\x{7E7F}' .
-          '\x{7E80}\x{7E81}\x{7E82}\x{7E83}\x{7E84}\x{7E85}\x{7E86}\x{7E87}\x{7E88}' .
-          '\x{7E89}\x{7E8A}\x{7E8B}\x{7E8C}\x{7E8D}\x{7E8E}\x{7E8F}\x{7E90}\x{7E91}' .
-          '\x{7E92}\x{7E93}\x{7E94}\x{7E95}\x{7E96}\x{7E97}\x{7E98}\x{7E99}\x{7E9A}' .
-          '\x{7E9B}\x{7E9C}\x{7E9E}\x{7E9F}\x{7EA0}\x{7EA1}\x{7EA2}\x{7EA3}\x{7EA4}' .
-          '\x{7EA5}\x{7EA6}\x{7EA7}\x{7EA8}\x{7EA9}\x{7EAA}\x{7EAB}\x{7EAC}\x{7EAD}' .
-          '\x{7EAE}\x{7EAF}\x{7EB0}\x{7EB1}\x{7EB2}\x{7EB3}\x{7EB4}\x{7EB5}\x{7EB6}' .
-          '\x{7EB7}\x{7EB8}\x{7EB9}\x{7EBA}\x{7EBB}\x{7EBC}\x{7EBD}\x{7EBE}\x{7EBF}' .
-          '\x{7EC0}\x{7EC1}\x{7EC2}\x{7EC3}\x{7EC4}\x{7EC5}\x{7EC6}\x{7EC7}\x{7EC8}' .
-          '\x{7EC9}\x{7ECA}\x{7ECB}\x{7ECC}\x{7ECD}\x{7ECE}\x{7ECF}\x{7ED0}\x{7ED1}' .
-          '\x{7ED2}\x{7ED3}\x{7ED4}\x{7ED5}\x{7ED6}\x{7ED7}\x{7ED8}\x{7ED9}\x{7EDA}' .
-          '\x{7EDB}\x{7EDC}\x{7EDD}\x{7EDE}\x{7EDF}\x{7EE0}\x{7EE1}\x{7EE2}\x{7EE3}' .
-          '\x{7EE4}\x{7EE5}\x{7EE6}\x{7EE7}\x{7EE8}\x{7EE9}\x{7EEA}\x{7EEB}\x{7EEC}' .
-          '\x{7EED}\x{7EEE}\x{7EEF}\x{7EF0}\x{7EF1}\x{7EF2}\x{7EF3}\x{7EF4}\x{7EF5}' .
-          '\x{7EF6}\x{7EF7}\x{7EF8}\x{7EF9}\x{7EFA}\x{7EFB}\x{7EFC}\x{7EFD}\x{7EFE}' .
-          '\x{7EFF}\x{7F00}\x{7F01}\x{7F02}\x{7F03}\x{7F04}\x{7F05}\x{7F06}\x{7F07}' .
-          '\x{7F08}\x{7F09}\x{7F0A}\x{7F0B}\x{7F0C}\x{7F0D}\x{7F0E}\x{7F0F}\x{7F10}' .
-          '\x{7F11}\x{7F12}\x{7F13}\x{7F14}\x{7F15}\x{7F16}\x{7F17}\x{7F18}\x{7F19}' .
-          '\x{7F1A}\x{7F1B}\x{7F1C}\x{7F1D}\x{7F1E}\x{7F1F}\x{7F20}\x{7F21}\x{7F22}' .
-          '\x{7F23}\x{7F24}\x{7F25}\x{7F26}\x{7F27}\x{7F28}\x{7F29}\x{7F2A}\x{7F2B}' .
-          '\x{7F2C}\x{7F2D}\x{7F2E}\x{7F2F}\x{7F30}\x{7F31}\x{7F32}\x{7F33}\x{7F34}' .
-          '\x{7F35}\x{7F36}\x{7F37}\x{7F38}\x{7F39}\x{7F3A}\x{7F3D}\x{7F3E}\x{7F3F}' .
-          '\x{7F40}\x{7F42}\x{7F43}\x{7F44}\x{7F45}\x{7F47}\x{7F48}\x{7F49}\x{7F4A}' .
-          '\x{7F4B}\x{7F4C}\x{7F4D}\x{7F4E}\x{7F4F}\x{7F50}\x{7F51}\x{7F52}\x{7F53}' .
-          '\x{7F54}\x{7F55}\x{7F56}\x{7F57}\x{7F58}\x{7F5A}\x{7F5B}\x{7F5C}\x{7F5D}' .
-          '\x{7F5E}\x{7F5F}\x{7F60}\x{7F61}\x{7F62}\x{7F63}\x{7F64}\x{7F65}\x{7F66}' .
-          '\x{7F67}\x{7F68}\x{7F69}\x{7F6A}\x{7F6B}\x{7F6C}\x{7F6D}\x{7F6E}\x{7F6F}' .
-          '\x{7F70}\x{7F71}\x{7F72}\x{7F73}\x{7F74}\x{7F75}\x{7F76}\x{7F77}\x{7F78}' .
-          '\x{7F79}\x{7F7A}\x{7F7B}\x{7F7C}\x{7F7D}\x{7F7E}\x{7F7F}\x{7F80}\x{7F81}' .
-          '\x{7F82}\x{7F83}\x{7F85}\x{7F86}\x{7F87}\x{7F88}\x{7F89}\x{7F8A}\x{7F8B}' .
-          '\x{7F8C}\x{7F8D}\x{7F8E}\x{7F8F}\x{7F91}\x{7F92}\x{7F93}\x{7F94}\x{7F95}' .
-          '\x{7F96}\x{7F98}\x{7F9A}\x{7F9B}\x{7F9C}\x{7F9D}\x{7F9E}\x{7F9F}\x{7FA0}' .
-          '\x{7FA1}\x{7FA2}\x{7FA3}\x{7FA4}\x{7FA5}\x{7FA6}\x{7FA7}\x{7FA8}\x{7FA9}' .
-          '\x{7FAA}\x{7FAB}\x{7FAC}\x{7FAD}\x{7FAE}\x{7FAF}\x{7FB0}\x{7FB1}\x{7FB2}' .
-          '\x{7FB3}\x{7FB5}\x{7FB6}\x{7FB7}\x{7FB8}\x{7FB9}\x{7FBA}\x{7FBB}\x{7FBC}' .
-          '\x{7FBD}\x{7FBE}\x{7FBF}\x{7FC0}\x{7FC1}\x{7FC2}\x{7FC3}\x{7FC4}\x{7FC5}' .
-          '\x{7FC6}\x{7FC7}\x{7FC8}\x{7FC9}\x{7FCA}\x{7FCB}\x{7FCC}\x{7FCD}\x{7FCE}' .
-          '\x{7FCF}\x{7FD0}\x{7FD1}\x{7FD2}\x{7FD3}\x{7FD4}\x{7FD5}\x{7FD7}\x{7FD8}' .
-          '\x{7FD9}\x{7FDA}\x{7FDB}\x{7FDC}\x{7FDE}\x{7FDF}\x{7FE0}\x{7FE1}\x{7FE2}' .
-          '\x{7FE3}\x{7FE5}\x{7FE6}\x{7FE7}\x{7FE8}\x{7FE9}\x{7FEA}\x{7FEB}\x{7FEC}' .
-          '\x{7FED}\x{7FEE}\x{7FEF}\x{7FF0}\x{7FF1}\x{7FF2}\x{7FF3}\x{7FF4}\x{7FF5}' .
-          '\x{7FF6}\x{7FF7}\x{7FF8}\x{7FF9}\x{7FFA}\x{7FFB}\x{7FFC}\x{7FFD}\x{7FFE}' .
-          '\x{7FFF}\x{8000}\x{8001}\x{8002}\x{8003}\x{8004}\x{8005}\x{8006}\x{8007}' .
-          '\x{8008}\x{8009}\x{800B}\x{800C}\x{800D}\x{800E}\x{800F}\x{8010}\x{8011}' .
-          '\x{8012}\x{8013}\x{8014}\x{8015}\x{8016}\x{8017}\x{8018}\x{8019}\x{801A}' .
-          '\x{801B}\x{801C}\x{801D}\x{801E}\x{801F}\x{8020}\x{8021}\x{8022}\x{8023}' .
-          '\x{8024}\x{8025}\x{8026}\x{8027}\x{8028}\x{8029}\x{802A}\x{802B}\x{802C}' .
-          '\x{802D}\x{802E}\x{8030}\x{8031}\x{8032}\x{8033}\x{8034}\x{8035}\x{8036}' .
-          '\x{8037}\x{8038}\x{8039}\x{803A}\x{803B}\x{803D}\x{803E}\x{803F}\x{8041}' .
-          '\x{8042}\x{8043}\x{8044}\x{8045}\x{8046}\x{8047}\x{8048}\x{8049}\x{804A}' .
-          '\x{804B}\x{804C}\x{804D}\x{804E}\x{804F}\x{8050}\x{8051}\x{8052}\x{8053}' .
-          '\x{8054}\x{8055}\x{8056}\x{8057}\x{8058}\x{8059}\x{805A}\x{805B}\x{805C}' .
-          '\x{805D}\x{805E}\x{805F}\x{8060}\x{8061}\x{8062}\x{8063}\x{8064}\x{8065}' .
-          '\x{8067}\x{8068}\x{8069}\x{806A}\x{806B}\x{806C}\x{806D}\x{806E}\x{806F}' .
-          '\x{8070}\x{8071}\x{8072}\x{8073}\x{8074}\x{8075}\x{8076}\x{8077}\x{8078}' .
-          '\x{8079}\x{807A}\x{807B}\x{807C}\x{807D}\x{807E}\x{807F}\x{8080}\x{8081}' .
-          '\x{8082}\x{8083}\x{8084}\x{8085}\x{8086}\x{8087}\x{8089}\x{808A}\x{808B}' .
-          '\x{808C}\x{808D}\x{808F}\x{8090}\x{8091}\x{8092}\x{8093}\x{8095}\x{8096}' .
-          '\x{8097}\x{8098}\x{8099}\x{809A}\x{809B}\x{809C}\x{809D}\x{809E}\x{809F}' .
-          '\x{80A0}\x{80A1}\x{80A2}\x{80A3}\x{80A4}\x{80A5}\x{80A9}\x{80AA}\x{80AB}' .
-          '\x{80AD}\x{80AE}\x{80AF}\x{80B0}\x{80B1}\x{80B2}\x{80B4}\x{80B5}\x{80B6}' .
-          '\x{80B7}\x{80B8}\x{80BA}\x{80BB}\x{80BC}\x{80BD}\x{80BE}\x{80BF}\x{80C0}' .
-          '\x{80C1}\x{80C2}\x{80C3}\x{80C4}\x{80C5}\x{80C6}\x{80C7}\x{80C8}\x{80C9}' .
-          '\x{80CA}\x{80CB}\x{80CC}\x{80CD}\x{80CE}\x{80CF}\x{80D0}\x{80D1}\x{80D2}' .
-          '\x{80D3}\x{80D4}\x{80D5}\x{80D6}\x{80D7}\x{80D8}\x{80D9}\x{80DA}\x{80DB}' .
-          '\x{80DC}\x{80DD}\x{80DE}\x{80E0}\x{80E1}\x{80E2}\x{80E3}\x{80E4}\x{80E5}' .
-          '\x{80E6}\x{80E7}\x{80E8}\x{80E9}\x{80EA}\x{80EB}\x{80EC}\x{80ED}\x{80EE}' .
-          '\x{80EF}\x{80F0}\x{80F1}\x{80F2}\x{80F3}\x{80F4}\x{80F5}\x{80F6}\x{80F7}' .
-          '\x{80F8}\x{80F9}\x{80FA}\x{80FB}\x{80FC}\x{80FD}\x{80FE}\x{80FF}\x{8100}' .
-          '\x{8101}\x{8102}\x{8105}\x{8106}\x{8107}\x{8108}\x{8109}\x{810A}\x{810B}' .
-          '\x{810C}\x{810D}\x{810E}\x{810F}\x{8110}\x{8111}\x{8112}\x{8113}\x{8114}' .
-          '\x{8115}\x{8116}\x{8118}\x{8119}\x{811A}\x{811B}\x{811C}\x{811D}\x{811E}' .
-          '\x{811F}\x{8120}\x{8121}\x{8122}\x{8123}\x{8124}\x{8125}\x{8126}\x{8127}' .
-          '\x{8128}\x{8129}\x{812A}\x{812B}\x{812C}\x{812D}\x{812E}\x{812F}\x{8130}' .
-          '\x{8131}\x{8132}\x{8136}\x{8137}\x{8138}\x{8139}\x{813A}\x{813B}\x{813C}' .
-          '\x{813D}\x{813E}\x{813F}\x{8140}\x{8141}\x{8142}\x{8143}\x{8144}\x{8145}' .
-          '\x{8146}\x{8147}\x{8148}\x{8149}\x{814A}\x{814B}\x{814C}\x{814D}\x{814E}' .
-          '\x{814F}\x{8150}\x{8151}\x{8152}\x{8153}\x{8154}\x{8155}\x{8156}\x{8157}' .
-          '\x{8158}\x{8159}\x{815A}\x{815B}\x{815C}\x{815D}\x{815E}\x{8160}\x{8161}' .
-          '\x{8162}\x{8163}\x{8164}\x{8165}\x{8166}\x{8167}\x{8168}\x{8169}\x{816A}' .
-          '\x{816B}\x{816C}\x{816D}\x{816E}\x{816F}\x{8170}\x{8171}\x{8172}\x{8173}' .
-          '\x{8174}\x{8175}\x{8176}\x{8177}\x{8178}\x{8179}\x{817A}\x{817B}\x{817C}' .
-          '\x{817D}\x{817E}\x{817F}\x{8180}\x{8181}\x{8182}\x{8183}\x{8185}\x{8186}' .
-          '\x{8187}\x{8188}\x{8189}\x{818A}\x{818B}\x{818C}\x{818D}\x{818E}\x{818F}' .
-          '\x{8191}\x{8192}\x{8193}\x{8194}\x{8195}\x{8197}\x{8198}\x{8199}\x{819A}' .
-          '\x{819B}\x{819C}\x{819D}\x{819E}\x{819F}\x{81A0}\x{81A1}\x{81A2}\x{81A3}' .
-          '\x{81A4}\x{81A5}\x{81A6}\x{81A7}\x{81A8}\x{81A9}\x{81AA}\x{81AB}\x{81AC}' .
-          '\x{81AD}\x{81AE}\x{81AF}\x{81B0}\x{81B1}\x{81B2}\x{81B3}\x{81B4}\x{81B5}' .
-          '\x{81B6}\x{81B7}\x{81B8}\x{81B9}\x{81BA}\x{81BB}\x{81BC}\x{81BD}\x{81BE}' .
-          '\x{81BF}\x{81C0}\x{81C1}\x{81C2}\x{81C3}\x{81C4}\x{81C5}\x{81C6}\x{81C7}' .
-          '\x{81C8}\x{81C9}\x{81CA}\x{81CC}\x{81CD}\x{81CE}\x{81CF}\x{81D0}\x{81D1}' .
-          '\x{81D2}\x{81D4}\x{81D5}\x{81D6}\x{81D7}\x{81D8}\x{81D9}\x{81DA}\x{81DB}' .
-          '\x{81DC}\x{81DD}\x{81DE}\x{81DF}\x{81E0}\x{81E1}\x{81E2}\x{81E3}\x{81E5}' .
-          '\x{81E6}\x{81E7}\x{81E8}\x{81E9}\x{81EA}\x{81EB}\x{81EC}\x{81ED}\x{81EE}' .
-          '\x{81F1}\x{81F2}\x{81F3}\x{81F4}\x{81F5}\x{81F6}\x{81F7}\x{81F8}\x{81F9}' .
-          '\x{81FA}\x{81FB}\x{81FC}\x{81FD}\x{81FE}\x{81FF}\x{8200}\x{8201}\x{8202}' .
-          '\x{8203}\x{8204}\x{8205}\x{8206}\x{8207}\x{8208}\x{8209}\x{820A}\x{820B}' .
-          '\x{820C}\x{820D}\x{820E}\x{820F}\x{8210}\x{8211}\x{8212}\x{8214}\x{8215}' .
-          '\x{8216}\x{8218}\x{8219}\x{821A}\x{821B}\x{821C}\x{821D}\x{821E}\x{821F}' .
-          '\x{8220}\x{8221}\x{8222}\x{8223}\x{8225}\x{8226}\x{8227}\x{8228}\x{8229}' .
-          '\x{822A}\x{822B}\x{822C}\x{822D}\x{822F}\x{8230}\x{8231}\x{8232}\x{8233}' .
-          '\x{8234}\x{8235}\x{8236}\x{8237}\x{8238}\x{8239}\x{823A}\x{823B}\x{823C}' .
-          '\x{823D}\x{823E}\x{823F}\x{8240}\x{8242}\x{8243}\x{8244}\x{8245}\x{8246}' .
-          '\x{8247}\x{8248}\x{8249}\x{824A}\x{824B}\x{824C}\x{824D}\x{824E}\x{824F}' .
-          '\x{8250}\x{8251}\x{8252}\x{8253}\x{8254}\x{8255}\x{8256}\x{8257}\x{8258}' .
-          '\x{8259}\x{825A}\x{825B}\x{825C}\x{825D}\x{825E}\x{825F}\x{8260}\x{8261}' .
-          '\x{8263}\x{8264}\x{8266}\x{8267}\x{8268}\x{8269}\x{826A}\x{826B}\x{826C}' .
-          '\x{826D}\x{826E}\x{826F}\x{8270}\x{8271}\x{8272}\x{8273}\x{8274}\x{8275}' .
-          '\x{8276}\x{8277}\x{8278}\x{8279}\x{827A}\x{827B}\x{827C}\x{827D}\x{827E}' .
-          '\x{827F}\x{8280}\x{8281}\x{8282}\x{8283}\x{8284}\x{8285}\x{8286}\x{8287}' .
-          '\x{8288}\x{8289}\x{828A}\x{828B}\x{828D}\x{828E}\x{828F}\x{8290}\x{8291}' .
-          '\x{8292}\x{8293}\x{8294}\x{8295}\x{8296}\x{8297}\x{8298}\x{8299}\x{829A}' .
-          '\x{829B}\x{829C}\x{829D}\x{829E}\x{829F}\x{82A0}\x{82A1}\x{82A2}\x{82A3}' .
-          '\x{82A4}\x{82A5}\x{82A6}\x{82A7}\x{82A8}\x{82A9}\x{82AA}\x{82AB}\x{82AC}' .
-          '\x{82AD}\x{82AE}\x{82AF}\x{82B0}\x{82B1}\x{82B3}\x{82B4}\x{82B5}\x{82B6}' .
-          '\x{82B7}\x{82B8}\x{82B9}\x{82BA}\x{82BB}\x{82BC}\x{82BD}\x{82BE}\x{82BF}' .
-          '\x{82C0}\x{82C1}\x{82C2}\x{82C3}\x{82C4}\x{82C5}\x{82C6}\x{82C7}\x{82C8}' .
-          '\x{82C9}\x{82CA}\x{82CB}\x{82CC}\x{82CD}\x{82CE}\x{82CF}\x{82D0}\x{82D1}' .
-          '\x{82D2}\x{82D3}\x{82D4}\x{82D5}\x{82D6}\x{82D7}\x{82D8}\x{82D9}\x{82DA}' .
-          '\x{82DB}\x{82DC}\x{82DD}\x{82DE}\x{82DF}\x{82E0}\x{82E1}\x{82E3}\x{82E4}' .
-          '\x{82E5}\x{82E6}\x{82E7}\x{82E8}\x{82E9}\x{82EA}\x{82EB}\x{82EC}\x{82ED}' .
-          '\x{82EE}\x{82EF}\x{82F0}\x{82F1}\x{82F2}\x{82F3}\x{82F4}\x{82F5}\x{82F6}' .
-          '\x{82F7}\x{82F8}\x{82F9}\x{82FA}\x{82FB}\x{82FD}\x{82FE}\x{82FF}\x{8300}' .
-          '\x{8301}\x{8302}\x{8303}\x{8304}\x{8305}\x{8306}\x{8307}\x{8308}\x{8309}' .
-          '\x{830B}\x{830C}\x{830D}\x{830E}\x{830F}\x{8311}\x{8312}\x{8313}\x{8314}' .
-          '\x{8315}\x{8316}\x{8317}\x{8318}\x{8319}\x{831A}\x{831B}\x{831C}\x{831D}' .
-          '\x{831E}\x{831F}\x{8320}\x{8321}\x{8322}\x{8323}\x{8324}\x{8325}\x{8326}' .
-          '\x{8327}\x{8328}\x{8329}\x{832A}\x{832B}\x{832C}\x{832D}\x{832E}\x{832F}' .
-          '\x{8331}\x{8332}\x{8333}\x{8334}\x{8335}\x{8336}\x{8337}\x{8338}\x{8339}' .
-          '\x{833A}\x{833B}\x{833C}\x{833D}\x{833E}\x{833F}\x{8340}\x{8341}\x{8342}' .
-          '\x{8343}\x{8344}\x{8345}\x{8346}\x{8347}\x{8348}\x{8349}\x{834A}\x{834B}' .
-          '\x{834C}\x{834D}\x{834E}\x{834F}\x{8350}\x{8351}\x{8352}\x{8353}\x{8354}' .
-          '\x{8356}\x{8357}\x{8358}\x{8359}\x{835A}\x{835B}\x{835C}\x{835D}\x{835E}' .
-          '\x{835F}\x{8360}\x{8361}\x{8362}\x{8363}\x{8364}\x{8365}\x{8366}\x{8367}' .
-          '\x{8368}\x{8369}\x{836A}\x{836B}\x{836C}\x{836D}\x{836E}\x{836F}\x{8370}' .
-          '\x{8371}\x{8372}\x{8373}\x{8374}\x{8375}\x{8376}\x{8377}\x{8378}\x{8379}' .
-          '\x{837A}\x{837B}\x{837C}\x{837D}\x{837E}\x{837F}\x{8380}\x{8381}\x{8382}' .
-          '\x{8383}\x{8384}\x{8385}\x{8386}\x{8387}\x{8388}\x{8389}\x{838A}\x{838B}' .
-          '\x{838C}\x{838D}\x{838E}\x{838F}\x{8390}\x{8391}\x{8392}\x{8393}\x{8394}' .
-          '\x{8395}\x{8396}\x{8397}\x{8398}\x{8399}\x{839A}\x{839B}\x{839C}\x{839D}' .
-          '\x{839E}\x{83A0}\x{83A1}\x{83A2}\x{83A3}\x{83A4}\x{83A5}\x{83A6}\x{83A7}' .
-          '\x{83A8}\x{83A9}\x{83AA}\x{83AB}\x{83AC}\x{83AD}\x{83AE}\x{83AF}\x{83B0}' .
-          '\x{83B1}\x{83B2}\x{83B3}\x{83B4}\x{83B6}\x{83B7}\x{83B8}\x{83B9}\x{83BA}' .
-          '\x{83BB}\x{83BC}\x{83BD}\x{83BF}\x{83C0}\x{83C1}\x{83C2}\x{83C3}\x{83C4}' .
-          '\x{83C5}\x{83C6}\x{83C7}\x{83C8}\x{83C9}\x{83CA}\x{83CB}\x{83CC}\x{83CD}' .
-          '\x{83CE}\x{83CF}\x{83D0}\x{83D1}\x{83D2}\x{83D3}\x{83D4}\x{83D5}\x{83D6}' .
-          '\x{83D7}\x{83D8}\x{83D9}\x{83DA}\x{83DB}\x{83DC}\x{83DD}\x{83DE}\x{83DF}' .
-          '\x{83E0}\x{83E1}\x{83E2}\x{83E3}\x{83E4}\x{83E5}\x{83E7}\x{83E8}\x{83E9}' .
-          '\x{83EA}\x{83EB}\x{83EC}\x{83EE}\x{83EF}\x{83F0}\x{83F1}\x{83F2}\x{83F3}' .
-          '\x{83F4}\x{83F5}\x{83F6}\x{83F7}\x{83F8}\x{83F9}\x{83FA}\x{83FB}\x{83FC}' .
-          '\x{83FD}\x{83FE}\x{83FF}\x{8400}\x{8401}\x{8402}\x{8403}\x{8404}\x{8405}' .
-          '\x{8406}\x{8407}\x{8408}\x{8409}\x{840A}\x{840B}\x{840C}\x{840D}\x{840E}' .
-          '\x{840F}\x{8410}\x{8411}\x{8412}\x{8413}\x{8415}\x{8418}\x{8419}\x{841A}' .
-          '\x{841B}\x{841C}\x{841D}\x{841E}\x{8421}\x{8422}\x{8423}\x{8424}\x{8425}' .
-          '\x{8426}\x{8427}\x{8428}\x{8429}\x{842A}\x{842B}\x{842C}\x{842D}\x{842E}' .
-          '\x{842F}\x{8430}\x{8431}\x{8432}\x{8433}\x{8434}\x{8435}\x{8436}\x{8437}' .
-          '\x{8438}\x{8439}\x{843A}\x{843B}\x{843C}\x{843D}\x{843E}\x{843F}\x{8440}' .
-          '\x{8441}\x{8442}\x{8443}\x{8444}\x{8445}\x{8446}\x{8447}\x{8448}\x{8449}' .
-          '\x{844A}\x{844B}\x{844C}\x{844D}\x{844E}\x{844F}\x{8450}\x{8451}\x{8452}' .
-          '\x{8453}\x{8454}\x{8455}\x{8456}\x{8457}\x{8459}\x{845A}\x{845B}\x{845C}' .
-          '\x{845D}\x{845E}\x{845F}\x{8460}\x{8461}\x{8462}\x{8463}\x{8464}\x{8465}' .
-          '\x{8466}\x{8467}\x{8468}\x{8469}\x{846A}\x{846B}\x{846C}\x{846D}\x{846E}' .
-          '\x{846F}\x{8470}\x{8471}\x{8472}\x{8473}\x{8474}\x{8475}\x{8476}\x{8477}' .
-          '\x{8478}\x{8479}\x{847A}\x{847B}\x{847C}\x{847D}\x{847E}\x{847F}\x{8480}' .
-          '\x{8481}\x{8482}\x{8484}\x{8485}\x{8486}\x{8487}\x{8488}\x{8489}\x{848A}' .
-          '\x{848B}\x{848C}\x{848D}\x{848E}\x{848F}\x{8490}\x{8491}\x{8492}\x{8493}' .
-          '\x{8494}\x{8496}\x{8497}\x{8498}\x{8499}\x{849A}\x{849B}\x{849C}\x{849D}' .
-          '\x{849E}\x{849F}\x{84A0}\x{84A1}\x{84A2}\x{84A3}\x{84A4}\x{84A5}\x{84A6}' .
-          '\x{84A7}\x{84A8}\x{84A9}\x{84AA}\x{84AB}\x{84AC}\x{84AE}\x{84AF}\x{84B0}' .
-          '\x{84B1}\x{84B2}\x{84B3}\x{84B4}\x{84B5}\x{84B6}\x{84B8}\x{84B9}\x{84BA}' .
-          '\x{84BB}\x{84BC}\x{84BD}\x{84BE}\x{84BF}\x{84C0}\x{84C1}\x{84C2}\x{84C4}' .
-          '\x{84C5}\x{84C6}\x{84C7}\x{84C8}\x{84C9}\x{84CA}\x{84CB}\x{84CC}\x{84CD}' .
-          '\x{84CE}\x{84CF}\x{84D0}\x{84D1}\x{84D2}\x{84D3}\x{84D4}\x{84D5}\x{84D6}' .
-          '\x{84D7}\x{84D8}\x{84D9}\x{84DB}\x{84DC}\x{84DD}\x{84DE}\x{84DF}\x{84E0}' .
-          '\x{84E1}\x{84E2}\x{84E3}\x{84E4}\x{84E5}\x{84E6}\x{84E7}\x{84E8}\x{84E9}' .
-          '\x{84EA}\x{84EB}\x{84EC}\x{84EE}\x{84EF}\x{84F0}\x{84F1}\x{84F2}\x{84F3}' .
-          '\x{84F4}\x{84F5}\x{84F6}\x{84F7}\x{84F8}\x{84F9}\x{84FA}\x{84FB}\x{84FC}' .
-          '\x{84FD}\x{84FE}\x{84FF}\x{8500}\x{8501}\x{8502}\x{8503}\x{8504}\x{8506}' .
-          '\x{8507}\x{8508}\x{8509}\x{850A}\x{850B}\x{850C}\x{850D}\x{850E}\x{850F}' .
-          '\x{8511}\x{8512}\x{8513}\x{8514}\x{8515}\x{8516}\x{8517}\x{8518}\x{8519}' .
-          '\x{851A}\x{851B}\x{851C}\x{851D}\x{851E}\x{851F}\x{8520}\x{8521}\x{8522}' .
-          '\x{8523}\x{8524}\x{8525}\x{8526}\x{8527}\x{8528}\x{8529}\x{852A}\x{852B}' .
-          '\x{852C}\x{852D}\x{852E}\x{852F}\x{8530}\x{8531}\x{8534}\x{8535}\x{8536}' .
-          '\x{8537}\x{8538}\x{8539}\x{853A}\x{853B}\x{853C}\x{853D}\x{853E}\x{853F}' .
-          '\x{8540}\x{8541}\x{8542}\x{8543}\x{8544}\x{8545}\x{8546}\x{8547}\x{8548}' .
-          '\x{8549}\x{854A}\x{854B}\x{854D}\x{854E}\x{854F}\x{8551}\x{8552}\x{8553}' .
-          '\x{8554}\x{8555}\x{8556}\x{8557}\x{8558}\x{8559}\x{855A}\x{855B}\x{855C}' .
-          '\x{855D}\x{855E}\x{855F}\x{8560}\x{8561}\x{8562}\x{8563}\x{8564}\x{8565}' .
-          '\x{8566}\x{8567}\x{8568}\x{8569}\x{856A}\x{856B}\x{856C}\x{856D}\x{856E}' .
-          '\x{856F}\x{8570}\x{8571}\x{8572}\x{8573}\x{8574}\x{8575}\x{8576}\x{8577}' .
-          '\x{8578}\x{8579}\x{857A}\x{857B}\x{857C}\x{857D}\x{857E}\x{8580}\x{8581}' .
-          '\x{8582}\x{8583}\x{8584}\x{8585}\x{8586}\x{8587}\x{8588}\x{8589}\x{858A}' .
-          '\x{858B}\x{858C}\x{858D}\x{858E}\x{858F}\x{8590}\x{8591}\x{8592}\x{8594}' .
-          '\x{8595}\x{8596}\x{8598}\x{8599}\x{859A}\x{859B}\x{859C}\x{859D}\x{859E}' .
-          '\x{859F}\x{85A0}\x{85A1}\x{85A2}\x{85A3}\x{85A4}\x{85A5}\x{85A6}\x{85A7}' .
-          '\x{85A8}\x{85A9}\x{85AA}\x{85AB}\x{85AC}\x{85AD}\x{85AE}\x{85AF}\x{85B0}' .
-          '\x{85B1}\x{85B3}\x{85B4}\x{85B5}\x{85B6}\x{85B7}\x{85B8}\x{85B9}\x{85BA}' .
-          '\x{85BC}\x{85BD}\x{85BE}\x{85BF}\x{85C0}\x{85C1}\x{85C2}\x{85C3}\x{85C4}' .
-          '\x{85C5}\x{85C6}\x{85C7}\x{85C8}\x{85C9}\x{85CA}\x{85CB}\x{85CD}\x{85CE}' .
-          '\x{85CF}\x{85D0}\x{85D1}\x{85D2}\x{85D3}\x{85D4}\x{85D5}\x{85D6}\x{85D7}' .
-          '\x{85D8}\x{85D9}\x{85DA}\x{85DB}\x{85DC}\x{85DD}\x{85DE}\x{85DF}\x{85E0}' .
-          '\x{85E1}\x{85E2}\x{85E3}\x{85E4}\x{85E5}\x{85E6}\x{85E7}\x{85E8}\x{85E9}' .
-          '\x{85EA}\x{85EB}\x{85EC}\x{85ED}\x{85EF}\x{85F0}\x{85F1}\x{85F2}\x{85F4}' .
-          '\x{85F5}\x{85F6}\x{85F7}\x{85F8}\x{85F9}\x{85FA}\x{85FB}\x{85FD}\x{85FE}' .
-          '\x{85FF}\x{8600}\x{8601}\x{8602}\x{8604}\x{8605}\x{8606}\x{8607}\x{8608}' .
-          '\x{8609}\x{860A}\x{860B}\x{860C}\x{860F}\x{8611}\x{8612}\x{8613}\x{8614}' .
-          '\x{8616}\x{8617}\x{8618}\x{8619}\x{861A}\x{861B}\x{861C}\x{861E}\x{861F}' .
-          '\x{8620}\x{8621}\x{8622}\x{8623}\x{8624}\x{8625}\x{8626}\x{8627}\x{8628}' .
-          '\x{8629}\x{862A}\x{862B}\x{862C}\x{862D}\x{862E}\x{862F}\x{8630}\x{8631}' .
-          '\x{8632}\x{8633}\x{8634}\x{8635}\x{8636}\x{8638}\x{8639}\x{863A}\x{863B}' .
-          '\x{863C}\x{863D}\x{863E}\x{863F}\x{8640}\x{8641}\x{8642}\x{8643}\x{8644}' .
-          '\x{8645}\x{8646}\x{8647}\x{8648}\x{8649}\x{864A}\x{864B}\x{864C}\x{864D}' .
-          '\x{864E}\x{864F}\x{8650}\x{8651}\x{8652}\x{8653}\x{8654}\x{8655}\x{8656}' .
-          '\x{8658}\x{8659}\x{865A}\x{865B}\x{865C}\x{865D}\x{865E}\x{865F}\x{8660}' .
-          '\x{8661}\x{8662}\x{8663}\x{8664}\x{8665}\x{8666}\x{8667}\x{8668}\x{8669}' .
-          '\x{866A}\x{866B}\x{866C}\x{866D}\x{866E}\x{866F}\x{8670}\x{8671}\x{8672}' .
-          '\x{8673}\x{8674}\x{8676}\x{8677}\x{8678}\x{8679}\x{867A}\x{867B}\x{867C}' .
-          '\x{867D}\x{867E}\x{867F}\x{8680}\x{8681}\x{8682}\x{8683}\x{8684}\x{8685}' .
-          '\x{8686}\x{8687}\x{8688}\x{868A}\x{868B}\x{868C}\x{868D}\x{868E}\x{868F}' .
-          '\x{8690}\x{8691}\x{8693}\x{8694}\x{8695}\x{8696}\x{8697}\x{8698}\x{8699}' .
-          '\x{869A}\x{869B}\x{869C}\x{869D}\x{869E}\x{869F}\x{86A1}\x{86A2}\x{86A3}' .
-          '\x{86A4}\x{86A5}\x{86A7}\x{86A8}\x{86A9}\x{86AA}\x{86AB}\x{86AC}\x{86AD}' .
-          '\x{86AE}\x{86AF}\x{86B0}\x{86B1}\x{86B2}\x{86B3}\x{86B4}\x{86B5}\x{86B6}' .
-          '\x{86B7}\x{86B8}\x{86B9}\x{86BA}\x{86BB}\x{86BC}\x{86BD}\x{86BE}\x{86BF}' .
-          '\x{86C0}\x{86C1}\x{86C2}\x{86C3}\x{86C4}\x{86C5}\x{86C6}\x{86C7}\x{86C8}' .
-          '\x{86C9}\x{86CA}\x{86CB}\x{86CC}\x{86CE}\x{86CF}\x{86D0}\x{86D1}\x{86D2}' .
-          '\x{86D3}\x{86D4}\x{86D6}\x{86D7}\x{86D8}\x{86D9}\x{86DA}\x{86DB}\x{86DC}' .
-          '\x{86DD}\x{86DE}\x{86DF}\x{86E1}\x{86E2}\x{86E3}\x{86E4}\x{86E5}\x{86E6}' .
-          '\x{86E8}\x{86E9}\x{86EA}\x{86EB}\x{86EC}\x{86ED}\x{86EE}\x{86EF}\x{86F0}' .
-          '\x{86F1}\x{86F2}\x{86F3}\x{86F4}\x{86F5}\x{86F6}\x{86F7}\x{86F8}\x{86F9}' .
-          '\x{86FA}\x{86FB}\x{86FC}\x{86FE}\x{86FF}\x{8700}\x{8701}\x{8702}\x{8703}' .
-          '\x{8704}\x{8705}\x{8706}\x{8707}\x{8708}\x{8709}\x{870A}\x{870B}\x{870C}' .
-          '\x{870D}\x{870E}\x{870F}\x{8710}\x{8711}\x{8712}\x{8713}\x{8714}\x{8715}' .
-          '\x{8716}\x{8717}\x{8718}\x{8719}\x{871A}\x{871B}\x{871C}\x{871E}\x{871F}' .
-          '\x{8720}\x{8721}\x{8722}\x{8723}\x{8724}\x{8725}\x{8726}\x{8727}\x{8728}' .
-          '\x{8729}\x{872A}\x{872B}\x{872C}\x{872D}\x{872E}\x{8730}\x{8731}\x{8732}' .
-          '\x{8733}\x{8734}\x{8735}\x{8736}\x{8737}\x{8738}\x{8739}\x{873A}\x{873B}' .
-          '\x{873C}\x{873E}\x{873F}\x{8740}\x{8741}\x{8742}\x{8743}\x{8744}\x{8746}' .
-          '\x{8747}\x{8748}\x{8749}\x{874A}\x{874C}\x{874D}\x{874E}\x{874F}\x{8750}' .
-          '\x{8751}\x{8752}\x{8753}\x{8754}\x{8755}\x{8756}\x{8757}\x{8758}\x{8759}' .
-          '\x{875A}\x{875B}\x{875C}\x{875D}\x{875E}\x{875F}\x{8760}\x{8761}\x{8762}' .
-          '\x{8763}\x{8764}\x{8765}\x{8766}\x{8767}\x{8768}\x{8769}\x{876A}\x{876B}' .
-          '\x{876C}\x{876D}\x{876E}\x{876F}\x{8770}\x{8772}\x{8773}\x{8774}\x{8775}' .
-          '\x{8776}\x{8777}\x{8778}\x{8779}\x{877A}\x{877B}\x{877C}\x{877D}\x{877E}' .
-          '\x{8780}\x{8781}\x{8782}\x{8783}\x{8784}\x{8785}\x{8786}\x{8787}\x{8788}' .
-          '\x{8789}\x{878A}\x{878B}\x{878C}\x{878D}\x{878F}\x{8790}\x{8791}\x{8792}' .
-          '\x{8793}\x{8794}\x{8795}\x{8796}\x{8797}\x{8798}\x{879A}\x{879B}\x{879C}' .
-          '\x{879D}\x{879E}\x{879F}\x{87A0}\x{87A1}\x{87A2}\x{87A3}\x{87A4}\x{87A5}' .
-          '\x{87A6}\x{87A7}\x{87A8}\x{87A9}\x{87AA}\x{87AB}\x{87AC}\x{87AD}\x{87AE}' .
-          '\x{87AF}\x{87B0}\x{87B1}\x{87B2}\x{87B3}\x{87B4}\x{87B5}\x{87B6}\x{87B7}' .
-          '\x{87B8}\x{87B9}\x{87BA}\x{87BB}\x{87BC}\x{87BD}\x{87BE}\x{87BF}\x{87C0}' .
-          '\x{87C1}\x{87C2}\x{87C3}\x{87C4}\x{87C5}\x{87C6}\x{87C7}\x{87C8}\x{87C9}' .
-          '\x{87CA}\x{87CB}\x{87CC}\x{87CD}\x{87CE}\x{87CF}\x{87D0}\x{87D1}\x{87D2}' .
-          '\x{87D3}\x{87D4}\x{87D5}\x{87D6}\x{87D7}\x{87D8}\x{87D9}\x{87DB}\x{87DC}' .
-          '\x{87DD}\x{87DE}\x{87DF}\x{87E0}\x{87E1}\x{87E2}\x{87E3}\x{87E4}\x{87E5}' .
-          '\x{87E6}\x{87E7}\x{87E8}\x{87E9}\x{87EA}\x{87EB}\x{87EC}\x{87ED}\x{87EE}' .
-          '\x{87EF}\x{87F1}\x{87F2}\x{87F3}\x{87F4}\x{87F5}\x{87F6}\x{87F7}\x{87F8}' .
-          '\x{87F9}\x{87FA}\x{87FB}\x{87FC}\x{87FD}\x{87FE}\x{87FF}\x{8800}\x{8801}' .
-          '\x{8802}\x{8803}\x{8804}\x{8805}\x{8806}\x{8808}\x{8809}\x{880A}\x{880B}' .
-          '\x{880C}\x{880D}\x{880E}\x{880F}\x{8810}\x{8811}\x{8813}\x{8814}\x{8815}' .
-          '\x{8816}\x{8817}\x{8818}\x{8819}\x{881A}\x{881B}\x{881C}\x{881D}\x{881E}' .
-          '\x{881F}\x{8820}\x{8821}\x{8822}\x{8823}\x{8824}\x{8825}\x{8826}\x{8827}' .
-          '\x{8828}\x{8829}\x{882A}\x{882B}\x{882C}\x{882E}\x{882F}\x{8830}\x{8831}' .
-          '\x{8832}\x{8833}\x{8834}\x{8835}\x{8836}\x{8837}\x{8838}\x{8839}\x{883B}' .
-          '\x{883C}\x{883D}\x{883E}\x{883F}\x{8840}\x{8841}\x{8842}\x{8843}\x{8844}' .
-          '\x{8845}\x{8846}\x{8848}\x{8849}\x{884A}\x{884B}\x{884C}\x{884D}\x{884E}' .
-          '\x{884F}\x{8850}\x{8851}\x{8852}\x{8853}\x{8854}\x{8855}\x{8856}\x{8857}' .
-          '\x{8859}\x{885A}\x{885B}\x{885D}\x{885E}\x{8860}\x{8861}\x{8862}\x{8863}' .
-          '\x{8864}\x{8865}\x{8866}\x{8867}\x{8868}\x{8869}\x{886A}\x{886B}\x{886C}' .
-          '\x{886D}\x{886E}\x{886F}\x{8870}\x{8871}\x{8872}\x{8873}\x{8874}\x{8875}' .
-          '\x{8876}\x{8877}\x{8878}\x{8879}\x{887B}\x{887C}\x{887D}\x{887E}\x{887F}' .
-          '\x{8880}\x{8881}\x{8882}\x{8883}\x{8884}\x{8885}\x{8886}\x{8887}\x{8888}' .
-          '\x{8889}\x{888A}\x{888B}\x{888C}\x{888D}\x{888E}\x{888F}\x{8890}\x{8891}' .
-          '\x{8892}\x{8893}\x{8894}\x{8895}\x{8896}\x{8897}\x{8898}\x{8899}\x{889A}' .
-          '\x{889B}\x{889C}\x{889D}\x{889E}\x{889F}\x{88A0}\x{88A1}\x{88A2}\x{88A3}' .
-          '\x{88A4}\x{88A5}\x{88A6}\x{88A7}\x{88A8}\x{88A9}\x{88AA}\x{88AB}\x{88AC}' .
-          '\x{88AD}\x{88AE}\x{88AF}\x{88B0}\x{88B1}\x{88B2}\x{88B3}\x{88B4}\x{88B6}' .
-          '\x{88B7}\x{88B8}\x{88B9}\x{88BA}\x{88BB}\x{88BC}\x{88BD}\x{88BE}\x{88BF}' .
-          '\x{88C0}\x{88C1}\x{88C2}\x{88C3}\x{88C4}\x{88C5}\x{88C6}\x{88C7}\x{88C8}' .
-          '\x{88C9}\x{88CA}\x{88CB}\x{88CC}\x{88CD}\x{88CE}\x{88CF}\x{88D0}\x{88D1}' .
-          '\x{88D2}\x{88D3}\x{88D4}\x{88D5}\x{88D6}\x{88D7}\x{88D8}\x{88D9}\x{88DA}' .
-          '\x{88DB}\x{88DC}\x{88DD}\x{88DE}\x{88DF}\x{88E0}\x{88E1}\x{88E2}\x{88E3}' .
-          '\x{88E4}\x{88E5}\x{88E7}\x{88E8}\x{88EA}\x{88EB}\x{88EC}\x{88EE}\x{88EF}' .
-          '\x{88F0}\x{88F1}\x{88F2}\x{88F3}\x{88F4}\x{88F5}\x{88F6}\x{88F7}\x{88F8}' .
-          '\x{88F9}\x{88FA}\x{88FB}\x{88FC}\x{88FD}\x{88FE}\x{88FF}\x{8900}\x{8901}' .
-          '\x{8902}\x{8904}\x{8905}\x{8906}\x{8907}\x{8908}\x{8909}\x{890A}\x{890B}' .
-          '\x{890C}\x{890D}\x{890E}\x{8910}\x{8911}\x{8912}\x{8913}\x{8914}\x{8915}' .
-          '\x{8916}\x{8917}\x{8918}\x{8919}\x{891A}\x{891B}\x{891C}\x{891D}\x{891E}' .
-          '\x{891F}\x{8920}\x{8921}\x{8922}\x{8923}\x{8925}\x{8926}\x{8927}\x{8928}' .
-          '\x{8929}\x{892A}\x{892B}\x{892C}\x{892D}\x{892E}\x{892F}\x{8930}\x{8931}' .
-          '\x{8932}\x{8933}\x{8934}\x{8935}\x{8936}\x{8937}\x{8938}\x{8939}\x{893A}' .
-          '\x{893B}\x{893C}\x{893D}\x{893E}\x{893F}\x{8940}\x{8941}\x{8942}\x{8943}' .
-          '\x{8944}\x{8945}\x{8946}\x{8947}\x{8948}\x{8949}\x{894A}\x{894B}\x{894C}' .
-          '\x{894E}\x{894F}\x{8950}\x{8951}\x{8952}\x{8953}\x{8954}\x{8955}\x{8956}' .
-          '\x{8957}\x{8958}\x{8959}\x{895A}\x{895B}\x{895C}\x{895D}\x{895E}\x{895F}' .
-          '\x{8960}\x{8961}\x{8962}\x{8963}\x{8964}\x{8966}\x{8967}\x{8968}\x{8969}' .
-          '\x{896A}\x{896B}\x{896C}\x{896D}\x{896E}\x{896F}\x{8970}\x{8971}\x{8972}' .
-          '\x{8973}\x{8974}\x{8976}\x{8977}\x{8978}\x{8979}\x{897A}\x{897B}\x{897C}' .
-          '\x{897E}\x{897F}\x{8980}\x{8981}\x{8982}\x{8983}\x{8984}\x{8985}\x{8986}' .
-          '\x{8987}\x{8988}\x{8989}\x{898A}\x{898B}\x{898C}\x{898E}\x{898F}\x{8991}' .
-          '\x{8992}\x{8993}\x{8995}\x{8996}\x{8997}\x{8998}\x{899A}\x{899B}\x{899C}' .
-          '\x{899D}\x{899E}\x{899F}\x{89A0}\x{89A1}\x{89A2}\x{89A3}\x{89A4}\x{89A5}' .
-          '\x{89A6}\x{89A7}\x{89A8}\x{89AA}\x{89AB}\x{89AC}\x{89AD}\x{89AE}\x{89AF}' .
-          '\x{89B1}\x{89B2}\x{89B3}\x{89B5}\x{89B6}\x{89B7}\x{89B8}\x{89B9}\x{89BA}' .
-          '\x{89BD}\x{89BE}\x{89BF}\x{89C0}\x{89C1}\x{89C2}\x{89C3}\x{89C4}\x{89C5}' .
-          '\x{89C6}\x{89C7}\x{89C8}\x{89C9}\x{89CA}\x{89CB}\x{89CC}\x{89CD}\x{89CE}' .
-          '\x{89CF}\x{89D0}\x{89D1}\x{89D2}\x{89D3}\x{89D4}\x{89D5}\x{89D6}\x{89D7}' .
-          '\x{89D8}\x{89D9}\x{89DA}\x{89DB}\x{89DC}\x{89DD}\x{89DE}\x{89DF}\x{89E0}' .
-          '\x{89E1}\x{89E2}\x{89E3}\x{89E4}\x{89E5}\x{89E6}\x{89E7}\x{89E8}\x{89E9}' .
-          '\x{89EA}\x{89EB}\x{89EC}\x{89ED}\x{89EF}\x{89F0}\x{89F1}\x{89F2}\x{89F3}' .
-          '\x{89F4}\x{89F6}\x{89F7}\x{89F8}\x{89FA}\x{89FB}\x{89FC}\x{89FE}\x{89FF}' .
-          '\x{8A00}\x{8A01}\x{8A02}\x{8A03}\x{8A04}\x{8A07}\x{8A08}\x{8A09}\x{8A0A}' .
-          '\x{8A0B}\x{8A0C}\x{8A0D}\x{8A0E}\x{8A0F}\x{8A10}\x{8A11}\x{8A12}\x{8A13}' .
-          '\x{8A15}\x{8A16}\x{8A17}\x{8A18}\x{8A1A}\x{8A1B}\x{8A1C}\x{8A1D}\x{8A1E}' .
-          '\x{8A1F}\x{8A22}\x{8A23}\x{8A24}\x{8A25}\x{8A26}\x{8A27}\x{8A28}\x{8A29}' .
-          '\x{8A2A}\x{8A2C}\x{8A2D}\x{8A2E}\x{8A2F}\x{8A30}\x{8A31}\x{8A32}\x{8A34}' .
-          '\x{8A35}\x{8A36}\x{8A37}\x{8A38}\x{8A39}\x{8A3A}\x{8A3B}\x{8A3C}\x{8A3E}' .
-          '\x{8A3F}\x{8A40}\x{8A41}\x{8A42}\x{8A43}\x{8A44}\x{8A45}\x{8A46}\x{8A47}' .
-          '\x{8A48}\x{8A49}\x{8A4A}\x{8A4C}\x{8A4D}\x{8A4E}\x{8A4F}\x{8A50}\x{8A51}' .
-          '\x{8A52}\x{8A53}\x{8A54}\x{8A55}\x{8A56}\x{8A57}\x{8A58}\x{8A59}\x{8A5A}' .
-          '\x{8A5B}\x{8A5C}\x{8A5D}\x{8A5E}\x{8A5F}\x{8A60}\x{8A61}\x{8A62}\x{8A63}' .
-          '\x{8A65}\x{8A66}\x{8A67}\x{8A68}\x{8A69}\x{8A6A}\x{8A6B}\x{8A6C}\x{8A6D}' .
-          '\x{8A6E}\x{8A6F}\x{8A70}\x{8A71}\x{8A72}\x{8A73}\x{8A74}\x{8A75}\x{8A76}' .
-          '\x{8A77}\x{8A79}\x{8A7A}\x{8A7B}\x{8A7C}\x{8A7E}\x{8A7F}\x{8A80}\x{8A81}' .
-          '\x{8A82}\x{8A83}\x{8A84}\x{8A85}\x{8A86}\x{8A87}\x{8A89}\x{8A8A}\x{8A8B}' .
-          '\x{8A8C}\x{8A8D}\x{8A8E}\x{8A8F}\x{8A90}\x{8A91}\x{8A92}\x{8A93}\x{8A94}' .
-          '\x{8A95}\x{8A96}\x{8A97}\x{8A98}\x{8A99}\x{8A9A}\x{8A9B}\x{8A9C}\x{8A9D}' .
-          '\x{8A9E}\x{8AA0}\x{8AA1}\x{8AA2}\x{8AA3}\x{8AA4}\x{8AA5}\x{8AA6}\x{8AA7}' .
-          '\x{8AA8}\x{8AA9}\x{8AAA}\x{8AAB}\x{8AAC}\x{8AAE}\x{8AB0}\x{8AB1}\x{8AB2}' .
-          '\x{8AB3}\x{8AB4}\x{8AB5}\x{8AB6}\x{8AB8}\x{8AB9}\x{8ABA}\x{8ABB}\x{8ABC}' .
-          '\x{8ABD}\x{8ABE}\x{8ABF}\x{8AC0}\x{8AC1}\x{8AC2}\x{8AC3}\x{8AC4}\x{8AC5}' .
-          '\x{8AC6}\x{8AC7}\x{8AC8}\x{8AC9}\x{8ACA}\x{8ACB}\x{8ACC}\x{8ACD}\x{8ACE}' .
-          '\x{8ACF}\x{8AD1}\x{8AD2}\x{8AD3}\x{8AD4}\x{8AD5}\x{8AD6}\x{8AD7}\x{8AD8}' .
-          '\x{8AD9}\x{8ADA}\x{8ADB}\x{8ADC}\x{8ADD}\x{8ADE}\x{8ADF}\x{8AE0}\x{8AE1}' .
-          '\x{8AE2}\x{8AE3}\x{8AE4}\x{8AE5}\x{8AE6}\x{8AE7}\x{8AE8}\x{8AE9}\x{8AEA}' .
-          '\x{8AEB}\x{8AED}\x{8AEE}\x{8AEF}\x{8AF0}\x{8AF1}\x{8AF2}\x{8AF3}\x{8AF4}' .
-          '\x{8AF5}\x{8AF6}\x{8AF7}\x{8AF8}\x{8AF9}\x{8AFA}\x{8AFB}\x{8AFC}\x{8AFD}' .
-          '\x{8AFE}\x{8AFF}\x{8B00}\x{8B01}\x{8B02}\x{8B03}\x{8B04}\x{8B05}\x{8B06}' .
-          '\x{8B07}\x{8B08}\x{8B09}\x{8B0A}\x{8B0B}\x{8B0D}\x{8B0E}\x{8B0F}\x{8B10}' .
-          '\x{8B11}\x{8B12}\x{8B13}\x{8B14}\x{8B15}\x{8B16}\x{8B17}\x{8B18}\x{8B19}' .
-          '\x{8B1A}\x{8B1B}\x{8B1C}\x{8B1D}\x{8B1E}\x{8B1F}\x{8B20}\x{8B21}\x{8B22}' .
-          '\x{8B23}\x{8B24}\x{8B25}\x{8B26}\x{8B27}\x{8B28}\x{8B2A}\x{8B2B}\x{8B2C}' .
-          '\x{8B2D}\x{8B2E}\x{8B2F}\x{8B30}\x{8B31}\x{8B33}\x{8B34}\x{8B35}\x{8B36}' .
-          '\x{8B37}\x{8B39}\x{8B3A}\x{8B3B}\x{8B3C}\x{8B3D}\x{8B3E}\x{8B40}\x{8B41}' .
-          '\x{8B42}\x{8B43}\x{8B44}\x{8B45}\x{8B46}\x{8B47}\x{8B48}\x{8B49}\x{8B4A}' .
-          '\x{8B4B}\x{8B4C}\x{8B4D}\x{8B4E}\x{8B4F}\x{8B50}\x{8B51}\x{8B52}\x{8B53}' .
-          '\x{8B54}\x{8B55}\x{8B56}\x{8B57}\x{8B58}\x{8B59}\x{8B5A}\x{8B5B}\x{8B5C}' .
-          '\x{8B5D}\x{8B5E}\x{8B5F}\x{8B60}\x{8B63}\x{8B64}\x{8B65}\x{8B66}\x{8B67}' .
-          '\x{8B68}\x{8B6A}\x{8B6B}\x{8B6C}\x{8B6D}\x{8B6E}\x{8B6F}\x{8B70}\x{8B71}' .
-          '\x{8B73}\x{8B74}\x{8B76}\x{8B77}\x{8B78}\x{8B79}\x{8B7A}\x{8B7B}\x{8B7D}' .
-          '\x{8B7E}\x{8B7F}\x{8B80}\x{8B82}\x{8B83}\x{8B84}\x{8B85}\x{8B86}\x{8B88}' .
-          '\x{8B89}\x{8B8A}\x{8B8B}\x{8B8C}\x{8B8E}\x{8B90}\x{8B91}\x{8B92}\x{8B93}' .
-          '\x{8B94}\x{8B95}\x{8B96}\x{8B97}\x{8B98}\x{8B99}\x{8B9A}\x{8B9C}\x{8B9D}' .
-          '\x{8B9E}\x{8B9F}\x{8BA0}\x{8BA1}\x{8BA2}\x{8BA3}\x{8BA4}\x{8BA5}\x{8BA6}' .
-          '\x{8BA7}\x{8BA8}\x{8BA9}\x{8BAA}\x{8BAB}\x{8BAC}\x{8BAD}\x{8BAE}\x{8BAF}' .
-          '\x{8BB0}\x{8BB1}\x{8BB2}\x{8BB3}\x{8BB4}\x{8BB5}\x{8BB6}\x{8BB7}\x{8BB8}' .
-          '\x{8BB9}\x{8BBA}\x{8BBB}\x{8BBC}\x{8BBD}\x{8BBE}\x{8BBF}\x{8BC0}\x{8BC1}' .
-          '\x{8BC2}\x{8BC3}\x{8BC4}\x{8BC5}\x{8BC6}\x{8BC7}\x{8BC8}\x{8BC9}\x{8BCA}' .
-          '\x{8BCB}\x{8BCC}\x{8BCD}\x{8BCE}\x{8BCF}\x{8BD0}\x{8BD1}\x{8BD2}\x{8BD3}' .
-          '\x{8BD4}\x{8BD5}\x{8BD6}\x{8BD7}\x{8BD8}\x{8BD9}\x{8BDA}\x{8BDB}\x{8BDC}' .
-          '\x{8BDD}\x{8BDE}\x{8BDF}\x{8BE0}\x{8BE1}\x{8BE2}\x{8BE3}\x{8BE4}\x{8BE5}' .
-          '\x{8BE6}\x{8BE7}\x{8BE8}\x{8BE9}\x{8BEA}\x{8BEB}\x{8BEC}\x{8BED}\x{8BEE}' .
-          '\x{8BEF}\x{8BF0}\x{8BF1}\x{8BF2}\x{8BF3}\x{8BF4}\x{8BF5}\x{8BF6}\x{8BF7}' .
-          '\x{8BF8}\x{8BF9}\x{8BFA}\x{8BFB}\x{8BFC}\x{8BFD}\x{8BFE}\x{8BFF}\x{8C00}' .
-          '\x{8C01}\x{8C02}\x{8C03}\x{8C04}\x{8C05}\x{8C06}\x{8C07}\x{8C08}\x{8C09}' .
-          '\x{8C0A}\x{8C0B}\x{8C0C}\x{8C0D}\x{8C0E}\x{8C0F}\x{8C10}\x{8C11}\x{8C12}' .
-          '\x{8C13}\x{8C14}\x{8C15}\x{8C16}\x{8C17}\x{8C18}\x{8C19}\x{8C1A}\x{8C1B}' .
-          '\x{8C1C}\x{8C1D}\x{8C1E}\x{8C1F}\x{8C20}\x{8C21}\x{8C22}\x{8C23}\x{8C24}' .
-          '\x{8C25}\x{8C26}\x{8C27}\x{8C28}\x{8C29}\x{8C2A}\x{8C2B}\x{8C2C}\x{8C2D}' .
-          '\x{8C2E}\x{8C2F}\x{8C30}\x{8C31}\x{8C32}\x{8C33}\x{8C34}\x{8C35}\x{8C36}' .
-          '\x{8C37}\x{8C39}\x{8C3A}\x{8C3B}\x{8C3C}\x{8C3D}\x{8C3E}\x{8C3F}\x{8C41}' .
-          '\x{8C42}\x{8C43}\x{8C45}\x{8C46}\x{8C47}\x{8C48}\x{8C49}\x{8C4A}\x{8C4B}' .
-          '\x{8C4C}\x{8C4D}\x{8C4E}\x{8C4F}\x{8C50}\x{8C54}\x{8C55}\x{8C56}\x{8C57}' .
-          '\x{8C59}\x{8C5A}\x{8C5B}\x{8C5C}\x{8C5D}\x{8C5E}\x{8C5F}\x{8C60}\x{8C61}' .
-          '\x{8C62}\x{8C63}\x{8C64}\x{8C65}\x{8C66}\x{8C67}\x{8C68}\x{8C69}\x{8C6A}' .
-          '\x{8C6B}\x{8C6C}\x{8C6D}\x{8C6E}\x{8C6F}\x{8C70}\x{8C71}\x{8C72}\x{8C73}' .
-          '\x{8C75}\x{8C76}\x{8C77}\x{8C78}\x{8C79}\x{8C7A}\x{8C7B}\x{8C7D}\x{8C7E}' .
-          '\x{8C80}\x{8C81}\x{8C82}\x{8C84}\x{8C85}\x{8C86}\x{8C88}\x{8C89}\x{8C8A}' .
-          '\x{8C8C}\x{8C8D}\x{8C8F}\x{8C90}\x{8C91}\x{8C92}\x{8C93}\x{8C94}\x{8C95}' .
-          '\x{8C96}\x{8C97}\x{8C98}\x{8C99}\x{8C9A}\x{8C9C}\x{8C9D}\x{8C9E}\x{8C9F}' .
-          '\x{8CA0}\x{8CA1}\x{8CA2}\x{8CA3}\x{8CA4}\x{8CA5}\x{8CA7}\x{8CA8}\x{8CA9}' .
-          '\x{8CAA}\x{8CAB}\x{8CAC}\x{8CAD}\x{8CAE}\x{8CAF}\x{8CB0}\x{8CB1}\x{8CB2}' .
-          '\x{8CB3}\x{8CB4}\x{8CB5}\x{8CB6}\x{8CB7}\x{8CB8}\x{8CB9}\x{8CBA}\x{8CBB}' .
-          '\x{8CBC}\x{8CBD}\x{8CBE}\x{8CBF}\x{8CC0}\x{8CC1}\x{8CC2}\x{8CC3}\x{8CC4}' .
-          '\x{8CC5}\x{8CC6}\x{8CC7}\x{8CC8}\x{8CC9}\x{8CCA}\x{8CCC}\x{8CCE}\x{8CCF}' .
-          '\x{8CD0}\x{8CD1}\x{8CD2}\x{8CD3}\x{8CD4}\x{8CD5}\x{8CD7}\x{8CD9}\x{8CDA}' .
-          '\x{8CDB}\x{8CDC}\x{8CDD}\x{8CDE}\x{8CDF}\x{8CE0}\x{8CE1}\x{8CE2}\x{8CE3}' .
-          '\x{8CE4}\x{8CE5}\x{8CE6}\x{8CE7}\x{8CE8}\x{8CEA}\x{8CEB}\x{8CEC}\x{8CED}' .
-          '\x{8CEE}\x{8CEF}\x{8CF0}\x{8CF1}\x{8CF2}\x{8CF3}\x{8CF4}\x{8CF5}\x{8CF6}' .
-          '\x{8CF8}\x{8CF9}\x{8CFA}\x{8CFB}\x{8CFC}\x{8CFD}\x{8CFE}\x{8CFF}\x{8D00}' .
-          '\x{8D02}\x{8D03}\x{8D04}\x{8D05}\x{8D06}\x{8D07}\x{8D08}\x{8D09}\x{8D0A}' .
-          '\x{8D0B}\x{8D0C}\x{8D0D}\x{8D0E}\x{8D0F}\x{8D10}\x{8D13}\x{8D14}\x{8D15}' .
-          '\x{8D16}\x{8D17}\x{8D18}\x{8D19}\x{8D1A}\x{8D1B}\x{8D1C}\x{8D1D}\x{8D1E}' .
-          '\x{8D1F}\x{8D20}\x{8D21}\x{8D22}\x{8D23}\x{8D24}\x{8D25}\x{8D26}\x{8D27}' .
-          '\x{8D28}\x{8D29}\x{8D2A}\x{8D2B}\x{8D2C}\x{8D2D}\x{8D2E}\x{8D2F}\x{8D30}' .
-          '\x{8D31}\x{8D32}\x{8D33}\x{8D34}\x{8D35}\x{8D36}\x{8D37}\x{8D38}\x{8D39}' .
-          '\x{8D3A}\x{8D3B}\x{8D3C}\x{8D3D}\x{8D3E}\x{8D3F}\x{8D40}\x{8D41}\x{8D42}' .
-          '\x{8D43}\x{8D44}\x{8D45}\x{8D46}\x{8D47}\x{8D48}\x{8D49}\x{8D4A}\x{8D4B}' .
-          '\x{8D4C}\x{8D4D}\x{8D4E}\x{8D4F}\x{8D50}\x{8D51}\x{8D52}\x{8D53}\x{8D54}' .
-          '\x{8D55}\x{8D56}\x{8D57}\x{8D58}\x{8D59}\x{8D5A}\x{8D5B}\x{8D5C}\x{8D5D}' .
-          '\x{8D5E}\x{8D5F}\x{8D60}\x{8D61}\x{8D62}\x{8D63}\x{8D64}\x{8D65}\x{8D66}' .
-          '\x{8D67}\x{8D68}\x{8D69}\x{8D6A}\x{8D6B}\x{8D6C}\x{8D6D}\x{8D6E}\x{8D6F}' .
-          '\x{8D70}\x{8D71}\x{8D72}\x{8D73}\x{8D74}\x{8D75}\x{8D76}\x{8D77}\x{8D78}' .
-          '\x{8D79}\x{8D7A}\x{8D7B}\x{8D7D}\x{8D7E}\x{8D7F}\x{8D80}\x{8D81}\x{8D82}' .
-          '\x{8D83}\x{8D84}\x{8D85}\x{8D86}\x{8D87}\x{8D88}\x{8D89}\x{8D8A}\x{8D8B}' .
-          '\x{8D8C}\x{8D8D}\x{8D8E}\x{8D8F}\x{8D90}\x{8D91}\x{8D92}\x{8D93}\x{8D94}' .
-          '\x{8D95}\x{8D96}\x{8D97}\x{8D98}\x{8D99}\x{8D9A}\x{8D9B}\x{8D9C}\x{8D9D}' .
-          '\x{8D9E}\x{8D9F}\x{8DA0}\x{8DA1}\x{8DA2}\x{8DA3}\x{8DA4}\x{8DA5}\x{8DA7}' .
-          '\x{8DA8}\x{8DA9}\x{8DAA}\x{8DAB}\x{8DAC}\x{8DAD}\x{8DAE}\x{8DAF}\x{8DB0}' .
-          '\x{8DB1}\x{8DB2}\x{8DB3}\x{8DB4}\x{8DB5}\x{8DB6}\x{8DB7}\x{8DB8}\x{8DB9}' .
-          '\x{8DBA}\x{8DBB}\x{8DBC}\x{8DBD}\x{8DBE}\x{8DBF}\x{8DC1}\x{8DC2}\x{8DC3}' .
-          '\x{8DC4}\x{8DC5}\x{8DC6}\x{8DC7}\x{8DC8}\x{8DC9}\x{8DCA}\x{8DCB}\x{8DCC}' .
-          '\x{8DCD}\x{8DCE}\x{8DCF}\x{8DD0}\x{8DD1}\x{8DD2}\x{8DD3}\x{8DD4}\x{8DD5}' .
-          '\x{8DD6}\x{8DD7}\x{8DD8}\x{8DD9}\x{8DDA}\x{8DDB}\x{8DDC}\x{8DDD}\x{8DDE}' .
-          '\x{8DDF}\x{8DE0}\x{8DE1}\x{8DE2}\x{8DE3}\x{8DE4}\x{8DE6}\x{8DE7}\x{8DE8}' .
-          '\x{8DE9}\x{8DEA}\x{8DEB}\x{8DEC}\x{8DED}\x{8DEE}\x{8DEF}\x{8DF0}\x{8DF1}' .
-          '\x{8DF2}\x{8DF3}\x{8DF4}\x{8DF5}\x{8DF6}\x{8DF7}\x{8DF8}\x{8DF9}\x{8DFA}' .
-          '\x{8DFB}\x{8DFC}\x{8DFD}\x{8DFE}\x{8DFF}\x{8E00}\x{8E02}\x{8E03}\x{8E04}' .
-          '\x{8E05}\x{8E06}\x{8E07}\x{8E08}\x{8E09}\x{8E0A}\x{8E0C}\x{8E0D}\x{8E0E}' .
-          '\x{8E0F}\x{8E10}\x{8E11}\x{8E12}\x{8E13}\x{8E14}\x{8E15}\x{8E16}\x{8E17}' .
-          '\x{8E18}\x{8E19}\x{8E1A}\x{8E1B}\x{8E1C}\x{8E1D}\x{8E1E}\x{8E1F}\x{8E20}' .
-          '\x{8E21}\x{8E22}\x{8E23}\x{8E24}\x{8E25}\x{8E26}\x{8E27}\x{8E28}\x{8E29}' .
-          '\x{8E2A}\x{8E2B}\x{8E2C}\x{8E2D}\x{8E2E}\x{8E2F}\x{8E30}\x{8E31}\x{8E33}' .
-          '\x{8E34}\x{8E35}\x{8E36}\x{8E37}\x{8E38}\x{8E39}\x{8E3A}\x{8E3B}\x{8E3C}' .
-          '\x{8E3D}\x{8E3E}\x{8E3F}\x{8E40}\x{8E41}\x{8E42}\x{8E43}\x{8E44}\x{8E45}' .
-          '\x{8E47}\x{8E48}\x{8E49}\x{8E4A}\x{8E4B}\x{8E4C}\x{8E4D}\x{8E4E}\x{8E50}' .
-          '\x{8E51}\x{8E52}\x{8E53}\x{8E54}\x{8E55}\x{8E56}\x{8E57}\x{8E58}\x{8E59}' .
-          '\x{8E5A}\x{8E5B}\x{8E5C}\x{8E5D}\x{8E5E}\x{8E5F}\x{8E60}\x{8E61}\x{8E62}' .
-          '\x{8E63}\x{8E64}\x{8E65}\x{8E66}\x{8E67}\x{8E68}\x{8E69}\x{8E6A}\x{8E6B}' .
-          '\x{8E6C}\x{8E6D}\x{8E6F}\x{8E70}\x{8E71}\x{8E72}\x{8E73}\x{8E74}\x{8E76}' .
-          '\x{8E78}\x{8E7A}\x{8E7B}\x{8E7C}\x{8E7D}\x{8E7E}\x{8E7F}\x{8E80}\x{8E81}' .
-          '\x{8E82}\x{8E83}\x{8E84}\x{8E85}\x{8E86}\x{8E87}\x{8E88}\x{8E89}\x{8E8A}' .
-          '\x{8E8B}\x{8E8C}\x{8E8D}\x{8E8E}\x{8E8F}\x{8E90}\x{8E91}\x{8E92}\x{8E93}' .
-          '\x{8E94}\x{8E95}\x{8E96}\x{8E97}\x{8E98}\x{8E9A}\x{8E9C}\x{8E9D}\x{8E9E}' .
-          '\x{8E9F}\x{8EA0}\x{8EA1}\x{8EA3}\x{8EA4}\x{8EA5}\x{8EA6}\x{8EA7}\x{8EA8}' .
-          '\x{8EA9}\x{8EAA}\x{8EAB}\x{8EAC}\x{8EAD}\x{8EAE}\x{8EAF}\x{8EB0}\x{8EB1}' .
-          '\x{8EB2}\x{8EB4}\x{8EB5}\x{8EB8}\x{8EB9}\x{8EBA}\x{8EBB}\x{8EBC}\x{8EBD}' .
-          '\x{8EBE}\x{8EBF}\x{8EC0}\x{8EC2}\x{8EC3}\x{8EC5}\x{8EC6}\x{8EC7}\x{8EC8}' .
-          '\x{8EC9}\x{8ECA}\x{8ECB}\x{8ECC}\x{8ECD}\x{8ECE}\x{8ECF}\x{8ED0}\x{8ED1}' .
-          '\x{8ED2}\x{8ED3}\x{8ED4}\x{8ED5}\x{8ED6}\x{8ED7}\x{8ED8}\x{8EDA}\x{8EDB}' .
-          '\x{8EDC}\x{8EDD}\x{8EDE}\x{8EDF}\x{8EE0}\x{8EE1}\x{8EE4}\x{8EE5}\x{8EE6}' .
-          '\x{8EE7}\x{8EE8}\x{8EE9}\x{8EEA}\x{8EEB}\x{8EEC}\x{8EED}\x{8EEE}\x{8EEF}' .
-          '\x{8EF1}\x{8EF2}\x{8EF3}\x{8EF4}\x{8EF5}\x{8EF6}\x{8EF7}\x{8EF8}\x{8EF9}' .
-          '\x{8EFA}\x{8EFB}\x{8EFC}\x{8EFD}\x{8EFE}\x{8EFF}\x{8F00}\x{8F01}\x{8F02}' .
-          '\x{8F03}\x{8F04}\x{8F05}\x{8F06}\x{8F07}\x{8F08}\x{8F09}\x{8F0A}\x{8F0B}' .
-          '\x{8F0D}\x{8F0E}\x{8F10}\x{8F11}\x{8F12}\x{8F13}\x{8F14}\x{8F15}\x{8F16}' .
-          '\x{8F17}\x{8F18}\x{8F1A}\x{8F1B}\x{8F1C}\x{8F1D}\x{8F1E}\x{8F1F}\x{8F20}' .
-          '\x{8F21}\x{8F22}\x{8F23}\x{8F24}\x{8F25}\x{8F26}\x{8F27}\x{8F28}\x{8F29}' .
-          '\x{8F2A}\x{8F2B}\x{8F2C}\x{8F2E}\x{8F2F}\x{8F30}\x{8F31}\x{8F32}\x{8F33}' .
-          '\x{8F34}\x{8F35}\x{8F36}\x{8F37}\x{8F38}\x{8F39}\x{8F3B}\x{8F3C}\x{8F3D}' .
-          '\x{8F3E}\x{8F3F}\x{8F40}\x{8F42}\x{8F43}\x{8F44}\x{8F45}\x{8F46}\x{8F47}' .
-          '\x{8F48}\x{8F49}\x{8F4A}\x{8F4B}\x{8F4C}\x{8F4D}\x{8F4E}\x{8F4F}\x{8F50}' .
-          '\x{8F51}\x{8F52}\x{8F53}\x{8F54}\x{8F55}\x{8F56}\x{8F57}\x{8F58}\x{8F59}' .
-          '\x{8F5A}\x{8F5B}\x{8F5D}\x{8F5E}\x{8F5F}\x{8F60}\x{8F61}\x{8F62}\x{8F63}' .
-          '\x{8F64}\x{8F65}\x{8F66}\x{8F67}\x{8F68}\x{8F69}\x{8F6A}\x{8F6B}\x{8F6C}' .
-          '\x{8F6D}\x{8F6E}\x{8F6F}\x{8F70}\x{8F71}\x{8F72}\x{8F73}\x{8F74}\x{8F75}' .
-          '\x{8F76}\x{8F77}\x{8F78}\x{8F79}\x{8F7A}\x{8F7B}\x{8F7C}\x{8F7D}\x{8F7E}' .
-          '\x{8F7F}\x{8F80}\x{8F81}\x{8F82}\x{8F83}\x{8F84}\x{8F85}\x{8F86}\x{8F87}' .
-          '\x{8F88}\x{8F89}\x{8F8A}\x{8F8B}\x{8F8C}\x{8F8D}\x{8F8E}\x{8F8F}\x{8F90}' .
-          '\x{8F91}\x{8F92}\x{8F93}\x{8F94}\x{8F95}\x{8F96}\x{8F97}\x{8F98}\x{8F99}' .
-          '\x{8F9A}\x{8F9B}\x{8F9C}\x{8F9E}\x{8F9F}\x{8FA0}\x{8FA1}\x{8FA2}\x{8FA3}' .
-          '\x{8FA5}\x{8FA6}\x{8FA7}\x{8FA8}\x{8FA9}\x{8FAA}\x{8FAB}\x{8FAC}\x{8FAD}' .
-          '\x{8FAE}\x{8FAF}\x{8FB0}\x{8FB1}\x{8FB2}\x{8FB4}\x{8FB5}\x{8FB6}\x{8FB7}' .
-          '\x{8FB8}\x{8FB9}\x{8FBB}\x{8FBC}\x{8FBD}\x{8FBE}\x{8FBF}\x{8FC0}\x{8FC1}' .
-          '\x{8FC2}\x{8FC4}\x{8FC5}\x{8FC6}\x{8FC7}\x{8FC8}\x{8FC9}\x{8FCB}\x{8FCC}' .
-          '\x{8FCD}\x{8FCE}\x{8FCF}\x{8FD0}\x{8FD1}\x{8FD2}\x{8FD3}\x{8FD4}\x{8FD5}' .
-          '\x{8FD6}\x{8FD7}\x{8FD8}\x{8FD9}\x{8FDA}\x{8FDB}\x{8FDC}\x{8FDD}\x{8FDE}' .
-          '\x{8FDF}\x{8FE0}\x{8FE1}\x{8FE2}\x{8FE3}\x{8FE4}\x{8FE5}\x{8FE6}\x{8FE8}' .
-          '\x{8FE9}\x{8FEA}\x{8FEB}\x{8FEC}\x{8FED}\x{8FEE}\x{8FEF}\x{8FF0}\x{8FF1}' .
-          '\x{8FF2}\x{8FF3}\x{8FF4}\x{8FF5}\x{8FF6}\x{8FF7}\x{8FF8}\x{8FF9}\x{8FFA}' .
-          '\x{8FFB}\x{8FFC}\x{8FFD}\x{8FFE}\x{8FFF}\x{9000}\x{9001}\x{9002}\x{9003}' .
-          '\x{9004}\x{9005}\x{9006}\x{9007}\x{9008}\x{9009}\x{900A}\x{900B}\x{900C}' .
-          '\x{900D}\x{900F}\x{9010}\x{9011}\x{9012}\x{9013}\x{9014}\x{9015}\x{9016}' .
-          '\x{9017}\x{9018}\x{9019}\x{901A}\x{901B}\x{901C}\x{901D}\x{901E}\x{901F}' .
-          '\x{9020}\x{9021}\x{9022}\x{9023}\x{9024}\x{9025}\x{9026}\x{9027}\x{9028}' .
-          '\x{9029}\x{902B}\x{902D}\x{902E}\x{902F}\x{9030}\x{9031}\x{9032}\x{9033}' .
-          '\x{9034}\x{9035}\x{9036}\x{9038}\x{903A}\x{903B}\x{903C}\x{903D}\x{903E}' .
-          '\x{903F}\x{9041}\x{9042}\x{9043}\x{9044}\x{9045}\x{9047}\x{9048}\x{9049}' .
-          '\x{904A}\x{904B}\x{904C}\x{904D}\x{904E}\x{904F}\x{9050}\x{9051}\x{9052}' .
-          '\x{9053}\x{9054}\x{9055}\x{9056}\x{9057}\x{9058}\x{9059}\x{905A}\x{905B}' .
-          '\x{905C}\x{905D}\x{905E}\x{905F}\x{9060}\x{9061}\x{9062}\x{9063}\x{9064}' .
-          '\x{9065}\x{9066}\x{9067}\x{9068}\x{9069}\x{906A}\x{906B}\x{906C}\x{906D}' .
-          '\x{906E}\x{906F}\x{9070}\x{9071}\x{9072}\x{9073}\x{9074}\x{9075}\x{9076}' .
-          '\x{9077}\x{9078}\x{9079}\x{907A}\x{907B}\x{907C}\x{907D}\x{907E}\x{907F}' .
-          '\x{9080}\x{9081}\x{9082}\x{9083}\x{9084}\x{9085}\x{9086}\x{9087}\x{9088}' .
-          '\x{9089}\x{908A}\x{908B}\x{908C}\x{908D}\x{908E}\x{908F}\x{9090}\x{9091}' .
-          '\x{9092}\x{9093}\x{9094}\x{9095}\x{9096}\x{9097}\x{9098}\x{9099}\x{909A}' .
-          '\x{909B}\x{909C}\x{909D}\x{909E}\x{909F}\x{90A0}\x{90A1}\x{90A2}\x{90A3}' .
-          '\x{90A4}\x{90A5}\x{90A6}\x{90A7}\x{90A8}\x{90A9}\x{90AA}\x{90AC}\x{90AD}' .
-          '\x{90AE}\x{90AF}\x{90B0}\x{90B1}\x{90B2}\x{90B3}\x{90B4}\x{90B5}\x{90B6}' .
-          '\x{90B7}\x{90B8}\x{90B9}\x{90BA}\x{90BB}\x{90BC}\x{90BD}\x{90BE}\x{90BF}' .
-          '\x{90C0}\x{90C1}\x{90C2}\x{90C3}\x{90C4}\x{90C5}\x{90C6}\x{90C7}\x{90C8}' .
-          '\x{90C9}\x{90CA}\x{90CB}\x{90CE}\x{90CF}\x{90D0}\x{90D1}\x{90D3}\x{90D4}' .
-          '\x{90D5}\x{90D6}\x{90D7}\x{90D8}\x{90D9}\x{90DA}\x{90DB}\x{90DC}\x{90DD}' .
-          '\x{90DE}\x{90DF}\x{90E0}\x{90E1}\x{90E2}\x{90E3}\x{90E4}\x{90E5}\x{90E6}' .
-          '\x{90E7}\x{90E8}\x{90E9}\x{90EA}\x{90EB}\x{90EC}\x{90ED}\x{90EE}\x{90EF}' .
-          '\x{90F0}\x{90F1}\x{90F2}\x{90F3}\x{90F4}\x{90F5}\x{90F7}\x{90F8}\x{90F9}' .
-          '\x{90FA}\x{90FB}\x{90FC}\x{90FD}\x{90FE}\x{90FF}\x{9100}\x{9101}\x{9102}' .
-          '\x{9103}\x{9104}\x{9105}\x{9106}\x{9107}\x{9108}\x{9109}\x{910B}\x{910C}' .
-          '\x{910D}\x{910E}\x{910F}\x{9110}\x{9111}\x{9112}\x{9113}\x{9114}\x{9115}' .
-          '\x{9116}\x{9117}\x{9118}\x{9119}\x{911A}\x{911B}\x{911C}\x{911D}\x{911E}' .
-          '\x{911F}\x{9120}\x{9121}\x{9122}\x{9123}\x{9124}\x{9125}\x{9126}\x{9127}' .
-          '\x{9128}\x{9129}\x{912A}\x{912B}\x{912C}\x{912D}\x{912E}\x{912F}\x{9130}' .
-          '\x{9131}\x{9132}\x{9133}\x{9134}\x{9135}\x{9136}\x{9137}\x{9138}\x{9139}' .
-          '\x{913A}\x{913B}\x{913E}\x{913F}\x{9140}\x{9141}\x{9142}\x{9143}\x{9144}' .
-          '\x{9145}\x{9146}\x{9147}\x{9148}\x{9149}\x{914A}\x{914B}\x{914C}\x{914D}' .
-          '\x{914E}\x{914F}\x{9150}\x{9151}\x{9152}\x{9153}\x{9154}\x{9155}\x{9156}' .
-          '\x{9157}\x{9158}\x{915A}\x{915B}\x{915C}\x{915D}\x{915E}\x{915F}\x{9160}' .
-          '\x{9161}\x{9162}\x{9163}\x{9164}\x{9165}\x{9166}\x{9167}\x{9168}\x{9169}' .
-          '\x{916A}\x{916B}\x{916C}\x{916D}\x{916E}\x{916F}\x{9170}\x{9171}\x{9172}' .
-          '\x{9173}\x{9174}\x{9175}\x{9176}\x{9177}\x{9178}\x{9179}\x{917A}\x{917C}' .
-          '\x{917D}\x{917E}\x{917F}\x{9180}\x{9181}\x{9182}\x{9183}\x{9184}\x{9185}' .
-          '\x{9186}\x{9187}\x{9188}\x{9189}\x{918A}\x{918B}\x{918C}\x{918D}\x{918E}' .
-          '\x{918F}\x{9190}\x{9191}\x{9192}\x{9193}\x{9194}\x{9196}\x{9199}\x{919A}' .
-          '\x{919B}\x{919C}\x{919D}\x{919E}\x{919F}\x{91A0}\x{91A1}\x{91A2}\x{91A3}' .
-          '\x{91A5}\x{91A6}\x{91A7}\x{91A8}\x{91AA}\x{91AB}\x{91AC}\x{91AD}\x{91AE}' .
-          '\x{91AF}\x{91B0}\x{91B1}\x{91B2}\x{91B3}\x{91B4}\x{91B5}\x{91B6}\x{91B7}' .
-          '\x{91B9}\x{91BA}\x{91BB}\x{91BC}\x{91BD}\x{91BE}\x{91C0}\x{91C1}\x{91C2}' .
-          '\x{91C3}\x{91C5}\x{91C6}\x{91C7}\x{91C9}\x{91CA}\x{91CB}\x{91CC}\x{91CD}' .
-          '\x{91CE}\x{91CF}\x{91D0}\x{91D1}\x{91D2}\x{91D3}\x{91D4}\x{91D5}\x{91D7}' .
-          '\x{91D8}\x{91D9}\x{91DA}\x{91DB}\x{91DC}\x{91DD}\x{91DE}\x{91DF}\x{91E2}' .
-          '\x{91E3}\x{91E4}\x{91E5}\x{91E6}\x{91E7}\x{91E8}\x{91E9}\x{91EA}\x{91EB}' .
-          '\x{91EC}\x{91ED}\x{91EE}\x{91F0}\x{91F1}\x{91F2}\x{91F3}\x{91F4}\x{91F5}' .
-          '\x{91F7}\x{91F8}\x{91F9}\x{91FA}\x{91FB}\x{91FD}\x{91FE}\x{91FF}\x{9200}' .
-          '\x{9201}\x{9202}\x{9203}\x{9204}\x{9205}\x{9206}\x{9207}\x{9208}\x{9209}' .
-          '\x{920A}\x{920B}\x{920C}\x{920D}\x{920E}\x{920F}\x{9210}\x{9211}\x{9212}' .
-          '\x{9214}\x{9215}\x{9216}\x{9217}\x{9218}\x{9219}\x{921A}\x{921B}\x{921C}' .
-          '\x{921D}\x{921E}\x{9220}\x{9221}\x{9223}\x{9224}\x{9225}\x{9226}\x{9227}' .
-          '\x{9228}\x{9229}\x{922A}\x{922B}\x{922D}\x{922E}\x{922F}\x{9230}\x{9231}' .
-          '\x{9232}\x{9233}\x{9234}\x{9235}\x{9236}\x{9237}\x{9238}\x{9239}\x{923A}' .
-          '\x{923B}\x{923C}\x{923D}\x{923E}\x{923F}\x{9240}\x{9241}\x{9242}\x{9245}' .
-          '\x{9246}\x{9247}\x{9248}\x{9249}\x{924A}\x{924B}\x{924C}\x{924D}\x{924E}' .
-          '\x{924F}\x{9250}\x{9251}\x{9252}\x{9253}\x{9254}\x{9255}\x{9256}\x{9257}' .
-          '\x{9258}\x{9259}\x{925A}\x{925B}\x{925C}\x{925D}\x{925E}\x{925F}\x{9260}' .
-          '\x{9261}\x{9262}\x{9263}\x{9264}\x{9265}\x{9266}\x{9267}\x{9268}\x{926B}' .
-          '\x{926C}\x{926D}\x{926E}\x{926F}\x{9270}\x{9272}\x{9273}\x{9274}\x{9275}' .
-          '\x{9276}\x{9277}\x{9278}\x{9279}\x{927A}\x{927B}\x{927C}\x{927D}\x{927E}' .
-          '\x{927F}\x{9280}\x{9282}\x{9283}\x{9285}\x{9286}\x{9287}\x{9288}\x{9289}' .
-          '\x{928A}\x{928B}\x{928C}\x{928D}\x{928E}\x{928F}\x{9290}\x{9291}\x{9292}' .
-          '\x{9293}\x{9294}\x{9295}\x{9296}\x{9297}\x{9298}\x{9299}\x{929A}\x{929B}' .
-          '\x{929C}\x{929D}\x{929F}\x{92A0}\x{92A1}\x{92A2}\x{92A3}\x{92A4}\x{92A5}' .
-          '\x{92A6}\x{92A7}\x{92A8}\x{92A9}\x{92AA}\x{92AB}\x{92AC}\x{92AD}\x{92AE}' .
-          '\x{92AF}\x{92B0}\x{92B1}\x{92B2}\x{92B3}\x{92B4}\x{92B5}\x{92B6}\x{92B7}' .
-          '\x{92B8}\x{92B9}\x{92BA}\x{92BB}\x{92BC}\x{92BE}\x{92BF}\x{92C0}\x{92C1}' .
-          '\x{92C2}\x{92C3}\x{92C4}\x{92C5}\x{92C6}\x{92C7}\x{92C8}\x{92C9}\x{92CA}' .
-          '\x{92CB}\x{92CC}\x{92CD}\x{92CE}\x{92CF}\x{92D0}\x{92D1}\x{92D2}\x{92D3}' .
-          '\x{92D5}\x{92D6}\x{92D7}\x{92D8}\x{92D9}\x{92DA}\x{92DC}\x{92DD}\x{92DE}' .
-          '\x{92DF}\x{92E0}\x{92E1}\x{92E3}\x{92E4}\x{92E5}\x{92E6}\x{92E7}\x{92E8}' .
-          '\x{92E9}\x{92EA}\x{92EB}\x{92EC}\x{92ED}\x{92EE}\x{92EF}\x{92F0}\x{92F1}' .
-          '\x{92F2}\x{92F3}\x{92F4}\x{92F5}\x{92F6}\x{92F7}\x{92F8}\x{92F9}\x{92FA}' .
-          '\x{92FB}\x{92FC}\x{92FD}\x{92FE}\x{92FF}\x{9300}\x{9301}\x{9302}\x{9303}' .
-          '\x{9304}\x{9305}\x{9306}\x{9307}\x{9308}\x{9309}\x{930A}\x{930B}\x{930C}' .
-          '\x{930D}\x{930E}\x{930F}\x{9310}\x{9311}\x{9312}\x{9313}\x{9314}\x{9315}' .
-          '\x{9316}\x{9317}\x{9318}\x{9319}\x{931A}\x{931B}\x{931D}\x{931E}\x{931F}' .
-          '\x{9320}\x{9321}\x{9322}\x{9323}\x{9324}\x{9325}\x{9326}\x{9327}\x{9328}' .
-          '\x{9329}\x{932A}\x{932B}\x{932D}\x{932E}\x{932F}\x{9332}\x{9333}\x{9334}' .
-          '\x{9335}\x{9336}\x{9337}\x{9338}\x{9339}\x{933A}\x{933B}\x{933C}\x{933D}' .
-          '\x{933E}\x{933F}\x{9340}\x{9341}\x{9342}\x{9343}\x{9344}\x{9345}\x{9346}' .
-          '\x{9347}\x{9348}\x{9349}\x{934A}\x{934B}\x{934C}\x{934D}\x{934E}\x{934F}' .
-          '\x{9350}\x{9351}\x{9352}\x{9353}\x{9354}\x{9355}\x{9356}\x{9357}\x{9358}' .
-          '\x{9359}\x{935A}\x{935B}\x{935C}\x{935D}\x{935E}\x{935F}\x{9360}\x{9361}' .
-          '\x{9363}\x{9364}\x{9365}\x{9366}\x{9367}\x{9369}\x{936A}\x{936C}\x{936D}' .
-          '\x{936E}\x{9370}\x{9371}\x{9372}\x{9374}\x{9375}\x{9376}\x{9377}\x{9379}' .
-          '\x{937A}\x{937B}\x{937C}\x{937D}\x{937E}\x{9380}\x{9382}\x{9383}\x{9384}' .
-          '\x{9385}\x{9386}\x{9387}\x{9388}\x{9389}\x{938A}\x{938C}\x{938D}\x{938E}' .
-          '\x{938F}\x{9390}\x{9391}\x{9392}\x{9393}\x{9394}\x{9395}\x{9396}\x{9397}' .
-          '\x{9398}\x{9399}\x{939A}\x{939B}\x{939D}\x{939E}\x{939F}\x{93A1}\x{93A2}' .
-          '\x{93A3}\x{93A4}\x{93A5}\x{93A6}\x{93A7}\x{93A8}\x{93A9}\x{93AA}\x{93AC}' .
-          '\x{93AD}\x{93AE}\x{93AF}\x{93B0}\x{93B1}\x{93B2}\x{93B3}\x{93B4}\x{93B5}' .
-          '\x{93B6}\x{93B7}\x{93B8}\x{93B9}\x{93BA}\x{93BC}\x{93BD}\x{93BE}\x{93BF}' .
-          '\x{93C0}\x{93C1}\x{93C2}\x{93C3}\x{93C4}\x{93C5}\x{93C6}\x{93C7}\x{93C8}' .
-          '\x{93C9}\x{93CA}\x{93CB}\x{93CC}\x{93CD}\x{93CE}\x{93CF}\x{93D0}\x{93D1}' .
-          '\x{93D2}\x{93D3}\x{93D4}\x{93D5}\x{93D6}\x{93D7}\x{93D8}\x{93D9}\x{93DA}' .
-          '\x{93DB}\x{93DC}\x{93DD}\x{93DE}\x{93DF}\x{93E1}\x{93E2}\x{93E3}\x{93E4}' .
-          '\x{93E6}\x{93E7}\x{93E8}\x{93E9}\x{93EA}\x{93EB}\x{93EC}\x{93ED}\x{93EE}' .
-          '\x{93EF}\x{93F0}\x{93F1}\x{93F2}\x{93F4}\x{93F5}\x{93F6}\x{93F7}\x{93F8}' .
-          '\x{93F9}\x{93FA}\x{93FB}\x{93FC}\x{93FD}\x{93FE}\x{93FF}\x{9400}\x{9401}' .
-          '\x{9403}\x{9404}\x{9405}\x{9406}\x{9407}\x{9408}\x{9409}\x{940A}\x{940B}' .
-          '\x{940C}\x{940D}\x{940E}\x{940F}\x{9410}\x{9411}\x{9412}\x{9413}\x{9414}' .
-          '\x{9415}\x{9416}\x{9418}\x{9419}\x{941B}\x{941D}\x{9420}\x{9422}\x{9423}' .
-          '\x{9425}\x{9426}\x{9427}\x{9428}\x{9429}\x{942A}\x{942B}\x{942C}\x{942D}' .
-          '\x{942E}\x{942F}\x{9430}\x{9431}\x{9432}\x{9433}\x{9434}\x{9435}\x{9436}' .
-          '\x{9437}\x{9438}\x{9439}\x{943A}\x{943B}\x{943C}\x{943D}\x{943E}\x{943F}' .
-          '\x{9440}\x{9441}\x{9442}\x{9444}\x{9445}\x{9446}\x{9447}\x{9448}\x{9449}' .
-          '\x{944A}\x{944B}\x{944C}\x{944D}\x{944F}\x{9450}\x{9451}\x{9452}\x{9453}' .
-          '\x{9454}\x{9455}\x{9456}\x{9457}\x{9458}\x{9459}\x{945B}\x{945C}\x{945D}' .
-          '\x{945E}\x{945F}\x{9460}\x{9461}\x{9462}\x{9463}\x{9464}\x{9465}\x{9466}' .
-          '\x{9467}\x{9468}\x{9469}\x{946A}\x{946B}\x{946D}\x{946E}\x{946F}\x{9470}' .
-          '\x{9471}\x{9472}\x{9473}\x{9474}\x{9475}\x{9476}\x{9477}\x{9478}\x{9479}' .
-          '\x{947A}\x{947C}\x{947D}\x{947E}\x{947F}\x{9480}\x{9481}\x{9482}\x{9483}' .
-          '\x{9484}\x{9485}\x{9486}\x{9487}\x{9488}\x{9489}\x{948A}\x{948B}\x{948C}' .
-          '\x{948D}\x{948E}\x{948F}\x{9490}\x{9491}\x{9492}\x{9493}\x{9494}\x{9495}' .
-          '\x{9496}\x{9497}\x{9498}\x{9499}\x{949A}\x{949B}\x{949C}\x{949D}\x{949E}' .
-          '\x{949F}\x{94A0}\x{94A1}\x{94A2}\x{94A3}\x{94A4}\x{94A5}\x{94A6}\x{94A7}' .
-          '\x{94A8}\x{94A9}\x{94AA}\x{94AB}\x{94AC}\x{94AD}\x{94AE}\x{94AF}\x{94B0}' .
-          '\x{94B1}\x{94B2}\x{94B3}\x{94B4}\x{94B5}\x{94B6}\x{94B7}\x{94B8}\x{94B9}' .
-          '\x{94BA}\x{94BB}\x{94BC}\x{94BD}\x{94BE}\x{94BF}\x{94C0}\x{94C1}\x{94C2}' .
-          '\x{94C3}\x{94C4}\x{94C5}\x{94C6}\x{94C7}\x{94C8}\x{94C9}\x{94CA}\x{94CB}' .
-          '\x{94CC}\x{94CD}\x{94CE}\x{94CF}\x{94D0}\x{94D1}\x{94D2}\x{94D3}\x{94D4}' .
-          '\x{94D5}\x{94D6}\x{94D7}\x{94D8}\x{94D9}\x{94DA}\x{94DB}\x{94DC}\x{94DD}' .
-          '\x{94DE}\x{94DF}\x{94E0}\x{94E1}\x{94E2}\x{94E3}\x{94E4}\x{94E5}\x{94E6}' .
-          '\x{94E7}\x{94E8}\x{94E9}\x{94EA}\x{94EB}\x{94EC}\x{94ED}\x{94EE}\x{94EF}' .
-          '\x{94F0}\x{94F1}\x{94F2}\x{94F3}\x{94F4}\x{94F5}\x{94F6}\x{94F7}\x{94F8}' .
-          '\x{94F9}\x{94FA}\x{94FB}\x{94FC}\x{94FD}\x{94FE}\x{94FF}\x{9500}\x{9501}' .
-          '\x{9502}\x{9503}\x{9504}\x{9505}\x{9506}\x{9507}\x{9508}\x{9509}\x{950A}' .
-          '\x{950B}\x{950C}\x{950D}\x{950E}\x{950F}\x{9510}\x{9511}\x{9512}\x{9513}' .
-          '\x{9514}\x{9515}\x{9516}\x{9517}\x{9518}\x{9519}\x{951A}\x{951B}\x{951C}' .
-          '\x{951D}\x{951E}\x{951F}\x{9520}\x{9521}\x{9522}\x{9523}\x{9524}\x{9525}' .
-          '\x{9526}\x{9527}\x{9528}\x{9529}\x{952A}\x{952B}\x{952C}\x{952D}\x{952E}' .
-          '\x{952F}\x{9530}\x{9531}\x{9532}\x{9533}\x{9534}\x{9535}\x{9536}\x{9537}' .
-          '\x{9538}\x{9539}\x{953A}\x{953B}\x{953C}\x{953D}\x{953E}\x{953F}\x{9540}' .
-          '\x{9541}\x{9542}\x{9543}\x{9544}\x{9545}\x{9546}\x{9547}\x{9548}\x{9549}' .
-          '\x{954A}\x{954B}\x{954C}\x{954D}\x{954E}\x{954F}\x{9550}\x{9551}\x{9552}' .
-          '\x{9553}\x{9554}\x{9555}\x{9556}\x{9557}\x{9558}\x{9559}\x{955A}\x{955B}' .
-          '\x{955C}\x{955D}\x{955E}\x{955F}\x{9560}\x{9561}\x{9562}\x{9563}\x{9564}' .
-          '\x{9565}\x{9566}\x{9567}\x{9568}\x{9569}\x{956A}\x{956B}\x{956C}\x{956D}' .
-          '\x{956E}\x{956F}\x{9570}\x{9571}\x{9572}\x{9573}\x{9574}\x{9575}\x{9576}' .
-          '\x{9577}\x{957A}\x{957B}\x{957C}\x{957D}\x{957F}\x{9580}\x{9581}\x{9582}' .
-          '\x{9583}\x{9584}\x{9586}\x{9587}\x{9588}\x{9589}\x{958A}\x{958B}\x{958C}' .
-          '\x{958D}\x{958E}\x{958F}\x{9590}\x{9591}\x{9592}\x{9593}\x{9594}\x{9595}' .
-          '\x{9596}\x{9598}\x{9599}\x{959A}\x{959B}\x{959C}\x{959D}\x{959E}\x{959F}' .
-          '\x{95A1}\x{95A2}\x{95A3}\x{95A4}\x{95A5}\x{95A6}\x{95A7}\x{95A8}\x{95A9}' .
-          '\x{95AA}\x{95AB}\x{95AC}\x{95AD}\x{95AE}\x{95AF}\x{95B0}\x{95B1}\x{95B2}' .
-          '\x{95B5}\x{95B6}\x{95B7}\x{95B9}\x{95BA}\x{95BB}\x{95BC}\x{95BD}\x{95BE}' .
-          '\x{95BF}\x{95C0}\x{95C2}\x{95C3}\x{95C4}\x{95C5}\x{95C6}\x{95C7}\x{95C8}' .
-          '\x{95C9}\x{95CA}\x{95CB}\x{95CC}\x{95CD}\x{95CE}\x{95CF}\x{95D0}\x{95D1}' .
-          '\x{95D2}\x{95D3}\x{95D4}\x{95D5}\x{95D6}\x{95D7}\x{95D8}\x{95DA}\x{95DB}' .
-          '\x{95DC}\x{95DE}\x{95DF}\x{95E0}\x{95E1}\x{95E2}\x{95E3}\x{95E4}\x{95E5}' .
-          '\x{95E6}\x{95E7}\x{95E8}\x{95E9}\x{95EA}\x{95EB}\x{95EC}\x{95ED}\x{95EE}' .
-          '\x{95EF}\x{95F0}\x{95F1}\x{95F2}\x{95F3}\x{95F4}\x{95F5}\x{95F6}\x{95F7}' .
-          '\x{95F8}\x{95F9}\x{95FA}\x{95FB}\x{95FC}\x{95FD}\x{95FE}\x{95FF}\x{9600}' .
-          '\x{9601}\x{9602}\x{9603}\x{9604}\x{9605}\x{9606}\x{9607}\x{9608}\x{9609}' .
-          '\x{960A}\x{960B}\x{960C}\x{960D}\x{960E}\x{960F}\x{9610}\x{9611}\x{9612}' .
-          '\x{9613}\x{9614}\x{9615}\x{9616}\x{9617}\x{9618}\x{9619}\x{961A}\x{961B}' .
-          '\x{961C}\x{961D}\x{961E}\x{961F}\x{9620}\x{9621}\x{9622}\x{9623}\x{9624}' .
-          '\x{9627}\x{9628}\x{962A}\x{962B}\x{962C}\x{962D}\x{962E}\x{962F}\x{9630}' .
-          '\x{9631}\x{9632}\x{9633}\x{9634}\x{9635}\x{9636}\x{9637}\x{9638}\x{9639}' .
-          '\x{963A}\x{963B}\x{963C}\x{963D}\x{963F}\x{9640}\x{9641}\x{9642}\x{9643}' .
-          '\x{9644}\x{9645}\x{9646}\x{9647}\x{9648}\x{9649}\x{964A}\x{964B}\x{964C}' .
-          '\x{964D}\x{964E}\x{964F}\x{9650}\x{9651}\x{9652}\x{9653}\x{9654}\x{9655}' .
-          '\x{9658}\x{9659}\x{965A}\x{965B}\x{965C}\x{965D}\x{965E}\x{965F}\x{9660}' .
-          '\x{9661}\x{9662}\x{9663}\x{9664}\x{9666}\x{9667}\x{9668}\x{9669}\x{966A}' .
-          '\x{966B}\x{966C}\x{966D}\x{966E}\x{966F}\x{9670}\x{9671}\x{9672}\x{9673}' .
-          '\x{9674}\x{9675}\x{9676}\x{9677}\x{9678}\x{967C}\x{967D}\x{967E}\x{9680}' .
-          '\x{9683}\x{9684}\x{9685}\x{9686}\x{9687}\x{9688}\x{9689}\x{968A}\x{968B}' .
-          '\x{968D}\x{968E}\x{968F}\x{9690}\x{9691}\x{9692}\x{9693}\x{9694}\x{9695}' .
-          '\x{9697}\x{9698}\x{9699}\x{969B}\x{969C}\x{969E}\x{96A0}\x{96A1}\x{96A2}' .
-          '\x{96A3}\x{96A4}\x{96A5}\x{96A6}\x{96A7}\x{96A8}\x{96A9}\x{96AA}\x{96AC}' .
-          '\x{96AD}\x{96AE}\x{96B0}\x{96B1}\x{96B3}\x{96B4}\x{96B6}\x{96B7}\x{96B8}' .
-          '\x{96B9}\x{96BA}\x{96BB}\x{96BC}\x{96BD}\x{96BE}\x{96BF}\x{96C0}\x{96C1}' .
-          '\x{96C2}\x{96C3}\x{96C4}\x{96C5}\x{96C6}\x{96C7}\x{96C8}\x{96C9}\x{96CA}' .
-          '\x{96CB}\x{96CC}\x{96CD}\x{96CE}\x{96CF}\x{96D0}\x{96D1}\x{96D2}\x{96D3}' .
-          '\x{96D4}\x{96D5}\x{96D6}\x{96D7}\x{96D8}\x{96D9}\x{96DA}\x{96DB}\x{96DC}' .
-          '\x{96DD}\x{96DE}\x{96DF}\x{96E0}\x{96E1}\x{96E2}\x{96E3}\x{96E5}\x{96E8}' .
-          '\x{96E9}\x{96EA}\x{96EB}\x{96EC}\x{96ED}\x{96EE}\x{96EF}\x{96F0}\x{96F1}' .
-          '\x{96F2}\x{96F3}\x{96F4}\x{96F5}\x{96F6}\x{96F7}\x{96F8}\x{96F9}\x{96FA}' .
-          '\x{96FB}\x{96FD}\x{96FE}\x{96FF}\x{9700}\x{9701}\x{9702}\x{9703}\x{9704}' .
-          '\x{9705}\x{9706}\x{9707}\x{9708}\x{9709}\x{970A}\x{970B}\x{970C}\x{970D}' .
-          '\x{970E}\x{970F}\x{9710}\x{9711}\x{9712}\x{9713}\x{9715}\x{9716}\x{9718}' .
-          '\x{9719}\x{971C}\x{971D}\x{971E}\x{971F}\x{9720}\x{9721}\x{9722}\x{9723}' .
-          '\x{9724}\x{9725}\x{9726}\x{9727}\x{9728}\x{9729}\x{972A}\x{972B}\x{972C}' .
-          '\x{972D}\x{972E}\x{972F}\x{9730}\x{9731}\x{9732}\x{9735}\x{9736}\x{9738}' .
-          '\x{9739}\x{973A}\x{973B}\x{973C}\x{973D}\x{973E}\x{973F}\x{9742}\x{9743}' .
-          '\x{9744}\x{9745}\x{9746}\x{9747}\x{9748}\x{9749}\x{974A}\x{974B}\x{974C}' .
-          '\x{974E}\x{974F}\x{9750}\x{9751}\x{9752}\x{9753}\x{9754}\x{9755}\x{9756}' .
-          '\x{9758}\x{9759}\x{975A}\x{975B}\x{975C}\x{975D}\x{975E}\x{975F}\x{9760}' .
-          '\x{9761}\x{9762}\x{9765}\x{9766}\x{9767}\x{9768}\x{9769}\x{976A}\x{976B}' .
-          '\x{976C}\x{976D}\x{976E}\x{976F}\x{9770}\x{9772}\x{9773}\x{9774}\x{9776}' .
-          '\x{9777}\x{9778}\x{9779}\x{977A}\x{977B}\x{977C}\x{977D}\x{977E}\x{977F}' .
-          '\x{9780}\x{9781}\x{9782}\x{9783}\x{9784}\x{9785}\x{9786}\x{9788}\x{978A}' .
-          '\x{978B}\x{978C}\x{978D}\x{978E}\x{978F}\x{9790}\x{9791}\x{9792}\x{9793}' .
-          '\x{9794}\x{9795}\x{9796}\x{9797}\x{9798}\x{9799}\x{979A}\x{979C}\x{979D}' .
-          '\x{979E}\x{979F}\x{97A0}\x{97A1}\x{97A2}\x{97A3}\x{97A4}\x{97A5}\x{97A6}' .
-          '\x{97A7}\x{97A8}\x{97AA}\x{97AB}\x{97AC}\x{97AD}\x{97AE}\x{97AF}\x{97B2}' .
-          '\x{97B3}\x{97B4}\x{97B6}\x{97B7}\x{97B8}\x{97B9}\x{97BA}\x{97BB}\x{97BC}' .
-          '\x{97BD}\x{97BF}\x{97C1}\x{97C2}\x{97C3}\x{97C4}\x{97C5}\x{97C6}\x{97C7}' .
-          '\x{97C8}\x{97C9}\x{97CA}\x{97CB}\x{97CC}\x{97CD}\x{97CE}\x{97CF}\x{97D0}' .
-          '\x{97D1}\x{97D3}\x{97D4}\x{97D5}\x{97D6}\x{97D7}\x{97D8}\x{97D9}\x{97DA}' .
-          '\x{97DB}\x{97DC}\x{97DD}\x{97DE}\x{97DF}\x{97E0}\x{97E1}\x{97E2}\x{97E3}' .
-          '\x{97E4}\x{97E5}\x{97E6}\x{97E7}\x{97E8}\x{97E9}\x{97EA}\x{97EB}\x{97EC}' .
-          '\x{97ED}\x{97EE}\x{97EF}\x{97F0}\x{97F1}\x{97F2}\x{97F3}\x{97F4}\x{97F5}' .
-          '\x{97F6}\x{97F7}\x{97F8}\x{97F9}\x{97FA}\x{97FB}\x{97FD}\x{97FE}\x{97FF}' .
-          '\x{9800}\x{9801}\x{9802}\x{9803}\x{9804}\x{9805}\x{9806}\x{9807}\x{9808}' .
-          '\x{9809}\x{980A}\x{980B}\x{980C}\x{980D}\x{980E}\x{980F}\x{9810}\x{9811}' .
-          '\x{9812}\x{9813}\x{9814}\x{9815}\x{9816}\x{9817}\x{9818}\x{9819}\x{981A}' .
-          '\x{981B}\x{981C}\x{981D}\x{981E}\x{9820}\x{9821}\x{9822}\x{9823}\x{9824}' .
-          '\x{9826}\x{9827}\x{9828}\x{9829}\x{982B}\x{982D}\x{982E}\x{982F}\x{9830}' .
-          '\x{9831}\x{9832}\x{9834}\x{9835}\x{9836}\x{9837}\x{9838}\x{9839}\x{983B}' .
-          '\x{983C}\x{983D}\x{983F}\x{9840}\x{9841}\x{9843}\x{9844}\x{9845}\x{9846}' .
-          '\x{9848}\x{9849}\x{984A}\x{984C}\x{984D}\x{984E}\x{984F}\x{9850}\x{9851}' .
-          '\x{9852}\x{9853}\x{9854}\x{9855}\x{9857}\x{9858}\x{9859}\x{985A}\x{985B}' .
-          '\x{985C}\x{985D}\x{985E}\x{985F}\x{9860}\x{9861}\x{9862}\x{9863}\x{9864}' .
-          '\x{9865}\x{9867}\x{9869}\x{986A}\x{986B}\x{986C}\x{986D}\x{986E}\x{986F}' .
-          '\x{9870}\x{9871}\x{9872}\x{9873}\x{9874}\x{9875}\x{9876}\x{9877}\x{9878}' .
-          '\x{9879}\x{987A}\x{987B}\x{987C}\x{987D}\x{987E}\x{987F}\x{9880}\x{9881}' .
-          '\x{9882}\x{9883}\x{9884}\x{9885}\x{9886}\x{9887}\x{9888}\x{9889}\x{988A}' .
-          '\x{988B}\x{988C}\x{988D}\x{988E}\x{988F}\x{9890}\x{9891}\x{9892}\x{9893}' .
-          '\x{9894}\x{9895}\x{9896}\x{9897}\x{9898}\x{9899}\x{989A}\x{989B}\x{989C}' .
-          '\x{989D}\x{989E}\x{989F}\x{98A0}\x{98A1}\x{98A2}\x{98A3}\x{98A4}\x{98A5}' .
-          '\x{98A6}\x{98A7}\x{98A8}\x{98A9}\x{98AA}\x{98AB}\x{98AC}\x{98AD}\x{98AE}' .
-          '\x{98AF}\x{98B0}\x{98B1}\x{98B2}\x{98B3}\x{98B4}\x{98B5}\x{98B6}\x{98B8}' .
-          '\x{98B9}\x{98BA}\x{98BB}\x{98BC}\x{98BD}\x{98BE}\x{98BF}\x{98C0}\x{98C1}' .
-          '\x{98C2}\x{98C3}\x{98C4}\x{98C5}\x{98C6}\x{98C8}\x{98C9}\x{98CB}\x{98CC}' .
-          '\x{98CD}\x{98CE}\x{98CF}\x{98D0}\x{98D1}\x{98D2}\x{98D3}\x{98D4}\x{98D5}' .
-          '\x{98D6}\x{98D7}\x{98D8}\x{98D9}\x{98DA}\x{98DB}\x{98DC}\x{98DD}\x{98DE}' .
-          '\x{98DF}\x{98E0}\x{98E2}\x{98E3}\x{98E5}\x{98E6}\x{98E7}\x{98E8}\x{98E9}' .
-          '\x{98EA}\x{98EB}\x{98ED}\x{98EF}\x{98F0}\x{98F2}\x{98F3}\x{98F4}\x{98F5}' .
-          '\x{98F6}\x{98F7}\x{98F9}\x{98FA}\x{98FC}\x{98FD}\x{98FE}\x{98FF}\x{9900}' .
-          '\x{9901}\x{9902}\x{9903}\x{9904}\x{9905}\x{9906}\x{9907}\x{9908}\x{9909}' .
-          '\x{990A}\x{990B}\x{990C}\x{990D}\x{990E}\x{990F}\x{9910}\x{9911}\x{9912}' .
-          '\x{9913}\x{9914}\x{9915}\x{9916}\x{9917}\x{9918}\x{991A}\x{991B}\x{991C}' .
-          '\x{991D}\x{991E}\x{991F}\x{9920}\x{9921}\x{9922}\x{9923}\x{9924}\x{9925}' .
-          '\x{9926}\x{9927}\x{9928}\x{9929}\x{992A}\x{992B}\x{992C}\x{992D}\x{992E}' .
-          '\x{992F}\x{9930}\x{9931}\x{9932}\x{9933}\x{9934}\x{9935}\x{9936}\x{9937}' .
-          '\x{9938}\x{9939}\x{993A}\x{993C}\x{993D}\x{993E}\x{993F}\x{9940}\x{9941}' .
-          '\x{9942}\x{9943}\x{9945}\x{9946}\x{9947}\x{9948}\x{9949}\x{994A}\x{994B}' .
-          '\x{994C}\x{994E}\x{994F}\x{9950}\x{9951}\x{9952}\x{9953}\x{9954}\x{9955}' .
-          '\x{9956}\x{9957}\x{9958}\x{9959}\x{995B}\x{995C}\x{995E}\x{995F}\x{9960}' .
-          '\x{9961}\x{9962}\x{9963}\x{9964}\x{9965}\x{9966}\x{9967}\x{9968}\x{9969}' .
-          '\x{996A}\x{996B}\x{996C}\x{996D}\x{996E}\x{996F}\x{9970}\x{9971}\x{9972}' .
-          '\x{9973}\x{9974}\x{9975}\x{9976}\x{9977}\x{9978}\x{9979}\x{997A}\x{997B}' .
-          '\x{997C}\x{997D}\x{997E}\x{997F}\x{9980}\x{9981}\x{9982}\x{9983}\x{9984}' .
-          '\x{9985}\x{9986}\x{9987}\x{9988}\x{9989}\x{998A}\x{998B}\x{998C}\x{998D}' .
-          '\x{998E}\x{998F}\x{9990}\x{9991}\x{9992}\x{9993}\x{9994}\x{9995}\x{9996}' .
-          '\x{9997}\x{9998}\x{9999}\x{999A}\x{999B}\x{999C}\x{999D}\x{999E}\x{999F}' .
-          '\x{99A0}\x{99A1}\x{99A2}\x{99A3}\x{99A4}\x{99A5}\x{99A6}\x{99A7}\x{99A8}' .
-          '\x{99A9}\x{99AA}\x{99AB}\x{99AC}\x{99AD}\x{99AE}\x{99AF}\x{99B0}\x{99B1}' .
-          '\x{99B2}\x{99B3}\x{99B4}\x{99B5}\x{99B6}\x{99B7}\x{99B8}\x{99B9}\x{99BA}' .
-          '\x{99BB}\x{99BC}\x{99BD}\x{99BE}\x{99C0}\x{99C1}\x{99C2}\x{99C3}\x{99C4}' .
-          '\x{99C6}\x{99C7}\x{99C8}\x{99C9}\x{99CA}\x{99CB}\x{99CC}\x{99CD}\x{99CE}' .
-          '\x{99CF}\x{99D0}\x{99D1}\x{99D2}\x{99D3}\x{99D4}\x{99D5}\x{99D6}\x{99D7}' .
-          '\x{99D8}\x{99D9}\x{99DA}\x{99DB}\x{99DC}\x{99DD}\x{99DE}\x{99DF}\x{99E1}' .
-          '\x{99E2}\x{99E3}\x{99E4}\x{99E5}\x{99E7}\x{99E8}\x{99E9}\x{99EA}\x{99EC}' .
-          '\x{99ED}\x{99EE}\x{99EF}\x{99F0}\x{99F1}\x{99F2}\x{99F3}\x{99F4}\x{99F6}' .
-          '\x{99F7}\x{99F8}\x{99F9}\x{99FA}\x{99FB}\x{99FC}\x{99FD}\x{99FE}\x{99FF}' .
-          '\x{9A00}\x{9A01}\x{9A02}\x{9A03}\x{9A04}\x{9A05}\x{9A06}\x{9A07}\x{9A08}' .
-          '\x{9A09}\x{9A0A}\x{9A0B}\x{9A0C}\x{9A0D}\x{9A0E}\x{9A0F}\x{9A11}\x{9A14}' .
-          '\x{9A15}\x{9A16}\x{9A19}\x{9A1A}\x{9A1B}\x{9A1C}\x{9A1D}\x{9A1E}\x{9A1F}' .
-          '\x{9A20}\x{9A21}\x{9A22}\x{9A23}\x{9A24}\x{9A25}\x{9A26}\x{9A27}\x{9A29}' .
-          '\x{9A2A}\x{9A2B}\x{9A2C}\x{9A2D}\x{9A2E}\x{9A2F}\x{9A30}\x{9A31}\x{9A32}' .
-          '\x{9A33}\x{9A34}\x{9A35}\x{9A36}\x{9A37}\x{9A38}\x{9A39}\x{9A3A}\x{9A3C}' .
-          '\x{9A3D}\x{9A3E}\x{9A3F}\x{9A40}\x{9A41}\x{9A42}\x{9A43}\x{9A44}\x{9A45}' .
-          '\x{9A46}\x{9A47}\x{9A48}\x{9A49}\x{9A4A}\x{9A4B}\x{9A4C}\x{9A4D}\x{9A4E}' .
-          '\x{9A4F}\x{9A50}\x{9A52}\x{9A53}\x{9A54}\x{9A55}\x{9A56}\x{9A57}\x{9A59}' .
-          '\x{9A5A}\x{9A5B}\x{9A5C}\x{9A5E}\x{9A5F}\x{9A60}\x{9A61}\x{9A62}\x{9A64}' .
-          '\x{9A65}\x{9A66}\x{9A67}\x{9A68}\x{9A69}\x{9A6A}\x{9A6B}\x{9A6C}\x{9A6D}' .
-          '\x{9A6E}\x{9A6F}\x{9A70}\x{9A71}\x{9A72}\x{9A73}\x{9A74}\x{9A75}\x{9A76}' .
-          '\x{9A77}\x{9A78}\x{9A79}\x{9A7A}\x{9A7B}\x{9A7C}\x{9A7D}\x{9A7E}\x{9A7F}' .
-          '\x{9A80}\x{9A81}\x{9A82}\x{9A83}\x{9A84}\x{9A85}\x{9A86}\x{9A87}\x{9A88}' .
-          '\x{9A89}\x{9A8A}\x{9A8B}\x{9A8C}\x{9A8D}\x{9A8E}\x{9A8F}\x{9A90}\x{9A91}' .
-          '\x{9A92}\x{9A93}\x{9A94}\x{9A95}\x{9A96}\x{9A97}\x{9A98}\x{9A99}\x{9A9A}' .
-          '\x{9A9B}\x{9A9C}\x{9A9D}\x{9A9E}\x{9A9F}\x{9AA0}\x{9AA1}\x{9AA2}\x{9AA3}' .
-          '\x{9AA4}\x{9AA5}\x{9AA6}\x{9AA7}\x{9AA8}\x{9AAA}\x{9AAB}\x{9AAC}\x{9AAD}' .
-          '\x{9AAE}\x{9AAF}\x{9AB0}\x{9AB1}\x{9AB2}\x{9AB3}\x{9AB4}\x{9AB5}\x{9AB6}' .
-          '\x{9AB7}\x{9AB8}\x{9AB9}\x{9ABA}\x{9ABB}\x{9ABC}\x{9ABE}\x{9ABF}\x{9AC0}' .
-          '\x{9AC1}\x{9AC2}\x{9AC3}\x{9AC4}\x{9AC5}\x{9AC6}\x{9AC7}\x{9AC9}\x{9ACA}' .
-          '\x{9ACB}\x{9ACC}\x{9ACD}\x{9ACE}\x{9ACF}\x{9AD0}\x{9AD1}\x{9AD2}\x{9AD3}' .
-          '\x{9AD4}\x{9AD5}\x{9AD6}\x{9AD8}\x{9AD9}\x{9ADA}\x{9ADB}\x{9ADC}\x{9ADD}' .
-          '\x{9ADE}\x{9ADF}\x{9AE1}\x{9AE2}\x{9AE3}\x{9AE5}\x{9AE6}\x{9AE7}\x{9AEA}' .
-          '\x{9AEB}\x{9AEC}\x{9AED}\x{9AEE}\x{9AEF}\x{9AF1}\x{9AF2}\x{9AF3}\x{9AF4}' .
-          '\x{9AF5}\x{9AF6}\x{9AF7}\x{9AF8}\x{9AF9}\x{9AFA}\x{9AFB}\x{9AFC}\x{9AFD}' .
-          '\x{9AFE}\x{9AFF}\x{9B01}\x{9B03}\x{9B04}\x{9B05}\x{9B06}\x{9B07}\x{9B08}' .
-          '\x{9B0A}\x{9B0B}\x{9B0C}\x{9B0D}\x{9B0E}\x{9B0F}\x{9B10}\x{9B11}\x{9B12}' .
-          '\x{9B13}\x{9B15}\x{9B16}\x{9B17}\x{9B18}\x{9B19}\x{9B1A}\x{9B1C}\x{9B1D}' .
-          '\x{9B1E}\x{9B1F}\x{9B20}\x{9B21}\x{9B22}\x{9B23}\x{9B24}\x{9B25}\x{9B26}' .
-          '\x{9B27}\x{9B28}\x{9B29}\x{9B2A}\x{9B2B}\x{9B2C}\x{9B2D}\x{9B2E}\x{9B2F}' .
-          '\x{9B30}\x{9B31}\x{9B32}\x{9B33}\x{9B35}\x{9B36}\x{9B37}\x{9B38}\x{9B39}' .
-          '\x{9B3A}\x{9B3B}\x{9B3C}\x{9B3E}\x{9B3F}\x{9B41}\x{9B42}\x{9B43}\x{9B44}' .
-          '\x{9B45}\x{9B46}\x{9B47}\x{9B48}\x{9B49}\x{9B4A}\x{9B4B}\x{9B4C}\x{9B4D}' .
-          '\x{9B4E}\x{9B4F}\x{9B51}\x{9B52}\x{9B53}\x{9B54}\x{9B55}\x{9B56}\x{9B58}' .
-          '\x{9B59}\x{9B5A}\x{9B5B}\x{9B5C}\x{9B5D}\x{9B5E}\x{9B5F}\x{9B60}\x{9B61}' .
-          '\x{9B63}\x{9B64}\x{9B65}\x{9B66}\x{9B67}\x{9B68}\x{9B69}\x{9B6A}\x{9B6B}' .
-          '\x{9B6C}\x{9B6D}\x{9B6E}\x{9B6F}\x{9B70}\x{9B71}\x{9B73}\x{9B74}\x{9B75}' .
-          '\x{9B76}\x{9B77}\x{9B78}\x{9B79}\x{9B7A}\x{9B7B}\x{9B7C}\x{9B7D}\x{9B7E}' .
-          '\x{9B7F}\x{9B80}\x{9B81}\x{9B82}\x{9B83}\x{9B84}\x{9B85}\x{9B86}\x{9B87}' .
-          '\x{9B88}\x{9B8A}\x{9B8B}\x{9B8D}\x{9B8E}\x{9B8F}\x{9B90}\x{9B91}\x{9B92}' .
-          '\x{9B93}\x{9B94}\x{9B95}\x{9B96}\x{9B97}\x{9B98}\x{9B9A}\x{9B9B}\x{9B9C}' .
-          '\x{9B9D}\x{9B9E}\x{9B9F}\x{9BA0}\x{9BA1}\x{9BA2}\x{9BA3}\x{9BA4}\x{9BA5}' .
-          '\x{9BA6}\x{9BA7}\x{9BA8}\x{9BA9}\x{9BAA}\x{9BAB}\x{9BAC}\x{9BAD}\x{9BAE}' .
-          '\x{9BAF}\x{9BB0}\x{9BB1}\x{9BB2}\x{9BB3}\x{9BB4}\x{9BB5}\x{9BB6}\x{9BB7}' .
-          '\x{9BB8}\x{9BB9}\x{9BBA}\x{9BBB}\x{9BBC}\x{9BBD}\x{9BBE}\x{9BBF}\x{9BC0}' .
-          '\x{9BC1}\x{9BC3}\x{9BC4}\x{9BC5}\x{9BC6}\x{9BC7}\x{9BC8}\x{9BC9}\x{9BCA}' .
-          '\x{9BCB}\x{9BCC}\x{9BCD}\x{9BCE}\x{9BCF}\x{9BD0}\x{9BD1}\x{9BD2}\x{9BD3}' .
-          '\x{9BD4}\x{9BD5}\x{9BD6}\x{9BD7}\x{9BD8}\x{9BD9}\x{9BDA}\x{9BDB}\x{9BDC}' .
-          '\x{9BDD}\x{9BDE}\x{9BDF}\x{9BE0}\x{9BE1}\x{9BE2}\x{9BE3}\x{9BE4}\x{9BE5}' .
-          '\x{9BE6}\x{9BE7}\x{9BE8}\x{9BE9}\x{9BEA}\x{9BEB}\x{9BEC}\x{9BED}\x{9BEE}' .
-          '\x{9BEF}\x{9BF0}\x{9BF1}\x{9BF2}\x{9BF3}\x{9BF4}\x{9BF5}\x{9BF7}\x{9BF8}' .
-          '\x{9BF9}\x{9BFA}\x{9BFB}\x{9BFC}\x{9BFD}\x{9BFE}\x{9BFF}\x{9C02}\x{9C05}' .
-          '\x{9C06}\x{9C07}\x{9C08}\x{9C09}\x{9C0A}\x{9C0B}\x{9C0C}\x{9C0D}\x{9C0E}' .
-          '\x{9C0F}\x{9C10}\x{9C11}\x{9C12}\x{9C13}\x{9C14}\x{9C15}\x{9C16}\x{9C17}' .
-          '\x{9C18}\x{9C19}\x{9C1A}\x{9C1B}\x{9C1C}\x{9C1D}\x{9C1E}\x{9C1F}\x{9C20}' .
-          '\x{9C21}\x{9C22}\x{9C23}\x{9C24}\x{9C25}\x{9C26}\x{9C27}\x{9C28}\x{9C29}' .
-          '\x{9C2A}\x{9C2B}\x{9C2C}\x{9C2D}\x{9C2F}\x{9C30}\x{9C31}\x{9C32}\x{9C33}' .
-          '\x{9C34}\x{9C35}\x{9C36}\x{9C37}\x{9C38}\x{9C39}\x{9C3A}\x{9C3B}\x{9C3C}' .
-          '\x{9C3D}\x{9C3E}\x{9C3F}\x{9C40}\x{9C41}\x{9C43}\x{9C44}\x{9C45}\x{9C46}' .
-          '\x{9C47}\x{9C48}\x{9C49}\x{9C4A}\x{9C4B}\x{9C4C}\x{9C4D}\x{9C4E}\x{9C50}' .
-          '\x{9C52}\x{9C53}\x{9C54}\x{9C55}\x{9C56}\x{9C57}\x{9C58}\x{9C59}\x{9C5A}' .
-          '\x{9C5B}\x{9C5C}\x{9C5D}\x{9C5E}\x{9C5F}\x{9C60}\x{9C62}\x{9C63}\x{9C65}' .
-          '\x{9C66}\x{9C67}\x{9C68}\x{9C69}\x{9C6A}\x{9C6B}\x{9C6C}\x{9C6D}\x{9C6E}' .
-          '\x{9C6F}\x{9C70}\x{9C71}\x{9C72}\x{9C73}\x{9C74}\x{9C75}\x{9C77}\x{9C78}' .
-          '\x{9C79}\x{9C7A}\x{9C7C}\x{9C7D}\x{9C7E}\x{9C7F}\x{9C80}\x{9C81}\x{9C82}' .
-          '\x{9C83}\x{9C84}\x{9C85}\x{9C86}\x{9C87}\x{9C88}\x{9C89}\x{9C8A}\x{9C8B}' .
-          '\x{9C8C}\x{9C8D}\x{9C8E}\x{9C8F}\x{9C90}\x{9C91}\x{9C92}\x{9C93}\x{9C94}' .
-          '\x{9C95}\x{9C96}\x{9C97}\x{9C98}\x{9C99}\x{9C9A}\x{9C9B}\x{9C9C}\x{9C9D}' .
-          '\x{9C9E}\x{9C9F}\x{9CA0}\x{9CA1}\x{9CA2}\x{9CA3}\x{9CA4}\x{9CA5}\x{9CA6}' .
-          '\x{9CA7}\x{9CA8}\x{9CA9}\x{9CAA}\x{9CAB}\x{9CAC}\x{9CAD}\x{9CAE}\x{9CAF}' .
-          '\x{9CB0}\x{9CB1}\x{9CB2}\x{9CB3}\x{9CB4}\x{9CB5}\x{9CB6}\x{9CB7}\x{9CB8}' .
-          '\x{9CB9}\x{9CBA}\x{9CBB}\x{9CBC}\x{9CBD}\x{9CBE}\x{9CBF}\x{9CC0}\x{9CC1}' .
-          '\x{9CC2}\x{9CC3}\x{9CC4}\x{9CC5}\x{9CC6}\x{9CC7}\x{9CC8}\x{9CC9}\x{9CCA}' .
-          '\x{9CCB}\x{9CCC}\x{9CCD}\x{9CCE}\x{9CCF}\x{9CD0}\x{9CD1}\x{9CD2}\x{9CD3}' .
-          '\x{9CD4}\x{9CD5}\x{9CD6}\x{9CD7}\x{9CD8}\x{9CD9}\x{9CDA}\x{9CDB}\x{9CDC}' .
-          '\x{9CDD}\x{9CDE}\x{9CDF}\x{9CE0}\x{9CE1}\x{9CE2}\x{9CE3}\x{9CE4}\x{9CE5}' .
-          '\x{9CE6}\x{9CE7}\x{9CE8}\x{9CE9}\x{9CEA}\x{9CEB}\x{9CEC}\x{9CED}\x{9CEE}' .
-          '\x{9CEF}\x{9CF0}\x{9CF1}\x{9CF2}\x{9CF3}\x{9CF4}\x{9CF5}\x{9CF6}\x{9CF7}' .
-          '\x{9CF8}\x{9CF9}\x{9CFA}\x{9CFB}\x{9CFC}\x{9CFD}\x{9CFE}\x{9CFF}\x{9D00}' .
-          '\x{9D01}\x{9D02}\x{9D03}\x{9D04}\x{9D05}\x{9D06}\x{9D07}\x{9D08}\x{9D09}' .
-          '\x{9D0A}\x{9D0B}\x{9D0F}\x{9D10}\x{9D12}\x{9D13}\x{9D14}\x{9D15}\x{9D16}' .
-          '\x{9D17}\x{9D18}\x{9D19}\x{9D1A}\x{9D1B}\x{9D1C}\x{9D1D}\x{9D1E}\x{9D1F}' .
-          '\x{9D20}\x{9D21}\x{9D22}\x{9D23}\x{9D24}\x{9D25}\x{9D26}\x{9D28}\x{9D29}' .
-          '\x{9D2B}\x{9D2D}\x{9D2E}\x{9D2F}\x{9D30}\x{9D31}\x{9D32}\x{9D33}\x{9D34}' .
-          '\x{9D36}\x{9D37}\x{9D38}\x{9D39}\x{9D3A}\x{9D3B}\x{9D3D}\x{9D3E}\x{9D3F}' .
-          '\x{9D40}\x{9D41}\x{9D42}\x{9D43}\x{9D45}\x{9D46}\x{9D47}\x{9D48}\x{9D49}' .
-          '\x{9D4A}\x{9D4B}\x{9D4C}\x{9D4D}\x{9D4E}\x{9D4F}\x{9D50}\x{9D51}\x{9D52}' .
-          '\x{9D53}\x{9D54}\x{9D55}\x{9D56}\x{9D57}\x{9D58}\x{9D59}\x{9D5A}\x{9D5B}' .
-          '\x{9D5C}\x{9D5D}\x{9D5E}\x{9D5F}\x{9D60}\x{9D61}\x{9D62}\x{9D63}\x{9D64}' .
-          '\x{9D65}\x{9D66}\x{9D67}\x{9D68}\x{9D69}\x{9D6A}\x{9D6B}\x{9D6C}\x{9D6E}' .
-          '\x{9D6F}\x{9D70}\x{9D71}\x{9D72}\x{9D73}\x{9D74}\x{9D75}\x{9D76}\x{9D77}' .
-          '\x{9D78}\x{9D79}\x{9D7A}\x{9D7B}\x{9D7C}\x{9D7D}\x{9D7E}\x{9D7F}\x{9D80}' .
-          '\x{9D81}\x{9D82}\x{9D83}\x{9D84}\x{9D85}\x{9D86}\x{9D87}\x{9D88}\x{9D89}' .
-          '\x{9D8A}\x{9D8B}\x{9D8C}\x{9D8D}\x{9D8E}\x{9D90}\x{9D91}\x{9D92}\x{9D93}' .
-          '\x{9D94}\x{9D96}\x{9D97}\x{9D98}\x{9D99}\x{9D9A}\x{9D9B}\x{9D9C}\x{9D9D}' .
-          '\x{9D9E}\x{9D9F}\x{9DA0}\x{9DA1}\x{9DA2}\x{9DA3}\x{9DA4}\x{9DA5}\x{9DA6}' .
-          '\x{9DA7}\x{9DA8}\x{9DA9}\x{9DAA}\x{9DAB}\x{9DAC}\x{9DAD}\x{9DAF}\x{9DB0}' .
-          '\x{9DB1}\x{9DB2}\x{9DB3}\x{9DB4}\x{9DB5}\x{9DB6}\x{9DB7}\x{9DB8}\x{9DB9}' .
-          '\x{9DBA}\x{9DBB}\x{9DBC}\x{9DBE}\x{9DBF}\x{9DC1}\x{9DC2}\x{9DC3}\x{9DC4}' .
-          '\x{9DC5}\x{9DC7}\x{9DC8}\x{9DC9}\x{9DCA}\x{9DCB}\x{9DCC}\x{9DCD}\x{9DCE}' .
-          '\x{9DCF}\x{9DD0}\x{9DD1}\x{9DD2}\x{9DD3}\x{9DD4}\x{9DD5}\x{9DD6}\x{9DD7}' .
-          '\x{9DD8}\x{9DD9}\x{9DDA}\x{9DDB}\x{9DDC}\x{9DDD}\x{9DDE}\x{9DDF}\x{9DE0}' .
-          '\x{9DE1}\x{9DE2}\x{9DE3}\x{9DE4}\x{9DE5}\x{9DE6}\x{9DE7}\x{9DE8}\x{9DE9}' .
-          '\x{9DEB}\x{9DEC}\x{9DED}\x{9DEE}\x{9DEF}\x{9DF0}\x{9DF1}\x{9DF2}\x{9DF3}' .
-          '\x{9DF4}\x{9DF5}\x{9DF6}\x{9DF7}\x{9DF8}\x{9DF9}\x{9DFA}\x{9DFB}\x{9DFD}' .
-          '\x{9DFE}\x{9DFF}\x{9E00}\x{9E01}\x{9E02}\x{9E03}\x{9E04}\x{9E05}\x{9E06}' .
-          '\x{9E07}\x{9E08}\x{9E09}\x{9E0A}\x{9E0B}\x{9E0C}\x{9E0D}\x{9E0F}\x{9E10}' .
-          '\x{9E11}\x{9E12}\x{9E13}\x{9E14}\x{9E15}\x{9E17}\x{9E18}\x{9E19}\x{9E1A}' .
-          '\x{9E1B}\x{9E1D}\x{9E1E}\x{9E1F}\x{9E20}\x{9E21}\x{9E22}\x{9E23}\x{9E24}' .
-          '\x{9E25}\x{9E26}\x{9E27}\x{9E28}\x{9E29}\x{9E2A}\x{9E2B}\x{9E2C}\x{9E2D}' .
-          '\x{9E2E}\x{9E2F}\x{9E30}\x{9E31}\x{9E32}\x{9E33}\x{9E34}\x{9E35}\x{9E36}' .
-          '\x{9E37}\x{9E38}\x{9E39}\x{9E3A}\x{9E3B}\x{9E3C}\x{9E3D}\x{9E3E}\x{9E3F}' .
-          '\x{9E40}\x{9E41}\x{9E42}\x{9E43}\x{9E44}\x{9E45}\x{9E46}\x{9E47}\x{9E48}' .
-          '\x{9E49}\x{9E4A}\x{9E4B}\x{9E4C}\x{9E4D}\x{9E4E}\x{9E4F}\x{9E50}\x{9E51}' .
-          '\x{9E52}\x{9E53}\x{9E54}\x{9E55}\x{9E56}\x{9E57}\x{9E58}\x{9E59}\x{9E5A}' .
-          '\x{9E5B}\x{9E5C}\x{9E5D}\x{9E5E}\x{9E5F}\x{9E60}\x{9E61}\x{9E62}\x{9E63}' .
-          '\x{9E64}\x{9E65}\x{9E66}\x{9E67}\x{9E68}\x{9E69}\x{9E6A}\x{9E6B}\x{9E6C}' .
-          '\x{9E6D}\x{9E6E}\x{9E6F}\x{9E70}\x{9E71}\x{9E72}\x{9E73}\x{9E74}\x{9E75}' .
-          '\x{9E76}\x{9E77}\x{9E79}\x{9E7A}\x{9E7C}\x{9E7D}\x{9E7E}\x{9E7F}\x{9E80}' .
-          '\x{9E81}\x{9E82}\x{9E83}\x{9E84}\x{9E85}\x{9E86}\x{9E87}\x{9E88}\x{9E89}' .
-          '\x{9E8A}\x{9E8B}\x{9E8C}\x{9E8D}\x{9E8E}\x{9E91}\x{9E92}\x{9E93}\x{9E94}' .
-          '\x{9E96}\x{9E97}\x{9E99}\x{9E9A}\x{9E9B}\x{9E9C}\x{9E9D}\x{9E9F}\x{9EA0}' .
-          '\x{9EA1}\x{9EA3}\x{9EA4}\x{9EA5}\x{9EA6}\x{9EA7}\x{9EA8}\x{9EA9}\x{9EAA}' .
-          '\x{9EAD}\x{9EAE}\x{9EAF}\x{9EB0}\x{9EB2}\x{9EB3}\x{9EB4}\x{9EB5}\x{9EB6}' .
-          '\x{9EB7}\x{9EB8}\x{9EBB}\x{9EBC}\x{9EBD}\x{9EBE}\x{9EBF}\x{9EC0}\x{9EC1}' .
-          '\x{9EC2}\x{9EC3}\x{9EC4}\x{9EC5}\x{9EC6}\x{9EC7}\x{9EC8}\x{9EC9}\x{9ECA}' .
-          '\x{9ECB}\x{9ECC}\x{9ECD}\x{9ECE}\x{9ECF}\x{9ED0}\x{9ED1}\x{9ED2}\x{9ED3}' .
-          '\x{9ED4}\x{9ED5}\x{9ED6}\x{9ED7}\x{9ED8}\x{9ED9}\x{9EDA}\x{9EDB}\x{9EDC}' .
-          '\x{9EDD}\x{9EDE}\x{9EDF}\x{9EE0}\x{9EE1}\x{9EE2}\x{9EE3}\x{9EE4}\x{9EE5}' .
-          '\x{9EE6}\x{9EE7}\x{9EE8}\x{9EE9}\x{9EEA}\x{9EEB}\x{9EED}\x{9EEE}\x{9EEF}' .
-          '\x{9EF0}\x{9EF2}\x{9EF3}\x{9EF4}\x{9EF5}\x{9EF6}\x{9EF7}\x{9EF8}\x{9EF9}' .
-          '\x{9EFA}\x{9EFB}\x{9EFC}\x{9EFD}\x{9EFE}\x{9EFF}\x{9F00}\x{9F01}\x{9F02}' .
-          '\x{9F04}\x{9F05}\x{9F06}\x{9F07}\x{9F08}\x{9F09}\x{9F0A}\x{9F0B}\x{9F0C}' .
-          '\x{9F0D}\x{9F0E}\x{9F0F}\x{9F10}\x{9F12}\x{9F13}\x{9F15}\x{9F16}\x{9F17}' .
-          '\x{9F18}\x{9F19}\x{9F1A}\x{9F1B}\x{9F1C}\x{9F1D}\x{9F1E}\x{9F1F}\x{9F20}' .
-          '\x{9F22}\x{9F23}\x{9F24}\x{9F25}\x{9F27}\x{9F28}\x{9F29}\x{9F2A}\x{9F2B}' .
-          '\x{9F2C}\x{9F2D}\x{9F2E}\x{9F2F}\x{9F30}\x{9F31}\x{9F32}\x{9F33}\x{9F34}' .
-          '\x{9F35}\x{9F36}\x{9F37}\x{9F38}\x{9F39}\x{9F3A}\x{9F3B}\x{9F3C}\x{9F3D}' .
-          '\x{9F3E}\x{9F3F}\x{9F40}\x{9F41}\x{9F42}\x{9F43}\x{9F44}\x{9F46}\x{9F47}' .
-          '\x{9F48}\x{9F49}\x{9F4A}\x{9F4B}\x{9F4C}\x{9F4D}\x{9F4E}\x{9F4F}\x{9F50}' .
-          '\x{9F51}\x{9F52}\x{9F54}\x{9F55}\x{9F56}\x{9F57}\x{9F58}\x{9F59}\x{9F5A}' .
-          '\x{9F5B}\x{9F5C}\x{9F5D}\x{9F5E}\x{9F5F}\x{9F60}\x{9F61}\x{9F63}\x{9F64}' .
-          '\x{9F65}\x{9F66}\x{9F67}\x{9F68}\x{9F69}\x{9F6A}\x{9F6B}\x{9F6C}\x{9F6E}' .
-          '\x{9F6F}\x{9F70}\x{9F71}\x{9F72}\x{9F73}\x{9F74}\x{9F75}\x{9F76}\x{9F77}' .
-          '\x{9F78}\x{9F79}\x{9F7A}\x{9F7B}\x{9F7C}\x{9F7D}\x{9F7E}\x{9F7F}\x{9F80}' .
-          '\x{9F81}\x{9F82}\x{9F83}\x{9F84}\x{9F85}\x{9F86}\x{9F87}\x{9F88}\x{9F89}' .
-          '\x{9F8A}\x{9F8B}\x{9F8C}\x{9F8D}\x{9F8E}\x{9F8F}\x{9F90}\x{9F91}\x{9F92}' .
-          '\x{9F93}\x{9F94}\x{9F95}\x{9F96}\x{9F97}\x{9F98}\x{9F99}\x{9F9A}\x{9F9B}' .
-          '\x{9F9C}\x{9F9D}\x{9F9E}\x{9F9F}\x{9FA0}\x{9FA2}\x{9FA4}\x{9FA5}]{1,20}$/iu',
-);
diff --git a/civicrm/vendor/zendframework/zend-validator/src/Hostname/Cn.php b/civicrm/vendor/zendframework/zend-validator/src/Hostname/Cn.php
deleted file mode 100644
index 64f6af61aafd6d8997e99cc07fb19bf51704742a..0000000000000000000000000000000000000000
--- a/civicrm/vendor/zendframework/zend-validator/src/Hostname/Cn.php
+++ /dev/null
@@ -1,2185 +0,0 @@
-<?php
-/**
- * Zend Framework (http://framework.zend.com/)
- *
- * @link      http://github.com/zendframework/zf2 for the canonical source repository
- * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
- * @license   http://framework.zend.com/license/new-bsd New BSD License
- */
-
-namespace Zend\Validator\Hostname;
-
-/**
- * Resource file for chinese idn validation
- */
-return array(
-    1  => '/^[\x{002d}0-9a-z\x{3447}\x{3473}\x{359E}\x{360E}\x{361A}\x{3918}\x{396E}\x{39CF}\x{39D0}' .
-          '\x{39DF}\x{3A73}\x{3B4E}\x{3C6E}\x{3CE0}\x{4056}\x{415F}\x{4337}\x{43AC}' .
-          '\x{43B1}\x{43DD}\x{44D6}\x{464C}\x{4661}\x{4723}\x{4729}\x{477C}\x{478D}' .
-          '\x{4947}\x{497A}\x{497D}\x{4982}\x{4983}\x{4985}\x{4986}\x{499B}\x{499F}' .
-          '\x{49B6}\x{49B7}\x{4C77}\x{4C9F}\x{4CA0}\x{4CA1}\x{4CA2}\x{4CA3}\x{4D13}' .
-          '\x{4D14}\x{4D15}\x{4D16}\x{4D17}\x{4D18}\x{4D19}\x{4DAE}\x{4E00}\x{4E01}' .
-          '\x{4E02}\x{4E03}\x{4E04}\x{4E05}\x{4E06}\x{4E07}\x{4E08}\x{4E09}\x{4E0A}' .
-          '\x{4E0B}\x{4E0C}\x{4E0D}\x{4E0E}\x{4E0F}\x{4E10}\x{4E11}\x{4E13}\x{4E14}' .
-          '\x{4E15}\x{4E16}\x{4E17}\x{4E18}\x{4E19}\x{4E1A}\x{4E1B}\x{4E1C}\x{4E1D}' .
-          '\x{4E1E}\x{4E1F}\x{4E20}\x{4E21}\x{4E22}\x{4E23}\x{4E24}\x{4E25}\x{4E26}' .
-          '\x{4E27}\x{4E28}\x{4E2A}\x{4E2B}\x{4E2C}\x{4E2D}\x{4E2E}\x{4E2F}\x{4E30}' .
-          '\x{4E31}\x{4E32}\x{4E33}\x{4E34}\x{4E35}\x{4E36}\x{4E37}\x{4E38}\x{4E39}' .
-          '\x{4E3A}\x{4E3B}\x{4E3C}\x{4E3D}\x{4E3E}\x{4E3F}\x{4E40}\x{4E41}\x{4E42}' .
-          '\x{4E43}\x{4E44}\x{4E45}\x{4E46}\x{4E47}\x{4E48}\x{4E49}\x{4E4A}\x{4E4B}' .
-          '\x{4E4C}\x{4E4D}\x{4E4E}\x{4E4F}\x{4E50}\x{4E51}\x{4E52}\x{4E53}\x{4E54}' .
-          '\x{4E56}\x{4E57}\x{4E58}\x{4E59}\x{4E5A}\x{4E5B}\x{4E5C}\x{4E5D}\x{4E5E}' .
-          '\x{4E5F}\x{4E60}\x{4E61}\x{4E62}\x{4E63}\x{4E64}\x{4E65}\x{4E66}\x{4E67}' .
-          '\x{4E69}\x{4E6A}\x{4E6B}\x{4E6C}\x{4E6D}\x{4E6E}\x{4E6F}\x{4E70}\x{4E71}' .
-          '\x{4E72}\x{4E73}\x{4E74}\x{4E75}\x{4E76}\x{4E77}\x{4E78}\x{4E7A}\x{4E7B}' .
-          '\x{4E7C}\x{4E7D}\x{4E7E}\x{4E7F}\x{4E80}\x{4E81}\x{4E82}\x{4E83}\x{4E84}' .
-          '\x{4E85}\x{4E86}\x{4E87}\x{4E88}\x{4E89}\x{4E8B}\x{4E8C}\x{4E8D}\x{4E8E}' .
-          '\x{4E8F}\x{4E90}\x{4E91}\x{4E92}\x{4E93}\x{4E94}\x{4E95}\x{4E97}\x{4E98}' .
-          '\x{4E99}\x{4E9A}\x{4E9B}\x{4E9C}\x{4E9D}\x{4E9E}\x{4E9F}\x{4EA0}\x{4EA1}' .
-          '\x{4EA2}\x{4EA4}\x{4EA5}\x{4EA6}\x{4EA7}\x{4EA8}\x{4EA9}\x{4EAA}\x{4EAB}' .
-          '\x{4EAC}\x{4EAD}\x{4EAE}\x{4EAF}\x{4EB0}\x{4EB1}\x{4EB2}\x{4EB3}\x{4EB4}' .
-          '\x{4EB5}\x{4EB6}\x{4EB7}\x{4EB8}\x{4EB9}\x{4EBA}\x{4EBB}\x{4EBD}\x{4EBE}' .
-          '\x{4EBF}\x{4EC0}\x{4EC1}\x{4EC2}\x{4EC3}\x{4EC4}\x{4EC5}\x{4EC6}\x{4EC7}' .
-          '\x{4EC8}\x{4EC9}\x{4ECA}\x{4ECB}\x{4ECD}\x{4ECE}\x{4ECF}\x{4ED0}\x{4ED1}' .
-          '\x{4ED2}\x{4ED3}\x{4ED4}\x{4ED5}\x{4ED6}\x{4ED7}\x{4ED8}\x{4ED9}\x{4EDA}' .
-          '\x{4EDB}\x{4EDC}\x{4EDD}\x{4EDE}\x{4EDF}\x{4EE0}\x{4EE1}\x{4EE2}\x{4EE3}' .
-          '\x{4EE4}\x{4EE5}\x{4EE6}\x{4EE8}\x{4EE9}\x{4EEA}\x{4EEB}\x{4EEC}\x{4EEF}' .
-          '\x{4EF0}\x{4EF1}\x{4EF2}\x{4EF3}\x{4EF4}\x{4EF5}\x{4EF6}\x{4EF7}\x{4EFB}' .
-          '\x{4EFD}\x{4EFF}\x{4F00}\x{4F01}\x{4F02}\x{4F03}\x{4F04}\x{4F05}\x{4F06}' .
-          '\x{4F08}\x{4F09}\x{4F0A}\x{4F0B}\x{4F0C}\x{4F0D}\x{4F0E}\x{4F0F}\x{4F10}' .
-          '\x{4F11}\x{4F12}\x{4F13}\x{4F14}\x{4F15}\x{4F17}\x{4F18}\x{4F19}\x{4F1A}' .
-          '\x{4F1B}\x{4F1C}\x{4F1D}\x{4F1E}\x{4F1F}\x{4F20}\x{4F21}\x{4F22}\x{4F23}' .
-          '\x{4F24}\x{4F25}\x{4F26}\x{4F27}\x{4F29}\x{4F2A}\x{4F2B}\x{4F2C}\x{4F2D}' .
-          '\x{4F2E}\x{4F2F}\x{4F30}\x{4F32}\x{4F33}\x{4F34}\x{4F36}\x{4F38}\x{4F39}' .
-          '\x{4F3A}\x{4F3B}\x{4F3C}\x{4F3D}\x{4F3E}\x{4F3F}\x{4F41}\x{4F42}\x{4F43}' .
-          '\x{4F45}\x{4F46}\x{4F47}\x{4F48}\x{4F49}\x{4F4A}\x{4F4B}\x{4F4C}\x{4F4D}' .
-          '\x{4F4E}\x{4F4F}\x{4F50}\x{4F51}\x{4F52}\x{4F53}\x{4F54}\x{4F55}\x{4F56}' .
-          '\x{4F57}\x{4F58}\x{4F59}\x{4F5A}\x{4F5B}\x{4F5C}\x{4F5D}\x{4F5E}\x{4F5F}' .
-          '\x{4F60}\x{4F61}\x{4F62}\x{4F63}\x{4F64}\x{4F65}\x{4F66}\x{4F67}\x{4F68}' .
-          '\x{4F69}\x{4F6A}\x{4F6B}\x{4F6C}\x{4F6D}\x{4F6E}\x{4F6F}\x{4F70}\x{4F72}' .
-          '\x{4F73}\x{4F74}\x{4F75}\x{4F76}\x{4F77}\x{4F78}\x{4F79}\x{4F7A}\x{4F7B}' .
-          '\x{4F7C}\x{4F7D}\x{4F7E}\x{4F7F}\x{4F80}\x{4F81}\x{4F82}\x{4F83}\x{4F84}' .
-          '\x{4F85}\x{4F86}\x{4F87}\x{4F88}\x{4F89}\x{4F8A}\x{4F8B}\x{4F8D}\x{4F8F}' .
-          '\x{4F90}\x{4F91}\x{4F92}\x{4F93}\x{4F94}\x{4F95}\x{4F96}\x{4F97}\x{4F98}' .
-          '\x{4F99}\x{4F9A}\x{4F9B}\x{4F9C}\x{4F9D}\x{4F9E}\x{4F9F}\x{4FA0}\x{4FA1}' .
-          '\x{4FA3}\x{4FA4}\x{4FA5}\x{4FA6}\x{4FA7}\x{4FA8}\x{4FA9}\x{4FAA}\x{4FAB}' .
-          '\x{4FAC}\x{4FAE}\x{4FAF}\x{4FB0}\x{4FB1}\x{4FB2}\x{4FB3}\x{4FB4}\x{4FB5}' .
-          '\x{4FB6}\x{4FB7}\x{4FB8}\x{4FB9}\x{4FBA}\x{4FBB}\x{4FBC}\x{4FBE}\x{4FBF}' .
-          '\x{4FC0}\x{4FC1}\x{4FC2}\x{4FC3}\x{4FC4}\x{4FC5}\x{4FC7}\x{4FC9}\x{4FCA}' .
-          '\x{4FCB}\x{4FCD}\x{4FCE}\x{4FCF}\x{4FD0}\x{4FD1}\x{4FD2}\x{4FD3}\x{4FD4}' .
-          '\x{4FD5}\x{4FD6}\x{4FD7}\x{4FD8}\x{4FD9}\x{4FDA}\x{4FDB}\x{4FDC}\x{4FDD}' .
-          '\x{4FDE}\x{4FDF}\x{4FE0}\x{4FE1}\x{4FE3}\x{4FE4}\x{4FE5}\x{4FE6}\x{4FE7}' .
-          '\x{4FE8}\x{4FE9}\x{4FEA}\x{4FEB}\x{4FEC}\x{4FED}\x{4FEE}\x{4FEF}\x{4FF0}' .
-          '\x{4FF1}\x{4FF2}\x{4FF3}\x{4FF4}\x{4FF5}\x{4FF6}\x{4FF7}\x{4FF8}\x{4FF9}' .
-          '\x{4FFA}\x{4FFB}\x{4FFE}\x{4FFF}\x{5000}\x{5001}\x{5002}\x{5003}\x{5004}' .
-          '\x{5005}\x{5006}\x{5007}\x{5008}\x{5009}\x{500A}\x{500B}\x{500C}\x{500D}' .
-          '\x{500E}\x{500F}\x{5011}\x{5012}\x{5013}\x{5014}\x{5015}\x{5016}\x{5017}' .
-          '\x{5018}\x{5019}\x{501A}\x{501B}\x{501C}\x{501D}\x{501E}\x{501F}\x{5020}' .
-          '\x{5021}\x{5022}\x{5023}\x{5024}\x{5025}\x{5026}\x{5027}\x{5028}\x{5029}' .
-          '\x{502A}\x{502B}\x{502C}\x{502D}\x{502E}\x{502F}\x{5030}\x{5031}\x{5032}' .
-          '\x{5033}\x{5035}\x{5036}\x{5037}\x{5039}\x{503A}\x{503B}\x{503C}\x{503E}' .
-          '\x{503F}\x{5040}\x{5041}\x{5043}\x{5044}\x{5045}\x{5046}\x{5047}\x{5048}' .
-          '\x{5049}\x{504A}\x{504B}\x{504C}\x{504D}\x{504E}\x{504F}\x{5051}\x{5053}' .
-          '\x{5054}\x{5055}\x{5056}\x{5057}\x{5059}\x{505A}\x{505B}\x{505C}\x{505D}' .
-          '\x{505E}\x{505F}\x{5060}\x{5061}\x{5062}\x{5063}\x{5064}\x{5065}\x{5066}' .
-          '\x{5067}\x{5068}\x{5069}\x{506A}\x{506B}\x{506C}\x{506D}\x{506E}\x{506F}' .
-          '\x{5070}\x{5071}\x{5072}\x{5073}\x{5074}\x{5075}\x{5076}\x{5077}\x{5078}' .
-          '\x{5079}\x{507A}\x{507B}\x{507D}\x{507E}\x{507F}\x{5080}\x{5082}\x{5083}' .
-          '\x{5084}\x{5085}\x{5086}\x{5087}\x{5088}\x{5089}\x{508A}\x{508B}\x{508C}' .
-          '\x{508D}\x{508E}\x{508F}\x{5090}\x{5091}\x{5092}\x{5094}\x{5095}\x{5096}' .
-          '\x{5098}\x{5099}\x{509A}\x{509B}\x{509C}\x{509D}\x{509E}\x{50A2}\x{50A3}' .
-          '\x{50A4}\x{50A5}\x{50A6}\x{50A7}\x{50A8}\x{50A9}\x{50AA}\x{50AB}\x{50AC}' .
-          '\x{50AD}\x{50AE}\x{50AF}\x{50B0}\x{50B1}\x{50B2}\x{50B3}\x{50B4}\x{50B5}' .
-          '\x{50B6}\x{50B7}\x{50B8}\x{50BA}\x{50BB}\x{50BC}\x{50BD}\x{50BE}\x{50BF}' .
-          '\x{50C0}\x{50C1}\x{50C2}\x{50C4}\x{50C5}\x{50C6}\x{50C7}\x{50C8}\x{50C9}' .
-          '\x{50CA}\x{50CB}\x{50CC}\x{50CD}\x{50CE}\x{50CF}\x{50D0}\x{50D1}\x{50D2}' .
-          '\x{50D3}\x{50D4}\x{50D5}\x{50D6}\x{50D7}\x{50D9}\x{50DA}\x{50DB}\x{50DC}' .
-          '\x{50DD}\x{50DE}\x{50E0}\x{50E3}\x{50E4}\x{50E5}\x{50E6}\x{50E7}\x{50E8}' .
-          '\x{50E9}\x{50EA}\x{50EC}\x{50ED}\x{50EE}\x{50EF}\x{50F0}\x{50F1}\x{50F2}' .
-          '\x{50F3}\x{50F5}\x{50F6}\x{50F8}\x{50F9}\x{50FA}\x{50FB}\x{50FC}\x{50FD}' .
-          '\x{50FE}\x{50FF}\x{5100}\x{5101}\x{5102}\x{5103}\x{5104}\x{5105}\x{5106}' .
-          '\x{5107}\x{5108}\x{5109}\x{510A}\x{510B}\x{510C}\x{510D}\x{510E}\x{510F}' .
-          '\x{5110}\x{5111}\x{5112}\x{5113}\x{5114}\x{5115}\x{5116}\x{5117}\x{5118}' .
-          '\x{5119}\x{511A}\x{511C}\x{511D}\x{511E}\x{511F}\x{5120}\x{5121}\x{5122}' .
-          '\x{5123}\x{5124}\x{5125}\x{5126}\x{5127}\x{5129}\x{512A}\x{512C}\x{512D}' .
-          '\x{512E}\x{512F}\x{5130}\x{5131}\x{5132}\x{5133}\x{5134}\x{5135}\x{5136}' .
-          '\x{5137}\x{5138}\x{5139}\x{513A}\x{513B}\x{513C}\x{513D}\x{513E}\x{513F}' .
-          '\x{5140}\x{5141}\x{5143}\x{5144}\x{5145}\x{5146}\x{5147}\x{5148}\x{5149}' .
-          '\x{514B}\x{514C}\x{514D}\x{514E}\x{5150}\x{5151}\x{5152}\x{5154}\x{5155}' .
-          '\x{5156}\x{5157}\x{5159}\x{515A}\x{515B}\x{515C}\x{515D}\x{515E}\x{515F}' .
-          '\x{5161}\x{5162}\x{5163}\x{5165}\x{5166}\x{5167}\x{5168}\x{5169}\x{516A}' .
-          '\x{516B}\x{516C}\x{516D}\x{516E}\x{516F}\x{5170}\x{5171}\x{5173}\x{5174}' .
-          '\x{5175}\x{5176}\x{5177}\x{5178}\x{5179}\x{517A}\x{517B}\x{517C}\x{517D}' .
-          '\x{517F}\x{5180}\x{5181}\x{5182}\x{5185}\x{5186}\x{5187}\x{5188}\x{5189}' .
-          '\x{518A}\x{518B}\x{518C}\x{518D}\x{518F}\x{5190}\x{5191}\x{5192}\x{5193}' .
-          '\x{5194}\x{5195}\x{5196}\x{5197}\x{5198}\x{5199}\x{519A}\x{519B}\x{519C}' .
-          '\x{519D}\x{519E}\x{519F}\x{51A0}\x{51A2}\x{51A4}\x{51A5}\x{51A6}\x{51A7}' .
-          '\x{51A8}\x{51AA}\x{51AB}\x{51AC}\x{51AE}\x{51AF}\x{51B0}\x{51B1}\x{51B2}' .
-          '\x{51B3}\x{51B5}\x{51B6}\x{51B7}\x{51B9}\x{51BB}\x{51BC}\x{51BD}\x{51BE}' .
-          '\x{51BF}\x{51C0}\x{51C1}\x{51C3}\x{51C4}\x{51C5}\x{51C6}\x{51C7}\x{51C8}' .
-          '\x{51C9}\x{51CA}\x{51CB}\x{51CC}\x{51CD}\x{51CE}\x{51CF}\x{51D0}\x{51D1}' .
-          '\x{51D4}\x{51D5}\x{51D6}\x{51D7}\x{51D8}\x{51D9}\x{51DA}\x{51DB}\x{51DC}' .
-          '\x{51DD}\x{51DE}\x{51E0}\x{51E1}\x{51E2}\x{51E3}\x{51E4}\x{51E5}\x{51E7}' .
-          '\x{51E8}\x{51E9}\x{51EA}\x{51EB}\x{51ED}\x{51EF}\x{51F0}\x{51F1}\x{51F3}' .
-          '\x{51F4}\x{51F5}\x{51F6}\x{51F7}\x{51F8}\x{51F9}\x{51FA}\x{51FB}\x{51FC}' .
-          '\x{51FD}\x{51FE}\x{51FF}\x{5200}\x{5201}\x{5202}\x{5203}\x{5204}\x{5205}' .
-          '\x{5206}\x{5207}\x{5208}\x{5209}\x{520A}\x{520B}\x{520C}\x{520D}\x{520E}' .
-          '\x{520F}\x{5210}\x{5211}\x{5212}\x{5213}\x{5214}\x{5215}\x{5216}\x{5217}' .
-          '\x{5218}\x{5219}\x{521A}\x{521B}\x{521C}\x{521D}\x{521E}\x{521F}\x{5220}' .
-          '\x{5221}\x{5222}\x{5223}\x{5224}\x{5225}\x{5226}\x{5228}\x{5229}\x{522A}' .
-          '\x{522B}\x{522C}\x{522D}\x{522E}\x{522F}\x{5230}\x{5231}\x{5232}\x{5233}' .
-          '\x{5234}\x{5235}\x{5236}\x{5237}\x{5238}\x{5239}\x{523A}\x{523B}\x{523C}' .
-          '\x{523D}\x{523E}\x{523F}\x{5240}\x{5241}\x{5242}\x{5243}\x{5244}\x{5245}' .
-          '\x{5246}\x{5247}\x{5248}\x{5249}\x{524A}\x{524B}\x{524C}\x{524D}\x{524E}' .
-          '\x{5250}\x{5251}\x{5252}\x{5254}\x{5255}\x{5256}\x{5257}\x{5258}\x{5259}' .
-          '\x{525A}\x{525B}\x{525C}\x{525D}\x{525E}\x{525F}\x{5260}\x{5261}\x{5262}' .
-          '\x{5263}\x{5264}\x{5265}\x{5267}\x{5268}\x{5269}\x{526A}\x{526B}\x{526C}' .
-          '\x{526D}\x{526E}\x{526F}\x{5270}\x{5272}\x{5273}\x{5274}\x{5275}\x{5276}' .
-          '\x{5277}\x{5278}\x{527A}\x{527B}\x{527C}\x{527D}\x{527E}\x{527F}\x{5280}' .
-          '\x{5281}\x{5282}\x{5283}\x{5284}\x{5286}\x{5287}\x{5288}\x{5289}\x{528A}' .
-          '\x{528B}\x{528C}\x{528D}\x{528F}\x{5290}\x{5291}\x{5292}\x{5293}\x{5294}' .
-          '\x{5295}\x{5296}\x{5297}\x{5298}\x{5299}\x{529A}\x{529B}\x{529C}\x{529D}' .
-          '\x{529E}\x{529F}\x{52A0}\x{52A1}\x{52A2}\x{52A3}\x{52A5}\x{52A6}\x{52A7}' .
-          '\x{52A8}\x{52A9}\x{52AA}\x{52AB}\x{52AC}\x{52AD}\x{52AE}\x{52AF}\x{52B0}' .
-          '\x{52B1}\x{52B2}\x{52B3}\x{52B4}\x{52B5}\x{52B6}\x{52B7}\x{52B8}\x{52B9}' .
-          '\x{52BA}\x{52BB}\x{52BC}\x{52BD}\x{52BE}\x{52BF}\x{52C0}\x{52C1}\x{52C2}' .
-          '\x{52C3}\x{52C6}\x{52C7}\x{52C9}\x{52CA}\x{52CB}\x{52CD}\x{52CF}\x{52D0}' .
-          '\x{52D2}\x{52D3}\x{52D5}\x{52D6}\x{52D7}\x{52D8}\x{52D9}\x{52DA}\x{52DB}' .
-          '\x{52DC}\x{52DD}\x{52DE}\x{52DF}\x{52E0}\x{52E2}\x{52E3}\x{52E4}\x{52E6}' .
-          '\x{52E7}\x{52E8}\x{52E9}\x{52EA}\x{52EB}\x{52EC}\x{52ED}\x{52EF}\x{52F0}' .
-          '\x{52F1}\x{52F2}\x{52F3}\x{52F4}\x{52F5}\x{52F6}\x{52F7}\x{52F8}\x{52F9}' .
-          '\x{52FA}\x{52FB}\x{52FC}\x{52FD}\x{52FE}\x{52FF}\x{5300}\x{5301}\x{5302}' .
-          '\x{5305}\x{5306}\x{5307}\x{5308}\x{5309}\x{530A}\x{530B}\x{530C}\x{530D}' .
-          '\x{530E}\x{530F}\x{5310}\x{5311}\x{5312}\x{5313}\x{5314}\x{5315}\x{5316}' .
-          '\x{5317}\x{5319}\x{531A}\x{531C}\x{531D}\x{531F}\x{5320}\x{5321}\x{5322}' .
-          '\x{5323}\x{5324}\x{5325}\x{5326}\x{5328}\x{532A}\x{532B}\x{532C}\x{532D}' .
-          '\x{532E}\x{532F}\x{5330}\x{5331}\x{5333}\x{5334}\x{5337}\x{5339}\x{533A}' .
-          '\x{533B}\x{533C}\x{533D}\x{533E}\x{533F}\x{5340}\x{5341}\x{5343}\x{5344}' .
-          '\x{5345}\x{5346}\x{5347}\x{5348}\x{5349}\x{534A}\x{534B}\x{534C}\x{534D}' .
-          '\x{534E}\x{534F}\x{5350}\x{5351}\x{5352}\x{5353}\x{5354}\x{5355}\x{5356}' .
-          '\x{5357}\x{5358}\x{5359}\x{535A}\x{535C}\x{535E}\x{535F}\x{5360}\x{5361}' .
-          '\x{5362}\x{5363}\x{5364}\x{5365}\x{5366}\x{5367}\x{5369}\x{536B}\x{536C}' .
-          '\x{536E}\x{536F}\x{5370}\x{5371}\x{5372}\x{5373}\x{5374}\x{5375}\x{5376}' .
-          '\x{5377}\x{5378}\x{5379}\x{537A}\x{537B}\x{537C}\x{537D}\x{537E}\x{537F}' .
-          '\x{5381}\x{5382}\x{5383}\x{5384}\x{5385}\x{5386}\x{5387}\x{5388}\x{5389}' .
-          '\x{538A}\x{538B}\x{538C}\x{538D}\x{538E}\x{538F}\x{5390}\x{5391}\x{5392}' .
-          '\x{5393}\x{5394}\x{5395}\x{5396}\x{5397}\x{5398}\x{5399}\x{539A}\x{539B}' .
-          '\x{539C}\x{539D}\x{539E}\x{539F}\x{53A0}\x{53A2}\x{53A3}\x{53A4}\x{53A5}' .
-          '\x{53A6}\x{53A7}\x{53A8}\x{53A9}\x{53AC}\x{53AD}\x{53AE}\x{53B0}\x{53B1}' .
-          '\x{53B2}\x{53B3}\x{53B4}\x{53B5}\x{53B6}\x{53B7}\x{53B8}\x{53B9}\x{53BB}' .
-          '\x{53BC}\x{53BD}\x{53BE}\x{53BF}\x{53C0}\x{53C1}\x{53C2}\x{53C3}\x{53C4}' .
-          '\x{53C6}\x{53C7}\x{53C8}\x{53C9}\x{53CA}\x{53CB}\x{53CC}\x{53CD}\x{53CE}' .
-          '\x{53D0}\x{53D1}\x{53D2}\x{53D3}\x{53D4}\x{53D5}\x{53D6}\x{53D7}\x{53D8}' .
-          '\x{53D9}\x{53DB}\x{53DC}\x{53DF}\x{53E0}\x{53E1}\x{53E2}\x{53E3}\x{53E4}' .
-          '\x{53E5}\x{53E6}\x{53E8}\x{53E9}\x{53EA}\x{53EB}\x{53EC}\x{53ED}\x{53EE}' .
-          '\x{53EF}\x{53F0}\x{53F1}\x{53F2}\x{53F3}\x{53F4}\x{53F5}\x{53F6}\x{53F7}' .
-          '\x{53F8}\x{53F9}\x{53FA}\x{53FB}\x{53FC}\x{53FD}\x{53FE}\x{5401}\x{5402}' .
-          '\x{5403}\x{5404}\x{5405}\x{5406}\x{5407}\x{5408}\x{5409}\x{540A}\x{540B}' .
-          '\x{540C}\x{540D}\x{540E}\x{540F}\x{5410}\x{5411}\x{5412}\x{5413}\x{5414}' .
-          '\x{5415}\x{5416}\x{5417}\x{5418}\x{5419}\x{541B}\x{541C}\x{541D}\x{541E}' .
-          '\x{541F}\x{5420}\x{5421}\x{5423}\x{5424}\x{5425}\x{5426}\x{5427}\x{5428}' .
-          '\x{5429}\x{542A}\x{542B}\x{542C}\x{542D}\x{542E}\x{542F}\x{5430}\x{5431}' .
-          '\x{5432}\x{5433}\x{5434}\x{5435}\x{5436}\x{5437}\x{5438}\x{5439}\x{543A}' .
-          '\x{543B}\x{543C}\x{543D}\x{543E}\x{543F}\x{5440}\x{5441}\x{5442}\x{5443}' .
-          '\x{5444}\x{5445}\x{5446}\x{5447}\x{5448}\x{5449}\x{544A}\x{544B}\x{544D}' .
-          '\x{544E}\x{544F}\x{5450}\x{5451}\x{5452}\x{5453}\x{5454}\x{5455}\x{5456}' .
-          '\x{5457}\x{5458}\x{5459}\x{545A}\x{545B}\x{545C}\x{545E}\x{545F}\x{5460}' .
-          '\x{5461}\x{5462}\x{5463}\x{5464}\x{5465}\x{5466}\x{5467}\x{5468}\x{546A}' .
-          '\x{546B}\x{546C}\x{546D}\x{546E}\x{546F}\x{5470}\x{5471}\x{5472}\x{5473}' .
-          '\x{5474}\x{5475}\x{5476}\x{5477}\x{5478}\x{5479}\x{547A}\x{547B}\x{547C}' .
-          '\x{547D}\x{547E}\x{547F}\x{5480}\x{5481}\x{5482}\x{5483}\x{5484}\x{5485}' .
-          '\x{5486}\x{5487}\x{5488}\x{5489}\x{548B}\x{548C}\x{548D}\x{548E}\x{548F}' .
-          '\x{5490}\x{5491}\x{5492}\x{5493}\x{5494}\x{5495}\x{5496}\x{5497}\x{5498}' .
-          '\x{5499}\x{549A}\x{549B}\x{549C}\x{549D}\x{549E}\x{549F}\x{54A0}\x{54A1}' .
-          '\x{54A2}\x{54A3}\x{54A4}\x{54A5}\x{54A6}\x{54A7}\x{54A8}\x{54A9}\x{54AA}' .
-          '\x{54AB}\x{54AC}\x{54AD}\x{54AE}\x{54AF}\x{54B0}\x{54B1}\x{54B2}\x{54B3}' .
-          '\x{54B4}\x{54B6}\x{54B7}\x{54B8}\x{54B9}\x{54BA}\x{54BB}\x{54BC}\x{54BD}' .
-          '\x{54BE}\x{54BF}\x{54C0}\x{54C1}\x{54C2}\x{54C3}\x{54C4}\x{54C5}\x{54C6}' .
-          '\x{54C7}\x{54C8}\x{54C9}\x{54CA}\x{54CB}\x{54CC}\x{54CD}\x{54CE}\x{54CF}' .
-          '\x{54D0}\x{54D1}\x{54D2}\x{54D3}\x{54D4}\x{54D5}\x{54D6}\x{54D7}\x{54D8}' .
-          '\x{54D9}\x{54DA}\x{54DB}\x{54DC}\x{54DD}\x{54DE}\x{54DF}\x{54E0}\x{54E1}' .
-          '\x{54E2}\x{54E3}\x{54E4}\x{54E5}\x{54E6}\x{54E7}\x{54E8}\x{54E9}\x{54EA}' .
-          '\x{54EB}\x{54EC}\x{54ED}\x{54EE}\x{54EF}\x{54F0}\x{54F1}\x{54F2}\x{54F3}' .
-          '\x{54F4}\x{54F5}\x{54F7}\x{54F8}\x{54F9}\x{54FA}\x{54FB}\x{54FC}\x{54FD}' .
-          '\x{54FE}\x{54FF}\x{5500}\x{5501}\x{5502}\x{5503}\x{5504}\x{5505}\x{5506}' .
-          '\x{5507}\x{5508}\x{5509}\x{550A}\x{550B}\x{550C}\x{550D}\x{550E}\x{550F}' .
-          '\x{5510}\x{5511}\x{5512}\x{5513}\x{5514}\x{5516}\x{5517}\x{551A}\x{551B}' .
-          '\x{551C}\x{551D}\x{551E}\x{551F}\x{5520}\x{5521}\x{5522}\x{5523}\x{5524}' .
-          '\x{5525}\x{5526}\x{5527}\x{5528}\x{5529}\x{552A}\x{552B}\x{552C}\x{552D}' .
-          '\x{552E}\x{552F}\x{5530}\x{5531}\x{5532}\x{5533}\x{5534}\x{5535}\x{5536}' .
-          '\x{5537}\x{5538}\x{5539}\x{553A}\x{553B}\x{553C}\x{553D}\x{553E}\x{553F}' .
-          '\x{5540}\x{5541}\x{5542}\x{5543}\x{5544}\x{5545}\x{5546}\x{5548}\x{5549}' .
-          '\x{554A}\x{554B}\x{554C}\x{554D}\x{554E}\x{554F}\x{5550}\x{5551}\x{5552}' .
-          '\x{5553}\x{5554}\x{5555}\x{5556}\x{5557}\x{5558}\x{5559}\x{555A}\x{555B}' .
-          '\x{555C}\x{555D}\x{555E}\x{555F}\x{5561}\x{5562}\x{5563}\x{5564}\x{5565}' .
-          '\x{5566}\x{5567}\x{5568}\x{5569}\x{556A}\x{556B}\x{556C}\x{556D}\x{556E}' .
-          '\x{556F}\x{5570}\x{5571}\x{5572}\x{5573}\x{5574}\x{5575}\x{5576}\x{5577}' .
-          '\x{5578}\x{5579}\x{557B}\x{557C}\x{557D}\x{557E}\x{557F}\x{5580}\x{5581}' .
-          '\x{5582}\x{5583}\x{5584}\x{5585}\x{5586}\x{5587}\x{5588}\x{5589}\x{558A}' .
-          '\x{558B}\x{558C}\x{558D}\x{558E}\x{558F}\x{5590}\x{5591}\x{5592}\x{5593}' .
-          '\x{5594}\x{5595}\x{5596}\x{5597}\x{5598}\x{5599}\x{559A}\x{559B}\x{559C}' .
-          '\x{559D}\x{559E}\x{559F}\x{55A0}\x{55A1}\x{55A2}\x{55A3}\x{55A4}\x{55A5}' .
-          '\x{55A6}\x{55A7}\x{55A8}\x{55A9}\x{55AA}\x{55AB}\x{55AC}\x{55AD}\x{55AE}' .
-          '\x{55AF}\x{55B0}\x{55B1}\x{55B2}\x{55B3}\x{55B4}\x{55B5}\x{55B6}\x{55B7}' .
-          '\x{55B8}\x{55B9}\x{55BA}\x{55BB}\x{55BC}\x{55BD}\x{55BE}\x{55BF}\x{55C0}' .
-          '\x{55C1}\x{55C2}\x{55C3}\x{55C4}\x{55C5}\x{55C6}\x{55C7}\x{55C8}\x{55C9}' .
-          '\x{55CA}\x{55CB}\x{55CC}\x{55CD}\x{55CE}\x{55CF}\x{55D0}\x{55D1}\x{55D2}' .
-          '\x{55D3}\x{55D4}\x{55D5}\x{55D6}\x{55D7}\x{55D8}\x{55D9}\x{55DA}\x{55DB}' .
-          '\x{55DC}\x{55DD}\x{55DE}\x{55DF}\x{55E1}\x{55E2}\x{55E3}\x{55E4}\x{55E5}' .
-          '\x{55E6}\x{55E7}\x{55E8}\x{55E9}\x{55EA}\x{55EB}\x{55EC}\x{55ED}\x{55EE}' .
-          '\x{55EF}\x{55F0}\x{55F1}\x{55F2}\x{55F3}\x{55F4}\x{55F5}\x{55F6}\x{55F7}' .
-          '\x{55F9}\x{55FA}\x{55FB}\x{55FC}\x{55FD}\x{55FE}\x{55FF}\x{5600}\x{5601}' .
-          '\x{5602}\x{5603}\x{5604}\x{5606}\x{5607}\x{5608}\x{5609}\x{560C}\x{560D}' .
-          '\x{560E}\x{560F}\x{5610}\x{5611}\x{5612}\x{5613}\x{5614}\x{5615}\x{5616}' .
-          '\x{5617}\x{5618}\x{5619}\x{561A}\x{561B}\x{561C}\x{561D}\x{561E}\x{561F}' .
-          '\x{5621}\x{5622}\x{5623}\x{5624}\x{5625}\x{5626}\x{5627}\x{5628}\x{5629}' .
-          '\x{562A}\x{562C}\x{562D}\x{562E}\x{562F}\x{5630}\x{5631}\x{5632}\x{5633}' .
-          '\x{5634}\x{5635}\x{5636}\x{5638}\x{5639}\x{563A}\x{563B}\x{563D}\x{563E}' .
-          '\x{563F}\x{5640}\x{5641}\x{5642}\x{5643}\x{5645}\x{5646}\x{5647}\x{5648}' .
-          '\x{5649}\x{564A}\x{564C}\x{564D}\x{564E}\x{564F}\x{5650}\x{5652}\x{5653}' .
-          '\x{5654}\x{5655}\x{5657}\x{5658}\x{5659}\x{565A}\x{565B}\x{565C}\x{565D}' .
-          '\x{565E}\x{5660}\x{5662}\x{5663}\x{5664}\x{5665}\x{5666}\x{5667}\x{5668}' .
-          '\x{5669}\x{566A}\x{566B}\x{566C}\x{566D}\x{566E}\x{566F}\x{5670}\x{5671}' .
-          '\x{5672}\x{5673}\x{5674}\x{5676}\x{5677}\x{5678}\x{5679}\x{567A}\x{567B}' .
-          '\x{567C}\x{567E}\x{567F}\x{5680}\x{5681}\x{5682}\x{5683}\x{5684}\x{5685}' .
-          '\x{5686}\x{5687}\x{568A}\x{568C}\x{568D}\x{568E}\x{568F}\x{5690}\x{5691}' .
-          '\x{5692}\x{5693}\x{5694}\x{5695}\x{5697}\x{5698}\x{5699}\x{569A}\x{569B}' .
-          '\x{569C}\x{569D}\x{569F}\x{56A0}\x{56A1}\x{56A3}\x{56A4}\x{56A5}\x{56A6}' .
-          '\x{56A7}\x{56A8}\x{56A9}\x{56AA}\x{56AB}\x{56AC}\x{56AD}\x{56AE}\x{56AF}' .
-          '\x{56B0}\x{56B1}\x{56B2}\x{56B3}\x{56B4}\x{56B5}\x{56B6}\x{56B7}\x{56B8}' .
-          '\x{56B9}\x{56BB}\x{56BC}\x{56BD}\x{56BE}\x{56BF}\x{56C0}\x{56C1}\x{56C2}' .
-          '\x{56C3}\x{56C4}\x{56C5}\x{56C6}\x{56C7}\x{56C8}\x{56C9}\x{56CA}\x{56CB}' .
-          '\x{56CC}\x{56CD}\x{56CE}\x{56D0}\x{56D1}\x{56D2}\x{56D3}\x{56D4}\x{56D5}' .
-          '\x{56D6}\x{56D7}\x{56D8}\x{56DA}\x{56DB}\x{56DC}\x{56DD}\x{56DE}\x{56DF}' .
-          '\x{56E0}\x{56E1}\x{56E2}\x{56E3}\x{56E4}\x{56E5}\x{56E7}\x{56E8}\x{56E9}' .
-          '\x{56EA}\x{56EB}\x{56EC}\x{56ED}\x{56EE}\x{56EF}\x{56F0}\x{56F1}\x{56F2}' .
-          '\x{56F3}\x{56F4}\x{56F5}\x{56F7}\x{56F9}\x{56FA}\x{56FD}\x{56FE}\x{56FF}' .
-          '\x{5700}\x{5701}\x{5702}\x{5703}\x{5704}\x{5706}\x{5707}\x{5708}\x{5709}' .
-          '\x{570A}\x{570B}\x{570C}\x{570D}\x{570E}\x{570F}\x{5710}\x{5712}\x{5713}' .
-          '\x{5714}\x{5715}\x{5716}\x{5718}\x{5719}\x{571A}\x{571B}\x{571C}\x{571D}' .
-          '\x{571E}\x{571F}\x{5720}\x{5722}\x{5723}\x{5725}\x{5726}\x{5727}\x{5728}' .
-          '\x{5729}\x{572A}\x{572B}\x{572C}\x{572D}\x{572E}\x{572F}\x{5730}\x{5731}' .
-          '\x{5732}\x{5733}\x{5734}\x{5735}\x{5736}\x{5737}\x{5738}\x{5739}\x{573A}' .
-          '\x{573B}\x{573C}\x{573E}\x{573F}\x{5740}\x{5741}\x{5742}\x{5744}\x{5745}' .
-          '\x{5746}\x{5747}\x{5749}\x{574A}\x{574B}\x{574C}\x{574D}\x{574E}\x{574F}' .
-          '\x{5750}\x{5751}\x{5752}\x{5753}\x{5754}\x{5757}\x{5759}\x{575A}\x{575B}' .
-          '\x{575C}\x{575D}\x{575E}\x{575F}\x{5760}\x{5761}\x{5762}\x{5764}\x{5765}' .
-          '\x{5766}\x{5767}\x{5768}\x{5769}\x{576A}\x{576B}\x{576C}\x{576D}\x{576F}' .
-          '\x{5770}\x{5771}\x{5772}\x{5773}\x{5774}\x{5775}\x{5776}\x{5777}\x{5779}' .
-          '\x{577A}\x{577B}\x{577C}\x{577D}\x{577E}\x{577F}\x{5780}\x{5782}\x{5783}' .
-          '\x{5784}\x{5785}\x{5786}\x{5788}\x{5789}\x{578A}\x{578B}\x{578C}\x{578D}' .
-          '\x{578E}\x{578F}\x{5790}\x{5791}\x{5792}\x{5793}\x{5794}\x{5795}\x{5797}' .
-          '\x{5798}\x{5799}\x{579A}\x{579B}\x{579C}\x{579D}\x{579E}\x{579F}\x{57A0}' .
-          '\x{57A1}\x{57A2}\x{57A3}\x{57A4}\x{57A5}\x{57A6}\x{57A7}\x{57A9}\x{57AA}' .
-          '\x{57AB}\x{57AC}\x{57AD}\x{57AE}\x{57AF}\x{57B0}\x{57B1}\x{57B2}\x{57B3}' .
-          '\x{57B4}\x{57B5}\x{57B6}\x{57B7}\x{57B8}\x{57B9}\x{57BA}\x{57BB}\x{57BC}' .
-          '\x{57BD}\x{57BE}\x{57BF}\x{57C0}\x{57C1}\x{57C2}\x{57C3}\x{57C4}\x{57C5}' .
-          '\x{57C6}\x{57C7}\x{57C8}\x{57C9}\x{57CB}\x{57CC}\x{57CD}\x{57CE}\x{57CF}' .
-          '\x{57D0}\x{57D2}\x{57D3}\x{57D4}\x{57D5}\x{57D6}\x{57D8}\x{57D9}\x{57DA}' .
-          '\x{57DC}\x{57DD}\x{57DF}\x{57E0}\x{57E1}\x{57E2}\x{57E3}\x{57E4}\x{57E5}' .
-          '\x{57E6}\x{57E7}\x{57E8}\x{57E9}\x{57EA}\x{57EB}\x{57EC}\x{57ED}\x{57EE}' .
-          '\x{57EF}\x{57F0}\x{57F1}\x{57F2}\x{57F3}\x{57F4}\x{57F5}\x{57F6}\x{57F7}' .
-          '\x{57F8}\x{57F9}\x{57FA}\x{57FB}\x{57FC}\x{57FD}\x{57FE}\x{57FF}\x{5800}' .
-          '\x{5801}\x{5802}\x{5803}\x{5804}\x{5805}\x{5806}\x{5807}\x{5808}\x{5809}' .
-          '\x{580A}\x{580B}\x{580C}\x{580D}\x{580E}\x{580F}\x{5810}\x{5811}\x{5812}' .
-          '\x{5813}\x{5814}\x{5815}\x{5816}\x{5819}\x{581A}\x{581B}\x{581C}\x{581D}' .
-          '\x{581E}\x{581F}\x{5820}\x{5821}\x{5822}\x{5823}\x{5824}\x{5825}\x{5826}' .
-          '\x{5827}\x{5828}\x{5829}\x{582A}\x{582B}\x{582C}\x{582D}\x{582E}\x{582F}' .
-          '\x{5830}\x{5831}\x{5832}\x{5833}\x{5834}\x{5835}\x{5836}\x{5837}\x{5838}' .
-          '\x{5839}\x{583A}\x{583B}\x{583C}\x{583D}\x{583E}\x{583F}\x{5840}\x{5842}' .
-          '\x{5843}\x{5844}\x{5845}\x{5846}\x{5847}\x{5848}\x{5849}\x{584A}\x{584B}' .
-          '\x{584C}\x{584D}\x{584E}\x{584F}\x{5851}\x{5852}\x{5853}\x{5854}\x{5855}' .
-          '\x{5857}\x{5858}\x{5859}\x{585A}\x{585B}\x{585C}\x{585D}\x{585E}\x{585F}' .
-          '\x{5861}\x{5862}\x{5863}\x{5864}\x{5865}\x{5868}\x{5869}\x{586A}\x{586B}' .
-          '\x{586C}\x{586D}\x{586E}\x{586F}\x{5870}\x{5871}\x{5872}\x{5873}\x{5874}' .
-          '\x{5875}\x{5876}\x{5878}\x{5879}\x{587A}\x{587B}\x{587C}\x{587D}\x{587E}' .
-          '\x{587F}\x{5880}\x{5881}\x{5882}\x{5883}\x{5884}\x{5885}\x{5886}\x{5887}' .
-          '\x{5888}\x{5889}\x{588A}\x{588B}\x{588C}\x{588D}\x{588E}\x{588F}\x{5890}' .
-          '\x{5891}\x{5892}\x{5893}\x{5894}\x{5896}\x{5897}\x{5898}\x{5899}\x{589A}' .
-          '\x{589B}\x{589C}\x{589D}\x{589E}\x{589F}\x{58A0}\x{58A1}\x{58A2}\x{58A3}' .
-          '\x{58A4}\x{58A5}\x{58A6}\x{58A7}\x{58A8}\x{58A9}\x{58AB}\x{58AC}\x{58AD}' .
-          '\x{58AE}\x{58AF}\x{58B0}\x{58B1}\x{58B2}\x{58B3}\x{58B4}\x{58B7}\x{58B8}' .
-          '\x{58B9}\x{58BA}\x{58BB}\x{58BC}\x{58BD}\x{58BE}\x{58BF}\x{58C1}\x{58C2}' .
-          '\x{58C5}\x{58C6}\x{58C7}\x{58C8}\x{58C9}\x{58CA}\x{58CB}\x{58CE}\x{58CF}' .
-          '\x{58D1}\x{58D2}\x{58D3}\x{58D4}\x{58D5}\x{58D6}\x{58D7}\x{58D8}\x{58D9}' .
-          '\x{58DA}\x{58DB}\x{58DD}\x{58DE}\x{58DF}\x{58E0}\x{58E2}\x{58E3}\x{58E4}' .
-          '\x{58E5}\x{58E7}\x{58E8}\x{58E9}\x{58EA}\x{58EB}\x{58EC}\x{58ED}\x{58EE}' .
-          '\x{58EF}\x{58F0}\x{58F1}\x{58F2}\x{58F3}\x{58F4}\x{58F6}\x{58F7}\x{58F8}' .
-          '\x{58F9}\x{58FA}\x{58FB}\x{58FC}\x{58FD}\x{58FE}\x{58FF}\x{5900}\x{5902}' .
-          '\x{5903}\x{5904}\x{5906}\x{5907}\x{5909}\x{590A}\x{590B}\x{590C}\x{590D}' .
-          '\x{590E}\x{590F}\x{5910}\x{5912}\x{5914}\x{5915}\x{5916}\x{5917}\x{5918}' .
-          '\x{5919}\x{591A}\x{591B}\x{591C}\x{591D}\x{591E}\x{591F}\x{5920}\x{5921}' .
-          '\x{5922}\x{5924}\x{5925}\x{5926}\x{5927}\x{5928}\x{5929}\x{592A}\x{592B}' .
-          '\x{592C}\x{592D}\x{592E}\x{592F}\x{5930}\x{5931}\x{5932}\x{5934}\x{5935}' .
-          '\x{5937}\x{5938}\x{5939}\x{593A}\x{593B}\x{593C}\x{593D}\x{593E}\x{593F}' .
-          '\x{5940}\x{5941}\x{5942}\x{5943}\x{5944}\x{5945}\x{5946}\x{5947}\x{5948}' .
-          '\x{5949}\x{594A}\x{594B}\x{594C}\x{594D}\x{594E}\x{594F}\x{5950}\x{5951}' .
-          '\x{5952}\x{5953}\x{5954}\x{5955}\x{5956}\x{5957}\x{5958}\x{595A}\x{595C}' .
-          '\x{595D}\x{595E}\x{595F}\x{5960}\x{5961}\x{5962}\x{5963}\x{5964}\x{5965}' .
-          '\x{5966}\x{5967}\x{5968}\x{5969}\x{596A}\x{596B}\x{596C}\x{596D}\x{596E}' .
-          '\x{596F}\x{5970}\x{5971}\x{5972}\x{5973}\x{5974}\x{5975}\x{5976}\x{5977}' .
-          '\x{5978}\x{5979}\x{597A}\x{597B}\x{597C}\x{597D}\x{597E}\x{597F}\x{5980}' .
-          '\x{5981}\x{5982}\x{5983}\x{5984}\x{5985}\x{5986}\x{5987}\x{5988}\x{5989}' .
-          '\x{598A}\x{598B}\x{598C}\x{598D}\x{598E}\x{598F}\x{5990}\x{5991}\x{5992}' .
-          '\x{5993}\x{5994}\x{5995}\x{5996}\x{5997}\x{5998}\x{5999}\x{599A}\x{599C}' .
-          '\x{599D}\x{599E}\x{599F}\x{59A0}\x{59A1}\x{59A2}\x{59A3}\x{59A4}\x{59A5}' .
-          '\x{59A6}\x{59A7}\x{59A8}\x{59A9}\x{59AA}\x{59AB}\x{59AC}\x{59AD}\x{59AE}' .
-          '\x{59AF}\x{59B0}\x{59B1}\x{59B2}\x{59B3}\x{59B4}\x{59B5}\x{59B6}\x{59B8}' .
-          '\x{59B9}\x{59BA}\x{59BB}\x{59BC}\x{59BD}\x{59BE}\x{59BF}\x{59C0}\x{59C1}' .
-          '\x{59C2}\x{59C3}\x{59C4}\x{59C5}\x{59C6}\x{59C7}\x{59C8}\x{59C9}\x{59CA}' .
-          '\x{59CB}\x{59CC}\x{59CD}\x{59CE}\x{59CF}\x{59D0}\x{59D1}\x{59D2}\x{59D3}' .
-          '\x{59D4}\x{59D5}\x{59D6}\x{59D7}\x{59D8}\x{59D9}\x{59DA}\x{59DB}\x{59DC}' .
-          '\x{59DD}\x{59DE}\x{59DF}\x{59E0}\x{59E1}\x{59E2}\x{59E3}\x{59E4}\x{59E5}' .
-          '\x{59E6}\x{59E8}\x{59E9}\x{59EA}\x{59EB}\x{59EC}\x{59ED}\x{59EE}\x{59EF}' .
-          '\x{59F0}\x{59F1}\x{59F2}\x{59F3}\x{59F4}\x{59F5}\x{59F6}\x{59F7}\x{59F8}' .
-          '\x{59F9}\x{59FA}\x{59FB}\x{59FC}\x{59FD}\x{59FE}\x{59FF}\x{5A00}\x{5A01}' .
-          '\x{5A02}\x{5A03}\x{5A04}\x{5A05}\x{5A06}\x{5A07}\x{5A08}\x{5A09}\x{5A0A}' .
-          '\x{5A0B}\x{5A0C}\x{5A0D}\x{5A0E}\x{5A0F}\x{5A10}\x{5A11}\x{5A12}\x{5A13}' .
-          '\x{5A14}\x{5A15}\x{5A16}\x{5A17}\x{5A18}\x{5A19}\x{5A1A}\x{5A1B}\x{5A1C}' .
-          '\x{5A1D}\x{5A1E}\x{5A1F}\x{5A20}\x{5A21}\x{5A22}\x{5A23}\x{5A25}\x{5A27}' .
-          '\x{5A28}\x{5A29}\x{5A2A}\x{5A2B}\x{5A2D}\x{5A2E}\x{5A2F}\x{5A31}\x{5A32}' .
-          '\x{5A33}\x{5A34}\x{5A35}\x{5A36}\x{5A37}\x{5A38}\x{5A39}\x{5A3A}\x{5A3B}' .
-          '\x{5A3C}\x{5A3D}\x{5A3E}\x{5A3F}\x{5A40}\x{5A41}\x{5A42}\x{5A43}\x{5A44}' .
-          '\x{5A45}\x{5A46}\x{5A47}\x{5A48}\x{5A49}\x{5A4A}\x{5A4B}\x{5A4C}\x{5A4D}' .
-          '\x{5A4E}\x{5A4F}\x{5A50}\x{5A51}\x{5A52}\x{5A53}\x{5A55}\x{5A56}\x{5A57}' .
-          '\x{5A58}\x{5A5A}\x{5A5B}\x{5A5C}\x{5A5D}\x{5A5E}\x{5A5F}\x{5A60}\x{5A61}' .
-          '\x{5A62}\x{5A63}\x{5A64}\x{5A65}\x{5A66}\x{5A67}\x{5A68}\x{5A69}\x{5A6A}' .
-          '\x{5A6B}\x{5A6C}\x{5A6D}\x{5A6E}\x{5A70}\x{5A72}\x{5A73}\x{5A74}\x{5A75}' .
-          '\x{5A76}\x{5A77}\x{5A78}\x{5A79}\x{5A7A}\x{5A7B}\x{5A7C}\x{5A7D}\x{5A7E}' .
-          '\x{5A7F}\x{5A80}\x{5A81}\x{5A82}\x{5A83}\x{5A84}\x{5A85}\x{5A86}\x{5A88}' .
-          '\x{5A89}\x{5A8A}\x{5A8B}\x{5A8C}\x{5A8E}\x{5A8F}\x{5A90}\x{5A91}\x{5A92}' .
-          '\x{5A93}\x{5A94}\x{5A95}\x{5A96}\x{5A97}\x{5A98}\x{5A99}\x{5A9A}\x{5A9B}' .
-          '\x{5A9C}\x{5A9D}\x{5A9E}\x{5A9F}\x{5AA0}\x{5AA1}\x{5AA2}\x{5AA3}\x{5AA4}' .
-          '\x{5AA5}\x{5AA6}\x{5AA7}\x{5AA8}\x{5AA9}\x{5AAA}\x{5AAC}\x{5AAD}\x{5AAE}' .
-          '\x{5AAF}\x{5AB0}\x{5AB1}\x{5AB2}\x{5AB3}\x{5AB4}\x{5AB5}\x{5AB6}\x{5AB7}' .
-          '\x{5AB8}\x{5AB9}\x{5ABA}\x{5ABB}\x{5ABC}\x{5ABD}\x{5ABE}\x{5ABF}\x{5AC0}' .
-          '\x{5AC1}\x{5AC2}\x{5AC3}\x{5AC4}\x{5AC5}\x{5AC6}\x{5AC7}\x{5AC8}\x{5AC9}' .
-          '\x{5ACA}\x{5ACB}\x{5ACC}\x{5ACD}\x{5ACE}\x{5ACF}\x{5AD1}\x{5AD2}\x{5AD4}' .
-          '\x{5AD5}\x{5AD6}\x{5AD7}\x{5AD8}\x{5AD9}\x{5ADA}\x{5ADB}\x{5ADC}\x{5ADD}' .
-          '\x{5ADE}\x{5ADF}\x{5AE0}\x{5AE1}\x{5AE2}\x{5AE3}\x{5AE4}\x{5AE5}\x{5AE6}' .
-          '\x{5AE7}\x{5AE8}\x{5AE9}\x{5AEA}\x{5AEB}\x{5AEC}\x{5AED}\x{5AEE}\x{5AF1}' .
-          '\x{5AF2}\x{5AF3}\x{5AF4}\x{5AF5}\x{5AF6}\x{5AF7}\x{5AF8}\x{5AF9}\x{5AFA}' .
-          '\x{5AFB}\x{5AFC}\x{5AFD}\x{5AFE}\x{5AFF}\x{5B00}\x{5B01}\x{5B02}\x{5B03}' .
-          '\x{5B04}\x{5B05}\x{5B06}\x{5B07}\x{5B08}\x{5B09}\x{5B0B}\x{5B0C}\x{5B0E}' .
-          '\x{5B0F}\x{5B10}\x{5B11}\x{5B12}\x{5B13}\x{5B14}\x{5B15}\x{5B16}\x{5B17}' .
-          '\x{5B18}\x{5B19}\x{5B1A}\x{5B1B}\x{5B1C}\x{5B1D}\x{5B1E}\x{5B1F}\x{5B20}' .
-          '\x{5B21}\x{5B22}\x{5B23}\x{5B24}\x{5B25}\x{5B26}\x{5B27}\x{5B28}\x{5B29}' .
-          '\x{5B2A}\x{5B2B}\x{5B2C}\x{5B2D}\x{5B2E}\x{5B2F}\x{5B30}\x{5B31}\x{5B32}' .
-          '\x{5B33}\x{5B34}\x{5B35}\x{5B36}\x{5B37}\x{5B38}\x{5B3A}\x{5B3B}\x{5B3C}' .
-          '\x{5B3D}\x{5B3E}\x{5B3F}\x{5B40}\x{5B41}\x{5B42}\x{5B43}\x{5B44}\x{5B45}' .
-          '\x{5B47}\x{5B48}\x{5B49}\x{5B4A}\x{5B4B}\x{5B4C}\x{5B4D}\x{5B4E}\x{5B50}' .
-          '\x{5B51}\x{5B53}\x{5B54}\x{5B55}\x{5B56}\x{5B57}\x{5B58}\x{5B59}\x{5B5A}' .
-          '\x{5B5B}\x{5B5C}\x{5B5D}\x{5B5E}\x{5B5F}\x{5B62}\x{5B63}\x{5B64}\x{5B65}' .
-          '\x{5B66}\x{5B67}\x{5B68}\x{5B69}\x{5B6A}\x{5B6B}\x{5B6C}\x{5B6D}\x{5B6E}' .
-          '\x{5B70}\x{5B71}\x{5B72}\x{5B73}\x{5B74}\x{5B75}\x{5B76}\x{5B77}\x{5B78}' .
-          '\x{5B7A}\x{5B7B}\x{5B7C}\x{5B7D}\x{5B7F}\x{5B80}\x{5B81}\x{5B82}\x{5B83}' .
-          '\x{5B84}\x{5B85}\x{5B87}\x{5B88}\x{5B89}\x{5B8A}\x{5B8B}\x{5B8C}\x{5B8D}' .
-          '\x{5B8E}\x{5B8F}\x{5B91}\x{5B92}\x{5B93}\x{5B94}\x{5B95}\x{5B96}\x{5B97}' .
-          '\x{5B98}\x{5B99}\x{5B9A}\x{5B9B}\x{5B9C}\x{5B9D}\x{5B9E}\x{5B9F}\x{5BA0}' .
-          '\x{5BA1}\x{5BA2}\x{5BA3}\x{5BA4}\x{5BA5}\x{5BA6}\x{5BA7}\x{5BA8}\x{5BAA}' .
-          '\x{5BAB}\x{5BAC}\x{5BAD}\x{5BAE}\x{5BAF}\x{5BB0}\x{5BB1}\x{5BB3}\x{5BB4}' .
-          '\x{5BB5}\x{5BB6}\x{5BB8}\x{5BB9}\x{5BBA}\x{5BBB}\x{5BBD}\x{5BBE}\x{5BBF}' .
-          '\x{5BC0}\x{5BC1}\x{5BC2}\x{5BC3}\x{5BC4}\x{5BC5}\x{5BC6}\x{5BC7}\x{5BCA}' .
-          '\x{5BCB}\x{5BCC}\x{5BCD}\x{5BCE}\x{5BCF}\x{5BD0}\x{5BD1}\x{5BD2}\x{5BD3}' .
-          '\x{5BD4}\x{5BD5}\x{5BD6}\x{5BD8}\x{5BD9}\x{5BDB}\x{5BDC}\x{5BDD}\x{5BDE}' .
-          '\x{5BDF}\x{5BE0}\x{5BE1}\x{5BE2}\x{5BE3}\x{5BE4}\x{5BE5}\x{5BE6}\x{5BE7}' .
-          '\x{5BE8}\x{5BE9}\x{5BEA}\x{5BEB}\x{5BEC}\x{5BED}\x{5BEE}\x{5BEF}\x{5BF0}' .
-          '\x{5BF1}\x{5BF2}\x{5BF3}\x{5BF4}\x{5BF5}\x{5BF6}\x{5BF7}\x{5BF8}\x{5BF9}' .
-          '\x{5BFA}\x{5BFB}\x{5BFC}\x{5BFD}\x{5BFF}\x{5C01}\x{5C03}\x{5C04}\x{5C05}' .
-          '\x{5C06}\x{5C07}\x{5C08}\x{5C09}\x{5C0A}\x{5C0B}\x{5C0C}\x{5C0D}\x{5C0E}' .
-          '\x{5C0F}\x{5C10}\x{5C11}\x{5C12}\x{5C13}\x{5C14}\x{5C15}\x{5C16}\x{5C17}' .
-          '\x{5C18}\x{5C19}\x{5C1A}\x{5C1C}\x{5C1D}\x{5C1E}\x{5C1F}\x{5C20}\x{5C21}' .
-          '\x{5C22}\x{5C24}\x{5C25}\x{5C27}\x{5C28}\x{5C2A}\x{5C2B}\x{5C2C}\x{5C2D}' .
-          '\x{5C2E}\x{5C2F}\x{5C30}\x{5C31}\x{5C32}\x{5C33}\x{5C34}\x{5C35}\x{5C37}' .
-          '\x{5C38}\x{5C39}\x{5C3A}\x{5C3B}\x{5C3C}\x{5C3D}\x{5C3E}\x{5C3F}\x{5C40}' .
-          '\x{5C41}\x{5C42}\x{5C43}\x{5C44}\x{5C45}\x{5C46}\x{5C47}\x{5C48}\x{5C49}' .
-          '\x{5C4A}\x{5C4B}\x{5C4C}\x{5C4D}\x{5C4E}\x{5C4F}\x{5C50}\x{5C51}\x{5C52}' .
-          '\x{5C53}\x{5C54}\x{5C55}\x{5C56}\x{5C57}\x{5C58}\x{5C59}\x{5C5B}\x{5C5C}' .
-          '\x{5C5D}\x{5C5E}\x{5C5F}\x{5C60}\x{5C61}\x{5C62}\x{5C63}\x{5C64}\x{5C65}' .
-          '\x{5C66}\x{5C67}\x{5C68}\x{5C69}\x{5C6A}\x{5C6B}\x{5C6C}\x{5C6D}\x{5C6E}' .
-          '\x{5C6F}\x{5C70}\x{5C71}\x{5C72}\x{5C73}\x{5C74}\x{5C75}\x{5C76}\x{5C77}' .
-          '\x{5C78}\x{5C79}\x{5C7A}\x{5C7B}\x{5C7C}\x{5C7D}\x{5C7E}\x{5C7F}\x{5C80}' .
-          '\x{5C81}\x{5C82}\x{5C83}\x{5C84}\x{5C86}\x{5C87}\x{5C88}\x{5C89}\x{5C8A}' .
-          '\x{5C8B}\x{5C8C}\x{5C8D}\x{5C8E}\x{5C8F}\x{5C90}\x{5C91}\x{5C92}\x{5C93}' .
-          '\x{5C94}\x{5C95}\x{5C96}\x{5C97}\x{5C98}\x{5C99}\x{5C9A}\x{5C9B}\x{5C9C}' .
-          '\x{5C9D}\x{5C9E}\x{5C9F}\x{5CA0}\x{5CA1}\x{5CA2}\x{5CA3}\x{5CA4}\x{5CA5}' .
-          '\x{5CA6}\x{5CA7}\x{5CA8}\x{5CA9}\x{5CAA}\x{5CAB}\x{5CAC}\x{5CAD}\x{5CAE}' .
-          '\x{5CAF}\x{5CB0}\x{5CB1}\x{5CB2}\x{5CB3}\x{5CB5}\x{5CB6}\x{5CB7}\x{5CB8}' .
-          '\x{5CBA}\x{5CBB}\x{5CBC}\x{5CBD}\x{5CBE}\x{5CBF}\x{5CC1}\x{5CC2}\x{5CC3}' .
-          '\x{5CC4}\x{5CC5}\x{5CC6}\x{5CC7}\x{5CC8}\x{5CC9}\x{5CCA}\x{5CCB}\x{5CCC}' .
-          '\x{5CCD}\x{5CCE}\x{5CCF}\x{5CD0}\x{5CD1}\x{5CD2}\x{5CD3}\x{5CD4}\x{5CD6}' .
-          '\x{5CD7}\x{5CD8}\x{5CD9}\x{5CDA}\x{5CDB}\x{5CDC}\x{5CDE}\x{5CDF}\x{5CE0}' .
-          '\x{5CE1}\x{5CE2}\x{5CE3}\x{5CE4}\x{5CE5}\x{5CE6}\x{5CE7}\x{5CE8}\x{5CE9}' .
-          '\x{5CEA}\x{5CEB}\x{5CEC}\x{5CED}\x{5CEE}\x{5CEF}\x{5CF0}\x{5CF1}\x{5CF2}' .
-          '\x{5CF3}\x{5CF4}\x{5CF6}\x{5CF7}\x{5CF8}\x{5CF9}\x{5CFA}\x{5CFB}\x{5CFC}' .
-          '\x{5CFD}\x{5CFE}\x{5CFF}\x{5D00}\x{5D01}\x{5D02}\x{5D03}\x{5D04}\x{5D05}' .
-          '\x{5D06}\x{5D07}\x{5D08}\x{5D09}\x{5D0A}\x{5D0B}\x{5D0C}\x{5D0D}\x{5D0E}' .
-          '\x{5D0F}\x{5D10}\x{5D11}\x{5D12}\x{5D13}\x{5D14}\x{5D15}\x{5D16}\x{5D17}' .
-          '\x{5D18}\x{5D19}\x{5D1A}\x{5D1B}\x{5D1C}\x{5D1D}\x{5D1E}\x{5D1F}\x{5D20}' .
-          '\x{5D21}\x{5D22}\x{5D23}\x{5D24}\x{5D25}\x{5D26}\x{5D27}\x{5D28}\x{5D29}' .
-          '\x{5D2A}\x{5D2C}\x{5D2D}\x{5D2E}\x{5D30}\x{5D31}\x{5D32}\x{5D33}\x{5D34}' .
-          '\x{5D35}\x{5D36}\x{5D37}\x{5D38}\x{5D39}\x{5D3A}\x{5D3C}\x{5D3D}\x{5D3E}' .
-          '\x{5D3F}\x{5D40}\x{5D41}\x{5D42}\x{5D43}\x{5D44}\x{5D45}\x{5D46}\x{5D47}' .
-          '\x{5D48}\x{5D49}\x{5D4A}\x{5D4B}\x{5D4C}\x{5D4D}\x{5D4E}\x{5D4F}\x{5D50}' .
-          '\x{5D51}\x{5D52}\x{5D54}\x{5D55}\x{5D56}\x{5D58}\x{5D59}\x{5D5A}\x{5D5B}' .
-          '\x{5D5D}\x{5D5E}\x{5D5F}\x{5D61}\x{5D62}\x{5D63}\x{5D64}\x{5D65}\x{5D66}' .
-          '\x{5D67}\x{5D68}\x{5D69}\x{5D6A}\x{5D6B}\x{5D6C}\x{5D6D}\x{5D6E}\x{5D6F}' .
-          '\x{5D70}\x{5D71}\x{5D72}\x{5D73}\x{5D74}\x{5D75}\x{5D76}\x{5D77}\x{5D78}' .
-          '\x{5D79}\x{5D7A}\x{5D7B}\x{5D7C}\x{5D7D}\x{5D7E}\x{5D7F}\x{5D80}\x{5D81}' .
-          '\x{5D82}\x{5D84}\x{5D85}\x{5D86}\x{5D87}\x{5D88}\x{5D89}\x{5D8A}\x{5D8B}' .
-          '\x{5D8C}\x{5D8D}\x{5D8E}\x{5D8F}\x{5D90}\x{5D91}\x{5D92}\x{5D93}\x{5D94}' .
-          '\x{5D95}\x{5D97}\x{5D98}\x{5D99}\x{5D9A}\x{5D9B}\x{5D9C}\x{5D9D}\x{5D9E}' .
-          '\x{5D9F}\x{5DA0}\x{5DA1}\x{5DA2}\x{5DA5}\x{5DA6}\x{5DA7}\x{5DA8}\x{5DA9}' .
-          '\x{5DAA}\x{5DAC}\x{5DAD}\x{5DAE}\x{5DAF}\x{5DB0}\x{5DB1}\x{5DB2}\x{5DB4}' .
-          '\x{5DB5}\x{5DB6}\x{5DB7}\x{5DB8}\x{5DBA}\x{5DBB}\x{5DBC}\x{5DBD}\x{5DBE}' .
-          '\x{5DBF}\x{5DC0}\x{5DC1}\x{5DC2}\x{5DC3}\x{5DC5}\x{5DC6}\x{5DC7}\x{5DC8}' .
-          '\x{5DC9}\x{5DCA}\x{5DCB}\x{5DCC}\x{5DCD}\x{5DCE}\x{5DCF}\x{5DD0}\x{5DD1}' .
-          '\x{5DD2}\x{5DD3}\x{5DD4}\x{5DD5}\x{5DD6}\x{5DD8}\x{5DD9}\x{5DDB}\x{5DDD}' .
-          '\x{5DDE}\x{5DDF}\x{5DE0}\x{5DE1}\x{5DE2}\x{5DE3}\x{5DE4}\x{5DE5}\x{5DE6}' .
-          '\x{5DE7}\x{5DE8}\x{5DE9}\x{5DEA}\x{5DEB}\x{5DEC}\x{5DED}\x{5DEE}\x{5DEF}' .
-          '\x{5DF0}\x{5DF1}\x{5DF2}\x{5DF3}\x{5DF4}\x{5DF5}\x{5DF7}\x{5DF8}\x{5DF9}' .
-          '\x{5DFA}\x{5DFB}\x{5DFC}\x{5DFD}\x{5DFE}\x{5DFF}\x{5E00}\x{5E01}\x{5E02}' .
-          '\x{5E03}\x{5E04}\x{5E05}\x{5E06}\x{5E07}\x{5E08}\x{5E09}\x{5E0A}\x{5E0B}' .
-          '\x{5E0C}\x{5E0D}\x{5E0E}\x{5E0F}\x{5E10}\x{5E11}\x{5E13}\x{5E14}\x{5E15}' .
-          '\x{5E16}\x{5E17}\x{5E18}\x{5E19}\x{5E1A}\x{5E1B}\x{5E1C}\x{5E1D}\x{5E1E}' .
-          '\x{5E1F}\x{5E20}\x{5E21}\x{5E22}\x{5E23}\x{5E24}\x{5E25}\x{5E26}\x{5E27}' .
-          '\x{5E28}\x{5E29}\x{5E2A}\x{5E2B}\x{5E2C}\x{5E2D}\x{5E2E}\x{5E2F}\x{5E30}' .
-          '\x{5E31}\x{5E32}\x{5E33}\x{5E34}\x{5E35}\x{5E36}\x{5E37}\x{5E38}\x{5E39}' .
-          '\x{5E3A}\x{5E3B}\x{5E3C}\x{5E3D}\x{5E3E}\x{5E40}\x{5E41}\x{5E42}\x{5E43}' .
-          '\x{5E44}\x{5E45}\x{5E46}\x{5E47}\x{5E49}\x{5E4A}\x{5E4B}\x{5E4C}\x{5E4D}' .
-          '\x{5E4E}\x{5E4F}\x{5E50}\x{5E52}\x{5E53}\x{5E54}\x{5E55}\x{5E56}\x{5E57}' .
-          '\x{5E58}\x{5E59}\x{5E5A}\x{5E5B}\x{5E5C}\x{5E5D}\x{5E5E}\x{5E5F}\x{5E60}' .
-          '\x{5E61}\x{5E62}\x{5E63}\x{5E64}\x{5E65}\x{5E66}\x{5E67}\x{5E68}\x{5E69}' .
-          '\x{5E6A}\x{5E6B}\x{5E6C}\x{5E6D}\x{5E6E}\x{5E6F}\x{5E70}\x{5E71}\x{5E72}' .
-          '\x{5E73}\x{5E74}\x{5E75}\x{5E76}\x{5E77}\x{5E78}\x{5E79}\x{5E7A}\x{5E7B}' .
-          '\x{5E7C}\x{5E7D}\x{5E7E}\x{5E7F}\x{5E80}\x{5E81}\x{5E82}\x{5E83}\x{5E84}' .
-          '\x{5E85}\x{5E86}\x{5E87}\x{5E88}\x{5E89}\x{5E8A}\x{5E8B}\x{5E8C}\x{5E8D}' .
-          '\x{5E8E}\x{5E8F}\x{5E90}\x{5E91}\x{5E93}\x{5E94}\x{5E95}\x{5E96}\x{5E97}' .
-          '\x{5E98}\x{5E99}\x{5E9A}\x{5E9B}\x{5E9C}\x{5E9D}\x{5E9E}\x{5E9F}\x{5EA0}' .
-          '\x{5EA1}\x{5EA2}\x{5EA3}\x{5EA4}\x{5EA5}\x{5EA6}\x{5EA7}\x{5EA8}\x{5EA9}' .
-          '\x{5EAA}\x{5EAB}\x{5EAC}\x{5EAD}\x{5EAE}\x{5EAF}\x{5EB0}\x{5EB1}\x{5EB2}' .
-          '\x{5EB3}\x{5EB4}\x{5EB5}\x{5EB6}\x{5EB7}\x{5EB8}\x{5EB9}\x{5EBB}\x{5EBC}' .
-          '\x{5EBD}\x{5EBE}\x{5EBF}\x{5EC1}\x{5EC2}\x{5EC3}\x{5EC4}\x{5EC5}\x{5EC6}' .
-          '\x{5EC7}\x{5EC8}\x{5EC9}\x{5ECA}\x{5ECB}\x{5ECC}\x{5ECD}\x{5ECE}\x{5ECF}' .
-          '\x{5ED0}\x{5ED1}\x{5ED2}\x{5ED3}\x{5ED4}\x{5ED5}\x{5ED6}\x{5ED7}\x{5ED8}' .
-          '\x{5ED9}\x{5EDA}\x{5EDB}\x{5EDC}\x{5EDD}\x{5EDE}\x{5EDF}\x{5EE0}\x{5EE1}' .
-          '\x{5EE2}\x{5EE3}\x{5EE4}\x{5EE5}\x{5EE6}\x{5EE7}\x{5EE8}\x{5EE9}\x{5EEA}' .
-          '\x{5EEC}\x{5EED}\x{5EEE}\x{5EEF}\x{5EF0}\x{5EF1}\x{5EF2}\x{5EF3}\x{5EF4}' .
-          '\x{5EF5}\x{5EF6}\x{5EF7}\x{5EF8}\x{5EFA}\x{5EFB}\x{5EFC}\x{5EFD}\x{5EFE}' .
-          '\x{5EFF}\x{5F00}\x{5F01}\x{5F02}\x{5F03}\x{5F04}\x{5F05}\x{5F06}\x{5F07}' .
-          '\x{5F08}\x{5F0A}\x{5F0B}\x{5F0C}\x{5F0D}\x{5F0F}\x{5F11}\x{5F12}\x{5F13}' .
-          '\x{5F14}\x{5F15}\x{5F16}\x{5F17}\x{5F18}\x{5F19}\x{5F1A}\x{5F1B}\x{5F1C}' .
-          '\x{5F1D}\x{5F1E}\x{5F1F}\x{5F20}\x{5F21}\x{5F22}\x{5F23}\x{5F24}\x{5F25}' .
-          '\x{5F26}\x{5F27}\x{5F28}\x{5F29}\x{5F2A}\x{5F2B}\x{5F2C}\x{5F2D}\x{5F2E}' .
-          '\x{5F2F}\x{5F30}\x{5F31}\x{5F32}\x{5F33}\x{5F34}\x{5F35}\x{5F36}\x{5F37}' .
-          '\x{5F38}\x{5F39}\x{5F3A}\x{5F3C}\x{5F3E}\x{5F3F}\x{5F40}\x{5F41}\x{5F42}' .
-          '\x{5F43}\x{5F44}\x{5F45}\x{5F46}\x{5F47}\x{5F48}\x{5F49}\x{5F4A}\x{5F4B}' .
-          '\x{5F4C}\x{5F4D}\x{5F4E}\x{5F4F}\x{5F50}\x{5F51}\x{5F52}\x{5F53}\x{5F54}' .
-          '\x{5F55}\x{5F56}\x{5F57}\x{5F58}\x{5F59}\x{5F5A}\x{5F5B}\x{5F5C}\x{5F5D}' .
-          '\x{5F5E}\x{5F5F}\x{5F60}\x{5F61}\x{5F62}\x{5F63}\x{5F64}\x{5F65}\x{5F66}' .
-          '\x{5F67}\x{5F68}\x{5F69}\x{5F6A}\x{5F6B}\x{5F6C}\x{5F6D}\x{5F6E}\x{5F6F}' .
-          '\x{5F70}\x{5F71}\x{5F72}\x{5F73}\x{5F74}\x{5F75}\x{5F76}\x{5F77}\x{5F78}' .
-          '\x{5F79}\x{5F7A}\x{5F7B}\x{5F7C}\x{5F7D}\x{5F7E}\x{5F7F}\x{5F80}\x{5F81}' .
-          '\x{5F82}\x{5F83}\x{5F84}\x{5F85}\x{5F86}\x{5F87}\x{5F88}\x{5F89}\x{5F8A}' .
-          '\x{5F8B}\x{5F8C}\x{5F8D}\x{5F8E}\x{5F90}\x{5F91}\x{5F92}\x{5F93}\x{5F94}' .
-          '\x{5F95}\x{5F96}\x{5F97}\x{5F98}\x{5F99}\x{5F9B}\x{5F9C}\x{5F9D}\x{5F9E}' .
-          '\x{5F9F}\x{5FA0}\x{5FA1}\x{5FA2}\x{5FA5}\x{5FA6}\x{5FA7}\x{5FA8}\x{5FA9}' .
-          '\x{5FAA}\x{5FAB}\x{5FAC}\x{5FAD}\x{5FAE}\x{5FAF}\x{5FB1}\x{5FB2}\x{5FB3}' .
-          '\x{5FB4}\x{5FB5}\x{5FB6}\x{5FB7}\x{5FB8}\x{5FB9}\x{5FBA}\x{5FBB}\x{5FBC}' .
-          '\x{5FBD}\x{5FBE}\x{5FBF}\x{5FC0}\x{5FC1}\x{5FC3}\x{5FC4}\x{5FC5}\x{5FC6}' .
-          '\x{5FC7}\x{5FC8}\x{5FC9}\x{5FCA}\x{5FCB}\x{5FCC}\x{5FCD}\x{5FCF}\x{5FD0}' .
-          '\x{5FD1}\x{5FD2}\x{5FD3}\x{5FD4}\x{5FD5}\x{5FD6}\x{5FD7}\x{5FD8}\x{5FD9}' .
-          '\x{5FDA}\x{5FDC}\x{5FDD}\x{5FDE}\x{5FE0}\x{5FE1}\x{5FE3}\x{5FE4}\x{5FE5}' .
-          '\x{5FE6}\x{5FE7}\x{5FE8}\x{5FE9}\x{5FEA}\x{5FEB}\x{5FED}\x{5FEE}\x{5FEF}' .
-          '\x{5FF0}\x{5FF1}\x{5FF2}\x{5FF3}\x{5FF4}\x{5FF5}\x{5FF6}\x{5FF7}\x{5FF8}' .
-          '\x{5FF9}\x{5FFA}\x{5FFB}\x{5FFD}\x{5FFE}\x{5FFF}\x{6000}\x{6001}\x{6002}' .
-          '\x{6003}\x{6004}\x{6005}\x{6006}\x{6007}\x{6008}\x{6009}\x{600A}\x{600B}' .
-          '\x{600C}\x{600D}\x{600E}\x{600F}\x{6010}\x{6011}\x{6012}\x{6013}\x{6014}' .
-          '\x{6015}\x{6016}\x{6017}\x{6018}\x{6019}\x{601A}\x{601B}\x{601C}\x{601D}' .
-          '\x{601E}\x{601F}\x{6020}\x{6021}\x{6022}\x{6024}\x{6025}\x{6026}\x{6027}' .
-          '\x{6028}\x{6029}\x{602A}\x{602B}\x{602C}\x{602D}\x{602E}\x{602F}\x{6030}' .
-          '\x{6031}\x{6032}\x{6033}\x{6034}\x{6035}\x{6036}\x{6037}\x{6038}\x{6039}' .
-          '\x{603A}\x{603B}\x{603C}\x{603D}\x{603E}\x{603F}\x{6040}\x{6041}\x{6042}' .
-          '\x{6043}\x{6044}\x{6045}\x{6046}\x{6047}\x{6048}\x{6049}\x{604A}\x{604B}' .
-          '\x{604C}\x{604D}\x{604E}\x{604F}\x{6050}\x{6051}\x{6052}\x{6053}\x{6054}' .
-          '\x{6055}\x{6057}\x{6058}\x{6059}\x{605A}\x{605B}\x{605C}\x{605D}\x{605E}' .
-          '\x{605F}\x{6062}\x{6063}\x{6064}\x{6065}\x{6066}\x{6067}\x{6068}\x{6069}' .
-          '\x{606A}\x{606B}\x{606C}\x{606D}\x{606E}\x{606F}\x{6070}\x{6072}\x{6073}' .
-          '\x{6075}\x{6076}\x{6077}\x{6078}\x{6079}\x{607A}\x{607B}\x{607C}\x{607D}' .
-          '\x{607E}\x{607F}\x{6080}\x{6081}\x{6082}\x{6083}\x{6084}\x{6085}\x{6086}' .
-          '\x{6087}\x{6088}\x{6089}\x{608A}\x{608B}\x{608C}\x{608D}\x{608E}\x{608F}' .
-          '\x{6090}\x{6092}\x{6094}\x{6095}\x{6096}\x{6097}\x{6098}\x{6099}\x{609A}' .
-          '\x{609B}\x{609C}\x{609D}\x{609E}\x{609F}\x{60A0}\x{60A1}\x{60A2}\x{60A3}' .
-          '\x{60A4}\x{60A6}\x{60A7}\x{60A8}\x{60AA}\x{60AB}\x{60AC}\x{60AD}\x{60AE}' .
-          '\x{60AF}\x{60B0}\x{60B1}\x{60B2}\x{60B3}\x{60B4}\x{60B5}\x{60B6}\x{60B7}' .
-          '\x{60B8}\x{60B9}\x{60BA}\x{60BB}\x{60BC}\x{60BD}\x{60BE}\x{60BF}\x{60C0}' .
-          '\x{60C1}\x{60C2}\x{60C3}\x{60C4}\x{60C5}\x{60C6}\x{60C7}\x{60C8}\x{60C9}' .
-          '\x{60CA}\x{60CB}\x{60CC}\x{60CD}\x{60CE}\x{60CF}\x{60D0}\x{60D1}\x{60D3}' .
-          '\x{60D4}\x{60D5}\x{60D7}\x{60D8}\x{60D9}\x{60DA}\x{60DB}\x{60DC}\x{60DD}' .
-          '\x{60DF}\x{60E0}\x{60E1}\x{60E2}\x{60E4}\x{60E6}\x{60E7}\x{60E8}\x{60E9}' .
-          '\x{60EA}\x{60EB}\x{60EC}\x{60ED}\x{60EE}\x{60EF}\x{60F0}\x{60F1}\x{60F2}' .
-          '\x{60F3}\x{60F4}\x{60F5}\x{60F6}\x{60F7}\x{60F8}\x{60F9}\x{60FA}\x{60FB}' .
-          '\x{60FC}\x{60FE}\x{60FF}\x{6100}\x{6101}\x{6103}\x{6104}\x{6105}\x{6106}' .
-          '\x{6108}\x{6109}\x{610A}\x{610B}\x{610C}\x{610D}\x{610E}\x{610F}\x{6110}' .
-          '\x{6112}\x{6113}\x{6114}\x{6115}\x{6116}\x{6117}\x{6118}\x{6119}\x{611A}' .
-          '\x{611B}\x{611C}\x{611D}\x{611F}\x{6120}\x{6122}\x{6123}\x{6124}\x{6125}' .
-          '\x{6126}\x{6127}\x{6128}\x{6129}\x{612A}\x{612B}\x{612C}\x{612D}\x{612E}' .
-          '\x{612F}\x{6130}\x{6132}\x{6134}\x{6136}\x{6137}\x{613A}\x{613B}\x{613C}' .
-          '\x{613D}\x{613E}\x{613F}\x{6140}\x{6141}\x{6142}\x{6143}\x{6144}\x{6145}' .
-          '\x{6146}\x{6147}\x{6148}\x{6149}\x{614A}\x{614B}\x{614C}\x{614D}\x{614E}' .
-          '\x{614F}\x{6150}\x{6151}\x{6152}\x{6153}\x{6154}\x{6155}\x{6156}\x{6157}' .
-          '\x{6158}\x{6159}\x{615A}\x{615B}\x{615C}\x{615D}\x{615E}\x{615F}\x{6161}' .
-          '\x{6162}\x{6163}\x{6164}\x{6165}\x{6166}\x{6167}\x{6168}\x{6169}\x{616A}' .
-          '\x{616B}\x{616C}\x{616D}\x{616E}\x{6170}\x{6171}\x{6172}\x{6173}\x{6174}' .
-          '\x{6175}\x{6176}\x{6177}\x{6178}\x{6179}\x{617A}\x{617C}\x{617E}\x{6180}' .
-          '\x{6181}\x{6182}\x{6183}\x{6184}\x{6185}\x{6187}\x{6188}\x{6189}\x{618A}' .
-          '\x{618B}\x{618C}\x{618D}\x{618E}\x{618F}\x{6190}\x{6191}\x{6192}\x{6193}' .
-          '\x{6194}\x{6195}\x{6196}\x{6198}\x{6199}\x{619A}\x{619B}\x{619D}\x{619E}' .
-          '\x{619F}\x{61A0}\x{61A1}\x{61A2}\x{61A3}\x{61A4}\x{61A5}\x{61A6}\x{61A7}' .
-          '\x{61A8}\x{61A9}\x{61AA}\x{61AB}\x{61AC}\x{61AD}\x{61AE}\x{61AF}\x{61B0}' .
-          '\x{61B1}\x{61B2}\x{61B3}\x{61B4}\x{61B5}\x{61B6}\x{61B7}\x{61B8}\x{61BA}' .
-          '\x{61BC}\x{61BD}\x{61BE}\x{61BF}\x{61C0}\x{61C1}\x{61C2}\x{61C3}\x{61C4}' .
-          '\x{61C5}\x{61C6}\x{61C7}\x{61C8}\x{61C9}\x{61CA}\x{61CB}\x{61CC}\x{61CD}' .
-          '\x{61CE}\x{61CF}\x{61D0}\x{61D1}\x{61D2}\x{61D4}\x{61D6}\x{61D7}\x{61D8}' .
-          '\x{61D9}\x{61DA}\x{61DB}\x{61DC}\x{61DD}\x{61DE}\x{61DF}\x{61E0}\x{61E1}' .
-          '\x{61E2}\x{61E3}\x{61E4}\x{61E5}\x{61E6}\x{61E7}\x{61E8}\x{61E9}\x{61EA}' .
-          '\x{61EB}\x{61ED}\x{61EE}\x{61F0}\x{61F1}\x{61F2}\x{61F3}\x{61F5}\x{61F6}' .
-          '\x{61F7}\x{61F8}\x{61F9}\x{61FA}\x{61FB}\x{61FC}\x{61FD}\x{61FE}\x{61FF}' .
-          '\x{6200}\x{6201}\x{6202}\x{6203}\x{6204}\x{6206}\x{6207}\x{6208}\x{6209}' .
-          '\x{620A}\x{620B}\x{620C}\x{620D}\x{620E}\x{620F}\x{6210}\x{6211}\x{6212}' .
-          '\x{6213}\x{6214}\x{6215}\x{6216}\x{6217}\x{6218}\x{6219}\x{621A}\x{621B}' .
-          '\x{621C}\x{621D}\x{621E}\x{621F}\x{6220}\x{6221}\x{6222}\x{6223}\x{6224}' .
-          '\x{6225}\x{6226}\x{6227}\x{6228}\x{6229}\x{622A}\x{622B}\x{622C}\x{622D}' .
-          '\x{622E}\x{622F}\x{6230}\x{6231}\x{6232}\x{6233}\x{6234}\x{6236}\x{6237}' .
-          '\x{6238}\x{623A}\x{623B}\x{623C}\x{623D}\x{623E}\x{623F}\x{6240}\x{6241}' .
-          '\x{6242}\x{6243}\x{6244}\x{6245}\x{6246}\x{6247}\x{6248}\x{6249}\x{624A}' .
-          '\x{624B}\x{624C}\x{624D}\x{624E}\x{624F}\x{6250}\x{6251}\x{6252}\x{6253}' .
-          '\x{6254}\x{6255}\x{6256}\x{6258}\x{6259}\x{625A}\x{625B}\x{625C}\x{625D}' .
-          '\x{625E}\x{625F}\x{6260}\x{6261}\x{6262}\x{6263}\x{6264}\x{6265}\x{6266}' .
-          '\x{6267}\x{6268}\x{6269}\x{626A}\x{626B}\x{626C}\x{626D}\x{626E}\x{626F}' .
-          '\x{6270}\x{6271}\x{6272}\x{6273}\x{6274}\x{6275}\x{6276}\x{6277}\x{6278}' .
-          '\x{6279}\x{627A}\x{627B}\x{627C}\x{627D}\x{627E}\x{627F}\x{6280}\x{6281}' .
-          '\x{6283}\x{6284}\x{6285}\x{6286}\x{6287}\x{6288}\x{6289}\x{628A}\x{628B}' .
-          '\x{628C}\x{628E}\x{628F}\x{6290}\x{6291}\x{6292}\x{6293}\x{6294}\x{6295}' .
-          '\x{6296}\x{6297}\x{6298}\x{6299}\x{629A}\x{629B}\x{629C}\x{629E}\x{629F}' .
-          '\x{62A0}\x{62A1}\x{62A2}\x{62A3}\x{62A4}\x{62A5}\x{62A7}\x{62A8}\x{62A9}' .
-          '\x{62AA}\x{62AB}\x{62AC}\x{62AD}\x{62AE}\x{62AF}\x{62B0}\x{62B1}\x{62B2}' .
-          '\x{62B3}\x{62B4}\x{62B5}\x{62B6}\x{62B7}\x{62B8}\x{62B9}\x{62BA}\x{62BB}' .
-          '\x{62BC}\x{62BD}\x{62BE}\x{62BF}\x{62C0}\x{62C1}\x{62C2}\x{62C3}\x{62C4}' .
-          '\x{62C5}\x{62C6}\x{62C7}\x{62C8}\x{62C9}\x{62CA}\x{62CB}\x{62CC}\x{62CD}' .
-          '\x{62CE}\x{62CF}\x{62D0}\x{62D1}\x{62D2}\x{62D3}\x{62D4}\x{62D5}\x{62D6}' .
-          '\x{62D7}\x{62D8}\x{62D9}\x{62DA}\x{62DB}\x{62DC}\x{62DD}\x{62DF}\x{62E0}' .
-          '\x{62E1}\x{62E2}\x{62E3}\x{62E4}\x{62E5}\x{62E6}\x{62E7}\x{62E8}\x{62E9}' .
-          '\x{62EB}\x{62EC}\x{62ED}\x{62EE}\x{62EF}\x{62F0}\x{62F1}\x{62F2}\x{62F3}' .
-          '\x{62F4}\x{62F5}\x{62F6}\x{62F7}\x{62F8}\x{62F9}\x{62FA}\x{62FB}\x{62FC}' .
-          '\x{62FD}\x{62FE}\x{62FF}\x{6300}\x{6301}\x{6302}\x{6303}\x{6304}\x{6305}' .
-          '\x{6306}\x{6307}\x{6308}\x{6309}\x{630B}\x{630C}\x{630D}\x{630E}\x{630F}' .
-          '\x{6310}\x{6311}\x{6312}\x{6313}\x{6314}\x{6315}\x{6316}\x{6318}\x{6319}' .
-          '\x{631A}\x{631B}\x{631C}\x{631D}\x{631E}\x{631F}\x{6320}\x{6321}\x{6322}' .
-          '\x{6323}\x{6324}\x{6325}\x{6326}\x{6327}\x{6328}\x{6329}\x{632A}\x{632B}' .
-          '\x{632C}\x{632D}\x{632E}\x{632F}\x{6330}\x{6332}\x{6333}\x{6334}\x{6336}' .
-          '\x{6338}\x{6339}\x{633A}\x{633B}\x{633C}\x{633D}\x{633E}\x{6340}\x{6341}' .
-          '\x{6342}\x{6343}\x{6344}\x{6345}\x{6346}\x{6347}\x{6348}\x{6349}\x{634A}' .
-          '\x{634B}\x{634C}\x{634D}\x{634E}\x{634F}\x{6350}\x{6351}\x{6352}\x{6353}' .
-          '\x{6354}\x{6355}\x{6356}\x{6357}\x{6358}\x{6359}\x{635A}\x{635C}\x{635D}' .
-          '\x{635E}\x{635F}\x{6360}\x{6361}\x{6362}\x{6363}\x{6364}\x{6365}\x{6366}' .
-          '\x{6367}\x{6368}\x{6369}\x{636A}\x{636B}\x{636C}\x{636D}\x{636E}\x{636F}' .
-          '\x{6370}\x{6371}\x{6372}\x{6373}\x{6374}\x{6375}\x{6376}\x{6377}\x{6378}' .
-          '\x{6379}\x{637A}\x{637B}\x{637C}\x{637D}\x{637E}\x{6380}\x{6381}\x{6382}' .
-          '\x{6383}\x{6384}\x{6385}\x{6386}\x{6387}\x{6388}\x{6389}\x{638A}\x{638C}' .
-          '\x{638D}\x{638E}\x{638F}\x{6390}\x{6391}\x{6392}\x{6394}\x{6395}\x{6396}' .
-          '\x{6397}\x{6398}\x{6399}\x{639A}\x{639B}\x{639C}\x{639D}\x{639E}\x{639F}' .
-          '\x{63A0}\x{63A1}\x{63A2}\x{63A3}\x{63A4}\x{63A5}\x{63A6}\x{63A7}\x{63A8}' .
-          '\x{63A9}\x{63AA}\x{63AB}\x{63AC}\x{63AD}\x{63AE}\x{63AF}\x{63B0}\x{63B1}' .
-          '\x{63B2}\x{63B3}\x{63B4}\x{63B5}\x{63B6}\x{63B7}\x{63B8}\x{63B9}\x{63BA}' .
-          '\x{63BC}\x{63BD}\x{63BE}\x{63BF}\x{63C0}\x{63C1}\x{63C2}\x{63C3}\x{63C4}' .
-          '\x{63C5}\x{63C6}\x{63C7}\x{63C8}\x{63C9}\x{63CA}\x{63CB}\x{63CC}\x{63CD}' .
-          '\x{63CE}\x{63CF}\x{63D0}\x{63D2}\x{63D3}\x{63D4}\x{63D5}\x{63D6}\x{63D7}' .
-          '\x{63D8}\x{63D9}\x{63DA}\x{63DB}\x{63DC}\x{63DD}\x{63DE}\x{63DF}\x{63E0}' .
-          '\x{63E1}\x{63E2}\x{63E3}\x{63E4}\x{63E5}\x{63E6}\x{63E7}\x{63E8}\x{63E9}' .
-          '\x{63EA}\x{63EB}\x{63EC}\x{63ED}\x{63EE}\x{63EF}\x{63F0}\x{63F1}\x{63F2}' .
-          '\x{63F3}\x{63F4}\x{63F5}\x{63F6}\x{63F7}\x{63F8}\x{63F9}\x{63FA}\x{63FB}' .
-          '\x{63FC}\x{63FD}\x{63FE}\x{63FF}\x{6400}\x{6401}\x{6402}\x{6403}\x{6404}' .
-          '\x{6405}\x{6406}\x{6408}\x{6409}\x{640A}\x{640B}\x{640C}\x{640D}\x{640E}' .
-          '\x{640F}\x{6410}\x{6411}\x{6412}\x{6413}\x{6414}\x{6415}\x{6416}\x{6417}' .
-          '\x{6418}\x{6419}\x{641A}\x{641B}\x{641C}\x{641D}\x{641E}\x{641F}\x{6420}' .
-          '\x{6421}\x{6422}\x{6423}\x{6424}\x{6425}\x{6426}\x{6427}\x{6428}\x{6429}' .
-          '\x{642A}\x{642B}\x{642C}\x{642D}\x{642E}\x{642F}\x{6430}\x{6431}\x{6432}' .
-          '\x{6433}\x{6434}\x{6435}\x{6436}\x{6437}\x{6438}\x{6439}\x{643A}\x{643D}' .
-          '\x{643E}\x{643F}\x{6440}\x{6441}\x{6443}\x{6444}\x{6445}\x{6446}\x{6447}' .
-          '\x{6448}\x{644A}\x{644B}\x{644C}\x{644D}\x{644E}\x{644F}\x{6450}\x{6451}' .
-          '\x{6452}\x{6453}\x{6454}\x{6455}\x{6456}\x{6457}\x{6458}\x{6459}\x{645B}' .
-          '\x{645C}\x{645D}\x{645E}\x{645F}\x{6460}\x{6461}\x{6462}\x{6463}\x{6464}' .
-          '\x{6465}\x{6466}\x{6467}\x{6468}\x{6469}\x{646A}\x{646B}\x{646C}\x{646D}' .
-          '\x{646E}\x{646F}\x{6470}\x{6471}\x{6472}\x{6473}\x{6474}\x{6475}\x{6476}' .
-          '\x{6477}\x{6478}\x{6479}\x{647A}\x{647B}\x{647C}\x{647D}\x{647F}\x{6480}' .
-          '\x{6481}\x{6482}\x{6483}\x{6484}\x{6485}\x{6487}\x{6488}\x{6489}\x{648A}' .
-          '\x{648B}\x{648C}\x{648D}\x{648E}\x{648F}\x{6490}\x{6491}\x{6492}\x{6493}' .
-          '\x{6494}\x{6495}\x{6496}\x{6497}\x{6498}\x{6499}\x{649A}\x{649B}\x{649C}' .
-          '\x{649D}\x{649E}\x{649F}\x{64A0}\x{64A2}\x{64A3}\x{64A4}\x{64A5}\x{64A6}' .
-          '\x{64A7}\x{64A8}\x{64A9}\x{64AA}\x{64AB}\x{64AC}\x{64AD}\x{64AE}\x{64B0}' .
-          '\x{64B1}\x{64B2}\x{64B3}\x{64B4}\x{64B5}\x{64B7}\x{64B8}\x{64B9}\x{64BA}' .
-          '\x{64BB}\x{64BC}\x{64BD}\x{64BE}\x{64BF}\x{64C0}\x{64C1}\x{64C2}\x{64C3}' .
-          '\x{64C4}\x{64C5}\x{64C6}\x{64C7}\x{64C9}\x{64CA}\x{64CB}\x{64CC}\x{64CD}' .
-          '\x{64CE}\x{64CF}\x{64D0}\x{64D1}\x{64D2}\x{64D3}\x{64D4}\x{64D6}\x{64D7}' .
-          '\x{64D8}\x{64D9}\x{64DA}\x{64DB}\x{64DC}\x{64DD}\x{64DE}\x{64DF}\x{64E0}' .
-          '\x{64E2}\x{64E3}\x{64E4}\x{64E6}\x{64E7}\x{64E8}\x{64E9}\x{64EA}\x{64EB}' .
-          '\x{64EC}\x{64ED}\x{64EF}\x{64F0}\x{64F1}\x{64F2}\x{64F3}\x{64F4}\x{64F6}' .
-          '\x{64F7}\x{64F8}\x{64FA}\x{64FB}\x{64FC}\x{64FD}\x{64FE}\x{64FF}\x{6500}' .
-          '\x{6501}\x{6503}\x{6504}\x{6505}\x{6506}\x{6507}\x{6508}\x{6509}\x{650B}' .
-          '\x{650C}\x{650D}\x{650E}\x{650F}\x{6510}\x{6511}\x{6512}\x{6513}\x{6514}' .
-          '\x{6515}\x{6516}\x{6517}\x{6518}\x{6519}\x{651A}\x{651B}\x{651C}\x{651D}' .
-          '\x{651E}\x{6520}\x{6521}\x{6522}\x{6523}\x{6524}\x{6525}\x{6526}\x{6527}' .
-          '\x{6529}\x{652A}\x{652B}\x{652C}\x{652D}\x{652E}\x{652F}\x{6530}\x{6531}' .
-          '\x{6532}\x{6533}\x{6534}\x{6535}\x{6536}\x{6537}\x{6538}\x{6539}\x{653A}' .
-          '\x{653B}\x{653C}\x{653D}\x{653E}\x{653F}\x{6541}\x{6543}\x{6544}\x{6545}' .
-          '\x{6546}\x{6547}\x{6548}\x{6549}\x{654A}\x{654B}\x{654C}\x{654D}\x{654E}' .
-          '\x{654F}\x{6550}\x{6551}\x{6552}\x{6553}\x{6554}\x{6555}\x{6556}\x{6557}' .
-          '\x{6558}\x{6559}\x{655B}\x{655C}\x{655D}\x{655E}\x{6560}\x{6561}\x{6562}' .
-          '\x{6563}\x{6564}\x{6565}\x{6566}\x{6567}\x{6568}\x{6569}\x{656A}\x{656B}' .
-          '\x{656C}\x{656E}\x{656F}\x{6570}\x{6571}\x{6572}\x{6573}\x{6574}\x{6575}' .
-          '\x{6576}\x{6577}\x{6578}\x{6579}\x{657A}\x{657B}\x{657C}\x{657E}\x{657F}' .
-          '\x{6580}\x{6581}\x{6582}\x{6583}\x{6584}\x{6585}\x{6586}\x{6587}\x{6588}' .
-          '\x{6589}\x{658B}\x{658C}\x{658D}\x{658E}\x{658F}\x{6590}\x{6591}\x{6592}' .
-          '\x{6593}\x{6594}\x{6595}\x{6596}\x{6597}\x{6598}\x{6599}\x{659B}\x{659C}' .
-          '\x{659D}\x{659E}\x{659F}\x{65A0}\x{65A1}\x{65A2}\x{65A3}\x{65A4}\x{65A5}' .
-          '\x{65A6}\x{65A7}\x{65A8}\x{65A9}\x{65AA}\x{65AB}\x{65AC}\x{65AD}\x{65AE}' .
-          '\x{65AF}\x{65B0}\x{65B1}\x{65B2}\x{65B3}\x{65B4}\x{65B6}\x{65B7}\x{65B8}' .
-          '\x{65B9}\x{65BA}\x{65BB}\x{65BC}\x{65BD}\x{65BF}\x{65C0}\x{65C1}\x{65C2}' .
-          '\x{65C3}\x{65C4}\x{65C5}\x{65C6}\x{65C7}\x{65CA}\x{65CB}\x{65CC}\x{65CD}' .
-          '\x{65CE}\x{65CF}\x{65D0}\x{65D2}\x{65D3}\x{65D4}\x{65D5}\x{65D6}\x{65D7}' .
-          '\x{65DA}\x{65DB}\x{65DD}\x{65DE}\x{65DF}\x{65E0}\x{65E1}\x{65E2}\x{65E3}' .
-          '\x{65E5}\x{65E6}\x{65E7}\x{65E8}\x{65E9}\x{65EB}\x{65EC}\x{65ED}\x{65EE}' .
-          '\x{65EF}\x{65F0}\x{65F1}\x{65F2}\x{65F3}\x{65F4}\x{65F5}\x{65F6}\x{65F7}' .
-          '\x{65F8}\x{65FA}\x{65FB}\x{65FC}\x{65FD}\x{6600}\x{6601}\x{6602}\x{6603}' .
-          '\x{6604}\x{6605}\x{6606}\x{6607}\x{6608}\x{6609}\x{660A}\x{660B}\x{660C}' .
-          '\x{660D}\x{660E}\x{660F}\x{6610}\x{6611}\x{6612}\x{6613}\x{6614}\x{6615}' .
-          '\x{6616}\x{6618}\x{6619}\x{661A}\x{661B}\x{661C}\x{661D}\x{661F}\x{6620}' .
-          '\x{6621}\x{6622}\x{6623}\x{6624}\x{6625}\x{6626}\x{6627}\x{6628}\x{6629}' .
-          '\x{662A}\x{662B}\x{662D}\x{662E}\x{662F}\x{6630}\x{6631}\x{6632}\x{6633}' .
-          '\x{6634}\x{6635}\x{6636}\x{6639}\x{663A}\x{663C}\x{663D}\x{663E}\x{6640}' .
-          '\x{6641}\x{6642}\x{6643}\x{6644}\x{6645}\x{6646}\x{6647}\x{6649}\x{664A}' .
-          '\x{664B}\x{664C}\x{664E}\x{664F}\x{6650}\x{6651}\x{6652}\x{6653}\x{6654}' .
-          '\x{6655}\x{6656}\x{6657}\x{6658}\x{6659}\x{665A}\x{665B}\x{665C}\x{665D}' .
-          '\x{665E}\x{665F}\x{6661}\x{6662}\x{6664}\x{6665}\x{6666}\x{6668}\x{6669}' .
-          '\x{666A}\x{666B}\x{666C}\x{666D}\x{666E}\x{666F}\x{6670}\x{6671}\x{6672}' .
-          '\x{6673}\x{6674}\x{6675}\x{6676}\x{6677}\x{6678}\x{6679}\x{667A}\x{667B}' .
-          '\x{667C}\x{667D}\x{667E}\x{667F}\x{6680}\x{6681}\x{6682}\x{6683}\x{6684}' .
-          '\x{6685}\x{6686}\x{6687}\x{6688}\x{6689}\x{668A}\x{668B}\x{668C}\x{668D}' .
-          '\x{668E}\x{668F}\x{6690}\x{6691}\x{6693}\x{6694}\x{6695}\x{6696}\x{6697}' .
-          '\x{6698}\x{6699}\x{669A}\x{669B}\x{669D}\x{669F}\x{66A0}\x{66A1}\x{66A2}' .
-          '\x{66A3}\x{66A4}\x{66A5}\x{66A6}\x{66A7}\x{66A8}\x{66A9}\x{66AA}\x{66AB}' .
-          '\x{66AE}\x{66AF}\x{66B0}\x{66B1}\x{66B2}\x{66B3}\x{66B4}\x{66B5}\x{66B6}' .
-          '\x{66B7}\x{66B8}\x{66B9}\x{66BA}\x{66BB}\x{66BC}\x{66BD}\x{66BE}\x{66BF}' .
-          '\x{66C0}\x{66C1}\x{66C2}\x{66C3}\x{66C4}\x{66C5}\x{66C6}\x{66C7}\x{66C8}' .
-          '\x{66C9}\x{66CA}\x{66CB}\x{66CC}\x{66CD}\x{66CE}\x{66CF}\x{66D1}\x{66D2}' .
-          '\x{66D4}\x{66D5}\x{66D6}\x{66D8}\x{66D9}\x{66DA}\x{66DB}\x{66DC}\x{66DD}' .
-          '\x{66DE}\x{66E0}\x{66E1}\x{66E2}\x{66E3}\x{66E4}\x{66E5}\x{66E6}\x{66E7}' .
-          '\x{66E8}\x{66E9}\x{66EA}\x{66EB}\x{66EC}\x{66ED}\x{66EE}\x{66F0}\x{66F1}' .
-          '\x{66F2}\x{66F3}\x{66F4}\x{66F5}\x{66F6}\x{66F7}\x{66F8}\x{66F9}\x{66FA}' .
-          '\x{66FB}\x{66FC}\x{66FE}\x{66FF}\x{6700}\x{6701}\x{6703}\x{6704}\x{6705}' .
-          '\x{6706}\x{6708}\x{6709}\x{670A}\x{670B}\x{670C}\x{670D}\x{670E}\x{670F}' .
-          '\x{6710}\x{6711}\x{6712}\x{6713}\x{6714}\x{6715}\x{6716}\x{6717}\x{6718}' .
-          '\x{671A}\x{671B}\x{671C}\x{671D}\x{671E}\x{671F}\x{6720}\x{6721}\x{6722}' .
-          '\x{6723}\x{6725}\x{6726}\x{6727}\x{6728}\x{672A}\x{672B}\x{672C}\x{672D}' .
-          '\x{672E}\x{672F}\x{6730}\x{6731}\x{6732}\x{6733}\x{6734}\x{6735}\x{6736}' .
-          '\x{6737}\x{6738}\x{6739}\x{673A}\x{673B}\x{673C}\x{673D}\x{673E}\x{673F}' .
-          '\x{6740}\x{6741}\x{6742}\x{6743}\x{6744}\x{6745}\x{6746}\x{6747}\x{6748}' .
-          '\x{6749}\x{674A}\x{674B}\x{674C}\x{674D}\x{674E}\x{674F}\x{6750}\x{6751}' .
-          '\x{6752}\x{6753}\x{6754}\x{6755}\x{6756}\x{6757}\x{6758}\x{6759}\x{675A}' .
-          '\x{675B}\x{675C}\x{675D}\x{675E}\x{675F}\x{6760}\x{6761}\x{6762}\x{6763}' .
-          '\x{6764}\x{6765}\x{6766}\x{6768}\x{6769}\x{676A}\x{676B}\x{676C}\x{676D}' .
-          '\x{676E}\x{676F}\x{6770}\x{6771}\x{6772}\x{6773}\x{6774}\x{6775}\x{6776}' .
-          '\x{6777}\x{6778}\x{6779}\x{677A}\x{677B}\x{677C}\x{677D}\x{677E}\x{677F}' .
-          '\x{6780}\x{6781}\x{6782}\x{6783}\x{6784}\x{6785}\x{6786}\x{6787}\x{6789}' .
-          '\x{678A}\x{678B}\x{678C}\x{678D}\x{678E}\x{678F}\x{6790}\x{6791}\x{6792}' .
-          '\x{6793}\x{6794}\x{6795}\x{6797}\x{6798}\x{6799}\x{679A}\x{679B}\x{679C}' .
-          '\x{679D}\x{679E}\x{679F}\x{67A0}\x{67A1}\x{67A2}\x{67A3}\x{67A4}\x{67A5}' .
-          '\x{67A6}\x{67A7}\x{67A8}\x{67AA}\x{67AB}\x{67AC}\x{67AD}\x{67AE}\x{67AF}' .
-          '\x{67B0}\x{67B1}\x{67B2}\x{67B3}\x{67B4}\x{67B5}\x{67B6}\x{67B7}\x{67B8}' .
-          '\x{67B9}\x{67BA}\x{67BB}\x{67BC}\x{67BE}\x{67C0}\x{67C1}\x{67C2}\x{67C3}' .
-          '\x{67C4}\x{67C5}\x{67C6}\x{67C7}\x{67C8}\x{67C9}\x{67CA}\x{67CB}\x{67CC}' .
-          '\x{67CD}\x{67CE}\x{67CF}\x{67D0}\x{67D1}\x{67D2}\x{67D3}\x{67D4}\x{67D6}' .
-          '\x{67D8}\x{67D9}\x{67DA}\x{67DB}\x{67DC}\x{67DD}\x{67DE}\x{67DF}\x{67E0}' .
-          '\x{67E1}\x{67E2}\x{67E3}\x{67E4}\x{67E5}\x{67E6}\x{67E7}\x{67E8}\x{67E9}' .
-          '\x{67EA}\x{67EB}\x{67EC}\x{67ED}\x{67EE}\x{67EF}\x{67F0}\x{67F1}\x{67F2}' .
-          '\x{67F3}\x{67F4}\x{67F5}\x{67F6}\x{67F7}\x{67F8}\x{67FA}\x{67FB}\x{67FC}' .
-          '\x{67FD}\x{67FE}\x{67FF}\x{6800}\x{6802}\x{6803}\x{6804}\x{6805}\x{6806}' .
-          '\x{6807}\x{6808}\x{6809}\x{680A}\x{680B}\x{680C}\x{680D}\x{680E}\x{680F}' .
-          '\x{6810}\x{6811}\x{6812}\x{6813}\x{6814}\x{6816}\x{6817}\x{6818}\x{6819}' .
-          '\x{681A}\x{681B}\x{681C}\x{681D}\x{681F}\x{6820}\x{6821}\x{6822}\x{6823}' .
-          '\x{6824}\x{6825}\x{6826}\x{6828}\x{6829}\x{682A}\x{682B}\x{682C}\x{682D}' .
-          '\x{682E}\x{682F}\x{6831}\x{6832}\x{6833}\x{6834}\x{6835}\x{6836}\x{6837}' .
-          '\x{6838}\x{6839}\x{683A}\x{683B}\x{683C}\x{683D}\x{683E}\x{683F}\x{6840}' .
-          '\x{6841}\x{6842}\x{6843}\x{6844}\x{6845}\x{6846}\x{6847}\x{6848}\x{6849}' .
-          '\x{684A}\x{684B}\x{684C}\x{684D}\x{684E}\x{684F}\x{6850}\x{6851}\x{6852}' .
-          '\x{6853}\x{6854}\x{6855}\x{6856}\x{6857}\x{685B}\x{685D}\x{6860}\x{6861}' .
-          '\x{6862}\x{6863}\x{6864}\x{6865}\x{6866}\x{6867}\x{6868}\x{6869}\x{686A}' .
-          '\x{686B}\x{686C}\x{686D}\x{686E}\x{686F}\x{6870}\x{6871}\x{6872}\x{6873}' .
-          '\x{6874}\x{6875}\x{6876}\x{6877}\x{6878}\x{6879}\x{687B}\x{687C}\x{687D}' .
-          '\x{687E}\x{687F}\x{6880}\x{6881}\x{6882}\x{6883}\x{6884}\x{6885}\x{6886}' .
-          '\x{6887}\x{6888}\x{6889}\x{688A}\x{688B}\x{688C}\x{688D}\x{688E}\x{688F}' .
-          '\x{6890}\x{6891}\x{6892}\x{6893}\x{6894}\x{6896}\x{6897}\x{6898}\x{689A}' .
-          '\x{689B}\x{689C}\x{689D}\x{689E}\x{689F}\x{68A0}\x{68A1}\x{68A2}\x{68A3}' .
-          '\x{68A4}\x{68A6}\x{68A7}\x{68A8}\x{68A9}\x{68AA}\x{68AB}\x{68AC}\x{68AD}' .
-          '\x{68AE}\x{68AF}\x{68B0}\x{68B1}\x{68B2}\x{68B3}\x{68B4}\x{68B5}\x{68B6}' .
-          '\x{68B7}\x{68B9}\x{68BB}\x{68BC}\x{68BD}\x{68BE}\x{68BF}\x{68C0}\x{68C1}' .
-          '\x{68C2}\x{68C4}\x{68C6}\x{68C7}\x{68C8}\x{68C9}\x{68CA}\x{68CB}\x{68CC}' .
-          '\x{68CD}\x{68CE}\x{68CF}\x{68D0}\x{68D1}\x{68D2}\x{68D3}\x{68D4}\x{68D5}' .
-          '\x{68D6}\x{68D7}\x{68D8}\x{68DA}\x{68DB}\x{68DC}\x{68DD}\x{68DE}\x{68DF}' .
-          '\x{68E0}\x{68E1}\x{68E3}\x{68E4}\x{68E6}\x{68E7}\x{68E8}\x{68E9}\x{68EA}' .
-          '\x{68EB}\x{68EC}\x{68ED}\x{68EE}\x{68EF}\x{68F0}\x{68F1}\x{68F2}\x{68F3}' .
-          '\x{68F4}\x{68F5}\x{68F6}\x{68F7}\x{68F8}\x{68F9}\x{68FA}\x{68FB}\x{68FC}' .
-          '\x{68FD}\x{68FE}\x{68FF}\x{6901}\x{6902}\x{6903}\x{6904}\x{6905}\x{6906}' .
-          '\x{6907}\x{6908}\x{690A}\x{690B}\x{690C}\x{690D}\x{690E}\x{690F}\x{6910}' .
-          '\x{6911}\x{6912}\x{6913}\x{6914}\x{6915}\x{6916}\x{6917}\x{6918}\x{6919}' .
-          '\x{691A}\x{691B}\x{691C}\x{691D}\x{691E}\x{691F}\x{6920}\x{6921}\x{6922}' .
-          '\x{6923}\x{6924}\x{6925}\x{6926}\x{6927}\x{6928}\x{6929}\x{692A}\x{692B}' .
-          '\x{692C}\x{692D}\x{692E}\x{692F}\x{6930}\x{6931}\x{6932}\x{6933}\x{6934}' .
-          '\x{6935}\x{6936}\x{6937}\x{6938}\x{6939}\x{693A}\x{693B}\x{693C}\x{693D}' .
-          '\x{693F}\x{6940}\x{6941}\x{6942}\x{6943}\x{6944}\x{6945}\x{6946}\x{6947}' .
-          '\x{6948}\x{6949}\x{694A}\x{694B}\x{694C}\x{694E}\x{694F}\x{6950}\x{6951}' .
-          '\x{6952}\x{6953}\x{6954}\x{6955}\x{6956}\x{6957}\x{6958}\x{6959}\x{695A}' .
-          '\x{695B}\x{695C}\x{695D}\x{695E}\x{695F}\x{6960}\x{6961}\x{6962}\x{6963}' .
-          '\x{6964}\x{6965}\x{6966}\x{6967}\x{6968}\x{6969}\x{696A}\x{696B}\x{696C}' .
-          '\x{696D}\x{696E}\x{696F}\x{6970}\x{6971}\x{6972}\x{6973}\x{6974}\x{6975}' .
-          '\x{6976}\x{6977}\x{6978}\x{6979}\x{697A}\x{697B}\x{697C}\x{697D}\x{697E}' .
-          '\x{697F}\x{6980}\x{6981}\x{6982}\x{6983}\x{6984}\x{6985}\x{6986}\x{6987}' .
-          '\x{6988}\x{6989}\x{698A}\x{698B}\x{698C}\x{698D}\x{698E}\x{698F}\x{6990}' .
-          '\x{6991}\x{6992}\x{6993}\x{6994}\x{6995}\x{6996}\x{6997}\x{6998}\x{6999}' .
-          '\x{699A}\x{699B}\x{699C}\x{699D}\x{699E}\x{69A0}\x{69A1}\x{69A3}\x{69A4}' .
-          '\x{69A5}\x{69A6}\x{69A7}\x{69A8}\x{69A9}\x{69AA}\x{69AB}\x{69AC}\x{69AD}' .
-          '\x{69AE}\x{69AF}\x{69B0}\x{69B1}\x{69B2}\x{69B3}\x{69B4}\x{69B5}\x{69B6}' .
-          '\x{69B7}\x{69B8}\x{69B9}\x{69BA}\x{69BB}\x{69BC}\x{69BD}\x{69BE}\x{69BF}' .
-          '\x{69C1}\x{69C2}\x{69C3}\x{69C4}\x{69C5}\x{69C6}\x{69C7}\x{69C8}\x{69C9}' .
-          '\x{69CA}\x{69CB}\x{69CC}\x{69CD}\x{69CE}\x{69CF}\x{69D0}\x{69D3}\x{69D4}' .
-          '\x{69D8}\x{69D9}\x{69DA}\x{69DB}\x{69DC}\x{69DD}\x{69DE}\x{69DF}\x{69E0}' .
-          '\x{69E1}\x{69E2}\x{69E3}\x{69E4}\x{69E5}\x{69E6}\x{69E7}\x{69E8}\x{69E9}' .
-          '\x{69EA}\x{69EB}\x{69EC}\x{69ED}\x{69EE}\x{69EF}\x{69F0}\x{69F1}\x{69F2}' .
-          '\x{69F3}\x{69F4}\x{69F5}\x{69F6}\x{69F7}\x{69F8}\x{69FA}\x{69FB}\x{69FC}' .
-          '\x{69FD}\x{69FE}\x{69FF}\x{6A00}\x{6A01}\x{6A02}\x{6A04}\x{6A05}\x{6A06}' .
-          '\x{6A07}\x{6A08}\x{6A09}\x{6A0A}\x{6A0B}\x{6A0D}\x{6A0E}\x{6A0F}\x{6A10}' .
-          '\x{6A11}\x{6A12}\x{6A13}\x{6A14}\x{6A15}\x{6A16}\x{6A17}\x{6A18}\x{6A19}' .
-          '\x{6A1A}\x{6A1B}\x{6A1D}\x{6A1E}\x{6A1F}\x{6A20}\x{6A21}\x{6A22}\x{6A23}' .
-          '\x{6A25}\x{6A26}\x{6A27}\x{6A28}\x{6A29}\x{6A2A}\x{6A2B}\x{6A2C}\x{6A2D}' .
-          '\x{6A2E}\x{6A2F}\x{6A30}\x{6A31}\x{6A32}\x{6A33}\x{6A34}\x{6A35}\x{6A36}' .
-          '\x{6A38}\x{6A39}\x{6A3A}\x{6A3B}\x{6A3C}\x{6A3D}\x{6A3E}\x{6A3F}\x{6A40}' .
-          '\x{6A41}\x{6A42}\x{6A43}\x{6A44}\x{6A45}\x{6A46}\x{6A47}\x{6A48}\x{6A49}' .
-          '\x{6A4B}\x{6A4C}\x{6A4D}\x{6A4E}\x{6A4F}\x{6A50}\x{6A51}\x{6A52}\x{6A54}' .
-          '\x{6A55}\x{6A56}\x{6A57}\x{6A58}\x{6A59}\x{6A5A}\x{6A5B}\x{6A5D}\x{6A5E}' .
-          '\x{6A5F}\x{6A60}\x{6A61}\x{6A62}\x{6A63}\x{6A64}\x{6A65}\x{6A66}\x{6A67}' .
-          '\x{6A68}\x{6A69}\x{6A6A}\x{6A6B}\x{6A6C}\x{6A6D}\x{6A6F}\x{6A71}\x{6A72}' .
-          '\x{6A73}\x{6A74}\x{6A75}\x{6A76}\x{6A77}\x{6A78}\x{6A79}\x{6A7A}\x{6A7B}' .
-          '\x{6A7C}\x{6A7D}\x{6A7E}\x{6A7F}\x{6A80}\x{6A81}\x{6A82}\x{6A83}\x{6A84}' .
-          '\x{6A85}\x{6A87}\x{6A88}\x{6A89}\x{6A8B}\x{6A8C}\x{6A8D}\x{6A8E}\x{6A90}' .
-          '\x{6A91}\x{6A92}\x{6A93}\x{6A94}\x{6A95}\x{6A96}\x{6A97}\x{6A98}\x{6A9A}' .
-          '\x{6A9B}\x{6A9C}\x{6A9E}\x{6A9F}\x{6AA0}\x{6AA1}\x{6AA2}\x{6AA3}\x{6AA4}' .
-          '\x{6AA5}\x{6AA6}\x{6AA7}\x{6AA8}\x{6AA9}\x{6AAB}\x{6AAC}\x{6AAD}\x{6AAE}' .
-          '\x{6AAF}\x{6AB0}\x{6AB2}\x{6AB3}\x{6AB4}\x{6AB5}\x{6AB6}\x{6AB7}\x{6AB8}' .
-          '\x{6AB9}\x{6ABA}\x{6ABB}\x{6ABC}\x{6ABD}\x{6ABF}\x{6AC1}\x{6AC2}\x{6AC3}' .
-          '\x{6AC5}\x{6AC6}\x{6AC7}\x{6ACA}\x{6ACB}\x{6ACC}\x{6ACD}\x{6ACE}\x{6ACF}' .
-          '\x{6AD0}\x{6AD1}\x{6AD2}\x{6AD3}\x{6AD4}\x{6AD5}\x{6AD6}\x{6AD7}\x{6AD9}' .
-          '\x{6ADA}\x{6ADB}\x{6ADC}\x{6ADD}\x{6ADE}\x{6ADF}\x{6AE0}\x{6AE1}\x{6AE2}' .
-          '\x{6AE3}\x{6AE4}\x{6AE5}\x{6AE6}\x{6AE7}\x{6AE8}\x{6AEA}\x{6AEB}\x{6AEC}' .
-          '\x{6AED}\x{6AEE}\x{6AEF}\x{6AF0}\x{6AF1}\x{6AF2}\x{6AF3}\x{6AF4}\x{6AF5}' .
-          '\x{6AF6}\x{6AF7}\x{6AF8}\x{6AF9}\x{6AFA}\x{6AFB}\x{6AFC}\x{6AFD}\x{6AFE}' .
-          '\x{6AFF}\x{6B00}\x{6B01}\x{6B02}\x{6B03}\x{6B04}\x{6B05}\x{6B06}\x{6B07}' .
-          '\x{6B08}\x{6B09}\x{6B0A}\x{6B0B}\x{6B0C}\x{6B0D}\x{6B0F}\x{6B10}\x{6B11}' .
-          '\x{6B12}\x{6B13}\x{6B14}\x{6B15}\x{6B16}\x{6B17}\x{6B18}\x{6B19}\x{6B1A}' .
-          '\x{6B1C}\x{6B1D}\x{6B1E}\x{6B1F}\x{6B20}\x{6B21}\x{6B22}\x{6B23}\x{6B24}' .
-          '\x{6B25}\x{6B26}\x{6B27}\x{6B28}\x{6B29}\x{6B2A}\x{6B2B}\x{6B2C}\x{6B2D}' .
-          '\x{6B2F}\x{6B30}\x{6B31}\x{6B32}\x{6B33}\x{6B34}\x{6B36}\x{6B37}\x{6B38}' .
-          '\x{6B39}\x{6B3A}\x{6B3B}\x{6B3C}\x{6B3D}\x{6B3E}\x{6B3F}\x{6B41}\x{6B42}' .
-          '\x{6B43}\x{6B44}\x{6B45}\x{6B46}\x{6B47}\x{6B48}\x{6B49}\x{6B4A}\x{6B4B}' .
-          '\x{6B4C}\x{6B4D}\x{6B4E}\x{6B4F}\x{6B50}\x{6B51}\x{6B52}\x{6B53}\x{6B54}' .
-          '\x{6B55}\x{6B56}\x{6B59}\x{6B5A}\x{6B5B}\x{6B5C}\x{6B5E}\x{6B5F}\x{6B60}' .
-          '\x{6B61}\x{6B62}\x{6B63}\x{6B64}\x{6B65}\x{6B66}\x{6B67}\x{6B69}\x{6B6A}' .
-          '\x{6B6B}\x{6B6D}\x{6B6F}\x{6B70}\x{6B72}\x{6B73}\x{6B74}\x{6B76}\x{6B77}' .
-          '\x{6B78}\x{6B79}\x{6B7A}\x{6B7B}\x{6B7C}\x{6B7E}\x{6B7F}\x{6B80}\x{6B81}' .
-          '\x{6B82}\x{6B83}\x{6B84}\x{6B85}\x{6B86}\x{6B87}\x{6B88}\x{6B89}\x{6B8A}' .
-          '\x{6B8B}\x{6B8C}\x{6B8D}\x{6B8E}\x{6B8F}\x{6B90}\x{6B91}\x{6B92}\x{6B93}' .
-          '\x{6B94}\x{6B95}\x{6B96}\x{6B97}\x{6B98}\x{6B99}\x{6B9A}\x{6B9B}\x{6B9C}' .
-          '\x{6B9D}\x{6B9E}\x{6B9F}\x{6BA0}\x{6BA1}\x{6BA2}\x{6BA3}\x{6BA4}\x{6BA5}' .
-          '\x{6BA6}\x{6BA7}\x{6BA8}\x{6BA9}\x{6BAA}\x{6BAB}\x{6BAC}\x{6BAD}\x{6BAE}' .
-          '\x{6BAF}\x{6BB0}\x{6BB2}\x{6BB3}\x{6BB4}\x{6BB5}\x{6BB6}\x{6BB7}\x{6BB9}' .
-          '\x{6BBA}\x{6BBB}\x{6BBC}\x{6BBD}\x{6BBE}\x{6BBF}\x{6BC0}\x{6BC1}\x{6BC2}' .
-          '\x{6BC3}\x{6BC4}\x{6BC5}\x{6BC6}\x{6BC7}\x{6BC8}\x{6BC9}\x{6BCA}\x{6BCB}' .
-          '\x{6BCC}\x{6BCD}\x{6BCE}\x{6BCF}\x{6BD0}\x{6BD1}\x{6BD2}\x{6BD3}\x{6BD4}' .
-          '\x{6BD5}\x{6BD6}\x{6BD7}\x{6BD8}\x{6BD9}\x{6BDA}\x{6BDB}\x{6BDC}\x{6BDD}' .
-          '\x{6BDE}\x{6BDF}\x{6BE0}\x{6BE1}\x{6BE2}\x{6BE3}\x{6BE4}\x{6BE5}\x{6BE6}' .
-          '\x{6BE7}\x{6BE8}\x{6BEA}\x{6BEB}\x{6BEC}\x{6BED}\x{6BEE}\x{6BEF}\x{6BF0}' .
-          '\x{6BF2}\x{6BF3}\x{6BF5}\x{6BF6}\x{6BF7}\x{6BF8}\x{6BF9}\x{6BFB}\x{6BFC}' .
-          '\x{6BFD}\x{6BFE}\x{6BFF}\x{6C00}\x{6C01}\x{6C02}\x{6C03}\x{6C04}\x{6C05}' .
-          '\x{6C06}\x{6C07}\x{6C08}\x{6C09}\x{6C0B}\x{6C0C}\x{6C0D}\x{6C0E}\x{6C0F}' .
-          '\x{6C10}\x{6C11}\x{6C12}\x{6C13}\x{6C14}\x{6C15}\x{6C16}\x{6C18}\x{6C19}' .
-          '\x{6C1A}\x{6C1B}\x{6C1D}\x{6C1E}\x{6C1F}\x{6C20}\x{6C21}\x{6C22}\x{6C23}' .
-          '\x{6C24}\x{6C25}\x{6C26}\x{6C27}\x{6C28}\x{6C29}\x{6C2A}\x{6C2B}\x{6C2C}' .
-          '\x{6C2E}\x{6C2F}\x{6C30}\x{6C31}\x{6C32}\x{6C33}\x{6C34}\x{6C35}\x{6C36}' .
-          '\x{6C37}\x{6C38}\x{6C3A}\x{6C3B}\x{6C3D}\x{6C3E}\x{6C3F}\x{6C40}\x{6C41}' .
-          '\x{6C42}\x{6C43}\x{6C44}\x{6C46}\x{6C47}\x{6C48}\x{6C49}\x{6C4A}\x{6C4B}' .
-          '\x{6C4C}\x{6C4D}\x{6C4E}\x{6C4F}\x{6C50}\x{6C51}\x{6C52}\x{6C53}\x{6C54}' .
-          '\x{6C55}\x{6C56}\x{6C57}\x{6C58}\x{6C59}\x{6C5A}\x{6C5B}\x{6C5C}\x{6C5D}' .
-          '\x{6C5E}\x{6C5F}\x{6C60}\x{6C61}\x{6C62}\x{6C63}\x{6C64}\x{6C65}\x{6C66}' .
-          '\x{6C67}\x{6C68}\x{6C69}\x{6C6A}\x{6C6B}\x{6C6D}\x{6C6F}\x{6C70}\x{6C71}' .
-          '\x{6C72}\x{6C73}\x{6C74}\x{6C75}\x{6C76}\x{6C77}\x{6C78}\x{6C79}\x{6C7A}' .
-          '\x{6C7B}\x{6C7C}\x{6C7D}\x{6C7E}\x{6C7F}\x{6C80}\x{6C81}\x{6C82}\x{6C83}' .
-          '\x{6C84}\x{6C85}\x{6C86}\x{6C87}\x{6C88}\x{6C89}\x{6C8A}\x{6C8B}\x{6C8C}' .
-          '\x{6C8D}\x{6C8E}\x{6C8F}\x{6C90}\x{6C91}\x{6C92}\x{6C93}\x{6C94}\x{6C95}' .
-          '\x{6C96}\x{6C97}\x{6C98}\x{6C99}\x{6C9A}\x{6C9B}\x{6C9C}\x{6C9D}\x{6C9E}' .
-          '\x{6C9F}\x{6CA1}\x{6CA2}\x{6CA3}\x{6CA4}\x{6CA5}\x{6CA6}\x{6CA7}\x{6CA8}' .
-          '\x{6CA9}\x{6CAA}\x{6CAB}\x{6CAC}\x{6CAD}\x{6CAE}\x{6CAF}\x{6CB0}\x{6CB1}' .
-          '\x{6CB2}\x{6CB3}\x{6CB4}\x{6CB5}\x{6CB6}\x{6CB7}\x{6CB8}\x{6CB9}\x{6CBA}' .
-          '\x{6CBB}\x{6CBC}\x{6CBD}\x{6CBE}\x{6CBF}\x{6CC0}\x{6CC1}\x{6CC2}\x{6CC3}' .
-          '\x{6CC4}\x{6CC5}\x{6CC6}\x{6CC7}\x{6CC8}\x{6CC9}\x{6CCA}\x{6CCB}\x{6CCC}' .
-          '\x{6CCD}\x{6CCE}\x{6CCF}\x{6CD0}\x{6CD1}\x{6CD2}\x{6CD3}\x{6CD4}\x{6CD5}' .
-          '\x{6CD6}\x{6CD7}\x{6CD9}\x{6CDA}\x{6CDB}\x{6CDC}\x{6CDD}\x{6CDE}\x{6CDF}' .
-          '\x{6CE0}\x{6CE1}\x{6CE2}\x{6CE3}\x{6CE4}\x{6CE5}\x{6CE6}\x{6CE7}\x{6CE8}' .
-          '\x{6CE9}\x{6CEA}\x{6CEB}\x{6CEC}\x{6CED}\x{6CEE}\x{6CEF}\x{6CF0}\x{6CF1}' .
-          '\x{6CF2}\x{6CF3}\x{6CF5}\x{6CF6}\x{6CF7}\x{6CF8}\x{6CF9}\x{6CFA}\x{6CFB}' .
-          '\x{6CFC}\x{6CFD}\x{6CFE}\x{6CFF}\x{6D00}\x{6D01}\x{6D03}\x{6D04}\x{6D05}' .
-          '\x{6D06}\x{6D07}\x{6D08}\x{6D09}\x{6D0A}\x{6D0B}\x{6D0C}\x{6D0D}\x{6D0E}' .
-          '\x{6D0F}\x{6D10}\x{6D11}\x{6D12}\x{6D13}\x{6D14}\x{6D15}\x{6D16}\x{6D17}' .
-          '\x{6D18}\x{6D19}\x{6D1A}\x{6D1B}\x{6D1D}\x{6D1E}\x{6D1F}\x{6D20}\x{6D21}' .
-          '\x{6D22}\x{6D23}\x{6D25}\x{6D26}\x{6D27}\x{6D28}\x{6D29}\x{6D2A}\x{6D2B}' .
-          '\x{6D2C}\x{6D2D}\x{6D2E}\x{6D2F}\x{6D30}\x{6D31}\x{6D32}\x{6D33}\x{6D34}' .
-          '\x{6D35}\x{6D36}\x{6D37}\x{6D38}\x{6D39}\x{6D3A}\x{6D3B}\x{6D3C}\x{6D3D}' .
-          '\x{6D3E}\x{6D3F}\x{6D40}\x{6D41}\x{6D42}\x{6D43}\x{6D44}\x{6D45}\x{6D46}' .
-          '\x{6D47}\x{6D48}\x{6D49}\x{6D4A}\x{6D4B}\x{6D4C}\x{6D4D}\x{6D4E}\x{6D4F}' .
-          '\x{6D50}\x{6D51}\x{6D52}\x{6D53}\x{6D54}\x{6D55}\x{6D56}\x{6D57}\x{6D58}' .
-          '\x{6D59}\x{6D5A}\x{6D5B}\x{6D5C}\x{6D5D}\x{6D5E}\x{6D5F}\x{6D60}\x{6D61}' .
-          '\x{6D62}\x{6D63}\x{6D64}\x{6D65}\x{6D66}\x{6D67}\x{6D68}\x{6D69}\x{6D6A}' .
-          '\x{6D6B}\x{6D6C}\x{6D6D}\x{6D6E}\x{6D6F}\x{6D70}\x{6D72}\x{6D73}\x{6D74}' .
-          '\x{6D75}\x{6D76}\x{6D77}\x{6D78}\x{6D79}\x{6D7A}\x{6D7B}\x{6D7C}\x{6D7D}' .
-          '\x{6D7E}\x{6D7F}\x{6D80}\x{6D82}\x{6D83}\x{6D84}\x{6D85}\x{6D86}\x{6D87}' .
-          '\x{6D88}\x{6D89}\x{6D8A}\x{6D8B}\x{6D8C}\x{6D8D}\x{6D8E}\x{6D8F}\x{6D90}' .
-          '\x{6D91}\x{6D92}\x{6D93}\x{6D94}\x{6D95}\x{6D97}\x{6D98}\x{6D99}\x{6D9A}' .
-          '\x{6D9B}\x{6D9D}\x{6D9E}\x{6D9F}\x{6DA0}\x{6DA1}\x{6DA2}\x{6DA3}\x{6DA4}' .
-          '\x{6DA5}\x{6DA6}\x{6DA7}\x{6DA8}\x{6DA9}\x{6DAA}\x{6DAB}\x{6DAC}\x{6DAD}' .
-          '\x{6DAE}\x{6DAF}\x{6DB2}\x{6DB3}\x{6DB4}\x{6DB5}\x{6DB7}\x{6DB8}\x{6DB9}' .
-          '\x{6DBA}\x{6DBB}\x{6DBC}\x{6DBD}\x{6DBE}\x{6DBF}\x{6DC0}\x{6DC1}\x{6DC2}' .
-          '\x{6DC3}\x{6DC4}\x{6DC5}\x{6DC6}\x{6DC7}\x{6DC8}\x{6DC9}\x{6DCA}\x{6DCB}' .
-          '\x{6DCC}\x{6DCD}\x{6DCE}\x{6DCF}\x{6DD0}\x{6DD1}\x{6DD2}\x{6DD3}\x{6DD4}' .
-          '\x{6DD5}\x{6DD6}\x{6DD7}\x{6DD8}\x{6DD9}\x{6DDA}\x{6DDB}\x{6DDC}\x{6DDD}' .
-          '\x{6DDE}\x{6DDF}\x{6DE0}\x{6DE1}\x{6DE2}\x{6DE3}\x{6DE4}\x{6DE5}\x{6DE6}' .
-          '\x{6DE7}\x{6DE8}\x{6DE9}\x{6DEA}\x{6DEB}\x{6DEC}\x{6DED}\x{6DEE}\x{6DEF}' .
-          '\x{6DF0}\x{6DF1}\x{6DF2}\x{6DF3}\x{6DF4}\x{6DF5}\x{6DF6}\x{6DF7}\x{6DF8}' .
-          '\x{6DF9}\x{6DFA}\x{6DFB}\x{6DFC}\x{6DFD}\x{6E00}\x{6E03}\x{6E04}\x{6E05}' .
-          '\x{6E07}\x{6E08}\x{6E09}\x{6E0A}\x{6E0B}\x{6E0C}\x{6E0D}\x{6E0E}\x{6E0F}' .
-          '\x{6E10}\x{6E11}\x{6E14}\x{6E15}\x{6E16}\x{6E17}\x{6E19}\x{6E1A}\x{6E1B}' .
-          '\x{6E1C}\x{6E1D}\x{6E1E}\x{6E1F}\x{6E20}\x{6E21}\x{6E22}\x{6E23}\x{6E24}' .
-          '\x{6E25}\x{6E26}\x{6E27}\x{6E28}\x{6E29}\x{6E2B}\x{6E2C}\x{6E2D}\x{6E2E}' .
-          '\x{6E2F}\x{6E30}\x{6E31}\x{6E32}\x{6E33}\x{6E34}\x{6E35}\x{6E36}\x{6E37}' .
-          '\x{6E38}\x{6E39}\x{6E3A}\x{6E3B}\x{6E3C}\x{6E3D}\x{6E3E}\x{6E3F}\x{6E40}' .
-          '\x{6E41}\x{6E42}\x{6E43}\x{6E44}\x{6E45}\x{6E46}\x{6E47}\x{6E48}\x{6E49}' .
-          '\x{6E4A}\x{6E4B}\x{6E4D}\x{6E4E}\x{6E4F}\x{6E50}\x{6E51}\x{6E52}\x{6E53}' .
-          '\x{6E54}\x{6E55}\x{6E56}\x{6E57}\x{6E58}\x{6E59}\x{6E5A}\x{6E5B}\x{6E5C}' .
-          '\x{6E5D}\x{6E5E}\x{6E5F}\x{6E60}\x{6E61}\x{6E62}\x{6E63}\x{6E64}\x{6E65}' .
-          '\x{6E66}\x{6E67}\x{6E68}\x{6E69}\x{6E6A}\x{6E6B}\x{6E6D}\x{6E6E}\x{6E6F}' .
-          '\x{6E70}\x{6E71}\x{6E72}\x{6E73}\x{6E74}\x{6E75}\x{6E77}\x{6E78}\x{6E79}' .
-          '\x{6E7E}\x{6E7F}\x{6E80}\x{6E81}\x{6E82}\x{6E83}\x{6E84}\x{6E85}\x{6E86}' .
-          '\x{6E87}\x{6E88}\x{6E89}\x{6E8A}\x{6E8D}\x{6E8E}\x{6E8F}\x{6E90}\x{6E91}' .
-          '\x{6E92}\x{6E93}\x{6E94}\x{6E96}\x{6E97}\x{6E98}\x{6E99}\x{6E9A}\x{6E9B}' .
-          '\x{6E9C}\x{6E9D}\x{6E9E}\x{6E9F}\x{6EA0}\x{6EA1}\x{6EA2}\x{6EA3}\x{6EA4}' .
-          '\x{6EA5}\x{6EA6}\x{6EA7}\x{6EA8}\x{6EA9}\x{6EAA}\x{6EAB}\x{6EAC}\x{6EAD}' .
-          '\x{6EAE}\x{6EAF}\x{6EB0}\x{6EB1}\x{6EB2}\x{6EB3}\x{6EB4}\x{6EB5}\x{6EB6}' .
-          '\x{6EB7}\x{6EB8}\x{6EB9}\x{6EBA}\x{6EBB}\x{6EBC}\x{6EBD}\x{6EBE}\x{6EBF}' .
-          '\x{6EC0}\x{6EC1}\x{6EC2}\x{6EC3}\x{6EC4}\x{6EC5}\x{6EC6}\x{6EC7}\x{6EC8}' .
-          '\x{6EC9}\x{6ECA}\x{6ECB}\x{6ECC}\x{6ECD}\x{6ECE}\x{6ECF}\x{6ED0}\x{6ED1}' .
-          '\x{6ED2}\x{6ED3}\x{6ED4}\x{6ED5}\x{6ED6}\x{6ED7}\x{6ED8}\x{6ED9}\x{6EDA}' .
-          '\x{6EDC}\x{6EDE}\x{6EDF}\x{6EE0}\x{6EE1}\x{6EE2}\x{6EE4}\x{6EE5}\x{6EE6}' .
-          '\x{6EE7}\x{6EE8}\x{6EE9}\x{6EEA}\x{6EEB}\x{6EEC}\x{6EED}\x{6EEE}\x{6EEF}' .
-          '\x{6EF0}\x{6EF1}\x{6EF2}\x{6EF3}\x{6EF4}\x{6EF5}\x{6EF6}\x{6EF7}\x{6EF8}' .
-          '\x{6EF9}\x{6EFA}\x{6EFB}\x{6EFC}\x{6EFD}\x{6EFE}\x{6EFF}\x{6F00}\x{6F01}' .
-          '\x{6F02}\x{6F03}\x{6F05}\x{6F06}\x{6F07}\x{6F08}\x{6F09}\x{6F0A}\x{6F0C}' .
-          '\x{6F0D}\x{6F0E}\x{6F0F}\x{6F10}\x{6F11}\x{6F12}\x{6F13}\x{6F14}\x{6F15}' .
-          '\x{6F16}\x{6F17}\x{6F18}\x{6F19}\x{6F1A}\x{6F1B}\x{6F1C}\x{6F1D}\x{6F1E}' .
-          '\x{6F1F}\x{6F20}\x{6F21}\x{6F22}\x{6F23}\x{6F24}\x{6F25}\x{6F26}\x{6F27}' .
-          '\x{6F28}\x{6F29}\x{6F2A}\x{6F2B}\x{6F2C}\x{6F2D}\x{6F2E}\x{6F2F}\x{6F30}' .
-          '\x{6F31}\x{6F32}\x{6F33}\x{6F34}\x{6F35}\x{6F36}\x{6F37}\x{6F38}\x{6F39}' .
-          '\x{6F3A}\x{6F3B}\x{6F3C}\x{6F3D}\x{6F3E}\x{6F3F}\x{6F40}\x{6F41}\x{6F43}' .
-          '\x{6F44}\x{6F45}\x{6F46}\x{6F47}\x{6F49}\x{6F4B}\x{6F4C}\x{6F4D}\x{6F4E}' .
-          '\x{6F4F}\x{6F50}\x{6F51}\x{6F52}\x{6F53}\x{6F54}\x{6F55}\x{6F56}\x{6F57}' .
-          '\x{6F58}\x{6F59}\x{6F5A}\x{6F5B}\x{6F5C}\x{6F5D}\x{6F5E}\x{6F5F}\x{6F60}' .
-          '\x{6F61}\x{6F62}\x{6F63}\x{6F64}\x{6F65}\x{6F66}\x{6F67}\x{6F68}\x{6F69}' .
-          '\x{6F6A}\x{6F6B}\x{6F6C}\x{6F6D}\x{6F6E}\x{6F6F}\x{6F70}\x{6F71}\x{6F72}' .
-          '\x{6F73}\x{6F74}\x{6F75}\x{6F76}\x{6F77}\x{6F78}\x{6F7A}\x{6F7B}\x{6F7C}' .
-          '\x{6F7D}\x{6F7E}\x{6F7F}\x{6F80}\x{6F81}\x{6F82}\x{6F83}\x{6F84}\x{6F85}' .
-          '\x{6F86}\x{6F87}\x{6F88}\x{6F89}\x{6F8A}\x{6F8B}\x{6F8C}\x{6F8D}\x{6F8E}' .
-          '\x{6F8F}\x{6F90}\x{6F91}\x{6F92}\x{6F93}\x{6F94}\x{6F95}\x{6F96}\x{6F97}' .
-          '\x{6F99}\x{6F9B}\x{6F9C}\x{6F9D}\x{6F9E}\x{6FA0}\x{6FA1}\x{6FA2}\x{6FA3}' .
-          '\x{6FA4}\x{6FA5}\x{6FA6}\x{6FA7}\x{6FA8}\x{6FA9}\x{6FAA}\x{6FAB}\x{6FAC}' .
-          '\x{6FAD}\x{6FAE}\x{6FAF}\x{6FB0}\x{6FB1}\x{6FB2}\x{6FB3}\x{6FB4}\x{6FB5}' .
-          '\x{6FB6}\x{6FB8}\x{6FB9}\x{6FBA}\x{6FBB}\x{6FBC}\x{6FBD}\x{6FBE}\x{6FBF}' .
-          '\x{6FC0}\x{6FC1}\x{6FC2}\x{6FC3}\x{6FC4}\x{6FC6}\x{6FC7}\x{6FC8}\x{6FC9}' .
-          '\x{6FCA}\x{6FCB}\x{6FCC}\x{6FCD}\x{6FCE}\x{6FCF}\x{6FD1}\x{6FD2}\x{6FD4}' .
-          '\x{6FD5}\x{6FD6}\x{6FD7}\x{6FD8}\x{6FD9}\x{6FDA}\x{6FDB}\x{6FDC}\x{6FDD}' .
-          '\x{6FDE}\x{6FDF}\x{6FE0}\x{6FE1}\x{6FE2}\x{6FE3}\x{6FE4}\x{6FE5}\x{6FE6}' .
-          '\x{6FE7}\x{6FE8}\x{6FE9}\x{6FEA}\x{6FEB}\x{6FEC}\x{6FED}\x{6FEE}\x{6FEF}' .
-          '\x{6FF0}\x{6FF1}\x{6FF2}\x{6FF3}\x{6FF4}\x{6FF6}\x{6FF7}\x{6FF8}\x{6FF9}' .
-          '\x{6FFA}\x{6FFB}\x{6FFC}\x{6FFE}\x{6FFF}\x{7000}\x{7001}\x{7002}\x{7003}' .
-          '\x{7004}\x{7005}\x{7006}\x{7007}\x{7008}\x{7009}\x{700A}\x{700B}\x{700C}' .
-          '\x{700D}\x{700E}\x{700F}\x{7011}\x{7012}\x{7014}\x{7015}\x{7016}\x{7017}' .
-          '\x{7018}\x{7019}\x{701A}\x{701B}\x{701C}\x{701D}\x{701F}\x{7020}\x{7021}' .
-          '\x{7022}\x{7023}\x{7024}\x{7025}\x{7026}\x{7027}\x{7028}\x{7029}\x{702A}' .
-          '\x{702B}\x{702C}\x{702D}\x{702E}\x{702F}\x{7030}\x{7031}\x{7032}\x{7033}' .
-          '\x{7034}\x{7035}\x{7036}\x{7037}\x{7038}\x{7039}\x{703A}\x{703B}\x{703C}' .
-          '\x{703D}\x{703E}\x{703F}\x{7040}\x{7041}\x{7042}\x{7043}\x{7044}\x{7045}' .
-          '\x{7046}\x{7048}\x{7049}\x{704A}\x{704C}\x{704D}\x{704F}\x{7050}\x{7051}' .
-          '\x{7052}\x{7053}\x{7054}\x{7055}\x{7056}\x{7057}\x{7058}\x{7059}\x{705A}' .
-          '\x{705B}\x{705C}\x{705D}\x{705E}\x{705F}\x{7060}\x{7061}\x{7062}\x{7063}' .
-          '\x{7064}\x{7065}\x{7066}\x{7067}\x{7068}\x{7069}\x{706A}\x{706B}\x{706C}' .
-          '\x{706D}\x{706E}\x{706F}\x{7070}\x{7071}\x{7074}\x{7075}\x{7076}\x{7077}' .
-          '\x{7078}\x{7079}\x{707A}\x{707C}\x{707D}\x{707E}\x{707F}\x{7080}\x{7082}' .
-          '\x{7083}\x{7084}\x{7085}\x{7086}\x{7087}\x{7088}\x{7089}\x{708A}\x{708B}' .
-          '\x{708C}\x{708E}\x{708F}\x{7090}\x{7091}\x{7092}\x{7093}\x{7094}\x{7095}' .
-          '\x{7096}\x{7098}\x{7099}\x{709A}\x{709C}\x{709D}\x{709E}\x{709F}\x{70A0}' .
-          '\x{70A1}\x{70A2}\x{70A3}\x{70A4}\x{70A5}\x{70A6}\x{70A7}\x{70A8}\x{70A9}' .
-          '\x{70AB}\x{70AC}\x{70AD}\x{70AE}\x{70AF}\x{70B0}\x{70B1}\x{70B3}\x{70B4}' .
-          '\x{70B5}\x{70B7}\x{70B8}\x{70B9}\x{70BA}\x{70BB}\x{70BC}\x{70BD}\x{70BE}' .
-          '\x{70BF}\x{70C0}\x{70C1}\x{70C2}\x{70C3}\x{70C4}\x{70C5}\x{70C6}\x{70C7}' .
-          '\x{70C8}\x{70C9}\x{70CA}\x{70CB}\x{70CC}\x{70CD}\x{70CE}\x{70CF}\x{70D0}' .
-          '\x{70D1}\x{70D2}\x{70D3}\x{70D4}\x{70D6}\x{70D7}\x{70D8}\x{70D9}\x{70DA}' .
-          '\x{70DB}\x{70DC}\x{70DD}\x{70DE}\x{70DF}\x{70E0}\x{70E1}\x{70E2}\x{70E3}' .
-          '\x{70E4}\x{70E5}\x{70E6}\x{70E7}\x{70E8}\x{70E9}\x{70EA}\x{70EB}\x{70EC}' .
-          '\x{70ED}\x{70EE}\x{70EF}\x{70F0}\x{70F1}\x{70F2}\x{70F3}\x{70F4}\x{70F5}' .
-          '\x{70F6}\x{70F7}\x{70F8}\x{70F9}\x{70FA}\x{70FB}\x{70FC}\x{70FD}\x{70FF}' .
-          '\x{7100}\x{7101}\x{7102}\x{7103}\x{7104}\x{7105}\x{7106}\x{7107}\x{7109}' .
-          '\x{710A}\x{710B}\x{710C}\x{710D}\x{710E}\x{710F}\x{7110}\x{7111}\x{7112}' .
-          '\x{7113}\x{7115}\x{7116}\x{7117}\x{7118}\x{7119}\x{711A}\x{711B}\x{711C}' .
-          '\x{711D}\x{711E}\x{711F}\x{7120}\x{7121}\x{7122}\x{7123}\x{7125}\x{7126}' .
-          '\x{7127}\x{7128}\x{7129}\x{712A}\x{712B}\x{712C}\x{712D}\x{712E}\x{712F}' .
-          '\x{7130}\x{7131}\x{7132}\x{7135}\x{7136}\x{7137}\x{7138}\x{7139}\x{713A}' .
-          '\x{713B}\x{713D}\x{713E}\x{713F}\x{7140}\x{7141}\x{7142}\x{7143}\x{7144}' .
-          '\x{7145}\x{7146}\x{7147}\x{7148}\x{7149}\x{714A}\x{714B}\x{714C}\x{714D}' .
-          '\x{714E}\x{714F}\x{7150}\x{7151}\x{7152}\x{7153}\x{7154}\x{7156}\x{7158}' .
-          '\x{7159}\x{715A}\x{715B}\x{715C}\x{715D}\x{715E}\x{715F}\x{7160}\x{7161}' .
-          '\x{7162}\x{7163}\x{7164}\x{7165}\x{7166}\x{7167}\x{7168}\x{7169}\x{716A}' .
-          '\x{716C}\x{716E}\x{716F}\x{7170}\x{7171}\x{7172}\x{7173}\x{7174}\x{7175}' .
-          '\x{7176}\x{7177}\x{7178}\x{7179}\x{717A}\x{717B}\x{717C}\x{717D}\x{717E}' .
-          '\x{717F}\x{7180}\x{7181}\x{7182}\x{7183}\x{7184}\x{7185}\x{7186}\x{7187}' .
-          '\x{7188}\x{7189}\x{718A}\x{718B}\x{718C}\x{718E}\x{718F}\x{7190}\x{7191}' .
-          '\x{7192}\x{7193}\x{7194}\x{7195}\x{7197}\x{7198}\x{7199}\x{719A}\x{719B}' .
-          '\x{719C}\x{719D}\x{719E}\x{719F}\x{71A0}\x{71A1}\x{71A2}\x{71A3}\x{71A4}' .
-          '\x{71A5}\x{71A7}\x{71A8}\x{71A9}\x{71AA}\x{71AC}\x{71AD}\x{71AE}\x{71AF}' .
-          '\x{71B0}\x{71B1}\x{71B2}\x{71B3}\x{71B4}\x{71B5}\x{71B7}\x{71B8}\x{71B9}' .
-          '\x{71BA}\x{71BB}\x{71BC}\x{71BD}\x{71BE}\x{71BF}\x{71C0}\x{71C1}\x{71C2}' .
-          '\x{71C3}\x{71C4}\x{71C5}\x{71C6}\x{71C7}\x{71C8}\x{71C9}\x{71CA}\x{71CB}' .
-          '\x{71CD}\x{71CE}\x{71CF}\x{71D0}\x{71D1}\x{71D2}\x{71D4}\x{71D5}\x{71D6}' .
-          '\x{71D7}\x{71D8}\x{71D9}\x{71DA}\x{71DB}\x{71DC}\x{71DD}\x{71DE}\x{71DF}' .
-          '\x{71E0}\x{71E1}\x{71E2}\x{71E3}\x{71E4}\x{71E5}\x{71E6}\x{71E7}\x{71E8}' .
-          '\x{71E9}\x{71EA}\x{71EB}\x{71EC}\x{71ED}\x{71EE}\x{71EF}\x{71F0}\x{71F1}' .
-          '\x{71F2}\x{71F4}\x{71F5}\x{71F6}\x{71F7}\x{71F8}\x{71F9}\x{71FB}\x{71FC}' .
-          '\x{71FD}\x{71FE}\x{71FF}\x{7201}\x{7202}\x{7203}\x{7204}\x{7205}\x{7206}' .
-          '\x{7207}\x{7208}\x{7209}\x{720A}\x{720C}\x{720D}\x{720E}\x{720F}\x{7210}' .
-          '\x{7212}\x{7213}\x{7214}\x{7216}\x{7218}\x{7219}\x{721A}\x{721B}\x{721C}' .
-          '\x{721D}\x{721E}\x{721F}\x{7221}\x{7222}\x{7223}\x{7226}\x{7227}\x{7228}' .
-          '\x{7229}\x{722A}\x{722B}\x{722C}\x{722D}\x{722E}\x{7230}\x{7231}\x{7232}' .
-          '\x{7233}\x{7235}\x{7236}\x{7237}\x{7238}\x{7239}\x{723A}\x{723B}\x{723C}' .
-          '\x{723D}\x{723E}\x{723F}\x{7240}\x{7241}\x{7242}\x{7243}\x{7244}\x{7246}' .
-          '\x{7247}\x{7248}\x{7249}\x{724A}\x{724B}\x{724C}\x{724D}\x{724F}\x{7251}' .
-          '\x{7252}\x{7253}\x{7254}\x{7256}\x{7257}\x{7258}\x{7259}\x{725A}\x{725B}' .
-          '\x{725C}\x{725D}\x{725E}\x{725F}\x{7260}\x{7261}\x{7262}\x{7263}\x{7264}' .
-          '\x{7265}\x{7266}\x{7267}\x{7268}\x{7269}\x{726A}\x{726B}\x{726C}\x{726D}' .
-          '\x{726E}\x{726F}\x{7270}\x{7271}\x{7272}\x{7273}\x{7274}\x{7275}\x{7276}' .
-          '\x{7277}\x{7278}\x{7279}\x{727A}\x{727B}\x{727C}\x{727D}\x{727E}\x{727F}' .
-          '\x{7280}\x{7281}\x{7282}\x{7283}\x{7284}\x{7285}\x{7286}\x{7287}\x{7288}' .
-          '\x{7289}\x{728A}\x{728B}\x{728C}\x{728D}\x{728E}\x{728F}\x{7290}\x{7291}' .
-          '\x{7292}\x{7293}\x{7294}\x{7295}\x{7296}\x{7297}\x{7298}\x{7299}\x{729A}' .
-          '\x{729B}\x{729C}\x{729D}\x{729E}\x{729F}\x{72A1}\x{72A2}\x{72A3}\x{72A4}' .
-          '\x{72A5}\x{72A6}\x{72A7}\x{72A8}\x{72A9}\x{72AA}\x{72AC}\x{72AD}\x{72AE}' .
-          '\x{72AF}\x{72B0}\x{72B1}\x{72B2}\x{72B3}\x{72B4}\x{72B5}\x{72B6}\x{72B7}' .
-          '\x{72B8}\x{72B9}\x{72BA}\x{72BB}\x{72BC}\x{72BD}\x{72BF}\x{72C0}\x{72C1}' .
-          '\x{72C2}\x{72C3}\x{72C4}\x{72C5}\x{72C6}\x{72C7}\x{72C8}\x{72C9}\x{72CA}' .
-          '\x{72CB}\x{72CC}\x{72CD}\x{72CE}\x{72CF}\x{72D0}\x{72D1}\x{72D2}\x{72D3}' .
-          '\x{72D4}\x{72D5}\x{72D6}\x{72D7}\x{72D8}\x{72D9}\x{72DA}\x{72DB}\x{72DC}' .
-          '\x{72DD}\x{72DE}\x{72DF}\x{72E0}\x{72E1}\x{72E2}\x{72E3}\x{72E4}\x{72E5}' .
-          '\x{72E6}\x{72E7}\x{72E8}\x{72E9}\x{72EA}\x{72EB}\x{72EC}\x{72ED}\x{72EE}' .
-          '\x{72EF}\x{72F0}\x{72F1}\x{72F2}\x{72F3}\x{72F4}\x{72F5}\x{72F6}\x{72F7}' .
-          '\x{72F8}\x{72F9}\x{72FA}\x{72FB}\x{72FC}\x{72FD}\x{72FE}\x{72FF}\x{7300}' .
-          '\x{7301}\x{7303}\x{7304}\x{7305}\x{7306}\x{7307}\x{7308}\x{7309}\x{730A}' .
-          '\x{730B}\x{730C}\x{730D}\x{730E}\x{730F}\x{7311}\x{7312}\x{7313}\x{7314}' .
-          '\x{7315}\x{7316}\x{7317}\x{7318}\x{7319}\x{731A}\x{731B}\x{731C}\x{731D}' .
-          '\x{731E}\x{7320}\x{7321}\x{7322}\x{7323}\x{7324}\x{7325}\x{7326}\x{7327}' .
-          '\x{7329}\x{732A}\x{732B}\x{732C}\x{732D}\x{732E}\x{7330}\x{7331}\x{7332}' .
-          '\x{7333}\x{7334}\x{7335}\x{7336}\x{7337}\x{7338}\x{7339}\x{733A}\x{733B}' .
-          '\x{733C}\x{733D}\x{733E}\x{733F}\x{7340}\x{7341}\x{7342}\x{7343}\x{7344}' .
-          '\x{7345}\x{7346}\x{7347}\x{7348}\x{7349}\x{734A}\x{734B}\x{734C}\x{734D}' .
-          '\x{734E}\x{7350}\x{7351}\x{7352}\x{7354}\x{7355}\x{7356}\x{7357}\x{7358}' .
-          '\x{7359}\x{735A}\x{735B}\x{735C}\x{735D}\x{735E}\x{735F}\x{7360}\x{7361}' .
-          '\x{7362}\x{7364}\x{7365}\x{7366}\x{7367}\x{7368}\x{7369}\x{736A}\x{736B}' .
-          '\x{736C}\x{736D}\x{736E}\x{736F}\x{7370}\x{7371}\x{7372}\x{7373}\x{7374}' .
-          '\x{7375}\x{7376}\x{7377}\x{7378}\x{7379}\x{737A}\x{737B}\x{737C}\x{737D}' .
-          '\x{737E}\x{737F}\x{7380}\x{7381}\x{7382}\x{7383}\x{7384}\x{7385}\x{7386}' .
-          '\x{7387}\x{7388}\x{7389}\x{738A}\x{738B}\x{738C}\x{738D}\x{738E}\x{738F}' .
-          '\x{7390}\x{7391}\x{7392}\x{7393}\x{7394}\x{7395}\x{7396}\x{7397}\x{7398}' .
-          '\x{7399}\x{739A}\x{739B}\x{739D}\x{739E}\x{739F}\x{73A0}\x{73A1}\x{73A2}' .
-          '\x{73A3}\x{73A4}\x{73A5}\x{73A6}\x{73A7}\x{73A8}\x{73A9}\x{73AA}\x{73AB}' .
-          '\x{73AC}\x{73AD}\x{73AE}\x{73AF}\x{73B0}\x{73B1}\x{73B2}\x{73B3}\x{73B4}' .
-          '\x{73B5}\x{73B6}\x{73B7}\x{73B8}\x{73B9}\x{73BA}\x{73BB}\x{73BC}\x{73BD}' .
-          '\x{73BE}\x{73BF}\x{73C0}\x{73C2}\x{73C3}\x{73C4}\x{73C5}\x{73C6}\x{73C7}' .
-          '\x{73C8}\x{73C9}\x{73CA}\x{73CB}\x{73CC}\x{73CD}\x{73CE}\x{73CF}\x{73D0}' .
-          '\x{73D1}\x{73D2}\x{73D3}\x{73D4}\x{73D5}\x{73D6}\x{73D7}\x{73D8}\x{73D9}' .
-          '\x{73DA}\x{73DB}\x{73DC}\x{73DD}\x{73DE}\x{73DF}\x{73E0}\x{73E2}\x{73E3}' .
-          '\x{73E5}\x{73E6}\x{73E7}\x{73E8}\x{73E9}\x{73EA}\x{73EB}\x{73EC}\x{73ED}' .
-          '\x{73EE}\x{73EF}\x{73F0}\x{73F1}\x{73F2}\x{73F4}\x{73F5}\x{73F6}\x{73F7}' .
-          '\x{73F8}\x{73F9}\x{73FA}\x{73FC}\x{73FD}\x{73FE}\x{73FF}\x{7400}\x{7401}' .
-          '\x{7402}\x{7403}\x{7404}\x{7405}\x{7406}\x{7407}\x{7408}\x{7409}\x{740A}' .
-          '\x{740B}\x{740C}\x{740D}\x{740E}\x{740F}\x{7410}\x{7411}\x{7412}\x{7413}' .
-          '\x{7414}\x{7415}\x{7416}\x{7417}\x{7419}\x{741A}\x{741B}\x{741C}\x{741D}' .
-          '\x{741E}\x{741F}\x{7420}\x{7421}\x{7422}\x{7423}\x{7424}\x{7425}\x{7426}' .
-          '\x{7427}\x{7428}\x{7429}\x{742A}\x{742B}\x{742C}\x{742D}\x{742E}\x{742F}' .
-          '\x{7430}\x{7431}\x{7432}\x{7433}\x{7434}\x{7435}\x{7436}\x{7437}\x{7438}' .
-          '\x{743A}\x{743B}\x{743C}\x{743D}\x{743F}\x{7440}\x{7441}\x{7442}\x{7443}' .
-          '\x{7444}\x{7445}\x{7446}\x{7448}\x{744A}\x{744B}\x{744C}\x{744D}\x{744E}' .
-          '\x{744F}\x{7450}\x{7451}\x{7452}\x{7453}\x{7454}\x{7455}\x{7456}\x{7457}' .
-          '\x{7459}\x{745A}\x{745B}\x{745C}\x{745D}\x{745E}\x{745F}\x{7461}\x{7462}' .
-          '\x{7463}\x{7464}\x{7465}\x{7466}\x{7467}\x{7468}\x{7469}\x{746A}\x{746B}' .
-          '\x{746C}\x{746D}\x{746E}\x{746F}\x{7470}\x{7471}\x{7472}\x{7473}\x{7474}' .
-          '\x{7475}\x{7476}\x{7477}\x{7478}\x{7479}\x{747A}\x{747C}\x{747D}\x{747E}' .
-          '\x{747F}\x{7480}\x{7481}\x{7482}\x{7483}\x{7485}\x{7486}\x{7487}\x{7488}' .
-          '\x{7489}\x{748A}\x{748B}\x{748C}\x{748D}\x{748E}\x{748F}\x{7490}\x{7491}' .
-          '\x{7492}\x{7493}\x{7494}\x{7495}\x{7497}\x{7498}\x{7499}\x{749A}\x{749B}' .
-          '\x{749C}\x{749E}\x{749F}\x{74A0}\x{74A1}\x{74A3}\x{74A4}\x{74A5}\x{74A6}' .
-          '\x{74A7}\x{74A8}\x{74A9}\x{74AA}\x{74AB}\x{74AC}\x{74AD}\x{74AE}\x{74AF}' .
-          '\x{74B0}\x{74B1}\x{74B2}\x{74B3}\x{74B4}\x{74B5}\x{74B6}\x{74B7}\x{74B8}' .
-          '\x{74B9}\x{74BA}\x{74BB}\x{74BC}\x{74BD}\x{74BE}\x{74BF}\x{74C0}\x{74C1}' .
-          '\x{74C2}\x{74C3}\x{74C4}\x{74C5}\x{74C6}\x{74CA}\x{74CB}\x{74CD}\x{74CE}' .
-          '\x{74CF}\x{74D0}\x{74D1}\x{74D2}\x{74D3}\x{74D4}\x{74D5}\x{74D6}\x{74D7}' .
-          '\x{74D8}\x{74D9}\x{74DA}\x{74DB}\x{74DC}\x{74DD}\x{74DE}\x{74DF}\x{74E0}' .
-          '\x{74E1}\x{74E2}\x{74E3}\x{74E4}\x{74E5}\x{74E6}\x{74E7}\x{74E8}\x{74E9}' .
-          '\x{74EA}\x{74EC}\x{74ED}\x{74EE}\x{74EF}\x{74F0}\x{74F1}\x{74F2}\x{74F3}' .
-          '\x{74F4}\x{74F5}\x{74F6}\x{74F7}\x{74F8}\x{74F9}\x{74FA}\x{74FB}\x{74FC}' .
-          '\x{74FD}\x{74FE}\x{74FF}\x{7500}\x{7501}\x{7502}\x{7503}\x{7504}\x{7505}' .
-          '\x{7506}\x{7507}\x{7508}\x{7509}\x{750A}\x{750B}\x{750C}\x{750D}\x{750F}' .
-          '\x{7510}\x{7511}\x{7512}\x{7513}\x{7514}\x{7515}\x{7516}\x{7517}\x{7518}' .
-          '\x{7519}\x{751A}\x{751B}\x{751C}\x{751D}\x{751E}\x{751F}\x{7521}\x{7522}' .
-          '\x{7523}\x{7524}\x{7525}\x{7526}\x{7527}\x{7528}\x{7529}\x{752A}\x{752B}' .
-          '\x{752C}\x{752D}\x{752E}\x{752F}\x{7530}\x{7531}\x{7532}\x{7533}\x{7535}' .
-          '\x{7536}\x{7537}\x{7538}\x{7539}\x{753A}\x{753B}\x{753C}\x{753D}\x{753E}' .
-          '\x{753F}\x{7540}\x{7542}\x{7543}\x{7544}\x{7545}\x{7546}\x{7547}\x{7548}' .
-          '\x{7549}\x{754B}\x{754C}\x{754D}\x{754E}\x{754F}\x{7550}\x{7551}\x{7553}' .
-          '\x{7554}\x{7556}\x{7557}\x{7558}\x{7559}\x{755A}\x{755B}\x{755C}\x{755D}' .
-          '\x{755F}\x{7560}\x{7562}\x{7563}\x{7564}\x{7565}\x{7566}\x{7567}\x{7568}' .
-          '\x{7569}\x{756A}\x{756B}\x{756C}\x{756D}\x{756E}\x{756F}\x{7570}\x{7572}' .
-          '\x{7574}\x{7575}\x{7576}\x{7577}\x{7578}\x{7579}\x{757C}\x{757D}\x{757E}' .
-          '\x{757F}\x{7580}\x{7581}\x{7582}\x{7583}\x{7584}\x{7586}\x{7587}\x{7588}' .
-          '\x{7589}\x{758A}\x{758B}\x{758C}\x{758D}\x{758F}\x{7590}\x{7591}\x{7592}' .
-          '\x{7593}\x{7594}\x{7595}\x{7596}\x{7597}\x{7598}\x{7599}\x{759A}\x{759B}' .
-          '\x{759C}\x{759D}\x{759E}\x{759F}\x{75A0}\x{75A1}\x{75A2}\x{75A3}\x{75A4}' .
-          '\x{75A5}\x{75A6}\x{75A7}\x{75A8}\x{75AA}\x{75AB}\x{75AC}\x{75AD}\x{75AE}' .
-          '\x{75AF}\x{75B0}\x{75B1}\x{75B2}\x{75B3}\x{75B4}\x{75B5}\x{75B6}\x{75B8}' .
-          '\x{75B9}\x{75BA}\x{75BB}\x{75BC}\x{75BD}\x{75BE}\x{75BF}\x{75C0}\x{75C1}' .
-          '\x{75C2}\x{75C3}\x{75C4}\x{75C5}\x{75C6}\x{75C7}\x{75C8}\x{75C9}\x{75CA}' .
-          '\x{75CB}\x{75CC}\x{75CD}\x{75CE}\x{75CF}\x{75D0}\x{75D1}\x{75D2}\x{75D3}' .
-          '\x{75D4}\x{75D5}\x{75D6}\x{75D7}\x{75D8}\x{75D9}\x{75DA}\x{75DB}\x{75DD}' .
-          '\x{75DE}\x{75DF}\x{75E0}\x{75E1}\x{75E2}\x{75E3}\x{75E4}\x{75E5}\x{75E6}' .
-          '\x{75E7}\x{75E8}\x{75EA}\x{75EB}\x{75EC}\x{75ED}\x{75EF}\x{75F0}\x{75F1}' .
-          '\x{75F2}\x{75F3}\x{75F4}\x{75F5}\x{75F6}\x{75F7}\x{75F8}\x{75F9}\x{75FA}' .
-          '\x{75FB}\x{75FC}\x{75FD}\x{75FE}\x{75FF}\x{7600}\x{7601}\x{7602}\x{7603}' .
-          '\x{7604}\x{7605}\x{7606}\x{7607}\x{7608}\x{7609}\x{760A}\x{760B}\x{760C}' .
-          '\x{760D}\x{760E}\x{760F}\x{7610}\x{7611}\x{7612}\x{7613}\x{7614}\x{7615}' .
-          '\x{7616}\x{7617}\x{7618}\x{7619}\x{761A}\x{761B}\x{761C}\x{761D}\x{761E}' .
-          '\x{761F}\x{7620}\x{7621}\x{7622}\x{7623}\x{7624}\x{7625}\x{7626}\x{7627}' .
-          '\x{7628}\x{7629}\x{762A}\x{762B}\x{762D}\x{762E}\x{762F}\x{7630}\x{7631}' .
-          '\x{7632}\x{7633}\x{7634}\x{7635}\x{7636}\x{7637}\x{7638}\x{7639}\x{763A}' .
-          '\x{763B}\x{763C}\x{763D}\x{763E}\x{763F}\x{7640}\x{7641}\x{7642}\x{7643}' .
-          '\x{7646}\x{7647}\x{7648}\x{7649}\x{764A}\x{764B}\x{764C}\x{764D}\x{764F}' .
-          '\x{7650}\x{7652}\x{7653}\x{7654}\x{7656}\x{7657}\x{7658}\x{7659}\x{765A}' .
-          '\x{765B}\x{765C}\x{765D}\x{765E}\x{765F}\x{7660}\x{7661}\x{7662}\x{7663}' .
-          '\x{7664}\x{7665}\x{7666}\x{7667}\x{7668}\x{7669}\x{766A}\x{766B}\x{766C}' .
-          '\x{766D}\x{766E}\x{766F}\x{7670}\x{7671}\x{7672}\x{7674}\x{7675}\x{7676}' .
-          '\x{7677}\x{7678}\x{7679}\x{767B}\x{767C}\x{767D}\x{767E}\x{767F}\x{7680}' .
-          '\x{7681}\x{7682}\x{7683}\x{7684}\x{7685}\x{7686}\x{7687}\x{7688}\x{7689}' .
-          '\x{768A}\x{768B}\x{768C}\x{768E}\x{768F}\x{7690}\x{7691}\x{7692}\x{7693}' .
-          '\x{7694}\x{7695}\x{7696}\x{7697}\x{7698}\x{7699}\x{769A}\x{769B}\x{769C}' .
-          '\x{769D}\x{769E}\x{769F}\x{76A0}\x{76A3}\x{76A4}\x{76A6}\x{76A7}\x{76A9}' .
-          '\x{76AA}\x{76AB}\x{76AC}\x{76AD}\x{76AE}\x{76AF}\x{76B0}\x{76B1}\x{76B2}' .
-          '\x{76B4}\x{76B5}\x{76B7}\x{76B8}\x{76BA}\x{76BB}\x{76BC}\x{76BD}\x{76BE}' .
-          '\x{76BF}\x{76C0}\x{76C2}\x{76C3}\x{76C4}\x{76C5}\x{76C6}\x{76C7}\x{76C8}' .
-          '\x{76C9}\x{76CA}\x{76CD}\x{76CE}\x{76CF}\x{76D0}\x{76D1}\x{76D2}\x{76D3}' .
-          '\x{76D4}\x{76D5}\x{76D6}\x{76D7}\x{76D8}\x{76DA}\x{76DB}\x{76DC}\x{76DD}' .
-          '\x{76DE}\x{76DF}\x{76E0}\x{76E1}\x{76E2}\x{76E3}\x{76E4}\x{76E5}\x{76E6}' .
-          '\x{76E7}\x{76E8}\x{76E9}\x{76EA}\x{76EC}\x{76ED}\x{76EE}\x{76EF}\x{76F0}' .
-          '\x{76F1}\x{76F2}\x{76F3}\x{76F4}\x{76F5}\x{76F6}\x{76F7}\x{76F8}\x{76F9}' .
-          '\x{76FA}\x{76FB}\x{76FC}\x{76FD}\x{76FE}\x{76FF}\x{7701}\x{7703}\x{7704}' .
-          '\x{7705}\x{7706}\x{7707}\x{7708}\x{7709}\x{770A}\x{770B}\x{770C}\x{770D}' .
-          '\x{770F}\x{7710}\x{7711}\x{7712}\x{7713}\x{7714}\x{7715}\x{7716}\x{7717}' .
-          '\x{7718}\x{7719}\x{771A}\x{771B}\x{771C}\x{771D}\x{771E}\x{771F}\x{7720}' .
-          '\x{7722}\x{7723}\x{7725}\x{7726}\x{7727}\x{7728}\x{7729}\x{772A}\x{772C}' .
-          '\x{772D}\x{772E}\x{772F}\x{7730}\x{7731}\x{7732}\x{7733}\x{7734}\x{7735}' .
-          '\x{7736}\x{7737}\x{7738}\x{7739}\x{773A}\x{773B}\x{773C}\x{773D}\x{773E}' .
-          '\x{7740}\x{7741}\x{7743}\x{7744}\x{7745}\x{7746}\x{7747}\x{7748}\x{7749}' .
-          '\x{774A}\x{774B}\x{774C}\x{774D}\x{774E}\x{774F}\x{7750}\x{7751}\x{7752}' .
-          '\x{7753}\x{7754}\x{7755}\x{7756}\x{7757}\x{7758}\x{7759}\x{775A}\x{775B}' .
-          '\x{775C}\x{775D}\x{775E}\x{775F}\x{7760}\x{7761}\x{7762}\x{7763}\x{7765}' .
-          '\x{7766}\x{7767}\x{7768}\x{7769}\x{776A}\x{776B}\x{776C}\x{776D}\x{776E}' .
-          '\x{776F}\x{7770}\x{7771}\x{7772}\x{7773}\x{7774}\x{7775}\x{7776}\x{7777}' .
-          '\x{7778}\x{7779}\x{777A}\x{777B}\x{777C}\x{777D}\x{777E}\x{777F}\x{7780}' .
-          '\x{7781}\x{7782}\x{7783}\x{7784}\x{7785}\x{7786}\x{7787}\x{7788}\x{7789}' .
-          '\x{778A}\x{778B}\x{778C}\x{778D}\x{778E}\x{778F}\x{7790}\x{7791}\x{7792}' .
-          '\x{7793}\x{7794}\x{7795}\x{7797}\x{7798}\x{7799}\x{779A}\x{779B}\x{779C}' .
-          '\x{779D}\x{779E}\x{779F}\x{77A0}\x{77A1}\x{77A2}\x{77A3}\x{77A5}\x{77A6}' .
-          '\x{77A7}\x{77A8}\x{77A9}\x{77AA}\x{77AB}\x{77AC}\x{77AD}\x{77AE}\x{77AF}' .
-          '\x{77B0}\x{77B1}\x{77B2}\x{77B3}\x{77B4}\x{77B5}\x{77B6}\x{77B7}\x{77B8}' .
-          '\x{77B9}\x{77BA}\x{77BB}\x{77BC}\x{77BD}\x{77BF}\x{77C0}\x{77C2}\x{77C3}' .
-          '\x{77C4}\x{77C5}\x{77C6}\x{77C7}\x{77C8}\x{77C9}\x{77CA}\x{77CB}\x{77CC}' .
-          '\x{77CD}\x{77CE}\x{77CF}\x{77D0}\x{77D1}\x{77D3}\x{77D4}\x{77D5}\x{77D6}' .
-          '\x{77D7}\x{77D8}\x{77D9}\x{77DA}\x{77DB}\x{77DC}\x{77DE}\x{77DF}\x{77E0}' .
-          '\x{77E1}\x{77E2}\x{77E3}\x{77E5}\x{77E7}\x{77E8}\x{77E9}\x{77EA}\x{77EB}' .
-          '\x{77EC}\x{77ED}\x{77EE}\x{77EF}\x{77F0}\x{77F1}\x{77F2}\x{77F3}\x{77F6}' .
-          '\x{77F7}\x{77F8}\x{77F9}\x{77FA}\x{77FB}\x{77FC}\x{77FD}\x{77FE}\x{77FF}' .
-          '\x{7800}\x{7801}\x{7802}\x{7803}\x{7804}\x{7805}\x{7806}\x{7808}\x{7809}' .
-          '\x{780A}\x{780B}\x{780C}\x{780D}\x{780E}\x{780F}\x{7810}\x{7811}\x{7812}' .
-          '\x{7813}\x{7814}\x{7815}\x{7816}\x{7817}\x{7818}\x{7819}\x{781A}\x{781B}' .
-          '\x{781C}\x{781D}\x{781E}\x{781F}\x{7820}\x{7821}\x{7822}\x{7823}\x{7825}' .
-          '\x{7826}\x{7827}\x{7828}\x{7829}\x{782A}\x{782B}\x{782C}\x{782D}\x{782E}' .
-          '\x{782F}\x{7830}\x{7831}\x{7832}\x{7833}\x{7834}\x{7835}\x{7837}\x{7838}' .
-          '\x{7839}\x{783A}\x{783B}\x{783C}\x{783D}\x{783E}\x{7840}\x{7841}\x{7843}' .
-          '\x{7844}\x{7845}\x{7847}\x{7848}\x{7849}\x{784A}\x{784C}\x{784D}\x{784E}' .
-          '\x{7850}\x{7851}\x{7852}\x{7853}\x{7854}\x{7855}\x{7856}\x{7857}\x{7858}' .
-          '\x{7859}\x{785A}\x{785B}\x{785C}\x{785D}\x{785E}\x{785F}\x{7860}\x{7861}' .
-          '\x{7862}\x{7863}\x{7864}\x{7865}\x{7866}\x{7867}\x{7868}\x{7869}\x{786A}' .
-          '\x{786B}\x{786C}\x{786D}\x{786E}\x{786F}\x{7870}\x{7871}\x{7872}\x{7873}' .
-          '\x{7874}\x{7875}\x{7877}\x{7878}\x{7879}\x{787A}\x{787B}\x{787C}\x{787D}' .
-          '\x{787E}\x{787F}\x{7880}\x{7881}\x{7882}\x{7883}\x{7884}\x{7885}\x{7886}' .
-          '\x{7887}\x{7889}\x{788A}\x{788B}\x{788C}\x{788D}\x{788E}\x{788F}\x{7890}' .
-          '\x{7891}\x{7892}\x{7893}\x{7894}\x{7895}\x{7896}\x{7897}\x{7898}\x{7899}' .
-          '\x{789A}\x{789B}\x{789C}\x{789D}\x{789E}\x{789F}\x{78A0}\x{78A1}\x{78A2}' .
-          '\x{78A3}\x{78A4}\x{78A5}\x{78A6}\x{78A7}\x{78A8}\x{78A9}\x{78AA}\x{78AB}' .
-          '\x{78AC}\x{78AD}\x{78AE}\x{78AF}\x{78B0}\x{78B1}\x{78B2}\x{78B3}\x{78B4}' .
-          '\x{78B5}\x{78B6}\x{78B7}\x{78B8}\x{78B9}\x{78BA}\x{78BB}\x{78BC}\x{78BD}' .
-          '\x{78BE}\x{78BF}\x{78C0}\x{78C1}\x{78C3}\x{78C4}\x{78C5}\x{78C6}\x{78C8}' .
-          '\x{78C9}\x{78CA}\x{78CB}\x{78CC}\x{78CD}\x{78CE}\x{78CF}\x{78D0}\x{78D1}' .
-          '\x{78D3}\x{78D4}\x{78D5}\x{78D6}\x{78D7}\x{78D8}\x{78D9}\x{78DA}\x{78DB}' .
-          '\x{78DC}\x{78DD}\x{78DE}\x{78DF}\x{78E0}\x{78E1}\x{78E2}\x{78E3}\x{78E4}' .
-          '\x{78E5}\x{78E6}\x{78E7}\x{78E8}\x{78E9}\x{78EA}\x{78EB}\x{78EC}\x{78ED}' .
-          '\x{78EE}\x{78EF}\x{78F1}\x{78F2}\x{78F3}\x{78F4}\x{78F5}\x{78F6}\x{78F7}' .
-          '\x{78F9}\x{78FA}\x{78FB}\x{78FC}\x{78FD}\x{78FE}\x{78FF}\x{7901}\x{7902}' .
-          '\x{7903}\x{7904}\x{7905}\x{7906}\x{7907}\x{7909}\x{790A}\x{790B}\x{790C}' .
-          '\x{790E}\x{790F}\x{7910}\x{7911}\x{7912}\x{7913}\x{7914}\x{7916}\x{7917}' .
-          '\x{7918}\x{7919}\x{791A}\x{791B}\x{791C}\x{791D}\x{791E}\x{7921}\x{7922}' .
-          '\x{7923}\x{7924}\x{7925}\x{7926}\x{7927}\x{7928}\x{7929}\x{792A}\x{792B}' .
-          '\x{792C}\x{792D}\x{792E}\x{792F}\x{7930}\x{7931}\x{7933}\x{7934}\x{7935}' .
-          '\x{7937}\x{7938}\x{7939}\x{793A}\x{793B}\x{793C}\x{793D}\x{793E}\x{793F}' .
-          '\x{7940}\x{7941}\x{7942}\x{7943}\x{7944}\x{7945}\x{7946}\x{7947}\x{7948}' .
-          '\x{7949}\x{794A}\x{794B}\x{794C}\x{794D}\x{794E}\x{794F}\x{7950}\x{7951}' .
-          '\x{7952}\x{7953}\x{7954}\x{7955}\x{7956}\x{7957}\x{7958}\x{795A}\x{795B}' .
-          '\x{795C}\x{795D}\x{795E}\x{795F}\x{7960}\x{7961}\x{7962}\x{7963}\x{7964}' .
-          '\x{7965}\x{7966}\x{7967}\x{7968}\x{7969}\x{796A}\x{796B}\x{796D}\x{796F}' .
-          '\x{7970}\x{7971}\x{7972}\x{7973}\x{7974}\x{7977}\x{7978}\x{7979}\x{797A}' .
-          '\x{797B}\x{797C}\x{797D}\x{797E}\x{797F}\x{7980}\x{7981}\x{7982}\x{7983}' .
-          '\x{7984}\x{7985}\x{7988}\x{7989}\x{798A}\x{798B}\x{798C}\x{798D}\x{798E}' .
-          '\x{798F}\x{7990}\x{7991}\x{7992}\x{7993}\x{7994}\x{7995}\x{7996}\x{7997}' .
-          '\x{7998}\x{7999}\x{799A}\x{799B}\x{799C}\x{799F}\x{79A0}\x{79A1}\x{79A2}' .
-          '\x{79A3}\x{79A4}\x{79A5}\x{79A6}\x{79A7}\x{79A8}\x{79AA}\x{79AB}\x{79AC}' .
-          '\x{79AD}\x{79AE}\x{79AF}\x{79B0}\x{79B1}\x{79B2}\x{79B3}\x{79B4}\x{79B5}' .
-          '\x{79B6}\x{79B7}\x{79B8}\x{79B9}\x{79BA}\x{79BB}\x{79BD}\x{79BE}\x{79BF}' .
-          '\x{79C0}\x{79C1}\x{79C2}\x{79C3}\x{79C5}\x{79C6}\x{79C8}\x{79C9}\x{79CA}' .
-          '\x{79CB}\x{79CD}\x{79CE}\x{79CF}\x{79D0}\x{79D1}\x{79D2}\x{79D3}\x{79D5}' .
-          '\x{79D6}\x{79D8}\x{79D9}\x{79DA}\x{79DB}\x{79DC}\x{79DD}\x{79DE}\x{79DF}' .
-          '\x{79E0}\x{79E1}\x{79E2}\x{79E3}\x{79E4}\x{79E5}\x{79E6}\x{79E7}\x{79E8}' .
-          '\x{79E9}\x{79EA}\x{79EB}\x{79EC}\x{79ED}\x{79EE}\x{79EF}\x{79F0}\x{79F1}' .
-          '\x{79F2}\x{79F3}\x{79F4}\x{79F5}\x{79F6}\x{79F7}\x{79F8}\x{79F9}\x{79FA}' .
-          '\x{79FB}\x{79FC}\x{79FD}\x{79FE}\x{79FF}\x{7A00}\x{7A02}\x{7A03}\x{7A04}' .
-          '\x{7A05}\x{7A06}\x{7A08}\x{7A0A}\x{7A0B}\x{7A0C}\x{7A0D}\x{7A0E}\x{7A0F}' .
-          '\x{7A10}\x{7A11}\x{7A12}\x{7A13}\x{7A14}\x{7A15}\x{7A16}\x{7A17}\x{7A18}' .
-          '\x{7A19}\x{7A1A}\x{7A1B}\x{7A1C}\x{7A1D}\x{7A1E}\x{7A1F}\x{7A20}\x{7A21}' .
-          '\x{7A22}\x{7A23}\x{7A24}\x{7A25}\x{7A26}\x{7A27}\x{7A28}\x{7A29}\x{7A2A}' .
-          '\x{7A2B}\x{7A2D}\x{7A2E}\x{7A2F}\x{7A30}\x{7A31}\x{7A32}\x{7A33}\x{7A34}' .
-          '\x{7A35}\x{7A37}\x{7A39}\x{7A3B}\x{7A3C}\x{7A3D}\x{7A3E}\x{7A3F}\x{7A40}' .
-          '\x{7A41}\x{7A42}\x{7A43}\x{7A44}\x{7A45}\x{7A46}\x{7A47}\x{7A48}\x{7A49}' .
-          '\x{7A4A}\x{7A4B}\x{7A4C}\x{7A4D}\x{7A4E}\x{7A50}\x{7A51}\x{7A52}\x{7A53}' .
-          '\x{7A54}\x{7A55}\x{7A56}\x{7A57}\x{7A58}\x{7A59}\x{7A5A}\x{7A5B}\x{7A5C}' .
-          '\x{7A5D}\x{7A5E}\x{7A5F}\x{7A60}\x{7A61}\x{7A62}\x{7A65}\x{7A66}\x{7A67}' .
-          '\x{7A68}\x{7A69}\x{7A6B}\x{7A6C}\x{7A6D}\x{7A6E}\x{7A70}\x{7A71}\x{7A72}' .
-          '\x{7A73}\x{7A74}\x{7A75}\x{7A76}\x{7A77}\x{7A78}\x{7A79}\x{7A7A}\x{7A7B}' .
-          '\x{7A7C}\x{7A7D}\x{7A7E}\x{7A7F}\x{7A80}\x{7A81}\x{7A83}\x{7A84}\x{7A85}' .
-          '\x{7A86}\x{7A87}\x{7A88}\x{7A89}\x{7A8A}\x{7A8B}\x{7A8C}\x{7A8D}\x{7A8E}' .
-          '\x{7A8F}\x{7A90}\x{7A91}\x{7A92}\x{7A93}\x{7A94}\x{7A95}\x{7A96}\x{7A97}' .
-          '\x{7A98}\x{7A99}\x{7A9C}\x{7A9D}\x{7A9E}\x{7A9F}\x{7AA0}\x{7AA1}\x{7AA2}' .
-          '\x{7AA3}\x{7AA4}\x{7AA5}\x{7AA6}\x{7AA7}\x{7AA8}\x{7AA9}\x{7AAA}\x{7AAB}' .
-          '\x{7AAC}\x{7AAD}\x{7AAE}\x{7AAF}\x{7AB0}\x{7AB1}\x{7AB2}\x{7AB3}\x{7AB4}' .
-          '\x{7AB5}\x{7AB6}\x{7AB7}\x{7AB8}\x{7ABA}\x{7ABE}\x{7ABF}\x{7AC0}\x{7AC1}' .
-          '\x{7AC4}\x{7AC5}\x{7AC7}\x{7AC8}\x{7AC9}\x{7ACA}\x{7ACB}\x{7ACC}\x{7ACD}' .
-          '\x{7ACE}\x{7ACF}\x{7AD0}\x{7AD1}\x{7AD2}\x{7AD3}\x{7AD4}\x{7AD5}\x{7AD6}' .
-          '\x{7AD8}\x{7AD9}\x{7ADB}\x{7ADC}\x{7ADD}\x{7ADE}\x{7ADF}\x{7AE0}\x{7AE1}' .
-          '\x{7AE2}\x{7AE3}\x{7AE4}\x{7AE5}\x{7AE6}\x{7AE7}\x{7AE8}\x{7AEA}\x{7AEB}' .
-          '\x{7AEC}\x{7AED}\x{7AEE}\x{7AEF}\x{7AF0}\x{7AF1}\x{7AF2}\x{7AF3}\x{7AF4}' .
-          '\x{7AF6}\x{7AF7}\x{7AF8}\x{7AF9}\x{7AFA}\x{7AFB}\x{7AFD}\x{7AFE}\x{7AFF}' .
-          '\x{7B00}\x{7B01}\x{7B02}\x{7B03}\x{7B04}\x{7B05}\x{7B06}\x{7B08}\x{7B09}' .
-          '\x{7B0A}\x{7B0B}\x{7B0C}\x{7B0D}\x{7B0E}\x{7B0F}\x{7B10}\x{7B11}\x{7B12}' .
-          '\x{7B13}\x{7B14}\x{7B15}\x{7B16}\x{7B17}\x{7B18}\x{7B19}\x{7B1A}\x{7B1B}' .
-          '\x{7B1C}\x{7B1D}\x{7B1E}\x{7B20}\x{7B21}\x{7B22}\x{7B23}\x{7B24}\x{7B25}' .
-          '\x{7B26}\x{7B28}\x{7B2A}\x{7B2B}\x{7B2C}\x{7B2D}\x{7B2E}\x{7B2F}\x{7B30}' .
-          '\x{7B31}\x{7B32}\x{7B33}\x{7B34}\x{7B35}\x{7B36}\x{7B37}\x{7B38}\x{7B39}' .
-          '\x{7B3A}\x{7B3B}\x{7B3C}\x{7B3D}\x{7B3E}\x{7B3F}\x{7B40}\x{7B41}\x{7B43}' .
-          '\x{7B44}\x{7B45}\x{7B46}\x{7B47}\x{7B48}\x{7B49}\x{7B4A}\x{7B4B}\x{7B4C}' .
-          '\x{7B4D}\x{7B4E}\x{7B4F}\x{7B50}\x{7B51}\x{7B52}\x{7B54}\x{7B55}\x{7B56}' .
-          '\x{7B57}\x{7B58}\x{7B59}\x{7B5A}\x{7B5B}\x{7B5C}\x{7B5D}\x{7B5E}\x{7B5F}' .
-          '\x{7B60}\x{7B61}\x{7B62}\x{7B63}\x{7B64}\x{7B65}\x{7B66}\x{7B67}\x{7B68}' .
-          '\x{7B69}\x{7B6A}\x{7B6B}\x{7B6C}\x{7B6D}\x{7B6E}\x{7B70}\x{7B71}\x{7B72}' .
-          '\x{7B73}\x{7B74}\x{7B75}\x{7B76}\x{7B77}\x{7B78}\x{7B79}\x{7B7B}\x{7B7C}' .
-          '\x{7B7D}\x{7B7E}\x{7B7F}\x{7B80}\x{7B81}\x{7B82}\x{7B83}\x{7B84}\x{7B85}' .
-          '\x{7B87}\x{7B88}\x{7B89}\x{7B8A}\x{7B8B}\x{7B8C}\x{7B8D}\x{7B8E}\x{7B8F}' .
-          '\x{7B90}\x{7B91}\x{7B93}\x{7B94}\x{7B95}\x{7B96}\x{7B97}\x{7B98}\x{7B99}' .
-          '\x{7B9A}\x{7B9B}\x{7B9C}\x{7B9D}\x{7B9E}\x{7B9F}\x{7BA0}\x{7BA1}\x{7BA2}' .
-          '\x{7BA4}\x{7BA6}\x{7BA7}\x{7BA8}\x{7BA9}\x{7BAA}\x{7BAB}\x{7BAC}\x{7BAD}' .
-          '\x{7BAE}\x{7BAF}\x{7BB1}\x{7BB3}\x{7BB4}\x{7BB5}\x{7BB6}\x{7BB7}\x{7BB8}' .
-          '\x{7BB9}\x{7BBA}\x{7BBB}\x{7BBC}\x{7BBD}\x{7BBE}\x{7BBF}\x{7BC0}\x{7BC1}' .
-          '\x{7BC2}\x{7BC3}\x{7BC4}\x{7BC5}\x{7BC6}\x{7BC7}\x{7BC8}\x{7BC9}\x{7BCA}' .
-          '\x{7BCB}\x{7BCC}\x{7BCD}\x{7BCE}\x{7BD0}\x{7BD1}\x{7BD2}\x{7BD3}\x{7BD4}' .
-          '\x{7BD5}\x{7BD6}\x{7BD7}\x{7BD8}\x{7BD9}\x{7BDA}\x{7BDB}\x{7BDC}\x{7BDD}' .
-          '\x{7BDE}\x{7BDF}\x{7BE0}\x{7BE1}\x{7BE2}\x{7BE3}\x{7BE4}\x{7BE5}\x{7BE6}' .
-          '\x{7BE7}\x{7BE8}\x{7BE9}\x{7BEA}\x{7BEB}\x{7BEC}\x{7BED}\x{7BEE}\x{7BEF}' .
-          '\x{7BF0}\x{7BF1}\x{7BF2}\x{7BF3}\x{7BF4}\x{7BF5}\x{7BF6}\x{7BF7}\x{7BF8}' .
-          '\x{7BF9}\x{7BFB}\x{7BFC}\x{7BFD}\x{7BFE}\x{7BFF}\x{7C00}\x{7C01}\x{7C02}' .
-          '\x{7C03}\x{7C04}\x{7C05}\x{7C06}\x{7C07}\x{7C08}\x{7C09}\x{7C0A}\x{7C0B}' .
-          '\x{7C0C}\x{7C0D}\x{7C0E}\x{7C0F}\x{7C10}\x{7C11}\x{7C12}\x{7C13}\x{7C15}' .
-          '\x{7C16}\x{7C17}\x{7C18}\x{7C19}\x{7C1A}\x{7C1C}\x{7C1D}\x{7C1E}\x{7C1F}' .
-          '\x{7C20}\x{7C21}\x{7C22}\x{7C23}\x{7C24}\x{7C25}\x{7C26}\x{7C27}\x{7C28}' .
-          '\x{7C29}\x{7C2A}\x{7C2B}\x{7C2C}\x{7C2D}\x{7C30}\x{7C31}\x{7C32}\x{7C33}' .
-          '\x{7C34}\x{7C35}\x{7C36}\x{7C37}\x{7C38}\x{7C39}\x{7C3A}\x{7C3B}\x{7C3C}' .
-          '\x{7C3D}\x{7C3E}\x{7C3F}\x{7C40}\x{7C41}\x{7C42}\x{7C43}\x{7C44}\x{7C45}' .
-          '\x{7C46}\x{7C47}\x{7C48}\x{7C49}\x{7C4A}\x{7C4B}\x{7C4C}\x{7C4D}\x{7C4E}' .
-          '\x{7C50}\x{7C51}\x{7C53}\x{7C54}\x{7C56}\x{7C57}\x{7C58}\x{7C59}\x{7C5A}' .
-          '\x{7C5B}\x{7C5C}\x{7C5E}\x{7C5F}\x{7C60}\x{7C61}\x{7C62}\x{7C63}\x{7C64}' .
-          '\x{7C65}\x{7C66}\x{7C67}\x{7C68}\x{7C69}\x{7C6A}\x{7C6B}\x{7C6C}\x{7C6D}' .
-          '\x{7C6E}\x{7C6F}\x{7C70}\x{7C71}\x{7C72}\x{7C73}\x{7C74}\x{7C75}\x{7C77}' .
-          '\x{7C78}\x{7C79}\x{7C7A}\x{7C7B}\x{7C7C}\x{7C7D}\x{7C7E}\x{7C7F}\x{7C80}' .
-          '\x{7C81}\x{7C82}\x{7C84}\x{7C85}\x{7C86}\x{7C88}\x{7C89}\x{7C8A}\x{7C8B}' .
-          '\x{7C8C}\x{7C8D}\x{7C8E}\x{7C8F}\x{7C90}\x{7C91}\x{7C92}\x{7C94}\x{7C95}' .
-          '\x{7C96}\x{7C97}\x{7C98}\x{7C99}\x{7C9B}\x{7C9C}\x{7C9D}\x{7C9E}\x{7C9F}' .
-          '\x{7CA0}\x{7CA1}\x{7CA2}\x{7CA3}\x{7CA4}\x{7CA5}\x{7CA6}\x{7CA7}\x{7CA8}' .
-          '\x{7CA9}\x{7CAA}\x{7CAD}\x{7CAE}\x{7CAF}\x{7CB0}\x{7CB1}\x{7CB2}\x{7CB3}' .
-          '\x{7CB4}\x{7CB5}\x{7CB6}\x{7CB7}\x{7CB8}\x{7CB9}\x{7CBA}\x{7CBB}\x{7CBC}' .
-          '\x{7CBD}\x{7CBE}\x{7CBF}\x{7CC0}\x{7CC1}\x{7CC2}\x{7CC3}\x{7CC4}\x{7CC5}' .
-          '\x{7CC6}\x{7CC7}\x{7CC8}\x{7CC9}\x{7CCA}\x{7CCB}\x{7CCC}\x{7CCD}\x{7CCE}' .
-          '\x{7CCF}\x{7CD0}\x{7CD1}\x{7CD2}\x{7CD4}\x{7CD5}\x{7CD6}\x{7CD7}\x{7CD8}' .
-          '\x{7CD9}\x{7CDC}\x{7CDD}\x{7CDE}\x{7CDF}\x{7CE0}\x{7CE2}\x{7CE4}\x{7CE7}' .
-          '\x{7CE8}\x{7CE9}\x{7CEA}\x{7CEB}\x{7CEC}\x{7CED}\x{7CEE}\x{7CEF}\x{7CF0}' .
-          '\x{7CF1}\x{7CF2}\x{7CF3}\x{7CF4}\x{7CF5}\x{7CF6}\x{7CF7}\x{7CF8}\x{7CF9}' .
-          '\x{7CFA}\x{7CFB}\x{7CFD}\x{7CFE}\x{7D00}\x{7D01}\x{7D02}\x{7D03}\x{7D04}' .
-          '\x{7D05}\x{7D06}\x{7D07}\x{7D08}\x{7D09}\x{7D0A}\x{7D0B}\x{7D0C}\x{7D0D}' .
-          '\x{7D0E}\x{7D0F}\x{7D10}\x{7D11}\x{7D12}\x{7D13}\x{7D14}\x{7D15}\x{7D16}' .
-          '\x{7D17}\x{7D18}\x{7D19}\x{7D1A}\x{7D1B}\x{7D1C}\x{7D1D}\x{7D1E}\x{7D1F}' .
-          '\x{7D20}\x{7D21}\x{7D22}\x{7D24}\x{7D25}\x{7D26}\x{7D27}\x{7D28}\x{7D29}' .
-          '\x{7D2B}\x{7D2C}\x{7D2E}\x{7D2F}\x{7D30}\x{7D31}\x{7D32}\x{7D33}\x{7D34}' .
-          '\x{7D35}\x{7D36}\x{7D37}\x{7D38}\x{7D39}\x{7D3A}\x{7D3B}\x{7D3C}\x{7D3D}' .
-          '\x{7D3E}\x{7D3F}\x{7D40}\x{7D41}\x{7D42}\x{7D43}\x{7D44}\x{7D45}\x{7D46}' .
-          '\x{7D47}\x{7D49}\x{7D4A}\x{7D4B}\x{7D4C}\x{7D4E}\x{7D4F}\x{7D50}\x{7D51}' .
-          '\x{7D52}\x{7D53}\x{7D54}\x{7D55}\x{7D56}\x{7D57}\x{7D58}\x{7D59}\x{7D5B}' .
-          '\x{7D5C}\x{7D5D}\x{7D5E}\x{7D5F}\x{7D60}\x{7D61}\x{7D62}\x{7D63}\x{7D65}' .
-          '\x{7D66}\x{7D67}\x{7D68}\x{7D69}\x{7D6A}\x{7D6B}\x{7D6C}\x{7D6D}\x{7D6E}' .
-          '\x{7D6F}\x{7D70}\x{7D71}\x{7D72}\x{7D73}\x{7D74}\x{7D75}\x{7D76}\x{7D77}' .
-          '\x{7D79}\x{7D7A}\x{7D7B}\x{7D7C}\x{7D7D}\x{7D7E}\x{7D7F}\x{7D80}\x{7D81}' .
-          '\x{7D83}\x{7D84}\x{7D85}\x{7D86}\x{7D87}\x{7D88}\x{7D89}\x{7D8A}\x{7D8B}' .
-          '\x{7D8C}\x{7D8D}\x{7D8E}\x{7D8F}\x{7D90}\x{7D91}\x{7D92}\x{7D93}\x{7D94}' .
-          '\x{7D96}\x{7D97}\x{7D99}\x{7D9B}\x{7D9C}\x{7D9D}\x{7D9E}\x{7D9F}\x{7DA0}' .
-          '\x{7DA1}\x{7DA2}\x{7DA3}\x{7DA5}\x{7DA6}\x{7DA7}\x{7DA9}\x{7DAA}\x{7DAB}' .
-          '\x{7DAC}\x{7DAD}\x{7DAE}\x{7DAF}\x{7DB0}\x{7DB1}\x{7DB2}\x{7DB3}\x{7DB4}' .
-          '\x{7DB5}\x{7DB6}\x{7DB7}\x{7DB8}\x{7DB9}\x{7DBA}\x{7DBB}\x{7DBC}\x{7DBD}' .
-          '\x{7DBE}\x{7DBF}\x{7DC0}\x{7DC1}\x{7DC2}\x{7DC3}\x{7DC4}\x{7DC5}\x{7DC6}' .
-          '\x{7DC7}\x{7DC8}\x{7DC9}\x{7DCA}\x{7DCB}\x{7DCC}\x{7DCE}\x{7DCF}\x{7DD0}' .
-          '\x{7DD1}\x{7DD2}\x{7DD4}\x{7DD5}\x{7DD6}\x{7DD7}\x{7DD8}\x{7DD9}\x{7DDA}' .
-          '\x{7DDB}\x{7DDD}\x{7DDE}\x{7DDF}\x{7DE0}\x{7DE1}\x{7DE2}\x{7DE3}\x{7DE6}' .
-          '\x{7DE7}\x{7DE8}\x{7DE9}\x{7DEA}\x{7DEC}\x{7DED}\x{7DEE}\x{7DEF}\x{7DF0}' .
-          '\x{7DF1}\x{7DF2}\x{7DF3}\x{7DF4}\x{7DF5}\x{7DF6}\x{7DF7}\x{7DF8}\x{7DF9}' .
-          '\x{7DFA}\x{7DFB}\x{7DFC}\x{7E00}\x{7E01}\x{7E02}\x{7E03}\x{7E04}\x{7E05}' .
-          '\x{7E06}\x{7E07}\x{7E08}\x{7E09}\x{7E0A}\x{7E0B}\x{7E0C}\x{7E0D}\x{7E0E}' .
-          '\x{7E0F}\x{7E10}\x{7E11}\x{7E12}\x{7E13}\x{7E14}\x{7E15}\x{7E16}\x{7E17}' .
-          '\x{7E19}\x{7E1A}\x{7E1B}\x{7E1C}\x{7E1D}\x{7E1E}\x{7E1F}\x{7E20}\x{7E21}' .
-          '\x{7E22}\x{7E23}\x{7E24}\x{7E25}\x{7E26}\x{7E27}\x{7E28}\x{7E29}\x{7E2A}' .
-          '\x{7E2B}\x{7E2C}\x{7E2D}\x{7E2E}\x{7E2F}\x{7E30}\x{7E31}\x{7E32}\x{7E33}' .
-          '\x{7E34}\x{7E35}\x{7E36}\x{7E37}\x{7E38}\x{7E39}\x{7E3A}\x{7E3B}\x{7E3C}' .
-          '\x{7E3D}\x{7E3E}\x{7E3F}\x{7E40}\x{7E41}\x{7E42}\x{7E43}\x{7E44}\x{7E45}' .
-          '\x{7E46}\x{7E47}\x{7E48}\x{7E49}\x{7E4C}\x{7E4D}\x{7E4E}\x{7E4F}\x{7E50}' .
-          '\x{7E51}\x{7E52}\x{7E53}\x{7E54}\x{7E55}\x{7E56}\x{7E57}\x{7E58}\x{7E59}' .
-          '\x{7E5A}\x{7E5C}\x{7E5D}\x{7E5E}\x{7E5F}\x{7E60}\x{7E61}\x{7E62}\x{7E63}' .
-          '\x{7E65}\x{7E66}\x{7E67}\x{7E68}\x{7E69}\x{7E6A}\x{7E6B}\x{7E6C}\x{7E6D}' .
-          '\x{7E6E}\x{7E6F}\x{7E70}\x{7E71}\x{7E72}\x{7E73}\x{7E74}\x{7E75}\x{7E76}' .
-          '\x{7E77}\x{7E78}\x{7E79}\x{7E7A}\x{7E7B}\x{7E7C}\x{7E7D}\x{7E7E}\x{7E7F}' .
-          '\x{7E80}\x{7E81}\x{7E82}\x{7E83}\x{7E84}\x{7E85}\x{7E86}\x{7E87}\x{7E88}' .
-          '\x{7E89}\x{7E8A}\x{7E8B}\x{7E8C}\x{7E8D}\x{7E8E}\x{7E8F}\x{7E90}\x{7E91}' .
-          '\x{7E92}\x{7E93}\x{7E94}\x{7E95}\x{7E96}\x{7E97}\x{7E98}\x{7E99}\x{7E9A}' .
-          '\x{7E9B}\x{7E9C}\x{7E9E}\x{7E9F}\x{7EA0}\x{7EA1}\x{7EA2}\x{7EA3}\x{7EA4}' .
-          '\x{7EA5}\x{7EA6}\x{7EA7}\x{7EA8}\x{7EA9}\x{7EAA}\x{7EAB}\x{7EAC}\x{7EAD}' .
-          '\x{7EAE}\x{7EAF}\x{7EB0}\x{7EB1}\x{7EB2}\x{7EB3}\x{7EB4}\x{7EB5}\x{7EB6}' .
-          '\x{7EB7}\x{7EB8}\x{7EB9}\x{7EBA}\x{7EBB}\x{7EBC}\x{7EBD}\x{7EBE}\x{7EBF}' .
-          '\x{7EC0}\x{7EC1}\x{7EC2}\x{7EC3}\x{7EC4}\x{7EC5}\x{7EC6}\x{7EC7}\x{7EC8}' .
-          '\x{7EC9}\x{7ECA}\x{7ECB}\x{7ECC}\x{7ECD}\x{7ECE}\x{7ECF}\x{7ED0}\x{7ED1}' .
-          '\x{7ED2}\x{7ED3}\x{7ED4}\x{7ED5}\x{7ED6}\x{7ED7}\x{7ED8}\x{7ED9}\x{7EDA}' .
-          '\x{7EDB}\x{7EDC}\x{7EDD}\x{7EDE}\x{7EDF}\x{7EE0}\x{7EE1}\x{7EE2}\x{7EE3}' .
-          '\x{7EE4}\x{7EE5}\x{7EE6}\x{7EE7}\x{7EE8}\x{7EE9}\x{7EEA}\x{7EEB}\x{7EEC}' .
-          '\x{7EED}\x{7EEE}\x{7EEF}\x{7EF0}\x{7EF1}\x{7EF2}\x{7EF3}\x{7EF4}\x{7EF5}' .
-          '\x{7EF6}\x{7EF7}\x{7EF8}\x{7EF9}\x{7EFA}\x{7EFB}\x{7EFC}\x{7EFD}\x{7EFE}' .
-          '\x{7EFF}\x{7F00}\x{7F01}\x{7F02}\x{7F03}\x{7F04}\x{7F05}\x{7F06}\x{7F07}' .
-          '\x{7F08}\x{7F09}\x{7F0A}\x{7F0B}\x{7F0C}\x{7F0D}\x{7F0E}\x{7F0F}\x{7F10}' .
-          '\x{7F11}\x{7F12}\x{7F13}\x{7F14}\x{7F15}\x{7F16}\x{7F17}\x{7F18}\x{7F19}' .
-          '\x{7F1A}\x{7F1B}\x{7F1C}\x{7F1D}\x{7F1E}\x{7F1F}\x{7F20}\x{7F21}\x{7F22}' .
-          '\x{7F23}\x{7F24}\x{7F25}\x{7F26}\x{7F27}\x{7F28}\x{7F29}\x{7F2A}\x{7F2B}' .
-          '\x{7F2C}\x{7F2D}\x{7F2E}\x{7F2F}\x{7F30}\x{7F31}\x{7F32}\x{7F33}\x{7F34}' .
-          '\x{7F35}\x{7F36}\x{7F37}\x{7F38}\x{7F39}\x{7F3A}\x{7F3D}\x{7F3E}\x{7F3F}' .
-          '\x{7F40}\x{7F42}\x{7F43}\x{7F44}\x{7F45}\x{7F47}\x{7F48}\x{7F49}\x{7F4A}' .
-          '\x{7F4B}\x{7F4C}\x{7F4D}\x{7F4E}\x{7F4F}\x{7F50}\x{7F51}\x{7F52}\x{7F53}' .
-          '\x{7F54}\x{7F55}\x{7F56}\x{7F57}\x{7F58}\x{7F5A}\x{7F5B}\x{7F5C}\x{7F5D}' .
-          '\x{7F5E}\x{7F5F}\x{7F60}\x{7F61}\x{7F62}\x{7F63}\x{7F64}\x{7F65}\x{7F66}' .
-          '\x{7F67}\x{7F68}\x{7F69}\x{7F6A}\x{7F6B}\x{7F6C}\x{7F6D}\x{7F6E}\x{7F6F}' .
-          '\x{7F70}\x{7F71}\x{7F72}\x{7F73}\x{7F74}\x{7F75}\x{7F76}\x{7F77}\x{7F78}' .
-          '\x{7F79}\x{7F7A}\x{7F7B}\x{7F7C}\x{7F7D}\x{7F7E}\x{7F7F}\x{7F80}\x{7F81}' .
-          '\x{7F82}\x{7F83}\x{7F85}\x{7F86}\x{7F87}\x{7F88}\x{7F89}\x{7F8A}\x{7F8B}' .
-          '\x{7F8C}\x{7F8D}\x{7F8E}\x{7F8F}\x{7F91}\x{7F92}\x{7F93}\x{7F94}\x{7F95}' .
-          '\x{7F96}\x{7F98}\x{7F9A}\x{7F9B}\x{7F9C}\x{7F9D}\x{7F9E}\x{7F9F}\x{7FA0}' .
-          '\x{7FA1}\x{7FA2}\x{7FA3}\x{7FA4}\x{7FA5}\x{7FA6}\x{7FA7}\x{7FA8}\x{7FA9}' .
-          '\x{7FAA}\x{7FAB}\x{7FAC}\x{7FAD}\x{7FAE}\x{7FAF}\x{7FB0}\x{7FB1}\x{7FB2}' .
-          '\x{7FB3}\x{7FB5}\x{7FB6}\x{7FB7}\x{7FB8}\x{7FB9}\x{7FBA}\x{7FBB}\x{7FBC}' .
-          '\x{7FBD}\x{7FBE}\x{7FBF}\x{7FC0}\x{7FC1}\x{7FC2}\x{7FC3}\x{7FC4}\x{7FC5}' .
-          '\x{7FC6}\x{7FC7}\x{7FC8}\x{7FC9}\x{7FCA}\x{7FCB}\x{7FCC}\x{7FCD}\x{7FCE}' .
-          '\x{7FCF}\x{7FD0}\x{7FD1}\x{7FD2}\x{7FD3}\x{7FD4}\x{7FD5}\x{7FD7}\x{7FD8}' .
-          '\x{7FD9}\x{7FDA}\x{7FDB}\x{7FDC}\x{7FDE}\x{7FDF}\x{7FE0}\x{7FE1}\x{7FE2}' .
-          '\x{7FE3}\x{7FE5}\x{7FE6}\x{7FE7}\x{7FE8}\x{7FE9}\x{7FEA}\x{7FEB}\x{7FEC}' .
-          '\x{7FED}\x{7FEE}\x{7FEF}\x{7FF0}\x{7FF1}\x{7FF2}\x{7FF3}\x{7FF4}\x{7FF5}' .
-          '\x{7FF6}\x{7FF7}\x{7FF8}\x{7FF9}\x{7FFA}\x{7FFB}\x{7FFC}\x{7FFD}\x{7FFE}' .
-          '\x{7FFF}\x{8000}\x{8001}\x{8002}\x{8003}\x{8004}\x{8005}\x{8006}\x{8007}' .
-          '\x{8008}\x{8009}\x{800B}\x{800C}\x{800D}\x{800E}\x{800F}\x{8010}\x{8011}' .
-          '\x{8012}\x{8013}\x{8014}\x{8015}\x{8016}\x{8017}\x{8018}\x{8019}\x{801A}' .
-          '\x{801B}\x{801C}\x{801D}\x{801E}\x{801F}\x{8020}\x{8021}\x{8022}\x{8023}' .
-          '\x{8024}\x{8025}\x{8026}\x{8027}\x{8028}\x{8029}\x{802A}\x{802B}\x{802C}' .
-          '\x{802D}\x{802E}\x{8030}\x{8031}\x{8032}\x{8033}\x{8034}\x{8035}\x{8036}' .
-          '\x{8037}\x{8038}\x{8039}\x{803A}\x{803B}\x{803D}\x{803E}\x{803F}\x{8041}' .
-          '\x{8042}\x{8043}\x{8044}\x{8045}\x{8046}\x{8047}\x{8048}\x{8049}\x{804A}' .
-          '\x{804B}\x{804C}\x{804D}\x{804E}\x{804F}\x{8050}\x{8051}\x{8052}\x{8053}' .
-          '\x{8054}\x{8055}\x{8056}\x{8057}\x{8058}\x{8059}\x{805A}\x{805B}\x{805C}' .
-          '\x{805D}\x{805E}\x{805F}\x{8060}\x{8061}\x{8062}\x{8063}\x{8064}\x{8065}' .
-          '\x{8067}\x{8068}\x{8069}\x{806A}\x{806B}\x{806C}\x{806D}\x{806E}\x{806F}' .
-          '\x{8070}\x{8071}\x{8072}\x{8073}\x{8074}\x{8075}\x{8076}\x{8077}\x{8078}' .
-          '\x{8079}\x{807A}\x{807B}\x{807C}\x{807D}\x{807E}\x{807F}\x{8080}\x{8081}' .
-          '\x{8082}\x{8083}\x{8084}\x{8085}\x{8086}\x{8087}\x{8089}\x{808A}\x{808B}' .
-          '\x{808C}\x{808D}\x{808F}\x{8090}\x{8091}\x{8092}\x{8093}\x{8095}\x{8096}' .
-          '\x{8097}\x{8098}\x{8099}\x{809A}\x{809B}\x{809C}\x{809D}\x{809E}\x{809F}' .
-          '\x{80A0}\x{80A1}\x{80A2}\x{80A3}\x{80A4}\x{80A5}\x{80A9}\x{80AA}\x{80AB}' .
-          '\x{80AD}\x{80AE}\x{80AF}\x{80B0}\x{80B1}\x{80B2}\x{80B4}\x{80B5}\x{80B6}' .
-          '\x{80B7}\x{80B8}\x{80BA}\x{80BB}\x{80BC}\x{80BD}\x{80BE}\x{80BF}\x{80C0}' .
-          '\x{80C1}\x{80C2}\x{80C3}\x{80C4}\x{80C5}\x{80C6}\x{80C7}\x{80C8}\x{80C9}' .
-          '\x{80CA}\x{80CB}\x{80CC}\x{80CD}\x{80CE}\x{80CF}\x{80D0}\x{80D1}\x{80D2}' .
-          '\x{80D3}\x{80D4}\x{80D5}\x{80D6}\x{80D7}\x{80D8}\x{80D9}\x{80DA}\x{80DB}' .
-          '\x{80DC}\x{80DD}\x{80DE}\x{80E0}\x{80E1}\x{80E2}\x{80E3}\x{80E4}\x{80E5}' .
-          '\x{80E6}\x{80E7}\x{80E8}\x{80E9}\x{80EA}\x{80EB}\x{80EC}\x{80ED}\x{80EE}' .
-          '\x{80EF}\x{80F0}\x{80F1}\x{80F2}\x{80F3}\x{80F4}\x{80F5}\x{80F6}\x{80F7}' .
-          '\x{80F8}\x{80F9}\x{80FA}\x{80FB}\x{80FC}\x{80FD}\x{80FE}\x{80FF}\x{8100}' .
-          '\x{8101}\x{8102}\x{8105}\x{8106}\x{8107}\x{8108}\x{8109}\x{810A}\x{810B}' .
-          '\x{810C}\x{810D}\x{810E}\x{810F}\x{8110}\x{8111}\x{8112}\x{8113}\x{8114}' .
-          '\x{8115}\x{8116}\x{8118}\x{8119}\x{811A}\x{811B}\x{811C}\x{811D}\x{811E}' .
-          '\x{811F}\x{8120}\x{8121}\x{8122}\x{8123}\x{8124}\x{8125}\x{8126}\x{8127}' .
-          '\x{8128}\x{8129}\x{812A}\x{812B}\x{812C}\x{812D}\x{812E}\x{812F}\x{8130}' .
-          '\x{8131}\x{8132}\x{8136}\x{8137}\x{8138}\x{8139}\x{813A}\x{813B}\x{813C}' .
-          '\x{813D}\x{813E}\x{813F}\x{8140}\x{8141}\x{8142}\x{8143}\x{8144}\x{8145}' .
-          '\x{8146}\x{8147}\x{8148}\x{8149}\x{814A}\x{814B}\x{814C}\x{814D}\x{814E}' .
-          '\x{814F}\x{8150}\x{8151}\x{8152}\x{8153}\x{8154}\x{8155}\x{8156}\x{8157}' .
-          '\x{8158}\x{8159}\x{815A}\x{815B}\x{815C}\x{815D}\x{815E}\x{8160}\x{8161}' .
-          '\x{8162}\x{8163}\x{8164}\x{8165}\x{8166}\x{8167}\x{8168}\x{8169}\x{816A}' .
-          '\x{816B}\x{816C}\x{816D}\x{816E}\x{816F}\x{8170}\x{8171}\x{8172}\x{8173}' .
-          '\x{8174}\x{8175}\x{8176}\x{8177}\x{8178}\x{8179}\x{817A}\x{817B}\x{817C}' .
-          '\x{817D}\x{817E}\x{817F}\x{8180}\x{8181}\x{8182}\x{8183}\x{8185}\x{8186}' .
-          '\x{8187}\x{8188}\x{8189}\x{818A}\x{818B}\x{818C}\x{818D}\x{818E}\x{818F}' .
-          '\x{8191}\x{8192}\x{8193}\x{8194}\x{8195}\x{8197}\x{8198}\x{8199}\x{819A}' .
-          '\x{819B}\x{819C}\x{819D}\x{819E}\x{819F}\x{81A0}\x{81A1}\x{81A2}\x{81A3}' .
-          '\x{81A4}\x{81A5}\x{81A6}\x{81A7}\x{81A8}\x{81A9}\x{81AA}\x{81AB}\x{81AC}' .
-          '\x{81AD}\x{81AE}\x{81AF}\x{81B0}\x{81B1}\x{81B2}\x{81B3}\x{81B4}\x{81B5}' .
-          '\x{81B6}\x{81B7}\x{81B8}\x{81B9}\x{81BA}\x{81BB}\x{81BC}\x{81BD}\x{81BE}' .
-          '\x{81BF}\x{81C0}\x{81C1}\x{81C2}\x{81C3}\x{81C4}\x{81C5}\x{81C6}\x{81C7}' .
-          '\x{81C8}\x{81C9}\x{81CA}\x{81CC}\x{81CD}\x{81CE}\x{81CF}\x{81D0}\x{81D1}' .
-          '\x{81D2}\x{81D4}\x{81D5}\x{81D6}\x{81D7}\x{81D8}\x{81D9}\x{81DA}\x{81DB}' .
-          '\x{81DC}\x{81DD}\x{81DE}\x{81DF}\x{81E0}\x{81E1}\x{81E2}\x{81E3}\x{81E5}' .
-          '\x{81E6}\x{81E7}\x{81E8}\x{81E9}\x{81EA}\x{81EB}\x{81EC}\x{81ED}\x{81EE}' .
-          '\x{81F1}\x{81F2}\x{81F3}\x{81F4}\x{81F5}\x{81F6}\x{81F7}\x{81F8}\x{81F9}' .
-          '\x{81FA}\x{81FB}\x{81FC}\x{81FD}\x{81FE}\x{81FF}\x{8200}\x{8201}\x{8202}' .
-          '\x{8203}\x{8204}\x{8205}\x{8206}\x{8207}\x{8208}\x{8209}\x{820A}\x{820B}' .
-          '\x{820C}\x{820D}\x{820E}\x{820F}\x{8210}\x{8211}\x{8212}\x{8214}\x{8215}' .
-          '\x{8216}\x{8218}\x{8219}\x{821A}\x{821B}\x{821C}\x{821D}\x{821E}\x{821F}' .
-          '\x{8220}\x{8221}\x{8222}\x{8223}\x{8225}\x{8226}\x{8227}\x{8228}\x{8229}' .
-          '\x{822A}\x{822B}\x{822C}\x{822D}\x{822F}\x{8230}\x{8231}\x{8232}\x{8233}' .
-          '\x{8234}\x{8235}\x{8236}\x{8237}\x{8238}\x{8239}\x{823A}\x{823B}\x{823C}' .
-          '\x{823D}\x{823E}\x{823F}\x{8240}\x{8242}\x{8243}\x{8244}\x{8245}\x{8246}' .
-          '\x{8247}\x{8248}\x{8249}\x{824A}\x{824B}\x{824C}\x{824D}\x{824E}\x{824F}' .
-          '\x{8250}\x{8251}\x{8252}\x{8253}\x{8254}\x{8255}\x{8256}\x{8257}\x{8258}' .
-          '\x{8259}\x{825A}\x{825B}\x{825C}\x{825D}\x{825E}\x{825F}\x{8260}\x{8261}' .
-          '\x{8263}\x{8264}\x{8266}\x{8267}\x{8268}\x{8269}\x{826A}\x{826B}\x{826C}' .
-          '\x{826D}\x{826E}\x{826F}\x{8270}\x{8271}\x{8272}\x{8273}\x{8274}\x{8275}' .
-          '\x{8276}\x{8277}\x{8278}\x{8279}\x{827A}\x{827B}\x{827C}\x{827D}\x{827E}' .
-          '\x{827F}\x{8280}\x{8281}\x{8282}\x{8283}\x{8284}\x{8285}\x{8286}\x{8287}' .
-          '\x{8288}\x{8289}\x{828A}\x{828B}\x{828D}\x{828E}\x{828F}\x{8290}\x{8291}' .
-          '\x{8292}\x{8293}\x{8294}\x{8295}\x{8296}\x{8297}\x{8298}\x{8299}\x{829A}' .
-          '\x{829B}\x{829C}\x{829D}\x{829E}\x{829F}\x{82A0}\x{82A1}\x{82A2}\x{82A3}' .
-          '\x{82A4}\x{82A5}\x{82A6}\x{82A7}\x{82A8}\x{82A9}\x{82AA}\x{82AB}\x{82AC}' .
-          '\x{82AD}\x{82AE}\x{82AF}\x{82B0}\x{82B1}\x{82B3}\x{82B4}\x{82B5}\x{82B6}' .
-          '\x{82B7}\x{82B8}\x{82B9}\x{82BA}\x{82BB}\x{82BC}\x{82BD}\x{82BE}\x{82BF}' .
-          '\x{82C0}\x{82C1}\x{82C2}\x{82C3}\x{82C4}\x{82C5}\x{82C6}\x{82C7}\x{82C8}' .
-          '\x{82C9}\x{82CA}\x{82CB}\x{82CC}\x{82CD}\x{82CE}\x{82CF}\x{82D0}\x{82D1}' .
-          '\x{82D2}\x{82D3}\x{82D4}\x{82D5}\x{82D6}\x{82D7}\x{82D8}\x{82D9}\x{82DA}' .
-          '\x{82DB}\x{82DC}\x{82DD}\x{82DE}\x{82DF}\x{82E0}\x{82E1}\x{82E3}\x{82E4}' .
-          '\x{82E5}\x{82E6}\x{82E7}\x{82E8}\x{82E9}\x{82EA}\x{82EB}\x{82EC}\x{82ED}' .
-          '\x{82EE}\x{82EF}\x{82F0}\x{82F1}\x{82F2}\x{82F3}\x{82F4}\x{82F5}\x{82F6}' .
-          '\x{82F7}\x{82F8}\x{82F9}\x{82FA}\x{82FB}\x{82FD}\x{82FE}\x{82FF}\x{8300}' .
-          '\x{8301}\x{8302}\x{8303}\x{8304}\x{8305}\x{8306}\x{8307}\x{8308}\x{8309}' .
-          '\x{830B}\x{830C}\x{830D}\x{830E}\x{830F}\x{8311}\x{8312}\x{8313}\x{8314}' .
-          '\x{8315}\x{8316}\x{8317}\x{8318}\x{8319}\x{831A}\x{831B}\x{831C}\x{831D}' .
-          '\x{831E}\x{831F}\x{8320}\x{8321}\x{8322}\x{8323}\x{8324}\x{8325}\x{8326}' .
-          '\x{8327}\x{8328}\x{8329}\x{832A}\x{832B}\x{832C}\x{832D}\x{832E}\x{832F}' .
-          '\x{8331}\x{8332}\x{8333}\x{8334}\x{8335}\x{8336}\x{8337}\x{8338}\x{8339}' .
-          '\x{833A}\x{833B}\x{833C}\x{833D}\x{833E}\x{833F}\x{8340}\x{8341}\x{8342}' .
-          '\x{8343}\x{8344}\x{8345}\x{8346}\x{8347}\x{8348}\x{8349}\x{834A}\x{834B}' .
-          '\x{834C}\x{834D}\x{834E}\x{834F}\x{8350}\x{8351}\x{8352}\x{8353}\x{8354}' .
-          '\x{8356}\x{8357}\x{8358}\x{8359}\x{835A}\x{835B}\x{835C}\x{835D}\x{835E}' .
-          '\x{835F}\x{8360}\x{8361}\x{8362}\x{8363}\x{8364}\x{8365}\x{8366}\x{8367}' .
-          '\x{8368}\x{8369}\x{836A}\x{836B}\x{836C}\x{836D}\x{836E}\x{836F}\x{8370}' .
-          '\x{8371}\x{8372}\x{8373}\x{8374}\x{8375}\x{8376}\x{8377}\x{8378}\x{8379}' .
-          '\x{837A}\x{837B}\x{837C}\x{837D}\x{837E}\x{837F}\x{8380}\x{8381}\x{8382}' .
-          '\x{8383}\x{8384}\x{8385}\x{8386}\x{8387}\x{8388}\x{8389}\x{838A}\x{838B}' .
-          '\x{838C}\x{838D}\x{838E}\x{838F}\x{8390}\x{8391}\x{8392}\x{8393}\x{8394}' .
-          '\x{8395}\x{8396}\x{8397}\x{8398}\x{8399}\x{839A}\x{839B}\x{839C}\x{839D}' .
-          '\x{839E}\x{83A0}\x{83A1}\x{83A2}\x{83A3}\x{83A4}\x{83A5}\x{83A6}\x{83A7}' .
-          '\x{83A8}\x{83A9}\x{83AA}\x{83AB}\x{83AC}\x{83AD}\x{83AE}\x{83AF}\x{83B0}' .
-          '\x{83B1}\x{83B2}\x{83B3}\x{83B4}\x{83B6}\x{83B7}\x{83B8}\x{83B9}\x{83BA}' .
-          '\x{83BB}\x{83BC}\x{83BD}\x{83BF}\x{83C0}\x{83C1}\x{83C2}\x{83C3}\x{83C4}' .
-          '\x{83C5}\x{83C6}\x{83C7}\x{83C8}\x{83C9}\x{83CA}\x{83CB}\x{83CC}\x{83CD}' .
-          '\x{83CE}\x{83CF}\x{83D0}\x{83D1}\x{83D2}\x{83D3}\x{83D4}\x{83D5}\x{83D6}' .
-          '\x{83D7}\x{83D8}\x{83D9}\x{83DA}\x{83DB}\x{83DC}\x{83DD}\x{83DE}\x{83DF}' .
-          '\x{83E0}\x{83E1}\x{83E2}\x{83E3}\x{83E4}\x{83E5}\x{83E7}\x{83E8}\x{83E9}' .
-          '\x{83EA}\x{83EB}\x{83EC}\x{83EE}\x{83EF}\x{83F0}\x{83F1}\x{83F2}\x{83F3}' .
-          '\x{83F4}\x{83F5}\x{83F6}\x{83F7}\x{83F8}\x{83F9}\x{83FA}\x{83FB}\x{83FC}' .
-          '\x{83FD}\x{83FE}\x{83FF}\x{8400}\x{8401}\x{8402}\x{8403}\x{8404}\x{8405}' .
-          '\x{8406}\x{8407}\x{8408}\x{8409}\x{840A}\x{840B}\x{840C}\x{840D}\x{840E}' .
-          '\x{840F}\x{8410}\x{8411}\x{8412}\x{8413}\x{8415}\x{8418}\x{8419}\x{841A}' .
-          '\x{841B}\x{841C}\x{841D}\x{841E}\x{8421}\x{8422}\x{8423}\x{8424}\x{8425}' .
-          '\x{8426}\x{8427}\x{8428}\x{8429}\x{842A}\x{842B}\x{842C}\x{842D}\x{842E}' .
-          '\x{842F}\x{8430}\x{8431}\x{8432}\x{8433}\x{8434}\x{8435}\x{8436}\x{8437}' .
-          '\x{8438}\x{8439}\x{843A}\x{843B}\x{843C}\x{843D}\x{843E}\x{843F}\x{8440}' .
-          '\x{8441}\x{8442}\x{8443}\x{8444}\x{8445}\x{8446}\x{8447}\x{8448}\x{8449}' .
-          '\x{844A}\x{844B}\x{844C}\x{844D}\x{844E}\x{844F}\x{8450}\x{8451}\x{8452}' .
-          '\x{8453}\x{8454}\x{8455}\x{8456}\x{8457}\x{8459}\x{845A}\x{845B}\x{845C}' .
-          '\x{845D}\x{845E}\x{845F}\x{8460}\x{8461}\x{8462}\x{8463}\x{8464}\x{8465}' .
-          '\x{8466}\x{8467}\x{8468}\x{8469}\x{846A}\x{846B}\x{846C}\x{846D}\x{846E}' .
-          '\x{846F}\x{8470}\x{8471}\x{8472}\x{8473}\x{8474}\x{8475}\x{8476}\x{8477}' .
-          '\x{8478}\x{8479}\x{847A}\x{847B}\x{847C}\x{847D}\x{847E}\x{847F}\x{8480}' .
-          '\x{8481}\x{8482}\x{8484}\x{8485}\x{8486}\x{8487}\x{8488}\x{8489}\x{848A}' .
-          '\x{848B}\x{848C}\x{848D}\x{848E}\x{848F}\x{8490}\x{8491}\x{8492}\x{8493}' .
-          '\x{8494}\x{8496}\x{8497}\x{8498}\x{8499}\x{849A}\x{849B}\x{849C}\x{849D}' .
-          '\x{849E}\x{849F}\x{84A0}\x{84A1}\x{84A2}\x{84A3}\x{84A4}\x{84A5}\x{84A6}' .
-          '\x{84A7}\x{84A8}\x{84A9}\x{84AA}\x{84AB}\x{84AC}\x{84AE}\x{84AF}\x{84B0}' .
-          '\x{84B1}\x{84B2}\x{84B3}\x{84B4}\x{84B5}\x{84B6}\x{84B8}\x{84B9}\x{84BA}' .
-          '\x{84BB}\x{84BC}\x{84BD}\x{84BE}\x{84BF}\x{84C0}\x{84C1}\x{84C2}\x{84C4}' .
-          '\x{84C5}\x{84C6}\x{84C7}\x{84C8}\x{84C9}\x{84CA}\x{84CB}\x{84CC}\x{84CD}' .
-          '\x{84CE}\x{84CF}\x{84D0}\x{84D1}\x{84D2}\x{84D3}\x{84D4}\x{84D5}\x{84D6}' .
-          '\x{84D7}\x{84D8}\x{84D9}\x{84DB}\x{84DC}\x{84DD}\x{84DE}\x{84DF}\x{84E0}' .
-          '\x{84E1}\x{84E2}\x{84E3}\x{84E4}\x{84E5}\x{84E6}\x{84E7}\x{84E8}\x{84E9}' .
-          '\x{84EA}\x{84EB}\x{84EC}\x{84EE}\x{84EF}\x{84F0}\x{84F1}\x{84F2}\x{84F3}' .
-          '\x{84F4}\x{84F5}\x{84F6}\x{84F7}\x{84F8}\x{84F9}\x{84FA}\x{84FB}\x{84FC}' .
-          '\x{84FD}\x{84FE}\x{84FF}\x{8500}\x{8501}\x{8502}\x{8503}\x{8504}\x{8506}' .
-          '\x{8507}\x{8508}\x{8509}\x{850A}\x{850B}\x{850C}\x{850D}\x{850E}\x{850F}' .
-          '\x{8511}\x{8512}\x{8513}\x{8514}\x{8515}\x{8516}\x{8517}\x{8518}\x{8519}' .
-          '\x{851A}\x{851B}\x{851C}\x{851D}\x{851E}\x{851F}\x{8520}\x{8521}\x{8522}' .
-          '\x{8523}\x{8524}\x{8525}\x{8526}\x{8527}\x{8528}\x{8529}\x{852A}\x{852B}' .
-          '\x{852C}\x{852D}\x{852E}\x{852F}\x{8530}\x{8531}\x{8534}\x{8535}\x{8536}' .
-          '\x{8537}\x{8538}\x{8539}\x{853A}\x{853B}\x{853C}\x{853D}\x{853E}\x{853F}' .
-          '\x{8540}\x{8541}\x{8542}\x{8543}\x{8544}\x{8545}\x{8546}\x{8547}\x{8548}' .
-          '\x{8549}\x{854A}\x{854B}\x{854D}\x{854E}\x{854F}\x{8551}\x{8552}\x{8553}' .
-          '\x{8554}\x{8555}\x{8556}\x{8557}\x{8558}\x{8559}\x{855A}\x{855B}\x{855C}' .
-          '\x{855D}\x{855E}\x{855F}\x{8560}\x{8561}\x{8562}\x{8563}\x{8564}\x{8565}' .
-          '\x{8566}\x{8567}\x{8568}\x{8569}\x{856A}\x{856B}\x{856C}\x{856D}\x{856E}' .
-          '\x{856F}\x{8570}\x{8571}\x{8572}\x{8573}\x{8574}\x{8575}\x{8576}\x{8577}' .
-          '\x{8578}\x{8579}\x{857A}\x{857B}\x{857C}\x{857D}\x{857E}\x{8580}\x{8581}' .
-          '\x{8582}\x{8583}\x{8584}\x{8585}\x{8586}\x{8587}\x{8588}\x{8589}\x{858A}' .
-          '\x{858B}\x{858C}\x{858D}\x{858E}\x{858F}\x{8590}\x{8591}\x{8592}\x{8594}' .
-          '\x{8595}\x{8596}\x{8598}\x{8599}\x{859A}\x{859B}\x{859C}\x{859D}\x{859E}' .
-          '\x{859F}\x{85A0}\x{85A1}\x{85A2}\x{85A3}\x{85A4}\x{85A5}\x{85A6}\x{85A7}' .
-          '\x{85A8}\x{85A9}\x{85AA}\x{85AB}\x{85AC}\x{85AD}\x{85AE}\x{85AF}\x{85B0}' .
-          '\x{85B1}\x{85B3}\x{85B4}\x{85B5}\x{85B6}\x{85B7}\x{85B8}\x{85B9}\x{85BA}' .
-          '\x{85BC}\x{85BD}\x{85BE}\x{85BF}\x{85C0}\x{85C1}\x{85C2}\x{85C3}\x{85C4}' .
-          '\x{85C5}\x{85C6}\x{85C7}\x{85C8}\x{85C9}\x{85CA}\x{85CB}\x{85CD}\x{85CE}' .
-          '\x{85CF}\x{85D0}\x{85D1}\x{85D2}\x{85D3}\x{85D4}\x{85D5}\x{85D6}\x{85D7}' .
-          '\x{85D8}\x{85D9}\x{85DA}\x{85DB}\x{85DC}\x{85DD}\x{85DE}\x{85DF}\x{85E0}' .
-          '\x{85E1}\x{85E2}\x{85E3}\x{85E4}\x{85E5}\x{85E6}\x{85E7}\x{85E8}\x{85E9}' .
-          '\x{85EA}\x{85EB}\x{85EC}\x{85ED}\x{85EF}\x{85F0}\x{85F1}\x{85F2}\x{85F4}' .
-          '\x{85F5}\x{85F6}\x{85F7}\x{85F8}\x{85F9}\x{85FA}\x{85FB}\x{85FD}\x{85FE}' .
-          '\x{85FF}\x{8600}\x{8601}\x{8602}\x{8604}\x{8605}\x{8606}\x{8607}\x{8608}' .
-          '\x{8609}\x{860A}\x{860B}\x{860C}\x{860F}\x{8611}\x{8612}\x{8613}\x{8614}' .
-          '\x{8616}\x{8617}\x{8618}\x{8619}\x{861A}\x{861B}\x{861C}\x{861E}\x{861F}' .
-          '\x{8620}\x{8621}\x{8622}\x{8623}\x{8624}\x{8625}\x{8626}\x{8627}\x{8628}' .
-          '\x{8629}\x{862A}\x{862B}\x{862C}\x{862D}\x{862E}\x{862F}\x{8630}\x{8631}' .
-          '\x{8632}\x{8633}\x{8634}\x{8635}\x{8636}\x{8638}\x{8639}\x{863A}\x{863B}' .
-          '\x{863C}\x{863D}\x{863E}\x{863F}\x{8640}\x{8641}\x{8642}\x{8643}\x{8644}' .
-          '\x{8645}\x{8646}\x{8647}\x{8648}\x{8649}\x{864A}\x{864B}\x{864C}\x{864D}' .
-          '\x{864E}\x{864F}\x{8650}\x{8651}\x{8652}\x{8653}\x{8654}\x{8655}\x{8656}' .
-          '\x{8658}\x{8659}\x{865A}\x{865B}\x{865C}\x{865D}\x{865E}\x{865F}\x{8660}' .
-          '\x{8661}\x{8662}\x{8663}\x{8664}\x{8665}\x{8666}\x{8667}\x{8668}\x{8669}' .
-          '\x{866A}\x{866B}\x{866C}\x{866D}\x{866E}\x{866F}\x{8670}\x{8671}\x{8672}' .
-          '\x{8673}\x{8674}\x{8676}\x{8677}\x{8678}\x{8679}\x{867A}\x{867B}\x{867C}' .
-          '\x{867D}\x{867E}\x{867F}\x{8680}\x{8681}\x{8682}\x{8683}\x{8684}\x{8685}' .
-          '\x{8686}\x{8687}\x{8688}\x{868A}\x{868B}\x{868C}\x{868D}\x{868E}\x{868F}' .
-          '\x{8690}\x{8691}\x{8693}\x{8694}\x{8695}\x{8696}\x{8697}\x{8698}\x{8699}' .
-          '\x{869A}\x{869B}\x{869C}\x{869D}\x{869E}\x{869F}\x{86A1}\x{86A2}\x{86A3}' .
-          '\x{86A4}\x{86A5}\x{86A7}\x{86A8}\x{86A9}\x{86AA}\x{86AB}\x{86AC}\x{86AD}' .
-          '\x{86AE}\x{86AF}\x{86B0}\x{86B1}\x{86B2}\x{86B3}\x{86B4}\x{86B5}\x{86B6}' .
-          '\x{86B7}\x{86B8}\x{86B9}\x{86BA}\x{86BB}\x{86BC}\x{86BD}\x{86BE}\x{86BF}' .
-          '\x{86C0}\x{86C1}\x{86C2}\x{86C3}\x{86C4}\x{86C5}\x{86C6}\x{86C7}\x{86C8}' .
-          '\x{86C9}\x{86CA}\x{86CB}\x{86CC}\x{86CE}\x{86CF}\x{86D0}\x{86D1}\x{86D2}' .
-          '\x{86D3}\x{86D4}\x{86D6}\x{86D7}\x{86D8}\x{86D9}\x{86DA}\x{86DB}\x{86DC}' .
-          '\x{86DD}\x{86DE}\x{86DF}\x{86E1}\x{86E2}\x{86E3}\x{86E4}\x{86E5}\x{86E6}' .
-          '\x{86E8}\x{86E9}\x{86EA}\x{86EB}\x{86EC}\x{86ED}\x{86EE}\x{86EF}\x{86F0}' .
-          '\x{86F1}\x{86F2}\x{86F3}\x{86F4}\x{86F5}\x{86F6}\x{86F7}\x{86F8}\x{86F9}' .
-          '\x{86FA}\x{86FB}\x{86FC}\x{86FE}\x{86FF}\x{8700}\x{8701}\x{8702}\x{8703}' .
-          '\x{8704}\x{8705}\x{8706}\x{8707}\x{8708}\x{8709}\x{870A}\x{870B}\x{870C}' .
-          '\x{870D}\x{870E}\x{870F}\x{8710}\x{8711}\x{8712}\x{8713}\x{8714}\x{8715}' .
-          '\x{8716}\x{8717}\x{8718}\x{8719}\x{871A}\x{871B}\x{871C}\x{871E}\x{871F}' .
-          '\x{8720}\x{8721}\x{8722}\x{8723}\x{8724}\x{8725}\x{8726}\x{8727}\x{8728}' .
-          '\x{8729}\x{872A}\x{872B}\x{872C}\x{872D}\x{872E}\x{8730}\x{8731}\x{8732}' .
-          '\x{8733}\x{8734}\x{8735}\x{8736}\x{8737}\x{8738}\x{8739}\x{873A}\x{873B}' .
-          '\x{873C}\x{873E}\x{873F}\x{8740}\x{8741}\x{8742}\x{8743}\x{8744}\x{8746}' .
-          '\x{8747}\x{8748}\x{8749}\x{874A}\x{874C}\x{874D}\x{874E}\x{874F}\x{8750}' .
-          '\x{8751}\x{8752}\x{8753}\x{8754}\x{8755}\x{8756}\x{8757}\x{8758}\x{8759}' .
-          '\x{875A}\x{875B}\x{875C}\x{875D}\x{875E}\x{875F}\x{8760}\x{8761}\x{8762}' .
-          '\x{8763}\x{8764}\x{8765}\x{8766}\x{8767}\x{8768}\x{8769}\x{876A}\x{876B}' .
-          '\x{876C}\x{876D}\x{876E}\x{876F}\x{8770}\x{8772}\x{8773}\x{8774}\x{8775}' .
-          '\x{8776}\x{8777}\x{8778}\x{8779}\x{877A}\x{877B}\x{877C}\x{877D}\x{877E}' .
-          '\x{8780}\x{8781}\x{8782}\x{8783}\x{8784}\x{8785}\x{8786}\x{8787}\x{8788}' .
-          '\x{8789}\x{878A}\x{878B}\x{878C}\x{878D}\x{878F}\x{8790}\x{8791}\x{8792}' .
-          '\x{8793}\x{8794}\x{8795}\x{8796}\x{8797}\x{8798}\x{879A}\x{879B}\x{879C}' .
-          '\x{879D}\x{879E}\x{879F}\x{87A0}\x{87A1}\x{87A2}\x{87A3}\x{87A4}\x{87A5}' .
-          '\x{87A6}\x{87A7}\x{87A8}\x{87A9}\x{87AA}\x{87AB}\x{87AC}\x{87AD}\x{87AE}' .
-          '\x{87AF}\x{87B0}\x{87B1}\x{87B2}\x{87B3}\x{87B4}\x{87B5}\x{87B6}\x{87B7}' .
-          '\x{87B8}\x{87B9}\x{87BA}\x{87BB}\x{87BC}\x{87BD}\x{87BE}\x{87BF}\x{87C0}' .
-          '\x{87C1}\x{87C2}\x{87C3}\x{87C4}\x{87C5}\x{87C6}\x{87C7}\x{87C8}\x{87C9}' .
-          '\x{87CA}\x{87CB}\x{87CC}\x{87CD}\x{87CE}\x{87CF}\x{87D0}\x{87D1}\x{87D2}' .
-          '\x{87D3}\x{87D4}\x{87D5}\x{87D6}\x{87D7}\x{87D8}\x{87D9}\x{87DB}\x{87DC}' .
-          '\x{87DD}\x{87DE}\x{87DF}\x{87E0}\x{87E1}\x{87E2}\x{87E3}\x{87E4}\x{87E5}' .
-          '\x{87E6}\x{87E7}\x{87E8}\x{87E9}\x{87EA}\x{87EB}\x{87EC}\x{87ED}\x{87EE}' .
-          '\x{87EF}\x{87F1}\x{87F2}\x{87F3}\x{87F4}\x{87F5}\x{87F6}\x{87F7}\x{87F8}' .
-          '\x{87F9}\x{87FA}\x{87FB}\x{87FC}\x{87FD}\x{87FE}\x{87FF}\x{8800}\x{8801}' .
-          '\x{8802}\x{8803}\x{8804}\x{8805}\x{8806}\x{8808}\x{8809}\x{880A}\x{880B}' .
-          '\x{880C}\x{880D}\x{880E}\x{880F}\x{8810}\x{8811}\x{8813}\x{8814}\x{8815}' .
-          '\x{8816}\x{8817}\x{8818}\x{8819}\x{881A}\x{881B}\x{881C}\x{881D}\x{881E}' .
-          '\x{881F}\x{8820}\x{8821}\x{8822}\x{8823}\x{8824}\x{8825}\x{8826}\x{8827}' .
-          '\x{8828}\x{8829}\x{882A}\x{882B}\x{882C}\x{882E}\x{882F}\x{8830}\x{8831}' .
-          '\x{8832}\x{8833}\x{8834}\x{8835}\x{8836}\x{8837}\x{8838}\x{8839}\x{883B}' .
-          '\x{883C}\x{883D}\x{883E}\x{883F}\x{8840}\x{8841}\x{8842}\x{8843}\x{8844}' .
-          '\x{8845}\x{8846}\x{8848}\x{8849}\x{884A}\x{884B}\x{884C}\x{884D}\x{884E}' .
-          '\x{884F}\x{8850}\x{8851}\x{8852}\x{8853}\x{8854}\x{8855}\x{8856}\x{8857}' .
-          '\x{8859}\x{885A}\x{885B}\x{885D}\x{885E}\x{8860}\x{8861}\x{8862}\x{8863}' .
-          '\x{8864}\x{8865}\x{8866}\x{8867}\x{8868}\x{8869}\x{886A}\x{886B}\x{886C}' .
-          '\x{886D}\x{886E}\x{886F}\x{8870}\x{8871}\x{8872}\x{8873}\x{8874}\x{8875}' .
-          '\x{8876}\x{8877}\x{8878}\x{8879}\x{887B}\x{887C}\x{887D}\x{887E}\x{887F}' .
-          '\x{8880}\x{8881}\x{8882}\x{8883}\x{8884}\x{8885}\x{8886}\x{8887}\x{8888}' .
-          '\x{8889}\x{888A}\x{888B}\x{888C}\x{888D}\x{888E}\x{888F}\x{8890}\x{8891}' .
-          '\x{8892}\x{8893}\x{8894}\x{8895}\x{8896}\x{8897}\x{8898}\x{8899}\x{889A}' .
-          '\x{889B}\x{889C}\x{889D}\x{889E}\x{889F}\x{88A0}\x{88A1}\x{88A2}\x{88A3}' .
-          '\x{88A4}\x{88A5}\x{88A6}\x{88A7}\x{88A8}\x{88A9}\x{88AA}\x{88AB}\x{88AC}' .
-          '\x{88AD}\x{88AE}\x{88AF}\x{88B0}\x{88B1}\x{88B2}\x{88B3}\x{88B4}\x{88B6}' .
-          '\x{88B7}\x{88B8}\x{88B9}\x{88BA}\x{88BB}\x{88BC}\x{88BD}\x{88BE}\x{88BF}' .
-          '\x{88C0}\x{88C1}\x{88C2}\x{88C3}\x{88C4}\x{88C5}\x{88C6}\x{88C7}\x{88C8}' .
-          '\x{88C9}\x{88CA}\x{88CB}\x{88CC}\x{88CD}\x{88CE}\x{88CF}\x{88D0}\x{88D1}' .
-          '\x{88D2}\x{88D3}\x{88D4}\x{88D5}\x{88D6}\x{88D7}\x{88D8}\x{88D9}\x{88DA}' .
-          '\x{88DB}\x{88DC}\x{88DD}\x{88DE}\x{88DF}\x{88E0}\x{88E1}\x{88E2}\x{88E3}' .
-          '\x{88E4}\x{88E5}\x{88E7}\x{88E8}\x{88EA}\x{88EB}\x{88EC}\x{88EE}\x{88EF}' .
-          '\x{88F0}\x{88F1}\x{88F2}\x{88F3}\x{88F4}\x{88F5}\x{88F6}\x{88F7}\x{88F8}' .
-          '\x{88F9}\x{88FA}\x{88FB}\x{88FC}\x{88FD}\x{88FE}\x{88FF}\x{8900}\x{8901}' .
-          '\x{8902}\x{8904}\x{8905}\x{8906}\x{8907}\x{8908}\x{8909}\x{890A}\x{890B}' .
-          '\x{890C}\x{890D}\x{890E}\x{8910}\x{8911}\x{8912}\x{8913}\x{8914}\x{8915}' .
-          '\x{8916}\x{8917}\x{8918}\x{8919}\x{891A}\x{891B}\x{891C}\x{891D}\x{891E}' .
-          '\x{891F}\x{8920}\x{8921}\x{8922}\x{8923}\x{8925}\x{8926}\x{8927}\x{8928}' .
-          '\x{8929}\x{892A}\x{892B}\x{892C}\x{892D}\x{892E}\x{892F}\x{8930}\x{8931}' .
-          '\x{8932}\x{8933}\x{8934}\x{8935}\x{8936}\x{8937}\x{8938}\x{8939}\x{893A}' .
-          '\x{893B}\x{893C}\x{893D}\x{893E}\x{893F}\x{8940}\x{8941}\x{8942}\x{8943}' .
-          '\x{8944}\x{8945}\x{8946}\x{8947}\x{8948}\x{8949}\x{894A}\x{894B}\x{894C}' .
-          '\x{894E}\x{894F}\x{8950}\x{8951}\x{8952}\x{8953}\x{8954}\x{8955}\x{8956}' .
-          '\x{8957}\x{8958}\x{8959}\x{895A}\x{895B}\x{895C}\x{895D}\x{895E}\x{895F}' .
-          '\x{8960}\x{8961}\x{8962}\x{8963}\x{8964}\x{8966}\x{8967}\x{8968}\x{8969}' .
-          '\x{896A}\x{896B}\x{896C}\x{896D}\x{896E}\x{896F}\x{8970}\x{8971}\x{8972}' .
-          '\x{8973}\x{8974}\x{8976}\x{8977}\x{8978}\x{8979}\x{897A}\x{897B}\x{897C}' .
-          '\x{897E}\x{897F}\x{8980}\x{8981}\x{8982}\x{8983}\x{8984}\x{8985}\x{8986}' .
-          '\x{8987}\x{8988}\x{8989}\x{898A}\x{898B}\x{898C}\x{898E}\x{898F}\x{8991}' .
-          '\x{8992}\x{8993}\x{8995}\x{8996}\x{8997}\x{8998}\x{899A}\x{899B}\x{899C}' .
-          '\x{899D}\x{899E}\x{899F}\x{89A0}\x{89A1}\x{89A2}\x{89A3}\x{89A4}\x{89A5}' .
-          '\x{89A6}\x{89A7}\x{89A8}\x{89AA}\x{89AB}\x{89AC}\x{89AD}\x{89AE}\x{89AF}' .
-          '\x{89B1}\x{89B2}\x{89B3}\x{89B5}\x{89B6}\x{89B7}\x{89B8}\x{89B9}\x{89BA}' .
-          '\x{89BD}\x{89BE}\x{89BF}\x{89C0}\x{89C1}\x{89C2}\x{89C3}\x{89C4}\x{89C5}' .
-          '\x{89C6}\x{89C7}\x{89C8}\x{89C9}\x{89CA}\x{89CB}\x{89CC}\x{89CD}\x{89CE}' .
-          '\x{89CF}\x{89D0}\x{89D1}\x{89D2}\x{89D3}\x{89D4}\x{89D5}\x{89D6}\x{89D7}' .
-          '\x{89D8}\x{89D9}\x{89DA}\x{89DB}\x{89DC}\x{89DD}\x{89DE}\x{89DF}\x{89E0}' .
-          '\x{89E1}\x{89E2}\x{89E3}\x{89E4}\x{89E5}\x{89E6}\x{89E7}\x{89E8}\x{89E9}' .
-          '\x{89EA}\x{89EB}\x{89EC}\x{89ED}\x{89EF}\x{89F0}\x{89F1}\x{89F2}\x{89F3}' .
-          '\x{89F4}\x{89F6}\x{89F7}\x{89F8}\x{89FA}\x{89FB}\x{89FC}\x{89FE}\x{89FF}' .
-          '\x{8A00}\x{8A01}\x{8A02}\x{8A03}\x{8A04}\x{8A07}\x{8A08}\x{8A09}\x{8A0A}' .
-          '\x{8A0B}\x{8A0C}\x{8A0D}\x{8A0E}\x{8A0F}\x{8A10}\x{8A11}\x{8A12}\x{8A13}' .
-          '\x{8A15}\x{8A16}\x{8A17}\x{8A18}\x{8A1A}\x{8A1B}\x{8A1C}\x{8A1D}\x{8A1E}' .
-          '\x{8A1F}\x{8A22}\x{8A23}\x{8A24}\x{8A25}\x{8A26}\x{8A27}\x{8A28}\x{8A29}' .
-          '\x{8A2A}\x{8A2C}\x{8A2D}\x{8A2E}\x{8A2F}\x{8A30}\x{8A31}\x{8A32}\x{8A34}' .
-          '\x{8A35}\x{8A36}\x{8A37}\x{8A38}\x{8A39}\x{8A3A}\x{8A3B}\x{8A3C}\x{8A3E}' .
-          '\x{8A3F}\x{8A40}\x{8A41}\x{8A42}\x{8A43}\x{8A44}\x{8A45}\x{8A46}\x{8A47}' .
-          '\x{8A48}\x{8A49}\x{8A4A}\x{8A4C}\x{8A4D}\x{8A4E}\x{8A4F}\x{8A50}\x{8A51}' .
-          '\x{8A52}\x{8A53}\x{8A54}\x{8A55}\x{8A56}\x{8A57}\x{8A58}\x{8A59}\x{8A5A}' .
-          '\x{8A5B}\x{8A5C}\x{8A5D}\x{8A5E}\x{8A5F}\x{8A60}\x{8A61}\x{8A62}\x{8A63}' .
-          '\x{8A65}\x{8A66}\x{8A67}\x{8A68}\x{8A69}\x{8A6A}\x{8A6B}\x{8A6C}\x{8A6D}' .
-          '\x{8A6E}\x{8A6F}\x{8A70}\x{8A71}\x{8A72}\x{8A73}\x{8A74}\x{8A75}\x{8A76}' .
-          '\x{8A77}\x{8A79}\x{8A7A}\x{8A7B}\x{8A7C}\x{8A7E}\x{8A7F}\x{8A80}\x{8A81}' .
-          '\x{8A82}\x{8A83}\x{8A84}\x{8A85}\x{8A86}\x{8A87}\x{8A89}\x{8A8A}\x{8A8B}' .
-          '\x{8A8C}\x{8A8D}\x{8A8E}\x{8A8F}\x{8A90}\x{8A91}\x{8A92}\x{8A93}\x{8A94}' .
-          '\x{8A95}\x{8A96}\x{8A97}\x{8A98}\x{8A99}\x{8A9A}\x{8A9B}\x{8A9C}\x{8A9D}' .
-          '\x{8A9E}\x{8AA0}\x{8AA1}\x{8AA2}\x{8AA3}\x{8AA4}\x{8AA5}\x{8AA6}\x{8AA7}' .
-          '\x{8AA8}\x{8AA9}\x{8AAA}\x{8AAB}\x{8AAC}\x{8AAE}\x{8AB0}\x{8AB1}\x{8AB2}' .
-          '\x{8AB3}\x{8AB4}\x{8AB5}\x{8AB6}\x{8AB8}\x{8AB9}\x{8ABA}\x{8ABB}\x{8ABC}' .
-          '\x{8ABD}\x{8ABE}\x{8ABF}\x{8AC0}\x{8AC1}\x{8AC2}\x{8AC3}\x{8AC4}\x{8AC5}' .
-          '\x{8AC6}\x{8AC7}\x{8AC8}\x{8AC9}\x{8ACA}\x{8ACB}\x{8ACC}\x{8ACD}\x{8ACE}' .
-          '\x{8ACF}\x{8AD1}\x{8AD2}\x{8AD3}\x{8AD4}\x{8AD5}\x{8AD6}\x{8AD7}\x{8AD8}' .
-          '\x{8AD9}\x{8ADA}\x{8ADB}\x{8ADC}\x{8ADD}\x{8ADE}\x{8ADF}\x{8AE0}\x{8AE1}' .
-          '\x{8AE2}\x{8AE3}\x{8AE4}\x{8AE5}\x{8AE6}\x{8AE7}\x{8AE8}\x{8AE9}\x{8AEA}' .
-          '\x{8AEB}\x{8AED}\x{8AEE}\x{8AEF}\x{8AF0}\x{8AF1}\x{8AF2}\x{8AF3}\x{8AF4}' .
-          '\x{8AF5}\x{8AF6}\x{8AF7}\x{8AF8}\x{8AF9}\x{8AFA}\x{8AFB}\x{8AFC}\x{8AFD}' .
-          '\x{8AFE}\x{8AFF}\x{8B00}\x{8B01}\x{8B02}\x{8B03}\x{8B04}\x{8B05}\x{8B06}' .
-          '\x{8B07}\x{8B08}\x{8B09}\x{8B0A}\x{8B0B}\x{8B0D}\x{8B0E}\x{8B0F}\x{8B10}' .
-          '\x{8B11}\x{8B12}\x{8B13}\x{8B14}\x{8B15}\x{8B16}\x{8B17}\x{8B18}\x{8B19}' .
-          '\x{8B1A}\x{8B1B}\x{8B1C}\x{8B1D}\x{8B1E}\x{8B1F}\x{8B20}\x{8B21}\x{8B22}' .
-          '\x{8B23}\x{8B24}\x{8B25}\x{8B26}\x{8B27}\x{8B28}\x{8B2A}\x{8B2B}\x{8B2C}' .
-          '\x{8B2D}\x{8B2E}\x{8B2F}\x{8B30}\x{8B31}\x{8B33}\x{8B34}\x{8B35}\x{8B36}' .
-          '\x{8B37}\x{8B39}\x{8B3A}\x{8B3B}\x{8B3C}\x{8B3D}\x{8B3E}\x{8B40}\x{8B41}' .
-          '\x{8B42}\x{8B43}\x{8B44}\x{8B45}\x{8B46}\x{8B47}\x{8B48}\x{8B49}\x{8B4A}' .
-          '\x{8B4B}\x{8B4C}\x{8B4D}\x{8B4E}\x{8B4F}\x{8B50}\x{8B51}\x{8B52}\x{8B53}' .
-          '\x{8B54}\x{8B55}\x{8B56}\x{8B57}\x{8B58}\x{8B59}\x{8B5A}\x{8B5B}\x{8B5C}' .
-          '\x{8B5D}\x{8B5E}\x{8B5F}\x{8B60}\x{8B63}\x{8B64}\x{8B65}\x{8B66}\x{8B67}' .
-          '\x{8B68}\x{8B6A}\x{8B6B}\x{8B6C}\x{8B6D}\x{8B6E}\x{8B6F}\x{8B70}\x{8B71}' .
-          '\x{8B73}\x{8B74}\x{8B76}\x{8B77}\x{8B78}\x{8B79}\x{8B7A}\x{8B7B}\x{8B7D}' .
-          '\x{8B7E}\x{8B7F}\x{8B80}\x{8B82}\x{8B83}\x{8B84}\x{8B85}\x{8B86}\x{8B88}' .
-          '\x{8B89}\x{8B8A}\x{8B8B}\x{8B8C}\x{8B8E}\x{8B90}\x{8B91}\x{8B92}\x{8B93}' .
-          '\x{8B94}\x{8B95}\x{8B96}\x{8B97}\x{8B98}\x{8B99}\x{8B9A}\x{8B9C}\x{8B9D}' .
-          '\x{8B9E}\x{8B9F}\x{8BA0}\x{8BA1}\x{8BA2}\x{8BA3}\x{8BA4}\x{8BA5}\x{8BA6}' .
-          '\x{8BA7}\x{8BA8}\x{8BA9}\x{8BAA}\x{8BAB}\x{8BAC}\x{8BAD}\x{8BAE}\x{8BAF}' .
-          '\x{8BB0}\x{8BB1}\x{8BB2}\x{8BB3}\x{8BB4}\x{8BB5}\x{8BB6}\x{8BB7}\x{8BB8}' .
-          '\x{8BB9}\x{8BBA}\x{8BBB}\x{8BBC}\x{8BBD}\x{8BBE}\x{8BBF}\x{8BC0}\x{8BC1}' .
-          '\x{8BC2}\x{8BC3}\x{8BC4}\x{8BC5}\x{8BC6}\x{8BC7}\x{8BC8}\x{8BC9}\x{8BCA}' .
-          '\x{8BCB}\x{8BCC}\x{8BCD}\x{8BCE}\x{8BCF}\x{8BD0}\x{8BD1}\x{8BD2}\x{8BD3}' .
-          '\x{8BD4}\x{8BD5}\x{8BD6}\x{8BD7}\x{8BD8}\x{8BD9}\x{8BDA}\x{8BDB}\x{8BDC}' .
-          '\x{8BDD}\x{8BDE}\x{8BDF}\x{8BE0}\x{8BE1}\x{8BE2}\x{8BE3}\x{8BE4}\x{8BE5}' .
-          '\x{8BE6}\x{8BE7}\x{8BE8}\x{8BE9}\x{8BEA}\x{8BEB}\x{8BEC}\x{8BED}\x{8BEE}' .
-          '\x{8BEF}\x{8BF0}\x{8BF1}\x{8BF2}\x{8BF3}\x{8BF4}\x{8BF5}\x{8BF6}\x{8BF7}' .
-          '\x{8BF8}\x{8BF9}\x{8BFA}\x{8BFB}\x{8BFC}\x{8BFD}\x{8BFE}\x{8BFF}\x{8C00}' .
-          '\x{8C01}\x{8C02}\x{8C03}\x{8C04}\x{8C05}\x{8C06}\x{8C07}\x{8C08}\x{8C09}' .
-          '\x{8C0A}\x{8C0B}\x{8C0C}\x{8C0D}\x{8C0E}\x{8C0F}\x{8C10}\x{8C11}\x{8C12}' .
-          '\x{8C13}\x{8C14}\x{8C15}\x{8C16}\x{8C17}\x{8C18}\x{8C19}\x{8C1A}\x{8C1B}' .
-          '\x{8C1C}\x{8C1D}\x{8C1E}\x{8C1F}\x{8C20}\x{8C21}\x{8C22}\x{8C23}\x{8C24}' .
-          '\x{8C25}\x{8C26}\x{8C27}\x{8C28}\x{8C29}\x{8C2A}\x{8C2B}\x{8C2C}\x{8C2D}' .
-          '\x{8C2E}\x{8C2F}\x{8C30}\x{8C31}\x{8C32}\x{8C33}\x{8C34}\x{8C35}\x{8C36}' .
-          '\x{8C37}\x{8C39}\x{8C3A}\x{8C3B}\x{8C3C}\x{8C3D}\x{8C3E}\x{8C3F}\x{8C41}' .
-          '\x{8C42}\x{8C43}\x{8C45}\x{8C46}\x{8C47}\x{8C48}\x{8C49}\x{8C4A}\x{8C4B}' .
-          '\x{8C4C}\x{8C4D}\x{8C4E}\x{8C4F}\x{8C50}\x{8C54}\x{8C55}\x{8C56}\x{8C57}' .
-          '\x{8C59}\x{8C5A}\x{8C5B}\x{8C5C}\x{8C5D}\x{8C5E}\x{8C5F}\x{8C60}\x{8C61}' .
-          '\x{8C62}\x{8C63}\x{8C64}\x{8C65}\x{8C66}\x{8C67}\x{8C68}\x{8C69}\x{8C6A}' .
-          '\x{8C6B}\x{8C6C}\x{8C6D}\x{8C6E}\x{8C6F}\x{8C70}\x{8C71}\x{8C72}\x{8C73}' .
-          '\x{8C75}\x{8C76}\x{8C77}\x{8C78}\x{8C79}\x{8C7A}\x{8C7B}\x{8C7D}\x{8C7E}' .
-          '\x{8C80}\x{8C81}\x{8C82}\x{8C84}\x{8C85}\x{8C86}\x{8C88}\x{8C89}\x{8C8A}' .
-          '\x{8C8C}\x{8C8D}\x{8C8F}\x{8C90}\x{8C91}\x{8C92}\x{8C93}\x{8C94}\x{8C95}' .
-          '\x{8C96}\x{8C97}\x{8C98}\x{8C99}\x{8C9A}\x{8C9C}\x{8C9D}\x{8C9E}\x{8C9F}' .
-          '\x{8CA0}\x{8CA1}\x{8CA2}\x{8CA3}\x{8CA4}\x{8CA5}\x{8CA7}\x{8CA8}\x{8CA9}' .
-          '\x{8CAA}\x{8CAB}\x{8CAC}\x{8CAD}\x{8CAE}\x{8CAF}\x{8CB0}\x{8CB1}\x{8CB2}' .
-          '\x{8CB3}\x{8CB4}\x{8CB5}\x{8CB6}\x{8CB7}\x{8CB8}\x{8CB9}\x{8CBA}\x{8CBB}' .
-          '\x{8CBC}\x{8CBD}\x{8CBE}\x{8CBF}\x{8CC0}\x{8CC1}\x{8CC2}\x{8CC3}\x{8CC4}' .
-          '\x{8CC5}\x{8CC6}\x{8CC7}\x{8CC8}\x{8CC9}\x{8CCA}\x{8CCC}\x{8CCE}\x{8CCF}' .
-          '\x{8CD0}\x{8CD1}\x{8CD2}\x{8CD3}\x{8CD4}\x{8CD5}\x{8CD7}\x{8CD9}\x{8CDA}' .
-          '\x{8CDB}\x{8CDC}\x{8CDD}\x{8CDE}\x{8CDF}\x{8CE0}\x{8CE1}\x{8CE2}\x{8CE3}' .
-          '\x{8CE4}\x{8CE5}\x{8CE6}\x{8CE7}\x{8CE8}\x{8CEA}\x{8CEB}\x{8CEC}\x{8CED}' .
-          '\x{8CEE}\x{8CEF}\x{8CF0}\x{8CF1}\x{8CF2}\x{8CF3}\x{8CF4}\x{8CF5}\x{8CF6}' .
-          '\x{8CF8}\x{8CF9}\x{8CFA}\x{8CFB}\x{8CFC}\x{8CFD}\x{8CFE}\x{8CFF}\x{8D00}' .
-          '\x{8D02}\x{8D03}\x{8D04}\x{8D05}\x{8D06}\x{8D07}\x{8D08}\x{8D09}\x{8D0A}' .
-          '\x{8D0B}\x{8D0C}\x{8D0D}\x{8D0E}\x{8D0F}\x{8D10}\x{8D13}\x{8D14}\x{8D15}' .
-          '\x{8D16}\x{8D17}\x{8D18}\x{8D19}\x{8D1A}\x{8D1B}\x{8D1C}\x{8D1D}\x{8D1E}' .
-          '\x{8D1F}\x{8D20}\x{8D21}\x{8D22}\x{8D23}\x{8D24}\x{8D25}\x{8D26}\x{8D27}' .
-          '\x{8D28}\x{8D29}\x{8D2A}\x{8D2B}\x{8D2C}\x{8D2D}\x{8D2E}\x{8D2F}\x{8D30}' .
-          '\x{8D31}\x{8D32}\x{8D33}\x{8D34}\x{8D35}\x{8D36}\x{8D37}\x{8D38}\x{8D39}' .
-          '\x{8D3A}\x{8D3B}\x{8D3C}\x{8D3D}\x{8D3E}\x{8D3F}\x{8D40}\x{8D41}\x{8D42}' .
-          '\x{8D43}\x{8D44}\x{8D45}\x{8D46}\x{8D47}\x{8D48}\x{8D49}\x{8D4A}\x{8D4B}' .
-          '\x{8D4C}\x{8D4D}\x{8D4E}\x{8D4F}\x{8D50}\x{8D51}\x{8D52}\x{8D53}\x{8D54}' .
-          '\x{8D55}\x{8D56}\x{8D57}\x{8D58}\x{8D59}\x{8D5A}\x{8D5B}\x{8D5C}\x{8D5D}' .
-          '\x{8D5E}\x{8D5F}\x{8D60}\x{8D61}\x{8D62}\x{8D63}\x{8D64}\x{8D65}\x{8D66}' .
-          '\x{8D67}\x{8D68}\x{8D69}\x{8D6A}\x{8D6B}\x{8D6C}\x{8D6D}\x{8D6E}\x{8D6F}' .
-          '\x{8D70}\x{8D71}\x{8D72}\x{8D73}\x{8D74}\x{8D75}\x{8D76}\x{8D77}\x{8D78}' .
-          '\x{8D79}\x{8D7A}\x{8D7B}\x{8D7D}\x{8D7E}\x{8D7F}\x{8D80}\x{8D81}\x{8D82}' .
-          '\x{8D83}\x{8D84}\x{8D85}\x{8D86}\x{8D87}\x{8D88}\x{8D89}\x{8D8A}\x{8D8B}' .
-          '\x{8D8C}\x{8D8D}\x{8D8E}\x{8D8F}\x{8D90}\x{8D91}\x{8D92}\x{8D93}\x{8D94}' .
-          '\x{8D95}\x{8D96}\x{8D97}\x{8D98}\x{8D99}\x{8D9A}\x{8D9B}\x{8D9C}\x{8D9D}' .
-          '\x{8D9E}\x{8D9F}\x{8DA0}\x{8DA1}\x{8DA2}\x{8DA3}\x{8DA4}\x{8DA5}\x{8DA7}' .
-          '\x{8DA8}\x{8DA9}\x{8DAA}\x{8DAB}\x{8DAC}\x{8DAD}\x{8DAE}\x{8DAF}\x{8DB0}' .
-          '\x{8DB1}\x{8DB2}\x{8DB3}\x{8DB4}\x{8DB5}\x{8DB6}\x{8DB7}\x{8DB8}\x{8DB9}' .
-          '\x{8DBA}\x{8DBB}\x{8DBC}\x{8DBD}\x{8DBE}\x{8DBF}\x{8DC1}\x{8DC2}\x{8DC3}' .
-          '\x{8DC4}\x{8DC5}\x{8DC6}\x{8DC7}\x{8DC8}\x{8DC9}\x{8DCA}\x{8DCB}\x{8DCC}' .
-          '\x{8DCD}\x{8DCE}\x{8DCF}\x{8DD0}\x{8DD1}\x{8DD2}\x{8DD3}\x{8DD4}\x{8DD5}' .
-          '\x{8DD6}\x{8DD7}\x{8DD8}\x{8DD9}\x{8DDA}\x{8DDB}\x{8DDC}\x{8DDD}\x{8DDE}' .
-          '\x{8DDF}\x{8DE0}\x{8DE1}\x{8DE2}\x{8DE3}\x{8DE4}\x{8DE6}\x{8DE7}\x{8DE8}' .
-          '\x{8DE9}\x{8DEA}\x{8DEB}\x{8DEC}\x{8DED}\x{8DEE}\x{8DEF}\x{8DF0}\x{8DF1}' .
-          '\x{8DF2}\x{8DF3}\x{8DF4}\x{8DF5}\x{8DF6}\x{8DF7}\x{8DF8}\x{8DF9}\x{8DFA}' .
-          '\x{8DFB}\x{8DFC}\x{8DFD}\x{8DFE}\x{8DFF}\x{8E00}\x{8E02}\x{8E03}\x{8E04}' .
-          '\x{8E05}\x{8E06}\x{8E07}\x{8E08}\x{8E09}\x{8E0A}\x{8E0C}\x{8E0D}\x{8E0E}' .
-          '\x{8E0F}\x{8E10}\x{8E11}\x{8E12}\x{8E13}\x{8E14}\x{8E15}\x{8E16}\x{8E17}' .
-          '\x{8E18}\x{8E19}\x{8E1A}\x{8E1B}\x{8E1C}\x{8E1D}\x{8E1E}\x{8E1F}\x{8E20}' .
-          '\x{8E21}\x{8E22}\x{8E23}\x{8E24}\x{8E25}\x{8E26}\x{8E27}\x{8E28}\x{8E29}' .
-          '\x{8E2A}\x{8E2B}\x{8E2C}\x{8E2D}\x{8E2E}\x{8E2F}\x{8E30}\x{8E31}\x{8E33}' .
-          '\x{8E34}\x{8E35}\x{8E36}\x{8E37}\x{8E38}\x{8E39}\x{8E3A}\x{8E3B}\x{8E3C}' .
-          '\x{8E3D}\x{8E3E}\x{8E3F}\x{8E40}\x{8E41}\x{8E42}\x{8E43}\x{8E44}\x{8E45}' .
-          '\x{8E47}\x{8E48}\x{8E49}\x{8E4A}\x{8E4B}\x{8E4C}\x{8E4D}\x{8E4E}\x{8E50}' .
-          '\x{8E51}\x{8E52}\x{8E53}\x{8E54}\x{8E55}\x{8E56}\x{8E57}\x{8E58}\x{8E59}' .
-          '\x{8E5A}\x{8E5B}\x{8E5C}\x{8E5D}\x{8E5E}\x{8E5F}\x{8E60}\x{8E61}\x{8E62}' .
-          '\x{8E63}\x{8E64}\x{8E65}\x{8E66}\x{8E67}\x{8E68}\x{8E69}\x{8E6A}\x{8E6B}' .
-          '\x{8E6C}\x{8E6D}\x{8E6F}\x{8E70}\x{8E71}\x{8E72}\x{8E73}\x{8E74}\x{8E76}' .
-          '\x{8E78}\x{8E7A}\x{8E7B}\x{8E7C}\x{8E7D}\x{8E7E}\x{8E7F}\x{8E80}\x{8E81}' .
-          '\x{8E82}\x{8E83}\x{8E84}\x{8E85}\x{8E86}\x{8E87}\x{8E88}\x{8E89}\x{8E8A}' .
-          '\x{8E8B}\x{8E8C}\x{8E8D}\x{8E8E}\x{8E8F}\x{8E90}\x{8E91}\x{8E92}\x{8E93}' .
-          '\x{8E94}\x{8E95}\x{8E96}\x{8E97}\x{8E98}\x{8E9A}\x{8E9C}\x{8E9D}\x{8E9E}' .
-          '\x{8E9F}\x{8EA0}\x{8EA1}\x{8EA3}\x{8EA4}\x{8EA5}\x{8EA6}\x{8EA7}\x{8EA8}' .
-          '\x{8EA9}\x{8EAA}\x{8EAB}\x{8EAC}\x{8EAD}\x{8EAE}\x{8EAF}\x{8EB0}\x{8EB1}' .
-          '\x{8EB2}\x{8EB4}\x{8EB5}\x{8EB8}\x{8EB9}\x{8EBA}\x{8EBB}\x{8EBC}\x{8EBD}' .
-          '\x{8EBE}\x{8EBF}\x{8EC0}\x{8EC2}\x{8EC3}\x{8EC5}\x{8EC6}\x{8EC7}\x{8EC8}' .
-          '\x{8EC9}\x{8ECA}\x{8ECB}\x{8ECC}\x{8ECD}\x{8ECE}\x{8ECF}\x{8ED0}\x{8ED1}' .
-          '\x{8ED2}\x{8ED3}\x{8ED4}\x{8ED5}\x{8ED6}\x{8ED7}\x{8ED8}\x{8EDA}\x{8EDB}' .
-          '\x{8EDC}\x{8EDD}\x{8EDE}\x{8EDF}\x{8EE0}\x{8EE1}\x{8EE4}\x{8EE5}\x{8EE6}' .
-          '\x{8EE7}\x{8EE8}\x{8EE9}\x{8EEA}\x{8EEB}\x{8EEC}\x{8EED}\x{8EEE}\x{8EEF}' .
-          '\x{8EF1}\x{8EF2}\x{8EF3}\x{8EF4}\x{8EF5}\x{8EF6}\x{8EF7}\x{8EF8}\x{8EF9}' .
-          '\x{8EFA}\x{8EFB}\x{8EFC}\x{8EFD}\x{8EFE}\x{8EFF}\x{8F00}\x{8F01}\x{8F02}' .
-          '\x{8F03}\x{8F04}\x{8F05}\x{8F06}\x{8F07}\x{8F08}\x{8F09}\x{8F0A}\x{8F0B}' .
-          '\x{8F0D}\x{8F0E}\x{8F10}\x{8F11}\x{8F12}\x{8F13}\x{8F14}\x{8F15}\x{8F16}' .
-          '\x{8F17}\x{8F18}\x{8F1A}\x{8F1B}\x{8F1C}\x{8F1D}\x{8F1E}\x{8F1F}\x{8F20}' .
-          '\x{8F21}\x{8F22}\x{8F23}\x{8F24}\x{8F25}\x{8F26}\x{8F27}\x{8F28}\x{8F29}' .
-          '\x{8F2A}\x{8F2B}\x{8F2C}\x{8F2E}\x{8F2F}\x{8F30}\x{8F31}\x{8F32}\x{8F33}' .
-          '\x{8F34}\x{8F35}\x{8F36}\x{8F37}\x{8F38}\x{8F39}\x{8F3B}\x{8F3C}\x{8F3D}' .
-          '\x{8F3E}\x{8F3F}\x{8F40}\x{8F42}\x{8F43}\x{8F44}\x{8F45}\x{8F46}\x{8F47}' .
-          '\x{8F48}\x{8F49}\x{8F4A}\x{8F4B}\x{8F4C}\x{8F4D}\x{8F4E}\x{8F4F}\x{8F50}' .
-          '\x{8F51}\x{8F52}\x{8F53}\x{8F54}\x{8F55}\x{8F56}\x{8F57}\x{8F58}\x{8F59}' .
-          '\x{8F5A}\x{8F5B}\x{8F5D}\x{8F5E}\x{8F5F}\x{8F60}\x{8F61}\x{8F62}\x{8F63}' .
-          '\x{8F64}\x{8F65}\x{8F66}\x{8F67}\x{8F68}\x{8F69}\x{8F6A}\x{8F6B}\x{8F6C}' .
-          '\x{8F6D}\x{8F6E}\x{8F6F}\x{8F70}\x{8F71}\x{8F72}\x{8F73}\x{8F74}\x{8F75}' .
-          '\x{8F76}\x{8F77}\x{8F78}\x{8F79}\x{8F7A}\x{8F7B}\x{8F7C}\x{8F7D}\x{8F7E}' .
-          '\x{8F7F}\x{8F80}\x{8F81}\x{8F82}\x{8F83}\x{8F84}\x{8F85}\x{8F86}\x{8F87}' .
-          '\x{8F88}\x{8F89}\x{8F8A}\x{8F8B}\x{8F8C}\x{8F8D}\x{8F8E}\x{8F8F}\x{8F90}' .
-          '\x{8F91}\x{8F92}\x{8F93}\x{8F94}\x{8F95}\x{8F96}\x{8F97}\x{8F98}\x{8F99}' .
-          '\x{8F9A}\x{8F9B}\x{8F9C}\x{8F9E}\x{8F9F}\x{8FA0}\x{8FA1}\x{8FA2}\x{8FA3}' .
-          '\x{8FA5}\x{8FA6}\x{8FA7}\x{8FA8}\x{8FA9}\x{8FAA}\x{8FAB}\x{8FAC}\x{8FAD}' .
-          '\x{8FAE}\x{8FAF}\x{8FB0}\x{8FB1}\x{8FB2}\x{8FB4}\x{8FB5}\x{8FB6}\x{8FB7}' .
-          '\x{8FB8}\x{8FB9}\x{8FBB}\x{8FBC}\x{8FBD}\x{8FBE}\x{8FBF}\x{8FC0}\x{8FC1}' .
-          '\x{8FC2}\x{8FC4}\x{8FC5}\x{8FC6}\x{8FC7}\x{8FC8}\x{8FC9}\x{8FCB}\x{8FCC}' .
-          '\x{8FCD}\x{8FCE}\x{8FCF}\x{8FD0}\x{8FD1}\x{8FD2}\x{8FD3}\x{8FD4}\x{8FD5}' .
-          '\x{8FD6}\x{8FD7}\x{8FD8}\x{8FD9}\x{8FDA}\x{8FDB}\x{8FDC}\x{8FDD}\x{8FDE}' .
-          '\x{8FDF}\x{8FE0}\x{8FE1}\x{8FE2}\x{8FE3}\x{8FE4}\x{8FE5}\x{8FE6}\x{8FE8}' .
-          '\x{8FE9}\x{8FEA}\x{8FEB}\x{8FEC}\x{8FED}\x{8FEE}\x{8FEF}\x{8FF0}\x{8FF1}' .
-          '\x{8FF2}\x{8FF3}\x{8FF4}\x{8FF5}\x{8FF6}\x{8FF7}\x{8FF8}\x{8FF9}\x{8FFA}' .
-          '\x{8FFB}\x{8FFC}\x{8FFD}\x{8FFE}\x{8FFF}\x{9000}\x{9001}\x{9002}\x{9003}' .
-          '\x{9004}\x{9005}\x{9006}\x{9007}\x{9008}\x{9009}\x{900A}\x{900B}\x{900C}' .
-          '\x{900D}\x{900F}\x{9010}\x{9011}\x{9012}\x{9013}\x{9014}\x{9015}\x{9016}' .
-          '\x{9017}\x{9018}\x{9019}\x{901A}\x{901B}\x{901C}\x{901D}\x{901E}\x{901F}' .
-          '\x{9020}\x{9021}\x{9022}\x{9023}\x{9024}\x{9025}\x{9026}\x{9027}\x{9028}' .
-          '\x{9029}\x{902B}\x{902D}\x{902E}\x{902F}\x{9030}\x{9031}\x{9032}\x{9033}' .
-          '\x{9034}\x{9035}\x{9036}\x{9038}\x{903A}\x{903B}\x{903C}\x{903D}\x{903E}' .
-          '\x{903F}\x{9041}\x{9042}\x{9043}\x{9044}\x{9045}\x{9047}\x{9048}\x{9049}' .
-          '\x{904A}\x{904B}\x{904C}\x{904D}\x{904E}\x{904F}\x{9050}\x{9051}\x{9052}' .
-          '\x{9053}\x{9054}\x{9055}\x{9056}\x{9057}\x{9058}\x{9059}\x{905A}\x{905B}' .
-          '\x{905C}\x{905D}\x{905E}\x{905F}\x{9060}\x{9061}\x{9062}\x{9063}\x{9064}' .
-          '\x{9065}\x{9066}\x{9067}\x{9068}\x{9069}\x{906A}\x{906B}\x{906C}\x{906D}' .
-          '\x{906E}\x{906F}\x{9070}\x{9071}\x{9072}\x{9073}\x{9074}\x{9075}\x{9076}' .
-          '\x{9077}\x{9078}\x{9079}\x{907A}\x{907B}\x{907C}\x{907D}\x{907E}\x{907F}' .
-          '\x{9080}\x{9081}\x{9082}\x{9083}\x{9084}\x{9085}\x{9086}\x{9087}\x{9088}' .
-          '\x{9089}\x{908A}\x{908B}\x{908C}\x{908D}\x{908E}\x{908F}\x{9090}\x{9091}' .
-          '\x{9092}\x{9093}\x{9094}\x{9095}\x{9096}\x{9097}\x{9098}\x{9099}\x{909A}' .
-          '\x{909B}\x{909C}\x{909D}\x{909E}\x{909F}\x{90A0}\x{90A1}\x{90A2}\x{90A3}' .
-          '\x{90A4}\x{90A5}\x{90A6}\x{90A7}\x{90A8}\x{90A9}\x{90AA}\x{90AC}\x{90AD}' .
-          '\x{90AE}\x{90AF}\x{90B0}\x{90B1}\x{90B2}\x{90B3}\x{90B4}\x{90B5}\x{90B6}' .
-          '\x{90B7}\x{90B8}\x{90B9}\x{90BA}\x{90BB}\x{90BC}\x{90BD}\x{90BE}\x{90BF}' .
-          '\x{90C0}\x{90C1}\x{90C2}\x{90C3}\x{90C4}\x{90C5}\x{90C6}\x{90C7}\x{90C8}' .
-          '\x{90C9}\x{90CA}\x{90CB}\x{90CE}\x{90CF}\x{90D0}\x{90D1}\x{90D3}\x{90D4}' .
-          '\x{90D5}\x{90D6}\x{90D7}\x{90D8}\x{90D9}\x{90DA}\x{90DB}\x{90DC}\x{90DD}' .
-          '\x{90DE}\x{90DF}\x{90E0}\x{90E1}\x{90E2}\x{90E3}\x{90E4}\x{90E5}\x{90E6}' .
-          '\x{90E7}\x{90E8}\x{90E9}\x{90EA}\x{90EB}\x{90EC}\x{90ED}\x{90EE}\x{90EF}' .
-          '\x{90F0}\x{90F1}\x{90F2}\x{90F3}\x{90F4}\x{90F5}\x{90F7}\x{90F8}\x{90F9}' .
-          '\x{90FA}\x{90FB}\x{90FC}\x{90FD}\x{90FE}\x{90FF}\x{9100}\x{9101}\x{9102}' .
-          '\x{9103}\x{9104}\x{9105}\x{9106}\x{9107}\x{9108}\x{9109}\x{910B}\x{910C}' .
-          '\x{910D}\x{910E}\x{910F}\x{9110}\x{9111}\x{9112}\x{9113}\x{9114}\x{9115}' .
-          '\x{9116}\x{9117}\x{9118}\x{9119}\x{911A}\x{911B}\x{911C}\x{911D}\x{911E}' .
-          '\x{911F}\x{9120}\x{9121}\x{9122}\x{9123}\x{9124}\x{9125}\x{9126}\x{9127}' .
-          '\x{9128}\x{9129}\x{912A}\x{912B}\x{912C}\x{912D}\x{912E}\x{912F}\x{9130}' .
-          '\x{9131}\x{9132}\x{9133}\x{9134}\x{9135}\x{9136}\x{9137}\x{9138}\x{9139}' .
-          '\x{913A}\x{913B}\x{913E}\x{913F}\x{9140}\x{9141}\x{9142}\x{9143}\x{9144}' .
-          '\x{9145}\x{9146}\x{9147}\x{9148}\x{9149}\x{914A}\x{914B}\x{914C}\x{914D}' .
-          '\x{914E}\x{914F}\x{9150}\x{9151}\x{9152}\x{9153}\x{9154}\x{9155}\x{9156}' .
-          '\x{9157}\x{9158}\x{915A}\x{915B}\x{915C}\x{915D}\x{915E}\x{915F}\x{9160}' .
-          '\x{9161}\x{9162}\x{9163}\x{9164}\x{9165}\x{9166}\x{9167}\x{9168}\x{9169}' .
-          '\x{916A}\x{916B}\x{916C}\x{916D}\x{916E}\x{916F}\x{9170}\x{9171}\x{9172}' .
-          '\x{9173}\x{9174}\x{9175}\x{9176}\x{9177}\x{9178}\x{9179}\x{917A}\x{917C}' .
-          '\x{917D}\x{917E}\x{917F}\x{9180}\x{9181}\x{9182}\x{9183}\x{9184}\x{9185}' .
-          '\x{9186}\x{9187}\x{9188}\x{9189}\x{918A}\x{918B}\x{918C}\x{918D}\x{918E}' .
-          '\x{918F}\x{9190}\x{9191}\x{9192}\x{9193}\x{9194}\x{9196}\x{9199}\x{919A}' .
-          '\x{919B}\x{919C}\x{919D}\x{919E}\x{919F}\x{91A0}\x{91A1}\x{91A2}\x{91A3}' .
-          '\x{91A5}\x{91A6}\x{91A7}\x{91A8}\x{91AA}\x{91AB}\x{91AC}\x{91AD}\x{91AE}' .
-          '\x{91AF}\x{91B0}\x{91B1}\x{91B2}\x{91B3}\x{91B4}\x{91B5}\x{91B6}\x{91B7}' .
-          '\x{91B9}\x{91BA}\x{91BB}\x{91BC}\x{91BD}\x{91BE}\x{91C0}\x{91C1}\x{91C2}' .
-          '\x{91C3}\x{91C5}\x{91C6}\x{91C7}\x{91C9}\x{91CA}\x{91CB}\x{91CC}\x{91CD}' .
-          '\x{91CE}\x{91CF}\x{91D0}\x{91D1}\x{91D2}\x{91D3}\x{91D4}\x{91D5}\x{91D7}' .
-          '\x{91D8}\x{91D9}\x{91DA}\x{91DB}\x{91DC}\x{91DD}\x{91DE}\x{91DF}\x{91E2}' .
-          '\x{91E3}\x{91E4}\x{91E5}\x{91E6}\x{91E7}\x{91E8}\x{91E9}\x{91EA}\x{91EB}' .
-          '\x{91EC}\x{91ED}\x{91EE}\x{91F0}\x{91F1}\x{91F2}\x{91F3}\x{91F4}\x{91F5}' .
-          '\x{91F7}\x{91F8}\x{91F9}\x{91FA}\x{91FB}\x{91FD}\x{91FE}\x{91FF}\x{9200}' .
-          '\x{9201}\x{9202}\x{9203}\x{9204}\x{9205}\x{9206}\x{9207}\x{9208}\x{9209}' .
-          '\x{920A}\x{920B}\x{920C}\x{920D}\x{920E}\x{920F}\x{9210}\x{9211}\x{9212}' .
-          '\x{9214}\x{9215}\x{9216}\x{9217}\x{9218}\x{9219}\x{921A}\x{921B}\x{921C}' .
-          '\x{921D}\x{921E}\x{9220}\x{9221}\x{9223}\x{9224}\x{9225}\x{9226}\x{9227}' .
-          '\x{9228}\x{9229}\x{922A}\x{922B}\x{922D}\x{922E}\x{922F}\x{9230}\x{9231}' .
-          '\x{9232}\x{9233}\x{9234}\x{9235}\x{9236}\x{9237}\x{9238}\x{9239}\x{923A}' .
-          '\x{923B}\x{923C}\x{923D}\x{923E}\x{923F}\x{9240}\x{9241}\x{9242}\x{9245}' .
-          '\x{9246}\x{9247}\x{9248}\x{9249}\x{924A}\x{924B}\x{924C}\x{924D}\x{924E}' .
-          '\x{924F}\x{9250}\x{9251}\x{9252}\x{9253}\x{9254}\x{9255}\x{9256}\x{9257}' .
-          '\x{9258}\x{9259}\x{925A}\x{925B}\x{925C}\x{925D}\x{925E}\x{925F}\x{9260}' .
-          '\x{9261}\x{9262}\x{9263}\x{9264}\x{9265}\x{9266}\x{9267}\x{9268}\x{926B}' .
-          '\x{926C}\x{926D}\x{926E}\x{926F}\x{9270}\x{9272}\x{9273}\x{9274}\x{9275}' .
-          '\x{9276}\x{9277}\x{9278}\x{9279}\x{927A}\x{927B}\x{927C}\x{927D}\x{927E}' .
-          '\x{927F}\x{9280}\x{9282}\x{9283}\x{9285}\x{9286}\x{9287}\x{9288}\x{9289}' .
-          '\x{928A}\x{928B}\x{928C}\x{928D}\x{928E}\x{928F}\x{9290}\x{9291}\x{9292}' .
-          '\x{9293}\x{9294}\x{9295}\x{9296}\x{9297}\x{9298}\x{9299}\x{929A}\x{929B}' .
-          '\x{929C}\x{929D}\x{929F}\x{92A0}\x{92A1}\x{92A2}\x{92A3}\x{92A4}\x{92A5}' .
-          '\x{92A6}\x{92A7}\x{92A8}\x{92A9}\x{92AA}\x{92AB}\x{92AC}\x{92AD}\x{92AE}' .
-          '\x{92AF}\x{92B0}\x{92B1}\x{92B2}\x{92B3}\x{92B4}\x{92B5}\x{92B6}\x{92B7}' .
-          '\x{92B8}\x{92B9}\x{92BA}\x{92BB}\x{92BC}\x{92BE}\x{92BF}\x{92C0}\x{92C1}' .
-          '\x{92C2}\x{92C3}\x{92C4}\x{92C5}\x{92C6}\x{92C7}\x{92C8}\x{92C9}\x{92CA}' .
-          '\x{92CB}\x{92CC}\x{92CD}\x{92CE}\x{92CF}\x{92D0}\x{92D1}\x{92D2}\x{92D3}' .
-          '\x{92D5}\x{92D6}\x{92D7}\x{92D8}\x{92D9}\x{92DA}\x{92DC}\x{92DD}\x{92DE}' .
-          '\x{92DF}\x{92E0}\x{92E1}\x{92E3}\x{92E4}\x{92E5}\x{92E6}\x{92E7}\x{92E8}' .
-          '\x{92E9}\x{92EA}\x{92EB}\x{92EC}\x{92ED}\x{92EE}\x{92EF}\x{92F0}\x{92F1}' .
-          '\x{92F2}\x{92F3}\x{92F4}\x{92F5}\x{92F6}\x{92F7}\x{92F8}\x{92F9}\x{92FA}' .
-          '\x{92FB}\x{92FC}\x{92FD}\x{92FE}\x{92FF}\x{9300}\x{9301}\x{9302}\x{9303}' .
-          '\x{9304}\x{9305}\x{9306}\x{9307}\x{9308}\x{9309}\x{930A}\x{930B}\x{930C}' .
-          '\x{930D}\x{930E}\x{930F}\x{9310}\x{9311}\x{9312}\x{9313}\x{9314}\x{9315}' .
-          '\x{9316}\x{9317}\x{9318}\x{9319}\x{931A}\x{931B}\x{931D}\x{931E}\x{931F}' .
-          '\x{9320}\x{9321}\x{9322}\x{9323}\x{9324}\x{9325}\x{9326}\x{9327}\x{9328}' .
-          '\x{9329}\x{932A}\x{932B}\x{932D}\x{932E}\x{932F}\x{9332}\x{9333}\x{9334}' .
-          '\x{9335}\x{9336}\x{9337}\x{9338}\x{9339}\x{933A}\x{933B}\x{933C}\x{933D}' .
-          '\x{933E}\x{933F}\x{9340}\x{9341}\x{9342}\x{9343}\x{9344}\x{9345}\x{9346}' .
-          '\x{9347}\x{9348}\x{9349}\x{934A}\x{934B}\x{934C}\x{934D}\x{934E}\x{934F}' .
-          '\x{9350}\x{9351}\x{9352}\x{9353}\x{9354}\x{9355}\x{9356}\x{9357}\x{9358}' .
-          '\x{9359}\x{935A}\x{935B}\x{935C}\x{935D}\x{935E}\x{935F}\x{9360}\x{9361}' .
-          '\x{9363}\x{9364}\x{9365}\x{9366}\x{9367}\x{9369}\x{936A}\x{936C}\x{936D}' .
-          '\x{936E}\x{9370}\x{9371}\x{9372}\x{9374}\x{9375}\x{9376}\x{9377}\x{9379}' .
-          '\x{937A}\x{937B}\x{937C}\x{937D}\x{937E}\x{9380}\x{9382}\x{9383}\x{9384}' .
-          '\x{9385}\x{9386}\x{9387}\x{9388}\x{9389}\x{938A}\x{938C}\x{938D}\x{938E}' .
-          '\x{938F}\x{9390}\x{9391}\x{9392}\x{9393}\x{9394}\x{9395}\x{9396}\x{9397}' .
-          '\x{9398}\x{9399}\x{939A}\x{939B}\x{939D}\x{939E}\x{939F}\x{93A1}\x{93A2}' .
-          '\x{93A3}\x{93A4}\x{93A5}\x{93A6}\x{93A7}\x{93A8}\x{93A9}\x{93AA}\x{93AC}' .
-          '\x{93AD}\x{93AE}\x{93AF}\x{93B0}\x{93B1}\x{93B2}\x{93B3}\x{93B4}\x{93B5}' .
-          '\x{93B6}\x{93B7}\x{93B8}\x{93B9}\x{93BA}\x{93BC}\x{93BD}\x{93BE}\x{93BF}' .
-          '\x{93C0}\x{93C1}\x{93C2}\x{93C3}\x{93C4}\x{93C5}\x{93C6}\x{93C7}\x{93C8}' .
-          '\x{93C9}\x{93CA}\x{93CB}\x{93CC}\x{93CD}\x{93CE}\x{93CF}\x{93D0}\x{93D1}' .
-          '\x{93D2}\x{93D3}\x{93D4}\x{93D5}\x{93D6}\x{93D7}\x{93D8}\x{93D9}\x{93DA}' .
-          '\x{93DB}\x{93DC}\x{93DD}\x{93DE}\x{93DF}\x{93E1}\x{93E2}\x{93E3}\x{93E4}' .
-          '\x{93E6}\x{93E7}\x{93E8}\x{93E9}\x{93EA}\x{93EB}\x{93EC}\x{93ED}\x{93EE}' .
-          '\x{93EF}\x{93F0}\x{93F1}\x{93F2}\x{93F4}\x{93F5}\x{93F6}\x{93F7}\x{93F8}' .
-          '\x{93F9}\x{93FA}\x{93FB}\x{93FC}\x{93FD}\x{93FE}\x{93FF}\x{9400}\x{9401}' .
-          '\x{9403}\x{9404}\x{9405}\x{9406}\x{9407}\x{9408}\x{9409}\x{940A}\x{940B}' .
-          '\x{940C}\x{940D}\x{940E}\x{940F}\x{9410}\x{9411}\x{9412}\x{9413}\x{9414}' .
-          '\x{9415}\x{9416}\x{9418}\x{9419}\x{941B}\x{941D}\x{9420}\x{9422}\x{9423}' .
-          '\x{9425}\x{9426}\x{9427}\x{9428}\x{9429}\x{942A}\x{942B}\x{942C}\x{942D}' .
-          '\x{942E}\x{942F}\x{9430}\x{9431}\x{9432}\x{9433}\x{9434}\x{9435}\x{9436}' .
-          '\x{9437}\x{9438}\x{9439}\x{943A}\x{943B}\x{943C}\x{943D}\x{943E}\x{943F}' .
-          '\x{9440}\x{9441}\x{9442}\x{9444}\x{9445}\x{9446}\x{9447}\x{9448}\x{9449}' .
-          '\x{944A}\x{944B}\x{944C}\x{944D}\x{944F}\x{9450}\x{9451}\x{9452}\x{9453}' .
-          '\x{9454}\x{9455}\x{9456}\x{9457}\x{9458}\x{9459}\x{945B}\x{945C}\x{945D}' .
-          '\x{945E}\x{945F}\x{9460}\x{9461}\x{9462}\x{9463}\x{9464}\x{9465}\x{9466}' .
-          '\x{9467}\x{9468}\x{9469}\x{946A}\x{946B}\x{946D}\x{946E}\x{946F}\x{9470}' .
-          '\x{9471}\x{9472}\x{9473}\x{9474}\x{9475}\x{9476}\x{9477}\x{9478}\x{9479}' .
-          '\x{947A}\x{947C}\x{947D}\x{947E}\x{947F}\x{9480}\x{9481}\x{9482}\x{9483}' .
-          '\x{9484}\x{9485}\x{9486}\x{9487}\x{9488}\x{9489}\x{948A}\x{948B}\x{948C}' .
-          '\x{948D}\x{948E}\x{948F}\x{9490}\x{9491}\x{9492}\x{9493}\x{9494}\x{9495}' .
-          '\x{9496}\x{9497}\x{9498}\x{9499}\x{949A}\x{949B}\x{949C}\x{949D}\x{949E}' .
-          '\x{949F}\x{94A0}\x{94A1}\x{94A2}\x{94A3}\x{94A4}\x{94A5}\x{94A6}\x{94A7}' .
-          '\x{94A8}\x{94A9}\x{94AA}\x{94AB}\x{94AC}\x{94AD}\x{94AE}\x{94AF}\x{94B0}' .
-          '\x{94B1}\x{94B2}\x{94B3}\x{94B4}\x{94B5}\x{94B6}\x{94B7}\x{94B8}\x{94B9}' .
-          '\x{94BA}\x{94BB}\x{94BC}\x{94BD}\x{94BE}\x{94BF}\x{94C0}\x{94C1}\x{94C2}' .
-          '\x{94C3}\x{94C4}\x{94C5}\x{94C6}\x{94C7}\x{94C8}\x{94C9}\x{94CA}\x{94CB}' .
-          '\x{94CC}\x{94CD}\x{94CE}\x{94CF}\x{94D0}\x{94D1}\x{94D2}\x{94D3}\x{94D4}' .
-          '\x{94D5}\x{94D6}\x{94D7}\x{94D8}\x{94D9}\x{94DA}\x{94DB}\x{94DC}\x{94DD}' .
-          '\x{94DE}\x{94DF}\x{94E0}\x{94E1}\x{94E2}\x{94E3}\x{94E4}\x{94E5}\x{94E6}' .
-          '\x{94E7}\x{94E8}\x{94E9}\x{94EA}\x{94EB}\x{94EC}\x{94ED}\x{94EE}\x{94EF}' .
-          '\x{94F0}\x{94F1}\x{94F2}\x{94F3}\x{94F4}\x{94F5}\x{94F6}\x{94F7}\x{94F8}' .
-          '\x{94F9}\x{94FA}\x{94FB}\x{94FC}\x{94FD}\x{94FE}\x{94FF}\x{9500}\x{9501}' .
-          '\x{9502}\x{9503}\x{9504}\x{9505}\x{9506}\x{9507}\x{9508}\x{9509}\x{950A}' .
-          '\x{950B}\x{950C}\x{950D}\x{950E}\x{950F}\x{9510}\x{9511}\x{9512}\x{9513}' .
-          '\x{9514}\x{9515}\x{9516}\x{9517}\x{9518}\x{9519}\x{951A}\x{951B}\x{951C}' .
-          '\x{951D}\x{951E}\x{951F}\x{9520}\x{9521}\x{9522}\x{9523}\x{9524}\x{9525}' .
-          '\x{9526}\x{9527}\x{9528}\x{9529}\x{952A}\x{952B}\x{952C}\x{952D}\x{952E}' .
-          '\x{952F}\x{9530}\x{9531}\x{9532}\x{9533}\x{9534}\x{9535}\x{9536}\x{9537}' .
-          '\x{9538}\x{9539}\x{953A}\x{953B}\x{953C}\x{953D}\x{953E}\x{953F}\x{9540}' .
-          '\x{9541}\x{9542}\x{9543}\x{9544}\x{9545}\x{9546}\x{9547}\x{9548}\x{9549}' .
-          '\x{954A}\x{954B}\x{954C}\x{954D}\x{954E}\x{954F}\x{9550}\x{9551}\x{9552}' .
-          '\x{9553}\x{9554}\x{9555}\x{9556}\x{9557}\x{9558}\x{9559}\x{955A}\x{955B}' .
-          '\x{955C}\x{955D}\x{955E}\x{955F}\x{9560}\x{9561}\x{9562}\x{9563}\x{9564}' .
-          '\x{9565}\x{9566}\x{9567}\x{9568}\x{9569}\x{956A}\x{956B}\x{956C}\x{956D}' .
-          '\x{956E}\x{956F}\x{9570}\x{9571}\x{9572}\x{9573}\x{9574}\x{9575}\x{9576}' .
-          '\x{9577}\x{957A}\x{957B}\x{957C}\x{957D}\x{957F}\x{9580}\x{9581}\x{9582}' .
-          '\x{9583}\x{9584}\x{9586}\x{9587}\x{9588}\x{9589}\x{958A}\x{958B}\x{958C}' .
-          '\x{958D}\x{958E}\x{958F}\x{9590}\x{9591}\x{9592}\x{9593}\x{9594}\x{9595}' .
-          '\x{9596}\x{9598}\x{9599}\x{959A}\x{959B}\x{959C}\x{959D}\x{959E}\x{959F}' .
-          '\x{95A1}\x{95A2}\x{95A3}\x{95A4}\x{95A5}\x{95A6}\x{95A7}\x{95A8}\x{95A9}' .
-          '\x{95AA}\x{95AB}\x{95AC}\x{95AD}\x{95AE}\x{95AF}\x{95B0}\x{95B1}\x{95B2}' .
-          '\x{95B5}\x{95B6}\x{95B7}\x{95B9}\x{95BA}\x{95BB}\x{95BC}\x{95BD}\x{95BE}' .
-          '\x{95BF}\x{95C0}\x{95C2}\x{95C3}\x{95C4}\x{95C5}\x{95C6}\x{95C7}\x{95C8}' .
-          '\x{95C9}\x{95CA}\x{95CB}\x{95CC}\x{95CD}\x{95CE}\x{95CF}\x{95D0}\x{95D1}' .
-          '\x{95D2}\x{95D3}\x{95D4}\x{95D5}\x{95D6}\x{95D7}\x{95D8}\x{95DA}\x{95DB}' .
-          '\x{95DC}\x{95DE}\x{95DF}\x{95E0}\x{95E1}\x{95E2}\x{95E3}\x{95E4}\x{95E5}' .
-          '\x{95E6}\x{95E7}\x{95E8}\x{95E9}\x{95EA}\x{95EB}\x{95EC}\x{95ED}\x{95EE}' .
-          '\x{95EF}\x{95F0}\x{95F1}\x{95F2}\x{95F3}\x{95F4}\x{95F5}\x{95F6}\x{95F7}' .
-          '\x{95F8}\x{95F9}\x{95FA}\x{95FB}\x{95FC}\x{95FD}\x{95FE}\x{95FF}\x{9600}' .
-          '\x{9601}\x{9602}\x{9603}\x{9604}\x{9605}\x{9606}\x{9607}\x{9608}\x{9609}' .
-          '\x{960A}\x{960B}\x{960C}\x{960D}\x{960E}\x{960F}\x{9610}\x{9611}\x{9612}' .
-          '\x{9613}\x{9614}\x{9615}\x{9616}\x{9617}\x{9618}\x{9619}\x{961A}\x{961B}' .
-          '\x{961C}\x{961D}\x{961E}\x{961F}\x{9620}\x{9621}\x{9622}\x{9623}\x{9624}' .
-          '\x{9627}\x{9628}\x{962A}\x{962B}\x{962C}\x{962D}\x{962E}\x{962F}\x{9630}' .
-          '\x{9631}\x{9632}\x{9633}\x{9634}\x{9635}\x{9636}\x{9637}\x{9638}\x{9639}' .
-          '\x{963A}\x{963B}\x{963C}\x{963D}\x{963F}\x{9640}\x{9641}\x{9642}\x{9643}' .
-          '\x{9644}\x{9645}\x{9646}\x{9647}\x{9648}\x{9649}\x{964A}\x{964B}\x{964C}' .
-          '\x{964D}\x{964E}\x{964F}\x{9650}\x{9651}\x{9652}\x{9653}\x{9654}\x{9655}' .
-          '\x{9658}\x{9659}\x{965A}\x{965B}\x{965C}\x{965D}\x{965E}\x{965F}\x{9660}' .
-          '\x{9661}\x{9662}\x{9663}\x{9664}\x{9666}\x{9667}\x{9668}\x{9669}\x{966A}' .
-          '\x{966B}\x{966C}\x{966D}\x{966E}\x{966F}\x{9670}\x{9671}\x{9672}\x{9673}' .
-          '\x{9674}\x{9675}\x{9676}\x{9677}\x{9678}\x{967C}\x{967D}\x{967E}\x{9680}' .
-          '\x{9683}\x{9684}\x{9685}\x{9686}\x{9687}\x{9688}\x{9689}\x{968A}\x{968B}' .
-          '\x{968D}\x{968E}\x{968F}\x{9690}\x{9691}\x{9692}\x{9693}\x{9694}\x{9695}' .
-          '\x{9697}\x{9698}\x{9699}\x{969B}\x{969C}\x{969E}\x{96A0}\x{96A1}\x{96A2}' .
-          '\x{96A3}\x{96A4}\x{96A5}\x{96A6}\x{96A7}\x{96A8}\x{96A9}\x{96AA}\x{96AC}' .
-          '\x{96AD}\x{96AE}\x{96B0}\x{96B1}\x{96B3}\x{96B4}\x{96B6}\x{96B7}\x{96B8}' .
-          '\x{96B9}\x{96BA}\x{96BB}\x{96BC}\x{96BD}\x{96BE}\x{96BF}\x{96C0}\x{96C1}' .
-          '\x{96C2}\x{96C3}\x{96C4}\x{96C5}\x{96C6}\x{96C7}\x{96C8}\x{96C9}\x{96CA}' .
-          '\x{96CB}\x{96CC}\x{96CD}\x{96CE}\x{96CF}\x{96D0}\x{96D1}\x{96D2}\x{96D3}' .
-          '\x{96D4}\x{96D5}\x{96D6}\x{96D7}\x{96D8}\x{96D9}\x{96DA}\x{96DB}\x{96DC}' .
-          '\x{96DD}\x{96DE}\x{96DF}\x{96E0}\x{96E1}\x{96E2}\x{96E3}\x{96E5}\x{96E8}' .
-          '\x{96E9}\x{96EA}\x{96EB}\x{96EC}\x{96ED}\x{96EE}\x{96EF}\x{96F0}\x{96F1}' .
-          '\x{96F2}\x{96F3}\x{96F4}\x{96F5}\x{96F6}\x{96F7}\x{96F8}\x{96F9}\x{96FA}' .
-          '\x{96FB}\x{96FD}\x{96FE}\x{96FF}\x{9700}\x{9701}\x{9702}\x{9703}\x{9704}' .
-          '\x{9705}\x{9706}\x{9707}\x{9708}\x{9709}\x{970A}\x{970B}\x{970C}\x{970D}' .
-          '\x{970E}\x{970F}\x{9710}\x{9711}\x{9712}\x{9713}\x{9715}\x{9716}\x{9718}' .
-          '\x{9719}\x{971C}\x{971D}\x{971E}\x{971F}\x{9720}\x{9721}\x{9722}\x{9723}' .
-          '\x{9724}\x{9725}\x{9726}\x{9727}\x{9728}\x{9729}\x{972A}\x{972B}\x{972C}' .
-          '\x{972D}\x{972E}\x{972F}\x{9730}\x{9731}\x{9732}\x{9735}\x{9736}\x{9738}' .
-          '\x{9739}\x{973A}\x{973B}\x{973C}\x{973D}\x{973E}\x{973F}\x{9742}\x{9743}' .
-          '\x{9744}\x{9745}\x{9746}\x{9747}\x{9748}\x{9749}\x{974A}\x{974B}\x{974C}' .
-          '\x{974E}\x{974F}\x{9750}\x{9751}\x{9752}\x{9753}\x{9754}\x{9755}\x{9756}' .
-          '\x{9758}\x{9759}\x{975A}\x{975B}\x{975C}\x{975D}\x{975E}\x{975F}\x{9760}' .
-          '\x{9761}\x{9762}\x{9765}\x{9766}\x{9767}\x{9768}\x{9769}\x{976A}\x{976B}' .
-          '\x{976C}\x{976D}\x{976E}\x{976F}\x{9770}\x{9772}\x{9773}\x{9774}\x{9776}' .
-          '\x{9777}\x{9778}\x{9779}\x{977A}\x{977B}\x{977C}\x{977D}\x{977E}\x{977F}' .
-          '\x{9780}\x{9781}\x{9782}\x{9783}\x{9784}\x{9785}\x{9786}\x{9788}\x{978A}' .
-          '\x{978B}\x{978C}\x{978D}\x{978E}\x{978F}\x{9790}\x{9791}\x{9792}\x{9793}' .
-          '\x{9794}\x{9795}\x{9796}\x{9797}\x{9798}\x{9799}\x{979A}\x{979C}\x{979D}' .
-          '\x{979E}\x{979F}\x{97A0}\x{97A1}\x{97A2}\x{97A3}\x{97A4}\x{97A5}\x{97A6}' .
-          '\x{97A7}\x{97A8}\x{97AA}\x{97AB}\x{97AC}\x{97AD}\x{97AE}\x{97AF}\x{97B2}' .
-          '\x{97B3}\x{97B4}\x{97B6}\x{97B7}\x{97B8}\x{97B9}\x{97BA}\x{97BB}\x{97BC}' .
-          '\x{97BD}\x{97BF}\x{97C1}\x{97C2}\x{97C3}\x{97C4}\x{97C5}\x{97C6}\x{97C7}' .
-          '\x{97C8}\x{97C9}\x{97CA}\x{97CB}\x{97CC}\x{97CD}\x{97CE}\x{97CF}\x{97D0}' .
-          '\x{97D1}\x{97D3}\x{97D4}\x{97D5}\x{97D6}\x{97D7}\x{97D8}\x{97D9}\x{97DA}' .
-          '\x{97DB}\x{97DC}\x{97DD}\x{97DE}\x{97DF}\x{97E0}\x{97E1}\x{97E2}\x{97E3}' .
-          '\x{97E4}\x{97E5}\x{97E6}\x{97E7}\x{97E8}\x{97E9}\x{97EA}\x{97EB}\x{97EC}' .
-          '\x{97ED}\x{97EE}\x{97EF}\x{97F0}\x{97F1}\x{97F2}\x{97F3}\x{97F4}\x{97F5}' .
-          '\x{97F6}\x{97F7}\x{97F8}\x{97F9}\x{97FA}\x{97FB}\x{97FD}\x{97FE}\x{97FF}' .
-          '\x{9800}\x{9801}\x{9802}\x{9803}\x{9804}\x{9805}\x{9806}\x{9807}\x{9808}' .
-          '\x{9809}\x{980A}\x{980B}\x{980C}\x{980D}\x{980E}\x{980F}\x{9810}\x{9811}' .
-          '\x{9812}\x{9813}\x{9814}\x{9815}\x{9816}\x{9817}\x{9818}\x{9819}\x{981A}' .
-          '\x{981B}\x{981C}\x{981D}\x{981E}\x{9820}\x{9821}\x{9822}\x{9823}\x{9824}' .
-          '\x{9826}\x{9827}\x{9828}\x{9829}\x{982B}\x{982D}\x{982E}\x{982F}\x{9830}' .
-          '\x{9831}\x{9832}\x{9834}\x{9835}\x{9836}\x{9837}\x{9838}\x{9839}\x{983B}' .
-          '\x{983C}\x{983D}\x{983F}\x{9840}\x{9841}\x{9843}\x{9844}\x{9845}\x{9846}' .
-          '\x{9848}\x{9849}\x{984A}\x{984C}\x{984D}\x{984E}\x{984F}\x{9850}\x{9851}' .
-          '\x{9852}\x{9853}\x{9854}\x{9855}\x{9857}\x{9858}\x{9859}\x{985A}\x{985B}' .
-          '\x{985C}\x{985D}\x{985E}\x{985F}\x{9860}\x{9861}\x{9862}\x{9863}\x{9864}' .
-          '\x{9865}\x{9867}\x{9869}\x{986A}\x{986B}\x{986C}\x{986D}\x{986E}\x{986F}' .
-          '\x{9870}\x{9871}\x{9872}\x{9873}\x{9874}\x{9875}\x{9876}\x{9877}\x{9878}' .
-          '\x{9879}\x{987A}\x{987B}\x{987C}\x{987D}\x{987E}\x{987F}\x{9880}\x{9881}' .
-          '\x{9882}\x{9883}\x{9884}\x{9885}\x{9886}\x{9887}\x{9888}\x{9889}\x{988A}' .
-          '\x{988B}\x{988C}\x{988D}\x{988E}\x{988F}\x{9890}\x{9891}\x{9892}\x{9893}' .
-          '\x{9894}\x{9895}\x{9896}\x{9897}\x{9898}\x{9899}\x{989A}\x{989B}\x{989C}' .
-          '\x{989D}\x{989E}\x{989F}\x{98A0}\x{98A1}\x{98A2}\x{98A3}\x{98A4}\x{98A5}' .
-          '\x{98A6}\x{98A7}\x{98A8}\x{98A9}\x{98AA}\x{98AB}\x{98AC}\x{98AD}\x{98AE}' .
-          '\x{98AF}\x{98B0}\x{98B1}\x{98B2}\x{98B3}\x{98B4}\x{98B5}\x{98B6}\x{98B8}' .
-          '\x{98B9}\x{98BA}\x{98BB}\x{98BC}\x{98BD}\x{98BE}\x{98BF}\x{98C0}\x{98C1}' .
-          '\x{98C2}\x{98C3}\x{98C4}\x{98C5}\x{98C6}\x{98C8}\x{98C9}\x{98CB}\x{98CC}' .
-          '\x{98CD}\x{98CE}\x{98CF}\x{98D0}\x{98D1}\x{98D2}\x{98D3}\x{98D4}\x{98D5}' .
-          '\x{98D6}\x{98D7}\x{98D8}\x{98D9}\x{98DA}\x{98DB}\x{98DC}\x{98DD}\x{98DE}' .
-          '\x{98DF}\x{98E0}\x{98E2}\x{98E3}\x{98E5}\x{98E6}\x{98E7}\x{98E8}\x{98E9}' .
-          '\x{98EA}\x{98EB}\x{98ED}\x{98EF}\x{98F0}\x{98F2}\x{98F3}\x{98F4}\x{98F5}' .
-          '\x{98F6}\x{98F7}\x{98F9}\x{98FA}\x{98FC}\x{98FD}\x{98FE}\x{98FF}\x{9900}' .
-          '\x{9901}\x{9902}\x{9903}\x{9904}\x{9905}\x{9906}\x{9907}\x{9908}\x{9909}' .
-          '\x{990A}\x{990B}\x{990C}\x{990D}\x{990E}\x{990F}\x{9910}\x{9911}\x{9912}' .
-          '\x{9913}\x{9914}\x{9915}\x{9916}\x{9917}\x{9918}\x{991A}\x{991B}\x{991C}' .
-          '\x{991D}\x{991E}\x{991F}\x{9920}\x{9921}\x{9922}\x{9923}\x{9924}\x{9925}' .
-          '\x{9926}\x{9927}\x{9928}\x{9929}\x{992A}\x{992B}\x{992C}\x{992D}\x{992E}' .
-          '\x{992F}\x{9930}\x{9931}\x{9932}\x{9933}\x{9934}\x{9935}\x{9936}\x{9937}' .
-          '\x{9938}\x{9939}\x{993A}\x{993C}\x{993D}\x{993E}\x{993F}\x{9940}\x{9941}' .
-          '\x{9942}\x{9943}\x{9945}\x{9946}\x{9947}\x{9948}\x{9949}\x{994A}\x{994B}' .
-          '\x{994C}\x{994E}\x{994F}\x{9950}\x{9951}\x{9952}\x{9953}\x{9954}\x{9955}' .
-          '\x{9956}\x{9957}\x{9958}\x{9959}\x{995B}\x{995C}\x{995E}\x{995F}\x{9960}' .
-          '\x{9961}\x{9962}\x{9963}\x{9964}\x{9965}\x{9966}\x{9967}\x{9968}\x{9969}' .
-          '\x{996A}\x{996B}\x{996C}\x{996D}\x{996E}\x{996F}\x{9970}\x{9971}\x{9972}' .
-          '\x{9973}\x{9974}\x{9975}\x{9976}\x{9977}\x{9978}\x{9979}\x{997A}\x{997B}' .
-          '\x{997C}\x{997D}\x{997E}\x{997F}\x{9980}\x{9981}\x{9982}\x{9983}\x{9984}' .
-          '\x{9985}\x{9986}\x{9987}\x{9988}\x{9989}\x{998A}\x{998B}\x{998C}\x{998D}' .
-          '\x{998E}\x{998F}\x{9990}\x{9991}\x{9992}\x{9993}\x{9994}\x{9995}\x{9996}' .
-          '\x{9997}\x{9998}\x{9999}\x{999A}\x{999B}\x{999C}\x{999D}\x{999E}\x{999F}' .
-          '\x{99A0}\x{99A1}\x{99A2}\x{99A3}\x{99A4}\x{99A5}\x{99A6}\x{99A7}\x{99A8}' .
-          '\x{99A9}\x{99AA}\x{99AB}\x{99AC}\x{99AD}\x{99AE}\x{99AF}\x{99B0}\x{99B1}' .
-          '\x{99B2}\x{99B3}\x{99B4}\x{99B5}\x{99B6}\x{99B7}\x{99B8}\x{99B9}\x{99BA}' .
-          '\x{99BB}\x{99BC}\x{99BD}\x{99BE}\x{99C0}\x{99C1}\x{99C2}\x{99C3}\x{99C4}' .
-          '\x{99C6}\x{99C7}\x{99C8}\x{99C9}\x{99CA}\x{99CB}\x{99CC}\x{99CD}\x{99CE}' .
-          '\x{99CF}\x{99D0}\x{99D1}\x{99D2}\x{99D3}\x{99D4}\x{99D5}\x{99D6}\x{99D7}' .
-          '\x{99D8}\x{99D9}\x{99DA}\x{99DB}\x{99DC}\x{99DD}\x{99DE}\x{99DF}\x{99E1}' .
-          '\x{99E2}\x{99E3}\x{99E4}\x{99E5}\x{99E7}\x{99E8}\x{99E9}\x{99EA}\x{99EC}' .
-          '\x{99ED}\x{99EE}\x{99EF}\x{99F0}\x{99F1}\x{99F2}\x{99F3}\x{99F4}\x{99F6}' .
-          '\x{99F7}\x{99F8}\x{99F9}\x{99FA}\x{99FB}\x{99FC}\x{99FD}\x{99FE}\x{99FF}' .
-          '\x{9A00}\x{9A01}\x{9A02}\x{9A03}\x{9A04}\x{9A05}\x{9A06}\x{9A07}\x{9A08}' .
-          '\x{9A09}\x{9A0A}\x{9A0B}\x{9A0C}\x{9A0D}\x{9A0E}\x{9A0F}\x{9A11}\x{9A14}' .
-          '\x{9A15}\x{9A16}\x{9A19}\x{9A1A}\x{9A1B}\x{9A1C}\x{9A1D}\x{9A1E}\x{9A1F}' .
-          '\x{9A20}\x{9A21}\x{9A22}\x{9A23}\x{9A24}\x{9A25}\x{9A26}\x{9A27}\x{9A29}' .
-          '\x{9A2A}\x{9A2B}\x{9A2C}\x{9A2D}\x{9A2E}\x{9A2F}\x{9A30}\x{9A31}\x{9A32}' .
-          '\x{9A33}\x{9A34}\x{9A35}\x{9A36}\x{9A37}\x{9A38}\x{9A39}\x{9A3A}\x{9A3C}' .
-          '\x{9A3D}\x{9A3E}\x{9A3F}\x{9A40}\x{9A41}\x{9A42}\x{9A43}\x{9A44}\x{9A45}' .
-          '\x{9A46}\x{9A47}\x{9A48}\x{9A49}\x{9A4A}\x{9A4B}\x{9A4C}\x{9A4D}\x{9A4E}' .
-          '\x{9A4F}\x{9A50}\x{9A52}\x{9A53}\x{9A54}\x{9A55}\x{9A56}\x{9A57}\x{9A59}' .
-          '\x{9A5A}\x{9A5B}\x{9A5C}\x{9A5E}\x{9A5F}\x{9A60}\x{9A61}\x{9A62}\x{9A64}' .
-          '\x{9A65}\x{9A66}\x{9A67}\x{9A68}\x{9A69}\x{9A6A}\x{9A6B}\x{9A6C}\x{9A6D}' .
-          '\x{9A6E}\x{9A6F}\x{9A70}\x{9A71}\x{9A72}\x{9A73}\x{9A74}\x{9A75}\x{9A76}' .
-          '\x{9A77}\x{9A78}\x{9A79}\x{9A7A}\x{9A7B}\x{9A7C}\x{9A7D}\x{9A7E}\x{9A7F}' .
-          '\x{9A80}\x{9A81}\x{9A82}\x{9A83}\x{9A84}\x{9A85}\x{9A86}\x{9A87}\x{9A88}' .
-          '\x{9A89}\x{9A8A}\x{9A8B}\x{9A8C}\x{9A8D}\x{9A8E}\x{9A8F}\x{9A90}\x{9A91}' .
-          '\x{9A92}\x{9A93}\x{9A94}\x{9A95}\x{9A96}\x{9A97}\x{9A98}\x{9A99}\x{9A9A}' .
-          '\x{9A9B}\x{9A9C}\x{9A9D}\x{9A9E}\x{9A9F}\x{9AA0}\x{9AA1}\x{9AA2}\x{9AA3}' .
-          '\x{9AA4}\x{9AA5}\x{9AA6}\x{9AA7}\x{9AA8}\x{9AAA}\x{9AAB}\x{9AAC}\x{9AAD}' .
-          '\x{9AAE}\x{9AAF}\x{9AB0}\x{9AB1}\x{9AB2}\x{9AB3}\x{9AB4}\x{9AB5}\x{9AB6}' .
-          '\x{9AB7}\x{9AB8}\x{9AB9}\x{9ABA}\x{9ABB}\x{9ABC}\x{9ABE}\x{9ABF}\x{9AC0}' .
-          '\x{9AC1}\x{9AC2}\x{9AC3}\x{9AC4}\x{9AC5}\x{9AC6}\x{9AC7}\x{9AC9}\x{9ACA}' .
-          '\x{9ACB}\x{9ACC}\x{9ACD}\x{9ACE}\x{9ACF}\x{9AD0}\x{9AD1}\x{9AD2}\x{9AD3}' .
-          '\x{9AD4}\x{9AD5}\x{9AD6}\x{9AD8}\x{9AD9}\x{9ADA}\x{9ADB}\x{9ADC}\x{9ADD}' .
-          '\x{9ADE}\x{9ADF}\x{9AE1}\x{9AE2}\x{9AE3}\x{9AE5}\x{9AE6}\x{9AE7}\x{9AEA}' .
-          '\x{9AEB}\x{9AEC}\x{9AED}\x{9AEE}\x{9AEF}\x{9AF1}\x{9AF2}\x{9AF3}\x{9AF4}' .
-          '\x{9AF5}\x{9AF6}\x{9AF7}\x{9AF8}\x{9AF9}\x{9AFA}\x{9AFB}\x{9AFC}\x{9AFD}' .
-          '\x{9AFE}\x{9AFF}\x{9B01}\x{9B03}\x{9B04}\x{9B05}\x{9B06}\x{9B07}\x{9B08}' .
-          '\x{9B0A}\x{9B0B}\x{9B0C}\x{9B0D}\x{9B0E}\x{9B0F}\x{9B10}\x{9B11}\x{9B12}' .
-          '\x{9B13}\x{9B15}\x{9B16}\x{9B17}\x{9B18}\x{9B19}\x{9B1A}\x{9B1C}\x{9B1D}' .
-          '\x{9B1E}\x{9B1F}\x{9B20}\x{9B21}\x{9B22}\x{9B23}\x{9B24}\x{9B25}\x{9B26}' .
-          '\x{9B27}\x{9B28}\x{9B29}\x{9B2A}\x{9B2B}\x{9B2C}\x{9B2D}\x{9B2E}\x{9B2F}' .
-          '\x{9B30}\x{9B31}\x{9B32}\x{9B33}\x{9B35}\x{9B36}\x{9B37}\x{9B38}\x{9B39}' .
-          '\x{9B3A}\x{9B3B}\x{9B3C}\x{9B3E}\x{9B3F}\x{9B41}\x{9B42}\x{9B43}\x{9B44}' .
-          '\x{9B45}\x{9B46}\x{9B47}\x{9B48}\x{9B49}\x{9B4A}\x{9B4B}\x{9B4C}\x{9B4D}' .
-          '\x{9B4E}\x{9B4F}\x{9B51}\x{9B52}\x{9B53}\x{9B54}\x{9B55}\x{9B56}\x{9B58}' .
-          '\x{9B59}\x{9B5A}\x{9B5B}\x{9B5C}\x{9B5D}\x{9B5E}\x{9B5F}\x{9B60}\x{9B61}' .
-          '\x{9B63}\x{9B64}\x{9B65}\x{9B66}\x{9B67}\x{9B68}\x{9B69}\x{9B6A}\x{9B6B}' .
-          '\x{9B6C}\x{9B6D}\x{9B6E}\x{9B6F}\x{9B70}\x{9B71}\x{9B73}\x{9B74}\x{9B75}' .
-          '\x{9B76}\x{9B77}\x{9B78}\x{9B79}\x{9B7A}\x{9B7B}\x{9B7C}\x{9B7D}\x{9B7E}' .
-          '\x{9B7F}\x{9B80}\x{9B81}\x{9B82}\x{9B83}\x{9B84}\x{9B85}\x{9B86}\x{9B87}' .
-          '\x{9B88}\x{9B8A}\x{9B8B}\x{9B8D}\x{9B8E}\x{9B8F}\x{9B90}\x{9B91}\x{9B92}' .
-          '\x{9B93}\x{9B94}\x{9B95}\x{9B96}\x{9B97}\x{9B98}\x{9B9A}\x{9B9B}\x{9B9C}' .
-          '\x{9B9D}\x{9B9E}\x{9B9F}\x{9BA0}\x{9BA1}\x{9BA2}\x{9BA3}\x{9BA4}\x{9BA5}' .
-          '\x{9BA6}\x{9BA7}\x{9BA8}\x{9BA9}\x{9BAA}\x{9BAB}\x{9BAC}\x{9BAD}\x{9BAE}' .
-          '\x{9BAF}\x{9BB0}\x{9BB1}\x{9BB2}\x{9BB3}\x{9BB4}\x{9BB5}\x{9BB6}\x{9BB7}' .
-          '\x{9BB8}\x{9BB9}\x{9BBA}\x{9BBB}\x{9BBC}\x{9BBD}\x{9BBE}\x{9BBF}\x{9BC0}' .
-          '\x{9BC1}\x{9BC3}\x{9BC4}\x{9BC5}\x{9BC6}\x{9BC7}\x{9BC8}\x{9BC9}\x{9BCA}' .
-          '\x{9BCB}\x{9BCC}\x{9BCD}\x{9BCE}\x{9BCF}\x{9BD0}\x{9BD1}\x{9BD2}\x{9BD3}' .
-          '\x{9BD4}\x{9BD5}\x{9BD6}\x{9BD7}\x{9BD8}\x{9BD9}\x{9BDA}\x{9BDB}\x{9BDC}' .
-          '\x{9BDD}\x{9BDE}\x{9BDF}\x{9BE0}\x{9BE1}\x{9BE2}\x{9BE3}\x{9BE4}\x{9BE5}' .
-          '\x{9BE6}\x{9BE7}\x{9BE8}\x{9BE9}\x{9BEA}\x{9BEB}\x{9BEC}\x{9BED}\x{9BEE}' .
-          '\x{9BEF}\x{9BF0}\x{9BF1}\x{9BF2}\x{9BF3}\x{9BF4}\x{9BF5}\x{9BF7}\x{9BF8}' .
-          '\x{9BF9}\x{9BFA}\x{9BFB}\x{9BFC}\x{9BFD}\x{9BFE}\x{9BFF}\x{9C02}\x{9C05}' .
-          '\x{9C06}\x{9C07}\x{9C08}\x{9C09}\x{9C0A}\x{9C0B}\x{9C0C}\x{9C0D}\x{9C0E}' .
-          '\x{9C0F}\x{9C10}\x{9C11}\x{9C12}\x{9C13}\x{9C14}\x{9C15}\x{9C16}\x{9C17}' .
-          '\x{9C18}\x{9C19}\x{9C1A}\x{9C1B}\x{9C1C}\x{9C1D}\x{9C1E}\x{9C1F}\x{9C20}' .
-          '\x{9C21}\x{9C22}\x{9C23}\x{9C24}\x{9C25}\x{9C26}\x{9C27}\x{9C28}\x{9C29}' .
-          '\x{9C2A}\x{9C2B}\x{9C2C}\x{9C2D}\x{9C2F}\x{9C30}\x{9C31}\x{9C32}\x{9C33}' .
-          '\x{9C34}\x{9C35}\x{9C36}\x{9C37}\x{9C38}\x{9C39}\x{9C3A}\x{9C3B}\x{9C3C}' .
-          '\x{9C3D}\x{9C3E}\x{9C3F}\x{9C40}\x{9C41}\x{9C43}\x{9C44}\x{9C45}\x{9C46}' .
-          '\x{9C47}\x{9C48}\x{9C49}\x{9C4A}\x{9C4B}\x{9C4C}\x{9C4D}\x{9C4E}\x{9C50}' .
-          '\x{9C52}\x{9C53}\x{9C54}\x{9C55}\x{9C56}\x{9C57}\x{9C58}\x{9C59}\x{9C5A}' .
-          '\x{9C5B}\x{9C5C}\x{9C5D}\x{9C5E}\x{9C5F}\x{9C60}\x{9C62}\x{9C63}\x{9C65}' .
-          '\x{9C66}\x{9C67}\x{9C68}\x{9C69}\x{9C6A}\x{9C6B}\x{9C6C}\x{9C6D}\x{9C6E}' .
-          '\x{9C6F}\x{9C70}\x{9C71}\x{9C72}\x{9C73}\x{9C74}\x{9C75}\x{9C77}\x{9C78}' .
-          '\x{9C79}\x{9C7A}\x{9C7C}\x{9C7D}\x{9C7E}\x{9C7F}\x{9C80}\x{9C81}\x{9C82}' .
-          '\x{9C83}\x{9C84}\x{9C85}\x{9C86}\x{9C87}\x{9C88}\x{9C89}\x{9C8A}\x{9C8B}' .
-          '\x{9C8C}\x{9C8D}\x{9C8E}\x{9C8F}\x{9C90}\x{9C91}\x{9C92}\x{9C93}\x{9C94}' .
-          '\x{9C95}\x{9C96}\x{9C97}\x{9C98}\x{9C99}\x{9C9A}\x{9C9B}\x{9C9C}\x{9C9D}' .
-          '\x{9C9E}\x{9C9F}\x{9CA0}\x{9CA1}\x{9CA2}\x{9CA3}\x{9CA4}\x{9CA5}\x{9CA6}' .
-          '\x{9CA7}\x{9CA8}\x{9CA9}\x{9CAA}\x{9CAB}\x{9CAC}\x{9CAD}\x{9CAE}\x{9CAF}' .
-          '\x{9CB0}\x{9CB1}\x{9CB2}\x{9CB3}\x{9CB4}\x{9CB5}\x{9CB6}\x{9CB7}\x{9CB8}' .
-          '\x{9CB9}\x{9CBA}\x{9CBB}\x{9CBC}\x{9CBD}\x{9CBE}\x{9CBF}\x{9CC0}\x{9CC1}' .
-          '\x{9CC2}\x{9CC3}\x{9CC4}\x{9CC5}\x{9CC6}\x{9CC7}\x{9CC8}\x{9CC9}\x{9CCA}' .
-          '\x{9CCB}\x{9CCC}\x{9CCD}\x{9CCE}\x{9CCF}\x{9CD0}\x{9CD1}\x{9CD2}\x{9CD3}' .
-          '\x{9CD4}\x{9CD5}\x{9CD6}\x{9CD7}\x{9CD8}\x{9CD9}\x{9CDA}\x{9CDB}\x{9CDC}' .
-          '\x{9CDD}\x{9CDE}\x{9CDF}\x{9CE0}\x{9CE1}\x{9CE2}\x{9CE3}\x{9CE4}\x{9CE5}' .
-          '\x{9CE6}\x{9CE7}\x{9CE8}\x{9CE9}\x{9CEA}\x{9CEB}\x{9CEC}\x{9CED}\x{9CEE}' .
-          '\x{9CEF}\x{9CF0}\x{9CF1}\x{9CF2}\x{9CF3}\x{9CF4}\x{9CF5}\x{9CF6}\x{9CF7}' .
-          '\x{9CF8}\x{9CF9}\x{9CFA}\x{9CFB}\x{9CFC}\x{9CFD}\x{9CFE}\x{9CFF}\x{9D00}' .
-          '\x{9D01}\x{9D02}\x{9D03}\x{9D04}\x{9D05}\x{9D06}\x{9D07}\x{9D08}\x{9D09}' .
-          '\x{9D0A}\x{9D0B}\x{9D0F}\x{9D10}\x{9D12}\x{9D13}\x{9D14}\x{9D15}\x{9D16}' .
-          '\x{9D17}\x{9D18}\x{9D19}\x{9D1A}\x{9D1B}\x{9D1C}\x{9D1D}\x{9D1E}\x{9D1F}' .
-          '\x{9D20}\x{9D21}\x{9D22}\x{9D23}\x{9D24}\x{9D25}\x{9D26}\x{9D28}\x{9D29}' .
-          '\x{9D2B}\x{9D2D}\x{9D2E}\x{9D2F}\x{9D30}\x{9D31}\x{9D32}\x{9D33}\x{9D34}' .
-          '\x{9D36}\x{9D37}\x{9D38}\x{9D39}\x{9D3A}\x{9D3B}\x{9D3D}\x{9D3E}\x{9D3F}' .
-          '\x{9D40}\x{9D41}\x{9D42}\x{9D43}\x{9D45}\x{9D46}\x{9D47}\x{9D48}\x{9D49}' .
-          '\x{9D4A}\x{9D4B}\x{9D4C}\x{9D4D}\x{9D4E}\x{9D4F}\x{9D50}\x{9D51}\x{9D52}' .
-          '\x{9D53}\x{9D54}\x{9D55}\x{9D56}\x{9D57}\x{9D58}\x{9D59}\x{9D5A}\x{9D5B}' .
-          '\x{9D5C}\x{9D5D}\x{9D5E}\x{9D5F}\x{9D60}\x{9D61}\x{9D62}\x{9D63}\x{9D64}' .
-          '\x{9D65}\x{9D66}\x{9D67}\x{9D68}\x{9D69}\x{9D6A}\x{9D6B}\x{9D6C}\x{9D6E}' .
-          '\x{9D6F}\x{9D70}\x{9D71}\x{9D72}\x{9D73}\x{9D74}\x{9D75}\x{9D76}\x{9D77}' .
-          '\x{9D78}\x{9D79}\x{9D7A}\x{9D7B}\x{9D7C}\x{9D7D}\x{9D7E}\x{9D7F}\x{9D80}' .
-          '\x{9D81}\x{9D82}\x{9D83}\x{9D84}\x{9D85}\x{9D86}\x{9D87}\x{9D88}\x{9D89}' .
-          '\x{9D8A}\x{9D8B}\x{9D8C}\x{9D8D}\x{9D8E}\x{9D90}\x{9D91}\x{9D92}\x{9D93}' .
-          '\x{9D94}\x{9D96}\x{9D97}\x{9D98}\x{9D99}\x{9D9A}\x{9D9B}\x{9D9C}\x{9D9D}' .
-          '\x{9D9E}\x{9D9F}\x{9DA0}\x{9DA1}\x{9DA2}\x{9DA3}\x{9DA4}\x{9DA5}\x{9DA6}' .
-          '\x{9DA7}\x{9DA8}\x{9DA9}\x{9DAA}\x{9DAB}\x{9DAC}\x{9DAD}\x{9DAF}\x{9DB0}' .
-          '\x{9DB1}\x{9DB2}\x{9DB3}\x{9DB4}\x{9DB5}\x{9DB6}\x{9DB7}\x{9DB8}\x{9DB9}' .
-          '\x{9DBA}\x{9DBB}\x{9DBC}\x{9DBE}\x{9DBF}\x{9DC1}\x{9DC2}\x{9DC3}\x{9DC4}' .
-          '\x{9DC5}\x{9DC7}\x{9DC8}\x{9DC9}\x{9DCA}\x{9DCB}\x{9DCC}\x{9DCD}\x{9DCE}' .
-          '\x{9DCF}\x{9DD0}\x{9DD1}\x{9DD2}\x{9DD3}\x{9DD4}\x{9DD5}\x{9DD6}\x{9DD7}' .
-          '\x{9DD8}\x{9DD9}\x{9DDA}\x{9DDB}\x{9DDC}\x{9DDD}\x{9DDE}\x{9DDF}\x{9DE0}' .
-          '\x{9DE1}\x{9DE2}\x{9DE3}\x{9DE4}\x{9DE5}\x{9DE6}\x{9DE7}\x{9DE8}\x{9DE9}' .
-          '\x{9DEB}\x{9DEC}\x{9DED}\x{9DEE}\x{9DEF}\x{9DF0}\x{9DF1}\x{9DF2}\x{9DF3}' .
-          '\x{9DF4}\x{9DF5}\x{9DF6}\x{9DF7}\x{9DF8}\x{9DF9}\x{9DFA}\x{9DFB}\x{9DFD}' .
-          '\x{9DFE}\x{9DFF}\x{9E00}\x{9E01}\x{9E02}\x{9E03}\x{9E04}\x{9E05}\x{9E06}' .
-          '\x{9E07}\x{9E08}\x{9E09}\x{9E0A}\x{9E0B}\x{9E0C}\x{9E0D}\x{9E0F}\x{9E10}' .
-          '\x{9E11}\x{9E12}\x{9E13}\x{9E14}\x{9E15}\x{9E17}\x{9E18}\x{9E19}\x{9E1A}' .
-          '\x{9E1B}\x{9E1D}\x{9E1E}\x{9E1F}\x{9E20}\x{9E21}\x{9E22}\x{9E23}\x{9E24}' .
-          '\x{9E25}\x{9E26}\x{9E27}\x{9E28}\x{9E29}\x{9E2A}\x{9E2B}\x{9E2C}\x{9E2D}' .
-          '\x{9E2E}\x{9E2F}\x{9E30}\x{9E31}\x{9E32}\x{9E33}\x{9E34}\x{9E35}\x{9E36}' .
-          '\x{9E37}\x{9E38}\x{9E39}\x{9E3A}\x{9E3B}\x{9E3C}\x{9E3D}\x{9E3E}\x{9E3F}' .
-          '\x{9E40}\x{9E41}\x{9E42}\x{9E43}\x{9E44}\x{9E45}\x{9E46}\x{9E47}\x{9E48}' .
-          '\x{9E49}\x{9E4A}\x{9E4B}\x{9E4C}\x{9E4D}\x{9E4E}\x{9E4F}\x{9E50}\x{9E51}' .
-          '\x{9E52}\x{9E53}\x{9E54}\x{9E55}\x{9E56}\x{9E57}\x{9E58}\x{9E59}\x{9E5A}' .
-          '\x{9E5B}\x{9E5C}\x{9E5D}\x{9E5E}\x{9E5F}\x{9E60}\x{9E61}\x{9E62}\x{9E63}' .
-          '\x{9E64}\x{9E65}\x{9E66}\x{9E67}\x{9E68}\x{9E69}\x{9E6A}\x{9E6B}\x{9E6C}' .
-          '\x{9E6D}\x{9E6E}\x{9E6F}\x{9E70}\x{9E71}\x{9E72}\x{9E73}\x{9E74}\x{9E75}' .
-          '\x{9E76}\x{9E77}\x{9E79}\x{9E7A}\x{9E7C}\x{9E7D}\x{9E7E}\x{9E7F}\x{9E80}' .
-          '\x{9E81}\x{9E82}\x{9E83}\x{9E84}\x{9E85}\x{9E86}\x{9E87}\x{9E88}\x{9E89}' .
-          '\x{9E8A}\x{9E8B}\x{9E8C}\x{9E8D}\x{9E8E}\x{9E91}\x{9E92}\x{9E93}\x{9E94}' .
-          '\x{9E96}\x{9E97}\x{9E99}\x{9E9A}\x{9E9B}\x{9E9C}\x{9E9D}\x{9E9F}\x{9EA0}' .
-          '\x{9EA1}\x{9EA3}\x{9EA4}\x{9EA5}\x{9EA6}\x{9EA7}\x{9EA8}\x{9EA9}\x{9EAA}' .
-          '\x{9EAD}\x{9EAE}\x{9EAF}\x{9EB0}\x{9EB2}\x{9EB3}\x{9EB4}\x{9EB5}\x{9EB6}' .
-          '\x{9EB7}\x{9EB8}\x{9EBB}\x{9EBC}\x{9EBD}\x{9EBE}\x{9EBF}\x{9EC0}\x{9EC1}' .
-          '\x{9EC2}\x{9EC3}\x{9EC4}\x{9EC5}\x{9EC6}\x{9EC7}\x{9EC8}\x{9EC9}\x{9ECA}' .
-          '\x{9ECB}\x{9ECC}\x{9ECD}\x{9ECE}\x{9ECF}\x{9ED0}\x{9ED1}\x{9ED2}\x{9ED3}' .
-          '\x{9ED4}\x{9ED5}\x{9ED6}\x{9ED7}\x{9ED8}\x{9ED9}\x{9EDA}\x{9EDB}\x{9EDC}' .
-          '\x{9EDD}\x{9EDE}\x{9EDF}\x{9EE0}\x{9EE1}\x{9EE2}\x{9EE3}\x{9EE4}\x{9EE5}' .
-          '\x{9EE6}\x{9EE7}\x{9EE8}\x{9EE9}\x{9EEA}\x{9EEB}\x{9EED}\x{9EEE}\x{9EEF}' .
-          '\x{9EF0}\x{9EF2}\x{9EF3}\x{9EF4}\x{9EF5}\x{9EF6}\x{9EF7}\x{9EF8}\x{9EF9}' .
-          '\x{9EFA}\x{9EFB}\x{9EFC}\x{9EFD}\x{9EFE}\x{9EFF}\x{9F00}\x{9F01}\x{9F02}' .
-          '\x{9F04}\x{9F05}\x{9F06}\x{9F07}\x{9F08}\x{9F09}\x{9F0A}\x{9F0B}\x{9F0C}' .
-          '\x{9F0D}\x{9F0E}\x{9F0F}\x{9F10}\x{9F12}\x{9F13}\x{9F15}\x{9F16}\x{9F17}' .
-          '\x{9F18}\x{9F19}\x{9F1A}\x{9F1B}\x{9F1C}\x{9F1D}\x{9F1E}\x{9F1F}\x{9F20}' .
-          '\x{9F22}\x{9F23}\x{9F24}\x{9F25}\x{9F27}\x{9F28}\x{9F29}\x{9F2A}\x{9F2B}' .
-          '\x{9F2C}\x{9F2D}\x{9F2E}\x{9F2F}\x{9F30}\x{9F31}\x{9F32}\x{9F33}\x{9F34}' .
-          '\x{9F35}\x{9F36}\x{9F37}\x{9F38}\x{9F39}\x{9F3A}\x{9F3B}\x{9F3C}\x{9F3D}' .
-          '\x{9F3E}\x{9F3F}\x{9F40}\x{9F41}\x{9F42}\x{9F43}\x{9F44}\x{9F46}\x{9F47}' .
-          '\x{9F48}\x{9F49}\x{9F4A}\x{9F4B}\x{9F4C}\x{9F4D}\x{9F4E}\x{9F4F}\x{9F50}' .
-          '\x{9F51}\x{9F52}\x{9F54}\x{9F55}\x{9F56}\x{9F57}\x{9F58}\x{9F59}\x{9F5A}' .
-          '\x{9F5B}\x{9F5C}\x{9F5D}\x{9F5E}\x{9F5F}\x{9F60}\x{9F61}\x{9F63}\x{9F64}' .
-          '\x{9F65}\x{9F66}\x{9F67}\x{9F68}\x{9F69}\x{9F6A}\x{9F6B}\x{9F6C}\x{9F6E}' .
-          '\x{9F6F}\x{9F70}\x{9F71}\x{9F72}\x{9F73}\x{9F74}\x{9F75}\x{9F76}\x{9F77}' .
-          '\x{9F78}\x{9F79}\x{9F7A}\x{9F7B}\x{9F7C}\x{9F7D}\x{9F7E}\x{9F7F}\x{9F80}' .
-          '\x{9F81}\x{9F82}\x{9F83}\x{9F84}\x{9F85}\x{9F86}\x{9F87}\x{9F88}\x{9F89}' .
-          '\x{9F8A}\x{9F8B}\x{9F8C}\x{9F8D}\x{9F8E}\x{9F8F}\x{9F90}\x{9F91}\x{9F92}' .
-          '\x{9F93}\x{9F94}\x{9F95}\x{9F96}\x{9F97}\x{9F98}\x{9F99}\x{9F9A}\x{9F9B}' .
-          '\x{9F9C}\x{9F9D}\x{9F9E}\x{9F9F}\x{9FA0}\x{9FA2}\x{9FA4}\x{9FA5}]{1,20}$/iu',
-);
diff --git a/civicrm/vendor/zendframework/zend-validator/src/Hostname/Com.php b/civicrm/vendor/zendframework/zend-validator/src/Hostname/Com.php
deleted file mode 100644
index 93f3834b60f06f65d2886053b7b7c7354c5f4eb2..0000000000000000000000000000000000000000
--- a/civicrm/vendor/zendframework/zend-validator/src/Hostname/Com.php
+++ /dev/null
@@ -1,180 +0,0 @@
-<?php
-/**
- * Zend Framework (http://framework.zend.com/)
- *
- * @link      http://github.com/zendframework/zf2 for the canonical source repository
- * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
- * @license   http://framework.zend.com/license/new-bsd New BSD License
- */
-
-namespace Zend\Validator\Hostname;
-
-/**
- * Resource file for com and net idn validation
- */
-return array(
-    1  => '/^[\x{002d}0-9\x{0400}-\x{052f}]{1,63}$/iu',
-    2  => '/^[\x{002d}0-9\x{0370}-\x{03ff}]{1,63}$/iu',
-    3  => '/^[\x{002d}0-9a-z\x{ac00}-\x{d7a3}]{1,17}$/iu',
-    4  => '/^[\x{002d}0-9a-z·à-öø-ÿāăąćĉċčďđēĕėęěĝğġģĥħĩīĭįıĵķĸĺļľłńņňŋōŏőœŕŗřśŝşšţťŧũūŭůűųŵŷźżž]{1,63}$/iu',
-    5  => '/^[\x{002d}0-9A-Za-z\x{3400}-\x{3401}\x{3404}-\x{3406}\x{340C}\x{3416}\x{341C}' .
-'\x{3421}\x{3424}\x{3428}-\x{3429}\x{342B}-\x{342E}\x{3430}-\x{3434}\x{3436}' .
-'\x{3438}-\x{343C}\x{343E}\x{3441}-\x{3445}\x{3447}\x{3449}-\x{3451}\x{3453}' .
-'\x{3457}-\x{345F}\x{3463}-\x{3467}\x{346E}-\x{3471}\x{3473}-\x{3477}\x{3479}-\x{348E}\x{3491}-\x{3497}' .
-'\x{3499}-\x{34A1}\x{34A4}-\x{34AD}\x{34AF}-\x{34B0}\x{34B2}-\x{34BF}\x{34C2}-\x{34C5}\x{34C7}-\x{34CC}' .
-'\x{34CE}-\x{34D1}\x{34D3}-\x{34D8}\x{34DA}-\x{34E4}\x{34E7}-\x{34E9}\x{34EC}-\x{34EF}\x{34F1}-\x{34FE}' .
-'\x{3500}-\x{3507}\x{350A}-\x{3513}\x{3515}\x{3517}-\x{351A}\x{351C}-\x{351E}\x{3520}-\x{352A}' .
-'\x{352C}-\x{3552}\x{3554}-\x{355C}\x{355E}-\x{3567}\x{3569}-\x{3573}\x{3575}-\x{357C}\x{3580}-\x{3588}' .
-'\x{358F}-\x{3598}\x{359E}-\x{35AB}\x{35B4}-\x{35CD}\x{35D0}\x{35D3}-\x{35DC}\x{35E2}-\x{35ED}' .
-'\x{35F0}-\x{35F6}\x{35FB}-\x{3602}\x{3605}-\x{360E}\x{3610}-\x{3611}\x{3613}-\x{3616}\x{3619}-\x{362D}' .
-'\x{362F}-\x{3634}\x{3636}-\x{363B}\x{363F}-\x{3645}\x{3647}-\x{364B}\x{364D}-\x{3653}\x{3655}' .
-'\x{3659}-\x{365E}\x{3660}-\x{3665}\x{3667}-\x{367C}\x{367E}\x{3680}-\x{3685}\x{3687}' .
-'\x{3689}-\x{3690}\x{3692}-\x{3698}\x{369A}\x{369C}-\x{36AE}\x{36B0}-\x{36BF}\x{36C1}-\x{36C5}' .
-'\x{36C9}-\x{36CA}\x{36CD}-\x{36DE}\x{36E1}-\x{36E2}\x{36E5}-\x{36FE}\x{3701}-\x{3713}\x{3715}-\x{371E}' .
-'\x{3720}-\x{372C}\x{372E}-\x{3745}\x{3747}-\x{3748}\x{374A}\x{374C}-\x{3759}\x{375B}-\x{3760}' .
-'\x{3762}-\x{3767}\x{3769}-\x{3772}\x{3774}-\x{378C}\x{378F}-\x{379C}\x{379F}\x{37A1}-\x{37AD}' .
-'\x{37AF}-\x{37B7}\x{37B9}-\x{37C1}\x{37C3}-\x{37C5}\x{37C7}-\x{37D4}\x{37D6}-\x{37E0}\x{37E2}' .
-'\x{37E5}-\x{37ED}\x{37EF}-\x{37F6}\x{37F8}-\x{3802}\x{3804}-\x{381D}\x{3820}-\x{3822}\x{3825}-\x{382A}' .
-'\x{382D}-\x{382F}\x{3831}-\x{3832}\x{3834}-\x{384C}\x{384E}-\x{3860}\x{3862}-\x{3863}\x{3865}-\x{386B}' .
-'\x{386D}-\x{3886}\x{3888}-\x{38A1}\x{38A3}\x{38A5}-\x{38AA}\x{38AC}\x{38AE}-\x{38B0}' .
-'\x{38B2}-\x{38B6}\x{38B8}\x{38BA}-\x{38BE}\x{38C0}-\x{38C9}\x{38CB}-\x{38D4}\x{38D8}-\x{38E0}' .
-'\x{38E2}-\x{38E6}\x{38EB}-\x{38ED}\x{38EF}-\x{38F2}\x{38F5}-\x{38F7}\x{38FA}-\x{38FF}\x{3901}-\x{392A}' .
-'\x{392C}\x{392E}-\x{393B}\x{393E}-\x{3956}\x{395A}-\x{3969}\x{396B}-\x{397A}\x{397C}-\x{3987}' .
-'\x{3989}-\x{3998}\x{399A}-\x{39B0}\x{39B2}\x{39B4}-\x{39D0}\x{39D2}-\x{39DA}\x{39DE}-\x{39DF}' .
-'\x{39E1}-\x{39EF}\x{39F1}-\x{3A17}\x{3A19}-\x{3A2A}\x{3A2D}-\x{3A40}\x{3A43}-\x{3A4E}\x{3A50}' .
-'\x{3A52}-\x{3A5E}\x{3A60}-\x{3A6D}\x{3A6F}-\x{3A77}\x{3A79}-\x{3A82}\x{3A84}-\x{3A85}\x{3A87}-\x{3A89}' .
-'\x{3A8B}-\x{3A8F}\x{3A91}-\x{3A93}\x{3A95}-\x{3A96}\x{3A9A}\x{3A9C}-\x{3AA6}\x{3AA8}-\x{3AA9}' .
-'\x{3AAB}-\x{3AB1}\x{3AB4}-\x{3ABC}\x{3ABE}-\x{3AC5}\x{3ACA}-\x{3ACB}\x{3ACD}-\x{3AD5}\x{3AD7}-\x{3AE1}' .
-'\x{3AE4}-\x{3AE7}\x{3AE9}-\x{3AEC}\x{3AEE}-\x{3AFD}\x{3B01}-\x{3B10}\x{3B12}-\x{3B15}\x{3B17}-\x{3B1E}' .
-'\x{3B20}-\x{3B23}\x{3B25}-\x{3B27}\x{3B29}-\x{3B36}\x{3B38}-\x{3B39}\x{3B3B}-\x{3B3C}\x{3B3F}' .
-'\x{3B41}-\x{3B44}\x{3B47}-\x{3B4C}\x{3B4E}\x{3B51}-\x{3B55}\x{3B58}-\x{3B62}\x{3B68}-\x{3B72}' .
-'\x{3B78}-\x{3B88}\x{3B8B}-\x{3B9F}\x{3BA1}\x{3BA3}-\x{3BBA}\x{3BBC}\x{3BBF}-\x{3BD0}' .
-'\x{3BD3}-\x{3BE6}\x{3BEA}-\x{3BFB}\x{3BFE}-\x{3C12}\x{3C14}-\x{3C1B}\x{3C1D}-\x{3C37}\x{3C39}-\x{3C4F}' .
-'\x{3C52}\x{3C54}-\x{3C5C}\x{3C5E}-\x{3C68}\x{3C6A}-\x{3C76}\x{3C78}-\x{3C8F}\x{3C91}-\x{3CA8}' .
-'\x{3CAA}-\x{3CAD}\x{3CAF}-\x{3CBE}\x{3CC0}-\x{3CC8}\x{3CCA}-\x{3CD3}\x{3CD6}-\x{3CE0}\x{3CE4}-\x{3CEE}' .
-'\x{3CF3}-\x{3D0A}\x{3D0E}-\x{3D1E}\x{3D20}-\x{3D21}\x{3D25}-\x{3D38}\x{3D3B}-\x{3D46}\x{3D4A}-\x{3D59}' .
-'\x{3D5D}-\x{3D7B}\x{3D7D}-\x{3D81}\x{3D84}-\x{3D88}\x{3D8C}-\x{3D8F}\x{3D91}-\x{3D98}\x{3D9A}-\x{3D9C}' .
-'\x{3D9E}-\x{3DA1}\x{3DA3}-\x{3DB0}\x{3DB2}-\x{3DB5}\x{3DB9}-\x{3DBC}\x{3DBE}-\x{3DCB}\x{3DCD}-\x{3DDB}' .
-'\x{3DDF}-\x{3DE8}\x{3DEB}-\x{3DF0}\x{3DF3}-\x{3DF9}\x{3DFB}-\x{3DFC}\x{3DFE}-\x{3E05}\x{3E08}-\x{3E33}' .
-'\x{3E35}-\x{3E3E}\x{3E40}-\x{3E47}\x{3E49}-\x{3E67}\x{3E6B}-\x{3E6F}\x{3E71}-\x{3E85}\x{3E87}-\x{3E8C}' .
-'\x{3E8E}-\x{3E98}\x{3E9A}-\x{3EA1}\x{3EA3}-\x{3EAE}\x{3EB0}-\x{3EB5}\x{3EB7}-\x{3EBA}\x{3EBD}' .
-'\x{3EBF}-\x{3EC4}\x{3EC7}-\x{3ECE}\x{3ED1}-\x{3ED7}\x{3ED9}-\x{3EDA}\x{3EDD}-\x{3EE3}\x{3EE7}-\x{3EE8}' .
-'\x{3EEB}-\x{3EF2}\x{3EF5}-\x{3EFF}\x{3F01}-\x{3F02}\x{3F04}-\x{3F07}\x{3F09}-\x{3F44}\x{3F46}-\x{3F4E}' .
-'\x{3F50}-\x{3F53}\x{3F55}-\x{3F72}\x{3F74}-\x{3F75}\x{3F77}-\x{3F7B}\x{3F7D}-\x{3FB0}\x{3FB6}-\x{3FBF}' .
-'\x{3FC1}-\x{3FCF}\x{3FD1}-\x{3FD3}\x{3FD5}-\x{3FDF}\x{3FE1}-\x{400B}\x{400D}-\x{401C}\x{401E}-\x{4024}' .
-'\x{4027}-\x{403F}\x{4041}-\x{4060}\x{4062}-\x{4069}\x{406B}-\x{408A}\x{408C}-\x{40A7}\x{40A9}-\x{40B4}' .
-'\x{40B6}-\x{40C2}\x{40C7}-\x{40CF}\x{40D1}-\x{40DE}\x{40E0}-\x{40E7}\x{40E9}-\x{40EE}\x{40F0}-\x{40FB}' .
-'\x{40FD}-\x{4109}\x{410B}-\x{4115}\x{4118}-\x{411D}\x{411F}-\x{4122}\x{4124}-\x{4133}\x{4136}-\x{4138}' .
-'\x{413A}-\x{4148}\x{414A}-\x{4169}\x{416C}-\x{4185}\x{4188}-\x{418B}\x{418D}-\x{41AD}\x{41AF}-\x{41B3}' .
-'\x{41B5}-\x{41C3}\x{41C5}-\x{41C9}\x{41CB}-\x{41F2}\x{41F5}-\x{41FE}\x{4200}-\x{4227}\x{422A}-\x{4246}' .
-'\x{4248}-\x{4263}\x{4265}-\x{428B}\x{428D}-\x{42A1}\x{42A3}-\x{42C4}\x{42C8}-\x{42DC}\x{42DE}-\x{430A}' .
-'\x{430C}-\x{4335}\x{4337}\x{4342}-\x{435F}\x{4361}-\x{439A}\x{439C}-\x{439D}\x{439F}-\x{43A4}' .
-'\x{43A6}-\x{43EC}\x{43EF}-\x{4405}\x{4407}-\x{4429}\x{442B}-\x{4455}\x{4457}-\x{4468}\x{446A}-\x{446D}' .
-'\x{446F}-\x{4476}\x{4479}-\x{447D}\x{447F}-\x{4486}\x{4488}-\x{4490}\x{4492}-\x{4498}\x{449A}-\x{44AD}' .
-'\x{44B0}-\x{44BD}\x{44C1}-\x{44D3}\x{44D6}-\x{44E7}\x{44EA}\x{44EC}-\x{44FA}\x{44FC}-\x{4541}' .
-'\x{4543}-\x{454F}\x{4551}-\x{4562}\x{4564}-\x{4575}\x{4577}-\x{45AB}\x{45AD}-\x{45BD}\x{45BF}-\x{45D5}' .
-'\x{45D7}-\x{45EC}\x{45EE}-\x{45F2}\x{45F4}-\x{45FA}\x{45FC}-\x{461A}\x{461C}-\x{461D}\x{461F}-\x{4631}' .
-'\x{4633}-\x{4649}\x{464C}\x{464E}-\x{4652}\x{4654}-\x{466A}\x{466C}-\x{4675}\x{4677}-\x{467A}' .
-'\x{467C}-\x{4694}\x{4696}-\x{46A3}\x{46A5}-\x{46AB}\x{46AD}-\x{46D2}\x{46D4}-\x{4723}\x{4729}-\x{4732}' .
-'\x{4734}-\x{4758}\x{475A}\x{475C}-\x{478B}\x{478D}\x{4791}-\x{47B1}\x{47B3}-\x{47F1}' .
-'\x{47F3}-\x{480B}\x{480D}-\x{4815}\x{4817}-\x{4839}\x{483B}-\x{4870}\x{4872}-\x{487A}\x{487C}-\x{487F}' .
-'\x{4883}-\x{488E}\x{4890}-\x{4896}\x{4899}-\x{48A2}\x{48A4}-\x{48B9}\x{48BB}-\x{48C8}\x{48CA}-\x{48D1}' .
-'\x{48D3}-\x{48E5}\x{48E7}-\x{48F2}\x{48F4}-\x{48FF}\x{4901}-\x{4922}\x{4924}-\x{4928}\x{492A}-\x{4931}' .
-'\x{4933}-\x{495B}\x{495D}-\x{4978}\x{497A}\x{497D}\x{4982}-\x{4983}\x{4985}-\x{49A8}' .
-'\x{49AA}-\x{49AF}\x{49B1}-\x{49B7}\x{49B9}-\x{49BD}\x{49C1}-\x{49C7}\x{49C9}-\x{49CE}\x{49D0}-\x{49E8}' .
-'\x{49EA}\x{49EC}\x{49EE}-\x{4A19}\x{4A1B}-\x{4A43}\x{4A45}-\x{4A4D}\x{4A4F}-\x{4A9E}' .
-'\x{4AA0}-\x{4AA9}\x{4AAB}-\x{4B4E}\x{4B50}-\x{4B5B}\x{4B5D}-\x{4B69}\x{4B6B}-\x{4BC2}\x{4BC6}-\x{4BE8}' .
-'\x{4BEA}-\x{4BFA}\x{4BFC}-\x{4C06}\x{4C08}-\x{4C2D}\x{4C2F}-\x{4C32}\x{4C34}-\x{4C35}\x{4C37}-\x{4C69}' .
-'\x{4C6B}-\x{4C73}\x{4C75}-\x{4C86}\x{4C88}-\x{4C97}\x{4C99}-\x{4C9C}\x{4C9F}-\x{4CA3}\x{4CA5}-\x{4CB5}' .
-'\x{4CB7}-\x{4CF8}\x{4CFA}-\x{4D27}\x{4D29}-\x{4DAC}\x{4DAE}-\x{4DB1}\x{4DB3}-\x{4DB5}\x{4E00}-\x{4E54}' .
-'\x{4E56}-\x{4E89}\x{4E8B}-\x{4EEC}\x{4EEE}-\x{4FAC}\x{4FAE}-\x{503C}\x{503E}-\x{51E5}\x{51E7}-\x{5270}' .
-'\x{5272}-\x{56A1}\x{56A3}-\x{5840}\x{5842}-\x{58B5}\x{58B7}-\x{58CB}\x{58CD}-\x{5BC8}\x{5BCA}-\x{5C01}' .
-'\x{5C03}-\x{5C25}\x{5C27}-\x{5D5B}\x{5D5D}-\x{5F08}\x{5F0A}-\x{61F3}\x{61F5}-\x{63BA}\x{63BC}-\x{6441}' .
-'\x{6443}-\x{657C}\x{657E}-\x{663E}\x{6640}-\x{66FC}\x{66FE}-\x{6728}\x{672A}-\x{6766}\x{6768}-\x{67A8}' .
-'\x{67AA}-\x{685B}\x{685D}-\x{685E}\x{6860}-\x{68B9}\x{68BB}-\x{6AC8}\x{6ACA}-\x{6BB0}\x{6BB2}-\x{6C16}' .
-'\x{6C18}-\x{6D9B}\x{6D9D}-\x{6E12}\x{6E14}-\x{6E8B}\x{6E8D}-\x{704D}\x{704F}-\x{7113}\x{7115}-\x{713B}' .
-'\x{713D}-\x{7154}\x{7156}-\x{729F}\x{72A1}-\x{731E}\x{7320}-\x{7362}\x{7364}-\x{7533}\x{7535}-\x{7551}' .
-'\x{7553}-\x{7572}\x{7574}-\x{75E8}\x{75EA}-\x{7679}\x{767B}-\x{783E}\x{7840}-\x{7A62}\x{7A64}-\x{7AC2}' .
-'\x{7AC4}-\x{7B06}\x{7B08}-\x{7B79}\x{7B7B}-\x{7BCE}\x{7BD0}-\x{7D99}\x{7D9B}-\x{7E49}\x{7E4C}-\x{8132}' .
-'\x{8134}\x{8136}-\x{81D2}\x{81D4}-\x{8216}\x{8218}-\x{822D}\x{822F}-\x{83B4}\x{83B6}-\x{841F}' .
-'\x{8421}-\x{86CC}\x{86CE}-\x{874A}\x{874C}-\x{877E}\x{8780}-\x{8A32}\x{8A34}-\x{8B71}\x{8B73}-\x{8B8E}' .
-'\x{8B90}-\x{8DE4}\x{8DE6}-\x{8E9A}\x{8E9C}-\x{8EE1}\x{8EE4}-\x{8F0B}\x{8F0D}-\x{8FB9}\x{8FBB}-\x{9038}' .
-'\x{903A}-\x{9196}\x{9198}-\x{91A3}\x{91A5}-\x{91B7}\x{91B9}-\x{91C7}\x{91C9}-\x{91E0}\x{91E2}-\x{91FB}' .
-'\x{91FD}-\x{922B}\x{922D}-\x{9270}\x{9272}-\x{9420}\x{9422}-\x{9664}\x{9666}-\x{9679}\x{967B}-\x{9770}' .
-'\x{9772}-\x{982B}\x{982D}-\x{98ED}\x{98EF}-\x{99C4}\x{99C6}-\x{9A11}\x{9A14}-\x{9A27}\x{9A29}-\x{9D0D}' .
-'\x{9D0F}-\x{9D2B}\x{9D2D}-\x{9D8E}\x{9D90}-\x{9DC5}\x{9DC7}-\x{9E77}\x{9E79}-\x{9EB8}\x{9EBB}-\x{9F20}' .
-'\x{9F22}-\x{9F61}\x{9F63}-\x{9FA5}\x{FA28}]{1,20}$/iu',
-    6 => '/^[\x{002d}0-9A-Za-z]{1,63}$/iu',
-    7 => '/^[\x{00A1}-\x{00FF}]{1,63}$/iu',
-    8 => '/^[\x{0100}-\x{017f}]{1,63}$/iu',
-    9 => '/^[\x{0180}-\x{024f}]{1,63}$/iu',
-    10 => '/^[\x{0250}-\x{02af}]{1,63}$/iu',
-    11 => '/^[\x{02b0}-\x{02ff}]{1,63}$/iu',
-    12 => '/^[\x{0300}-\x{036f}]{1,63}$/iu',
-    13 => '/^[\x{0370}-\x{03ff}]{1,63}$/iu',
-    14 => '/^[\x{0400}-\x{04ff}]{1,63}$/iu',
-    15 => '/^[\x{0500}-\x{052f}]{1,63}$/iu',
-    16 => '/^[\x{0530}-\x{058F}]{1,63}$/iu',
-    17 => '/^[\x{0590}-\x{05FF}]{1,63}$/iu',
-    18 => '/^[\x{0600}-\x{06FF}]{1,63}$/iu',
-    19 => '/^[\x{0700}-\x{074F}]{1,63}$/iu',
-    20 => '/^[\x{0780}-\x{07BF}]{1,63}$/iu',
-    21 => '/^[\x{0900}-\x{097F}]{1,63}$/iu',
-    22 => '/^[\x{0980}-\x{09FF}]{1,63}$/iu',
-    23 => '/^[\x{0A00}-\x{0A7F}]{1,63}$/iu',
-    24 => '/^[\x{0A80}-\x{0AFF}]{1,63}$/iu',
-    25 => '/^[\x{0B00}-\x{0B7F}]{1,63}$/iu',
-    26 => '/^[\x{0B80}-\x{0BFF}]{1,63}$/iu',
-    27 => '/^[\x{0C00}-\x{0C7F}]{1,63}$/iu',
-    28 => '/^[\x{0C80}-\x{0CFF}]{1,63}$/iu',
-    29 => '/^[\x{0D00}-\x{0D7F}]{1,63}$/iu',
-    30 => '/^[\x{0D80}-\x{0DFF}]{1,63}$/iu',
-    31 => '/^[\x{0E00}-\x{0E7F}]{1,63}$/iu',
-    32 => '/^[\x{0E80}-\x{0EFF}]{1,63}$/iu',
-    33 => '/^[\x{0F00}-\x{0FFF}]{1,63}$/iu',
-    34 => '/^[\x{1000}-\x{109F}]{1,63}$/iu',
-    35 => '/^[\x{10A0}-\x{10FF}]{1,63}$/iu',
-    36 => '/^[\x{1100}-\x{11FF}]{1,63}$/iu',
-    37 => '/^[\x{1200}-\x{137F}]{1,63}$/iu',
-    38 => '/^[\x{13A0}-\x{13FF}]{1,63}$/iu',
-    39 => '/^[\x{1400}-\x{167F}]{1,63}$/iu',
-    40 => '/^[\x{1680}-\x{169F}]{1,63}$/iu',
-    41 => '/^[\x{16A0}-\x{16FF}]{1,63}$/iu',
-    42 => '/^[\x{1700}-\x{171F}]{1,63}$/iu',
-    43 => '/^[\x{1720}-\x{173F}]{1,63}$/iu',
-    44 => '/^[\x{1740}-\x{175F}]{1,63}$/iu',
-    45 => '/^[\x{1760}-\x{177F}]{1,63}$/iu',
-    46 => '/^[\x{1780}-\x{17FF}]{1,63}$/iu',
-    47 => '/^[\x{1800}-\x{18AF}]{1,63}$/iu',
-    48 => '/^[\x{1E00}-\x{1EFF}]{1,63}$/iu',
-    49 => '/^[\x{1F00}-\x{1FFF}]{1,63}$/iu',
-    50 => '/^[\x{2070}-\x{209F}]{1,63}$/iu',
-    51 => '/^[\x{2100}-\x{214F}]{1,63}$/iu',
-    52 => '/^[\x{2150}-\x{218F}]{1,63}$/iu',
-    53 => '/^[\x{2460}-\x{24FF}]{1,63}$/iu',
-    54 => '/^[\x{2E80}-\x{2EFF}]{1,63}$/iu',
-    55 => '/^[\x{2F00}-\x{2FDF}]{1,63}$/iu',
-    56 => '/^[\x{2FF0}-\x{2FFF}]{1,63}$/iu',
-    57 => '/^[\x{3040}-\x{309F}]{1,63}$/iu',
-    58 => '/^[\x{30A0}-\x{30FF}]{1,63}$/iu',
-    59 => '/^[\x{3100}-\x{312F}]{1,63}$/iu',
-    60 => '/^[\x{3130}-\x{318F}]{1,63}$/iu',
-    61 => '/^[\x{3190}-\x{319F}]{1,63}$/iu',
-    62 => '/^[\x{31A0}-\x{31BF}]{1,63}$/iu',
-    63 => '/^[\x{31F0}-\x{31FF}]{1,63}$/iu',
-    64 => '/^[\x{3200}-\x{32FF}]{1,63}$/iu',
-    65 => '/^[\x{3300}-\x{33FF}]{1,63}$/iu',
-    66 => '/^[\x{3400}-\x{4DBF}]{1,63}$/iu',
-    67 => '/^[\x{4E00}-\x{9FFF}]{1,63}$/iu',
-    68 => '/^[\x{A000}-\x{A48F}]{1,63}$/iu',
-    69 => '/^[\x{A490}-\x{A4CF}]{1,63}$/iu',
-    70 => '/^[\x{AC00}-\x{D7AF}]{1,63}$/iu',
-    73 => '/^[\x{F900}-\x{FAFF}]{1,63}$/iu',
-    74 => '/^[\x{FB00}-\x{FB4F}]{1,63}$/iu',
-    75 => '/^[\x{FB50}-\x{FDFF}]{1,63}$/iu',
-    76 => '/^[\x{FE20}-\x{FE2F}]{1,63}$/iu',
-    77 => '/^[\x{FE70}-\x{FEFF}]{1,63}$/iu',
-    78 => '/^[\x{FF00}-\x{FFEF}]{1,63}$/iu',
-    79 => '/^[\x{20000}-\x{2A6DF}]{1,63}$/iu',
-    80 => '/^[\x{2F800}-\x{2FA1F}]{1,63}$/iu',
-);
diff --git a/civicrm/vendor/zendframework/zend-validator/src/Hostname/Jp.php b/civicrm/vendor/zendframework/zend-validator/src/Hostname/Jp.php
deleted file mode 100644
index e0d871e5eec5de77c5c18ed223756ae8df267746..0000000000000000000000000000000000000000
--- a/civicrm/vendor/zendframework/zend-validator/src/Hostname/Jp.php
+++ /dev/null
@@ -1,725 +0,0 @@
-<?php
-/**
- * Zend Framework (http://framework.zend.com/)
- *
- * @link      http://github.com/zendframework/zf2 for the canonical source repository
- * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
- * @license   http://framework.zend.com/license/new-bsd New BSD License
- */
-
-namespace Zend\Validator\Hostname;
-
-/**
- * Resource file for japanese idn validation
- */
-return array(
-    1  => '/^[\x{002d}0-9a-z\x{3005}-\x{3007}\x{3041}-\x{3093}\x{309D}\x{309E}' .
-          '\x{30A1}-\x{30F6}\x{30FC}' .
-          '\x{30FD}\x{30FE}\x{4E00}\x{4E01}\x{4E03}\x{4E07}\x{4E08}\x{4E09}\x{4E0A}' .
-          '\x{4E0B}\x{4E0D}\x{4E0E}\x{4E10}\x{4E11}\x{4E14}\x{4E15}\x{4E16}\x{4E17}' .
-          '\x{4E18}\x{4E19}\x{4E1E}\x{4E21}\x{4E26}\x{4E2A}\x{4E2D}\x{4E31}\x{4E32}' .
-          '\x{4E36}\x{4E38}\x{4E39}\x{4E3B}\x{4E3C}\x{4E3F}\x{4E42}\x{4E43}\x{4E45}' .
-          '\x{4E4B}\x{4E4D}\x{4E4E}\x{4E4F}\x{4E55}\x{4E56}\x{4E57}\x{4E58}\x{4E59}' .
-          '\x{4E5D}\x{4E5E}\x{4E5F}\x{4E62}\x{4E71}\x{4E73}\x{4E7E}\x{4E80}\x{4E82}' .
-          '\x{4E85}\x{4E86}\x{4E88}\x{4E89}\x{4E8A}\x{4E8B}\x{4E8C}\x{4E8E}\x{4E91}' .
-          '\x{4E92}\x{4E94}\x{4E95}\x{4E98}\x{4E99}\x{4E9B}\x{4E9C}\x{4E9E}\x{4E9F}' .
-          '\x{4EA0}\x{4EA1}\x{4EA2}\x{4EA4}\x{4EA5}\x{4EA6}\x{4EA8}\x{4EAB}\x{4EAC}' .
-          '\x{4EAD}\x{4EAE}\x{4EB0}\x{4EB3}\x{4EB6}\x{4EBA}\x{4EC0}\x{4EC1}\x{4EC2}' .
-          '\x{4EC4}\x{4EC6}\x{4EC7}\x{4ECA}\x{4ECB}\x{4ECD}\x{4ECE}\x{4ECF}\x{4ED4}' .
-          '\x{4ED5}\x{4ED6}\x{4ED7}\x{4ED8}\x{4ED9}\x{4EDD}\x{4EDE}\x{4EDF}\x{4EE3}' .
-          '\x{4EE4}\x{4EE5}\x{4EED}\x{4EEE}\x{4EF0}\x{4EF2}\x{4EF6}\x{4EF7}\x{4EFB}' .
-          '\x{4F01}\x{4F09}\x{4F0A}\x{4F0D}\x{4F0E}\x{4F0F}\x{4F10}\x{4F11}\x{4F1A}' .
-          '\x{4F1C}\x{4F1D}\x{4F2F}\x{4F30}\x{4F34}\x{4F36}\x{4F38}\x{4F3A}\x{4F3C}' .
-          '\x{4F3D}\x{4F43}\x{4F46}\x{4F47}\x{4F4D}\x{4F4E}\x{4F4F}\x{4F50}\x{4F51}' .
-          '\x{4F53}\x{4F55}\x{4F57}\x{4F59}\x{4F5A}\x{4F5B}\x{4F5C}\x{4F5D}\x{4F5E}' .
-          '\x{4F69}\x{4F6F}\x{4F70}\x{4F73}\x{4F75}\x{4F76}\x{4F7B}\x{4F7C}\x{4F7F}' .
-          '\x{4F83}\x{4F86}\x{4F88}\x{4F8B}\x{4F8D}\x{4F8F}\x{4F91}\x{4F96}\x{4F98}' .
-          '\x{4F9B}\x{4F9D}\x{4FA0}\x{4FA1}\x{4FAB}\x{4FAD}\x{4FAE}\x{4FAF}\x{4FB5}' .
-          '\x{4FB6}\x{4FBF}\x{4FC2}\x{4FC3}\x{4FC4}\x{4FCA}\x{4FCE}\x{4FD0}\x{4FD1}' .
-          '\x{4FD4}\x{4FD7}\x{4FD8}\x{4FDA}\x{4FDB}\x{4FDD}\x{4FDF}\x{4FE1}\x{4FE3}' .
-          '\x{4FE4}\x{4FE5}\x{4FEE}\x{4FEF}\x{4FF3}\x{4FF5}\x{4FF6}\x{4FF8}\x{4FFA}' .
-          '\x{4FFE}\x{5005}\x{5006}\x{5009}\x{500B}\x{500D}\x{500F}\x{5011}\x{5012}' .
-          '\x{5014}\x{5016}\x{5019}\x{501A}\x{501F}\x{5021}\x{5023}\x{5024}\x{5025}' .
-          '\x{5026}\x{5028}\x{5029}\x{502A}\x{502B}\x{502C}\x{502D}\x{5036}\x{5039}' .
-          '\x{5043}\x{5047}\x{5048}\x{5049}\x{504F}\x{5050}\x{5055}\x{5056}\x{505A}' .
-          '\x{505C}\x{5065}\x{506C}\x{5072}\x{5074}\x{5075}\x{5076}\x{5078}\x{507D}' .
-          '\x{5080}\x{5085}\x{508D}\x{5091}\x{5098}\x{5099}\x{509A}\x{50AC}\x{50AD}' .
-          '\x{50B2}\x{50B3}\x{50B4}\x{50B5}\x{50B7}\x{50BE}\x{50C2}\x{50C5}\x{50C9}' .
-          '\x{50CA}\x{50CD}\x{50CF}\x{50D1}\x{50D5}\x{50D6}\x{50DA}\x{50DE}\x{50E3}' .
-          '\x{50E5}\x{50E7}\x{50ED}\x{50EE}\x{50F5}\x{50F9}\x{50FB}\x{5100}\x{5101}' .
-          '\x{5102}\x{5104}\x{5109}\x{5112}\x{5114}\x{5115}\x{5116}\x{5118}\x{511A}' .
-          '\x{511F}\x{5121}\x{512A}\x{5132}\x{5137}\x{513A}\x{513B}\x{513C}\x{513F}' .
-          '\x{5140}\x{5141}\x{5143}\x{5144}\x{5145}\x{5146}\x{5147}\x{5148}\x{5149}' .
-          '\x{514B}\x{514C}\x{514D}\x{514E}\x{5150}\x{5152}\x{5154}\x{515A}\x{515C}' .
-          '\x{5162}\x{5165}\x{5168}\x{5169}\x{516A}\x{516B}\x{516C}\x{516D}\x{516E}' .
-          '\x{5171}\x{5175}\x{5176}\x{5177}\x{5178}\x{517C}\x{5180}\x{5182}\x{5185}' .
-          '\x{5186}\x{5189}\x{518A}\x{518C}\x{518D}\x{518F}\x{5190}\x{5191}\x{5192}' .
-          '\x{5193}\x{5195}\x{5196}\x{5197}\x{5199}\x{51A0}\x{51A2}\x{51A4}\x{51A5}' .
-          '\x{51A6}\x{51A8}\x{51A9}\x{51AA}\x{51AB}\x{51AC}\x{51B0}\x{51B1}\x{51B2}' .
-          '\x{51B3}\x{51B4}\x{51B5}\x{51B6}\x{51B7}\x{51BD}\x{51C4}\x{51C5}\x{51C6}' .
-          '\x{51C9}\x{51CB}\x{51CC}\x{51CD}\x{51D6}\x{51DB}\x{51DC}\x{51DD}\x{51E0}' .
-          '\x{51E1}\x{51E6}\x{51E7}\x{51E9}\x{51EA}\x{51ED}\x{51F0}\x{51F1}\x{51F5}' .
-          '\x{51F6}\x{51F8}\x{51F9}\x{51FA}\x{51FD}\x{51FE}\x{5200}\x{5203}\x{5204}' .
-          '\x{5206}\x{5207}\x{5208}\x{520A}\x{520B}\x{520E}\x{5211}\x{5214}\x{5217}' .
-          '\x{521D}\x{5224}\x{5225}\x{5227}\x{5229}\x{522A}\x{522E}\x{5230}\x{5233}' .
-          '\x{5236}\x{5237}\x{5238}\x{5239}\x{523A}\x{523B}\x{5243}\x{5244}\x{5247}' .
-          '\x{524A}\x{524B}\x{524C}\x{524D}\x{524F}\x{5254}\x{5256}\x{525B}\x{525E}' .
-          '\x{5263}\x{5264}\x{5265}\x{5269}\x{526A}\x{526F}\x{5270}\x{5271}\x{5272}' .
-          '\x{5273}\x{5274}\x{5275}\x{527D}\x{527F}\x{5283}\x{5287}\x{5288}\x{5289}' .
-          '\x{528D}\x{5291}\x{5292}\x{5294}\x{529B}\x{529F}\x{52A0}\x{52A3}\x{52A9}' .
-          '\x{52AA}\x{52AB}\x{52AC}\x{52AD}\x{52B1}\x{52B4}\x{52B5}\x{52B9}\x{52BC}' .
-          '\x{52BE}\x{52C1}\x{52C3}\x{52C5}\x{52C7}\x{52C9}\x{52CD}\x{52D2}\x{52D5}' .
-          '\x{52D7}\x{52D8}\x{52D9}\x{52DD}\x{52DE}\x{52DF}\x{52E0}\x{52E2}\x{52E3}' .
-          '\x{52E4}\x{52E6}\x{52E7}\x{52F2}\x{52F3}\x{52F5}\x{52F8}\x{52F9}\x{52FA}' .
-          '\x{52FE}\x{52FF}\x{5301}\x{5302}\x{5305}\x{5306}\x{5308}\x{530D}\x{530F}' .
-          '\x{5310}\x{5315}\x{5316}\x{5317}\x{5319}\x{531A}\x{531D}\x{5320}\x{5321}' .
-          '\x{5323}\x{532A}\x{532F}\x{5331}\x{5333}\x{5338}\x{5339}\x{533A}\x{533B}' .
-          '\x{533F}\x{5340}\x{5341}\x{5343}\x{5345}\x{5346}\x{5347}\x{5348}\x{5349}' .
-          '\x{534A}\x{534D}\x{5351}\x{5352}\x{5353}\x{5354}\x{5357}\x{5358}\x{535A}' .
-          '\x{535C}\x{535E}\x{5360}\x{5366}\x{5369}\x{536E}\x{536F}\x{5370}\x{5371}' .
-          '\x{5373}\x{5374}\x{5375}\x{5377}\x{5378}\x{537B}\x{537F}\x{5382}\x{5384}' .
-          '\x{5396}\x{5398}\x{539A}\x{539F}\x{53A0}\x{53A5}\x{53A6}\x{53A8}\x{53A9}' .
-          '\x{53AD}\x{53AE}\x{53B0}\x{53B3}\x{53B6}\x{53BB}\x{53C2}\x{53C3}\x{53C8}' .
-          '\x{53C9}\x{53CA}\x{53CB}\x{53CC}\x{53CD}\x{53CE}\x{53D4}\x{53D6}\x{53D7}' .
-          '\x{53D9}\x{53DB}\x{53DF}\x{53E1}\x{53E2}\x{53E3}\x{53E4}\x{53E5}\x{53E8}' .
-          '\x{53E9}\x{53EA}\x{53EB}\x{53EC}\x{53ED}\x{53EE}\x{53EF}\x{53F0}\x{53F1}' .
-          '\x{53F2}\x{53F3}\x{53F6}\x{53F7}\x{53F8}\x{53FA}\x{5401}\x{5403}\x{5404}' .
-          '\x{5408}\x{5409}\x{540A}\x{540B}\x{540C}\x{540D}\x{540E}\x{540F}\x{5410}' .
-          '\x{5411}\x{541B}\x{541D}\x{541F}\x{5420}\x{5426}\x{5429}\x{542B}\x{542C}' .
-          '\x{542D}\x{542E}\x{5436}\x{5438}\x{5439}\x{543B}\x{543C}\x{543D}\x{543E}' .
-          '\x{5440}\x{5442}\x{5446}\x{5448}\x{5449}\x{544A}\x{544E}\x{5451}\x{545F}' .
-          '\x{5468}\x{546A}\x{5470}\x{5471}\x{5473}\x{5475}\x{5476}\x{5477}\x{547B}' .
-          '\x{547C}\x{547D}\x{5480}\x{5484}\x{5486}\x{548B}\x{548C}\x{548E}\x{548F}' .
-          '\x{5490}\x{5492}\x{54A2}\x{54A4}\x{54A5}\x{54A8}\x{54AB}\x{54AC}\x{54AF}' .
-          '\x{54B2}\x{54B3}\x{54B8}\x{54BC}\x{54BD}\x{54BE}\x{54C0}\x{54C1}\x{54C2}' .
-          '\x{54C4}\x{54C7}\x{54C8}\x{54C9}\x{54D8}\x{54E1}\x{54E2}\x{54E5}\x{54E6}' .
-          '\x{54E8}\x{54E9}\x{54ED}\x{54EE}\x{54F2}\x{54FA}\x{54FD}\x{5504}\x{5506}' .
-          '\x{5507}\x{550F}\x{5510}\x{5514}\x{5516}\x{552E}\x{552F}\x{5531}\x{5533}' .
-          '\x{5538}\x{5539}\x{553E}\x{5540}\x{5544}\x{5545}\x{5546}\x{554C}\x{554F}' .
-          '\x{5553}\x{5556}\x{5557}\x{555C}\x{555D}\x{5563}\x{557B}\x{557C}\x{557E}' .
-          '\x{5580}\x{5583}\x{5584}\x{5587}\x{5589}\x{558A}\x{558B}\x{5598}\x{5599}' .
-          '\x{559A}\x{559C}\x{559D}\x{559E}\x{559F}\x{55A7}\x{55A8}\x{55A9}\x{55AA}' .
-          '\x{55AB}\x{55AC}\x{55AE}\x{55B0}\x{55B6}\x{55C4}\x{55C5}\x{55C7}\x{55D4}' .
-          '\x{55DA}\x{55DC}\x{55DF}\x{55E3}\x{55E4}\x{55F7}\x{55F9}\x{55FD}\x{55FE}' .
-          '\x{5606}\x{5609}\x{5614}\x{5616}\x{5617}\x{5618}\x{561B}\x{5629}\x{562F}' .
-          '\x{5631}\x{5632}\x{5634}\x{5636}\x{5638}\x{5642}\x{564C}\x{564E}\x{5650}' .
-          '\x{565B}\x{5664}\x{5668}\x{566A}\x{566B}\x{566C}\x{5674}\x{5678}\x{567A}' .
-          '\x{5680}\x{5686}\x{5687}\x{568A}\x{568F}\x{5694}\x{56A0}\x{56A2}\x{56A5}' .
-          '\x{56AE}\x{56B4}\x{56B6}\x{56BC}\x{56C0}\x{56C1}\x{56C2}\x{56C3}\x{56C8}' .
-          '\x{56CE}\x{56D1}\x{56D3}\x{56D7}\x{56D8}\x{56DA}\x{56DB}\x{56DE}\x{56E0}' .
-          '\x{56E3}\x{56EE}\x{56F0}\x{56F2}\x{56F3}\x{56F9}\x{56FA}\x{56FD}\x{56FF}' .
-          '\x{5700}\x{5703}\x{5704}\x{5708}\x{5709}\x{570B}\x{570D}\x{570F}\x{5712}' .
-          '\x{5713}\x{5716}\x{5718}\x{571C}\x{571F}\x{5726}\x{5727}\x{5728}\x{572D}' .
-          '\x{5730}\x{5737}\x{5738}\x{573B}\x{5740}\x{5742}\x{5747}\x{574A}\x{574E}' .
-          '\x{574F}\x{5750}\x{5751}\x{5761}\x{5764}\x{5766}\x{5769}\x{576A}\x{577F}' .
-          '\x{5782}\x{5788}\x{5789}\x{578B}\x{5793}\x{57A0}\x{57A2}\x{57A3}\x{57A4}' .
-          '\x{57AA}\x{57B0}\x{57B3}\x{57C0}\x{57C3}\x{57C6}\x{57CB}\x{57CE}\x{57D2}' .
-          '\x{57D3}\x{57D4}\x{57D6}\x{57DC}\x{57DF}\x{57E0}\x{57E3}\x{57F4}\x{57F7}' .
-          '\x{57F9}\x{57FA}\x{57FC}\x{5800}\x{5802}\x{5805}\x{5806}\x{580A}\x{580B}' .
-          '\x{5815}\x{5819}\x{581D}\x{5821}\x{5824}\x{582A}\x{582F}\x{5830}\x{5831}' .
-          '\x{5834}\x{5835}\x{583A}\x{583D}\x{5840}\x{5841}\x{584A}\x{584B}\x{5851}' .
-          '\x{5852}\x{5854}\x{5857}\x{5858}\x{5859}\x{585A}\x{585E}\x{5862}\x{5869}' .
-          '\x{586B}\x{5870}\x{5872}\x{5875}\x{5879}\x{587E}\x{5883}\x{5885}\x{5893}' .
-          '\x{5897}\x{589C}\x{589F}\x{58A8}\x{58AB}\x{58AE}\x{58B3}\x{58B8}\x{58B9}' .
-          '\x{58BA}\x{58BB}\x{58BE}\x{58C1}\x{58C5}\x{58C7}\x{58CA}\x{58CC}\x{58D1}' .
-          '\x{58D3}\x{58D5}\x{58D7}\x{58D8}\x{58D9}\x{58DC}\x{58DE}\x{58DF}\x{58E4}' .
-          '\x{58E5}\x{58EB}\x{58EC}\x{58EE}\x{58EF}\x{58F0}\x{58F1}\x{58F2}\x{58F7}' .
-          '\x{58F9}\x{58FA}\x{58FB}\x{58FC}\x{58FD}\x{5902}\x{5909}\x{590A}\x{590F}' .
-          '\x{5910}\x{5915}\x{5916}\x{5918}\x{5919}\x{591A}\x{591B}\x{591C}\x{5922}' .
-          '\x{5925}\x{5927}\x{5929}\x{592A}\x{592B}\x{592C}\x{592D}\x{592E}\x{5931}' .
-          '\x{5932}\x{5937}\x{5938}\x{593E}\x{5944}\x{5947}\x{5948}\x{5949}\x{594E}' .
-          '\x{594F}\x{5950}\x{5951}\x{5954}\x{5955}\x{5957}\x{5958}\x{595A}\x{5960}' .
-          '\x{5962}\x{5965}\x{5967}\x{5968}\x{5969}\x{596A}\x{596C}\x{596E}\x{5973}' .
-          '\x{5974}\x{5978}\x{597D}\x{5981}\x{5982}\x{5983}\x{5984}\x{598A}\x{598D}' .
-          '\x{5993}\x{5996}\x{5999}\x{599B}\x{599D}\x{59A3}\x{59A5}\x{59A8}\x{59AC}' .
-          '\x{59B2}\x{59B9}\x{59BB}\x{59BE}\x{59C6}\x{59C9}\x{59CB}\x{59D0}\x{59D1}' .
-          '\x{59D3}\x{59D4}\x{59D9}\x{59DA}\x{59DC}\x{59E5}\x{59E6}\x{59E8}\x{59EA}' .
-          '\x{59EB}\x{59F6}\x{59FB}\x{59FF}\x{5A01}\x{5A03}\x{5A09}\x{5A11}\x{5A18}' .
-          '\x{5A1A}\x{5A1C}\x{5A1F}\x{5A20}\x{5A25}\x{5A29}\x{5A2F}\x{5A35}\x{5A36}' .
-          '\x{5A3C}\x{5A40}\x{5A41}\x{5A46}\x{5A49}\x{5A5A}\x{5A62}\x{5A66}\x{5A6A}' .
-          '\x{5A6C}\x{5A7F}\x{5A92}\x{5A9A}\x{5A9B}\x{5ABC}\x{5ABD}\x{5ABE}\x{5AC1}' .
-          '\x{5AC2}\x{5AC9}\x{5ACB}\x{5ACC}\x{5AD0}\x{5AD6}\x{5AD7}\x{5AE1}\x{5AE3}' .
-          '\x{5AE6}\x{5AE9}\x{5AFA}\x{5AFB}\x{5B09}\x{5B0B}\x{5B0C}\x{5B16}\x{5B22}' .
-          '\x{5B2A}\x{5B2C}\x{5B30}\x{5B32}\x{5B36}\x{5B3E}\x{5B40}\x{5B43}\x{5B45}' .
-          '\x{5B50}\x{5B51}\x{5B54}\x{5B55}\x{5B57}\x{5B58}\x{5B5A}\x{5B5B}\x{5B5C}' .
-          '\x{5B5D}\x{5B5F}\x{5B63}\x{5B64}\x{5B65}\x{5B66}\x{5B69}\x{5B6B}\x{5B70}' .
-          '\x{5B71}\x{5B73}\x{5B75}\x{5B78}\x{5B7A}\x{5B80}\x{5B83}\x{5B85}\x{5B87}' .
-          '\x{5B88}\x{5B89}\x{5B8B}\x{5B8C}\x{5B8D}\x{5B8F}\x{5B95}\x{5B97}\x{5B98}' .
-          '\x{5B99}\x{5B9A}\x{5B9B}\x{5B9C}\x{5B9D}\x{5B9F}\x{5BA2}\x{5BA3}\x{5BA4}' .
-          '\x{5BA5}\x{5BA6}\x{5BAE}\x{5BB0}\x{5BB3}\x{5BB4}\x{5BB5}\x{5BB6}\x{5BB8}' .
-          '\x{5BB9}\x{5BBF}\x{5BC2}\x{5BC3}\x{5BC4}\x{5BC5}\x{5BC6}\x{5BC7}\x{5BC9}' .
-          '\x{5BCC}\x{5BD0}\x{5BD2}\x{5BD3}\x{5BD4}\x{5BDB}\x{5BDD}\x{5BDE}\x{5BDF}' .
-          '\x{5BE1}\x{5BE2}\x{5BE4}\x{5BE5}\x{5BE6}\x{5BE7}\x{5BE8}\x{5BE9}\x{5BEB}' .
-          '\x{5BEE}\x{5BF0}\x{5BF3}\x{5BF5}\x{5BF6}\x{5BF8}\x{5BFA}\x{5BFE}\x{5BFF}' .
-          '\x{5C01}\x{5C02}\x{5C04}\x{5C05}\x{5C06}\x{5C07}\x{5C08}\x{5C09}\x{5C0A}' .
-          '\x{5C0B}\x{5C0D}\x{5C0E}\x{5C0F}\x{5C11}\x{5C13}\x{5C16}\x{5C1A}\x{5C20}' .
-          '\x{5C22}\x{5C24}\x{5C28}\x{5C2D}\x{5C31}\x{5C38}\x{5C39}\x{5C3A}\x{5C3B}' .
-          '\x{5C3C}\x{5C3D}\x{5C3E}\x{5C3F}\x{5C40}\x{5C41}\x{5C45}\x{5C46}\x{5C48}' .
-          '\x{5C4A}\x{5C4B}\x{5C4D}\x{5C4E}\x{5C4F}\x{5C50}\x{5C51}\x{5C53}\x{5C55}' .
-          '\x{5C5E}\x{5C60}\x{5C61}\x{5C64}\x{5C65}\x{5C6C}\x{5C6E}\x{5C6F}\x{5C71}' .
-          '\x{5C76}\x{5C79}\x{5C8C}\x{5C90}\x{5C91}\x{5C94}\x{5CA1}\x{5CA8}\x{5CA9}' .
-          '\x{5CAB}\x{5CAC}\x{5CB1}\x{5CB3}\x{5CB6}\x{5CB7}\x{5CB8}\x{5CBB}\x{5CBC}' .
-          '\x{5CBE}\x{5CC5}\x{5CC7}\x{5CD9}\x{5CE0}\x{5CE1}\x{5CE8}\x{5CE9}\x{5CEA}' .
-          '\x{5CED}\x{5CEF}\x{5CF0}\x{5CF6}\x{5CFA}\x{5CFB}\x{5CFD}\x{5D07}\x{5D0B}' .
-          '\x{5D0E}\x{5D11}\x{5D14}\x{5D15}\x{5D16}\x{5D17}\x{5D18}\x{5D19}\x{5D1A}' .
-          '\x{5D1B}\x{5D1F}\x{5D22}\x{5D29}\x{5D4B}\x{5D4C}\x{5D4E}\x{5D50}\x{5D52}' .
-          '\x{5D5C}\x{5D69}\x{5D6C}\x{5D6F}\x{5D73}\x{5D76}\x{5D82}\x{5D84}\x{5D87}' .
-          '\x{5D8B}\x{5D8C}\x{5D90}\x{5D9D}\x{5DA2}\x{5DAC}\x{5DAE}\x{5DB7}\x{5DBA}' .
-          '\x{5DBC}\x{5DBD}\x{5DC9}\x{5DCC}\x{5DCD}\x{5DD2}\x{5DD3}\x{5DD6}\x{5DDB}' .
-          '\x{5DDD}\x{5DDE}\x{5DE1}\x{5DE3}\x{5DE5}\x{5DE6}\x{5DE7}\x{5DE8}\x{5DEB}' .
-          '\x{5DEE}\x{5DF1}\x{5DF2}\x{5DF3}\x{5DF4}\x{5DF5}\x{5DF7}\x{5DFB}\x{5DFD}' .
-          '\x{5DFE}\x{5E02}\x{5E03}\x{5E06}\x{5E0B}\x{5E0C}\x{5E11}\x{5E16}\x{5E19}' .
-          '\x{5E1A}\x{5E1B}\x{5E1D}\x{5E25}\x{5E2B}\x{5E2D}\x{5E2F}\x{5E30}\x{5E33}' .
-          '\x{5E36}\x{5E37}\x{5E38}\x{5E3D}\x{5E40}\x{5E43}\x{5E44}\x{5E45}\x{5E47}' .
-          '\x{5E4C}\x{5E4E}\x{5E54}\x{5E55}\x{5E57}\x{5E5F}\x{5E61}\x{5E62}\x{5E63}' .
-          '\x{5E64}\x{5E72}\x{5E73}\x{5E74}\x{5E75}\x{5E76}\x{5E78}\x{5E79}\x{5E7A}' .
-          '\x{5E7B}\x{5E7C}\x{5E7D}\x{5E7E}\x{5E7F}\x{5E81}\x{5E83}\x{5E84}\x{5E87}' .
-          '\x{5E8A}\x{5E8F}\x{5E95}\x{5E96}\x{5E97}\x{5E9A}\x{5E9C}\x{5EA0}\x{5EA6}' .
-          '\x{5EA7}\x{5EAB}\x{5EAD}\x{5EB5}\x{5EB6}\x{5EB7}\x{5EB8}\x{5EC1}\x{5EC2}' .
-          '\x{5EC3}\x{5EC8}\x{5EC9}\x{5ECA}\x{5ECF}\x{5ED0}\x{5ED3}\x{5ED6}\x{5EDA}' .
-          '\x{5EDB}\x{5EDD}\x{5EDF}\x{5EE0}\x{5EE1}\x{5EE2}\x{5EE3}\x{5EE8}\x{5EE9}' .
-          '\x{5EEC}\x{5EF0}\x{5EF1}\x{5EF3}\x{5EF4}\x{5EF6}\x{5EF7}\x{5EF8}\x{5EFA}' .
-          '\x{5EFB}\x{5EFC}\x{5EFE}\x{5EFF}\x{5F01}\x{5F03}\x{5F04}\x{5F09}\x{5F0A}' .
-          '\x{5F0B}\x{5F0C}\x{5F0D}\x{5F0F}\x{5F10}\x{5F11}\x{5F13}\x{5F14}\x{5F15}' .
-          '\x{5F16}\x{5F17}\x{5F18}\x{5F1B}\x{5F1F}\x{5F25}\x{5F26}\x{5F27}\x{5F29}' .
-          '\x{5F2D}\x{5F2F}\x{5F31}\x{5F35}\x{5F37}\x{5F38}\x{5F3C}\x{5F3E}\x{5F41}' .
-          '\x{5F48}\x{5F4A}\x{5F4C}\x{5F4E}\x{5F51}\x{5F53}\x{5F56}\x{5F57}\x{5F59}' .
-          '\x{5F5C}\x{5F5D}\x{5F61}\x{5F62}\x{5F66}\x{5F69}\x{5F6A}\x{5F6B}\x{5F6C}' .
-          '\x{5F6D}\x{5F70}\x{5F71}\x{5F73}\x{5F77}\x{5F79}\x{5F7C}\x{5F7F}\x{5F80}' .
-          '\x{5F81}\x{5F82}\x{5F83}\x{5F84}\x{5F85}\x{5F87}\x{5F88}\x{5F8A}\x{5F8B}' .
-          '\x{5F8C}\x{5F90}\x{5F91}\x{5F92}\x{5F93}\x{5F97}\x{5F98}\x{5F99}\x{5F9E}' .
-          '\x{5FA0}\x{5FA1}\x{5FA8}\x{5FA9}\x{5FAA}\x{5FAD}\x{5FAE}\x{5FB3}\x{5FB4}' .
-          '\x{5FB9}\x{5FBC}\x{5FBD}\x{5FC3}\x{5FC5}\x{5FCC}\x{5FCD}\x{5FD6}\x{5FD7}' .
-          '\x{5FD8}\x{5FD9}\x{5FDC}\x{5FDD}\x{5FE0}\x{5FE4}\x{5FEB}\x{5FF0}\x{5FF1}' .
-          '\x{5FF5}\x{5FF8}\x{5FFB}\x{5FFD}\x{5FFF}\x{600E}\x{600F}\x{6010}\x{6012}' .
-          '\x{6015}\x{6016}\x{6019}\x{601B}\x{601C}\x{601D}\x{6020}\x{6021}\x{6025}' .
-          '\x{6026}\x{6027}\x{6028}\x{6029}\x{602A}\x{602B}\x{602F}\x{6031}\x{603A}' .
-          '\x{6041}\x{6042}\x{6043}\x{6046}\x{604A}\x{604B}\x{604D}\x{6050}\x{6052}' .
-          '\x{6055}\x{6059}\x{605A}\x{605F}\x{6060}\x{6062}\x{6063}\x{6064}\x{6065}' .
-          '\x{6068}\x{6069}\x{606A}\x{606B}\x{606C}\x{606D}\x{606F}\x{6070}\x{6075}' .
-          '\x{6077}\x{6081}\x{6083}\x{6084}\x{6089}\x{608B}\x{608C}\x{608D}\x{6092}' .
-          '\x{6094}\x{6096}\x{6097}\x{609A}\x{609B}\x{609F}\x{60A0}\x{60A3}\x{60A6}' .
-          '\x{60A7}\x{60A9}\x{60AA}\x{60B2}\x{60B3}\x{60B4}\x{60B5}\x{60B6}\x{60B8}' .
-          '\x{60BC}\x{60BD}\x{60C5}\x{60C6}\x{60C7}\x{60D1}\x{60D3}\x{60D8}\x{60DA}' .
-          '\x{60DC}\x{60DF}\x{60E0}\x{60E1}\x{60E3}\x{60E7}\x{60E8}\x{60F0}\x{60F1}' .
-          '\x{60F3}\x{60F4}\x{60F6}\x{60F7}\x{60F9}\x{60FA}\x{60FB}\x{6100}\x{6101}' .
-          '\x{6103}\x{6106}\x{6108}\x{6109}\x{610D}\x{610E}\x{610F}\x{6115}\x{611A}' .
-          '\x{611B}\x{611F}\x{6121}\x{6127}\x{6128}\x{612C}\x{6134}\x{613C}\x{613D}' .
-          '\x{613E}\x{613F}\x{6142}\x{6144}\x{6147}\x{6148}\x{614A}\x{614B}\x{614C}' .
-          '\x{614D}\x{614E}\x{6153}\x{6155}\x{6158}\x{6159}\x{615A}\x{615D}\x{615F}' .
-          '\x{6162}\x{6163}\x{6165}\x{6167}\x{6168}\x{616B}\x{616E}\x{616F}\x{6170}' .
-          '\x{6171}\x{6173}\x{6174}\x{6175}\x{6176}\x{6177}\x{617E}\x{6182}\x{6187}' .
-          '\x{618A}\x{618E}\x{6190}\x{6191}\x{6194}\x{6196}\x{6199}\x{619A}\x{61A4}' .
-          '\x{61A7}\x{61A9}\x{61AB}\x{61AC}\x{61AE}\x{61B2}\x{61B6}\x{61BA}\x{61BE}' .
-          '\x{61C3}\x{61C6}\x{61C7}\x{61C8}\x{61C9}\x{61CA}\x{61CB}\x{61CC}\x{61CD}' .
-          '\x{61D0}\x{61E3}\x{61E6}\x{61F2}\x{61F4}\x{61F6}\x{61F7}\x{61F8}\x{61FA}' .
-          '\x{61FC}\x{61FD}\x{61FE}\x{61FF}\x{6200}\x{6208}\x{6209}\x{620A}\x{620C}' .
-          '\x{620D}\x{620E}\x{6210}\x{6211}\x{6212}\x{6214}\x{6216}\x{621A}\x{621B}' .
-          '\x{621D}\x{621E}\x{621F}\x{6221}\x{6226}\x{622A}\x{622E}\x{622F}\x{6230}' .
-          '\x{6232}\x{6233}\x{6234}\x{6238}\x{623B}\x{623F}\x{6240}\x{6241}\x{6247}' .
-          '\x{6248}\x{6249}\x{624B}\x{624D}\x{624E}\x{6253}\x{6255}\x{6258}\x{625B}' .
-          '\x{625E}\x{6260}\x{6263}\x{6268}\x{626E}\x{6271}\x{6276}\x{6279}\x{627C}' .
-          '\x{627E}\x{627F}\x{6280}\x{6282}\x{6283}\x{6284}\x{6289}\x{628A}\x{6291}' .
-          '\x{6292}\x{6293}\x{6294}\x{6295}\x{6296}\x{6297}\x{6298}\x{629B}\x{629C}' .
-          '\x{629E}\x{62AB}\x{62AC}\x{62B1}\x{62B5}\x{62B9}\x{62BB}\x{62BC}\x{62BD}' .
-          '\x{62C2}\x{62C5}\x{62C6}\x{62C7}\x{62C8}\x{62C9}\x{62CA}\x{62CC}\x{62CD}' .
-          '\x{62CF}\x{62D0}\x{62D1}\x{62D2}\x{62D3}\x{62D4}\x{62D7}\x{62D8}\x{62D9}' .
-          '\x{62DB}\x{62DC}\x{62DD}\x{62E0}\x{62E1}\x{62EC}\x{62ED}\x{62EE}\x{62EF}' .
-          '\x{62F1}\x{62F3}\x{62F5}\x{62F6}\x{62F7}\x{62FE}\x{62FF}\x{6301}\x{6302}' .
-          '\x{6307}\x{6308}\x{6309}\x{630C}\x{6311}\x{6319}\x{631F}\x{6327}\x{6328}' .
-          '\x{632B}\x{632F}\x{633A}\x{633D}\x{633E}\x{633F}\x{6349}\x{634C}\x{634D}' .
-          '\x{634F}\x{6350}\x{6355}\x{6357}\x{635C}\x{6367}\x{6368}\x{6369}\x{636B}' .
-          '\x{636E}\x{6372}\x{6376}\x{6377}\x{637A}\x{637B}\x{6380}\x{6383}\x{6388}' .
-          '\x{6389}\x{638C}\x{638E}\x{638F}\x{6392}\x{6396}\x{6398}\x{639B}\x{639F}' .
-          '\x{63A0}\x{63A1}\x{63A2}\x{63A3}\x{63A5}\x{63A7}\x{63A8}\x{63A9}\x{63AA}' .
-          '\x{63AB}\x{63AC}\x{63B2}\x{63B4}\x{63B5}\x{63BB}\x{63BE}\x{63C0}\x{63C3}' .
-          '\x{63C4}\x{63C6}\x{63C9}\x{63CF}\x{63D0}\x{63D2}\x{63D6}\x{63DA}\x{63DB}' .
-          '\x{63E1}\x{63E3}\x{63E9}\x{63EE}\x{63F4}\x{63F6}\x{63FA}\x{6406}\x{640D}' .
-          '\x{640F}\x{6413}\x{6416}\x{6417}\x{641C}\x{6426}\x{6428}\x{642C}\x{642D}' .
-          '\x{6434}\x{6436}\x{643A}\x{643E}\x{6442}\x{644E}\x{6458}\x{6467}\x{6469}' .
-          '\x{646F}\x{6476}\x{6478}\x{647A}\x{6483}\x{6488}\x{6492}\x{6493}\x{6495}' .
-          '\x{649A}\x{649E}\x{64A4}\x{64A5}\x{64A9}\x{64AB}\x{64AD}\x{64AE}\x{64B0}' .
-          '\x{64B2}\x{64B9}\x{64BB}\x{64BC}\x{64C1}\x{64C2}\x{64C5}\x{64C7}\x{64CD}' .
-          '\x{64D2}\x{64D4}\x{64D8}\x{64DA}\x{64E0}\x{64E1}\x{64E2}\x{64E3}\x{64E6}' .
-          '\x{64E7}\x{64EC}\x{64EF}\x{64F1}\x{64F2}\x{64F4}\x{64F6}\x{64FA}\x{64FD}' .
-          '\x{64FE}\x{6500}\x{6505}\x{6518}\x{651C}\x{651D}\x{6523}\x{6524}\x{652A}' .
-          '\x{652B}\x{652C}\x{652F}\x{6534}\x{6535}\x{6536}\x{6537}\x{6538}\x{6539}' .
-          '\x{653B}\x{653E}\x{653F}\x{6545}\x{6548}\x{654D}\x{654F}\x{6551}\x{6555}' .
-          '\x{6556}\x{6557}\x{6558}\x{6559}\x{655D}\x{655E}\x{6562}\x{6563}\x{6566}' .
-          '\x{656C}\x{6570}\x{6572}\x{6574}\x{6575}\x{6577}\x{6578}\x{6582}\x{6583}' .
-          '\x{6587}\x{6588}\x{6589}\x{658C}\x{658E}\x{6590}\x{6591}\x{6597}\x{6599}' .
-          '\x{659B}\x{659C}\x{659F}\x{65A1}\x{65A4}\x{65A5}\x{65A7}\x{65AB}\x{65AC}' .
-          '\x{65AD}\x{65AF}\x{65B0}\x{65B7}\x{65B9}\x{65BC}\x{65BD}\x{65C1}\x{65C3}' .
-          '\x{65C4}\x{65C5}\x{65C6}\x{65CB}\x{65CC}\x{65CF}\x{65D2}\x{65D7}\x{65D9}' .
-          '\x{65DB}\x{65E0}\x{65E1}\x{65E2}\x{65E5}\x{65E6}\x{65E7}\x{65E8}\x{65E9}' .
-          '\x{65EC}\x{65ED}\x{65F1}\x{65FA}\x{65FB}\x{6602}\x{6603}\x{6606}\x{6607}' .
-          '\x{660A}\x{660C}\x{660E}\x{660F}\x{6613}\x{6614}\x{661C}\x{661F}\x{6620}' .
-          '\x{6625}\x{6627}\x{6628}\x{662D}\x{662F}\x{6634}\x{6635}\x{6636}\x{663C}' .
-          '\x{663F}\x{6641}\x{6642}\x{6643}\x{6644}\x{6649}\x{664B}\x{664F}\x{6652}' .
-          '\x{665D}\x{665E}\x{665F}\x{6662}\x{6664}\x{6666}\x{6667}\x{6668}\x{6669}' .
-          '\x{666E}\x{666F}\x{6670}\x{6674}\x{6676}\x{667A}\x{6681}\x{6683}\x{6684}' .
-          '\x{6687}\x{6688}\x{6689}\x{668E}\x{6691}\x{6696}\x{6697}\x{6698}\x{669D}' .
-          '\x{66A2}\x{66A6}\x{66AB}\x{66AE}\x{66B4}\x{66B8}\x{66B9}\x{66BC}\x{66BE}' .
-          '\x{66C1}\x{66C4}\x{66C7}\x{66C9}\x{66D6}\x{66D9}\x{66DA}\x{66DC}\x{66DD}' .
-          '\x{66E0}\x{66E6}\x{66E9}\x{66F0}\x{66F2}\x{66F3}\x{66F4}\x{66F5}\x{66F7}' .
-          '\x{66F8}\x{66F9}\x{66FC}\x{66FD}\x{66FE}\x{66FF}\x{6700}\x{6703}\x{6708}' .
-          '\x{6709}\x{670B}\x{670D}\x{670F}\x{6714}\x{6715}\x{6716}\x{6717}\x{671B}' .
-          '\x{671D}\x{671E}\x{671F}\x{6726}\x{6727}\x{6728}\x{672A}\x{672B}\x{672C}' .
-          '\x{672D}\x{672E}\x{6731}\x{6734}\x{6736}\x{6737}\x{6738}\x{673A}\x{673D}' .
-          '\x{673F}\x{6741}\x{6746}\x{6749}\x{674E}\x{674F}\x{6750}\x{6751}\x{6753}' .
-          '\x{6756}\x{6759}\x{675C}\x{675E}\x{675F}\x{6760}\x{6761}\x{6762}\x{6763}' .
-          '\x{6764}\x{6765}\x{676A}\x{676D}\x{676F}\x{6770}\x{6771}\x{6772}\x{6773}' .
-          '\x{6775}\x{6777}\x{677C}\x{677E}\x{677F}\x{6785}\x{6787}\x{6789}\x{678B}' .
-          '\x{678C}\x{6790}\x{6795}\x{6797}\x{679A}\x{679C}\x{679D}\x{67A0}\x{67A1}' .
-          '\x{67A2}\x{67A6}\x{67A9}\x{67AF}\x{67B3}\x{67B4}\x{67B6}\x{67B7}\x{67B8}' .
-          '\x{67B9}\x{67C1}\x{67C4}\x{67C6}\x{67CA}\x{67CE}\x{67CF}\x{67D0}\x{67D1}' .
-          '\x{67D3}\x{67D4}\x{67D8}\x{67DA}\x{67DD}\x{67DE}\x{67E2}\x{67E4}\x{67E7}' .
-          '\x{67E9}\x{67EC}\x{67EE}\x{67EF}\x{67F1}\x{67F3}\x{67F4}\x{67F5}\x{67FB}' .
-          '\x{67FE}\x{67FF}\x{6802}\x{6803}\x{6804}\x{6813}\x{6816}\x{6817}\x{681E}' .
-          '\x{6821}\x{6822}\x{6829}\x{682A}\x{682B}\x{6832}\x{6834}\x{6838}\x{6839}' .
-          '\x{683C}\x{683D}\x{6840}\x{6841}\x{6842}\x{6843}\x{6846}\x{6848}\x{684D}' .
-          '\x{684E}\x{6850}\x{6851}\x{6853}\x{6854}\x{6859}\x{685C}\x{685D}\x{685F}' .
-          '\x{6863}\x{6867}\x{6874}\x{6876}\x{6877}\x{687E}\x{687F}\x{6881}\x{6883}' .
-          '\x{6885}\x{688D}\x{688F}\x{6893}\x{6894}\x{6897}\x{689B}\x{689D}\x{689F}' .
-          '\x{68A0}\x{68A2}\x{68A6}\x{68A7}\x{68A8}\x{68AD}\x{68AF}\x{68B0}\x{68B1}' .
-          '\x{68B3}\x{68B5}\x{68B6}\x{68B9}\x{68BA}\x{68BC}\x{68C4}\x{68C6}\x{68C9}' .
-          '\x{68CA}\x{68CB}\x{68CD}\x{68D2}\x{68D4}\x{68D5}\x{68D7}\x{68D8}\x{68DA}' .
-          '\x{68DF}\x{68E0}\x{68E1}\x{68E3}\x{68E7}\x{68EE}\x{68EF}\x{68F2}\x{68F9}' .
-          '\x{68FA}\x{6900}\x{6901}\x{6904}\x{6905}\x{6908}\x{690B}\x{690C}\x{690D}' .
-          '\x{690E}\x{690F}\x{6912}\x{6919}\x{691A}\x{691B}\x{691C}\x{6921}\x{6922}' .
-          '\x{6923}\x{6925}\x{6926}\x{6928}\x{692A}\x{6930}\x{6934}\x{6936}\x{6939}' .
-          '\x{693D}\x{693F}\x{694A}\x{6953}\x{6954}\x{6955}\x{6959}\x{695A}\x{695C}' .
-          '\x{695D}\x{695E}\x{6960}\x{6961}\x{6962}\x{696A}\x{696B}\x{696D}\x{696E}' .
-          '\x{696F}\x{6973}\x{6974}\x{6975}\x{6977}\x{6978}\x{6979}\x{697C}\x{697D}' .
-          '\x{697E}\x{6981}\x{6982}\x{698A}\x{698E}\x{6991}\x{6994}\x{6995}\x{699B}' .
-          '\x{699C}\x{69A0}\x{69A7}\x{69AE}\x{69B1}\x{69B2}\x{69B4}\x{69BB}\x{69BE}' .
-          '\x{69BF}\x{69C1}\x{69C3}\x{69C7}\x{69CA}\x{69CB}\x{69CC}\x{69CD}\x{69CE}' .
-          '\x{69D0}\x{69D3}\x{69D8}\x{69D9}\x{69DD}\x{69DE}\x{69E7}\x{69E8}\x{69EB}' .
-          '\x{69ED}\x{69F2}\x{69F9}\x{69FB}\x{69FD}\x{69FF}\x{6A02}\x{6A05}\x{6A0A}' .
-          '\x{6A0B}\x{6A0C}\x{6A12}\x{6A13}\x{6A14}\x{6A17}\x{6A19}\x{6A1B}\x{6A1E}' .
-          '\x{6A1F}\x{6A21}\x{6A22}\x{6A23}\x{6A29}\x{6A2A}\x{6A2B}\x{6A2E}\x{6A35}' .
-          '\x{6A36}\x{6A38}\x{6A39}\x{6A3A}\x{6A3D}\x{6A44}\x{6A47}\x{6A48}\x{6A4B}' .
-          '\x{6A58}\x{6A59}\x{6A5F}\x{6A61}\x{6A62}\x{6A66}\x{6A72}\x{6A78}\x{6A7F}' .
-          '\x{6A80}\x{6A84}\x{6A8D}\x{6A8E}\x{6A90}\x{6A97}\x{6A9C}\x{6AA0}\x{6AA2}' .
-          '\x{6AA3}\x{6AAA}\x{6AAC}\x{6AAE}\x{6AB3}\x{6AB8}\x{6ABB}\x{6AC1}\x{6AC2}' .
-          '\x{6AC3}\x{6AD1}\x{6AD3}\x{6ADA}\x{6ADB}\x{6ADE}\x{6ADF}\x{6AE8}\x{6AEA}' .
-          '\x{6AFA}\x{6AFB}\x{6B04}\x{6B05}\x{6B0A}\x{6B12}\x{6B16}\x{6B1D}\x{6B1F}' .
-          '\x{6B20}\x{6B21}\x{6B23}\x{6B27}\x{6B32}\x{6B37}\x{6B38}\x{6B39}\x{6B3A}' .
-          '\x{6B3D}\x{6B3E}\x{6B43}\x{6B47}\x{6B49}\x{6B4C}\x{6B4E}\x{6B50}\x{6B53}' .
-          '\x{6B54}\x{6B59}\x{6B5B}\x{6B5F}\x{6B61}\x{6B62}\x{6B63}\x{6B64}\x{6B66}' .
-          '\x{6B69}\x{6B6A}\x{6B6F}\x{6B73}\x{6B74}\x{6B78}\x{6B79}\x{6B7B}\x{6B7F}' .
-          '\x{6B80}\x{6B83}\x{6B84}\x{6B86}\x{6B89}\x{6B8A}\x{6B8B}\x{6B8D}\x{6B95}' .
-          '\x{6B96}\x{6B98}\x{6B9E}\x{6BA4}\x{6BAA}\x{6BAB}\x{6BAF}\x{6BB1}\x{6BB2}' .
-          '\x{6BB3}\x{6BB4}\x{6BB5}\x{6BB7}\x{6BBA}\x{6BBB}\x{6BBC}\x{6BBF}\x{6BC0}' .
-          '\x{6BC5}\x{6BC6}\x{6BCB}\x{6BCD}\x{6BCE}\x{6BD2}\x{6BD3}\x{6BD4}\x{6BD8}' .
-          '\x{6BDB}\x{6BDF}\x{6BEB}\x{6BEC}\x{6BEF}\x{6BF3}\x{6C08}\x{6C0F}\x{6C11}' .
-          '\x{6C13}\x{6C14}\x{6C17}\x{6C1B}\x{6C23}\x{6C24}\x{6C34}\x{6C37}\x{6C38}' .
-          '\x{6C3E}\x{6C40}\x{6C41}\x{6C42}\x{6C4E}\x{6C50}\x{6C55}\x{6C57}\x{6C5A}' .
-          '\x{6C5D}\x{6C5E}\x{6C5F}\x{6C60}\x{6C62}\x{6C68}\x{6C6A}\x{6C70}\x{6C72}' .
-          '\x{6C73}\x{6C7A}\x{6C7D}\x{6C7E}\x{6C81}\x{6C82}\x{6C83}\x{6C88}\x{6C8C}' .
-          '\x{6C8D}\x{6C90}\x{6C92}\x{6C93}\x{6C96}\x{6C99}\x{6C9A}\x{6C9B}\x{6CA1}' .
-          '\x{6CA2}\x{6CAB}\x{6CAE}\x{6CB1}\x{6CB3}\x{6CB8}\x{6CB9}\x{6CBA}\x{6CBB}' .
-          '\x{6CBC}\x{6CBD}\x{6CBE}\x{6CBF}\x{6CC1}\x{6CC4}\x{6CC5}\x{6CC9}\x{6CCA}' .
-          '\x{6CCC}\x{6CD3}\x{6CD5}\x{6CD7}\x{6CD9}\x{6CDB}\x{6CDD}\x{6CE1}\x{6CE2}' .
-          '\x{6CE3}\x{6CE5}\x{6CE8}\x{6CEA}\x{6CEF}\x{6CF0}\x{6CF1}\x{6CF3}\x{6D0B}' .
-          '\x{6D0C}\x{6D12}\x{6D17}\x{6D19}\x{6D1B}\x{6D1E}\x{6D1F}\x{6D25}\x{6D29}' .
-          '\x{6D2A}\x{6D2B}\x{6D32}\x{6D33}\x{6D35}\x{6D36}\x{6D38}\x{6D3B}\x{6D3D}' .
-          '\x{6D3E}\x{6D41}\x{6D44}\x{6D45}\x{6D59}\x{6D5A}\x{6D5C}\x{6D63}\x{6D64}' .
-          '\x{6D66}\x{6D69}\x{6D6A}\x{6D6C}\x{6D6E}\x{6D74}\x{6D77}\x{6D78}\x{6D79}' .
-          '\x{6D85}\x{6D88}\x{6D8C}\x{6D8E}\x{6D93}\x{6D95}\x{6D99}\x{6D9B}\x{6D9C}' .
-          '\x{6DAF}\x{6DB2}\x{6DB5}\x{6DB8}\x{6DBC}\x{6DC0}\x{6DC5}\x{6DC6}\x{6DC7}' .
-          '\x{6DCB}\x{6DCC}\x{6DD1}\x{6DD2}\x{6DD5}\x{6DD8}\x{6DD9}\x{6DDE}\x{6DE1}' .
-          '\x{6DE4}\x{6DE6}\x{6DE8}\x{6DEA}\x{6DEB}\x{6DEC}\x{6DEE}\x{6DF1}\x{6DF3}' .
-          '\x{6DF5}\x{6DF7}\x{6DF9}\x{6DFA}\x{6DFB}\x{6E05}\x{6E07}\x{6E08}\x{6E09}' .
-          '\x{6E0A}\x{6E0B}\x{6E13}\x{6E15}\x{6E19}\x{6E1A}\x{6E1B}\x{6E1D}\x{6E1F}' .
-          '\x{6E20}\x{6E21}\x{6E23}\x{6E24}\x{6E25}\x{6E26}\x{6E29}\x{6E2B}\x{6E2C}' .
-          '\x{6E2D}\x{6E2E}\x{6E2F}\x{6E38}\x{6E3A}\x{6E3E}\x{6E43}\x{6E4A}\x{6E4D}' .
-          '\x{6E4E}\x{6E56}\x{6E58}\x{6E5B}\x{6E5F}\x{6E67}\x{6E6B}\x{6E6E}\x{6E6F}' .
-          '\x{6E72}\x{6E76}\x{6E7E}\x{6E7F}\x{6E80}\x{6E82}\x{6E8C}\x{6E8F}\x{6E90}' .
-          '\x{6E96}\x{6E98}\x{6E9C}\x{6E9D}\x{6E9F}\x{6EA2}\x{6EA5}\x{6EAA}\x{6EAF}' .
-          '\x{6EB2}\x{6EB6}\x{6EB7}\x{6EBA}\x{6EBD}\x{6EC2}\x{6EC4}\x{6EC5}\x{6EC9}' .
-          '\x{6ECB}\x{6ECC}\x{6ED1}\x{6ED3}\x{6ED4}\x{6ED5}\x{6EDD}\x{6EDE}\x{6EEC}' .
-          '\x{6EEF}\x{6EF2}\x{6EF4}\x{6EF7}\x{6EF8}\x{6EFE}\x{6EFF}\x{6F01}\x{6F02}' .
-          '\x{6F06}\x{6F09}\x{6F0F}\x{6F11}\x{6F13}\x{6F14}\x{6F15}\x{6F20}\x{6F22}' .
-          '\x{6F23}\x{6F2B}\x{6F2C}\x{6F31}\x{6F32}\x{6F38}\x{6F3E}\x{6F3F}\x{6F41}' .
-          '\x{6F45}\x{6F54}\x{6F58}\x{6F5B}\x{6F5C}\x{6F5F}\x{6F64}\x{6F66}\x{6F6D}' .
-          '\x{6F6E}\x{6F6F}\x{6F70}\x{6F74}\x{6F78}\x{6F7A}\x{6F7C}\x{6F80}\x{6F81}' .
-          '\x{6F82}\x{6F84}\x{6F86}\x{6F8E}\x{6F91}\x{6F97}\x{6FA1}\x{6FA3}\x{6FA4}' .
-          '\x{6FAA}\x{6FB1}\x{6FB3}\x{6FB9}\x{6FC0}\x{6FC1}\x{6FC2}\x{6FC3}\x{6FC6}' .
-          '\x{6FD4}\x{6FD5}\x{6FD8}\x{6FDB}\x{6FDF}\x{6FE0}\x{6FE1}\x{6FE4}\x{6FEB}' .
-          '\x{6FEC}\x{6FEE}\x{6FEF}\x{6FF1}\x{6FF3}\x{6FF6}\x{6FFA}\x{6FFE}\x{7001}' .
-          '\x{7009}\x{700B}\x{700F}\x{7011}\x{7015}\x{7018}\x{701A}\x{701B}\x{701D}' .
-          '\x{701E}\x{701F}\x{7026}\x{7027}\x{702C}\x{7030}\x{7032}\x{703E}\x{704C}' .
-          '\x{7051}\x{7058}\x{7063}\x{706B}\x{706F}\x{7070}\x{7078}\x{707C}\x{707D}' .
-          '\x{7089}\x{708A}\x{708E}\x{7092}\x{7099}\x{70AC}\x{70AD}\x{70AE}\x{70AF}' .
-          '\x{70B3}\x{70B8}\x{70B9}\x{70BA}\x{70C8}\x{70CB}\x{70CF}\x{70D9}\x{70DD}' .
-          '\x{70DF}\x{70F1}\x{70F9}\x{70FD}\x{7109}\x{7114}\x{7119}\x{711A}\x{711C}' .
-          '\x{7121}\x{7126}\x{7136}\x{713C}\x{7149}\x{714C}\x{714E}\x{7155}\x{7156}' .
-          '\x{7159}\x{7162}\x{7164}\x{7165}\x{7166}\x{7167}\x{7169}\x{716C}\x{716E}' .
-          '\x{717D}\x{7184}\x{7188}\x{718A}\x{718F}\x{7194}\x{7195}\x{7199}\x{719F}' .
-          '\x{71A8}\x{71AC}\x{71B1}\x{71B9}\x{71BE}\x{71C3}\x{71C8}\x{71C9}\x{71CE}' .
-          '\x{71D0}\x{71D2}\x{71D4}\x{71D5}\x{71D7}\x{71DF}\x{71E0}\x{71E5}\x{71E6}' .
-          '\x{71E7}\x{71EC}\x{71ED}\x{71EE}\x{71F5}\x{71F9}\x{71FB}\x{71FC}\x{71FF}' .
-          '\x{7206}\x{720D}\x{7210}\x{721B}\x{7228}\x{722A}\x{722C}\x{722D}\x{7230}' .
-          '\x{7232}\x{7235}\x{7236}\x{723A}\x{723B}\x{723C}\x{723D}\x{723E}\x{723F}' .
-          '\x{7240}\x{7246}\x{7247}\x{7248}\x{724B}\x{724C}\x{7252}\x{7258}\x{7259}' .
-          '\x{725B}\x{725D}\x{725F}\x{7261}\x{7262}\x{7267}\x{7269}\x{7272}\x{7274}' .
-          '\x{7279}\x{727D}\x{727E}\x{7280}\x{7281}\x{7282}\x{7287}\x{7292}\x{7296}' .
-          '\x{72A0}\x{72A2}\x{72A7}\x{72AC}\x{72AF}\x{72B2}\x{72B6}\x{72B9}\x{72C2}' .
-          '\x{72C3}\x{72C4}\x{72C6}\x{72CE}\x{72D0}\x{72D2}\x{72D7}\x{72D9}\x{72DB}' .
-          '\x{72E0}\x{72E1}\x{72E2}\x{72E9}\x{72EC}\x{72ED}\x{72F7}\x{72F8}\x{72F9}' .
-          '\x{72FC}\x{72FD}\x{730A}\x{7316}\x{7317}\x{731B}\x{731C}\x{731D}\x{731F}' .
-          '\x{7325}\x{7329}\x{732A}\x{732B}\x{732E}\x{732F}\x{7334}\x{7336}\x{7337}' .
-          '\x{733E}\x{733F}\x{7344}\x{7345}\x{734E}\x{734F}\x{7357}\x{7363}\x{7368}' .
-          '\x{736A}\x{7370}\x{7372}\x{7375}\x{7378}\x{737A}\x{737B}\x{7384}\x{7387}' .
-          '\x{7389}\x{738B}\x{7396}\x{73A9}\x{73B2}\x{73B3}\x{73BB}\x{73C0}\x{73C2}' .
-          '\x{73C8}\x{73CA}\x{73CD}\x{73CE}\x{73DE}\x{73E0}\x{73E5}\x{73EA}\x{73ED}' .
-          '\x{73EE}\x{73F1}\x{73F8}\x{73FE}\x{7403}\x{7405}\x{7406}\x{7409}\x{7422}' .
-          '\x{7425}\x{7432}\x{7433}\x{7434}\x{7435}\x{7436}\x{743A}\x{743F}\x{7441}' .
-          '\x{7455}\x{7459}\x{745A}\x{745B}\x{745C}\x{745E}\x{745F}\x{7460}\x{7463}' .
-          '\x{7464}\x{7469}\x{746A}\x{746F}\x{7470}\x{7473}\x{7476}\x{747E}\x{7483}' .
-          '\x{748B}\x{749E}\x{74A2}\x{74A7}\x{74B0}\x{74BD}\x{74CA}\x{74CF}\x{74D4}' .
-          '\x{74DC}\x{74E0}\x{74E2}\x{74E3}\x{74E6}\x{74E7}\x{74E9}\x{74EE}\x{74F0}' .
-          '\x{74F1}\x{74F2}\x{74F6}\x{74F7}\x{74F8}\x{7503}\x{7504}\x{7505}\x{750C}' .
-          '\x{750D}\x{750E}\x{7511}\x{7513}\x{7515}\x{7518}\x{751A}\x{751C}\x{751E}' .
-          '\x{751F}\x{7523}\x{7525}\x{7526}\x{7528}\x{752B}\x{752C}\x{7530}\x{7531}' .
-          '\x{7532}\x{7533}\x{7537}\x{7538}\x{753A}\x{753B}\x{753C}\x{7544}\x{7546}' .
-          '\x{7549}\x{754A}\x{754B}\x{754C}\x{754D}\x{754F}\x{7551}\x{7554}\x{7559}' .
-          '\x{755A}\x{755B}\x{755C}\x{755D}\x{7560}\x{7562}\x{7564}\x{7565}\x{7566}' .
-          '\x{7567}\x{7569}\x{756A}\x{756B}\x{756D}\x{7570}\x{7573}\x{7574}\x{7576}' .
-          '\x{7577}\x{7578}\x{757F}\x{7582}\x{7586}\x{7587}\x{7589}\x{758A}\x{758B}' .
-          '\x{758E}\x{758F}\x{7591}\x{7594}\x{759A}\x{759D}\x{75A3}\x{75A5}\x{75AB}' .
-          '\x{75B1}\x{75B2}\x{75B3}\x{75B5}\x{75B8}\x{75B9}\x{75BC}\x{75BD}\x{75BE}' .
-          '\x{75C2}\x{75C3}\x{75C5}\x{75C7}\x{75CA}\x{75CD}\x{75D2}\x{75D4}\x{75D5}' .
-          '\x{75D8}\x{75D9}\x{75DB}\x{75DE}\x{75E2}\x{75E3}\x{75E9}\x{75F0}\x{75F2}' .
-          '\x{75F3}\x{75F4}\x{75FA}\x{75FC}\x{75FE}\x{75FF}\x{7601}\x{7609}\x{760B}' .
-          '\x{760D}\x{761F}\x{7620}\x{7621}\x{7622}\x{7624}\x{7627}\x{7630}\x{7634}' .
-          '\x{763B}\x{7642}\x{7646}\x{7647}\x{7648}\x{764C}\x{7652}\x{7656}\x{7658}' .
-          '\x{765C}\x{7661}\x{7662}\x{7667}\x{7668}\x{7669}\x{766A}\x{766C}\x{7670}' .
-          '\x{7672}\x{7676}\x{7678}\x{767A}\x{767B}\x{767C}\x{767D}\x{767E}\x{7680}' .
-          '\x{7683}\x{7684}\x{7686}\x{7687}\x{7688}\x{768B}\x{768E}\x{7690}\x{7693}' .
-          '\x{7696}\x{7699}\x{769A}\x{76AE}\x{76B0}\x{76B4}\x{76B7}\x{76B8}\x{76B9}' .
-          '\x{76BA}\x{76BF}\x{76C2}\x{76C3}\x{76C6}\x{76C8}\x{76CA}\x{76CD}\x{76D2}' .
-          '\x{76D6}\x{76D7}\x{76DB}\x{76DC}\x{76DE}\x{76DF}\x{76E1}\x{76E3}\x{76E4}' .
-          '\x{76E5}\x{76E7}\x{76EA}\x{76EE}\x{76F2}\x{76F4}\x{76F8}\x{76FB}\x{76FE}' .
-          '\x{7701}\x{7704}\x{7707}\x{7708}\x{7709}\x{770B}\x{770C}\x{771B}\x{771E}' .
-          '\x{771F}\x{7720}\x{7724}\x{7725}\x{7726}\x{7729}\x{7737}\x{7738}\x{773A}' .
-          '\x{773C}\x{7740}\x{7747}\x{775A}\x{775B}\x{7761}\x{7763}\x{7765}\x{7766}' .
-          '\x{7768}\x{776B}\x{7779}\x{777E}\x{777F}\x{778B}\x{778E}\x{7791}\x{779E}' .
-          '\x{77A0}\x{77A5}\x{77AC}\x{77AD}\x{77B0}\x{77B3}\x{77B6}\x{77B9}\x{77BB}' .
-          '\x{77BC}\x{77BD}\x{77BF}\x{77C7}\x{77CD}\x{77D7}\x{77DA}\x{77DB}\x{77DC}' .
-          '\x{77E2}\x{77E3}\x{77E5}\x{77E7}\x{77E9}\x{77ED}\x{77EE}\x{77EF}\x{77F3}' .
-          '\x{77FC}\x{7802}\x{780C}\x{7812}\x{7814}\x{7815}\x{7820}\x{7825}\x{7826}' .
-          '\x{7827}\x{7832}\x{7834}\x{783A}\x{783F}\x{7845}\x{785D}\x{786B}\x{786C}' .
-          '\x{786F}\x{7872}\x{7874}\x{787C}\x{7881}\x{7886}\x{7887}\x{788C}\x{788D}' .
-          '\x{788E}\x{7891}\x{7893}\x{7895}\x{7897}\x{789A}\x{78A3}\x{78A7}\x{78A9}' .
-          '\x{78AA}\x{78AF}\x{78B5}\x{78BA}\x{78BC}\x{78BE}\x{78C1}\x{78C5}\x{78C6}' .
-          '\x{78CA}\x{78CB}\x{78D0}\x{78D1}\x{78D4}\x{78DA}\x{78E7}\x{78E8}\x{78EC}' .
-          '\x{78EF}\x{78F4}\x{78FD}\x{7901}\x{7907}\x{790E}\x{7911}\x{7912}\x{7919}' .
-          '\x{7926}\x{792A}\x{792B}\x{792C}\x{793A}\x{793C}\x{793E}\x{7940}\x{7941}' .
-          '\x{7947}\x{7948}\x{7949}\x{7950}\x{7953}\x{7955}\x{7956}\x{7957}\x{795A}' .
-          '\x{795D}\x{795E}\x{795F}\x{7960}\x{7962}\x{7965}\x{7968}\x{796D}\x{7977}' .
-          '\x{797A}\x{797F}\x{7980}\x{7981}\x{7984}\x{7985}\x{798A}\x{798D}\x{798E}' .
-          '\x{798F}\x{799D}\x{79A6}\x{79A7}\x{79AA}\x{79AE}\x{79B0}\x{79B3}\x{79B9}' .
-          '\x{79BA}\x{79BD}\x{79BE}\x{79BF}\x{79C0}\x{79C1}\x{79C9}\x{79CB}\x{79D1}' .
-          '\x{79D2}\x{79D5}\x{79D8}\x{79DF}\x{79E1}\x{79E3}\x{79E4}\x{79E6}\x{79E7}' .
-          '\x{79E9}\x{79EC}\x{79F0}\x{79FB}\x{7A00}\x{7A08}\x{7A0B}\x{7A0D}\x{7A0E}' .
-          '\x{7A14}\x{7A17}\x{7A18}\x{7A19}\x{7A1A}\x{7A1C}\x{7A1F}\x{7A20}\x{7A2E}' .
-          '\x{7A31}\x{7A32}\x{7A37}\x{7A3B}\x{7A3C}\x{7A3D}\x{7A3E}\x{7A3F}\x{7A40}' .
-          '\x{7A42}\x{7A43}\x{7A46}\x{7A49}\x{7A4D}\x{7A4E}\x{7A4F}\x{7A50}\x{7A57}' .
-          '\x{7A61}\x{7A62}\x{7A63}\x{7A69}\x{7A6B}\x{7A70}\x{7A74}\x{7A76}\x{7A79}' .
-          '\x{7A7A}\x{7A7D}\x{7A7F}\x{7A81}\x{7A83}\x{7A84}\x{7A88}\x{7A92}\x{7A93}' .
-          '\x{7A95}\x{7A96}\x{7A97}\x{7A98}\x{7A9F}\x{7AA9}\x{7AAA}\x{7AAE}\x{7AAF}' .
-          '\x{7AB0}\x{7AB6}\x{7ABA}\x{7ABF}\x{7AC3}\x{7AC4}\x{7AC5}\x{7AC7}\x{7AC8}' .
-          '\x{7ACA}\x{7ACB}\x{7ACD}\x{7ACF}\x{7AD2}\x{7AD3}\x{7AD5}\x{7AD9}\x{7ADA}' .
-          '\x{7ADC}\x{7ADD}\x{7ADF}\x{7AE0}\x{7AE1}\x{7AE2}\x{7AE3}\x{7AE5}\x{7AE6}' .
-          '\x{7AEA}\x{7AED}\x{7AEF}\x{7AF0}\x{7AF6}\x{7AF8}\x{7AF9}\x{7AFA}\x{7AFF}' .
-          '\x{7B02}\x{7B04}\x{7B06}\x{7B08}\x{7B0A}\x{7B0B}\x{7B0F}\x{7B11}\x{7B18}' .
-          '\x{7B19}\x{7B1B}\x{7B1E}\x{7B20}\x{7B25}\x{7B26}\x{7B28}\x{7B2C}\x{7B33}' .
-          '\x{7B35}\x{7B36}\x{7B39}\x{7B45}\x{7B46}\x{7B48}\x{7B49}\x{7B4B}\x{7B4C}' .
-          '\x{7B4D}\x{7B4F}\x{7B50}\x{7B51}\x{7B52}\x{7B54}\x{7B56}\x{7B5D}\x{7B65}' .
-          '\x{7B67}\x{7B6C}\x{7B6E}\x{7B70}\x{7B71}\x{7B74}\x{7B75}\x{7B7A}\x{7B86}' .
-          '\x{7B87}\x{7B8B}\x{7B8D}\x{7B8F}\x{7B92}\x{7B94}\x{7B95}\x{7B97}\x{7B98}' .
-          '\x{7B99}\x{7B9A}\x{7B9C}\x{7B9D}\x{7B9F}\x{7BA1}\x{7BAA}\x{7BAD}\x{7BB1}' .
-          '\x{7BB4}\x{7BB8}\x{7BC0}\x{7BC1}\x{7BC4}\x{7BC6}\x{7BC7}\x{7BC9}\x{7BCB}' .
-          '\x{7BCC}\x{7BCF}\x{7BDD}\x{7BE0}\x{7BE4}\x{7BE5}\x{7BE6}\x{7BE9}\x{7BED}' .
-          '\x{7BF3}\x{7BF6}\x{7BF7}\x{7C00}\x{7C07}\x{7C0D}\x{7C11}\x{7C12}\x{7C13}' .
-          '\x{7C14}\x{7C17}\x{7C1F}\x{7C21}\x{7C23}\x{7C27}\x{7C2A}\x{7C2B}\x{7C37}' .
-          '\x{7C38}\x{7C3D}\x{7C3E}\x{7C3F}\x{7C40}\x{7C43}\x{7C4C}\x{7C4D}\x{7C4F}' .
-          '\x{7C50}\x{7C54}\x{7C56}\x{7C58}\x{7C5F}\x{7C60}\x{7C64}\x{7C65}\x{7C6C}' .
-          '\x{7C73}\x{7C75}\x{7C7E}\x{7C81}\x{7C82}\x{7C83}\x{7C89}\x{7C8B}\x{7C8D}' .
-          '\x{7C90}\x{7C92}\x{7C95}\x{7C97}\x{7C98}\x{7C9B}\x{7C9F}\x{7CA1}\x{7CA2}' .
-          '\x{7CA4}\x{7CA5}\x{7CA7}\x{7CA8}\x{7CAB}\x{7CAD}\x{7CAE}\x{7CB1}\x{7CB2}' .
-          '\x{7CB3}\x{7CB9}\x{7CBD}\x{7CBE}\x{7CC0}\x{7CC2}\x{7CC5}\x{7CCA}\x{7CCE}' .
-          '\x{7CD2}\x{7CD6}\x{7CD8}\x{7CDC}\x{7CDE}\x{7CDF}\x{7CE0}\x{7CE2}\x{7CE7}' .
-          '\x{7CEF}\x{7CF2}\x{7CF4}\x{7CF6}\x{7CF8}\x{7CFA}\x{7CFB}\x{7CFE}\x{7D00}' .
-          '\x{7D02}\x{7D04}\x{7D05}\x{7D06}\x{7D0A}\x{7D0B}\x{7D0D}\x{7D10}\x{7D14}' .
-          '\x{7D15}\x{7D17}\x{7D18}\x{7D19}\x{7D1A}\x{7D1B}\x{7D1C}\x{7D20}\x{7D21}' .
-          '\x{7D22}\x{7D2B}\x{7D2C}\x{7D2E}\x{7D2F}\x{7D30}\x{7D32}\x{7D33}\x{7D35}' .
-          '\x{7D39}\x{7D3A}\x{7D3F}\x{7D42}\x{7D43}\x{7D44}\x{7D45}\x{7D46}\x{7D4B}' .
-          '\x{7D4C}\x{7D4E}\x{7D4F}\x{7D50}\x{7D56}\x{7D5B}\x{7D5E}\x{7D61}\x{7D62}' .
-          '\x{7D63}\x{7D66}\x{7D68}\x{7D6E}\x{7D71}\x{7D72}\x{7D73}\x{7D75}\x{7D76}' .
-          '\x{7D79}\x{7D7D}\x{7D89}\x{7D8F}\x{7D93}\x{7D99}\x{7D9A}\x{7D9B}\x{7D9C}' .
-          '\x{7D9F}\x{7DA2}\x{7DA3}\x{7DAB}\x{7DAC}\x{7DAD}\x{7DAE}\x{7DAF}\x{7DB0}' .
-          '\x{7DB1}\x{7DB2}\x{7DB4}\x{7DB5}\x{7DB8}\x{7DBA}\x{7DBB}\x{7DBD}\x{7DBE}' .
-          '\x{7DBF}\x{7DC7}\x{7DCA}\x{7DCB}\x{7DCF}\x{7DD1}\x{7DD2}\x{7DD5}\x{7DD8}' .
-          '\x{7DDA}\x{7DDC}\x{7DDD}\x{7DDE}\x{7DE0}\x{7DE1}\x{7DE4}\x{7DE8}\x{7DE9}' .
-          '\x{7DEC}\x{7DEF}\x{7DF2}\x{7DF4}\x{7DFB}\x{7E01}\x{7E04}\x{7E05}\x{7E09}' .
-          '\x{7E0A}\x{7E0B}\x{7E12}\x{7E1B}\x{7E1E}\x{7E1F}\x{7E21}\x{7E22}\x{7E23}' .
-          '\x{7E26}\x{7E2B}\x{7E2E}\x{7E31}\x{7E32}\x{7E35}\x{7E37}\x{7E39}\x{7E3A}' .
-          '\x{7E3B}\x{7E3D}\x{7E3E}\x{7E41}\x{7E43}\x{7E46}\x{7E4A}\x{7E4B}\x{7E4D}' .
-          '\x{7E54}\x{7E55}\x{7E56}\x{7E59}\x{7E5A}\x{7E5D}\x{7E5E}\x{7E66}\x{7E67}' .
-          '\x{7E69}\x{7E6A}\x{7E6D}\x{7E70}\x{7E79}\x{7E7B}\x{7E7C}\x{7E7D}\x{7E7F}' .
-          '\x{7E82}\x{7E83}\x{7E88}\x{7E89}\x{7E8C}\x{7E8E}\x{7E8F}\x{7E90}\x{7E92}' .
-          '\x{7E93}\x{7E94}\x{7E96}\x{7E9B}\x{7E9C}\x{7F36}\x{7F38}\x{7F3A}\x{7F45}' .
-          '\x{7F4C}\x{7F4D}\x{7F4E}\x{7F50}\x{7F51}\x{7F54}\x{7F55}\x{7F58}\x{7F5F}' .
-          '\x{7F60}\x{7F67}\x{7F68}\x{7F69}\x{7F6A}\x{7F6B}\x{7F6E}\x{7F70}\x{7F72}' .
-          '\x{7F75}\x{7F77}\x{7F78}\x{7F79}\x{7F82}\x{7F83}\x{7F85}\x{7F86}\x{7F87}' .
-          '\x{7F88}\x{7F8A}\x{7F8C}\x{7F8E}\x{7F94}\x{7F9A}\x{7F9D}\x{7F9E}\x{7FA3}' .
-          '\x{7FA4}\x{7FA8}\x{7FA9}\x{7FAE}\x{7FAF}\x{7FB2}\x{7FB6}\x{7FB8}\x{7FB9}' .
-          '\x{7FBD}\x{7FC1}\x{7FC5}\x{7FC6}\x{7FCA}\x{7FCC}\x{7FD2}\x{7FD4}\x{7FD5}' .
-          '\x{7FE0}\x{7FE1}\x{7FE6}\x{7FE9}\x{7FEB}\x{7FF0}\x{7FF3}\x{7FF9}\x{7FFB}' .
-          '\x{7FFC}\x{8000}\x{8001}\x{8003}\x{8004}\x{8005}\x{8006}\x{800B}\x{800C}' .
-          '\x{8010}\x{8012}\x{8015}\x{8017}\x{8018}\x{8019}\x{801C}\x{8021}\x{8028}' .
-          '\x{8033}\x{8036}\x{803B}\x{803D}\x{803F}\x{8046}\x{804A}\x{8052}\x{8056}' .
-          '\x{8058}\x{805A}\x{805E}\x{805F}\x{8061}\x{8062}\x{8068}\x{806F}\x{8070}' .
-          '\x{8072}\x{8073}\x{8074}\x{8076}\x{8077}\x{8079}\x{807D}\x{807E}\x{807F}' .
-          '\x{8084}\x{8085}\x{8086}\x{8087}\x{8089}\x{808B}\x{808C}\x{8093}\x{8096}' .
-          '\x{8098}\x{809A}\x{809B}\x{809D}\x{80A1}\x{80A2}\x{80A5}\x{80A9}\x{80AA}' .
-          '\x{80AC}\x{80AD}\x{80AF}\x{80B1}\x{80B2}\x{80B4}\x{80BA}\x{80C3}\x{80C4}' .
-          '\x{80C6}\x{80CC}\x{80CE}\x{80D6}\x{80D9}\x{80DA}\x{80DB}\x{80DD}\x{80DE}' .
-          '\x{80E1}\x{80E4}\x{80E5}\x{80EF}\x{80F1}\x{80F4}\x{80F8}\x{80FC}\x{80FD}' .
-          '\x{8102}\x{8105}\x{8106}\x{8107}\x{8108}\x{8109}\x{810A}\x{811A}\x{811B}' .
-          '\x{8123}\x{8129}\x{812F}\x{8131}\x{8133}\x{8139}\x{813E}\x{8146}\x{814B}' .
-          '\x{814E}\x{8150}\x{8151}\x{8153}\x{8154}\x{8155}\x{815F}\x{8165}\x{8166}' .
-          '\x{816B}\x{816E}\x{8170}\x{8171}\x{8174}\x{8178}\x{8179}\x{817A}\x{817F}' .
-          '\x{8180}\x{8182}\x{8183}\x{8188}\x{818A}\x{818F}\x{8193}\x{8195}\x{819A}' .
-          '\x{819C}\x{819D}\x{81A0}\x{81A3}\x{81A4}\x{81A8}\x{81A9}\x{81B0}\x{81B3}' .
-          '\x{81B5}\x{81B8}\x{81BA}\x{81BD}\x{81BE}\x{81BF}\x{81C0}\x{81C2}\x{81C6}' .
-          '\x{81C8}\x{81C9}\x{81CD}\x{81D1}\x{81D3}\x{81D8}\x{81D9}\x{81DA}\x{81DF}' .
-          '\x{81E0}\x{81E3}\x{81E5}\x{81E7}\x{81E8}\x{81EA}\x{81ED}\x{81F3}\x{81F4}' .
-          '\x{81FA}\x{81FB}\x{81FC}\x{81FE}\x{8201}\x{8202}\x{8205}\x{8207}\x{8208}' .
-          '\x{8209}\x{820A}\x{820C}\x{820D}\x{820E}\x{8210}\x{8212}\x{8216}\x{8217}' .
-          '\x{8218}\x{821B}\x{821C}\x{821E}\x{821F}\x{8229}\x{822A}\x{822B}\x{822C}' .
-          '\x{822E}\x{8233}\x{8235}\x{8236}\x{8237}\x{8238}\x{8239}\x{8240}\x{8247}' .
-          '\x{8258}\x{8259}\x{825A}\x{825D}\x{825F}\x{8262}\x{8264}\x{8266}\x{8268}' .
-          '\x{826A}\x{826B}\x{826E}\x{826F}\x{8271}\x{8272}\x{8276}\x{8277}\x{8278}' .
-          '\x{827E}\x{828B}\x{828D}\x{8292}\x{8299}\x{829D}\x{829F}\x{82A5}\x{82A6}' .
-          '\x{82AB}\x{82AC}\x{82AD}\x{82AF}\x{82B1}\x{82B3}\x{82B8}\x{82B9}\x{82BB}' .
-          '\x{82BD}\x{82C5}\x{82D1}\x{82D2}\x{82D3}\x{82D4}\x{82D7}\x{82D9}\x{82DB}' .
-          '\x{82DC}\x{82DE}\x{82DF}\x{82E1}\x{82E3}\x{82E5}\x{82E6}\x{82E7}\x{82EB}' .
-          '\x{82F1}\x{82F3}\x{82F4}\x{82F9}\x{82FA}\x{82FB}\x{8302}\x{8303}\x{8304}' .
-          '\x{8305}\x{8306}\x{8309}\x{830E}\x{8316}\x{8317}\x{8318}\x{831C}\x{8323}' .
-          '\x{8328}\x{832B}\x{832F}\x{8331}\x{8332}\x{8334}\x{8335}\x{8336}\x{8338}' .
-          '\x{8339}\x{8340}\x{8345}\x{8349}\x{834A}\x{834F}\x{8350}\x{8352}\x{8358}' .
-          '\x{8373}\x{8375}\x{8377}\x{837B}\x{837C}\x{8385}\x{8387}\x{8389}\x{838A}' .
-          '\x{838E}\x{8393}\x{8396}\x{839A}\x{839E}\x{839F}\x{83A0}\x{83A2}\x{83A8}' .
-          '\x{83AA}\x{83AB}\x{83B1}\x{83B5}\x{83BD}\x{83C1}\x{83C5}\x{83CA}\x{83CC}' .
-          '\x{83CE}\x{83D3}\x{83D6}\x{83D8}\x{83DC}\x{83DF}\x{83E0}\x{83E9}\x{83EB}' .
-          '\x{83EF}\x{83F0}\x{83F1}\x{83F2}\x{83F4}\x{83F7}\x{83FB}\x{83FD}\x{8403}' .
-          '\x{8404}\x{8407}\x{840B}\x{840C}\x{840D}\x{840E}\x{8413}\x{8420}\x{8422}' .
-          '\x{8429}\x{842A}\x{842C}\x{8431}\x{8435}\x{8438}\x{843C}\x{843D}\x{8446}' .
-          '\x{8449}\x{844E}\x{8457}\x{845B}\x{8461}\x{8462}\x{8463}\x{8466}\x{8469}' .
-          '\x{846B}\x{846C}\x{846D}\x{846E}\x{846F}\x{8471}\x{8475}\x{8477}\x{8479}' .
-          '\x{847A}\x{8482}\x{8484}\x{848B}\x{8490}\x{8494}\x{8499}\x{849C}\x{849F}' .
-          '\x{84A1}\x{84AD}\x{84B2}\x{84B8}\x{84B9}\x{84BB}\x{84BC}\x{84BF}\x{84C1}' .
-          '\x{84C4}\x{84C6}\x{84C9}\x{84CA}\x{84CB}\x{84CD}\x{84D0}\x{84D1}\x{84D6}' .
-          '\x{84D9}\x{84DA}\x{84EC}\x{84EE}\x{84F4}\x{84FC}\x{84FF}\x{8500}\x{8506}' .
-          '\x{8511}\x{8513}\x{8514}\x{8515}\x{8517}\x{8518}\x{851A}\x{851F}\x{8521}' .
-          '\x{8526}\x{852C}\x{852D}\x{8535}\x{853D}\x{8540}\x{8541}\x{8543}\x{8548}' .
-          '\x{8549}\x{854A}\x{854B}\x{854E}\x{8555}\x{8557}\x{8558}\x{855A}\x{8563}' .
-          '\x{8568}\x{8569}\x{856A}\x{856D}\x{8577}\x{857E}\x{8580}\x{8584}\x{8587}' .
-          '\x{8588}\x{858A}\x{8590}\x{8591}\x{8594}\x{8597}\x{8599}\x{859B}\x{859C}' .
-          '\x{85A4}\x{85A6}\x{85A8}\x{85A9}\x{85AA}\x{85AB}\x{85AC}\x{85AE}\x{85AF}' .
-          '\x{85B9}\x{85BA}\x{85C1}\x{85C9}\x{85CD}\x{85CF}\x{85D0}\x{85D5}\x{85DC}' .
-          '\x{85DD}\x{85E4}\x{85E5}\x{85E9}\x{85EA}\x{85F7}\x{85F9}\x{85FA}\x{85FB}' .
-          '\x{85FE}\x{8602}\x{8606}\x{8607}\x{860A}\x{860B}\x{8613}\x{8616}\x{8617}' .
-          '\x{861A}\x{8622}\x{862D}\x{862F}\x{8630}\x{863F}\x{864D}\x{864E}\x{8650}' .
-          '\x{8654}\x{8655}\x{865A}\x{865C}\x{865E}\x{865F}\x{8667}\x{866B}\x{8671}' .
-          '\x{8679}\x{867B}\x{868A}\x{868B}\x{868C}\x{8693}\x{8695}\x{86A3}\x{86A4}' .
-          '\x{86A9}\x{86AA}\x{86AB}\x{86AF}\x{86B0}\x{86B6}\x{86C4}\x{86C6}\x{86C7}' .
-          '\x{86C9}\x{86CB}\x{86CD}\x{86CE}\x{86D4}\x{86D9}\x{86DB}\x{86DE}\x{86DF}' .
-          '\x{86E4}\x{86E9}\x{86EC}\x{86ED}\x{86EE}\x{86EF}\x{86F8}\x{86F9}\x{86FB}' .
-          '\x{86FE}\x{8700}\x{8702}\x{8703}\x{8706}\x{8708}\x{8709}\x{870A}\x{870D}' .
-          '\x{8711}\x{8712}\x{8718}\x{871A}\x{871C}\x{8725}\x{8729}\x{8734}\x{8737}' .
-          '\x{873B}\x{873F}\x{8749}\x{874B}\x{874C}\x{874E}\x{8753}\x{8755}\x{8757}' .
-          '\x{8759}\x{875F}\x{8760}\x{8763}\x{8766}\x{8768}\x{876A}\x{876E}\x{8774}' .
-          '\x{8776}\x{8778}\x{877F}\x{8782}\x{878D}\x{879F}\x{87A2}\x{87AB}\x{87AF}' .
-          '\x{87B3}\x{87BA}\x{87BB}\x{87BD}\x{87C0}\x{87C4}\x{87C6}\x{87C7}\x{87CB}' .
-          '\x{87D0}\x{87D2}\x{87E0}\x{87EF}\x{87F2}\x{87F6}\x{87F7}\x{87F9}\x{87FB}' .
-          '\x{87FE}\x{8805}\x{880D}\x{880E}\x{880F}\x{8811}\x{8815}\x{8816}\x{8821}' .
-          '\x{8822}\x{8823}\x{8827}\x{8831}\x{8836}\x{8839}\x{883B}\x{8840}\x{8842}' .
-          '\x{8844}\x{8846}\x{884C}\x{884D}\x{8852}\x{8853}\x{8857}\x{8859}\x{885B}' .
-          '\x{885D}\x{885E}\x{8861}\x{8862}\x{8863}\x{8868}\x{886B}\x{8870}\x{8872}' .
-          '\x{8875}\x{8877}\x{887D}\x{887E}\x{887F}\x{8881}\x{8882}\x{8888}\x{888B}' .
-          '\x{888D}\x{8892}\x{8896}\x{8897}\x{8899}\x{889E}\x{88A2}\x{88A4}\x{88AB}' .
-          '\x{88AE}\x{88B0}\x{88B1}\x{88B4}\x{88B5}\x{88B7}\x{88BF}\x{88C1}\x{88C2}' .
-          '\x{88C3}\x{88C4}\x{88C5}\x{88CF}\x{88D4}\x{88D5}\x{88D8}\x{88D9}\x{88DC}' .
-          '\x{88DD}\x{88DF}\x{88E1}\x{88E8}\x{88F2}\x{88F3}\x{88F4}\x{88F8}\x{88F9}' .
-          '\x{88FC}\x{88FD}\x{88FE}\x{8902}\x{8904}\x{8907}\x{890A}\x{890C}\x{8910}' .
-          '\x{8912}\x{8913}\x{891D}\x{891E}\x{8925}\x{892A}\x{892B}\x{8936}\x{8938}' .
-          '\x{893B}\x{8941}\x{8943}\x{8944}\x{894C}\x{894D}\x{8956}\x{895E}\x{895F}' .
-          '\x{8960}\x{8964}\x{8966}\x{896A}\x{896D}\x{896F}\x{8972}\x{8974}\x{8977}' .
-          '\x{897E}\x{897F}\x{8981}\x{8983}\x{8986}\x{8987}\x{8988}\x{898A}\x{898B}' .
-          '\x{898F}\x{8993}\x{8996}\x{8997}\x{8998}\x{899A}\x{89A1}\x{89A6}\x{89A7}' .
-          '\x{89A9}\x{89AA}\x{89AC}\x{89AF}\x{89B2}\x{89B3}\x{89BA}\x{89BD}\x{89BF}' .
-          '\x{89C0}\x{89D2}\x{89DA}\x{89DC}\x{89DD}\x{89E3}\x{89E6}\x{89E7}\x{89F4}' .
-          '\x{89F8}\x{8A00}\x{8A02}\x{8A03}\x{8A08}\x{8A0A}\x{8A0C}\x{8A0E}\x{8A10}' .
-          '\x{8A13}\x{8A16}\x{8A17}\x{8A18}\x{8A1B}\x{8A1D}\x{8A1F}\x{8A23}\x{8A25}' .
-          '\x{8A2A}\x{8A2D}\x{8A31}\x{8A33}\x{8A34}\x{8A36}\x{8A3A}\x{8A3B}\x{8A3C}' .
-          '\x{8A41}\x{8A46}\x{8A48}\x{8A50}\x{8A51}\x{8A52}\x{8A54}\x{8A55}\x{8A5B}' .
-          '\x{8A5E}\x{8A60}\x{8A62}\x{8A63}\x{8A66}\x{8A69}\x{8A6B}\x{8A6C}\x{8A6D}' .
-          '\x{8A6E}\x{8A70}\x{8A71}\x{8A72}\x{8A73}\x{8A7C}\x{8A82}\x{8A84}\x{8A85}' .
-          '\x{8A87}\x{8A89}\x{8A8C}\x{8A8D}\x{8A91}\x{8A93}\x{8A95}\x{8A98}\x{8A9A}' .
-          '\x{8A9E}\x{8AA0}\x{8AA1}\x{8AA3}\x{8AA4}\x{8AA5}\x{8AA6}\x{8AA8}\x{8AAC}' .
-          '\x{8AAD}\x{8AB0}\x{8AB2}\x{8AB9}\x{8ABC}\x{8ABF}\x{8AC2}\x{8AC4}\x{8AC7}' .
-          '\x{8ACB}\x{8ACC}\x{8ACD}\x{8ACF}\x{8AD2}\x{8AD6}\x{8ADA}\x{8ADB}\x{8ADC}' .
-          '\x{8ADE}\x{8AE0}\x{8AE1}\x{8AE2}\x{8AE4}\x{8AE6}\x{8AE7}\x{8AEB}\x{8AED}' .
-          '\x{8AEE}\x{8AF1}\x{8AF3}\x{8AF7}\x{8AF8}\x{8AFA}\x{8AFE}\x{8B00}\x{8B01}' .
-          '\x{8B02}\x{8B04}\x{8B07}\x{8B0C}\x{8B0E}\x{8B10}\x{8B14}\x{8B16}\x{8B17}' .
-          '\x{8B19}\x{8B1A}\x{8B1B}\x{8B1D}\x{8B20}\x{8B21}\x{8B26}\x{8B28}\x{8B2B}' .
-          '\x{8B2C}\x{8B33}\x{8B39}\x{8B3E}\x{8B41}\x{8B49}\x{8B4C}\x{8B4E}\x{8B4F}' .
-          '\x{8B56}\x{8B58}\x{8B5A}\x{8B5B}\x{8B5C}\x{8B5F}\x{8B66}\x{8B6B}\x{8B6C}' .
-          '\x{8B6F}\x{8B70}\x{8B71}\x{8B72}\x{8B74}\x{8B77}\x{8B7D}\x{8B80}\x{8B83}' .
-          '\x{8B8A}\x{8B8C}\x{8B8E}\x{8B90}\x{8B92}\x{8B93}\x{8B96}\x{8B99}\x{8B9A}' .
-          '\x{8C37}\x{8C3A}\x{8C3F}\x{8C41}\x{8C46}\x{8C48}\x{8C4A}\x{8C4C}\x{8C4E}' .
-          '\x{8C50}\x{8C55}\x{8C5A}\x{8C61}\x{8C62}\x{8C6A}\x{8C6B}\x{8C6C}\x{8C78}' .
-          '\x{8C79}\x{8C7A}\x{8C7C}\x{8C82}\x{8C85}\x{8C89}\x{8C8A}\x{8C8C}\x{8C8D}' .
-          '\x{8C8E}\x{8C94}\x{8C98}\x{8C9D}\x{8C9E}\x{8CA0}\x{8CA1}\x{8CA2}\x{8CA7}' .
-          '\x{8CA8}\x{8CA9}\x{8CAA}\x{8CAB}\x{8CAC}\x{8CAD}\x{8CAE}\x{8CAF}\x{8CB0}' .
-          '\x{8CB2}\x{8CB3}\x{8CB4}\x{8CB6}\x{8CB7}\x{8CB8}\x{8CBB}\x{8CBC}\x{8CBD}' .
-          '\x{8CBF}\x{8CC0}\x{8CC1}\x{8CC2}\x{8CC3}\x{8CC4}\x{8CC7}\x{8CC8}\x{8CCA}' .
-          '\x{8CCD}\x{8CCE}\x{8CD1}\x{8CD3}\x{8CDA}\x{8CDB}\x{8CDC}\x{8CDE}\x{8CE0}' .
-          '\x{8CE2}\x{8CE3}\x{8CE4}\x{8CE6}\x{8CEA}\x{8CED}\x{8CFA}\x{8CFB}\x{8CFC}' .
-          '\x{8CFD}\x{8D04}\x{8D05}\x{8D07}\x{8D08}\x{8D0A}\x{8D0B}\x{8D0D}\x{8D0F}' .
-          '\x{8D10}\x{8D13}\x{8D14}\x{8D16}\x{8D64}\x{8D66}\x{8D67}\x{8D6B}\x{8D6D}' .
-          '\x{8D70}\x{8D71}\x{8D73}\x{8D74}\x{8D77}\x{8D81}\x{8D85}\x{8D8A}\x{8D99}' .
-          '\x{8DA3}\x{8DA8}\x{8DB3}\x{8DBA}\x{8DBE}\x{8DC2}\x{8DCB}\x{8DCC}\x{8DCF}' .
-          '\x{8DD6}\x{8DDA}\x{8DDB}\x{8DDD}\x{8DDF}\x{8DE1}\x{8DE3}\x{8DE8}\x{8DEA}' .
-          '\x{8DEB}\x{8DEF}\x{8DF3}\x{8DF5}\x{8DFC}\x{8DFF}\x{8E08}\x{8E09}\x{8E0A}' .
-          '\x{8E0F}\x{8E10}\x{8E1D}\x{8E1E}\x{8E1F}\x{8E2A}\x{8E30}\x{8E34}\x{8E35}' .
-          '\x{8E42}\x{8E44}\x{8E47}\x{8E48}\x{8E49}\x{8E4A}\x{8E4C}\x{8E50}\x{8E55}' .
-          '\x{8E59}\x{8E5F}\x{8E60}\x{8E63}\x{8E64}\x{8E72}\x{8E74}\x{8E76}\x{8E7C}' .
-          '\x{8E81}\x{8E84}\x{8E85}\x{8E87}\x{8E8A}\x{8E8B}\x{8E8D}\x{8E91}\x{8E93}' .
-          '\x{8E94}\x{8E99}\x{8EA1}\x{8EAA}\x{8EAB}\x{8EAC}\x{8EAF}\x{8EB0}\x{8EB1}' .
-          '\x{8EBE}\x{8EC5}\x{8EC6}\x{8EC8}\x{8ECA}\x{8ECB}\x{8ECC}\x{8ECD}\x{8ED2}' .
-          '\x{8EDB}\x{8EDF}\x{8EE2}\x{8EE3}\x{8EEB}\x{8EF8}\x{8EFB}\x{8EFC}\x{8EFD}' .
-          '\x{8EFE}\x{8F03}\x{8F05}\x{8F09}\x{8F0A}\x{8F0C}\x{8F12}\x{8F13}\x{8F14}' .
-          '\x{8F15}\x{8F19}\x{8F1B}\x{8F1C}\x{8F1D}\x{8F1F}\x{8F26}\x{8F29}\x{8F2A}' .
-          '\x{8F2F}\x{8F33}\x{8F38}\x{8F39}\x{8F3B}\x{8F3E}\x{8F3F}\x{8F42}\x{8F44}' .
-          '\x{8F45}\x{8F46}\x{8F49}\x{8F4C}\x{8F4D}\x{8F4E}\x{8F57}\x{8F5C}\x{8F5F}' .
-          '\x{8F61}\x{8F62}\x{8F63}\x{8F64}\x{8F9B}\x{8F9C}\x{8F9E}\x{8F9F}\x{8FA3}' .
-          '\x{8FA7}\x{8FA8}\x{8FAD}\x{8FAE}\x{8FAF}\x{8FB0}\x{8FB1}\x{8FB2}\x{8FB7}' .
-          '\x{8FBA}\x{8FBB}\x{8FBC}\x{8FBF}\x{8FC2}\x{8FC4}\x{8FC5}\x{8FCE}\x{8FD1}' .
-          '\x{8FD4}\x{8FDA}\x{8FE2}\x{8FE5}\x{8FE6}\x{8FE9}\x{8FEA}\x{8FEB}\x{8FED}' .
-          '\x{8FEF}\x{8FF0}\x{8FF4}\x{8FF7}\x{8FF8}\x{8FF9}\x{8FFA}\x{8FFD}\x{9000}' .
-          '\x{9001}\x{9003}\x{9005}\x{9006}\x{900B}\x{900D}\x{900E}\x{900F}\x{9010}' .
-          '\x{9011}\x{9013}\x{9014}\x{9015}\x{9016}\x{9017}\x{9019}\x{901A}\x{901D}' .
-          '\x{901E}\x{901F}\x{9020}\x{9021}\x{9022}\x{9023}\x{9027}\x{902E}\x{9031}' .
-          '\x{9032}\x{9035}\x{9036}\x{9038}\x{9039}\x{903C}\x{903E}\x{9041}\x{9042}' .
-          '\x{9045}\x{9047}\x{9049}\x{904A}\x{904B}\x{904D}\x{904E}\x{904F}\x{9050}' .
-          '\x{9051}\x{9052}\x{9053}\x{9054}\x{9055}\x{9056}\x{9058}\x{9059}\x{905C}' .
-          '\x{905E}\x{9060}\x{9061}\x{9063}\x{9065}\x{9068}\x{9069}\x{906D}\x{906E}' .
-          '\x{906F}\x{9072}\x{9075}\x{9076}\x{9077}\x{9078}\x{907A}\x{907C}\x{907D}' .
-          '\x{907F}\x{9080}\x{9081}\x{9082}\x{9083}\x{9084}\x{9087}\x{9089}\x{908A}' .
-          '\x{908F}\x{9091}\x{90A3}\x{90A6}\x{90A8}\x{90AA}\x{90AF}\x{90B1}\x{90B5}' .
-          '\x{90B8}\x{90C1}\x{90CA}\x{90CE}\x{90DB}\x{90E1}\x{90E2}\x{90E4}\x{90E8}' .
-          '\x{90ED}\x{90F5}\x{90F7}\x{90FD}\x{9102}\x{9112}\x{9119}\x{912D}\x{9130}' .
-          '\x{9132}\x{9149}\x{914A}\x{914B}\x{914C}\x{914D}\x{914E}\x{9152}\x{9154}' .
-          '\x{9156}\x{9158}\x{9162}\x{9163}\x{9165}\x{9169}\x{916A}\x{916C}\x{9172}' .
-          '\x{9173}\x{9175}\x{9177}\x{9178}\x{9182}\x{9187}\x{9189}\x{918B}\x{918D}' .
-          '\x{9190}\x{9192}\x{9197}\x{919C}\x{91A2}\x{91A4}\x{91AA}\x{91AB}\x{91AF}' .
-          '\x{91B4}\x{91B5}\x{91B8}\x{91BA}\x{91C0}\x{91C1}\x{91C6}\x{91C7}\x{91C8}' .
-          '\x{91C9}\x{91CB}\x{91CC}\x{91CD}\x{91CE}\x{91CF}\x{91D0}\x{91D1}\x{91D6}' .
-          '\x{91D8}\x{91DB}\x{91DC}\x{91DD}\x{91DF}\x{91E1}\x{91E3}\x{91E6}\x{91E7}' .
-          '\x{91F5}\x{91F6}\x{91FC}\x{91FF}\x{920D}\x{920E}\x{9211}\x{9214}\x{9215}' .
-          '\x{921E}\x{9229}\x{922C}\x{9234}\x{9237}\x{923F}\x{9244}\x{9245}\x{9248}' .
-          '\x{9249}\x{924B}\x{9250}\x{9257}\x{925A}\x{925B}\x{925E}\x{9262}\x{9264}' .
-          '\x{9266}\x{9271}\x{927E}\x{9280}\x{9283}\x{9285}\x{9291}\x{9293}\x{9295}' .
-          '\x{9296}\x{9298}\x{929A}\x{929B}\x{929C}\x{92AD}\x{92B7}\x{92B9}\x{92CF}' .
-          '\x{92D2}\x{92E4}\x{92E9}\x{92EA}\x{92ED}\x{92F2}\x{92F3}\x{92F8}\x{92FA}' .
-          '\x{92FC}\x{9306}\x{930F}\x{9310}\x{9318}\x{9319}\x{931A}\x{9320}\x{9322}' .
-          '\x{9323}\x{9326}\x{9328}\x{932B}\x{932C}\x{932E}\x{932F}\x{9332}\x{9335}' .
-          '\x{933A}\x{933B}\x{9344}\x{934B}\x{934D}\x{9354}\x{9356}\x{935B}\x{935C}' .
-          '\x{9360}\x{936C}\x{936E}\x{9375}\x{937C}\x{937E}\x{938C}\x{9394}\x{9396}' .
-          '\x{9397}\x{939A}\x{93A7}\x{93AC}\x{93AD}\x{93AE}\x{93B0}\x{93B9}\x{93C3}' .
-          '\x{93C8}\x{93D0}\x{93D1}\x{93D6}\x{93D7}\x{93D8}\x{93DD}\x{93E1}\x{93E4}' .
-          '\x{93E5}\x{93E8}\x{9403}\x{9407}\x{9410}\x{9413}\x{9414}\x{9418}\x{9419}' .
-          '\x{941A}\x{9421}\x{942B}\x{9435}\x{9436}\x{9438}\x{943A}\x{9441}\x{9444}' .
-          '\x{9451}\x{9452}\x{9453}\x{945A}\x{945B}\x{945E}\x{9460}\x{9462}\x{946A}' .
-          '\x{9470}\x{9475}\x{9477}\x{947C}\x{947D}\x{947E}\x{947F}\x{9481}\x{9577}' .
-          '\x{9580}\x{9582}\x{9583}\x{9587}\x{9589}\x{958A}\x{958B}\x{958F}\x{9591}' .
-          '\x{9593}\x{9594}\x{9596}\x{9598}\x{9599}\x{95A0}\x{95A2}\x{95A3}\x{95A4}' .
-          '\x{95A5}\x{95A7}\x{95A8}\x{95AD}\x{95B2}\x{95B9}\x{95BB}\x{95BC}\x{95BE}' .
-          '\x{95C3}\x{95C7}\x{95CA}\x{95CC}\x{95CD}\x{95D4}\x{95D5}\x{95D6}\x{95D8}' .
-          '\x{95DC}\x{95E1}\x{95E2}\x{95E5}\x{961C}\x{9621}\x{9628}\x{962A}\x{962E}' .
-          '\x{962F}\x{9632}\x{963B}\x{963F}\x{9640}\x{9642}\x{9644}\x{964B}\x{964C}' .
-          '\x{964D}\x{964F}\x{9650}\x{965B}\x{965C}\x{965D}\x{965E}\x{965F}\x{9662}' .
-          '\x{9663}\x{9664}\x{9665}\x{9666}\x{966A}\x{966C}\x{9670}\x{9672}\x{9673}' .
-          '\x{9675}\x{9676}\x{9677}\x{9678}\x{967A}\x{967D}\x{9685}\x{9686}\x{9688}' .
-          '\x{968A}\x{968B}\x{968D}\x{968E}\x{968F}\x{9694}\x{9695}\x{9697}\x{9698}' .
-          '\x{9699}\x{969B}\x{969C}\x{96A0}\x{96A3}\x{96A7}\x{96A8}\x{96AA}\x{96B0}' .
-          '\x{96B1}\x{96B2}\x{96B4}\x{96B6}\x{96B7}\x{96B8}\x{96B9}\x{96BB}\x{96BC}' .
-          '\x{96C0}\x{96C1}\x{96C4}\x{96C5}\x{96C6}\x{96C7}\x{96C9}\x{96CB}\x{96CC}' .
-          '\x{96CD}\x{96CE}\x{96D1}\x{96D5}\x{96D6}\x{96D9}\x{96DB}\x{96DC}\x{96E2}' .
-          '\x{96E3}\x{96E8}\x{96EA}\x{96EB}\x{96F0}\x{96F2}\x{96F6}\x{96F7}\x{96F9}' .
-          '\x{96FB}\x{9700}\x{9704}\x{9706}\x{9707}\x{9708}\x{970A}\x{970D}\x{970E}' .
-          '\x{970F}\x{9711}\x{9713}\x{9716}\x{9719}\x{971C}\x{971E}\x{9724}\x{9727}' .
-          '\x{972A}\x{9730}\x{9732}\x{9738}\x{9739}\x{973D}\x{973E}\x{9742}\x{9744}' .
-          '\x{9746}\x{9748}\x{9749}\x{9752}\x{9756}\x{9759}\x{975C}\x{975E}\x{9760}' .
-          '\x{9761}\x{9762}\x{9764}\x{9766}\x{9768}\x{9769}\x{976B}\x{976D}\x{9771}' .
-          '\x{9774}\x{9779}\x{977A}\x{977C}\x{9781}\x{9784}\x{9785}\x{9786}\x{978B}' .
-          '\x{978D}\x{978F}\x{9790}\x{9798}\x{979C}\x{97A0}\x{97A3}\x{97A6}\x{97A8}' .
-          '\x{97AB}\x{97AD}\x{97B3}\x{97B4}\x{97C3}\x{97C6}\x{97C8}\x{97CB}\x{97D3}' .
-          '\x{97DC}\x{97ED}\x{97EE}\x{97F2}\x{97F3}\x{97F5}\x{97F6}\x{97FB}\x{97FF}' .
-          '\x{9801}\x{9802}\x{9803}\x{9805}\x{9806}\x{9808}\x{980C}\x{980F}\x{9810}' .
-          '\x{9811}\x{9812}\x{9813}\x{9817}\x{9818}\x{981A}\x{9821}\x{9824}\x{982C}' .
-          '\x{982D}\x{9834}\x{9837}\x{9838}\x{983B}\x{983C}\x{983D}\x{9846}\x{984B}' .
-          '\x{984C}\x{984D}\x{984E}\x{984F}\x{9854}\x{9855}\x{9858}\x{985B}\x{985E}' .
-          '\x{9867}\x{986B}\x{986F}\x{9870}\x{9871}\x{9873}\x{9874}\x{98A8}\x{98AA}' .
-          '\x{98AF}\x{98B1}\x{98B6}\x{98C3}\x{98C4}\x{98C6}\x{98DB}\x{98DC}\x{98DF}' .
-          '\x{98E2}\x{98E9}\x{98EB}\x{98ED}\x{98EE}\x{98EF}\x{98F2}\x{98F4}\x{98FC}' .
-          '\x{98FD}\x{98FE}\x{9903}\x{9905}\x{9909}\x{990A}\x{990C}\x{9910}\x{9912}' .
-          '\x{9913}\x{9914}\x{9918}\x{991D}\x{991E}\x{9920}\x{9921}\x{9924}\x{9928}' .
-          '\x{992C}\x{992E}\x{993D}\x{993E}\x{9942}\x{9945}\x{9949}\x{994B}\x{994C}' .
-          '\x{9950}\x{9951}\x{9952}\x{9955}\x{9957}\x{9996}\x{9997}\x{9998}\x{9999}' .
-          '\x{99A5}\x{99A8}\x{99AC}\x{99AD}\x{99AE}\x{99B3}\x{99B4}\x{99BC}\x{99C1}' .
-          '\x{99C4}\x{99C5}\x{99C6}\x{99C8}\x{99D0}\x{99D1}\x{99D2}\x{99D5}\x{99D8}' .
-          '\x{99DB}\x{99DD}\x{99DF}\x{99E2}\x{99ED}\x{99EE}\x{99F1}\x{99F2}\x{99F8}' .
-          '\x{99FB}\x{99FF}\x{9A01}\x{9A05}\x{9A0E}\x{9A0F}\x{9A12}\x{9A13}\x{9A19}' .
-          '\x{9A28}\x{9A2B}\x{9A30}\x{9A37}\x{9A3E}\x{9A40}\x{9A42}\x{9A43}\x{9A45}' .
-          '\x{9A4D}\x{9A55}\x{9A57}\x{9A5A}\x{9A5B}\x{9A5F}\x{9A62}\x{9A64}\x{9A65}' .
-          '\x{9A69}\x{9A6A}\x{9A6B}\x{9AA8}\x{9AAD}\x{9AB0}\x{9AB8}\x{9ABC}\x{9AC0}' .
-          '\x{9AC4}\x{9ACF}\x{9AD1}\x{9AD3}\x{9AD4}\x{9AD8}\x{9ADE}\x{9ADF}\x{9AE2}' .
-          '\x{9AE3}\x{9AE6}\x{9AEA}\x{9AEB}\x{9AED}\x{9AEE}\x{9AEF}\x{9AF1}\x{9AF4}' .
-          '\x{9AF7}\x{9AFB}\x{9B06}\x{9B18}\x{9B1A}\x{9B1F}\x{9B22}\x{9B23}\x{9B25}' .
-          '\x{9B27}\x{9B28}\x{9B29}\x{9B2A}\x{9B2E}\x{9B2F}\x{9B31}\x{9B32}\x{9B3B}' .
-          '\x{9B3C}\x{9B41}\x{9B42}\x{9B43}\x{9B44}\x{9B45}\x{9B4D}\x{9B4E}\x{9B4F}' .
-          '\x{9B51}\x{9B54}\x{9B58}\x{9B5A}\x{9B6F}\x{9B74}\x{9B83}\x{9B8E}\x{9B91}' .
-          '\x{9B92}\x{9B93}\x{9B96}\x{9B97}\x{9B9F}\x{9BA0}\x{9BA8}\x{9BAA}\x{9BAB}' .
-          '\x{9BAD}\x{9BAE}\x{9BB4}\x{9BB9}\x{9BC0}\x{9BC6}\x{9BC9}\x{9BCA}\x{9BCF}' .
-          '\x{9BD1}\x{9BD2}\x{9BD4}\x{9BD6}\x{9BDB}\x{9BE1}\x{9BE2}\x{9BE3}\x{9BE4}' .
-          '\x{9BE8}\x{9BF0}\x{9BF1}\x{9BF2}\x{9BF5}\x{9C04}\x{9C06}\x{9C08}\x{9C09}' .
-          '\x{9C0A}\x{9C0C}\x{9C0D}\x{9C10}\x{9C12}\x{9C13}\x{9C14}\x{9C15}\x{9C1B}' .
-          '\x{9C21}\x{9C24}\x{9C25}\x{9C2D}\x{9C2E}\x{9C2F}\x{9C30}\x{9C32}\x{9C39}' .
-          '\x{9C3A}\x{9C3B}\x{9C3E}\x{9C46}\x{9C47}\x{9C48}\x{9C52}\x{9C57}\x{9C5A}' .
-          '\x{9C60}\x{9C67}\x{9C76}\x{9C78}\x{9CE5}\x{9CE7}\x{9CE9}\x{9CEB}\x{9CEC}' .
-          '\x{9CF0}\x{9CF3}\x{9CF4}\x{9CF6}\x{9D03}\x{9D06}\x{9D07}\x{9D08}\x{9D09}' .
-          '\x{9D0E}\x{9D12}\x{9D15}\x{9D1B}\x{9D1F}\x{9D23}\x{9D26}\x{9D28}\x{9D2A}' .
-          '\x{9D2B}\x{9D2C}\x{9D3B}\x{9D3E}\x{9D3F}\x{9D41}\x{9D44}\x{9D46}\x{9D48}' .
-          '\x{9D50}\x{9D51}\x{9D59}\x{9D5C}\x{9D5D}\x{9D5E}\x{9D60}\x{9D61}\x{9D64}' .
-          '\x{9D6C}\x{9D6F}\x{9D72}\x{9D7A}\x{9D87}\x{9D89}\x{9D8F}\x{9D9A}\x{9DA4}' .
-          '\x{9DA9}\x{9DAB}\x{9DAF}\x{9DB2}\x{9DB4}\x{9DB8}\x{9DBA}\x{9DBB}\x{9DC1}' .
-          '\x{9DC2}\x{9DC4}\x{9DC6}\x{9DCF}\x{9DD3}\x{9DD9}\x{9DE6}\x{9DED}\x{9DEF}' .
-          '\x{9DF2}\x{9DF8}\x{9DF9}\x{9DFA}\x{9DFD}\x{9E1A}\x{9E1B}\x{9E1E}\x{9E75}' .
-          '\x{9E78}\x{9E79}\x{9E7D}\x{9E7F}\x{9E81}\x{9E88}\x{9E8B}\x{9E8C}\x{9E91}' .
-          '\x{9E92}\x{9E93}\x{9E95}\x{9E97}\x{9E9D}\x{9E9F}\x{9EA5}\x{9EA6}\x{9EA9}' .
-          '\x{9EAA}\x{9EAD}\x{9EB8}\x{9EB9}\x{9EBA}\x{9EBB}\x{9EBC}\x{9EBE}\x{9EBF}' .
-          '\x{9EC4}\x{9ECC}\x{9ECD}\x{9ECE}\x{9ECF}\x{9ED0}\x{9ED2}\x{9ED4}\x{9ED8}' .
-          '\x{9ED9}\x{9EDB}\x{9EDC}\x{9EDD}\x{9EDE}\x{9EE0}\x{9EE5}\x{9EE8}\x{9EEF}' .
-          '\x{9EF4}\x{9EF6}\x{9EF7}\x{9EF9}\x{9EFB}\x{9EFC}\x{9EFD}\x{9F07}\x{9F08}' .
-          '\x{9F0E}\x{9F13}\x{9F15}\x{9F20}\x{9F21}\x{9F2C}\x{9F3B}\x{9F3E}\x{9F4A}' .
-          '\x{9F4B}\x{9F4E}\x{9F4F}\x{9F52}\x{9F54}\x{9F5F}\x{9F60}\x{9F61}\x{9F62}' .
-          '\x{9F63}\x{9F66}\x{9F67}\x{9F6A}\x{9F6C}\x{9F72}\x{9F76}\x{9F77}\x{9F8D}' .
-          '\x{9F95}\x{9F9C}\x{9F9D}\x{9FA0}]{1,15}$/iu',
-);
diff --git a/civicrm/vendor/zendframework/zend-validator/src/Iban.php b/civicrm/vendor/zendframework/zend-validator/src/Iban.php
deleted file mode 100644
index f6d542a1cd6dc95d72759d5c21de649f7b5f99dc..0000000000000000000000000000000000000000
--- a/civicrm/vendor/zendframework/zend-validator/src/Iban.php
+++ /dev/null
@@ -1,273 +0,0 @@
-<?php
-/**
- * Zend Framework (http://framework.zend.com/)
- *
- * @link      http://github.com/zendframework/zf2 for the canonical source repository
- * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
- * @license   http://framework.zend.com/license/new-bsd New BSD License
- */
-
-namespace Zend\Validator;
-
-use Traversable;
-use Zend\Stdlib\ArrayUtils;
-
-/**
- * Validates IBAN Numbers (International Bank Account Numbers)
- */
-class Iban extends AbstractValidator
-{
-    const NOTSUPPORTED     = 'ibanNotSupported';
-    const SEPANOTSUPPORTED = 'ibanSepaNotSupported';
-    const FALSEFORMAT      = 'ibanFalseFormat';
-    const CHECKFAILED      = 'ibanCheckFailed';
-
-    /**
-     * Validation failure message template definitions
-     *
-     * @var array
-     */
-    protected $messageTemplates = array(
-        self::NOTSUPPORTED     => "Unknown country within the IBAN",
-        self::SEPANOTSUPPORTED => "Countries outside the Single Euro Payments Area (SEPA) are not supported",
-        self::FALSEFORMAT      => "The input has a false IBAN format",
-        self::CHECKFAILED      => "The input has failed the IBAN check",
-    );
-
-    /**
-     * Optional country code by ISO 3166-1
-     *
-     * @var string|null
-     */
-    protected $countryCode;
-
-    /**
-     * Optionally allow IBAN codes from non-SEPA countries. Defaults to true
-     *
-     * @var bool
-     */
-    protected $allowNonSepa = true;
-
-    /**
-     * The SEPA country codes
-     *
-     * @var array<ISO 3166-1>
-     */
-    protected static $sepaCountries = array(
-        'AT', 'BE', 'BG', 'CY', 'CZ', 'DK', 'FO', 'GL', 'EE', 'FI', 'FR', 'DE',
-        'GI', 'GR', 'HU', 'IS', 'IE', 'IT', 'LV', 'LI', 'LT', 'LU', 'MT', 'MC',
-        'NL', 'NO', 'PL', 'PT', 'RO', 'SK', 'SI', 'ES', 'SE', 'CH', 'GB'
-    );
-
-    /**
-     * IBAN regexes by country code
-     *
-     * @var array
-     */
-    protected static $ibanRegex = array(
-        'AD' => 'AD[0-9]{2}[0-9]{4}[0-9]{4}[A-Z0-9]{12}',
-        'AE' => 'AE[0-9]{2}[0-9]{3}[0-9]{16}',
-        'AL' => 'AL[0-9]{2}[0-9]{8}[A-Z0-9]{16}',
-        'AT' => 'AT[0-9]{2}[0-9]{5}[0-9]{11}',
-        'AZ' => 'AZ[0-9]{2}[A-Z]{4}[A-Z0-9]{20}',
-        'BA' => 'BA[0-9]{2}[0-9]{3}[0-9]{3}[0-9]{8}[0-9]{2}',
-        'BE' => 'BE[0-9]{2}[0-9]{3}[0-9]{7}[0-9]{2}',
-        'BG' => 'BG[0-9]{2}[A-Z]{4}[0-9]{4}[0-9]{2}[A-Z0-9]{8}',
-        'BH' => 'BH[0-9]{2}[A-Z]{4}[A-Z0-9]{14}',
-        'BR' => 'BR[0-9]{2}[0-9]{8}[0-9]{5}[0-9]{10}[A-Z][A-Z0-9]',
-        'CH' => 'CH[0-9]{2}[0-9]{5}[A-Z0-9]{12}',
-        'CR' => 'CR[0-9]{2}[0-9]{3}[0-9]{14}',
-        'CY' => 'CY[0-9]{2}[0-9]{3}[0-9]{5}[A-Z0-9]{16}',
-        'CZ' => 'CZ[0-9]{2}[0-9]{20}',
-        'DE' => 'DE[0-9]{2}[0-9]{8}[0-9]{10}',
-        'DO' => 'DO[0-9]{2}[A-Z0-9]{4}[0-9]{20}',
-        'DK' => 'DK[0-9]{2}[0-9]{14}',
-        'EE' => 'EE[0-9]{2}[0-9]{2}[0-9]{2}[0-9]{11}[0-9]{1}',
-        'ES' => 'ES[0-9]{2}[0-9]{4}[0-9]{4}[0-9]{1}[0-9]{1}[0-9]{10}',
-        'FI' => 'FI[0-9]{2}[0-9]{6}[0-9]{7}[0-9]{1}',
-        'FO' => 'FO[0-9]{2}[0-9]{4}[0-9]{9}[0-9]{1}',
-        'FR' => 'FR[0-9]{2}[0-9]{5}[0-9]{5}[A-Z0-9]{11}[0-9]{2}',
-        'GB' => 'GB[0-9]{2}[A-Z]{4}[0-9]{6}[0-9]{8}',
-        'GE' => 'GE[0-9]{2}[A-Z]{2}[0-9]{16}',
-        'GI' => 'GI[0-9]{2}[A-Z]{4}[A-Z0-9]{15}',
-        'GL' => 'GL[0-9]{2}[0-9]{4}[0-9]{9}[0-9]{1}',
-        'GR' => 'GR[0-9]{2}[0-9]{3}[0-9]{4}[A-Z0-9]{16}',
-        'GT' => 'GT[0-9]{2}[A-Z0-9]{4}[A-Z0-9]{20}',
-        'HR' => 'HR[0-9]{2}[0-9]{7}[0-9]{10}',
-        'HU' => 'HU[0-9]{2}[0-9]{3}[0-9]{4}[0-9]{1}[0-9]{15}[0-9]{1}',
-        'IE' => 'IE[0-9]{2}[A-Z]{4}[0-9]{6}[0-9]{8}',
-        'IL' => 'IL[0-9]{2}[0-9]{3}[0-9]{3}[0-9]{13}',
-        'IS' => 'IS[0-9]{2}[0-9]{4}[0-9]{2}[0-9]{6}[0-9]{10}',
-        'IT' => 'IT[0-9]{2}[A-Z]{1}[0-9]{5}[0-9]{5}[A-Z0-9]{12}',
-        'KW' => 'KW[0-9]{2}[A-Z]{4}[0-9]{22}',
-        'KZ' => 'KZ[0-9]{2}[0-9]{3}[A-Z0-9]{13}',
-        'LB' => 'LB[0-9]{2}[0-9]{4}[A-Z0-9]{20}',
-        'LI' => 'LI[0-9]{2}[0-9]{5}[A-Z0-9]{12}',
-        'LT' => 'LT[0-9]{2}[0-9]{5}[0-9]{11}',
-        'LU' => 'LU[0-9]{2}[0-9]{3}[A-Z0-9]{13}',
-        'LV' => 'LV[0-9]{2}[A-Z]{4}[A-Z0-9]{13}',
-        'MC' => 'MC[0-9]{2}[0-9]{5}[0-9]{5}[A-Z0-9]{11}[0-9]{2}',
-        'MD' => 'MD[0-9]{2}[A-Z0-9]{20}',
-        'ME' => 'ME[0-9]{2}[0-9]{3}[0-9]{13}[0-9]{2}',
-        'MK' => 'MK[0-9]{2}[0-9]{3}[A-Z0-9]{10}[0-9]{2}',
-        'MR' => 'MR13[0-9]{5}[0-9]{5}[0-9]{11}[0-9]{2}',
-        'MT' => 'MT[0-9]{2}[A-Z]{4}[0-9]{5}[A-Z0-9]{18}',
-        'MU' => 'MU[0-9]{2}[A-Z]{4}[0-9]{2}[0-9]{2}[0-9]{12}[0-9]{3}[A-Z]{3}',
-        'NL' => 'NL[0-9]{2}[A-Z]{4}[0-9]{10}',
-        'NO' => 'NO[0-9]{2}[0-9]{4}[0-9]{6}[0-9]{1}',
-        'PK' => 'PK[0-9]{2}[A-Z]{4}[A-Z0-9]{16}',
-        'PL' => 'PL[0-9]{2}[0-9]{8}[0-9]{16}',
-        'PS' => 'PS[0-9]{2}[A-Z]{4}[A-Z0-9]{21}',
-        'PT' => 'PT[0-9]{2}[0-9]{4}[0-9]{4}[0-9]{11}[0-9]{2}',
-        'RO' => 'RO[0-9]{2}[A-Z]{4}[A-Z0-9]{16}',
-        'RS' => 'RS[0-9]{2}[0-9]{3}[0-9]{13}[0-9]{2}',
-        'SA' => 'SA[0-9]{2}[0-9]{2}[A-Z0-9]{18}',
-        'SE' => 'SE[0-9]{2}[0-9]{3}[0-9]{16}[0-9]{1}',
-        'SI' => 'SI[0-9]{2}[0-9]{5}[0-9]{8}[0-9]{2}',
-        'SK' => 'SK[0-9]{2}[0-9]{4}[0-9]{6}[0-9]{10}',
-        'SM' => 'SM[0-9]{2}[A-Z]{1}[0-9]{5}[0-9]{5}[A-Z0-9]{12}',
-        'TN' => 'TN59[0-9]{2}[0-9]{3}[0-9]{13}[0-9]{2}',
-        'TR' => 'TR[0-9]{2}[0-9]{5}[A-Z0-9]{1}[A-Z0-9]{16}',
-        'VG' => 'VG[0-9]{2}[A-Z]{4}[0-9]{16}',
-    );
-
-    /**
-     * Sets validator options
-     *
-     * @param  array|Traversable $options OPTIONAL
-     */
-    public function __construct($options = array())
-    {
-        if ($options instanceof Traversable) {
-            $options = ArrayUtils::iteratorToArray($options);
-        }
-
-        if (array_key_exists('country_code', $options)) {
-            $this->setCountryCode($options['country_code']);
-        }
-
-        if (array_key_exists('allow_non_sepa', $options)) {
-            $this->setAllowNonSepa($options['allow_non_sepa']);
-        }
-
-        parent::__construct($options);
-    }
-
-    /**
-     * Returns the optional country code by ISO 3166-1
-     *
-     * @return string|null
-     */
-    public function getCountryCode()
-    {
-        return $this->countryCode;
-    }
-
-    /**
-     * Sets an optional country code by ISO 3166-1
-     *
-     * @param  string|null $countryCode
-     * @return Iban provides a fluent interface
-     * @throws Exception\InvalidArgumentException
-     */
-    public function setCountryCode($countryCode = null)
-    {
-        if ($countryCode !== null) {
-            $countryCode = (string) $countryCode;
-
-            if (!isset(static::$ibanRegex[$countryCode])) {
-                throw new Exception\InvalidArgumentException(
-                    "Country code '{$countryCode}' invalid by ISO 3166-1 or not supported"
-                );
-            }
-        }
-
-        $this->countryCode = $countryCode;
-        return $this;
-    }
-
-    /**
-     * Returns the optional allow non-sepa countries setting
-     *
-     * @return bool
-     */
-    public function allowNonSepa()
-    {
-        return $this->allowNonSepa;
-    }
-
-    /**
-     * Sets the optional allow non-sepa countries setting
-     *
-     * @param  bool $allowNonSepa
-     * @return Iban provides a fluent interface
-     */
-    public function setAllowNonSepa($allowNonSepa)
-    {
-        $this->allowNonSepa = (bool) $allowNonSepa;
-        return $this;
-    }
-
-    /**
-     * Returns true if $value is a valid IBAN
-     *
-     * @param  string $value
-     * @return bool
-     */
-    public function isValid($value)
-    {
-        if (!is_string($value)) {
-            $this->error(self::FALSEFORMAT);
-            return false;
-        }
-
-        $value = str_replace(' ', '', strtoupper($value));
-        $this->setValue($value);
-
-        $countryCode = $this->getCountryCode();
-        if ($countryCode === null) {
-            $countryCode = substr($value, 0, 2);
-        }
-
-        if (!array_key_exists($countryCode, static::$ibanRegex)) {
-            $this->setValue($countryCode);
-            $this->error(self::NOTSUPPORTED);
-            return false;
-        }
-
-        if (!$this->allowNonSepa && !in_array($countryCode, static::$sepaCountries)) {
-            $this->setValue($countryCode);
-            $this->error(self::SEPANOTSUPPORTED);
-            return false;
-        }
-
-        if (!preg_match('/^' . static::$ibanRegex[$countryCode] . '$/', $value)) {
-            $this->error(self::FALSEFORMAT);
-            return false;
-        }
-
-        $format = substr($value, 4) . substr($value, 0, 4);
-        $format = str_replace(
-            array('A',  'B',  'C',  'D',  'E',  'F',  'G',  'H',  'I',  'J',  'K',  'L',  'M',
-                  'N',  'O',  'P',  'Q',  'R',  'S',  'T',  'U',  'V',  'W',  'X',  'Y',  'Z'),
-            array('10', '11', '12', '13', '14', '15', '16', '17', '18', '19', '20', '21', '22',
-                  '23', '24', '25', '26', '27', '28', '29', '30', '31', '32', '33', '34', '35'),
-            $format
-        );
-
-        $temp = intval(substr($format, 0, 1));
-        $len  = strlen($format);
-        for ($x = 1; $x < $len; ++$x) {
-            $temp *= 10;
-            $temp += intval(substr($format, $x, 1));
-            $temp %= 97;
-        }
-
-        if ($temp != 1) {
-            $this->error(self::CHECKFAILED);
-            return false;
-        }
-
-        return true;
-    }
-}
diff --git a/civicrm/vendor/zendframework/zend-validator/src/Identical.php b/civicrm/vendor/zendframework/zend-validator/src/Identical.php
deleted file mode 100644
index ca0efb87e3e5ec0680ba808d5479efbbc6b36898..0000000000000000000000000000000000000000
--- a/civicrm/vendor/zendframework/zend-validator/src/Identical.php
+++ /dev/null
@@ -1,202 +0,0 @@
-<?php
-/**
- * Zend Framework (http://framework.zend.com/)
- *
- * @link      http://github.com/zendframework/zf2 for the canonical source repository
- * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
- * @license   http://framework.zend.com/license/new-bsd New BSD License
- */
-
-namespace Zend\Validator;
-
-use ArrayAccess;
-use Traversable;
-use Zend\Stdlib\ArrayUtils;
-
-class Identical extends AbstractValidator
-{
-    /**
-     * Error codes
-     * @const string
-     */
-    const NOT_SAME      = 'notSame';
-    const MISSING_TOKEN = 'missingToken';
-
-    /**
-     * Error messages
-     * @var array
-     */
-    protected $messageTemplates = array(
-        self::NOT_SAME      => "The two given tokens do not match",
-        self::MISSING_TOKEN => 'No token was provided to match against',
-    );
-
-    /**
-     * @var array
-     */
-    protected $messageVariables = array(
-        'token' => 'tokenString'
-    );
-
-    /**
-     * Original token against which to validate
-     * @var string
-     */
-    protected $tokenString;
-    protected $token;
-    protected $strict  = true;
-    protected $literal = false;
-
-    /**
-     * Sets validator options
-     *
-     * @param  mixed $token
-     */
-    public function __construct($token = null)
-    {
-        if ($token instanceof Traversable) {
-            $token = ArrayUtils::iteratorToArray($token);
-        }
-
-        if (is_array($token) && array_key_exists('token', $token)) {
-            if (array_key_exists('strict', $token)) {
-                $this->setStrict($token['strict']);
-            }
-
-            if (array_key_exists('literal', $token)) {
-                $this->setLiteral($token['literal']);
-            }
-
-            $this->setToken($token['token']);
-        } elseif (null !== $token) {
-            $this->setToken($token);
-        }
-
-        parent::__construct(is_array($token) ? $token : null);
-    }
-
-    /**
-     * Retrieve token
-     *
-     * @return mixed
-     */
-    public function getToken()
-    {
-        return $this->token;
-    }
-
-    /**
-     * Set token against which to compare
-     *
-     * @param  mixed $token
-     * @return Identical
-     */
-    public function setToken($token)
-    {
-        $this->tokenString = (is_array($token) ? var_export($token, true) : (string) $token);
-        $this->token       = $token;
-        return $this;
-    }
-
-    /**
-     * Returns the strict parameter
-     *
-     * @return bool
-     */
-    public function getStrict()
-    {
-        return $this->strict;
-    }
-
-    /**
-     * Sets the strict parameter
-     *
-     * @param  bool $strict
-     * @return Identical
-     */
-    public function setStrict($strict)
-    {
-        $this->strict = (bool) $strict;
-        return $this;
-    }
-
-    /**
-     * Returns the literal parameter
-     *
-     * @return bool
-     */
-    public function getLiteral()
-    {
-        return $this->literal;
-    }
-
-    /**
-     * Sets the literal parameter
-     *
-     * @param  bool $literal
-     * @return Identical
-     */
-    public function setLiteral($literal)
-    {
-        $this->literal = (bool) $literal;
-        return $this;
-    }
-
-    /**
-     * Returns true if and only if a token has been set and the provided value
-     * matches that token.
-     *
-     * @param  mixed $value
-     * @param  array|ArrayAccess $context
-     * @throws Exception\InvalidArgumentException If context is not array or ArrayObject
-     * @return bool
-     */
-    public function isValid($value, $context = null)
-    {
-        $this->setValue($value);
-
-        $token = $this->getToken();
-
-        if (!$this->getLiteral() && $context !== null) {
-            if (!is_array($context) && !($context instanceof ArrayAccess)) {
-                throw new Exception\InvalidArgumentException(sprintf(
-                    'Context passed to %s must be array, ArrayObject or null; received "%s"',
-                    __METHOD__,
-                    is_object($context) ? get_class($context) : gettype($context)
-                ));
-            }
-
-            if (is_array($token)) {
-                while (is_array($token)) {
-                    $key = key($token);
-                    if (!isset($context[$key])) {
-                        break;
-                    }
-                    $context = $context[$key];
-                    $token   = $token[$key];
-                }
-            }
-
-            // if $token is an array it means the above loop didn't went all the way down to the leaf,
-            // so the $token structure doesn't match the $context structure
-            if (is_array($token) || !isset($context[$token])) {
-                $token = $this->getToken();
-            } else {
-                $token = $context[$token];
-            }
-        }
-
-        if ($token === null) {
-            $this->error(self::MISSING_TOKEN);
-            return false;
-        }
-
-        $strict = $this->getStrict();
-        if (($strict && ($value !== $token)) || (!$strict && ($value != $token))) {
-            $this->error(self::NOT_SAME);
-            return false;
-        }
-
-        return true;
-    }
-}
diff --git a/civicrm/vendor/zendframework/zend-validator/src/InArray.php b/civicrm/vendor/zendframework/zend-validator/src/InArray.php
deleted file mode 100644
index be271ea0f83ad7c7bf4fa3c3e83fe13dfb2d110a..0000000000000000000000000000000000000000
--- a/civicrm/vendor/zendframework/zend-validator/src/InArray.php
+++ /dev/null
@@ -1,228 +0,0 @@
-<?php
-/**
- * Zend Framework (http://framework.zend.com/)
- *
- * @link      http://github.com/zendframework/zf2 for the canonical source repository
- * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
- * @license   http://framework.zend.com/license/new-bsd New BSD License
- */
-
-namespace Zend\Validator;
-
-use RecursiveArrayIterator;
-use RecursiveIteratorIterator;
-
-class InArray extends AbstractValidator
-{
-    const NOT_IN_ARRAY = 'notInArray';
-
-    // Type of Strict check
-    /**
-     * standard in_array strict checking value and type
-     */
-    const COMPARE_STRICT = 1;
-
-    /**
-     * Non strict check but prevents "asdf" == 0 returning TRUE causing false/positive.
-     * This is the most secure option for non-strict checks and replaces strict = false
-     * This will only be effective when the input is a string
-     */
-    const COMPARE_NOT_STRICT_AND_PREVENT_STR_TO_INT_VULNERABILITY = 0;
-
-    /**
-     * Standard non-strict check where "asdf" == 0 returns TRUE
-     * This will be wanted when comparing "0" against int 0
-     */
-    const COMPARE_NOT_STRICT = -1;
-
-    /**
-     * @var array
-     */
-    protected $messageTemplates = array(
-        self::NOT_IN_ARRAY => 'The input was not found in the haystack',
-    );
-
-    /**
-     * Haystack of possible values
-     *
-     * @var array
-     */
-    protected $haystack;
-
-    /**
-     * Type of strict check to be used. Due to "foo" == 0 === TRUE with in_array when strict = false,
-     * an option has been added to prevent this. When $strict = 0/false, the most
-     * secure non-strict check is implemented. if $strict = -1, the default in_array non-strict
-     * behaviour is used
-     *
-     * @var int
-     */
-    protected $strict = self::COMPARE_NOT_STRICT_AND_PREVENT_STR_TO_INT_VULNERABILITY;
-
-    /**
-     * Whether a recursive search should be done
-     *
-     * @var bool
-     */
-    protected $recursive = false;
-
-    /**
-     * Returns the haystack option
-     *
-     * @return mixed
-     * @throws Exception\RuntimeException if haystack option is not set
-     */
-    public function getHaystack()
-    {
-        if ($this->haystack === null) {
-            throw new Exception\RuntimeException('haystack option is mandatory');
-        }
-        return $this->haystack;
-    }
-
-    /**
-     * Sets the haystack option
-     *
-     * @param  mixed $haystack
-     * @return InArray Provides a fluent interface
-     */
-    public function setHaystack(array $haystack)
-    {
-        $this->haystack = $haystack;
-        return $this;
-    }
-
-    /**
-     * Returns the strict option
-     *
-     * @return bool|int
-     */
-    public function getStrict()
-    {
-        // To keep BC with new strict modes
-        if ($this->strict == self::COMPARE_NOT_STRICT_AND_PREVENT_STR_TO_INT_VULNERABILITY
-            || $this->strict == self::COMPARE_STRICT
-        ) {
-            return (bool) $this->strict;
-        }
-        return $this->strict;
-    }
-
-    /**
-     * Sets the strict option mode
-     * InArray::COMPARE_STRICT | InArray::COMPARE_NOT_STRICT_AND_PREVENT_STR_TO_INT_VULNERABILITY | InArray::COMPARE_NOT_STRICT
-     *
-     * @param  int $strict
-     * @return InArray Provides a fluent interface
-     * @throws Exception\InvalidArgumentException
-     */
-    public function setStrict($strict)
-    {
-        $checkTypes = array(
-            self::COMPARE_NOT_STRICT_AND_PREVENT_STR_TO_INT_VULNERABILITY,    // 0
-            self::COMPARE_STRICT,                                             // 1
-            self::COMPARE_NOT_STRICT                                          // -1
-        );
-
-        // validate strict value
-        if (!in_array($strict, $checkTypes)) {
-            throw new Exception\InvalidArgumentException('Strict option must be one of the COMPARE_ constants');
-        }
-
-        $this->strict = $strict;
-        return $this;
-    }
-
-    /**
-     * Returns the recursive option
-     *
-     * @return bool
-     */
-    public function getRecursive()
-    {
-        return $this->recursive;
-    }
-
-    /**
-     * Sets the recursive option
-     *
-     * @param  bool $recursive
-     * @return InArray Provides a fluent interface
-     */
-    public function setRecursive($recursive)
-    {
-        $this->recursive = (bool) $recursive;
-        return $this;
-    }
-
-    /**
-     * Returns true if and only if $value is contained in the haystack option. If the strict
-     * option is true, then the type of $value is also checked.
-     *
-     * @param mixed $value
-     * See {@link http://php.net/manual/function.in-array.php#104501}
-     * @return bool
-     */
-    public function isValid($value)
-    {
-        // we create a copy of the haystack in case we need to modify it
-        $haystack = $this->getHaystack();
-
-        // if the input is a string or float, and vulnerability protection is on
-        // we type cast the input to a string
-        if (self::COMPARE_NOT_STRICT_AND_PREVENT_STR_TO_INT_VULNERABILITY == $this->strict
-            && (is_int($value) || is_float($value))) {
-            $value = (string) $value;
-        }
-
-        $this->setValue($value);
-
-        if ($this->getRecursive()) {
-            $iterator = new RecursiveIteratorIterator(new RecursiveArrayIterator($haystack));
-            foreach ($iterator as $element) {
-                if (self::COMPARE_STRICT == $this->strict) {
-                    if ($element === $value) {
-                        return true;
-                    }
-                } else {
-                    // add protection to prevent string to int vuln's
-                    $el = $element;
-                    if (self::COMPARE_NOT_STRICT_AND_PREVENT_STR_TO_INT_VULNERABILITY == $this->strict
-                        && is_string($value) && (is_int($el) || is_float($el))
-                    ) {
-                        $el = (string) $el;
-                    }
-
-                    if ($el == $value) {
-                        return true;
-                    }
-                }
-            }
-        } else {
-            /**
-             * If the check is not strict, then, to prevent "asdf" being converted to 0
-             * and returning a false positive if 0 is in haystack, we type cast
-             * the haystack to strings. To prevent "56asdf" == 56 === TRUE we also
-             * type cast values like 56 to strings as well.
-             *
-             * This occurs only if the input is a string and a haystack member is an int
-             */
-            if (self::COMPARE_NOT_STRICT_AND_PREVENT_STR_TO_INT_VULNERABILITY == $this->strict
-                && is_string($value)
-            ) {
-                foreach ($haystack as &$h) {
-                    if (is_int($h) || is_float($h)) {
-                        $h = (string) $h;
-                    }
-                }
-            }
-
-            if (in_array($value, $haystack, self::COMPARE_STRICT == $this->strict)) {
-                return true;
-            }
-        }
-
-        $this->error(self::NOT_IN_ARRAY);
-        return false;
-    }
-}
diff --git a/civicrm/vendor/zendframework/zend-validator/src/Ip.php b/civicrm/vendor/zendframework/zend-validator/src/Ip.php
deleted file mode 100644
index aac2082825671645abbe76fdd05da79c670eab6b..0000000000000000000000000000000000000000
--- a/civicrm/vendor/zendframework/zend-validator/src/Ip.php
+++ /dev/null
@@ -1,189 +0,0 @@
-<?php
-/**
- * Zend Framework (http://framework.zend.com/)
- *
- * @link      http://github.com/zendframework/zf2 for the canonical source repository
- * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
- * @license   http://framework.zend.com/license/new-bsd New BSD License
- */
-
-namespace Zend\Validator;
-
-use Traversable;
-
-class Ip extends AbstractValidator
-{
-    const INVALID        = 'ipInvalid';
-    const NOT_IP_ADDRESS = 'notIpAddress';
-
-    /**
-     * @var array
-     */
-    protected $messageTemplates = array(
-        self::INVALID        => 'Invalid type given. String expected',
-        self::NOT_IP_ADDRESS => "The input does not appear to be a valid IP address",
-    );
-
-    /**
-     * Internal options
-     *
-     * @var array
-     */
-    protected $options = array(
-        'allowipv4'      => true, // Enable IPv4 Validation
-        'allowipv6'      => true, // Enable IPv6 Validation
-        'allowipvfuture' => false, // Enable IPvFuture Validation
-        'allowliteral'   => true, // Enable IPs in literal format (only IPv6 and IPvFuture)
-    );
-
-    /**
-     * Sets the options for this validator
-     *
-     * @param array|Traversable $options
-     * @throws Exception\InvalidArgumentException If there is any kind of IP allowed or $options is not an array or Traversable.
-     * @return AbstractValidator
-     */
-    public function setOptions($options = array())
-    {
-        parent::setOptions($options);
-
-        if (!$this->options['allowipv4'] && !$this->options['allowipv6'] && !$this->options['allowipvfuture']) {
-            throw new Exception\InvalidArgumentException('Nothing to validate. Check your options');
-        }
-
-        return $this;
-    }
-
-    /**
-     * Returns true if and only if $value is a valid IP address
-     *
-     * @param  mixed $value
-     * @return bool
-     */
-    public function isValid($value)
-    {
-        if (!is_string($value)) {
-            $this->error(self::INVALID);
-            return false;
-        }
-
-        $this->setValue($value);
-
-        if ($this->options['allowipv4'] && $this->validateIPv4($value)) {
-            return true;
-        } else {
-            if ((bool) $this->options['allowliteral']) {
-                static $regex = '/^\[(.*)\]$/';
-                if ((bool) preg_match($regex, $value, $matches)) {
-                    $value = $matches[1];
-                }
-            }
-
-            if (($this->options['allowipv6'] && $this->validateIPv6($value)) ||
-                ($this->options['allowipvfuture'] && $this->validateIPvFuture($value))
-            ) {
-                return true;
-            }
-        }
-        $this->error(self::NOT_IP_ADDRESS);
-        return false;
-    }
-
-    /**
-     * Validates an IPv4 address
-     *
-     * @param string $value
-     * @return bool
-     */
-    protected function validateIPv4($value)
-    {
-        if (preg_match('/^([01]{8}.){3}[01]{8}\z/i', $value)) {
-            // binary format  00000000.00000000.00000000.00000000
-            $value = bindec(substr($value, 0, 8)) . '.' . bindec(substr($value, 9, 8)) . '.'
-                   . bindec(substr($value, 18, 8)) . '.' . bindec(substr($value, 27, 8));
-        } elseif (preg_match('/^([0-9]{3}.){3}[0-9]{3}\z/i', $value)) {
-            // octet format 777.777.777.777
-            $value = (int) substr($value, 0, 3) . '.' . (int) substr($value, 4, 3) . '.'
-                   . (int) substr($value, 8, 3) . '.' . (int) substr($value, 12, 3);
-        } elseif (preg_match('/^([0-9a-f]{2}.){3}[0-9a-f]{2}\z/i', $value)) {
-            // hex format ff.ff.ff.ff
-            $value = hexdec(substr($value, 0, 2)) . '.' . hexdec(substr($value, 3, 2)) . '.'
-                   . hexdec(substr($value, 6, 2)) . '.' . hexdec(substr($value, 9, 2));
-        }
-
-        $ip2long = ip2long($value);
-        if ($ip2long === false) {
-            return false;
-        }
-
-        return ($value == long2ip($ip2long));
-    }
-
-    /**
-     * Validates an IPv6 address
-     *
-     * @param  string $value Value to check against
-     * @return bool True when $value is a valid ipv6 address
-     *                 False otherwise
-     */
-    protected function validateIPv6($value)
-    {
-        if (strlen($value) < 3) {
-            return $value == '::';
-        }
-
-        if (strpos($value, '.')) {
-            $lastcolon = strrpos($value, ':');
-            if (!($lastcolon && $this->validateIPv4(substr($value, $lastcolon + 1)))) {
-                return false;
-            }
-
-            $value = substr($value, 0, $lastcolon) . ':0:0';
-        }
-
-        if (strpos($value, '::') === false) {
-            return preg_match('/\A(?:[a-f0-9]{1,4}:){7}[a-f0-9]{1,4}\z/i', $value);
-        }
-
-        $colonCount = substr_count($value, ':');
-        if ($colonCount < 8) {
-            return preg_match('/\A(?::|(?:[a-f0-9]{1,4}:)+):(?:(?:[a-f0-9]{1,4}:)*[a-f0-9]{1,4})?\z/i', $value);
-        }
-
-        // special case with ending or starting double colon
-        if ($colonCount == 8) {
-            return preg_match('/\A(?:::)?(?:[a-f0-9]{1,4}:){6}[a-f0-9]{1,4}(?:::)?\z/i', $value);
-        }
-
-        return false;
-    }
-
-    /**
-     * Validates an IPvFuture address.
-     *
-     * IPvFuture is loosely defined in the Section 3.2.2 of RFC 3986
-     *
-     * @param  string $value Value to check against
-     * @return bool True when $value is a valid IPvFuture address
-     *                 False otherwise
-     */
-    protected function validateIPvFuture($value)
-    {
-        /*
-         * ABNF:
-         * IPvFuture  = "v" 1*HEXDIG "." 1*( unreserved / sub-delims / ":" )
-         * unreserved    = ALPHA / DIGIT / "-" / "." / "_" / "~"
-         * sub-delims    = "!" / "$" / "&" / "'" / "(" / ")" / "*" / "+" / ","
-         *               / ";" / "="
-         */
-        static $regex = '/^v([[:xdigit:]]+)\.[[:alnum:]\-\._~!\$&\'\(\)\*\+,;=:]+$/';
-
-        $result = (bool) preg_match($regex, $value, $matches);
-
-        /*
-         * "As such, implementations must not provide the version flag for the
-         *  existing IPv4 and IPv6 literal address forms described below."
-         */
-        return ($result && $matches[1] != 4 && $matches[1] != 6);
-    }
-}
diff --git a/civicrm/vendor/zendframework/zend-validator/src/IsInstanceOf.php b/civicrm/vendor/zendframework/zend-validator/src/IsInstanceOf.php
deleted file mode 100644
index d45fabdae995527be2f91d8f0e15821c86e81b93..0000000000000000000000000000000000000000
--- a/civicrm/vendor/zendframework/zend-validator/src/IsInstanceOf.php
+++ /dev/null
@@ -1,107 +0,0 @@
-<?php
-/**
- * Zend Framework (http://framework.zend.com/)
- *
- * @link      http://github.com/zendframework/zf2 for the canonical source repository
- * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
- * @license   http://framework.zend.com/license/new-bsd New BSD License
- */
-namespace Zend\Validator;
-
-use Traversable;
-
-class IsInstanceOf extends AbstractValidator
-{
-    const NOT_INSTANCE_OF = 'notInstanceOf';
-
-    /**
-     * Validation failure message template definitions
-     *
-     * @var array
-     */
-    protected $messageTemplates = array(
-        self::NOT_INSTANCE_OF => "The input is not an instance of '%className%'",
-    );
-
-    /**
-     * Additional variables available for validation failure messages
-     *
-     * @var array
-     */
-    protected $messageVariables = array(
-        'className' => 'className'
-    );
-
-    /**
-     * Class name
-     *
-     * @var string
-     */
-    protected $className;
-
-    /**
-     * Sets validator options
-     *
-     * @param  array|Traversable $options
-     * @throws Exception\InvalidArgumentException
-     */
-    public function __construct($options = null)
-    {
-        if ($options instanceof Traversable) {
-            $options = iterator_to_array($options);
-        }
-
-        // If argument is not an array, consider first argument as class name
-        if (!is_array($options)) {
-            $options = func_get_args();
-
-            $tmpOptions = array();
-            $tmpOptions['className'] = array_shift($options);
-
-            $options = $tmpOptions;
-        }
-
-        if (!array_key_exists('className', $options)) {
-            throw new Exception\InvalidArgumentException('Missing option "className"');
-        }
-
-        parent::__construct($options);
-    }
-
-    /**
-     * Get class name
-     *
-     * @return string
-     */
-    public function getClassName()
-    {
-        return $this->className;
-    }
-
-    /**
-     * Set class name
-     *
-     * @param  string $className
-     * @return self
-     */
-    public function setClassName($className)
-    {
-        $this->className = $className;
-        return $this;
-    }
-
-    /**
-     * Returns true if $value is instance of $this->className
-     *
-     * @param  mixed $value
-     * @return bool
-     */
-    public function isValid($value)
-    {
-        if ($value instanceof $this->className) {
-            return true;
-        }
-        $this->error(self::NOT_INSTANCE_OF);
-        return false;
-    }
-}
diff --git a/civicrm/vendor/zendframework/zend-validator/src/Isbn.php b/civicrm/vendor/zendframework/zend-validator/src/Isbn.php
deleted file mode 100644
index 00f7324b809fbd9902257d5e535e679ef127d3ee..0000000000000000000000000000000000000000
--- a/civicrm/vendor/zendframework/zend-validator/src/Isbn.php
+++ /dev/null
@@ -1,208 +0,0 @@
-<?php
-/**
- * Zend Framework (http://framework.zend.com/)
- *
- * @link      http://github.com/zendframework/zf2 for the canonical source repository
- * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
- * @license   http://framework.zend.com/license/new-bsd New BSD License
- */
-
-namespace Zend\Validator;
-
-class Isbn extends AbstractValidator
-{
-    const AUTO    = 'auto';
-    const ISBN10  = '10';
-    const ISBN13  = '13';
-    const INVALID = 'isbnInvalid';
-    const NO_ISBN = 'isbnNoIsbn';
-
-    /**
-     * Validation failure message template definitions.
-     *
-     * @var array
-     */
-    protected $messageTemplates = array(
-        self::INVALID => "Invalid type given. String or integer expected",
-        self::NO_ISBN => "The input is not a valid ISBN number",
-    );
-
-    protected $options = array(
-        'type'      => self::AUTO, // Allowed type
-        'separator' => '',         // Separator character
-    );
-
-    /**
-     * Detect input format.
-     *
-     * @return string
-     */
-    protected function detectFormat()
-    {
-        // prepare separator and pattern list
-        $sep      = quotemeta($this->getSeparator());
-        $patterns = array();
-        $lengths  = array();
-        $type     = $this->getType();
-
-        // check for ISBN-10
-        if ($type == self::ISBN10 || $type == self::AUTO) {
-            if (empty($sep)) {
-                $pattern = '/^[0-9]{9}[0-9X]{1}$/';
-                $length  = 10;
-            } else {
-                $pattern = "/^[0-9]{1,7}[{$sep}]{1}[0-9]{1,7}[{$sep}]{1}[0-9]{1,7}[{$sep}]{1}[0-9X]{1}$/";
-                $length  = 13;
-            }
-
-            $patterns[$pattern] = self::ISBN10;
-            $lengths[$pattern]  = $length;
-        }
-
-        // check for ISBN-13
-        if ($type == self::ISBN13 || $type == self::AUTO) {
-            if (empty($sep)) {
-                $pattern = '/^[0-9]{13}$/';
-                $length  = 13;
-            } else {
-                $pattern = "/^[0-9]{1,9}[{$sep}]{1}[0-9]{1,5}[{$sep}]{1}[0-9]{1,9}[{$sep}]{1}[0-9]{1,9}[{$sep}]{1}[0-9]{1}$/";
-                $length  = 17;
-            }
-
-            $patterns[$pattern] = self::ISBN13;
-            $lengths[$pattern]  = $length;
-        }
-
-        // check pattern list
-        foreach ($patterns as $pattern => $type) {
-            if ((strlen($this->getValue()) == $lengths[$pattern]) && preg_match($pattern, $this->getValue())) {
-                return $type;
-            }
-        }
-
-        return;
-    }
-
-    /**
-     * Returns true if and only if $value is a valid ISBN.
-     *
-     * @param  string $value
-     * @return bool
-     */
-    public function isValid($value)
-    {
-        if (!is_string($value) && !is_int($value)) {
-            $this->error(self::INVALID);
-            return false;
-        }
-
-        $value = (string) $value;
-        $this->setValue($value);
-
-        switch ($this->detectFormat()) {
-            case self::ISBN10:
-                // sum
-                $isbn10 = str_replace($this->getSeparator(), '', $value);
-                $sum    = 0;
-                for ($i = 0; $i < 9; $i++) {
-                    $sum += (10 - $i) * $isbn10{$i};
-                }
-
-                // checksum
-                $checksum = 11 - ($sum % 11);
-                if ($checksum == 11) {
-                    $checksum = '0';
-                } elseif ($checksum == 10) {
-                    $checksum = 'X';
-                }
-                break;
-
-            case self::ISBN13:
-                // sum
-                $isbn13 = str_replace($this->getSeparator(), '', $value);
-                $sum    = 0;
-                for ($i = 0; $i < 12; $i++) {
-                    if ($i % 2 == 0) {
-                        $sum += $isbn13{$i};
-                    } else {
-                        $sum += 3 * $isbn13{$i};
-                    }
-                }
-                // checksum
-                $checksum = 10 - ($sum % 10);
-                if ($checksum == 10) {
-                    $checksum = '0';
-                }
-                break;
-
-            default:
-                $this->error(self::NO_ISBN);
-                return false;
-        }
-
-        // validate
-        if (substr($this->getValue(), -1) != $checksum) {
-            $this->error(self::NO_ISBN);
-            return false;
-        }
-        return true;
-    }
-
-    /**
-     * Set separator characters.
-     *
-     * It is allowed only empty string, hyphen and space.
-     *
-     * @param  string $separator
-     * @throws Exception\InvalidArgumentException When $separator is not valid
-     * @return Isbn Provides a fluent interface
-     */
-    public function setSeparator($separator)
-    {
-        // check separator
-        if (!in_array($separator, array('-', ' ', ''))) {
-            throw new Exception\InvalidArgumentException('Invalid ISBN separator.');
-        }
-
-        $this->options['separator'] = $separator;
-        return $this;
-    }
-
-    /**
-     * Get separator characters.
-     *
-     * @return string
-     */
-    public function getSeparator()
-    {
-        return $this->options['separator'];
-    }
-
-    /**
-     * Set allowed ISBN type.
-     *
-     * @param  string $type
-     * @throws Exception\InvalidArgumentException When $type is not valid
-     * @return Isbn Provides a fluent interface
-     */
-    public function setType($type)
-    {
-        // check type
-        if (!in_array($type, array(self::AUTO, self::ISBN10, self::ISBN13))) {
-            throw new Exception\InvalidArgumentException('Invalid ISBN type');
-        }
-
-        $this->options['type'] = $type;
-        return $this;
-    }
-
-    /**
-     * Get allowed ISBN type.
-     *
-     * @return string
-     */
-    public function getType()
-    {
-        return $this->options['type'];
-    }
-}
diff --git a/civicrm/vendor/zendframework/zend-validator/src/LessThan.php b/civicrm/vendor/zendframework/zend-validator/src/LessThan.php
deleted file mode 100644
index 0dbaee1a64fcae4af8b8301199aa599ea3dffa52..0000000000000000000000000000000000000000
--- a/civicrm/vendor/zendframework/zend-validator/src/LessThan.php
+++ /dev/null
@@ -1,161 +0,0 @@
-<?php
-/**
- * Zend Framework (http://framework.zend.com/)
- *
- * @link      http://github.com/zendframework/zf2 for the canonical source repository
- * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
- * @license   http://framework.zend.com/license/new-bsd New BSD License
- */
-
-namespace Zend\Validator;
-
-use Traversable;
-use Zend\Stdlib\ArrayUtils;
-
-class LessThan extends AbstractValidator
-{
-    const NOT_LESS           = 'notLessThan';
-    const NOT_LESS_INCLUSIVE = 'notLessThanInclusive';
-
-    /**
-     * Validation failure message template definitions
-     *
-     * @var array
-     */
-    protected $messageTemplates = array(
-        self::NOT_LESS           => "The input is not less than '%max%'",
-        self::NOT_LESS_INCLUSIVE => "The input is not less or equal than '%max%'"
-    );
-
-    /**
-     * Additional variables available for validation failure messages
-     *
-     * @var array
-     */
-    protected $messageVariables = array(
-        'max' => 'max'
-    );
-
-    /**
-     * Maximum value
-     *
-     * @var mixed
-     */
-    protected $max;
-
-    /**
-     * Whether to do inclusive comparisons, allowing equivalence to max
-     *
-     * If false, then strict comparisons are done, and the value may equal
-     * the max option
-     *
-     * @var bool
-     */
-    protected $inclusive;
-
-    /**
-     * Sets validator options
-     *
-     * @param  array|Traversable $options
-     * @throws Exception\InvalidArgumentException
-     */
-    public function __construct($options = null)
-    {
-        if ($options instanceof Traversable) {
-            $options = ArrayUtils::iteratorToArray($options);
-        }
-        if (!is_array($options)) {
-            $options = func_get_args();
-            $temp['max'] = array_shift($options);
-
-            if (!empty($options)) {
-                $temp['inclusive'] = array_shift($options);
-            }
-
-            $options = $temp;
-        }
-
-        if (!array_key_exists('max', $options)) {
-            throw new Exception\InvalidArgumentException("Missing option 'max'");
-        }
-
-        if (!array_key_exists('inclusive', $options)) {
-            $options['inclusive'] = false;
-        }
-
-        $this->setMax($options['max'])
-             ->setInclusive($options['inclusive']);
-
-        parent::__construct($options);
-    }
-
-    /**
-     * Returns the max option
-     *
-     * @return mixed
-     */
-    public function getMax()
-    {
-        return $this->max;
-    }
-
-    /**
-     * Sets the max option
-     *
-     * @param  mixed $max
-     * @return LessThan Provides a fluent interface
-     */
-    public function setMax($max)
-    {
-        $this->max = $max;
-        return $this;
-    }
-
-    /**
-     * Returns the inclusive option
-     *
-     * @return bool
-     */
-    public function getInclusive()
-    {
-        return $this->inclusive;
-    }
-
-    /**
-     * Sets the inclusive option
-     *
-     * @param  bool $inclusive
-     * @return LessThan Provides a fluent interface
-     */
-    public function setInclusive($inclusive)
-    {
-        $this->inclusive = $inclusive;
-        return $this;
-    }
-
-    /**
-     * Returns true if and only if $value is less than max option, inclusively
-     * when the inclusive option is true
-     *
-     * @param  mixed $value
-     * @return bool
-     */
-    public function isValid($value)
-    {
-        $this->setValue($value);
-
-        if ($this->inclusive) {
-            if ($value > $this->max) {
-                $this->error(self::NOT_LESS_INCLUSIVE);
-                return false;
-            }
-        } else {
-            if ($value >= $this->max) {
-                $this->error(self::NOT_LESS);
-                return false;
-            }
-        }
-
-        return true;
-    }
-}
diff --git a/civicrm/vendor/zendframework/zend-validator/src/NotEmpty.php b/civicrm/vendor/zendframework/zend-validator/src/NotEmpty.php
deleted file mode 100644
index 9621a5d616f41678d2548f5c3a5e6cfa622f6b29..0000000000000000000000000000000000000000
--- a/civicrm/vendor/zendframework/zend-validator/src/NotEmpty.php
+++ /dev/null
@@ -1,301 +0,0 @@
-<?php
-/**
- * Zend Framework (http://framework.zend.com/)
- *
- * @link      http://github.com/zendframework/zf2 for the canonical source repository
- * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
- * @license   http://framework.zend.com/license/new-bsd New BSD License
- */
-
-namespace Zend\Validator;
-
-use Traversable;
-use Zend\Stdlib\ArrayUtils;
-
-class NotEmpty extends AbstractValidator
-{
-    const BOOLEAN       = 0x001;
-    const INTEGER       = 0x002;
-    const FLOAT         = 0x004;
-    const STRING        = 0x008;
-    const ZERO          = 0x010;
-    const EMPTY_ARRAY   = 0x020;
-    const NULL          = 0x040;
-    const PHP           = 0x07F;
-    const SPACE         = 0x080;
-    const OBJECT        = 0x100;
-    const OBJECT_STRING = 0x200;
-    const OBJECT_COUNT  = 0x400;
-    const ALL           = 0x7FF;
-
-    const INVALID  = 'notEmptyInvalid';
-    const IS_EMPTY = 'isEmpty';
-
-    protected $constants = array(
-        self::BOOLEAN       => 'boolean',
-        self::INTEGER       => 'integer',
-        self::FLOAT         => 'float',
-        self::STRING        => 'string',
-        self::ZERO          => 'zero',
-        self::EMPTY_ARRAY   => 'array',
-        self::NULL          => 'null',
-        self::PHP           => 'php',
-        self::SPACE         => 'space',
-        self::OBJECT        => 'object',
-        self::OBJECT_STRING => 'objectstring',
-        self::OBJECT_COUNT  => 'objectcount',
-        self::ALL           => 'all',
-    );
-
-    /**
-     * Default value for types; value = 0b000111101001
-     *
-     * @var array
-     */
-    protected $defaultType = array(
-        self::OBJECT,
-        self::SPACE,
-        self::NULL,
-        self::EMPTY_ARRAY,
-        self::STRING,
-        self::BOOLEAN
-    );
-
-    /**
-     * @var array
-     */
-    protected $messageTemplates = array(
-        self::IS_EMPTY => "Value is required and can't be empty",
-        self::INVALID  => "Invalid type given. String, integer, float, boolean or array expected",
-    );
-
-    /**
-     * Options for this validator
-     *
-     * @var array
-     */
-    protected $options = array();
-
-    /**
-     * Constructor
-     *
-     * @param  array|Traversable|int $options OPTIONAL
-     */
-    public function __construct($options = null)
-    {
-        $this->setType($this->defaultType);
-
-        if ($options instanceof Traversable) {
-            $options = ArrayUtils::iteratorToArray($options);
-        }
-
-        if (!is_array($options)) {
-            $options = func_get_args();
-            $temp    = array();
-            if (!empty($options)) {
-                $temp['type'] = array_shift($options);
-            }
-
-            $options = $temp;
-        }
-
-        if (is_array($options)) {
-            if (!array_key_exists('type', $options)) {
-                $detected = 0;
-                $found    = false;
-                foreach ($options as $option) {
-                    if (in_array($option, $this->constants, true)) {
-                        $found = true;
-                        $detected += array_search($option, $this->constants);
-                    }
-                }
-
-                if ($found) {
-                    $options['type'] = $detected;
-                }
-            }
-        }
-
-        parent::__construct($options);
-    }
-
-    /**
-     * Returns the set types
-     *
-     * @return array
-     */
-    public function getType()
-    {
-        return $this->options['type'];
-    }
-
-    /**
-     * @return int
-     */
-    public function getDefaultType()
-    {
-        return $this->calculateTypeValue($this->defaultType);
-    }
-
-    /**
-     * @param array|int|string $type
-     * @return int
-     */
-    protected function calculateTypeValue($type)
-    {
-        if (is_array($type)) {
-            $detected = 0;
-            foreach ($type as $value) {
-                if (is_int($value)) {
-                    $detected |= $value;
-                } elseif (in_array($value, $this->constants)) {
-                    $detected |= array_search($value, $this->constants);
-                }
-            }
-
-            $type = $detected;
-        } elseif (is_string($type) && in_array($type, $this->constants)) {
-            $type = array_search($type, $this->constants);
-        }
-
-        return $type;
-    }
-
-    /**
-     * Set the types
-     *
-     * @param  int|array $type
-     * @throws Exception\InvalidArgumentException
-     * @return NotEmpty
-     */
-    public function setType($type = null)
-    {
-        $type = $this->calculateTypeValue($type);
-
-        if (!is_int($type) || ($type < 0) || ($type > self::ALL)) {
-            throw new Exception\InvalidArgumentException('Unknown type');
-        }
-
-        $this->options['type'] = $type;
-
-        return $this;
-    }
-
-    /**
-     * Returns true if and only if $value is not an empty value.
-     *
-     * @param  string $value
-     * @return bool
-     */
-    public function isValid($value)
-    {
-        if ($value !== null && !is_string($value) && !is_int($value) && !is_float($value) &&
-            !is_bool($value) && !is_array($value) && !is_object($value)
-        ) {
-            $this->error(self::INVALID);
-            return false;
-        }
-
-        $type    = $this->getType();
-        $this->setValue($value);
-        $object  = false;
-
-        // OBJECT_COUNT (countable object)
-        if ($type & self::OBJECT_COUNT) {
-            $object = true;
-
-            if (is_object($value) && ($value instanceof \Countable) && (count($value) == 0)) {
-                $this->error(self::IS_EMPTY);
-                return false;
-            }
-        }
-
-        // OBJECT_STRING (object's toString)
-        if ($type & self::OBJECT_STRING) {
-            $object = true;
-
-            if ((is_object($value) && (!method_exists($value, '__toString'))) ||
-                (is_object($value) && (method_exists($value, '__toString')) && (((string) $value) == ""))) {
-                $this->error(self::IS_EMPTY);
-                return false;
-            }
-        }
-
-        // OBJECT (object)
-        if ($type & self::OBJECT) {
-            // fall trough, objects are always not empty
-        } elseif ($object === false) {
-            // object not allowed but object given -> return false
-            if (is_object($value)) {
-                $this->error(self::IS_EMPTY);
-                return false;
-            }
-        }
-
-        // SPACE ('   ')
-        if ($type & self::SPACE) {
-            if (is_string($value) && (preg_match('/^\s+$/s', $value))) {
-                $this->error(self::IS_EMPTY);
-                return false;
-            }
-        }
-
-        // NULL (null)
-        if ($type & self::NULL) {
-            if ($value === null) {
-                $this->error(self::IS_EMPTY);
-                return false;
-            }
-        }
-
-        // EMPTY_ARRAY (array())
-        if ($type & self::EMPTY_ARRAY) {
-            if (is_array($value) && ($value == array())) {
-                $this->error(self::IS_EMPTY);
-                return false;
-            }
-        }
-
-        // ZERO ('0')
-        if ($type & self::ZERO) {
-            if (is_string($value) && ($value == '0')) {
-                $this->error(self::IS_EMPTY);
-                return false;
-            }
-        }
-
-        // STRING ('')
-        if ($type & self::STRING) {
-            if (is_string($value) && ($value == '')) {
-                $this->error(self::IS_EMPTY);
-                return false;
-            }
-        }
-
-        // FLOAT (0.0)
-        if ($type & self::FLOAT) {
-            if (is_float($value) && ($value == 0.0)) {
-                $this->error(self::IS_EMPTY);
-                return false;
-            }
-        }
-
-        // INTEGER (0)
-        if ($type & self::INTEGER) {
-            if (is_int($value) && ($value == 0)) {
-                $this->error(self::IS_EMPTY);
-                return false;
-            }
-        }
-
-        // BOOLEAN (false)
-        if ($type & self::BOOLEAN) {
-            if (is_bool($value) && ($value == false)) {
-                $this->error(self::IS_EMPTY);
-                return false;
-            }
-        }
-
-        return true;
-    }
-}
diff --git a/civicrm/vendor/zendframework/zend-validator/src/Regex.php b/civicrm/vendor/zendframework/zend-validator/src/Regex.php
deleted file mode 100644
index b8dfb2fa252ad33a6dd0f8fcc25240d06b1b2dfa..0000000000000000000000000000000000000000
--- a/civicrm/vendor/zendframework/zend-validator/src/Regex.php
+++ /dev/null
@@ -1,141 +0,0 @@
-<?php
-/**
- * Zend Framework (http://framework.zend.com/)
- *
- * @link      http://github.com/zendframework/zf2 for the canonical source repository
- * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
- * @license   http://framework.zend.com/license/new-bsd New BSD License
- */
-
-namespace Zend\Validator;
-
-use Traversable;
-use Zend\Stdlib\ArrayUtils;
-use Zend\Stdlib\ErrorHandler;
-
-class Regex extends AbstractValidator
-{
-    const INVALID   = 'regexInvalid';
-    const NOT_MATCH = 'regexNotMatch';
-    const ERROROUS  = 'regexErrorous';
-
-    /**
-     * @var array
-     */
-    protected $messageTemplates = array(
-        self::INVALID   => "Invalid type given. String, integer or float expected",
-        self::NOT_MATCH => "The input does not match against pattern '%pattern%'",
-        self::ERROROUS  => "There was an internal error while using the pattern '%pattern%'",
-    );
-
-    /**
-     * @var array
-     */
-    protected $messageVariables = array(
-        'pattern' => 'pattern'
-    );
-
-    /**
-     * Regular expression pattern
-     *
-     * @var string
-     */
-    protected $pattern;
-
-    /**
-     * Sets validator options
-     *
-     * @param  string|Traversable $pattern
-     * @throws Exception\InvalidArgumentException On missing 'pattern' parameter
-     */
-    public function __construct($pattern)
-    {
-        if (is_string($pattern)) {
-            $this->setPattern($pattern);
-            parent::__construct(array());
-            return;
-        }
-
-        if ($pattern instanceof Traversable) {
-            $pattern = ArrayUtils::iteratorToArray($pattern);
-        }
-
-        if (!is_array($pattern)) {
-            throw new Exception\InvalidArgumentException('Invalid options provided to constructor');
-        }
-
-        if (!array_key_exists('pattern', $pattern)) {
-            throw new Exception\InvalidArgumentException("Missing option 'pattern'");
-        }
-
-        $this->setPattern($pattern['pattern']);
-        unset($pattern['pattern']);
-        parent::__construct($pattern);
-    }
-
-    /**
-     * Returns the pattern option
-     *
-     * @return string
-     */
-    public function getPattern()
-    {
-        return $this->pattern;
-    }
-
-    /**
-     * Sets the pattern option
-     *
-     * @param  string $pattern
-     * @throws Exception\InvalidArgumentException if there is a fatal error in pattern matching
-     * @return Regex Provides a fluent interface
-     */
-    public function setPattern($pattern)
-    {
-        ErrorHandler::start();
-        $this->pattern = (string) $pattern;
-        $status        = preg_match($this->pattern, "Test");
-        $error         = ErrorHandler::stop();
-
-        if (false === $status) {
-            throw new Exception\InvalidArgumentException(
-                "Internal error parsing the pattern '{$this->pattern}'",
-                0,
-                $error
-            );
-        }
-
-        return $this;
-    }
-
-    /**
-     * Returns true if and only if $value matches against the pattern option
-     *
-     * @param  string $value
-     * @return bool
-     */
-    public function isValid($value)
-    {
-        if (!is_string($value) && !is_int($value) && !is_float($value)) {
-            $this->error(self::INVALID);
-            return false;
-        }
-
-        $this->setValue($value);
-
-        ErrorHandler::start();
-        $status = preg_match($this->pattern, $value);
-        ErrorHandler::stop();
-        if (false === $status) {
-            $this->error(self::ERROROUS);
-            return false;
-        }
-
-        if (!$status) {
-            $this->error(self::NOT_MATCH);
-            return false;
-        }
-
-        return true;
-    }
-}
diff --git a/civicrm/vendor/zendframework/zend-validator/src/Sitemap/Changefreq.php b/civicrm/vendor/zendframework/zend-validator/src/Sitemap/Changefreq.php
deleted file mode 100644
index 090d8042e19766556eb49326f7892cc7027b5d53..0000000000000000000000000000000000000000
--- a/civicrm/vendor/zendframework/zend-validator/src/Sitemap/Changefreq.php
+++ /dev/null
@@ -1,75 +0,0 @@
-<?php
-/**
- * Zend Framework (http://framework.zend.com/)
- *
- * @link      http://github.com/zendframework/zf2 for the canonical source repository
- * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
- * @license   http://framework.zend.com/license/new-bsd New BSD License
- */
-
-namespace Zend\Validator\Sitemap;
-
-use Zend\Validator\AbstractValidator;
-
-/**
- * Validates whether a given value is valid as a sitemap <changefreq> value
- *
- * @link       http://www.sitemaps.org/protocol.php Sitemaps XML format
- */
-class Changefreq extends AbstractValidator
-{
-    /**
-     * Validation key for not valid
-     *
-     */
-    const NOT_VALID = 'sitemapChangefreqNotValid';
-    const INVALID   = 'sitemapChangefreqInvalid';
-
-    /**
-     * Validation failure message template definitions
-     *
-     * @var array
-     */
-    protected $messageTemplates = array(
-        self::NOT_VALID => "The input is not a valid sitemap changefreq",
-        self::INVALID   => "Invalid type given. String expected",
-    );
-
-    /**
-     * Valid change frequencies
-     *
-     * @var array
-     */
-    protected $changeFreqs = array(
-        'always',  'hourly', 'daily', 'weekly',
-        'monthly', 'yearly', 'never'
-    );
-
-    /**
-     * Validates if a string is valid as a sitemap changefreq
-     *
-     * @link http://www.sitemaps.org/protocol.php#changefreqdef <changefreq>
-     *
-     * @param  string  $value  value to validate
-     * @return bool
-     */
-    public function isValid($value)
-    {
-        if (!is_string($value)) {
-            $this->error(self::INVALID);
-            return false;
-        }
-
-        $this->setValue($value);
-        if (!is_string($value)) {
-            return false;
-        }
-
-        if (!in_array($value, $this->changeFreqs, true)) {
-            $this->error(self::NOT_VALID);
-            return false;
-        }
-
-        return true;
-    }
-}
diff --git a/civicrm/vendor/zendframework/zend-validator/src/Sitemap/Lastmod.php b/civicrm/vendor/zendframework/zend-validator/src/Sitemap/Lastmod.php
deleted file mode 100644
index 49293ab729c77e9f78762047d6e637d53f681317..0000000000000000000000000000000000000000
--- a/civicrm/vendor/zendframework/zend-validator/src/Sitemap/Lastmod.php
+++ /dev/null
@@ -1,71 +0,0 @@
-<?php
-/**
- * Zend Framework (http://framework.zend.com/)
- *
- * @link      http://github.com/zendframework/zf2 for the canonical source repository
- * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
- * @license   http://framework.zend.com/license/new-bsd New BSD License
- */
-
-namespace Zend\Validator\Sitemap;
-
-use Zend\Stdlib\ErrorHandler;
-use Zend\Validator\AbstractValidator;
-
-/**
- * Validates whether a given value is valid as a sitemap <lastmod> value
- *
- * @link       http://www.sitemaps.org/protocol.php Sitemaps XML format
- */
-class Lastmod extends AbstractValidator
-{
-    /**
-     * Regular expression to use when validating
-     *
-     */
-    const LASTMOD_REGEX = '/^[0-9]{4}-(0[1-9]|1[0-2])-(0[1-9]|[1-2][0-9]|3[0-1])(T([0-1][0-9]|2[0-3])(:[0-5][0-9])(:[0-5][0-9])?(\\+|-)([0-1][0-9]|2[0-3]):[0-5][0-9])?$/';
-
-    /**
-     * Validation key for not valid
-     *
-     */
-    const NOT_VALID = 'sitemapLastmodNotValid';
-    const INVALID   = 'sitemapLastmodInvalid';
-
-    /**
-     * Validation failure message template definitions
-     *
-     * @var array
-     */
-    protected $messageTemplates = array(
-        self::NOT_VALID => "The input is not a valid sitemap lastmod",
-        self::INVALID   => "Invalid type given. String expected",
-    );
-
-    /**
-     * Validates if a string is valid as a sitemap lastmod
-     *
-     * @link http://www.sitemaps.org/protocol.php#lastmoddef <lastmod>
-     *
-     * @param  string  $value  value to validate
-     * @return bool
-     */
-    public function isValid($value)
-    {
-        if (!is_string($value)) {
-            $this->error(self::INVALID);
-            return false;
-        }
-
-        $this->setValue($value);
-        ErrorHandler::start();
-        $result = preg_match(self::LASTMOD_REGEX, $value);
-        ErrorHandler::stop();
-        if ($result != 1) {
-            $this->error(self::NOT_VALID);
-            return false;
-        }
-
-        return true;
-    }
-}
diff --git a/civicrm/vendor/zendframework/zend-validator/src/Sitemap/Loc.php b/civicrm/vendor/zendframework/zend-validator/src/Sitemap/Loc.php
deleted file mode 100644
index 549191782339762873e5bda4af0b6a5436f447e6..0000000000000000000000000000000000000000
--- a/civicrm/vendor/zendframework/zend-validator/src/Sitemap/Loc.php
+++ /dev/null
@@ -1,65 +0,0 @@
-<?php
-/**
- * Zend Framework (http://framework.zend.com/)
- *
- * @link      http://github.com/zendframework/zf2 for the canonical source repository
- * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
- * @license   http://framework.zend.com/license/new-bsd New BSD License
- */
-
-namespace Zend\Validator\Sitemap;
-
-use Zend\Uri;
-use Zend\Validator\AbstractValidator;
-
-/**
- * Validates whether a given value is valid as a sitemap <loc> value
- *
- * @link       http://www.sitemaps.org/protocol.php Sitemaps XML format
- *
- * @see        Zend\Uri\Uri
- */
-class Loc extends AbstractValidator
-{
-    /**
-     * Validation key for not valid
-     *
-     */
-    const NOT_VALID = 'sitemapLocNotValid';
-    const INVALID   = 'sitemapLocInvalid';
-
-    /**
-     * Validation failure message template definitions
-     *
-     * @var array
-     */
-    protected $messageTemplates = array(
-        self::NOT_VALID => "The input is not a valid sitemap location",
-        self::INVALID   => "Invalid type given. String expected",
-    );
-
-    /**
-     * Validates if a string is valid as a sitemap location
-     *
-     * @link http://www.sitemaps.org/protocol.php#locdef <loc>
-     *
-     * @param  string  $value  value to validate
-     * @return bool
-     */
-    public function isValid($value)
-    {
-        if (!is_string($value)) {
-            $this->error(self::INVALID);
-            return false;
-        }
-
-        $this->setValue($value);
-        $uri = Uri\UriFactory::factory($value);
-        if (!$uri->isValid()) {
-            $this->error(self::NOT_VALID);
-            return false;
-        }
-
-        return true;
-    }
-}
diff --git a/civicrm/vendor/zendframework/zend-validator/src/Sitemap/Priority.php b/civicrm/vendor/zendframework/zend-validator/src/Sitemap/Priority.php
deleted file mode 100644
index ea536934b5ea08c49018996fa5548d1035c860b3..0000000000000000000000000000000000000000
--- a/civicrm/vendor/zendframework/zend-validator/src/Sitemap/Priority.php
+++ /dev/null
@@ -1,62 +0,0 @@
-<?php
-/**
- * Zend Framework (http://framework.zend.com/)
- *
- * @link      http://github.com/zendframework/zf2 for the canonical source repository
- * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
- * @license   http://framework.zend.com/license/new-bsd New BSD License
- */
-
-namespace Zend\Validator\Sitemap;
-
-use Zend\Validator\AbstractValidator;
-
-/**
- * Validates whether a given value is valid as a sitemap <priority> value
- *
- * @link       http://www.sitemaps.org/protocol.php Sitemaps XML format
- */
-class Priority extends AbstractValidator
-{
-    /**
-     * Validation key for not valid
-     *
-     */
-    const NOT_VALID = 'sitemapPriorityNotValid';
-    const INVALID   = 'sitemapPriorityInvalid';
-
-    /**
-     * Validation failure message template definitions
-     *
-     * @var array
-     */
-    protected $messageTemplates = array(
-        self::NOT_VALID => "The input is not a valid sitemap priority",
-        self::INVALID   => "Invalid type given. Numeric string, integer or float expected",
-    );
-
-    /**
-     * Validates if a string is valid as a sitemap priority
-     *
-     * @link http://www.sitemaps.org/protocol.php#prioritydef <priority>
-     *
-     * @param  string  $value  value to validate
-     * @return bool
-     */
-    public function isValid($value)
-    {
-        if (!is_numeric($value)) {
-            $this->error(self::INVALID);
-            return false;
-        }
-
-        $this->setValue($value);
-        $value = (float) $value;
-        if ($value < 0 || $value > 1) {
-            $this->error(self::NOT_VALID);
-            return false;
-        }
-
-        return true;
-    }
-}
diff --git a/civicrm/vendor/zendframework/zend-validator/src/StaticValidator.php b/civicrm/vendor/zendframework/zend-validator/src/StaticValidator.php
deleted file mode 100644
index dea88364cd81c2a61a21fafcea3d65339bd6ccdb..0000000000000000000000000000000000000000
--- a/civicrm/vendor/zendframework/zend-validator/src/StaticValidator.php
+++ /dev/null
@@ -1,60 +0,0 @@
-<?php
-/**
- * Zend Framework (http://framework.zend.com/)
- *
- * @link      http://github.com/zendframework/zf2 for the canonical source repository
- * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
- * @license   http://framework.zend.com/license/new-bsd New BSD License
- */
-
-namespace Zend\Validator;
-
-class StaticValidator
-{
-    /**
-     * @var ValidatorPluginManager
-     */
-    protected static $plugins;
-
-    /**
-     * Set plugin manager to use for locating validators
-     *
-     * @param  ValidatorPluginManager|null $plugins
-     * @return void
-     */
-    public static function setPluginManager(ValidatorPluginManager $plugins = null)
-    {
-        // Don't share by default to allow different arguments on subsequent calls
-        if ($plugins instanceof ValidatorPluginManager) {
-            $plugins->setShareByDefault(false);
-        }
-        static::$plugins = $plugins;
-    }
-
-    /**
-     * Get plugin manager for locating validators
-     *
-     * @return ValidatorPluginManager
-     */
-    public static function getPluginManager()
-    {
-        if (null === static::$plugins) {
-            static::setPluginManager(new ValidatorPluginManager());
-        }
-        return static::$plugins;
-    }
-
-    /**
-     * @param  mixed    $value
-     * @param  string   $classBaseName
-     * @param  array    $args          OPTIONAL
-     * @return bool
-     */
-    public static function execute($value, $classBaseName, array $args = array())
-    {
-        $plugins = static::getPluginManager();
-
-        $validator = $plugins->get($classBaseName, $args);
-        return $validator->isValid($value);
-    }
-}
diff --git a/civicrm/vendor/zendframework/zend-validator/src/Step.php b/civicrm/vendor/zendframework/zend-validator/src/Step.php
deleted file mode 100644
index b9e9e1ad9c70e23201055d70f174dd0f582a581a..0000000000000000000000000000000000000000
--- a/civicrm/vendor/zendframework/zend-validator/src/Step.php
+++ /dev/null
@@ -1,155 +0,0 @@
-<?php
-/**
- * Zend Framework (http://framework.zend.com/)
- *
- * @link      http://github.com/zendframework/zf2 for the canonical source repository
- * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
- * @license   http://framework.zend.com/license/new-bsd New BSD License
- */
-
-namespace Zend\Validator;
-
-use Traversable;
-
-class Step extends AbstractValidator
-{
-    const INVALID = 'typeInvalid';
-    const NOT_STEP = 'stepInvalid';
-
-    /**
-     * @var array
-     */
-    protected $messageTemplates = array(
-        self::INVALID => "Invalid value given. Scalar expected",
-        self::NOT_STEP => "The input is not a valid step"
-    );
-
-    /**
-     * @var mixed
-     */
-    protected $baseValue = 0;
-
-    /**
-     * @var mixed
-     */
-    protected $step = 1;
-
-    /**
-     * Set default options for this instance
-     *
-     * @param array $options
-     */
-    public function __construct($options = array())
-    {
-        if ($options instanceof Traversable) {
-            $options = iterator_to_array($options);
-        } elseif (!is_array($options)) {
-            $options = func_get_args();
-            $temp['baseValue'] = array_shift($options);
-            if (!empty($options)) {
-                $temp['step'] = array_shift($options);
-            }
-
-            $options = $temp;
-        }
-
-        if (isset($options['baseValue'])) {
-            $this->setBaseValue($options['baseValue']);
-        }
-        if (isset($options['step'])) {
-            $this->setStep($options['step']);
-        }
-
-        parent::__construct($options);
-    }
-
-    /**
-     * Sets the base value from which the step should be computed
-     *
-     * @param mixed $baseValue
-     * @return Step
-     */
-    public function setBaseValue($baseValue)
-    {
-        $this->baseValue = $baseValue;
-        return $this;
-    }
-
-    /**
-     * Returns the base value from which the step should be computed
-     *
-     * @return string
-     */
-    public function getBaseValue()
-    {
-        return $this->baseValue;
-    }
-
-    /**
-     * Sets the step value
-     *
-     * @param mixed $step
-     * @return Step
-     */
-    public function setStep($step)
-    {
-        $this->step = (float) $step;
-        return $this;
-    }
-
-    /**
-     * Returns the step value
-     *
-     * @return string
-     */
-    public function getStep()
-    {
-        return $this->step;
-    }
-
-    /**
-     * Returns true if $value is a scalar and a valid step value
-     *
-     * @param mixed $value
-     * @return bool
-     */
-    public function isValid($value)
-    {
-        if (!is_numeric($value)) {
-            $this->error(self::INVALID);
-            return false;
-        }
-
-        $this->setValue($value);
-
-        $fmod = $this->fmod($value - $this->baseValue, $this->step);
-
-        if ($fmod !== 0.0 && $fmod !== $this->step) {
-            $this->error(self::NOT_STEP);
-            return false;
-        }
-
-        return true;
-    }
-
-    /**
-     * replaces the internal fmod function which give wrong results on many cases
-     *
-     * @param float $x
-     * @param float $y
-     * @return float
-     */
-    protected function fmod($x, $y)
-    {
-        if ($y == 0.0) {
-            return 1.0;
-        }
-
-        //find the maximum precision from both input params to give accurate results
-        $xFloatSegment = substr($x, strpos($x, '.') + 1) ?: '';
-        $yFloatSegment = substr($y, strpos($y, '.') + 1) ?: '';
-        $precision = strlen($xFloatSegment) + strlen($yFloatSegment);
-
-        return round($x - $y * floor($x / $y), $precision);
-    }
-}
diff --git a/civicrm/vendor/zendframework/zend-validator/src/StringLength.php b/civicrm/vendor/zendframework/zend-validator/src/StringLength.php
deleted file mode 100644
index b07a6c31ef4c7efd5c5745735549419956629239..0000000000000000000000000000000000000000
--- a/civicrm/vendor/zendframework/zend-validator/src/StringLength.php
+++ /dev/null
@@ -1,211 +0,0 @@
-<?php
-/**
- * Zend Framework (http://framework.zend.com/)
- *
- * @link      http://github.com/zendframework/zf2 for the canonical source repository
- * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
- * @license   http://framework.zend.com/license/new-bsd New BSD License
- */
-
-namespace Zend\Validator;
-
-use Zend\Stdlib\StringUtils;
-use Zend\Stdlib\StringWrapper\StringWrapperInterface as StringWrapper;
-
-class StringLength extends AbstractValidator
-{
-    const INVALID   = 'stringLengthInvalid';
-    const TOO_SHORT = 'stringLengthTooShort';
-    const TOO_LONG  = 'stringLengthTooLong';
-
-    /**
-     * @var array
-     */
-    protected $messageTemplates = array(
-        self::INVALID   => "Invalid type given. String expected",
-        self::TOO_SHORT => "The input is less than %min% characters long",
-        self::TOO_LONG  => "The input is more than %max% characters long",
-    );
-
-    /**
-     * @var array
-     */
-    protected $messageVariables = array(
-        'min' => array('options' => 'min'),
-        'max' => array('options' => 'max'),
-    );
-
-    protected $options = array(
-        'min'      => 0,       // Minimum length
-        'max'      => null,    // Maximum length, null if there is no length limitation
-        'encoding' => 'UTF-8', // Encoding to use
-    );
-
-    protected $stringWrapper;
-
-    /**
-     * Sets validator options
-     *
-     * @param  int|array|\Traversable $options
-     */
-    public function __construct($options = array())
-    {
-        if (!is_array($options)) {
-            $options     = func_get_args();
-            $temp['min'] = array_shift($options);
-            if (!empty($options)) {
-                $temp['max'] = array_shift($options);
-            }
-
-            if (!empty($options)) {
-                $temp['encoding'] = array_shift($options);
-            }
-
-            $options = $temp;
-        }
-
-        parent::__construct($options);
-    }
-
-    /**
-     * Returns the min option
-     *
-     * @return int
-     */
-    public function getMin()
-    {
-        return $this->options['min'];
-    }
-
-    /**
-     * Sets the min option
-     *
-     * @param  int $min
-     * @throws Exception\InvalidArgumentException
-     * @return StringLength Provides a fluent interface
-     */
-    public function setMin($min)
-    {
-        if (null !== $this->getMax() && $min > $this->getMax()) {
-            throw new Exception\InvalidArgumentException(
-                "The minimum must be less than or equal to the maximum length, but {$min} > {$this->getMax()}"
-            );
-        }
-
-        $this->options['min'] = max(0, (int) $min);
-        return $this;
-    }
-
-    /**
-     * Returns the max option
-     *
-     * @return int|null
-     */
-    public function getMax()
-    {
-        return $this->options['max'];
-    }
-
-    /**
-     * Sets the max option
-     *
-     * @param  int|null $max
-     * @throws Exception\InvalidArgumentException
-     * @return StringLength Provides a fluent interface
-     */
-    public function setMax($max)
-    {
-        if (null === $max) {
-            $this->options['max'] = null;
-        } elseif ($max < $this->getMin()) {
-            throw new Exception\InvalidArgumentException(
-                "The maximum must be greater than or equal to the minimum length, but {$max} < {$this->getMin()}"
-            );
-        } else {
-            $this->options['max'] = (int) $max;
-        }
-
-        return $this;
-    }
-
-    /**
-     * Get the string wrapper to detect the string length
-     *
-     * @return StringWrapper
-     */
-    public function getStringWrapper()
-    {
-        if (!$this->stringWrapper) {
-            $this->stringWrapper = StringUtils::getWrapper($this->getEncoding());
-        }
-        return $this->stringWrapper;
-    }
-
-    /**
-     * Set the string wrapper to detect the string length
-     *
-     * @param StringWrapper $stringWrapper
-     * @return StringLength
-     */
-    public function setStringWrapper(StringWrapper $stringWrapper)
-    {
-        $stringWrapper->setEncoding($this->getEncoding());
-        $this->stringWrapper = $stringWrapper;
-    }
-
-    /**
-     * Returns the actual encoding
-     *
-     * @return string
-     */
-    public function getEncoding()
-    {
-        return $this->options['encoding'];
-    }
-
-    /**
-     * Sets a new encoding to use
-     *
-     * @param string $encoding
-     * @return StringLength
-     * @throws Exception\InvalidArgumentException
-     */
-    public function setEncoding($encoding)
-    {
-        $this->stringWrapper = StringUtils::getWrapper($encoding);
-        $this->options['encoding'] = $encoding;
-        return $this;
-    }
-
-    /**
-     * Returns true if and only if the string length of $value is at least the min option and
-     * no greater than the max option (when the max option is not null).
-     *
-     * @param  string $value
-     * @return bool
-     */
-    public function isValid($value)
-    {
-        if (!is_string($value)) {
-            $this->error(self::INVALID);
-            return false;
-        }
-
-        $this->setValue($value);
-
-        $length = $this->getStringWrapper()->strlen($value);
-        if ($length < $this->getMin()) {
-            $this->error(self::TOO_SHORT);
-        }
-
-        if (null !== $this->getMax() && $this->getMax() < $length) {
-            $this->error(self::TOO_LONG);
-        }
-
-        if (count($this->getMessages())) {
-            return false;
-        }
-
-        return true;
-    }
-}
diff --git a/civicrm/vendor/zendframework/zend-validator/src/Timezone.php b/civicrm/vendor/zendframework/zend-validator/src/Timezone.php
deleted file mode 100644
index dd1ab7ebc27f5b735701e5708733d39f8578f6a5..0000000000000000000000000000000000000000
--- a/civicrm/vendor/zendframework/zend-validator/src/Timezone.php
+++ /dev/null
@@ -1,174 +0,0 @@
-<?php
-/**
- * Zend Framework (http://framework.zend.com/)
- *
- * @link      http://github.com/zendframework/zf2 for the canonical source repository
- * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
- * @license   http://framework.zend.com/license/new-bsd New BSD License
- */
-
-namespace Zend\Validator;
-
-use DateTimeZone;
-
-class Timezone extends AbstractValidator
-{
-    const INVALID                       = 'invalidTimezone';
-    const INVALID_TIMEZONE_LOCATION     = 'invalidTimezoneLocation';
-    const INVALID_TIMEZONE_ABBREVIATION = 'invalidTimezoneAbbreviation';
-
-    const LOCATION      = 0x01;
-    const ABBREVIATION  = 0x02;
-    const ALL           = 0x03;
-
-    /**
-     * @var array
-     */
-    protected $constants = array(
-        self::LOCATION       => 'location',
-        self::ABBREVIATION   => 'abbreviation',
-    );
-
-    /**
-     * Default value for types; value = 3
-     *
-     * @var array
-     */
-    protected $defaultType = array(
-        self::LOCATION,
-        self::ABBREVIATION,
-    );
-
-    /**
-     * @var array
-     */
-    protected $messageTemplates = array(
-        self::INVALID                       => 'Invalid timezone given.',
-        self::INVALID_TIMEZONE_LOCATION     => 'Invalid timezone location given.',
-        self::INVALID_TIMEZONE_ABBREVIATION => 'Invalid timezone abbreviation given.',
-    );
-
-    /**
-     * Options for this validator
-     *
-     * @var array
-     */
-    protected $options = array();
-
-    /**
-     * Constructor
-     *
-     * @param array|int $options OPTIONAL
-     */
-    public function __construct($options = array())
-    {
-        $opts['type'] = $this->defaultType;
-
-        if (is_array($options)) {
-            if (array_key_exists('type', $options)) {
-                $opts['type'] = $options['type'];
-            }
-        } elseif (! empty($options)) {
-            $opts['type'] = $options;
-        }
-
-        // setType called by parent constructor then setOptions method
-        parent::__construct($opts);
-    }
-
-    /**
-     * Set the types
-     *
-     * @param  int|array $type
-     *
-     * @throws Exception\InvalidArgumentException
-     */
-    public function setType($type = null)
-    {
-        $type = $this->calculateTypeValue($type);
-
-        if (!is_int($type) || ($type < 1) || ($type > self::ALL)) {
-            throw new Exception\InvalidArgumentException(sprintf(
-                'Unknown type "%s" provided',
-                (is_string($type) || is_int($type))
-                    ? $type
-                    : (is_object($type) ? get_class($type) : gettype($type))
-            ));
-        }
-
-        $this->options['type'] = $type;
-    }
-
-    /**
-     * Returns true if timezone location or timezone abbreviations is correct.
-     *
-     * @param mixed $value
-     * @return bool
-     */
-    public function isValid($value)
-    {
-        if ($value !== null && !is_string($value)) {
-            $this->error(self::INVALID);
-            return false;
-        }
-
-        $type = $this->options['type'];
-        $this->setValue($value);
-
-        switch (true) {
-            // Check in locations and abbreviations
-            case (($type & self::LOCATION) && ($type & self::ABBREVIATION)):
-                $abbrs = DateTimeZone::listAbbreviations();
-                $locations = DateTimeZone::listIdentifiers();
-
-                if (!array_key_exists($value, $abbrs) && !in_array($value, $locations)) {
-                    $this->error(self::INVALID);
-                    return false;
-                }
-                break;
-
-            // Check only in locations
-            case ($type & self::LOCATION):
-                $locations = DateTimeZone::listIdentifiers();
-
-                if (!in_array($value, $locations)) {
-                    $this->error(self::INVALID_TIMEZONE_LOCATION);
-                    return false;
-                }
-                break;
-
-            // Check only in abbreviations
-            case ($type & self::ABBREVIATION):
-                $abbrs = DateTimeZone::listAbbreviations();
-
-                if (!array_key_exists($value, $abbrs)) {
-                    $this->error(self::INVALID_TIMEZONE_ABBREVIATION);
-                    return false;
-                }
-                break;
-        }
-
-        return true;
-    }
-
-    /**
-     * @param array|int|string $type
-     *
-     * @return int
-     */
-    protected function calculateTypeValue($type)
-    {
-        $types    = (array) $type;
-        $detected = 0;
-
-        foreach ($types as $value) {
-            if (is_int($value)) {
-                $detected |= $value;
-            } elseif (false !== ($position = array_search($value, $this->constants))) {
-                $detected |= array_search($value, $this->constants);
-            }
-        }
-
-        return $detected;
-    }
-}
diff --git a/civicrm/vendor/zendframework/zend-validator/src/Translator/TranslatorAwareInterface.php b/civicrm/vendor/zendframework/zend-validator/src/Translator/TranslatorAwareInterface.php
deleted file mode 100644
index fd0af1fd3ce35cd38d30b803cc92d11afb118092..0000000000000000000000000000000000000000
--- a/civicrm/vendor/zendframework/zend-validator/src/Translator/TranslatorAwareInterface.php
+++ /dev/null
@@ -1,69 +0,0 @@
-<?php
-/**
- * Zend Framework (http://framework.zend.com/)
- *;
- * @link      http://github.com/zendframework/zf2 for the canonical source repository
- * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
- * @license   http://framework.zend.com/license/new-bsd New BSD License
- */
-
-namespace Zend\Validator\Translator;
-
-interface TranslatorAwareInterface
-{
-    /**
-     * Sets translator to use in helper
-     *
-     * @param  TranslatorInterface $translator  [optional] translator.
-     *             Default is null, which sets no translator.
-     * @param  string $textDomain  [optional] text domain
-     *             Default is null, which skips setTranslatorTextDomain
-     * @return self
-     */
-    public function setTranslator(TranslatorInterface $translator = null, $textDomain = null);
-
-    /**
-     * Returns translator used in object
-     *
-     * @return TranslatorInterface|null
-     */
-    public function getTranslator();
-
-    /**
-     * Checks if the object has a translator
-     *
-     * @return bool
-     */
-    public function hasTranslator();
-
-    /**
-     * Sets whether translator is enabled and should be used
-     *
-     * @param  bool $enabled [optional] whether translator should be used.
-     *                  Default is true.
-     * @return self
-     */
-    public function setTranslatorEnabled($enabled = true);
-
-    /**
-     * Returns whether translator is enabled and should be used
-     *
-     * @return bool
-     */
-    public function isTranslatorEnabled();
-
-    /**
-     * Set translation text domain
-     *
-     * @param  string $textDomain
-     * @return TranslatorAwareInterface
-     */
-    public function setTranslatorTextDomain($textDomain = 'default');
-
-    /**
-     * Return the translation text domain
-     *
-     * @return string
-     */
-    public function getTranslatorTextDomain();
-}
diff --git a/civicrm/vendor/zendframework/zend-validator/src/Translator/TranslatorInterface.php b/civicrm/vendor/zendframework/zend-validator/src/Translator/TranslatorInterface.php
deleted file mode 100644
index 3439e91a53a03e37a395ebf3a48368190003fb21..0000000000000000000000000000000000000000
--- a/civicrm/vendor/zendframework/zend-validator/src/Translator/TranslatorInterface.php
+++ /dev/null
@@ -1,21 +0,0 @@
-<?php
-/**
- * Zend Framework (http://framework.zend.com/)
- *
- * @link      http://github.com/zendframework/zf2 for the canonical source repository
- * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
- * @license   http://framework.zend.com/license/new-bsd New BSD License
- */
-
-namespace Zend\Validator\Translator;
-
-interface TranslatorInterface
-{
-    /**
-     * @param  string $message
-     * @param  string $textDomain
-     * @param  string $locale
-     * @return string
-     */
-    public function translate($message, $textDomain = 'default', $locale = null);
-}
diff --git a/civicrm/vendor/zendframework/zend-validator/src/Uri.php b/civicrm/vendor/zendframework/zend-validator/src/Uri.php
deleted file mode 100644
index a6e5eab2bd0f134f221f21058e7db3d7d8a22920..0000000000000000000000000000000000000000
--- a/civicrm/vendor/zendframework/zend-validator/src/Uri.php
+++ /dev/null
@@ -1,192 +0,0 @@
-<?php
-/**
- * Zend Framework (http://framework.zend.com/)
- *
- * @link      http://github.com/zendframework/zf2 for the canonical source repository
- * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
- * @license   http://framework.zend.com/license/new-bsd New BSD License
- */
-
-namespace Zend\Validator;
-
-use Traversable;
-use Zend\Uri\Exception\ExceptionInterface as UriException;
-use Zend\Uri\Uri as UriHandler;
-use Zend\Validator\Exception\InvalidArgumentException;
-
-class Uri extends AbstractValidator
-{
-    const INVALID = 'uriInvalid';
-    const NOT_URI = 'notUri';
-
-    /**
-     * @var array
-     */
-    protected $messageTemplates = array(
-        self::INVALID => "Invalid type given. String expected",
-        self::NOT_URI => "The input does not appear to be a valid Uri",
-    );
-
-    /**
-     * @var UriHandler
-     */
-    protected $uriHandler;
-
-    /**
-     * @var bool
-     */
-    protected $allowRelative = true;
-
-    /**
-     * @var bool
-     */
-    protected $allowAbsolute = true;
-
-    /**
-     * Sets default option values for this instance
-     *
-     * @param array|Traversable $options
-     */
-    public function __construct($options = array())
-    {
-        if ($options instanceof Traversable) {
-            $options = iterator_to_array($options);
-        } elseif (!is_array($options)) {
-            $options = func_get_args();
-            $temp['uriHandler'] = array_shift($options);
-            if (!empty($options)) {
-                $temp['allowRelative'] = array_shift($options);
-            }
-            if (!empty($options)) {
-                $temp['allowAbsolute'] = array_shift($options);
-            }
-
-            $options = $temp;
-        }
-
-        if (isset($options['uriHandler'])) {
-            $this->setUriHandler($options['uriHandler']);
-        }
-        if (isset($options['allowRelative'])) {
-            $this->setAllowRelative($options['allowRelative']);
-        }
-        if (isset($options['allowAbsolute'])) {
-            $this->setAllowAbsolute($options['allowAbsolute']);
-        }
-
-        parent::__construct($options);
-    }
-
-    /**
-     * @throws InvalidArgumentException
-     * @return UriHandler
-     */
-    public function getUriHandler()
-    {
-        if (null === $this->uriHandler) {
-            // Lazy load the base Uri handler
-            $this->uriHandler = new UriHandler();
-        } elseif (is_string($this->uriHandler) && class_exists($this->uriHandler)) {
-            // Instantiate string Uri handler that references a class
-            $this->uriHandler = new $this->uriHandler;
-        }
-
-        if (! $this->uriHandler instanceof UriHandler) {
-            throw new InvalidArgumentException('URI handler is expected to be a Zend\Uri\Uri object');
-        }
-
-        return $this->uriHandler;
-    }
-
-    /**
-     * @param  UriHandler $uriHandler
-     * @throws InvalidArgumentException
-     * @return Uri
-     */
-    public function setUriHandler($uriHandler)
-    {
-        if (! is_subclass_of($uriHandler, 'Zend\Uri\Uri')) {
-            throw new InvalidArgumentException('Expecting a subclass name or instance of Zend\Uri\Uri as $uriHandler');
-        }
-
-        $this->uriHandler = $uriHandler;
-        return $this;
-    }
-
-    /**
-     * Returns the allowAbsolute option
-     *
-     * @return bool
-     */
-    public function getAllowAbsolute()
-    {
-        return $this->allowAbsolute;
-    }
-
-    /**
-     * Sets the allowAbsolute option
-     *
-     * @param  bool $allowAbsolute
-     * @return Uri
-     */
-    public function setAllowAbsolute($allowAbsolute)
-    {
-        $this->allowAbsolute = (bool) $allowAbsolute;
-        return $this;
-    }
-
-    /**
-     * Returns the allowRelative option
-     *
-     * @return bool
-     */
-    public function getAllowRelative()
-    {
-        return $this->allowRelative;
-    }
-
-    /**
-     * Sets the allowRelative option
-     *
-     * @param  bool $allowRelative
-     * @return Uri
-     */
-    public function setAllowRelative($allowRelative)
-    {
-        $this->allowRelative = (bool) $allowRelative;
-        return $this;
-    }
-
-    /**
-     * Returns true if and only if $value validates as a Uri
-     *
-     * @param  string $value
-     * @return bool
-     */
-    public function isValid($value)
-    {
-        if (!is_string($value)) {
-            $this->error(self::INVALID);
-            return false;
-        }
-
-        $uriHandler = $this->getUriHandler();
-        try {
-            $uriHandler->parse($value);
-            if ($uriHandler->isValid()) {
-                // It will either be a valid absolute or relative URI
-                if (($this->allowRelative && $this->allowAbsolute)
-                    || ($this->allowAbsolute && $uriHandler->isAbsolute())
-                    || ($this->allowRelative && $uriHandler->isValidRelative())
-                ) {
-                    return true;
-                }
-            }
-        } catch (UriException $ex) {
-            // Error parsing URI, it must be invalid
-        }
-
-        $this->error(self::NOT_URI);
-        return false;
-    }
-}
diff --git a/civicrm/vendor/zendframework/zend-validator/src/ValidatorChain.php b/civicrm/vendor/zendframework/zend-validator/src/ValidatorChain.php
deleted file mode 100644
index 604afbfbed010a376712db05a4785b5bfefe5afe..0000000000000000000000000000000000000000
--- a/civicrm/vendor/zendframework/zend-validator/src/ValidatorChain.php
+++ /dev/null
@@ -1,324 +0,0 @@
-<?php
-/**
- * Zend Framework (http://framework.zend.com/)
- *
- * @link      http://github.com/zendframework/zf2 for the canonical source repository
- * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
- * @license   http://framework.zend.com/license/new-bsd New BSD License
- */
-
-namespace Zend\Validator;
-
-use Countable;
-use Zend\Stdlib\PriorityQueue;
-
-class ValidatorChain implements
-    Countable,
-    ValidatorInterface
-{
-    /**
-     * Default priority at which validators are added
-     */
-    const DEFAULT_PRIORITY = 1;
-
-    /**
-     * @var ValidatorPluginManager
-     */
-    protected $plugins;
-
-    /**
-     * Validator chain
-     *
-     * @var PriorityQueue
-     */
-    protected $validators;
-
-    /**
-     * Array of validation failure messages
-     *
-     * @var array
-     */
-    protected $messages = array();
-
-    /**
-     * Initialize validator chain
-     */
-    public function __construct()
-    {
-        $this->validators = new PriorityQueue();
-    }
-
-    /**
-     * Return the count of attached validators
-     *
-     * @return int
-     */
-    public function count()
-    {
-        return count($this->validators);
-    }
-
-    /**
-     * Get plugin manager instance
-     *
-     * @return ValidatorPluginManager
-     */
-    public function getPluginManager()
-    {
-        if (!$this->plugins) {
-            $this->setPluginManager(new ValidatorPluginManager());
-        }
-        return $this->plugins;
-    }
-
-    /**
-     * Set plugin manager instance
-     *
-     * @param  ValidatorPluginManager $plugins Plugin manager
-     * @return ValidatorChain
-     */
-    public function setPluginManager(ValidatorPluginManager $plugins)
-    {
-        $this->plugins = $plugins;
-        return $this;
-    }
-
-    /**
-     * Retrieve a validator by name
-     *
-     * @param  string     $name    Name of validator to return
-     * @param  null|array $options Options to pass to validator constructor (if not already instantiated)
-     * @return ValidatorInterface
-     */
-    public function plugin($name, array $options = null)
-    {
-        $plugins = $this->getPluginManager();
-        return $plugins->get($name, $options);
-    }
-
-    /**
-     * Attach a validator to the end of the chain
-     *
-     * If $breakChainOnFailure is true, then if the validator fails, the next validator in the chain,
-     * if one exists, will not be executed.
-     *
-     * @param  ValidatorInterface $validator
-     * @param  bool               $breakChainOnFailure
-     * @param  int                $priority            Priority at which to enqueue validator; defaults to
-     *                                                          1 (higher executes earlier)
-     *
-     * @throws Exception\InvalidArgumentException
-     *
-     * @return self
-     */
-    public function attach(
-        ValidatorInterface $validator,
-        $breakChainOnFailure = false,
-        $priority = self::DEFAULT_PRIORITY
-    ) {
-        $this->validators->insert(
-            array(
-                'instance'            => $validator,
-                'breakChainOnFailure' => (bool) $breakChainOnFailure,
-            ),
-            $priority
-        );
-
-        return $this;
-    }
-
-    /**
-     * Proxy to attach() to keep BC
-     *
-     * @deprecated Please use attach()
-     * @param  ValidatorInterface      $validator
-     * @param  bool                 $breakChainOnFailure
-     * @param  int                  $priority
-     * @return ValidatorChain Provides a fluent interface
-     */
-    public function addValidator(ValidatorInterface $validator, $breakChainOnFailure = false, $priority = self::DEFAULT_PRIORITY)
-    {
-        return $this->attach($validator, $breakChainOnFailure, $priority);
-    }
-
-    /**
-     * Adds a validator to the beginning of the chain
-     *
-     * If $breakChainOnFailure is true, then if the validator fails, the next validator in the chain,
-     * if one exists, will not be executed.
-     *
-     * @param  ValidatorInterface      $validator
-     * @param  bool                 $breakChainOnFailure
-     * @return ValidatorChain Provides a fluent interface
-     */
-    public function prependValidator(ValidatorInterface $validator, $breakChainOnFailure = false)
-    {
-        $priority = self::DEFAULT_PRIORITY;
-
-        if (!$this->validators->isEmpty()) {
-            $queue = $this->validators->getIterator();
-            $queue->setExtractFlags(PriorityQueue::EXTR_PRIORITY);
-            $extractedNode = $queue->extract();
-            $priority = $extractedNode[0] + 1;
-        }
-
-        $this->validators->insert(
-            array(
-                'instance'            => $validator,
-                'breakChainOnFailure' => (bool) $breakChainOnFailure,
-            ),
-            $priority
-        );
-        return $this;
-    }
-
-    /**
-     * Use the plugin manager to add a validator by name
-     *
-     * @param  string $name
-     * @param  array $options
-     * @param  bool $breakChainOnFailure
-     * @param  int $priority
-     * @return ValidatorChain
-     */
-    public function attachByName($name, $options = array(), $breakChainOnFailure = false, $priority = self::DEFAULT_PRIORITY)
-    {
-        if (isset($options['break_chain_on_failure'])) {
-            $breakChainOnFailure = (bool) $options['break_chain_on_failure'];
-        }
-
-        if (isset($options['breakchainonfailure'])) {
-            $breakChainOnFailure = (bool) $options['breakchainonfailure'];
-        }
-
-        $this->attach($this->plugin($name, $options), $breakChainOnFailure, $priority);
-
-        return $this;
-    }
-
-    /**
-     * Proxy to attachByName() to keep BC
-     *
-     * @deprecated Please use attachByName()
-     * @param  string $name
-     * @param  array  $options
-     * @param  bool   $breakChainOnFailure
-     * @return ValidatorChain
-     */
-    public function addByName($name, $options = array(), $breakChainOnFailure = false)
-    {
-        return $this->attachByName($name, $options, $breakChainOnFailure);
-    }
-
-    /**
-     * Use the plugin manager to prepend a validator by name
-     *
-     * @param  string $name
-     * @param  array  $options
-     * @param  bool   $breakChainOnFailure
-     * @return ValidatorChain
-     */
-    public function prependByName($name, $options = array(), $breakChainOnFailure = false)
-    {
-        $validator = $this->plugin($name, $options);
-        $this->prependValidator($validator, $breakChainOnFailure);
-        return $this;
-    }
-
-    /**
-     * Returns true if and only if $value passes all validations in the chain
-     *
-     * Validators are run in the order in which they were added to the chain (FIFO).
-     *
-     * @param  mixed $value
-     * @param  mixed $context Extra "context" to provide the validator
-     * @return bool
-     */
-    public function isValid($value, $context = null)
-    {
-        $this->messages = array();
-        $result         = true;
-        foreach ($this->validators as $element) {
-            $validator = $element['instance'];
-            if ($validator->isValid($value, $context)) {
-                continue;
-            }
-            $result         = false;
-            $messages       = $validator->getMessages();
-            $this->messages = array_replace_recursive($this->messages, $messages);
-            if ($element['breakChainOnFailure']) {
-                break;
-            }
-        }
-        return $result;
-    }
-
-    /**
-     * Merge the validator chain with the one given in parameter
-     *
-     * @param ValidatorChain $validatorChain
-     * @return ValidatorChain
-     */
-    public function merge(ValidatorChain $validatorChain)
-    {
-        foreach ($validatorChain->validators->toArray(PriorityQueue::EXTR_BOTH) as $item) {
-            $this->attach($item['data']['instance'], $item['data']['breakChainOnFailure'], $item['priority']);
-        }
-
-        return $this;
-    }
-
-    /**
-     * Returns array of validation failure messages
-     *
-     * @return array
-     */
-    public function getMessages()
-    {
-        return $this->messages;
-    }
-
-    /**
-     * Get all the validators
-     *
-     * @return PriorityQueue
-     */
-    public function getValidators()
-    {
-        return $this->validators->toArray(PriorityQueue::EXTR_DATA);
-    }
-
-    /**
-     * Invoke chain as command
-     *
-     * @param  mixed $value
-     * @return bool
-     */
-    public function __invoke($value)
-    {
-        return $this->isValid($value);
-    }
-
-    /**
-     * Deep clone handling
-     */
-    public function __clone()
-    {
-        $this->validators = clone $this->validators;
-    }
-
-    /**
-     * Prepare validator chain for serialization
-     *
-     * Plugin manager (property 'plugins') cannot
-     * be serialized. On wakeup the property remains unset
-     * and next invocation to getPluginManager() sets
-     * the default plugin manager instance (ValidatorPluginManager).
-     *
-     * @return array
-     */
-    public function __sleep()
-    {
-        return array('validators', 'messages');
-    }
-}
diff --git a/civicrm/vendor/zendframework/zend-validator/src/ValidatorInterface.php b/civicrm/vendor/zendframework/zend-validator/src/ValidatorInterface.php
deleted file mode 100644
index 6424ef7a632cae5d4e087626257b00bc88d8427a..0000000000000000000000000000000000000000
--- a/civicrm/vendor/zendframework/zend-validator/src/ValidatorInterface.php
+++ /dev/null
@@ -1,38 +0,0 @@
-<?php
-/**
- * Zend Framework (http://framework.zend.com/)
- *
- * @link      http://github.com/zendframework/zf2 for the canonical source repository
- * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
- * @license   http://framework.zend.com/license/new-bsd New BSD License
- */
-
-namespace Zend\Validator;
-
-interface ValidatorInterface
-{
-    /**
-     * Returns true if and only if $value meets the validation requirements
-     *
-     * If $value fails validation, then this method returns false, and
-     * getMessages() will return an array of messages that explain why the
-     * validation failed.
-     *
-     * @param  mixed $value
-     * @return bool
-     * @throws Exception\RuntimeException If validation of $value is impossible
-     */
-    public function isValid($value);
-
-    /**
-     * Returns an array of messages that explain why the most recent isValid()
-     * call returned false. The array keys are validation failure message identifiers,
-     * and the array values are the corresponding human-readable message strings.
-     *
-     * If isValid() was never called or if the most recent isValid() call
-     * returned true, then this method returns an empty array.
-     *
-     * @return array
-     */
-    public function getMessages();
-}
diff --git a/civicrm/vendor/zendframework/zend-validator/src/ValidatorPluginManager.php b/civicrm/vendor/zendframework/zend-validator/src/ValidatorPluginManager.php
deleted file mode 100644
index 4a7c21b0da3d4e25c06be7c5beafcc6799826405..0000000000000000000000000000000000000000
--- a/civicrm/vendor/zendframework/zend-validator/src/ValidatorPluginManager.php
+++ /dev/null
@@ -1,196 +0,0 @@
-<?php
-/**
- * Zend Framework (http://framework.zend.com/)
- *
- * @link      http://github.com/zendframework/zf2 for the canonical source repository
- * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
- * @license   http://framework.zend.com/license/new-bsd New BSD License
- */
-
-namespace Zend\Validator;
-
-use Zend\ServiceManager\AbstractPluginManager;
-use Zend\ServiceManager\ConfigInterface;
-
-class ValidatorPluginManager extends AbstractPluginManager
-{
-    /**
-     * Default aliases
-     *
-     * @var array
-     */
-    protected $aliases = array(
-        'Zend\I18n\Validator\Float'=> 'Zend\I18n\Validator\IsFloat',
-        'Zend\I18n\Validator\Int'  => 'Zend\I18n\Validator\IsInt',
-    );
-
-    /**
-     * Default set of validators
-     *
-     * @var array
-     */
-    protected $invokableClasses = array(
-        'alnum'                    => 'Zend\I18n\Validator\Alnum',
-        'alpha'                    => 'Zend\I18n\Validator\Alpha',
-        'barcodecode25interleaved' => 'Zend\Validator\Barcode\Code25interleaved',
-        'barcodecode25'            => 'Zend\Validator\Barcode\Code25',
-        'barcodecode39ext'         => 'Zend\Validator\Barcode\Code39ext',
-        'barcodecode39'            => 'Zend\Validator\Barcode\Code39',
-        'barcodecode93ext'         => 'Zend\Validator\Barcode\Code93ext',
-        'barcodecode93'            => 'Zend\Validator\Barcode\Code93',
-        'barcodeean12'             => 'Zend\Validator\Barcode\Ean12',
-        'barcodeean13'             => 'Zend\Validator\Barcode\Ean13',
-        'barcodeean14'             => 'Zend\Validator\Barcode\Ean14',
-        'barcodeean18'             => 'Zend\Validator\Barcode\Ean18',
-        'barcodeean2'              => 'Zend\Validator\Barcode\Ean2',
-        'barcodeean5'              => 'Zend\Validator\Barcode\Ean5',
-        'barcodeean8'              => 'Zend\Validator\Barcode\Ean8',
-        'barcodegtin12'            => 'Zend\Validator\Barcode\Gtin12',
-        'barcodegtin13'            => 'Zend\Validator\Barcode\Gtin13',
-        'barcodegtin14'            => 'Zend\Validator\Barcode\Gtin14',
-        'barcodeidentcode'         => 'Zend\Validator\Barcode\Identcode',
-        'barcodeintelligentmail'   => 'Zend\Validator\Barcode\Intelligentmail',
-        'barcodeissn'              => 'Zend\Validator\Barcode\Issn',
-        'barcodeitf14'             => 'Zend\Validator\Barcode\Itf14',
-        'barcodeleitcode'          => 'Zend\Validator\Barcode\Leitcode',
-        'barcodeplanet'            => 'Zend\Validator\Barcode\Planet',
-        'barcodepostnet'           => 'Zend\Validator\Barcode\Postnet',
-        'barcoderoyalmail'         => 'Zend\Validator\Barcode\Royalmail',
-        'barcodesscc'              => 'Zend\Validator\Barcode\Sscc',
-        'barcodeupca'              => 'Zend\Validator\Barcode\Upca',
-        'barcodeupce'              => 'Zend\Validator\Barcode\Upce',
-        'barcode'                  => 'Zend\Validator\Barcode',
-        'between'                  => 'Zend\Validator\Between',
-        'bitwise'                  => 'Zend\Validator\Bitwise',
-        'callback'                 => 'Zend\Validator\Callback',
-        'creditcard'               => 'Zend\Validator\CreditCard',
-        'csrf'                     => 'Zend\Validator\Csrf',
-        'date'                     => 'Zend\Validator\Date',
-        'datestep'                 => 'Zend\Validator\DateStep',
-        'datetime'                 => 'Zend\I18n\Validator\DateTime',
-        'dbnorecordexists'         => 'Zend\Validator\Db\NoRecordExists',
-        'dbrecordexists'           => 'Zend\Validator\Db\RecordExists',
-        'digits'                   => 'Zend\Validator\Digits',
-        'emailaddress'             => 'Zend\Validator\EmailAddress',
-        'explode'                  => 'Zend\Validator\Explode',
-        'filecount'                => 'Zend\Validator\File\Count',
-        'filecrc32'                => 'Zend\Validator\File\Crc32',
-        'fileexcludeextension'     => 'Zend\Validator\File\ExcludeExtension',
-        'fileexcludemimetype'      => 'Zend\Validator\File\ExcludeMimeType',
-        'fileexists'               => 'Zend\Validator\File\Exists',
-        'fileextension'            => 'Zend\Validator\File\Extension',
-        'filefilessize'            => 'Zend\Validator\File\FilesSize',
-        'filehash'                 => 'Zend\Validator\File\Hash',
-        'fileimagesize'            => 'Zend\Validator\File\ImageSize',
-        'fileiscompressed'         => 'Zend\Validator\File\IsCompressed',
-        'fileisimage'              => 'Zend\Validator\File\IsImage',
-        'filemd5'                  => 'Zend\Validator\File\Md5',
-        'filemimetype'             => 'Zend\Validator\File\MimeType',
-        'filenotexists'            => 'Zend\Validator\File\NotExists',
-        'filesha1'                 => 'Zend\Validator\File\Sha1',
-        'filesize'                 => 'Zend\Validator\File\Size',
-        'fileupload'               => 'Zend\Validator\File\Upload',
-        'fileuploadfile'           => 'Zend\Validator\File\UploadFile',
-        'filewordcount'            => 'Zend\Validator\File\WordCount',
-        'float'                    => 'Zend\I18n\Validator\IsFloat',
-        'greaterthan'              => 'Zend\Validator\GreaterThan',
-        'hex'                      => 'Zend\Validator\Hex',
-        'hostname'                 => 'Zend\Validator\Hostname',
-        'iban'                     => 'Zend\Validator\Iban',
-        'identical'                => 'Zend\Validator\Identical',
-        'inarray'                  => 'Zend\Validator\InArray',
-        'int'                      => 'Zend\I18n\Validator\IsInt',
-        'ip'                       => 'Zend\Validator\Ip',
-        'isbn'                     => 'Zend\Validator\Isbn',
-        'isfloat'                  => 'Zend\I18n\Validator\IsFloat',
-        'isinstanceof'             => 'Zend\Validator\IsInstanceOf',
-        'isint'                    => 'Zend\I18n\Validator\IsInt',
-        'lessthan'                 => 'Zend\Validator\LessThan',
-        'notempty'                 => 'Zend\Validator\NotEmpty',
-        'phonenumber'              => 'Zend\I18n\Validator\PhoneNumber',
-        'postcode'                 => 'Zend\I18n\Validator\PostCode',
-        'regex'                    => 'Zend\Validator\Regex',
-        'sitemapchangefreq'        => 'Zend\Validator\Sitemap\Changefreq',
-        'sitemaplastmod'           => 'Zend\Validator\Sitemap\Lastmod',
-        'sitemaploc'               => 'Zend\Validator\Sitemap\Loc',
-        'sitemappriority'          => 'Zend\Validator\Sitemap\Priority',
-        'stringlength'             => 'Zend\Validator\StringLength',
-        'step'                     => 'Zend\Validator\Step',
-        'timezone'                 => 'Zend\Validator\Timezone',
-        'uri'                      => 'Zend\Validator\Uri',
-    );
-
-    /**
-     * Whether or not to share by default; default to false
-     *
-     * @var bool
-     */
-    protected $shareByDefault = false;
-
-    /**
-     * Constructor
-     *
-     * After invoking parent constructor, add an initializer to inject the
-     * attached translator, if any, to the currently requested helper.
-     *
-     * @param  null|ConfigInterface $configuration
-     */
-    public function __construct(ConfigInterface $configuration = null)
-    {
-        parent::__construct($configuration);
-        $this->addInitializer(array($this, 'injectTranslator'));
-        $this->addInitializer(array($this, 'injectValidatorPluginManager'));
-    }
-
-    /**
-     * Inject a validator instance with the registered translator
-     *
-     * @param  ValidatorInterface $validator
-     * @return void
-     */
-    public function injectTranslator($validator)
-    {
-        if ($validator instanceof Translator\TranslatorAwareInterface) {
-            $locator = $this->getServiceLocator();
-            if ($locator && $locator->has('MvcTranslator')) {
-                $validator->setTranslator($locator->get('MvcTranslator'));
-            }
-        }
-    }
-
-    /**
-     * Inject a validator plugin manager
-     *
-     * @param $validator
-     * @return void
-     */
-    public function injectValidatorPluginManager($validator)
-    {
-        if ($validator instanceof ValidatorPluginManagerAwareInterface) {
-            $validator->setValidatorPluginManager($this);
-        }
-    }
-
-    /**
-     * Validate the plugin
-     *
-     * Checks that the validator loaded is an instance of ValidatorInterface.
-     *
-     * @param  mixed $plugin
-     * @return void
-     * @throws Exception\RuntimeException if invalid
-     */
-    public function validatePlugin($plugin)
-    {
-        if ($plugin instanceof ValidatorInterface) {
-            // we're okay
-            return;
-        }
-
-        throw new Exception\RuntimeException(sprintf(
-            'Plugin of type %s is invalid; must implement %s\ValidatorInterface',
-            (is_object($plugin) ? get_class($plugin) : gettype($plugin)),
-            __NAMESPACE__
-        ));
-    }
-}
diff --git a/civicrm/vendor/zendframework/zend-validator/src/ValidatorPluginManagerAwareInterface.php b/civicrm/vendor/zendframework/zend-validator/src/ValidatorPluginManagerAwareInterface.php
deleted file mode 100644
index b5436b82b4374ee68cf405d03cfa8811d497306e..0000000000000000000000000000000000000000
--- a/civicrm/vendor/zendframework/zend-validator/src/ValidatorPluginManagerAwareInterface.php
+++ /dev/null
@@ -1,27 +0,0 @@
-<?php
-/**
- * Zend Framework (http://framework.zend.com/)
- *
- * @link      http://github.com/zendframework/zf2 for the canonical source repository
- * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
- * @license   http://framework.zend.com/license/new-bsd New BSD License
- */
-
-namespace Zend\Validator;
-
-interface ValidatorPluginManagerAwareInterface
-{
-    /**
-     * Set validator plugin manager
-     *
-     * @param ValidatorPluginManager $pluginManager
-     */
-    public function setValidatorPluginManager(ValidatorPluginManager $pluginManager);
-
-    /**
-     * Get validator plugin manager
-     *
-     * @return ValidatorPluginManager
-     */
-    public function getValidatorPluginManager();
-}
diff --git a/civicrm/xml/schema/ACL/Cache.xml b/civicrm/xml/schema/ACL/Cache.xml
index 38c9df70bb819a94e7efe151c0ee1da9912ed3f8..36e9123dc337054b30afab0416b850652eac0208 100644
--- a/civicrm/xml/schema/ACL/Cache.xml
+++ b/civicrm/xml/schema/ACL/Cache.xml
@@ -60,4 +60,9 @@
     <comment>When was this cache entry last modified</comment>
     <add>1.6</add>
   </field>
+  <index>
+    <name>index_modified_date</name>
+    <fieldName>modified_date</fieldName>
+    <add>5.22</add>
+  </index>
 </table>
diff --git a/civicrm/xml/schema/Contact/Contact.xml b/civicrm/xml/schema/Contact/Contact.xml
index 7facb329ca523a274ade049479c90615043d2030..262358eaf1c91d046e68cde06deb0f114e8a0ca2 100644
--- a/civicrm/xml/schema/Contact/Contact.xml
+++ b/civicrm/xml/schema/Contact/Contact.xml
@@ -39,6 +39,7 @@
     </html>
     <add>1.1</add>
     <change>3.1</change>
+    <contactType>null</contactType>
   </field>
   <index>
     <name>index_contact_type</name>
@@ -385,6 +386,7 @@
     <fulltext/>
     <comment>First Name.</comment>
     <add>1.1</add>
+    <contactType>Individual</contactType>
   </field>
   <index>
     <name>index_first_name</name>
@@ -405,6 +407,7 @@
     <fulltext/>
     <comment>Middle Name.</comment>
     <add>1.1</add>
+    <contactType>Individual</contactType>
   </field>
   <field>
     <name>last_name</name>
@@ -420,6 +423,7 @@
     <comment>Last Name.</comment>
     <fulltext/>
     <add>1.1</add>
+    <contactType>Individual</contactType>
   </field>
   <index>
     <name>index_last_name</name>
@@ -441,6 +445,7 @@
     <dataPattern>/^(mr|ms|mrs|sir|dr)\.?$/i</dataPattern>
     <import>true</import>
     <add>1.2</add>
+    <contactType>Individual</contactType>
   </field>
   <index>
     <name>UI_prefix</name>
@@ -462,6 +467,7 @@
     <headerPattern>/^suffix$/i</headerPattern>
     <dataPattern>/^(sr|jr)\.?|i{2,}$/</dataPattern>
     <add>1.2</add>
+    <contactType>Individual</contactType>
   </field>
   <index>
     <name>UI_suffix</name>
@@ -479,6 +485,7 @@
     <headerPattern>/^title/i</headerPattern>
     <comment>Formal (academic or similar) title in front of name. (Prof., Dr. etc.)</comment>
     <add>4.5</add>
+    <contactType>Individual</contactType>
   </field>
   <field>
     <name>communication_style_id</name>
@@ -642,6 +649,7 @@
     <dataPattern>//</dataPattern>
     <comment>Job Title</comment>
     <add>1.1</add>
+    <contactType>Individual</contactType>
   </field>
   <field>
     <name>gender_id</name>
@@ -657,6 +665,7 @@
     <comment>FK to gender ID</comment>
     <import>true</import>
     <add>1.2</add>
+    <contactType>Individual</contactType>
   </field>
   <index>
     <name>UI_gender</name>
@@ -675,6 +684,7 @@
       <type>Select Date</type>
       <formatType>birth</formatType>
     </html>
+    <contactType>Individual</contactType>
   </field>
   <field>
     <name>is_deceased</name>
@@ -688,6 +698,7 @@
     <html>
       <type>CheckBox</type>
     </html>
+    <contactType>Individual</contactType>
   </field>
   <index>
     <name>index_is_deceased</name>
@@ -706,6 +717,7 @@
       <type>Select Date</type>
       <formatType>birth</formatType>
     </html>
+    <contactType>Individual</contactType>
   </field>
   <field>
     <name>mail_to_household_id</name>
@@ -738,6 +750,7 @@
     <comment>Household Name.</comment>
     <fulltext/>
     <add>1.1</add>
+    <contactType>Household</contactType>
   </field>
   <index>
     <name>index_household_name</name>
@@ -750,6 +763,7 @@
     <title>Household Primary Contact ID</title>
     <comment>Optional FK to Primary Contact for this household.</comment>
     <add>1.1</add>
+    <contactType>Household</contactType>
   </field>
   <foreignKey>
     <name>primary_contact_id</name>
@@ -772,6 +786,7 @@
     <comment>Organization Name.</comment>
     <fulltext/>
     <add>1.1</add>
+    <contactType>Organization</contactType>
   </field>
   <index>
     <name>index_organization_name</name>
@@ -789,6 +804,7 @@
     <html>
       <type>Text</type>
     </html>
+    <contactType>Organization</contactType>
   </field>
   <field>
     <name>user_unique_id</name>
@@ -816,6 +832,7 @@
     <html>
       <type>EntityRef</type>
     </html>
+    <contactType>Individual</contactType>
   </field>
   <foreignKey>
     <name>employer_id</name>
diff --git a/civicrm/xml/schema/Core/Address.xml b/civicrm/xml/schema/Core/Address.xml
index 183a1af5b09a671663178f595a2ef75cdf09a27e..97ea97b3753a86cc2817fc27f954977802e8ba3f 100644
--- a/civicrm/xml/schema/Core/Address.xml
+++ b/civicrm/xml/schema/Core/Address.xml
@@ -259,6 +259,7 @@
     </pseudoconstant>
     <html>
       <type>ChainSelect</type>
+      <controlField>state_province_id</controlField>
     </html>
     <add>1.1</add>
   </field>
@@ -285,6 +286,7 @@
     <localize_context>province</localize_context>
     <html>
       <type>ChainSelect</type>
+      <controlField>country_id</controlField>
     </html>
     <add>1.1</add>
   </field>
diff --git a/civicrm/xml/templates/dao.tpl b/civicrm/xml/templates/dao.tpl
index 6718b8541fdf8585ed84ace6e46328d3d2c51977..ac6b477ec3f292522942041013e0c9beea0d4d62 100644
--- a/civicrm/xml/templates/dao.tpl
+++ b/civicrm/xml/templates/dao.tpl
@@ -124,7 +124,9 @@ class {$table.className} extends CRM_Core_DAO {ldelim}
 {if $field.export}
                       'export'    => {$field.export|strtoupper},
 {/if} {* field.export *}
-
+{if $field.contactType}
+                      'contactType' => {if $field.contactType == 'null'}NULL{else}'{$field.contactType}'{/if},
+{/if}
 {if $field.rule}
                       'rule'      => '{$field.rule}',
 {/if} {* field.rule *}
diff --git a/civicrm/xml/version.xml b/civicrm/xml/version.xml
index ee46895b97dedaca1d343dab641112c65b52f7b4..dfe06e4925683b69571df0903c74ec4adc9fa459 100644
--- a/civicrm/xml/version.xml
+++ b/civicrm/xml/version.xml
@@ -1,4 +1,4 @@
 <?xml version="1.0" encoding="iso-8859-1" ?>
 <version>
-  <version_no>5.21.2</version_no>
+  <version_no>5.22.0</version_no>
 </version>
diff --git a/includes/civicrm.basepage.php b/includes/civicrm.basepage.php
index 2e23236c845edbdd6cf79a7a2e44b40d8f60f814..9ce1a35e9300e299d12bcfbb3fd9e070e1117501 100644
--- a/includes/civicrm.basepage.php
+++ b/includes/civicrm.basepage.php
@@ -384,9 +384,15 @@ class CiviCRM_For_WordPress_Basepage {
     add_filter( 'wp_title', array( $this, 'wp_page_title' ), 100, 3 );
     add_filter( 'document_title_parts', array( $this, 'wp_page_title_parts' ), 100, 1 );
 
-    // Add compatibility with WordPress SEO plugin's Open Graph title
+    // Add compatibility with Yoast SEO plugin's Open Graph title
     add_filter( 'wpseo_opengraph_title', array( $this, 'wpseo_page_title' ), 100, 1 );
 
+    // Don't let the Yoast SEO plugin parse the basepage title
+    if ( class_exists( 'WPSEO_Frontend' ) ) {
+      $frontend = WPSEO_Frontend::get_instance();
+      remove_filter( 'pre_get_document_title', array( $frontend, 'title' ), 15 );
+    }
+
     // Include this content when base page is rendered
     add_filter( 'the_content', array( $this, 'basepage_render' ) );
 
diff --git a/tests/phpunit/CiviWP/HookTest.php b/tests/phpunit/CiviWP/HookTest.php
index 77817acc63ac88467b2bc3acdb9f7db44b32df49..4986f08bbd6808fc2a9c2fb513c93a06261e811a 100644
--- a/tests/phpunit/CiviWP/HookTest.php
+++ b/tests/phpunit/CiviWP/HookTest.php
@@ -9,7 +9,7 @@ namespace CiviWP {
    * @package CiviWP
    * @group e2e
    */
-  class HookTest extends \PHPUnit_Framework_TestCase implements EndToEndInterface {
+  class HookTest extends \PHPUnit\Framework\TestCase implements EndToEndInterface {
 
     public function testFoo() {
       add_action('civicrm_fakeAlterableHook', 'onFakeAlterableHook', 10, 2);
diff --git a/tests/phpunit/CiviWP/PhpVersionTest.php b/tests/phpunit/CiviWP/PhpVersionTest.php
index 42eab3e3080faad3f0ed66cb59ccd8f3b4f81fac..f4800daf5cbe7a741a1485624410a9dae8201ab5 100644
--- a/tests/phpunit/CiviWP/PhpVersionTest.php
+++ b/tests/phpunit/CiviWP/PhpVersionTest.php
@@ -4,7 +4,7 @@ namespace CiviWP;
 
 use Civi\Test\EndToEndInterface;
 
-class PhpVersionTest extends \PHPUnit_Framework_TestCase implements EndToEndInterface {
+class PhpVersionTest extends \PHPUnit\Framework\TestCase implements EndToEndInterface {
 
   /**
    * CIVICRM_WP_PHP_MINIMUM (civicrm.module) should match MINIMUM_PHP_VERSION (CRM/Upgrade/Form.php).
diff --git a/wp-rest/.editorconfig b/wp-rest/.editorconfig
deleted file mode 100644
index 09dc3747d33a42560841336306fc106d96b39a47..0000000000000000000000000000000000000000
--- a/wp-rest/.editorconfig
+++ /dev/null
@@ -1,9 +0,0 @@
-# EditorConfig is awesome: https://editorconfig.org
-
-# Not top-most EditorConfig file
-root = false
-
-# Tab indentation
-[*.php]
-indent_style = tab
-indent_size = 4
diff --git a/wp-rest/Autoloader.php b/wp-rest/Autoloader.php
deleted file mode 100644
index dfa95f8a0219f6d8126f0b77110135049c693690..0000000000000000000000000000000000000000
--- a/wp-rest/Autoloader.php
+++ /dev/null
@@ -1,115 +0,0 @@
-<?php
-/**
- * Autoloader class.
- *
- * @since 0.1
- */
-
-namespace CiviCRM_WP_REST;
-
-class Autoloader {
-
-	/**
-	 * Instance.
-	 *
-	 * @since 0.1
-	 * @var string
-	 */
-	private static $instance = null;
-
-	/**
-	 * Namespace.
-	 *
-	 * @since 0.1
-	 * @var string
-	 */
-	private $namespace = 'CiviCRM_WP_REST';
-
-	/**
-	 * Autoloader directory sources.
-	 *
-	 * @since 0.1
-	 * @var array
-	 */
-	private static $source_directories = [];
-
-	/**
-	 * Constructor.
-	 *
-	 * @since 0.1
-	 */
-	private function __construct() {
-
-		$this->register_autoloader();
-
-	}
-
-	/**
-	 * Creates an instance of this class.
-	 *
-	 * @since 0.1
-	 */
-	private static function instance() {
-
-		if ( ! self::$instance ) self::$instance = new self;
-
-	}
-
-	/**
-	 * Adds a directory source.
-	 *
-	 * @since 0.1
-	 * @param string $source The source path
-	 */
-	public static function add_source( string $source_path ) {
-
-		// make sure we have an instance
-		self::instance();
-
-		if ( ! is_readable( trailingslashit( $source_path ) ) )
-			return \WP_Error( 'civicrm_wp_rest_error', sprintf( __( 'The source %s is not readable.', 'civicrm' ), $source ) );
-
-		self::$source_directories[] = $source_path;
-
-	}
-
-	/**
-	 * Registers the autoloader.
-	 *
-	 * @since 0.1
-	 * @return bool Wehather the autoloader has been registered or not
-	 */
-	private function register_autoloader() {
-
-		return spl_autoload_register( [ $this, 'autoload' ] );
-
-	}
-
-	/**
-	 * Loads the classes.
-	 *
-	 * @since 0.1
-	 * @param string $class_name The class name to load
-	 */
-	private function autoload( $class_name ) {
-
-		if ( false === strpos( $class_name, $this->namespace ) ) return;
-
-		$parts = explode( '\\', $class_name );
-
-		// remove namespace and join class path
-		$class_path = str_replace( '_', '-', implode( DIRECTORY_SEPARATOR, array_slice( $parts, 1 ) ) );
-
-		array_map( function( $source_path ) use ( $class_path ) {
-
-			$path = $source_path . $class_path . '.php';
-
-			if ( ! file_exists( $path ) ) return;
-
-			require $path;
-
-		}, static::$source_directories );
-
-	}
-
-}
diff --git a/wp-rest/Civi/Mailing-Hooks.php b/wp-rest/Civi/Mailing-Hooks.php
deleted file mode 100644
index 7113088b3ba4f868b6ad0ed286af3c205979b3f5..0000000000000000000000000000000000000000
--- a/wp-rest/Civi/Mailing-Hooks.php
+++ /dev/null
@@ -1,136 +0,0 @@
-<?php
-/**
- * CiviCRM Mailing_Hooks class.
- *
- * @since 0.1
- */
-
-namespace CiviCRM_WP_REST\Civi;
-
-class Mailing_Hooks {
-
-	/**
-	 * Mailing Url endpoint.
-	 *
-	 * @since 0.1
-	 * @var string
-	 */
-	public $url_endpoint;
-
-	/**
-	 * Mailing Open endpoint.
-	 *
-	 * @since 0.1
-	 * @var string
-	 */
-	public $open_endpoint;
-
-	/**
-	 * Constructor.
-	 *
-	 * @since 0.1
-	 */
-	public function __construct() {
-
-		$this->url_endpoint = rest_url( 'civicrm/v3/url' );
-
-		$this->open_endpoint = rest_url( 'civicrm/v3/open' );
-
-	}
-
-	/**
-	 * Register hooks.
-	 *
-	 * @since 0.1
-	 */
-	public function register_hooks() {
-
-		add_filter( 'civicrm_alterMailParams', [ $this, 'do_mailing_urls' ], 10, 2 );
-
-	}
-
-	/**
-	 * Filters the mailing html and replaces calls to 'extern/url.php' and
-	 * 'extern/open.php' with their REST counterparts 'civicrm/v3/url' and 'civicrm/v3/open'.
-	 *
-	 * @uses 'civicrm_alterMailParams'
-	 *
-	 * @since 0.1
-	 * @param array &$params Mail params
-	 * @param string $context The Context
-	 * @return array $params The filtered Mail params
-	 */
-	public function do_mailing_urls( &$params, $context ) {
-
-		if ( $context == 'civimail' ) {
-
-			$params['html'] = $this->replace_html_mailing_tracking_urls( $params['html'] );
-
-			$params['text'] = $this->replace_text_mailing_tracking_urls( $params['text'] );
-
-		}
-
-		return $params;
-
-	}
-
-	/**
-	 * Replace html mailing tracking urls.
-	 *
-	 * @since 0.1
-	 * @param string $contnet The mailing content
-	 * @return string $content The mailing content
-	 */
-	public function replace_html_mailing_tracking_urls( string $content ) {
-
-		$doc = \phpQuery::newDocument( $content );
-
-		foreach ( $doc[ '[href*="civicrm/extern/url.php"], [src*="civicrm/extern/open.php"]' ] as $element ) {
-
-			$href = pq( $element )->attr( 'href' );
-			$src = pq( $element )->attr( 'src' );
-
-			// replace extern/url
-			if ( strpos( $href, 'civicrm/extern/url.php' ) )	{
-
-				$query_string = strstr( $href, '?' );
-				pq( $element )->attr( 'href', $this->url_endpoint . $query_string );
-
-			}
-
-			// replace extern/open
-			if ( strpos( $src, 'civicrm/extern/open.php' ) ) {
-
-				$query_string = strstr( $src, '?' );
-				pq( $element )->attr( 'src', $this->open_endpoint . $query_string );
-
-			}
-
-			unset( $href, $src, $query_string );
-
-		}
-
-		return $doc->html();
-
-	}
-
-	/**
-	 * Replace text mailing tracking urls.
-	 *
-	 * @since 0.1
-	 * @param string $contnet The mailing content
-	 * @return string $content The mailing content
-	 */
-	public function replace_text_mailing_tracking_urls( string $content ) {
-
-		// replace extern url
-		$content = preg_replace( '/http.*civicrm\/extern\/url\.php/i', $this->url_endpoint, $content );
-
-		// replace open url
-		$content = preg_replace( '/http.*civicrm\/extern\/open\.php/i', $this->open_endpoint, $content );
-
-		return $content;
-
-	}
-
-}
diff --git a/wp-rest/Controller/AuthorizeIPN.php b/wp-rest/Controller/AuthorizeIPN.php
deleted file mode 100644
index 4cd9da9a97786f3176f55ec59c2528a77b774554..0000000000000000000000000000000000000000
--- a/wp-rest/Controller/AuthorizeIPN.php
+++ /dev/null
@@ -1,123 +0,0 @@
-<?php
-/**
- * AuthorizeIPN controller class.
- *
- * Replacement for CiviCRM's 'extern/authorizeIPN.php'.
- *
- * @see https://docs.civicrm.org/sysadmin/en/latest/setup/payment-processors/authorize-net/#shell-script-testing-method
- *
- * @since 0.1
- */
-
-namespace CiviCRM_WP_REST\Controller;
-
-class AuthorizeIPN extends Base {
-
-	/**
-	 * The base route.
-	 *
-	 * @since 0.1
-	 * @var string
-	 */
-	protected $rest_base = 'authorizeIPN';
-
-	/**
-	 * Registers routes.
-	 *
-	 * @since 0.1
-	 */
-	public function register_routes() {
-
-		register_rest_route( $this->get_namespace(), $this->get_rest_base(), [
-			[
-				'methods' => \WP_REST_Server::ALLMETHODS,
-				'callback' => [ $this, 'get_item' ]
-			]
-		] );
-
-	}
-
-	/**
-	 * Get items.
-	 *
-	 * @since 0.1
-	 * @param WP_REST_Request $request
-	 */
-	public function get_item( $request ) {
-
-		/**
-		 * Filter request params.
-		 *
-		 * @since 0.1
-		 * @param array $params
-		 * @param WP_REST_Request $request
-		 */
-		$params = apply_filters( 'civi_wp_rest/controller/authorizeIPN/params', $request->get_params(), $request );
-
-		$authorize_IPN = new \CRM_Core_Payment_AuthorizeNetIPN( $params );
-
-		// log notification
-		\Civi::log()->alert( 'payment_notification processor_name=AuthNet', $params );
-
-		/**
-		 * Filter AuthorizeIPN object.
-		 *
-		 * @param CRM_Core_Payment_AuthorizeNetIPN $authorize_IPN
-		 * @param array $params
-		 * @param WP_REST_Request $request
-		 */
-		$authorize_IPN = apply_filters( 'civi_wp_rest/controller/authorizeIPN/instance', $authorize_IPN, $params, $request );
-
-		try {
-
-			if ( ! method_exists( $authorize_IPN, 'main' ) || ! $this->instance_of_crm_base_ipn( $authorize_IPN ) )
-				return $this->civi_rest_error( sprintf( __( '%s must implement a "main" method.', 'civicrm' ), get_class( $authorize_IPN ) ) );
-
-			$result = $authorize_IPN->main();
-
-		} catch ( \CRM_Core_Exception $e ) {
-
-			\Civi::log()->error( $e->getMessage() );
-			\Civi::log()->error( 'error data ', [ 'data' => $e->getErrorData() ] );
-			\Civi::log()->error( 'REQUEST ', [ 'params' => $params ] );
-
-			return $this->civi_rest_error( $e->getMessage() );
-
-		}
-
-		return rest_ensure_response( $result );
-
-	}
-
-	/**
-	 * Checks whether object is an instance of CRM_Core_Payment_AuthorizeNetIPN or CRM_Core_Payment_BaseIPN.
-	 *
-	 * Needed because the instance is being filtered through 'civi_wp_rest/controller/authorizeIPN/instance'.
-	 *
-	 * @since 0.1
-	 * @param CRM_Core_Payment_AuthorizeNetIPN|CRM_Core_Payment_BaseIPN $object
-	 * @return bool
-	 */
-	public function instance_of_crm_base_ipn( $object ) {
-
-		return $object instanceof \CRM_Core_Payment_BaseIPN || $object instanceof \CRM_Core_Payment_AuthorizeNetIPN;
-
-	}
-
-	/**
-	 * Item schema.
-	 *
-	 * @since 0.1
-	 * @return array $schema
-	 */
-	public function get_item_schema() {}
-
-	/**
-	 * Item arguments.
-	 *
-	 * @since 0.1
-	 * @return array $arguments
-	 */
-	public function get_item_args() {}
-
-}
diff --git a/wp-rest/Controller/Base.php b/wp-rest/Controller/Base.php
deleted file mode 100644
index 7546377e9e0973103beeaf4fff5e9789df04070c..0000000000000000000000000000000000000000
--- a/wp-rest/Controller/Base.php
+++ /dev/null
@@ -1,107 +0,0 @@
-<?php
-/**
- * Base controller class.
- *
- * @since 0.1
- */
-
-namespace CiviCRM_WP_REST\Controller;
-
-use CiviCRM_WP_REST\Endpoint\Endpoint_Interface;
-
-abstract class Base extends \WP_REST_Controller implements Endpoint_Interface {
-
-	/**
-	 * Route namespace.
-	 *
-	 * @since 0.1
-	 * @var string
-	 */
-	protected $namespace = 'civicrm/v3';
-
-	/**
-	 * Gets the endpoint namespace.
-	 *
-	 * @since 0.1
-	 * @return string $namespace
-	 */
-	public function get_namespace() {
-
-		return $this->namespace;
-
-	}
-
-	/**
-	 * Gets the rest base route.
-	 *
-	 * @since 0.1
-	 * @return string $rest_base
-	 */
-	public function get_rest_base() {
-
-		return '/' . $this->rest_base;
-
-	}
-
-	/**
-	 * Retrieves the endpoint ie. '/civicrm/v3/rest'.
-	 *
-	 * @since 0.1
-	 * @return string $rest_base
-	 */
-	public function get_endpoint() {
-
-		return '/' . $this->get_namespace() . $this->get_rest_base();
-
-	}
-
-	/**
-	 * Checks whether the requested route is equal to this endpoint.
-	 *
-	 * @since 0.1
-	 * @param WP_REST_Request $request
-	 * @return bool $is_current_endpoint True if it's equal, false otherwise
-	 */
-	public function is_current_endpoint( $request ) {
-
-		return $this->get_endpoint() == $request->get_route();
-
-	}
-
-	/**
-	 * Authorization status code.
-	 *
-	 * @since 0.1
-	 * @return int $status
-	 */
-	protected function authorization_status_code() {
-
-		$status = 401;
-
-		if ( is_user_logged_in() ) $status = 403;
-
-		return $status;
-
-	}
-
-	/**
-	 * Wrapper for WP_Error.
-	 *
-	 * @since 0.1
-	 * @param string|\CiviCRM_API3_Exception $error
-	 * @param mixed $data Error data
-	 * @return WP_Error $error
-	 */
-	protected function civi_rest_error( $error, $data = [] ) {
-
-		if ( $error instanceof \CiviCRM_API3_Exception ) {
-
-			return $error->getExtraParams();
-
-		}
-
-		return new \WP_Error( 'civicrm_rest_api_error', $error, empty( $data ) ? [ 'status' => $this->authorization_status_code() ] : $data );
-
-	}
-
-}
diff --git a/wp-rest/Controller/Cxn.php b/wp-rest/Controller/Cxn.php
deleted file mode 100644
index 7f7cca5c5621c3eb3441ca7060d5e1048eb85ade..0000000000000000000000000000000000000000
--- a/wp-rest/Controller/Cxn.php
+++ /dev/null
@@ -1,125 +0,0 @@
-<?php
-/**
- * Cxn controller class.
- *
- * CiviConnect endpoint, replacement for CiviCRM's 'extern/cxn.php'.
- *
- * @since 0.1
- */
-
-namespace CiviCRM_WP_REST\Controller;
-
-class Cxn extends Base {
-
-	/**
-	 * The base route.
-	 *
-	 * @since 0.1
-	 * @var string
-	 */
-	protected $rest_base = 'cxn';
-
-	/**
-	 * Registers routes.
-	 *
-	 * @since 0.1
-	 */
-	public function register_routes() {
-
-		register_rest_route( $this->get_namespace(), $this->get_rest_base(), [
-			[
-				'methods' => \WP_REST_Server::ALLMETHODS,
-				'callback' => [ $this, 'get_item' ]
-			]
-		] );
-
-	}
-
-	/**
-	 * Get items.
-	 *
-	 * @since 0.1
-	 * @param WP_REST_Request $request
-	 */
-	public function get_item( $request ) {
-
-		/**
-		 * Filter request params.
-		 *
-		 * @since 0.1
-		 * @param array $params
-		 * @param WP_REST_Request $request
-		 */
-		$params = apply_filters( 'civi_wp_rest/controller/cxn/params', $request->get_params(), $request );
-
-		// init connection server
-		$cxn = \CRM_Cxn_BAO_Cxn::createApiServer();
-
-		/**
-		 * Filter connection server object.
-		 *
-		 * @param Civi\Cxn\Rpc\ApiServer $cxn
-		 * @param array $params
-		 * @param WP_REST_Request $request
-		 */
-		$cxn = apply_filters( 'civi_wp_rest/controller/cxn/instance', $cxn, $params, $request );
-
-		try {
-
-			$result = $cxn->handle( $request->get_body() );
-
-		} catch ( Civi\Cxn\Rpc\Exception\CxnException $e ) {
-
-			return $this->civi_rest_error( $e->getMessage() );
-
-		} catch ( Civi\Cxn\Rpc\Exception\ExpiredCertException $e ) {
-
-			return $this->civi_rest_error( $e->getMessage() );
-
-		} catch ( Civi\Cxn\Rpc\Exception\InvalidCertException $e ) {
-
-			return $this->civi_rest_error( $e->getMessage() );
-
-		} catch ( Civi\Cxn\Rpc\Exception\InvalidMessageException $e ) {
-
-			return $this->civi_rest_error( $e->getMessage() );
-
-		} catch ( Civi\Cxn\Rpc\Exception\GarbledMessageException $e ) {
-
-			return $this->civi_rest_error( $e->getMessage() );
-
-		}
-
-		/**
-		 * Bypass WP and send request from Cxn.
-		 */
-		add_filter( 'rest_pre_serve_request', function( $served, $response, $request, $server ) use ( $result ) {
-
-			// Civi\Cxn\Rpc\Message->send()
-			$result->send();
-
-			return true;
-
-		}, 10, 4 );
-
-		return rest_ensure_response( $result );
-
-	}
-
-	/**
-	 * Item schema.
-	 *
-	 * @since 0.1
-	 * @return array $schema
-	 */
-	public function get_item_schema() {}
-
-	/**
-	 * Item arguments.
-	 *
-	 * @since 0.1
-	 * @return array $arguments
-	 */
-	public function get_item_args() {}
-
-}
diff --git a/wp-rest/Controller/Open.php b/wp-rest/Controller/Open.php
deleted file mode 100644
index 450ef991a34897a169761dc9c1fdfcc57b4a0bf5..0000000000000000000000000000000000000000
--- a/wp-rest/Controller/Open.php
+++ /dev/null
@@ -1,129 +0,0 @@
-<?php
-/**
- * Open controller class.
- *
- * @since 0.1
- */
-
-namespace CiviCRM_WP_REST\Controller;
-
-class Open extends Base {
-
-	/**
-	 * The base route.
-	 *
-	 * @since 0.1
-	 * @var string
-	 */
-	protected $rest_base = 'open';
-
-	/**
-	 * Registers routes.
-	 *
-	 * @since 0.1
-	 */
-	public function register_routes() {
-
-		register_rest_route( $this->get_namespace(), $this->get_rest_base(), [
-			[
-				'methods' => \WP_REST_Server::READABLE,
-				'callback' => [ $this, 'get_item' ],
-				'args' => $this->get_item_args()
-			],
-			'schema' => [ $this, 'get_item_schema' ]
-		] );
-
-	}
-
-	/**
-	 * Get item.
-	 *
-	 * @since 0.1
-	 * @param WP_REST_Request $request
-	 */
-	public function get_item( $request ) {
-
-		$queue_id = $request->get_param( 'q' );
-
-		// track open
-		\CRM_Mailing_Event_BAO_Opened::open( $queue_id );
-
-		// serve tracker file
-		add_filter( 'rest_pre_serve_request', [ $this, 'serve_tracker_file' ], 10, 4 );
-
-	}
-
-	/**
-	 * Serves the tracker gif file.
-	 *
-	 * @since 0.1
-	 * @param bool $served Whether the request has been served
-	 * @param WP_REST_Response $result
-	 * @param WP_REST_Request $request
-	 * @param WP_REST_Server $server
-	 * @return bool $served Whether the request has been served
-	 */
-	public function serve_tracker_file( $served, $result, $request, $server ) {
-
-		// tracker file path
-		$file = CIVICRM_PLUGIN_DIR . 'civicrm/i/tracker.gif';
-
-		// set headers
-		$server->send_header( 'Content-type', 'image/gif' );
-		$server->send_header( 'Cache-Control', 'must-revalidate, post-check=0, pre-check=0' );
-		$server->send_header( 'Content-Description', 'File Transfer' );
-		$server->send_header( 'Content-Disposition', 'inline; filename=tracker.gif' );
-		$server->send_header( 'Content-Length', filesize( $file ) );
-
-		$buffer = readfile( $file );
-
-		return true;
-
-	}
-
-	/**
-	 * Item schema.
-	 *
-	 * @since 0.1
-	 * @return array $schema
-	 */
-	public function get_item_schema() {
-
-		return [
-			'$schema' => 'http://json-schema.org/draft-04/schema#',
-			'title' => 'civicrm/v3/open',
-			'description' => __( 'CiviCRM Open endpoint', 'civicrm' ),
-			'type' => 'object',
-			'required' => [ 'q' ],
-			'properties' => [
-				'q' => [
-					'type' => 'integer'
-				]
-			]
-		];
-
-	}
-
-	/**
-	 * Item arguments.
-	 *
-	 * @since 0.1
-	 * @return array $arguments
-	 */
-	public function get_item_args() {
-
-		return [
-			'q' => [
-				'type' => 'integer',
-				'required' => true,
-				'validate_callback' => function( $value, $request, $key ) {
-
-					return is_numeric( $value );
-
-				}
-			]
-		];
-
-	}
-
-}
diff --git a/wp-rest/Controller/PayPalIPN.php b/wp-rest/Controller/PayPalIPN.php
deleted file mode 100644
index 5b5c38004525287b69024d51ea378cb5615f60bc..0000000000000000000000000000000000000000
--- a/wp-rest/Controller/PayPalIPN.php
+++ /dev/null
@@ -1,134 +0,0 @@
-<?php
-/**
- * PayPalIPN controller class.
- *
- * PayPal IPN endpoint, replacement for CiviCRM's 'extern/ipn.php'.
- *
- * @since 0.1
- */
-
-namespace CiviCRM_WP_REST\Controller;
-
-class PayPalIPN extends Base {
-
-	/**
-	 * The base route.
-	 *
-	 * @since 0.1
-	 * @var string
-	 */
-	protected $rest_base = 'ipn';
-
-	/**
-	 * Registers routes.
-	 *
-	 * @since 0.1
-	 */
-	public function register_routes() {
-
-		register_rest_route( $this->get_namespace(), $this->get_rest_base(), [
-			[
-				'methods' => \WP_REST_Server::ALLMETHODS,
-				'callback' => [ $this, 'get_item' ]
-			]
-		] );
-
-	}
-
-	/**
-	 * Get items.
-	 *
-	 * @since 0.1
-	 * @param WP_REST_Request $request
-	 */
-	public function get_item( $request ) {
-
-		/**
-		 * Filter request params.
-		 *
-		 * @since 0.1
-		 * @param array $params
-		 * @param WP_REST_Request $request
-		 */
-		$params = apply_filters( 'civi_wp_rest/controller/ipn/params', $request->get_params(), $request );
-
-		if ( $request->get_method() == 'GET' ) {
-
-			// paypal standard
-			$paypal_IPN = new \CRM_Core_Payment_PayPalIPN( $params );
-
-			// log notification
-			\Civi::log()->alert( 'payment_notification processor_name=PayPal_Standard', $params );
-
-		} else {
-
-			// paypal pro
-			$paypal_IPN = new \CRM_Core_Payment_PayPalProIPN( $params );
-
-			// log notification
-			\Civi::log()->alert( 'payment_notification processor_name=PayPal', $params );
-
-		}
-
-		/**
-		 * Filter PayPalIPN object.
-		 *
-		 * @param CRM_Core_Payment_PayPalIPN|CRM_Core_Payment_PayPalProIPN $paypal_IPN
-		 * @param array $params
-		 * @param WP_REST_Request $request
-		 */
-		$paypal_IPN = apply_filters( 'civi_wp_rest/controller/ipn/instance', $paypal_IPN, $params, $request );
-
-		try {
-
-			if ( ! method_exists( $paypal_IPN, 'main' ) || ! $this->instance_of_crm_base_ipn( $paypal_IPN ) )
-				return $this->civi_rest_error( sprintf( __( '%s must implement a "main" method.', 'civicrm' ), get_class( $paypal_IPN ) ) );
-
-			$result = $paypal_IPN->main();
-
-		} catch ( \CRM_Core_Exception $e ) {
-
-			\Civi::log()->error( $e->getMessage() );
-			\Civi::log()->error( 'error data ', [ 'data' => $e->getErrorData() ] );
-			\Civi::log()->error( 'REQUEST ', [ 'params' => $params ] );
-
-			return $this->civi_rest_error( $e->getMessage() );
-
-		}
-
-		return rest_ensure_response( $result );
-
-	}
-
-	/**
-	 * Checks whether object is an instance of CRM_Core_Payment_BaseIPN|CRM_Core_Payment_PayPalProIPN|CRM_Core_Payment_PayPalIPN.
-	 *
-	 * Needed because the instance is being filtered through 'civi_wp_rest/controller/ipn/instance'.
-	 *
-	 * @since 0.1
-	 * @param CRM_Core_Payment_BaseIPN|CRM_Core_Payment_PayPalProIPN|CRM_Core_Payment_PayPalIPN $object
-	 * @return bool
-	 */
-	public function instance_of_crm_base_ipn( $object ) {
-
-		return $object instanceof \CRM_Core_Payment_BaseIPN || $object instanceof \CRM_Core_Payment_PayPalProIPN || $object instanceof \CRM_Core_Payment_PayPalIPN;
-
-	}
-
-	/**
-	 * Item schema.
-	 *
-	 * @since 0.1
-	 * @return array $schema
-	 */
-	public function get_item_schema() {}
-
-	/**
-	 * Item arguments.
-	 *
-	 * @since 0.1
-	 * @return array $arguments
-	 */
-	public function get_item_args() {}
-
-}
diff --git a/wp-rest/Controller/PxIPN.php b/wp-rest/Controller/PxIPN.php
deleted file mode 100644
index d68fc8d787ae3e87eb449f36b459e0b8d24d845a..0000000000000000000000000000000000000000
--- a/wp-rest/Controller/PxIPN.php
+++ /dev/null
@@ -1,139 +0,0 @@
-<?php
-/**
- * PxIPN controller class.
- *
- * PxPay IPN endpoint, replacement for CiviCRM's 'extern/pxIPN.php'.
- *
- * @since 0.1
- */
-
-namespace CiviCRM_WP_REST\Controller;
-
-class PxIPN extends Base {
-
-	/**
-	 * The base route.
-	 *
-	 * @since 0.1
-	 * @var string
-	 */
-	protected $rest_base = 'pxIPN';
-
-	/**
-	 * Registers routes.
-	 *
-	 * @since 0.1
-	 */
-	public function register_routes() {
-
-		register_rest_route( $this->get_namespace(), $this->get_rest_base(), [
-			[
-				'methods' => \WP_REST_Server::ALLMETHODS,
-				'callback' => [ $this, 'get_item' ]
-			]
-		] );
-
-	}
-
-	/**
-	 * Get items.
-	 *
-	 * @since 0.1
-	 * @param WP_REST_Request $request
-	 */
-	public function get_item( $request ) {
-
-		/**
-		 * Filter payment processor params.
-		 *
-		 * @since 0.1
-		 * @param array $params
-		 * @param WP_REST_Request $request
-		 */
-		$params = apply_filters(
-			'civi_wp_rest/controller/pxIPN/params',
-			$this->get_payment_processor_args( $request ),
-			$request
-		);
-
-		// log notification
-		\Civi::log()->alert( 'payment_notification processor_name=Payment_Express', $params );
-
-		try {
-
-			$result = \CRM_Core_Payment_PaymentExpressIPN::main( ...$params );
-
-		} catch ( \CRM_Core_Exception $e ) {
-
-			\Civi::log()->error( $e->getMessage() );
-			\Civi::log()->error( 'error data ', [ 'data' => $e->getErrorData() ] );
-			\Civi::log()->error( 'REQUEST ', [ 'params' => $params ] );
-
-			return $this->civi_rest_error( $e->getMessage() );
-
-		}
-
-		return rest_ensure_response( $result );
-
-	}
-
-	/**
-	 * Get payment processor necessary params.
-	 *
-	 * @since 0.1
-	 * @param WP_REST_Resquest $request
-	 * @return array $args
-	 */
-	public function get_payment_processor_args( $request ) {
-
-		// get payment processor types
-		$payment_processor_types = civicrm_api3( 'PaymentProcessor', 'getoptions', [
-			'field' => 'payment_processor_type_id'
-		] );
-
-		// payment processor params
-		$params = apply_filters( 'civi_wp_rest/controller/pxIPN/payment_processor_params', [
-			'user_name' => $request->get_param( 'userid' ),
-			'payment_processor_type_id' => array_search(
-				'DPS Payment Express',
-				$payment_processor_types['values']
-			),
-			'is_active' => 1,
-			'is_test' => 0
-		] );
-
-		// get payment processor
-		$payment_processor = civicrm_api3( 'PaymentProcessor', 'get', $params );
-
-		$args = $payment_processor['values'][$payment_processor['id']];
-
-		$method = empty( $args['signature'] ) ? 'pxpay' : 'pxaccess';
-
-		return [
-			$method,
-			$request->get_param( 'result' ),
-			$args['url_site'],
-			$args['user_name'],
-			$args['password'],
-			$args['signature']
-		];
-
-	}
-
-	/**
-	 * Item schema.
-	 *
-	 * @since 0.1
-	 * @return array $schema
-	 */
-	public function get_item_schema() {}
-
-	/**
-	 * Item arguments.
-	 *
-	 * @since 0.1
-	 * @return array $arguments
-	 */
-	public function get_item_args() {}
-
-}
diff --git a/wp-rest/Controller/Rest.php b/wp-rest/Controller/Rest.php
deleted file mode 100644
index 61706f85fdc56b540829ca685dc607b173e45795..0000000000000000000000000000000000000000
--- a/wp-rest/Controller/Rest.php
+++ /dev/null
@@ -1,522 +0,0 @@
-<?php
-/**
- * Rest controller class.
- *
- * @since 0.1
- */
-
-namespace CiviCRM_WP_REST\Controller;
-
-class Rest extends Base {
-
-	/**
-	 * The base route.
-	 *
-	 * @since 0.1
-	 * @var string
-	 */
-	protected $rest_base = 'rest';
-
-	/**
-	 * Registers routes.
-	 *
-	 * @since 0.1
-	 */
-	public function register_routes() {
-
-		register_rest_route( $this->get_namespace(), $this->get_rest_base(), [
-			[
-				'methods' => \WP_REST_Server::ALLMETHODS,
-				'callback' => [ $this, 'get_items' ],
-				'permission_callback' => [ $this, 'permissions_check' ],
-				'args' => $this->get_item_args()
-			],
-			'schema' => [ $this, 'get_item_schema' ]
-		] );
-
-	}
-
-	/**
-	 * Check get permission.
-	 *
-	 * @since 0.1
-	 * @param WP_REST_Request $request
-	 * @return bool
-	 */
-	public function permissions_check( $request ) {
-
-		if ( ! $this->is_valid_api_key( $request ) )
-			return $this->civi_rest_error( __( 'Param api_key is not valid.', 'civicrm' ) );
-
-		if ( ! $this->is_valid_site_key() )
-			return $this->civi_rest_error( __( 'Param key is not valid.', 'civicrm' ) );
-
-		return true;
-
-	}
-
-	/**
-	 * Get items.
-	 *
-	 * @since 0.1
-	 * @param WP_REST_Request $request
-	 */
-	public function get_items( $request ) {
-
-		/**
-		 * Filter formatted api params.
-		 *
-		 * @since 0.1
-		 * @param array $params
-		 * @param WP_REST_Request $request
-		 */
-		$params = apply_filters( 'civi_wp_rest/controller/rest/api_params', $this->get_formatted_api_params( $request ), $request );
-
-		try {
-
-			$items = civicrm_api3( ...$params );
-
-		} catch ( \CiviCRM_API3_Exception $e ) {
-
-			$items = $this->civi_rest_error( $e );
-
-		}
-
-		if ( ! isset( $items ) || empty( $items ) )
-			return rest_ensure_response( [] );
-
-		/**
-		 * Filter civi api result.
-		 *
-		 * @since 0.1
-		 * @param array $items
-		 * @param WP_REST_Request $request
-		 */
-		$data = apply_filters( 'civi_wp_rest/controller/rest/api_result', $items, $params, $request );
-
-		// only collections of items, ie any action but 'getsingle'
-		if ( isset( $data['values'] ) ) {
-
-			$data['values'] = array_reduce( $items['values'] ?? $items, function( $items, $item ) use ( $request ) {
-
-				$response = $this->prepare_item_for_response( $item, $request );
-
-				$items[] = $this->prepare_response_for_collection( $response );
-
-				return $items;
-
-			}, [] );
-
-		}
-
-		$response = rest_ensure_response( $data );
-
-		// check wheather we need to serve xml or json
-		if ( ! in_array( 'json', array_keys( $request->get_params() ) ) ) {
-
-			/**
-			 * Adds our response holding Civi data before dispatching.
-			 *
-			 * @since 0.1
-			 * @param WP_HTTP_Response $result Result to send to client
-			 * @param WP_REST_Server $server The REST server
-			 * @param WP_REST_Request $request The request
-			 * @return WP_HTTP_Response $result Result to send to client
-			 */
-			add_filter( 'rest_post_dispatch', function( $result, $server, $request ) use ( $response ) {
-
-				return $response;
-
-			}, 10, 3 );
-
-			// serve xml
-			add_filter( 'rest_pre_serve_request', [ $this, 'serve_xml_response' ], 10, 4 );
-
-		} else {
-
-			// return json
-			return $response;
-
-		}
-
-	}
-
-	/**
-	 * Get formatted api params.
-	 *
-	 * @since 0.1
-	 * @param WP_REST_Resquest $request
-	 * @return array $params
-	 */
-	public function get_formatted_api_params( $request ) {
-
-		$args = $request->get_params();
-
-		$entity = $args['entity'];
-		$action = $args['action'];
-
-		// unset unnecessary args
-		unset( $args['entity'], $args['action'], $args['key'], $args['api_key'] );
-
-		if ( ! isset( $args['json'] ) || is_numeric( $args['json'] ) ) {
-
-			$params = $args;
-
-		} else {
-
-			$params = is_string( $args['json'] ) ? json_decode( $args['json'], true ) : [];
-
-		}
-
-		// ensure check permissions is enabled
-		$params['check_permissions'] = true;
-
-		return [ $entity, $action, $params ];
-
-	}
-
-	/**
-	 * Matches the item data to the schema.
-	 *
-	 * @since 0.1
-	 * @param object $item
-	 * @param WP_REST_Request $request
-	 */
-	public function prepare_item_for_response( $item, $request ) {
-
-		return rest_ensure_response( $item );
-
-	}
-
-	/**
-	 * Serves XML response.
-	 *
-	 * @since 0.1
-	 * @param bool $served Whether the request has already been served
-	 * @param WP_REST_Response $result
-	 * @param WP_REST_Request $request
-	 * @param WP_REST_Server $server
-	 */
-	public function serve_xml_response( $served, $result, $request, $server ) {
-
-		// get xml from response
-		$xml = $this->get_xml_formatted_data( $result->get_data() );
-
-		// set content type header
-		$server->send_header( 'Content-Type', 'text/xml' );
-
-		echo $xml;
-
-		return true;
-
-	}
-
-	/**
-	 * Formats CiviCRM API result to XML.
-	 *
-	 * @since 0.1
-	 * @param array $data The CiviCRM api result
-	 * @return string $xml The formatted xml
-	 */
-	protected function get_xml_formatted_data( array $data ) {
-
-		// xml document
-		$xml = new \DOMDocument();
-
-		// result set element <ResultSet>
-		$result_set = $xml->createElement( 'ResultSet' );
-
-		// xmlns:xsi attribute
-		$result_set->setAttribute( 'xmlns:xsi', 'http://www.w3.org/2001/XMLSchema-instance' );
-
-		// count attribute
-		if ( isset( $data['count'] ) ) $result_set->setAttribute( 'count', $data['count'] );
-
-		// build result from result => values
-		if ( isset( $data['values'] ) ) {
-
-			array_map( function( $item ) use ( $result_set, $xml ) {
-
-				// result element <Result>
-				$result = $xml->createElement( 'Result' );
-
-				// format item
-				$result = $this->get_xml_formatted_item( $item, $result, $xml );
-
-				// append result to result set
-				$result_set->appendChild( $result );
-
-			}, $data['values'] );
-
-		} else {
-
-			// result element <Result>
-			$result = $xml->createElement( 'Result' );
-
-			// format item
-			$result = $this->get_xml_formatted_item( $data, $result, $xml );
-
-			// append result to result set
-			$result_set->appendChild( $result );
-
-		}
-
-		// append result set
-		$xml->appendChild( $result_set );
-
-		return $xml->saveXML();
-
-	}
-
-	/**
-	 * Formats a single api result to xml.
-	 *
-	 * @since 0.1
-	 * @param array $item The single api result
-	 * @param DOMElement $parent The parent element to append to
-	 * @param DOMDocument $doc The document
-	 * @return DOMElement $parent The parent element
-	 */
-	public function get_xml_formatted_item( array $item, \DOMElement $parent, \DOMDocument $doc ) {
-
-		// build field => values
-		array_map( function( $field, $value ) use ( $parent, $doc ) {
-
-			// entity field element
-			$element = $doc->createElement( $field );
-
-			// handle array values
-			if ( is_array( $value ) ) {
-
-				array_map( function( $key, $val ) use ( $element, $doc ) {
-
-					// child element, append underscore '_' otherwise createElement
-					// will throw an Invalid character exception as elements cannot start with a number
-					$child = $doc->createElement( '_' . $key, $val );
-
-					// append child
-					$element->appendChild( $child );
-
-				}, array_keys( $value ), $value );
-
-			} else {
-
-				// assign value
-				$element->nodeValue = $value;
-
-			}
-
-			// append element
-			$parent->appendChild( $element );
-
-		}, array_keys( $item ), $item );
-
-		return $parent;
-
-	}
-
-	/**
-	 * Item schema.
-	 *
-	 * @since 0.1
-	 * @return array $schema
-	 */
-	public function get_item_schema() {
-
-		return [
-			'$schema' => 'http://json-schema.org/draft-04/schema#',
-			'title' => 'civicrm/v3/rest',
-			'description' => __( 'CiviCRM API3 WP rest endpoint wrapper', 'civicrm' ),
-			'type' => 'object',
-			'required' => [ 'entity', 'action', 'params' ],
-			'properties' => [
-				'is_error' => [
-					'type' => 'integer'
-				],
-				'version' => [
-					'type' => 'integer'
-				],
-				'count' => [
-					'type' => 'integer'
-				],
-				'values' => [
-					'type' => 'array'
-				]
-			]
-		];
-
-	}
-
-	/**
-	 * Item arguments.
-	 *
-	 * @since 0.1
-	 * @return array $arguments
-	 */
-	public function get_item_args() {
-
-		return [
-			'key' => [
-				'type' => 'string',
-				'required' => true,
-				'validate_callback' => function( $value, $request, $key ) {
-
-					return $this->is_valid_site_key();
-
-				}
-			],
-			'api_key' => [
-				'type' => 'string',
-				'required' => true,
-				'validate_callback' => function( $value, $request, $key ) {
-
-					return $this->is_valid_api_key( $request );
-
-				}
-			],
-			'entity' => [
-				'type' => 'string',
-				'required' => true,
-				'validate_callback' => function( $value, $request, $key ) {
-
-					return is_string( $value );
-
-				}
-			],
-			'action' => [
-				'type' => 'string',
-				'required' => true,
-				'validate_callback' => function( $value, $request, $key ) {
-
-					return is_string( $value );
-
-				}
-			],
-			'json' => [
-				'type' => ['integer', 'string', 'array'],
-				'required' => false,
-				'validate_callback' => function( $value, $request, $key ) {
-
-					return is_numeric( $value ) || is_array( $value ) || $this->is_valid_json( $value );
-
-				}
-			]
-		];
-
-	}
-
-	/**
-	 * Checks if string is a valid json.
-	 *
-	 * @since 0.1
-	 * @param string $param
-	 * @return bool
-	 */
-	protected function is_valid_json( $param ) {
-
-		$param = json_decode( $param, true );
-
-		if ( ! is_array( $param ) ) return false;
-
- 		return ( json_last_error() == JSON_ERROR_NONE );
-
-	}
-
-	/**
-	 * Validates the site key.
-	 *
-	 * @since 0.1
-	 * @return bool $is_valid_site_key
-	 */
-	private function is_valid_site_key() {
-
-		return \CRM_Utils_System::authenticateKey( false );
-
-	}
-
-	/**
-	 * Validates the api key.
-	 *
-	 * @since 0.1
-	 * @param WP_REST_Resquest $request
-	 * @return bool $is_valid_api_key
-	 */
-	private function is_valid_api_key( $request ) {
-
-		$api_key = $request->get_param( 'api_key' );
-
-		if ( ! $api_key ) return false;
-
-		$contact_id = \CRM_Core_DAO::getFieldValue( 'CRM_Contact_DAO_Contact', $api_key, 'id', 'api_key' );
-
-		// validate contact and login
-		if ( $contact_id ) {
-
-			$wp_user = $this->get_wp_user( $contact_id );
-
-			$this->do_user_login( $wp_user );
-
-			return true;
-
-		}
-
-		return false;
-
-	}
-
-	/**
-	 * Get WordPress user data.
-	 *
-	 * @since 0.1
-	 * @param int $contact_id The contact id
-	 * @return bool|WP_User $user The WordPress user data
-	 */
-	protected function get_wp_user( int $contact_id ) {
-
-		try {
-
-			// Get CiviCRM domain group ID from constant, if set.
-			$domain_id = defined( 'CIVICRM_DOMAIN_ID' ) ? CIVICRM_DOMAIN_ID : 0;
-
-			// If this fails, get it from config.
-			if ( $domain_id === 0 ) {
-				$domain_id = CRM_Core_Config::domainID();
-			}
-
-			// Call API.
-			$uf_match = civicrm_api3( 'UFMatch', 'getsingle', [
-				'contact_id' => $contact_id,
-				'domain_id' => $domain_id,
-			] );
-
-		} catch ( \CiviCRM_API3_Exception $e ) {
-
-			return $this->civi_rest_error( $e->getMessage() );
-
-		}
-
-		$wp_user = get_userdata( $uf_match['uf_id'] );
-
-		return $wp_user;
-
-	}
-
-	/**
-	 * Logs in the WordPress user, needed to respect CiviCRM ACL and permissions.
-	 *
-	 * @since 0.1
-	 * @param  WP_User $user
-	 */
-	protected function do_user_login( \WP_User $user ) {
-
-		if ( is_user_logged_in() ) return;
-
-		wp_set_current_user( $user->ID, $user->user_login );
-
-		wp_set_auth_cookie( $user->ID );
-
-		do_action( 'wp_login', $user->user_login, $user );
-
-	}
-
-}
diff --git a/wp-rest/Controller/Soap.php b/wp-rest/Controller/Soap.php
deleted file mode 100644
index 17402cc579a834ca8854014e683a53aad5011399..0000000000000000000000000000000000000000
--- a/wp-rest/Controller/Soap.php
+++ /dev/null
@@ -1,98 +0,0 @@
-<?php
-/**
- * Soap controller class.
- *
- * Soap endpoint, replacement for CiviCRM's 'extern/soap.php'.
- *
- * @since 0.1
- */
-
-namespace CiviCRM_WP_REST\Controller;
-
-class Soap extends Base {
-
-	/**
-	 * The base route.
-	 *
-	 * @since 0.1
-	 * @var string
-	 */
-	protected $rest_base = 'soap';
-
-	/**
-	 * Registers routes.
-	 *
-	 * @since 0.1
-	 */
-	public function register_routes() {
-
-		register_rest_route( $this->get_namespace(), $this->get_rest_base(), [
-			[
-				'methods' => \WP_REST_Server::ALLMETHODS,
-				'callback' => [ $this, 'get_item' ]
-			]
-		] );
-
-	}
-
-	/**
-	 * Get items.
-	 *
-	 * @since 0.1
-	 * @param WP_REST_Request $request
-	 */
-	public function get_item( $request ) {
-
-		/**
-		 * Filter request params.
-		 *
-		 * @since 0.1
-		 * @param array $params
-		 * @param WP_REST_Request $request
-		 */
-		$params = apply_filters( 'civi_wp_rest/controller/soap/params', $request->get_params(), $request );
-
-		// init soap server
-		$soap_server = new \SoapServer(
-			NULL,
-			[
-				'uri' => 'urn:civicrm',
-				'soap_version' => SOAP_1_2,
-			]
-		);
-
-		$crm_soap_server = new \CRM_Utils_SoapServer();
-
-		$soap_server->setClass( 'CRM_Utils_SoapServer', \CRM_Core_Config::singleton()->userFrameworkClass );
-		$soap_server->setPersistence( SOAP_PERSISTENCE_SESSION );
-
-		/**
-		 * Bypass WP and send request from Soap server.
-		 */
-		add_filter( 'rest_pre_serve_request', function( $served, $response, $request, $server ) use ( $soap_server ) {
-
-			$soap_server->handle();
-
-			return true;
-
-		}, 10, 4 );
-
-	}
-
-	/**
-	 * Item schema.
-	 *
-	 * @since 0.1
-	 * @return array $schema
-	 */
-	public function get_item_schema() {}
-
-	/**
-	 * Item arguments.
-	 *
-	 * @since 0.1
-	 * @return array $arguments
-	 */
-	public function get_item_args() {}
-
-}
diff --git a/wp-rest/Controller/Url.php b/wp-rest/Controller/Url.php
deleted file mode 100644
index 9286856e7c88e6d1cf9057cf78da943cb34f73d1..0000000000000000000000000000000000000000
--- a/wp-rest/Controller/Url.php
+++ /dev/null
@@ -1,214 +0,0 @@
-<?php
-/**
- * Url controller class.
- *
- * @since 0.1
- */
-
-namespace CiviCRM_WP_REST\Controller;
-
-class Url extends Base {
-
-	/**
-	 * The base route.
-	 *
-	 * @since 0.1
-	 * @var string
-	 */
-	protected $rest_base = 'url';
-
-	/**
-	 * Registers routes.
-	 *
-	 * @since 0.1
-	 */
-	public function register_routes() {
-
-		register_rest_route( $this->get_namespace(), $this->get_rest_base(), [
-			[
-				'methods' => \WP_REST_Server::READABLE,
-				'callback' => [ $this, 'get_item' ],
-				'args' => $this->get_item_args()
-			],
-			'schema' => [ $this, 'get_item_schema' ]
-		] );
-
-	}
-
-	/**
-	 * Get items.
-	 *
-	 * @since 0.1
-	 * @param WP_REST_Request $request
-	 */
-	public function get_item( $request ) {
-
-		/**
-		 * Filter formatted api params.
-		 *
-		 * @since 0.1
-		 * @param array $params
-		 * @param WP_REST_Request $request
-		 */
-		$params = apply_filters( 'civi_wp_rest/controller/url/params', $this->get_formatted_params( $request ), $request );
-
-		// track url
-		$url = \CRM_Mailing_Event_BAO_TrackableURLOpen::track( $params['queue_id'], $params['url_id'] );
-
-		/**
-		 * Filter url.
-		 *
-		 * @param string $url
-		 * @param array $params
-		 * @param WP_REST_Request $request
-		 */
-		$url = apply_filters( 'civi_wp_rest/controller/url/before_parse_url', $url, $params, $request );
-
-		// parse url
-		$url = $this->parse_url( $url, $params );
-
-		$this->do_redirect( $url );
-
-	}
-
-	/**
-	 * Get formatted api params.
-	 *
-	 * @since 0.1
-	 * @param WP_REST_Resquest $request
-	 * @return array $params
-	 */
-	protected function get_formatted_params( $request ) {
-
-		$args = $request->get_params();
-
-		$params = [
-			'queue_id' => isset( $args['qid'] ) ? $args['qid'] ?? '' : $args['q'] ?? '',
-			'url_id' => $args['u']
-		];
-
-		// unset unnecessary args
-		unset( $args['qid'], $args['u'], $args['q'] );
-
-		if ( ! empty( $args ) ) {
-
-			$params['query'] = http_build_query( $args );
-
-		}
-
-		return $params;
-
-	}
-
-	/**
-	 * Parses the url.
-	 *
-	 * @since 0.1
-	 * @param string $url
-	 * @param array $params
-	 * @return string $url
-	 */
-	protected function parse_url( $url, $params ) {
-
-		// CRM-18320 - Fix encoded ampersands
-		$url = str_replace( '&amp;', '&', $url );
-
-		// CRM-7103 - Look for additional query variables and append them
-		if ( isset( $params['query'] ) && strpos( $url, '?' ) ) {
-
-			$url .= '&' . $params['query'];
-
-		} elseif ( isset( $params['query'] ) ) {
-
-			$url .= '?' . $params['query'];
-
-		}
-
-		return apply_filters( 'civi_wp_rest/controller/url/parsed_url', $url, $params );
-
-	}
-
-	/**
-	 * Do redirect.
-	 *
-	 * @since 0.1
-	 * @param string $url
-	 */
-	protected function do_redirect( $url ) {
-
-		wp_redirect( $url );
-
-		exit;
-
-	}
-
-	/**
-	 * Item schema.
-	 *
-	 * @since 0.1
-	 * @return array $schema
-	 */
-	public function get_item_schema() {
-
-		return [
-			'$schema' => 'http://json-schema.org/draft-04/schema#',
-			'title' => 'civicrm_api3/v3/url',
-			'description' => __( 'CiviCRM API3 wrapper', 'civicrm' ),
-			'type' => 'object',
-			'required' => [ 'qid', 'u' ],
-			'properties' => [
-				'qid' => [
-					'type' => 'integer'
-				],
-				'q' => [
-					'type' => 'integer'
-				],
-				'u' => [
-					'type' => 'integer'
-				]
-			]
-		];
-
-	}
-
-	/**
-	 * Item arguments.
-	 *
-	 * @since 0.1
-	 * @return array $arguments
-	 */
-	public function get_item_args() {
-
-		return [
-			'qid' => [
-				'type' => 'integer',
-				'required' => false,
-				'validate_callback' => function( $value, $request, $key ) {
-
-					return is_numeric( $value );
-
-				}
-			],
-			'q' => [
-				'type' => 'integer',
-				'required' => false,
-				'validate_callback' => function( $value, $request, $key ) {
-
-					return is_numeric( $value );
-
-				}
-			],
-			'u' => [
-				'type' => 'integer',
-				'required' => true,
-				'validate_callback' => function( $value, $request, $key ) {
-
-					return is_numeric( $value );
-
-				}
-			]
-		];
-
-	}
-
-}
diff --git a/wp-rest/Controller/Widget.php b/wp-rest/Controller/Widget.php
deleted file mode 100644
index 13fa1e2adde648de8c24b1278039385569bd5c21..0000000000000000000000000000000000000000
--- a/wp-rest/Controller/Widget.php
+++ /dev/null
@@ -1,214 +0,0 @@
-<?php
-/**
- * Widget controller class.
- *
- * Widget endpoint, replacement for CiviCRM's 'extern/widget.php'
- *
- * @since 0.1
- */
-
-namespace CiviCRM_WP_REST\Controller;
-
-class Widget extends Base {
-
-	/**
-	 * The base route.
-	 *
-	 * @since 0.1
-	 * @var string
-	 */
-	protected $rest_base = 'widget';
-
-	/**
-	 * Registers routes.
-	 *
-	 * @since 0.1
-	 */
-	public function register_routes() {
-
-		register_rest_route( $this->get_namespace(), $this->get_rest_base(), [
-			[
-				'methods' => \WP_REST_Server::READABLE,
-				'callback' => [ $this, 'get_item' ],
-				'args' => $this->get_item_args()
-			],
-			'schema' => [ $this, 'get_item_schema' ]
-		] );
-
-	}
-
-	/**
-	 * Get item.
-	 *
-	 * @since 0.1
-	 * @param WP_REST_Request $request
-	 */
-	public function get_item( $request ) {
-
-		/**
-		 * Filter mandatory params.
-		 *
-		 * @since 0.1
-		 * @param array $params
-		 * @param WP_REST_Request $request
-		 */
-		$params = apply_filters(
-			'civi_wp_rest/controller/widget/params',
-			$this->get_mandatory_params( $request ),
-			$request
-		);
-
-		$jsonvar = 'jsondata';
-
-		if ( ! empty( $request->get_param( 'format' ) ) ) $jsonvar .= $request->get_param( 'cpageId' );
-
-		$data = \CRM_Contribute_BAO_Widget::getContributionPageData( ...$params );
-
-		$response = 'var ' . $jsonvar . ' = ' . json_encode( $data ) . ';';
-
-		/**
-		 * Adds our response data before dispatching.
-		 *
-		 * @since 0.1
-		 * @param WP_HTTP_Response $result Result to send to client
-		 * @param WP_REST_Server $server The REST server
-		 * @param WP_REST_Request $request The request
-		 * @return WP_HTTP_Response $result Result to send to client
-		 */
-		add_filter( 'rest_post_dispatch', function( $result, $server, $request ) use ( $response ) {
-
-			return rest_ensure_response( $response );
-
-		}, 10, 3 );
-
-		// serve javascript
-		add_filter( 'rest_pre_serve_request', [ $this, 'serve_javascript' ], 10, 4 );
-
-	}
-
-	/**
-	 * Get mandatory params from request.
-	 *
-	 * @since 0.1
-	 * @param WP_REST_Resquest $request
-	 * @return array $params The widget params
-	 */
-	protected function get_mandatory_params( $request ) {
-
-		$args = $request->get_params();
-
-		return [
-			$args['cpageId'],
-			$args['widgetId'],
-			$args['includePending'] ?? false
-		];
-
-	}
-
-	/**
-	 * Serve jsondata response.
-	 *
-	 * @since 0.1
-	 * @param bool $served Whether the request has already been served
-	 * @param WP_REST_Response $result
-	 * @param WP_REST_Request $request
-	 * @param WP_REST_Server $server
-	 * @return bool $served
-	 */
-	public function serve_javascript( $served, $result, $request, $server ) {
-
-		// set content type header
-		$server->send_header( 'Expires', gmdate( 'D, d M Y H:i:s \G\M\T', time() + 60 ) );
-		$server->send_header( 'Content-Type', 'application/javascript' );
-		$server->send_header( 'Cache-Control', 'max-age=60, public' );
-
-		echo $result->get_data();
-
-		return true;
-
-	}
-
-	/**
-	 * Item schema.
-	 *
-	 * @since 0.1
-	 * @return array $schema
-	 */
-	public function get_item_schema() {
-
-		return [
-			'$schema' => 'http://json-schema.org/draft-04/schema#',
-			'title' => 'civicrm_api3/v3/widget',
-			'description' => __( 'CiviCRM API3 wrapper', 'civicrm' ),
-			'type' => 'object',
-			'required' => [ 'cpageId', 'widgetId' ],
-			'properties' => [
-				'cpageId' => [
-					'type' => 'integer',
-					'minimum' => 1
-				],
-				'widgetId' => [
-					'type' => 'integer',
-					'minimum' => 1
-				],
-				'format' => [
-					'type' => 'integer'
-				],
-				'includePending' => [
-					'type' => 'boolean'
-				]
-			]
-		];
-
-	}
-
-	/**
-	 * Item arguments.
-	 *
-	 * @since 0.1
-	 * @return array $arguments
-	 */
-	public function get_item_args() {
-
-		return [
-			'cpageId' => [
-				'type' => 'integer',
-				'required' => true,
-				'validate_callback' => function( $value, $request, $key ) {
-
-					return is_numeric( $value );
-
-				}
-			],
-			'widgetId' => [
-				'type' => 'integer',
-				'required' => true,
-				'validate_callback' => function( $value, $request, $key ) {
-
-					return is_numeric( $value );
-
-				}
-			],
-			'format' => [
-				'type' => 'integer',
-				'required' => false,
-				'validate_callback' => function( $value, $request, $key ) {
-
-					return is_numeric( $value );
-
-				}
-			],
-			'includePending' => [
-				'type' => 'boolean',
-				'required' => false,
-				'validate_callback' => function( $value, $request, $key ) {
-
-					return is_string( $value );
-
-				}
-			]
-		];
-
-	}
-
-}
diff --git a/wp-rest/Endpoint/Endpoint-Interface.php b/wp-rest/Endpoint/Endpoint-Interface.php
deleted file mode 100644
index 9497cde5099ecbd7936571b0b73e318652abea7f..0000000000000000000000000000000000000000
--- a/wp-rest/Endpoint/Endpoint-Interface.php
+++ /dev/null
@@ -1,35 +0,0 @@
-<?php
-/**
- * Endpoint Interface class.
- *
- * @since 0.1
- */
-
-namespace CiviCRM_WP_REST\Endpoint;
-
-interface Endpoint_Interface {
-
-	/**
-	 * Registers routes.
-	 *
-	 * @since 0.1
-	 */
-	public function register_routes();
-
-	/**
-	 * Item schema.
-	 *
-	 * @since 0.1
-	 * @return array $schema
-	 */
-	public function get_item_schema();
-
-	/**
-	 * Item arguments.
-	 *
-	 * @since 0.1
-	 * @return array $arguments
-	 */
-	public function get_item_args();
-
-}
diff --git a/wp-rest/Plugin.php b/wp-rest/Plugin.php
deleted file mode 100644
index 4038a56b1b6cab395e1a2d143cfe8882a7edb456..0000000000000000000000000000000000000000
--- a/wp-rest/Plugin.php
+++ /dev/null
@@ -1,193 +0,0 @@
-<?php
-/**
- * Main plugin class.
- *
- * @since 0.1
- */
-
-namespace CiviCRM_WP_REST;
-
-use CiviCRM_WP_REST\Civi\Mailing_Hooks;
-
-class Plugin {
-
-	/**
-	 * Constructor.
-	 *
-	 * @since 0.1
-	 */
-	public function __construct() {
-
-		$this->register_hooks();
-
-		$this->setup_objects();
-
-	}
-
-	/**
-	 * Register hooks.
-	 *
-	 * @since 1.0
-	 */
-	protected function register_hooks() {
-
-		add_action( 'rest_api_init', [ $this, 'register_rest_routes' ] );
-
-		add_filter( 'rest_pre_dispatch', [ $this, 'bootstrap_civi' ], 10, 3 );
-
-		add_filter( 'rest_post_dispatch',  [ $this, 'maybe_reset_wp_timezone' ], 10, 3);
-
-	}
-
-	/**
-	 * Bootstrap CiviCRM when hitting a the 'civicrm' namespace.
-	 *
-	 * @since 0.1
-	 * @param mixed $result
-	 * @param WP_REST_Server $server REST server instance
-	 * @param WP_REST_Request $request The request
-	 * @return mixed $result
-	 */
-	public function bootstrap_civi( $result, $server, $request ) {
-
-		if ( false !== strpos( $request->get_route(), 'civicrm' ) ) {
-
-			$this->maybe_set_user_timezone( $request );
-
-			civi_wp()->initialize();
-
-		}
-
-		return $result;
-
-	}
-
-	/**
-	 * Setup objects.
-	 *
-	 * @since 0.1
-	 */
-	private function setup_objects() {
-
-		if ( CIVICRM_WP_REST_REPLACE_MAILING_TRACKING ) {
-
-			// register mailing hooks
-			$mailing_hooks = ( new Mailing_Hooks )->register_hooks();
-
-		}
-
-	}
-
-	/**
-	 * Registers Rest API routes.
-	 *
-	 * @since 0.1
-	 */
-	public function register_rest_routes() {
-
-		// rest endpoint
-		$rest_controller = new Controller\Rest;
-		$rest_controller->register_routes();
-
-		// url controller
-		$url_controller = new Controller\Url;
-		$url_controller->register_routes();
-
-		// open controller
-		$open_controller = new Controller\Open;
-		$open_controller->register_routes();
-
-		// authorizenet controller
-		$authorizeIPN_controller = new Controller\AuthorizeIPN;
-		$authorizeIPN_controller->register_routes();
-
-		// paypal controller
-		$paypalIPN_controller = new Controller\PayPalIPN;
-		$paypalIPN_controller->register_routes();
-
-		// pxpay controller
-		$paypalIPN_controller = new Controller\PxIPN;
-		$paypalIPN_controller->register_routes();
-
-		// civiconnect controller
-		$cxn_controller = new Controller\Cxn;
-		$cxn_controller->register_routes();
-
-		// widget controller
-		$widget_controller = new Controller\Widget;
-		$widget_controller->register_routes();
-
-		// soap controller
-		$soap_controller = new Controller\Soap;
-		$soap_controller->register_routes();
-
-		/**
-		 * Opportunity to add more rest routes.
-		 *
-		 * @since 0.1
-		 */
-		do_action( 'civi_wp_rest/plugin/rest_routes_registered' );
-
-	}
-
-	/**
-	 * Sets the timezone to the users timezone when
-	 * calling the civicrm/v3/rest endpoint.
-	 *
-	 * @since 0.1
-	 * @param WP_REST_Request $request The request
-	 */
-	private function maybe_set_user_timezone( $request ) {
-
-		if ( $request->get_route() != '/civicrm/v3/rest' ) return;
-
-		$timezones = [
-			'wp_timezone' => date_default_timezone_get(),
-			'user_timezone' => get_option( 'timezone_string', false )
-		];
-
-		// filter timezones
-		add_filter( 'civi_wp_rest/plugin/timezones', function() use ( $timezones ) {
-
-			return $timezones;
-
-		} );
-
-		if ( empty( $timezones['user_timezone'] ) ) return;
-
-		/**
-		 * CRM-12523
-		 * CRM-18062
-		 * CRM-19115
-		 */
-		date_default_timezone_set( $timezones['user_timezone'] );
-		\CRM_Core_Config::singleton()->userSystem->setMySQLTimeZone();
-
-	}
-
-	/**
-	 * Resets the timezone to the original WP
-	 * timezone after calling the civicrm/v3/rest endpoint.
-	 *
-	 * @since 0.1
-	 * @param mixed $result
-	 * @param WP_REST_Server $server REST server instance
-	 * @param WP_REST_Request $request The request
-	 * @return mixed $result
-	 */
-	public function maybe_reset_wp_timezone( $result, $server, $request ) {
-
-		if ( $request->get_route() != '/civicrm/v3/rest' ) return $result;
-
-		$timezones = apply_filters( 'civi_wp_rest/plugin/timezones', null );
-
-		if ( empty( $timezones['wp_timezone'] ) ) return $result;
-
-		// reset wp timezone
-		date_default_timezone_set( $timezones['wp_timezone'] );
-
-		return $result;
-
-	}
-
-}
diff --git a/wp-rest/README.md b/wp-rest/README.md
deleted file mode 100644
index 77234de84a195dc6fbb22e1e7d460ff7d44587f2..0000000000000000000000000000000000000000
--- a/wp-rest/README.md
+++ /dev/null
@@ -1,59 +0,0 @@
-# CiviCRM WP REST API Wrapper
-
-This is a WordPress plugin that aims to expose CiviCRM's [extern](https://github.com/civicrm/civicrm-core/tree/master/extern) scripts as WordPress REST endpoints.
-
-This plugin requires:
-
--   PHP 7.1+
--   WordPress 4.7+
--   CiviCRM to be installed and activated.
-
-### Endpoints
-
-1. `civicrm/v3/rest` - a wrapper around `civicrm_api3()`
-
-    **Parameters**:
-
-    - `key` - **required**, the site key
-    - `api_key` - **required**, the contact api key
-    - `entity` - **required**, the API entity
-    - `action` - **required**, the API action
-    - `json` - **optional**, json formatted string with the API parameters/argumets, or `1` as in `json=1`
-
-    By default all calls to `civicrm/v3/rest` return XML formatted results, to get `json` formatted result pass `json=1` or a json formatted string with the API parameters, like in the example 2 below.
-
-    **Examples**:
-
-    1. `https://example.com/wp-json/civicrm/v3/rest?entity=Contact&action=get&key=<site_key>&api_key=<api_key>&group=Administrators`
-
-    2. `https://example.com/wp-json/civicrm/v3/rest?entity=Contact&action=get&key=<site_key>&api_key=<api_key>&json={"group": "Administrators"}`
-
-2. `civicrm/v3/url` - a substition for `civicrm/extern/url.php` mailing tracking
-
-3. `civicrm/v3/open` - a substition for `civicrm/extern/open.php` mailing tracking
-
-4. `civicrm/v3/authorizeIPN` - a substition for `civicrm/extern/authorizeIPN.php` (for testing Authorize.net as per [docs](https://docs.civicrm.org/sysadmin/en/latest/setup/payment-processors/authorize-net/#shell-script-testing-method))
-
-    **_Note_**: this endpoint has **not been tested**
-
-5. `civicrm/v3/ipn` - a substition for `civicrm/extern/ipn.php` (for PayPal Standard and Pro live transactions)
-
-    **_Note_**: this endpoint has **not been tested**
-
-6. `civicrm/v3/cxn` - a substition for `civicrm/extern/cxn.php`
-
-7. `civicrm/v3/pxIPN` - a substition for `civicrm/extern/pxIPN.php`
-
-    **_Note_**: this endpoint has **not been tested**
-
-8. `civicrm/v3/widget` - a substition for `civicrm/extern/widget.php`
-
-9. `civicrm/v3/soap` - a substition for `civicrm/extern/soap.php`
-
-    **_Note_**: this endpoint has **not been tested**
-
-### Settings
-
-Set the `CIVICRM_WP_REST_REPLACE_MAILING_TRACKING` constant to `true` to replace mailing url and open tracking calls with their counterpart REST endpoints, `civicrm/v3/url` and `civicrm/v3/open`.
-
-_Note: use this setting with caution, it may affect performance on large mailings, see `CiviCRM_WP_REST\Civi\Mailing_Hooks` class._