diff --git a/civicrm.php b/civicrm.php
index 9850c6a3eee386a2e88d351b010e24f3821357d1..87d8e782a839ea1faf2568b99156477ed039e7bc 100644
--- a/civicrm.php
+++ b/civicrm.php
@@ -2,7 +2,7 @@
 /*
 Plugin Name: CiviCRM
 Description: CiviCRM - Growing and Sustaining Relationships
-Version: 5.13.3
+Version: 5.13.4
 Author: CiviCRM LLC
 Author URI: https://civicrm.org/
 Plugin URI: https://wiki.civicrm.org/confluence/display/CRMDOC/Installing+CiviCRM+for+WordPress
diff --git a/civicrm/CRM/Core/BAO/Address.php b/civicrm/CRM/Core/BAO/Address.php
index b5ec97d74863f4ae97c01a1364d571eddc120270..d94ecf2800dd5f65a255db3d9b89b67ab95744fe 100644
--- a/civicrm/CRM/Core/BAO/Address.php
+++ b/civicrm/CRM/Core/BAO/Address.php
@@ -1319,6 +1319,9 @@ SELECT is_primary,
           }
         }
         if (!empty($props['country_id'])) {
+          if (!CRM_Utils_Rule::commaSeparatedIntegers(implode(',', (array) $props['country_id']))) {
+            throw new CRM_Core_Exception(ts('Province limit or default country setting is incorrect'));
+          }
           $params['condition'] = 'country_id IN (' . implode(',', (array) $props['country_id']) . ')';
         }
         break;
@@ -1331,6 +1334,9 @@ SELECT is_primary,
         if ($context != 'get' && $context != 'validate') {
           $config = CRM_Core_Config::singleton();
           if (!empty($config->countryLimit) && is_array($config->countryLimit)) {
+            if (!CRM_Utils_Rule::commaSeparatedIntegers(implode(',', $config->countryLimit))) {
+              throw new CRM_Core_Exception(ts('Available Country setting is incorrect'));
+            }
             $params['condition'] = 'id IN (' . implode(',', $config->countryLimit) . ')';
           }
         }
@@ -1339,6 +1345,9 @@ SELECT is_primary,
       // Filter county list based on chosen state
       case 'county_id':
         if (!empty($props['state_province_id'])) {
+          if (!CRM_Utils_Rule::commaSeparatedIntegers(implode(',', (array) $props['state_province_id']))) {
+            throw new CRM_Core_Exception(ts('Can only accept Integers for state_province_id filtering'));
+          }
           $params['condition'] = 'state_province_id IN (' . implode(',', (array) $props['state_province_id']) . ')';
         }
         break;
diff --git a/civicrm/CRM/Core/BAO/CustomField.php b/civicrm/CRM/Core/BAO/CustomField.php
index 71e597832d062bcb3f17654d6419551eaab1c0b4..02b9519e671a0d17b8e1679e8b96a69b1ec602ac 100644
--- a/civicrm/CRM/Core/BAO/CustomField.php
+++ b/civicrm/CRM/Core/BAO/CustomField.php
@@ -599,7 +599,7 @@ class CRM_Core_BAO_CustomField extends CRM_Core_DAO_CustomField {
         if (!empty($customDataSubType)) {
           $subtypeClause = array();
           foreach ($customDataSubType as $subtype) {
-            $subtype = CRM_Core_DAO::VALUE_SEPARATOR . $subtype . CRM_Core_DAO::VALUE_SEPARATOR;
+            $subtype = CRM_Core_DAO::VALUE_SEPARATOR . CRM_Utils_Type::escape($subtype, 'String') . CRM_Core_DAO::VALUE_SEPARATOR;
             $subtypeClause[] = "$cgTable.extends_entity_column_value LIKE '%{$subtype}%'";
           }
           if (!$onlySubType) {
diff --git a/civicrm/CRM/Core/BAO/CustomQuery.php b/civicrm/CRM/Core/BAO/CustomQuery.php
index 790487e43891b62c2bad6ab03afddb2d63310603..24b829e5f5b427660de3f00e12a02a73f3b8fd72 100644
--- a/civicrm/CRM/Core/BAO/CustomQuery.php
+++ b/civicrm/CRM/Core/BAO/CustomQuery.php
@@ -351,6 +351,12 @@ SELECT f.id, f.label, f.data_type,
                 foreach ($value as $key => $val) {
                   $value[$key] = str_replace(['[', ']', ','], ['\[', '\]', '[:comma:]'], $val);
                   $value[$key] = str_replace('|', '[:separator:]', $value[$key]);
+                  if ($field['data_type'] == 'String') {
+                    $value[$key] = CRM_Utils_Type::escape($value[$key], 'String');
+                  }
+                  elseif ($value) {
+                    $value[$key] = CRM_Utils_Type::escape($value[$key], 'Integer');
+                  }
                 }
                 $value = implode(',', $value);
               }
diff --git a/civicrm/CRM/Core/Page/File.php b/civicrm/CRM/Core/Page/File.php
index 362e3d1616869af1ea9b9562eb66e4e3ee99fc1a..c1f6cd10bf080df476b3f6ec9ad2d91a63318213 100644
--- a/civicrm/CRM/Core/Page/File.php
+++ b/civicrm/CRM/Core/Page/File.php
@@ -68,12 +68,25 @@ class CRM_Core_Page_File extends CRM_Core_Page {
       $mimeType = '';
       $path = CRM_Core_Config::singleton()->customFileUploadDir . $fileName;
     }
-    $mimeType = CRM_Utils_Request::retrieveValue('mime-type', 'String', $mimeType, FALSE);
 
     if (!$path) {
       CRM_Core_Error::statusBounce('Could not retrieve the file');
     }
 
+    if (empty($mimeType)) {
+      $passedInMimeType = self::convertBadMimeAliasTypes(CRM_Utils_Request::retrieveValue('mime-type', 'String', $mimeType, FALSE));
+      if (!in_array($passedInMimeType, explode(',', Civi::settings()->get('requestableMimeTypes')))) {
+        throw new CRM_Core_Exception("Supplied mime-type is not accepted");
+      }
+      $extension = CRM_Utils_File::getExtensionFromPath($path);
+      $candidateExtensions = CRM_Utils_File::getAcceptableExtensionsForMimeType($passedInMimeType);
+      if (!in_array($extension, $candidateExtensions)) {
+        throw new CRM_Core_Exception("Supplied mime-type does not match file extension");
+      }
+      // Now that we have validated mime-type supplied as much as possible lets now set the MimeType variable/
+      $mimeType = $passedInMimeType;
+    }
+
     $buffer = file_get_contents($path);
     if (!$buffer) {
       CRM_Core_Error::statusBounce('The file is either empty or you do not have permission to retrieve the file');
@@ -101,4 +114,33 @@ class CRM_Core_Page_File extends CRM_Core_Page {
     }
   }
 
+  /**
+   * Translate one mime type to another.
+   *
+   * Certain non-standard/weird MIME types have been common. Unfortunately, because
+   * of the way this controller is used, the weird types may baked-into URLs.
+   * We clean these up for compatibility.
+   *
+   * @param string $type
+   *   Ex: 'image/jpg'
+   * @return string
+   *   Ex: 'image/jpeg'.
+   */
+  protected static function convertBadMimeAliasTypes($type) {
+    $badTypes = [
+      // Before PNG format was ubiquitous, it was image/x-png?
+      'image/x-png' => 'image/png',
+
+      // People see "image/gif" and "image/png" and wrongly guess "image/jpg"?
+      'image/jpg' => 'image/jpeg',
+      'image/tif' => 'image/tiff',
+      'image/svg' => 'image/svg+xml',
+
+      // StackExchange attributes "pjpeg" to some quirk in an old version of IE?
+      'image/pjpeg' => 'image/jpeg',
+
+    ];
+    return isset($badTypes[$type]) ? $badTypes[$type] : $type;
+  }
+
 }
diff --git a/civicrm/CRM/Event/Page/ManageEvent.php b/civicrm/CRM/Event/Page/ManageEvent.php
index afc523e0347e41242ce1d240ae740f5f52f7a6f5..ae0f92942855302c7bf18c2a2a1800291ec929ba 100644
--- a/civicrm/CRM/Event/Page/ManageEvent.php
+++ b/civicrm/CRM/Event/Page/ManageEvent.php
@@ -517,7 +517,8 @@ ORDER BY start_date desc
       if (is_array($value)) {
         $type = implode(',', $value);
       }
-      $clauses[] = "event_type_id IN ({$type})";
+      $clauses[] = "event_type_id IN (%2)";
+      $params[2] = [$type, 'String'];
     }
 
     $eventsByDates = $this->get('eventsByDates');
diff --git a/civicrm/CRM/Upgrade/Incremental/sql/5.13.4.mysql.tpl b/civicrm/CRM/Upgrade/Incremental/sql/5.13.4.mysql.tpl
new file mode 100644
index 0000000000000000000000000000000000000000..94e0312abc887abb5512fb647a1d7c0d0995a486
--- /dev/null
+++ b/civicrm/CRM/Upgrade/Incremental/sql/5.13.4.mysql.tpl
@@ -0,0 +1 @@
+{* file to handle db changes in 5.13.4 during upgrade *}
diff --git a/civicrm/CRM/Utils/AutoClean.php b/civicrm/CRM/Utils/AutoClean.php
index 558ca34adb7ff157ca04ad43b869c070335432e0..c2c21dc1849a2222fced03049b4d99de5f7a1afa 100644
--- a/civicrm/CRM/Utils/AutoClean.php
+++ b/civicrm/CRM/Utils/AutoClean.php
@@ -102,4 +102,24 @@ class CRM_Utils_AutoClean {
     \Civi\Core\Resolver::singleton()->call($this->callback, $this->args);
   }
 
+  /**
+   * Prohibit (de)serialization of CRM_Utils_AutoClean.
+   *
+   * The generic nature of AutoClean makes it a potential target for escalating
+   * serialization vulnerabilities, and there's no good reason for serializing it.
+   */
+  public function __sleep() {
+    throw new \RuntimeException("CRM_Utils_AutoClean is a runtime helper. It is not intended for serialization.");
+  }
+
+  /**
+   * Prohibit (de)serialization of CRM_Utils_AutoClean.
+   *
+   * The generic nature of AutoClean makes it a potential target for escalating
+   * serialization vulnerabilities, and there's no good reason for deserializing it.
+   */
+  public function __wakeup() {
+    throw new \RuntimeException("CRM_Utils_AutoClean is a runtime helper. It is not intended for deserialization.");
+  }
+
 }
diff --git a/civicrm/CRM/Utils/File.php b/civicrm/CRM/Utils/File.php
index b51905f71496dfb2ae0e9d56a922130476bd2322..efd0b79c6141a4e279011617bbc0ebcbf1840949 100644
--- a/civicrm/CRM/Utils/File.php
+++ b/civicrm/CRM/Utils/File.php
@@ -1066,4 +1066,29 @@ HTACCESS;
     return FALSE;
   }
 
+  /**
+   * Get the extensions that this MimeTpe is for
+   * @param string $mimeType the mime-type we want extensions for
+   * @return array
+   */
+  public static function getAcceptableExtensionsForMimeType($mimeType = NULL) {
+    $mapping = \MimeType\Mapping::$types;
+    $extensions = [];
+    foreach ($mapping as $extension => $type) {
+      if ($mimeType == $type) {
+        $extensions[] = $extension;
+      }
+    }
+    return $extensions;
+  }
+
+  /**
+   * Get the extension of a file based on its path
+   * @param string $path path of the file to query
+   * @return string
+   */
+  public static function getExtensionFromPath($path) {
+    return pathinfo($path, PATHINFO_EXTENSION);
+  }
+
 }
diff --git a/civicrm/CRM/Utils/Rule.php b/civicrm/CRM/Utils/Rule.php
index 50d72d38352e74e4d484241548f7464638a20c15..940128d7156c9487cd53d365c2b60faa2cc62a36 100644
--- a/civicrm/CRM/Utils/Rule.php
+++ b/civicrm/CRM/Utils/Rule.php
@@ -488,6 +488,8 @@ class CRM_Utils_Rule {
    */
   public static function commaSeparatedIntegers($value) {
     foreach (explode(',', $value) as $val) {
+      // Remove any Whitespace around the key.
+      $val = trim($val);
       if (!self::positiveInteger($val)) {
         return FALSE;
       }
diff --git a/civicrm/api/v3/Generic.php b/civicrm/api/v3/Generic.php
index c88419ccb40b0ebd3226d3867079b0bc2795674c..6dfb1c81383a37cc8b2930a345fe11b7279c8ff8 100644
--- a/civicrm/api/v3/Generic.php
+++ b/civicrm/api/v3/Generic.php
@@ -432,7 +432,7 @@ function civicrm_api3_generic_getoptions($apiRequest) {
   // Validate 'context' from params
   $context = CRM_Utils_Array::value('context', $apiRequest['params']);
   CRM_Core_DAO::buildOptionsContext($context);
-  unset($apiRequest['params']['context'], $apiRequest['params']['field']);
+  unset($apiRequest['params']['context'], $apiRequest['params']['field'], $apiRequest['params']['condition']);
 
   $baoName = _civicrm_api3_get_BAO($apiRequest['entity']);
   $options = $baoName::buildOptions($fieldName, $context, $apiRequest['params']);
diff --git a/civicrm/bower.json b/civicrm/bower.json
index b970b3e9ada7cdee86e1684673f56d0332942401..c4aaaa21526f2fdbdf86aca5ca65d78e68520987 100644
--- a/civicrm/bower.json
+++ b/civicrm/bower.json
@@ -18,7 +18,7 @@
     "d3-3.5.x": "d3#~3.5.17",
     "dc-2.1.x": "dc.js#~2.1.8",
     "crossfilter-1.3.x": "crossfilter2#~1.3.11",
-    "jquery": "~1.12",
+    "jquery": "civicrm/jquery#1.12.4-civicrm-1.1",
     "jquery-ui": "~1.12",
     "lodash-compat": "~3.0",
     "google-code-prettify": "~1.0",
@@ -35,6 +35,7 @@
     "es6-promise": "^4.2.4"
   },
   "resolutions": {
-    "angular": "~1.5.11"
+    "angular": "~1.5.11",
+    "jquery": "1.12.4-civicrm-1.1"
   }
 }
diff --git a/civicrm/bower_components/jquery/.bower.json b/civicrm/bower_components/jquery/.bower.json
index e54b96aeafcacb17901236390fcacac2b7f4a071..356eb46d9afe4e6f081f661775c96d3cb84de178 100644
--- a/civicrm/bower_components/jquery/.bower.json
+++ b/civicrm/bower_components/jquery/.bower.json
@@ -1,25 +1,14 @@
 {
   "name": "jquery",
-  "main": "dist/jquery.js",
-  "license": "MIT",
-  "ignore": [
-    "package.json"
-  ],
-  "keywords": [
-    "jquery",
-    "javascript",
-    "browser",
-    "library"
-  ],
-  "homepage": "https://github.com/jquery/jquery-dist",
-  "version": "1.12.4",
-  "_release": "1.12.4",
+  "homepage": "https://github.com/civicrm/jquery",
+  "version": "1.12.4-civicrm-1.1",
+  "_release": "1.12.4-civicrm-1.1",
   "_resolution": {
     "type": "version",
-    "tag": "1.12.4",
-    "commit": "5e89585e0121e72ff47de177c5ef604f3089a53d"
+    "tag": "1.12.4-civicrm-1.1",
+    "commit": "718017c594033996ed1b3a05951049ade095f4ab"
   },
-  "_source": "https://github.com/jquery/jquery-dist.git",
-  "_target": "~1.12",
-  "_originalSource": "jquery"
+  "_source": "https://github.com/civicrm/jquery.git",
+  "_target": "1.12.4-civicrm-1.1",
+  "_originalSource": "civicrm/jquery"
 }
\ No newline at end of file
diff --git a/civicrm/bower_components/jquery/.editorconfig b/civicrm/bower_components/jquery/.editorconfig
new file mode 100644
index 0000000000000000000000000000000000000000..b5bd7f60ec9a9b14792a0dd90d50af582c4056dc
--- /dev/null
+++ b/civicrm/bower_components/jquery/.editorconfig
@@ -0,0 +1,16 @@
+# This file is for unifying the coding style for different editors and IDEs
+# editorconfig.org
+
+root = true
+
+[*]
+indent_style = tab
+end_of_line = lf
+charset = utf-8
+trim_trailing_whitespace = true
+insert_final_newline = true
+
+[package.json]
+indent_style = space
+indent_size = 2
+
diff --git a/civicrm/bower_components/jquery/.gitattributes b/civicrm/bower_components/jquery/.gitattributes
new file mode 100644
index 0000000000000000000000000000000000000000..b7ca95b5b77a91a2e1b6eaf80c2a4a52a99ec378
--- /dev/null
+++ b/civicrm/bower_components/jquery/.gitattributes
@@ -0,0 +1,5 @@
+# Auto detect text files and perform LF normalization
+* text=auto
+
+# JS files must always use LF for tools to work
+*.js eol=lf
diff --git a/civicrm/bower_components/jquery/.gitignore b/civicrm/bower_components/jquery/.gitignore
new file mode 100644
index 0000000000000000000000000000000000000000..e1e7dbfe4f39df124ed8a150bf503f20ab432907
--- /dev/null
+++ b/civicrm/bower_components/jquery/.gitignore
@@ -0,0 +1,16 @@
+.project
+.settings
+*~
+*.diff
+*.patch
+/*.html
+.DS_Store
+.bower.json
+.sizecache.json
+
+npm-debug.log
+
+/dist
+/node_modules
+
+/test/node_smoke_tests/lib/ensure_iterability.js
diff --git a/civicrm/bower_components/jquery/.jscsrc b/civicrm/bower_components/jquery/.jscsrc
new file mode 100644
index 0000000000000000000000000000000000000000..6a2c2fd99058cfbbf2946932feec2bee7756745f
--- /dev/null
+++ b/civicrm/bower_components/jquery/.jscsrc
@@ -0,0 +1,13 @@
+{
+	"preset": "jquery",
+
+	// remove after https://github.com/jscs-dev/node-jscs/issues/1685
+	// and https://github.com/jscs-dev/node-jscs/issues/1686
+	"requireCapitalizedComments": null,
+
+	"excludeFiles": [
+		"external", "src/intro.js", "src/outro.js",
+		"node_modules",
+		"test/node_smoke_tests/lib/ensure_iterability.js"
+	]
+}
diff --git a/civicrm/bower_components/jquery/.jshintignore b/civicrm/bower_components/jquery/.jshintignore
new file mode 100644
index 0000000000000000000000000000000000000000..1ddafd635a18124198ef31a421424fb88b460b24
--- /dev/null
+++ b/civicrm/bower_components/jquery/.jshintignore
@@ -0,0 +1,12 @@
+external
+src/intro.js
+src/outro.js
+test/data/jquery-1.9.1.js
+test/data/badcall.js
+test/data/badjson.js
+test/data/json_obj.js
+test/data/readywaitasset.js
+test/data/readywaitloader.js
+test/data/support/csp.js
+test/data/support/getComputedSupport.js
+test/node_smoke_tests/lib/ensure_iterability.js
diff --git a/civicrm/bower_components/jquery/.jshintrc b/civicrm/bower_components/jquery/.jshintrc
new file mode 100644
index 0000000000000000000000000000000000000000..13a9e01b91f713fef5a21833a9a236ac3f189ec4
--- /dev/null
+++ b/civicrm/bower_components/jquery/.jshintrc
@@ -0,0 +1,17 @@
+{
+	"boss": true,
+	"curly": true,
+	"eqeqeq": true,
+	"eqnull": true,
+	"expr": true,
+	"immed": true,
+	"noarg": true,
+	"onevar": true,
+	"quotmark": "double",
+	"smarttabs": true,
+	"trailing": true,
+	"undef": true,
+	"unused": true,
+
+	"node": true
+}
\ No newline at end of file
diff --git a/civicrm/bower_components/jquery/.mailmap b/civicrm/bower_components/jquery/.mailmap
new file mode 100644
index 0000000000000000000000000000000000000000..6aa901636b65d13387c8646f8ee33f3ea3f5966c
--- /dev/null
+++ b/civicrm/bower_components/jquery/.mailmap
@@ -0,0 +1,100 @@
+Adam Coulombe <me@adam.co> <adamcoulombe187@hotmail.com>
+Adam J. Sontag <ajpiano@ajpiano.com>
+Alexander Farkas <info@corrupt-system.de>
+Alexander Farkas <info@corrupt-system.de> <a.farkas.pm@googlemail.com>
+Alexis Abril <me@alexisabril.com> <alexis.abril@gmail.com>
+Andrew E Monat <amonat@gmail.com>
+Anton Matzneller <obhvsbypqghgc@gmail.com>
+Anton Matzneller <obhvsbypqghgc@gmail.com> <haskell_noob-github@yahoo.de>
+Batiste Bieler <batiste.bieler@gmail.com>
+Benjamin Truyman <bentruyman@gmail.com>
+Brandon Aaron <brandon.aaron@gmail.com>
+Carl Danley <carldanley@gmail.com>
+Carl Fürstenberg <azatoth@gmail.com>
+Carl Fürstenberg <azatoth@gmail.com> <carl@excito.com>
+Charles McNulty <cmcnulty@kznf.com>
+Christopher Jones <christopherjonesqed@gmail.com>
+Colin Snover <colin@alpha.zetafleet.com> <github.com@zetafleet.com>
+Corey Frang <gnarf@gnarf.net>
+Dan Heberden <danheberden@gmail.com>
+Daniel Chatfield <chatfielddaniel@gmail.com> <chatfielddaniel@googlemail.com>
+Daniel Gálvez <dgalvez@editablething.com>
+Danil Somsikov <danilasomsikov@gmail.com>
+Dave Methvin <dave.methvin@gmail.com>
+Dave Reed <dareed@microsoft.com>
+David Fox <dfoxinator@gmail.com> <dfox@snap-interactive.com>
+David Hong <d.hong@me.com>
+Devin Cooper <cooper.semantics@gmail.com> <dcooper@snap-interactive.com>
+Dmitry Gusev <dmitry.gusev@gmail.com>
+Earle Castledine <mrspeaker@gmail.com>
+Erick Ruiz de Chávez <erickrdch@gmail.com>
+Gianni Alessandro Chiappetta <gianni@runlevel6.org>
+Heungsub Lee <h@subl.ee> <lee@heungsub.net>
+Iraê Carvalho <irae@irae.pro.br>
+Isaac Z. Schlueter <i@izs.me>
+Ismail Khair <ismail.khair@gmail.com>
+James Burke <jrburke@gmail.com>
+James Padolsey <cla@padolsey.net> <jamespadolsey@gmail.com>
+Jason Bedard <jason+jquery@jbedard.ca> <github@jbedard.ca>
+Jay Merrifield <fracmak@gmail.com>
+Jay Merrifield <fracmak@gmail.com> <jmerrifiel@gannett.com>
+Jean Boussier <jean.boussier@gmail.com>
+Jephte Clain <Jephte.Clain@univ-reunion.fr>
+Jess Thrysoee <jess@thrysoee.dk>
+Joao Henrique de Andrade Bruni <joaohbruni@yahoo.com.br>
+Joe Presbrey <presbrey@gmail.com> <presbrey+jwp@gmail.com>
+John Resig <jeresig@gmail.com>
+John Resig <jeresig@gmail.com> <jeresig@Archimedes.local>
+Jordan Boesch <jboesch26@gmail.com> <jordan@boedesign.com>
+Josh Varner <josh.varner@gmail.com> <josh.varner@gmail.com>
+Julian Aubourg <aubourg.julian@gmail.com>
+Julian Aubourg <aubourg.julian@gmail.com> <j@ubourg.net>
+Julian Aubourg <aubourg.julian@gmail.com> <Julian@.(none)>
+Jörn Zaefferer <joern.zaefferer@gmail.com>
+Jörn Zaefferer <joern.zaefferer@gmail.com> <joern.zaefferer@googlemail.com>
+Jörn Zaefferer <joern.zaefferer@gmail.com> <JZA@.(none)>
+Karl Swedberg <kswedberg@gmail.com> <karl@englishrules.com>
+Kris Borchers <kris.borchers@gmail.com>
+Lee Carpenter <elcarpie@gmail.com>
+Li Xudong <istonelee@gmail.com>
+Louis-Rémi Babé <lrbabe@gmail.com>
+Louis-Rémi Babé <lrbabe@gmail.com> <louisremi@louisremi-laptop.(none)>
+Louis-Rémi Babé <lrbabe@gmail.com> <lrbabe@lrbabe-laptop.(none)>
+Louis-Rémi Babé <lrbabe@gmail.com> <lrbabe@lrbabe-laptop>
+Marcel Greter <marcel.greter@ocbnet.ch> <mgr@rtp.ch>
+Matthias Jäggli <matthias.jaeggli@gmail.com> <matthias.jaeggli@scout24.ch>
+Michael Murray <m@murz.net> <mmurray.wa@gmail.com>
+Michał Gołębiowski <m.goleb@gmail.com>
+Michał Gołębiowski <m.goleb@gmail.com> <michal.golebiowski@laboratorium.ee>
+Mike Alsup <malsup@gmail.com>
+Nguyen Phuc Lam <ruado1987@gmail.com>
+Noah Hamann <njhamann@gmail.com>
+Oleg Gaidarenko <markelog@gmail.com>
+Rafaël Blais Masson <rafbmasson@gmail.com>
+Richard D. Worth <rdworth@gmail.com>
+Rick Waldron <waldron.rick@gmail.com>
+Rick Waldron <waldron.rick@gmail.com> <rick@bocoup.com>
+Robert Katić <robert.katic@gmail.com>
+Roman Reiß <me@silverwind.io>
+Ron Otten <r.j.g.otten@gmail.com>
+Sai Lung Wong <sai.wong@huffingtonpost.com>
+Scott González <scott.gonzalez@gmail.com> <sgonzale@sgonzale-laptop.local>
+Scott Jehl <scott@scottjehl.com>
+Sebastian Burkhard <sebi.burkhard@gmail.com>
+Senya Pugach <upisfree@outlook.com>
+Thomas Tortorini <thomastortorini@gmail.com> Mr21
+Timmy Willison <timmywillisn@gmail.com>
+Timmy Willison <timmywillisn@gmail.com> <tim.willison@thisismedium.com>
+Timo Tijhof <krinklemail@gmail.com>
+TJ Holowaychuk <tj@vision-media.ca>
+Tom H Fuertes <tomfuertes@gmail.com>
+Tom H Fuertes <tomfuertes@gmail.com> Tom H Fuertes <TomFuertes@gmail.com>
+Tom Viner <github@viner.tv>
+Xavi Ramirez <xavi.rmz@gmail.com>
+Xavier Montillet <xavierm02.net@gmail.com>
+Yehuda Katz <wycats@gmail.com>
+Yehuda Katz <wycats@gmail.com> <wycats@12-189-125-93.att-inc.com>
+Yehuda Katz <wycats@gmail.com> <wycats@mobile005.mycingular.net>
+Yehuda Katz <wycats@gmail.com> <wycats@Yehuda-Katz.local>
+Yiming He <yiminghe@gmail.com>
+Terry Jones <terry@jon.es> <terry@fluidinfo.com>
diff --git a/civicrm/bower_components/jquery/.npmignore b/civicrm/bower_components/jquery/.npmignore
new file mode 100644
index 0000000000000000000000000000000000000000..d510949524dbe8c2994fa4d549f1c2e673814d61
--- /dev/null
+++ b/civicrm/bower_components/jquery/.npmignore
@@ -0,0 +1,17 @@
+.jshintignore
+.jshintrc
+
+/.editorconfig
+/.gitattributes
+/.jscs.json
+/.mailmap
+/.travis.yml
+
+/build
+/speed
+/test
+/Gruntfile.js
+
+/external/qunit
+/external/requirejs
+/external/sinon
diff --git a/civicrm/bower_components/jquery/.travis.yml b/civicrm/bower_components/jquery/.travis.yml
new file mode 100644
index 0000000000000000000000000000000000000000..34f4d9aecee4afdedea5bf7a789a689365e82ab1
--- /dev/null
+++ b/civicrm/bower_components/jquery/.travis.yml
@@ -0,0 +1,8 @@
+language: node_js
+sudo: false
+node_js:
+- "0.10"
+- "0.12"
+- "4"
+- "5"
+- "6"
diff --git a/civicrm/bower_components/jquery/CONTRIBUTING.md b/civicrm/bower_components/jquery/CONTRIBUTING.md
new file mode 100644
index 0000000000000000000000000000000000000000..e4373785f2e9d2272b620852eb20ad500d289677
--- /dev/null
+++ b/civicrm/bower_components/jquery/CONTRIBUTING.md
@@ -0,0 +1,132 @@
+# Contributing to jQuery
+
+1. [Getting Involved](#getting-involved)
+2. [Questions and Discussion](#questions-and-discussion)
+3. [How To Report Bugs](#how-to-report-bugs)
+4. [Tips for Bug Patching](#tips-for-bug-patching)
+
+Note: This is the code development repository for *jQuery Core* only. Before opening an issue or making a pull request, be sure you're in the right place.
+* jQuery plugin issues should be reported to the author of the plugin.
+* jQuery Core API documentation issues can be filed [at the API repo](http://github.com/jquery/api.jquery.com/issues).
+* Bugs or suggestions for other jQuery Foundation projects should be filed in [their respective repos](http://github.com/jquery/).
+
+## Getting Involved
+
+We've put together [a short guide with tips, tricks, and ideas on getting started](http://contribute.jquery.org/open-source/). We're always looking for help identifying bugs, writing and reducing test cases, and documentation.
+
+More information on how to contribute to this and other jQuery Foundation projects is at [contribute.jquery.org](http://contribute.jquery.org). Please review our [commit & pull request guide](http://contribute.jquery.org/commits-and-pull-requests/) and [style guides](http://contribute.jquery.org/style-guide/) for instructions on how to maintain a fork and submit patches. Before we can merge any pull request, we'll also need you to sign our [contributor license agreement](http://contribute.jquery.org/cla/).
+
+
+## Questions and Discussion
+
+### Forum and IRC
+
+jQuery is so popular that many developers have knowledge of its capabilities and limitations. Most questions about using jQuery can be answered on popular forums such as [Stack Overflow](http://stackoverflow.com). Please start there when you have questions, even if you think you've found a bug.
+
+The jQuery Core team watches the [jQuery Development Forum](http://forum.jquery.com/developing-jquery-core). If you have longer posts or questions that can't be answered in places such as Stack Overflow, please feel free to post them there. If you think you've found a bug, please [file it in the bug tracker](#how-to-report-bugs). The Core team can be found in the [#jquery-dev](http://webchat.freenode.net/?channels=jquery-dev) IRC channel on irc.freenode.net.
+
+### Weekly Status Meetings
+
+The jQuery Core team has a weekly meeting to discuss the progress of current work. The meeting is held in the [#jquery-meeting](http://webchat.freenode.net/?channels=jquery-meeting) IRC channel on irc.freenode.net at [Noon EST](http://www.timeanddate.com/worldclock/fixedtime.html?month=1&day=17&year=2011&hour=12&min=0&sec=0&p1=43) on Mondays.
+
+[jQuery Core Meeting Notes](http://meetings.jquery.org/category/core/)
+
+
+## How to Report Bugs
+
+### Make sure it is a jQuery bug
+
+Most bugs reported to our bug tracker are actually bugs in user code, not in jQuery code. Keep in mind that just because your code throws an error inside of jQuery, this does *not* mean the bug is a jQuery bug.
+
+Ask for help first in the [Using jQuery Forum](http://forum.jquery.com/using-jquery) or another discussion forum like [Stack Overflow](http://stackoverflow.com/). You will get much quicker support, and you will help avoid tying up the jQuery team with invalid bug reports.
+
+### Disable browser extensions
+
+Make sure you have reproduced the bug with all browser extensions and add-ons disabled, as these can sometimes cause things to break in interesting and unpredictable ways. Try using incognito, stealth or anonymous browsing modes.
+
+### Try the latest version of jQuery
+
+Bugs in old versions of jQuery may have already been fixed. In order to avoid reporting known issues, make sure you are always testing against the [latest build](http://code.jquery.com/jquery.js). We cannot fix bugs in older released files, if a bug has been fixed in a subsequent version of jQuery the site should upgrade.
+
+### Simplify the test case
+
+When experiencing a problem, [reduce your code](http://webkit.org/quality/reduction.html) to the bare minimum required to reproduce the issue. This makes it *much* easier to isolate and fix the offending code. Bugs reported without reduced test cases take on average 9001% longer to fix than bugs that are submitted with them, so you really should try to do this if at all possible.
+
+### Search for related or duplicate issues
+
+Go to the [jQuery Core issue tracker](https://github.com/jquery/jquery/issues) and make sure the problem hasn't already been reported. If not, create a new issue there and include your test case.
+
+
+## Tips For Bug Patching
+
+We *love* when people contribute back to the project by patching the bugs they find. Since jQuery is used by so many people, we are cautious about the patches we accept and want to be sure they don't have a negative impact on the millions of people using jQuery each day. For that reason it can take a while for any suggested patch to work its way through the review and release process. The reward for you is knowing that the problem you fixed will improve things for millions of sites and billions of visits per day.
+
+### Build a Local Copy of jQuery
+
+Create a fork of the jQuery repo on github at http://github.com/jquery/jquery
+
+Change directory to your web root directory, whatever that might be:
+
+```bash
+$ cd /path/to/your/www/root/
+```
+
+Clone your jQuery fork to work locally
+
+```bash
+$ git clone git@github.com:username/jquery.git
+```
+
+Change directory to the newly created dir jquery/
+
+```bash
+$ cd jquery
+```
+
+Add the jQuery master as a remote. I label mine "upstream"
+
+```bash
+$ git remote add upstream git://github.com/jquery/jquery.git
+```
+
+Get in the habit of pulling in the "upstream" master to stay up to date as jQuery receives new commits
+
+```bash
+$ git pull upstream master
+```
+
+Run the build script
+
+```bash
+$ npm run build
+```
+
+Run the Grunt tools:
+
+```bash
+$ grunt && grunt watch
+```
+
+Now open the jQuery test suite in a browser at http://localhost/test. If there is a port, be sure to include it.
+
+Success! You just built and tested jQuery!
+
+
+### Test Suite Tips...
+
+During the process of writing your patch, you will run the test suite MANY times. You can speed up the process by narrowing the running test suite down to the module you are testing by either double clicking the title of the test or appending it to the url. The following examples assume you're working on a local repo, hosted on your localhost server.
+
+Example:
+
+http://localhost/test/?filter=css
+
+This will only run the "css" module tests. This will significantly speed up your development and debugging.
+
+**ALWAYS RUN THE FULL SUITE BEFORE COMMITTING AND PUSHING A PATCH!**
+
+
+### Browser support
+
+Remember that jQuery supports multiple browsers and their versions; any contributed code must work in all of them. You can refer to the [browser support page](http://jquery.com/browser-support/) for the current list of supported browsers.
+
+Note that browser support differs depending on whether you are targeting the `master` or `1.x` branch.
diff --git a/civicrm/bower_components/jquery/Gruntfile.js b/civicrm/bower_components/jquery/Gruntfile.js
new file mode 100644
index 0000000000000000000000000000000000000000..41d7b616d781c817d21528ad252c90d69452ed69
--- /dev/null
+++ b/civicrm/bower_components/jquery/Gruntfile.js
@@ -0,0 +1,208 @@
+module.exports = function( grunt ) {
+	"use strict";
+
+	function readOptionalJSON( filepath ) {
+		var data = {};
+		try {
+			data = JSON.parse( stripJSONComments(
+				fs.readFileSync( filepath, { encoding: "utf8" } )
+			) );
+		} catch ( e ) {}
+		return data;
+	}
+
+	var fs = require( "fs" ),
+		stripJSONComments = require( "strip-json-comments" ),
+		gzip = require( "gzip-js" ),
+		srcHintOptions = readOptionalJSON( "src/.jshintrc" ),
+		newNode = !/^v0/.test( process.version ),
+
+		// Allow to skip jsdom-related tests in Node.js < 1.0.0
+		runJsdomTests = newNode || ( function() {
+			try {
+				require( "jsdom" );
+				return true;
+			} catch ( e ) {
+				return false;
+			}
+		} )();
+
+	// The concatenated file won't pass onevar
+	// But our modules can
+	delete srcHintOptions.onevar;
+
+	grunt.initConfig( {
+		pkg: grunt.file.readJSON( "package.json" ),
+		dst: readOptionalJSON( "dist/.destination.json" ),
+		"compare_size": {
+			files: [ "dist/jquery.js", "dist/jquery.min.js" ],
+			options: {
+				compress: {
+					gz: function( contents ) {
+						return gzip.zip( contents, {} ).length;
+					}
+				},
+				cache: "build/.sizecache.json"
+			}
+		},
+		babel: {
+			options: {
+				sourceMap: "inline",
+				retainLines: true
+			},
+			nodeSmokeTests: {
+				files: {
+					"test/node_smoke_tests/lib/ensure_iterability.js":
+						"test/node_smoke_tests/lib/ensure_iterability_es6.js"
+				}
+			}
+		},
+		build: {
+			all: {
+				dest: "dist/jquery.js",
+				minimum: [
+					"core",
+					"selector"
+				],
+				removeWith: {
+					ajax: [ "manipulation/_evalUrl", "event/ajax" ],
+					callbacks: [ "deferred" ],
+					css: [ "effects", "dimensions", "offset" ]
+				}
+			}
+		},
+		npmcopy: {
+			all: {
+				options: {
+					destPrefix: "external"
+				},
+				files: {
+					"sizzle/dist": "sizzle/dist",
+					"sizzle/LICENSE.txt": "sizzle/LICENSE.txt",
+
+					"qunit/qunit.js": "qunitjs/qunit/qunit.js",
+					"qunit/qunit.css": "qunitjs/qunit/qunit.css",
+					"qunit/LICENSE.txt": "qunitjs/LICENSE.txt",
+
+					"qunit-assert-step/qunit-assert-step.js":
+					"qunit-assert-step/qunit-assert-step.js",
+					"qunit-assert-step/MIT-LICENSE.txt":
+					"qunit-assert-step/MIT-LICENSE.txt",
+
+					"requirejs/require.js": "requirejs/require.js",
+
+					"sinon/fake_timers.js": "sinon/lib/sinon/util/fake_timers.js",
+					"sinon/timers_ie.js": "sinon/lib/sinon/util/timers_ie.js",
+					"sinon/LICENSE.txt": "sinon/LICENSE"
+				}
+			}
+		},
+		jsonlint: {
+			pkg: {
+				src: [ "package.json" ]
+			}
+		},
+		jshint: {
+			all: {
+				src: [
+					"src/**/*.js", "Gruntfile.js", "test/**/*.js", "build/**/*.js"
+				],
+				options: {
+					jshintrc: true
+				}
+			},
+			dist: {
+				src: "dist/jquery.js",
+				options: srcHintOptions
+			}
+		},
+		jscs: {
+			src: "src",
+			gruntfile: "Gruntfile.js",
+
+			// Check parts of tests that pass
+			test: [
+				"test/data/testrunner.js",
+				"test/unit/basic.js",
+				"test/unit/wrap.js"
+			],
+			build: "build"
+		},
+		testswarm: {
+			tests: [
+
+				// A special module with basic tests, meant for
+				// not fully supported environments like Android 2.3,
+				// jsdom or PhantomJS. We run it everywhere, though,
+				// to make sure tests are not broken.
+				"basic",
+
+				"ajax",
+				"attributes",
+				"callbacks",
+				"core",
+				"css",
+				"data",
+				"deferred",
+				"deprecated",
+				"dimensions",
+				"effects",
+				"event",
+				"manipulation",
+				"offset",
+				"queue",
+				"selector",
+				"serialize",
+				"support",
+				"traversing"
+			]
+		},
+		watch: {
+			files: [ "<%= jshint.all.src %>" ],
+			tasks: [ "dev" ]
+		},
+		uglify: {
+			all: {
+				files: {
+					"dist/jquery.min.js": [ "dist/jquery.js" ]
+				},
+				options: {
+					preserveComments: false,
+					sourceMap: true,
+					sourceMapName: "dist/jquery.min.map",
+					report: "min",
+					beautify: {
+						"ascii_only": true
+					},
+					banner: "/*! jQuery v<%= pkg.version %> | " +
+						"(c) jQuery Foundation | jquery.org/license */",
+					compress: {
+						"hoist_funs": false,
+						loops: false,
+						unused: false
+					}
+				}
+			}
+		}
+	} );
+
+	// Load grunt tasks from NPM packages
+	require( "load-grunt-tasks" )( grunt );
+
+	// Integrate jQuery specific tasks
+	grunt.loadTasks( "build/tasks" );
+
+	grunt.registerTask( "lint", [ "jsonlint", "jshint", "jscs" ] );
+
+	// Don't run Node-related tests in Node.js < 1.0.0 as they require an old
+	// jsdom version that needs compiling, making it harder for people to compile
+	// jQuery on Windows. (see gh-2519)
+	grunt.registerTask( "test_fast", runJsdomTests ? [ "node_smoke_tests" ] : [] );
+
+	grunt.registerTask( "test", [ "test_fast" ] );
+
+	// Short list as a high frequency watch task
+	grunt.registerTask( "dev", [ "build:*:*", "lint", "uglify", "remove_map_comment", "dist:*" ] );
+
+	grunt.registerTask( "default", [ "dev", "test_fast", "compare_size" ] );
+};
diff --git a/civicrm/bower_components/jquery/README.md b/civicrm/bower_components/jquery/README.md
index ba3174a7781e08928d3916e567abfebd6e95002a..cb138539220ecfd925234a91396d148c351461a0 100644
--- a/civicrm/bower_components/jquery/README.md
+++ b/civicrm/bower_components/jquery/README.md
@@ -1,65 +1,421 @@
-# jQuery
+jQuery 1.12 Maintenance Fork for CiviCRM (Preamble)
+==================================================
 
-> jQuery is a fast, small, and feature-rich JavaScript library.
+Some versions of CiviCRM use jQuery 1.12.x, which is officially EOL.  It is
+occasionally necessary to backport patches. To download it, one
+may reference either the Git tag or an autogenerated tarball for the git tag.
 
-For information on how to get started and how to use jQuery, please see [jQuery's documentation](http://api.jquery.com/).
-For source files and issues, please visit the [jQuery repo](https://github.com/jquery/jquery).
+You should read the original jQuery README (included below) for general
+development information.  Additionally, the addenda (at the bottom) add
+information about maintaining and using this fork.
 
-## Including jQuery
 
-Below are some of the most common ways to include jQuery.
+[jQuery](http://jquery.com/) — New Wave JavaScript
+==================================================
 
-### Browser
+Contribution Guides
+--------------------------------------
 
-#### Script tag
+In the spirit of open source software development, jQuery always encourages community code contribution. To help you get started and before you jump into writing code, be sure to read these important contribution guidelines thoroughly:
 
-```html
-<script src="https://code.jquery.com/jquery-2.2.0.min.js"></script>
+1. [Getting Involved](http://contribute.jquery.org/)
+2. [Core Style Guide](http://contribute.jquery.org/style-guide/js/)
+3. [Writing Code for jQuery Foundation Projects](http://contribute.jquery.org/code/)
+
+
+Environments in which to use jQuery
+--------------------------------------
+
+- [Browser support](http://jquery.com/browser-support/) differs between the master branch and the 1.x branch. Specifically, the master branch does not support legacy browsers such as IE6-8. The jQuery team continues to provide support for legacy browsers on the 1.x branch. Use the latest 1.x release if support for those browsers is required. See [browser support](http://jquery.com/browser-support/) for more info.
+- To use jQuery in Node, browser extensions, and other non-browser environments, use only master branch releases (2.x). The 1.x branch does not support these environments.
+
+
+What you need to build your own jQuery
+--------------------------------------
+
+In order to build jQuery, you need to have the latest Node.js/npm and git 1.7 or later. Earlier versions might work, but are not supported.
+
+For Windows, you have to download and install [git](http://git-scm.com/downloads) and [Node.js](http://nodejs.org/download/).
+
+OS X users should install [Homebrew](http://brew.sh/). Once Homebrew is installed, run `brew install git` to install git,
+and `brew install node` to install Node.js.
+
+Linux/BSD users should use their appropriate package managers to install git and Node.js, or build from source
+if you swing that way. Easy-peasy.
+
+
+How to build your own jQuery
+----------------------------
+
+Clone a copy of the main jQuery git repo by running:
+
+```bash
+git clone git://github.com/jquery/jquery.git
+```
+
+Enter the jquery directory and run the build script:
+```bash
+cd jquery && npm run build
+```
+The built version of jQuery will be put in the `dist/` subdirectory, along with the minified copy and associated map file.
+
+If you want to create custom build or help with jQuery development, it would be better to install [grunt command line interface](https://github.com/gruntjs/grunt-cli) as a global package:
+
+```
+npm install -g grunt-cli
+```
+Make sure you have `grunt` installed by testing:
+```
+grunt -V
+```
+
+Now by running the `grunt` command, in the jquery directory, you can build a full version of jQuery, just like with an `npm run build` command:
+```
+grunt
+```
+
+There are many other tasks available for jQuery Core:
+```
+grunt -help
+```
+
+### Modules
+
+Special builds can be created that exclude subsets of jQuery functionality.
+This allows for smaller custom builds when the builder is certain that those parts of jQuery are not being used.
+For example, an app that only used JSONP for `$.ajax()` and did not need to calculate offsets or positions of elements could exclude the offset and ajax/xhr modules.
+
+Any module may be excluded except for `core`, and `selector`. To exclude a module, pass its path relative to the `src` folder (without the `.js` extension).
+
+Some example modules that can be excluded are:
+
+- **ajax**: All AJAX functionality: `$.ajax()`, `$.get()`, `$.post()`, `$.ajaxSetup()`, `.load()`, transports, and ajax event shorthands such as `.ajaxStart()`.
+- **ajax/xhr**: The XMLHTTPRequest AJAX transport only.
+- **ajax/script**: The `<script>` AJAX transport only; used to retrieve scripts.
+- **ajax/jsonp**: The JSONP AJAX transport only; depends on the ajax/script transport.
+- **css**: The `.css()` method plus non-animated `.show()`, `.hide()` and `.toggle()`. Also removes **all** modules depending on css (including **effects**, **dimensions**, and **offset**).
+- **deprecated**: Methods documented as deprecated but not yet removed.
+- **dimensions**: The `.width()` and `.height()` methods, including `inner-` and `outer-` variations.
+- **effects**: The `.animate()` method and its shorthands such as `.slideUp()` or `.hide("slow")`.
+- **event**: The `.on()` and `.off()` methods and all event functionality. Also removes `event/alias`.
+- **event/alias**: All event attaching/triggering shorthands like `.click()` or `.mouseover()`.
+- **offset**: The `.offset()`, `.position()`, `.offsetParent()`, `.scrollLeft()`, and `.scrollTop()` methods.
+- **wrap**: The `.wrap()`, `.wrapAll()`, `.wrapInner()`, and `.unwrap()` methods.
+- **core/ready**: Exclude the ready module if you place your scripts at the end of the body. Any ready callbacks bound with `jQuery()` will simply be called immediately. However, `jQuery(document).ready()` will not be a function and `.on("ready", ...)` or similar will not be triggered.
+- **deferred**: Exclude jQuery.Deferred. This also removes jQuery.Callbacks. *Note* that modules that depend on jQuery.Deferred(AJAX, effects, core/ready) will not be removed and will still expect jQuery.Deferred to be there. Include your own jQuery.Deferred implementation or exclude those modules as well (`grunt custom:-deferred,-ajax,-effects,-core/ready`).
+- **exports/global**: Exclude the attachment of global jQuery variables ($ and jQuery) to the window.
+- **exports/amd**: Exclude the AMD definition.
+
+Removing Sizzle is not supported on the `1.x` branch.
+
+The build process shows a message for each dependent module it excludes or includes.
+
+##### AMD name
+
+As an option, you can set the module name for jQuery's AMD definition. By default, it is set to "jquery", which plays nicely with plugins and third-party libraries, but there may be cases where you'd like to change this. Simply set the `"amd"` option:
+
+```bash
+grunt custom --amd="custom-name"
+```
+
+Or, to define anonymously, set the name to an empty string.
+
+```bash
+grunt custom --amd=""
+```
+
+#### Custom Build Examples
+
+To create a custom build, first check out the version:
+
+```bash
+git pull; git checkout VERSION
+```
+
+where VERSION is the version you want to customize. Then, make sure all Node dependencies are installed:
+
+```bash
+npm install
+```
+
+Create the custom build using the `grunt custom` option, listing the modules to be excluded.
+
+Exclude all **ajax** functionality:
+
+```bash
+grunt custom:-ajax
+```
+
+Excluding **css** removes modules depending on CSS: **effects**, **offset**, **dimensions**.
+
+```bash
+grunt custom:-css
+```
+
+Exclude a bunch of modules:
+
+```bash
+grunt custom:-ajax,-css,-deprecated,-dimensions,-effects,-event/alias,-offset,-wrap
+```
+
+For questions or requests regarding custom builds, please start a thread on the [Developing jQuery Core](https://forum.jquery.com/developing-jquery-core) section of the forum. Due to the combinatorics and custom nature of these builds, they are not regularly tested in jQuery's unit test process.
+
+Running the Unit Tests
+--------------------------------------
+
+Make sure you have the necessary dependencies:
+
+```bash
+npm install
+```
+
+Start `grunt watch` or `npm start` to auto-build jQuery as you work:
+
+```bash
+grunt watch
+```
+
+
+Run the unit tests with a local server that supports PHP. Ensure that you run the site from the root directory, not the "test" directory. No database is required. Pre-configured php local servers are available for Windows and Mac. Here are some options:
+
+- Windows: [WAMP download](http://www.wampserver.com/en/)
+- Mac: [MAMP download](http://www.mamp.info/en/index.html)
+- Linux: [Setting up LAMP](https://www.linux.com/learn/tutorials/288158-easy-lamp-server-installation)
+- [Mongoose (most platforms)](http://code.google.com/p/mongoose/)
+
+
+
+
+Building to a different directory
+---------------------------------
+
+To copy the built jQuery files from `/dist` to another directory:
+
+```bash
+grunt && grunt dist:/path/to/special/location/
+```
+With this example, the output files would be:
+
+```bash
+/path/to/special/location/jquery.js
+/path/to/special/location/jquery.min.js
+```
+
+To add a permanent copy destination, create a file in `dist/` called ".destination.json". Inside the file, paste and customize the following:
+
+```json
+
+{
+  "/Absolute/path/to/other/destination": true
+}
+```
+
+Additionally, both methods can be combined.
+
+
+
+Essential Git
+-------------
+
+As the source code is handled by the Git version control system, it's useful to know some features used.
+
+### Cleaning ###
+
+If you want to purge your working directory back to the status of upstream, the following commands can be used (remember everything you've worked on is gone after these):
+
+```bash
+git reset --hard upstream/master
+git clean -fdx
+```
+
+### Rebasing ###
+
+For feature/topic branches, you should always use the `--rebase` flag to `git pull`, or if you are usually handling many temporary "to be in a github pull request" branches, run the following to automate this:
+
+```bash
+git config branch.autosetuprebase local
+```
+(see `man git-config` for more information)
+
+### Handling merge conflicts ###
+
+If you're getting merge conflicts when merging, instead of editing the conflicted files manually, you can use the feature
+`git mergetool`. Even though the default tool `xxdiff` looks awful/old, it's rather useful.
+
+The following are some commands that can be used there:
+
+* `Ctrl + Alt + M` - automerge as much as possible
+* `b` - jump to next merge conflict
+* `s` - change the order of the conflicted lines
+* `u` - undo a merge
+* `left mouse button` - mark a block to be the winner
+* `middle mouse button` - mark a line to be the winner
+* `Ctrl + S` - save
+* `Ctrl + Q` - quit
+
+[QUnit](http://api.qunitjs.com) Reference
+-----------------
+
+### Test methods ###
+
+```js
+expect( numAssertions );
+stop();
+start();
 ```
 
-#### Babel
 
-[Babel](http://babeljs.io/) is a next generation JavaScript compiler. One of the features is the ability to use ES6/ES2015 modules now, even though browsers do not yet support this feature natively.
+Note: QUnit's eventual addition of an argument to stop/start is ignored in this test suite so that start and stop can be passed as callbacks without worrying about their parameters
+
+### Test assertions ###
+
 
 ```js
-import $ from "jquery";
+ok( value, [message] );
+equal( actual, expected, [message] );
+notEqual( actual, expected, [message] );
+deepEqual( actual, expected, [message] );
+notDeepEqual( actual, expected, [message] );
+strictEqual( actual, expected, [message] );
+notStrictEqual( actual, expected, [message] );
+throws( block, [expected], [message] );
 ```
 
-#### Browserify/Webpack
 
-There are several ways to use [Browserify](http://browserify.org/) and [Webpack](https://webpack.github.io/). For more information on using these tools, please refer to the corresponding project's documention. In the script, including jQuery will usually look like this...
+Test Suite Convenience Methods Reference (See [test/data/testinit.js](https://github.com/jquery/jquery/blob/master/test/data/testinit.js))
+------------------------------
+
+### Returns an array of elements with the given IDs ###
 
 ```js
-var $ = require("jquery");
+q( ... );
 ```
 
-#### AMD (Asynchronous Module Definition)
+Example:
+
+```js
+q("main", "foo", "bar");
+
+=> [ div#main, span#foo, input#bar ]
+```
 
-AMD is a module format built for the browser. For more information, we recommend [require.js' documentation](http://requirejs.org/docs/whyamd.html).
+### Asserts that a selection matches the given IDs ###
 
 ```js
-define(["jquery"], function($) {
+t( testName, selector, [ "array", "of", "ids" ] );
+```
 
-});
+Example:
+
+```js
+t("Check for something", "//[a]", ["foo", "bar"]);
 ```
 
-### Node
 
-To include jQuery in [Node](nodejs.org), first install with npm.
 
-```sh
-npm install jquery
+### Fires a native DOM event without going through jQuery ###
+
+```js
+fireNative( node, eventType )
 ```
 
-For jQuery to work in Node, a window with a document is required. Since no such window exists natively in Node, one can be mocked by tools such as [jsdom](https://github.com/tmpvar/jsdom). This can be useful for testing purposes.
+Example:
 
 ```js
-require("jsdom").env("", function(err, window) {
-	if (err) {
-		console.error(err);
-		return;
-	}
-
-	var $ = require("jquery")(window);
-});
+fireNative( jQuery("#elem")[0], "click" );
+```
+
+### Add random number to url to stop caching ###
+
+```js
+url( "some/url.php" );
+```
+
+Example:
+
+```js
+url("data/test.html");
+
+=> "data/test.html?10538358428943"
+
+
+url("data/test.php?foo=bar");
+
+=> "data/test.php?foo=bar&10538358345554"
+```
+
+
+### Load tests in an iframe ###
+
+Loads a given page constructing a url with fileName: `"./data/" + fileName + ".html"`
+and fires the given callback on jQuery ready (using the jQuery loading from that page)
+and passes the iFrame's jQuery to the callback.
+
+```js
+testIframe( fileName, testName, callback );
+```
+
+Callback arguments:
+
+```js
+callback( jQueryFromIFrame, iFrameWindow, iFrameDocument );
+```
+
+### Load tests in an iframe (window.iframeCallback) ###
+
+Loads a given page constructing a url with fileName: `"./data/" + fileName + ".html"`
+The given callback is fired when window.iframeCallback is called by the page.
+The arguments passed to the callback are the same as the
+arguments passed to window.iframeCallback, whatever that may be.
+
+```js
+testIframeWithCallback( testName, fileName, callback );
+```
+
+Questions?
+----------
+
+If you have any questions, please feel free to ask on the
+[Developing jQuery Core forum](http://forum.jquery.com/developing-jquery-core) or in #jquery on irc.freenode.net.
+
+
+Addendum: Patch/release summary for the maintenance fork
+-----------------------------------------------------------
+
+* Since jQuery 1.12 is EOL, it is expected that the flow of patches will be extremely limited.  The workflow for this
+  fork aims to keep this repository as a singular entity (which does not rely on external infrastructure), and it
+  sacrifices maintainability.  This is acceptable because of the extremely constrained patchflow.
+
+* Upstream tags (`1.12.4`) differ from upstream branches (`1.12-stable`) in that the tags include the `dist/` folder
+  and a real version number.
+
+* This branch is derived from the tag `1.12.4`. It includes the `dist/` folder so that one may more easily
+  download and include the full release.
+
+* The branch naming follows [Twigflow (Rebase)](https://gist.github.com/totten/39e932e5d10bc9e73e82790b2475eff2).
+  Thus, we have `1.12.4-civicrm-1`. If it necessary to rebase, then one would increment to `1.12.4-civicrm-2`
+  or `1.12.5-civicrm-1` (depending on context).
+
+* When preparing an update, include at least two commits:
+    * The first commit should update the canonical content.
+        * Example subject: `Core: Fix the frobnicator`
+    * The second commit should update the `dist/` folder.
+        * Full rebuild command: `rm -rf dist node_modules ; npm run-script build`
+        * Example subject: `Release: Update dist/`
+
+* When making a release, simply tag the folder (e.g. `1.12.4-civicrm-1.1`).
+
+Addendum: Consuming the maintenance fork via `bower.json`
+---------------------------------------------------------
+
+Bower supports a special notation for downloading forked packages from Github.
+You may use this notation:
+
+```
+  "dependencies": {
+    "jquery": "civicrm/jquery#1.12.4-civicrm-1.1",
+  },
+  "resolutions": {
+    "jquery": "1.12.4-civicrm-1.1"
+  }
 ```
diff --git a/civicrm/bower_components/jquery/bower.json b/civicrm/bower_components/jquery/bower.json
deleted file mode 100644
index 95798d5ada6dc0bb3d3d1799a2fdfbe489ed3e18..0000000000000000000000000000000000000000
--- a/civicrm/bower_components/jquery/bower.json
+++ /dev/null
@@ -1,14 +0,0 @@
-{
-  "name": "jquery",
-  "main": "dist/jquery.js",
-  "license": "MIT",
-  "ignore": [
-    "package.json"
-  ],
-  "keywords": [
-    "jquery",
-    "javascript",
-    "browser",
-    "library"
-  ]
-}
\ No newline at end of file
diff --git a/civicrm/bower_components/jquery/build/release.js b/civicrm/bower_components/jquery/build/release.js
new file mode 100644
index 0000000000000000000000000000000000000000..f3ba4c8f3c69bb1b1a5d8709cb90d7dd763240b1
--- /dev/null
+++ b/civicrm/bower_components/jquery/build/release.js
@@ -0,0 +1,60 @@
+
+module.exports = function( Release ) {
+
+	var
+		files = [ "dist/jquery.js", "dist/jquery.min.js", "dist/jquery.min.map" ],
+		cdn = require( "./release/cdn" ),
+		dist = require( "./release/dist" ),
+		ensureSizzle = require( "./release/ensure-sizzle" ),
+
+		npmTags = Release.npmTags;
+
+	Release.define( {
+		npmPublish: true,
+		issueTracker: "github",
+		/**
+		 * Ensure the repo is in a proper state before release
+		 * @param {Function} callback
+		 */
+		checkRepoState: function( callback ) {
+			ensureSizzle( Release, callback );
+		},
+		/**
+		 * Generates any release artifacts that should be included in the release.
+		 * The callback must be invoked with an array of files that should be
+		 * committed before creating the tag.
+		 * @param {Function} callback
+		 */
+		generateArtifacts: function( callback ) {
+			Release.exec( "grunt", "Grunt command failed" );
+			cdn.makeReleaseCopies( Release );
+			callback( files );
+		},
+		/**
+		 * Acts as insertion point for restoring Release.dir.repo
+		 * It was changed to reuse npm publish code in jquery-release
+		 * for publishing the distribution repo instead
+		 */
+		npmTags: function() {
+
+			// origRepo is not defined if dist was skipped
+			Release.dir.repo = Release.dir.origRepo || Release.dir.repo;
+			return npmTags();
+		},
+		/**
+		 * Publish to distribution repo and npm
+		 * @param {Function} callback
+		 */
+		dist: function( callback ) {
+			cdn.makeArchives( Release, function() {
+				dist( Release, callback );
+			} );
+		}
+	} );
+};
+
+module.exports.dependencies = [
+	"archiver@0.14.2",
+	"shelljs@0.7.0",
+	"npm@2.3.0"
+];
diff --git a/civicrm/bower_components/jquery/build/release/cdn.js b/civicrm/bower_components/jquery/build/release/cdn.js
new file mode 100644
index 0000000000000000000000000000000000000000..07285a56d66b834f94caea265ef06752d75b5028
--- /dev/null
+++ b/civicrm/bower_components/jquery/build/release/cdn.js
@@ -0,0 +1,116 @@
+var
+	fs = require( "fs" ),
+	shell = require( "shelljs" ),
+	path = require( "path" ),
+
+	cdnFolder = "dist/cdn",
+
+	devFile = "dist/jquery.js",
+	minFile = "dist/jquery.min.js",
+	mapFile = "dist/jquery.min.map",
+
+	releaseFiles = {
+		"jquery-VER.js": devFile,
+		"jquery-VER.min.js": minFile,
+		"jquery-VER.min.map": mapFile
+	},
+
+	googleFilesCDN = [
+		"jquery.js", "jquery.min.js", "jquery.min.map"
+	],
+
+	msFilesCDN = [
+		"jquery-VER.js", "jquery-VER.min.js", "jquery-VER.min.map"
+	];
+
+/**
+ * Generates copies for the CDNs
+ */
+function makeReleaseCopies( Release ) {
+	shell.mkdir( "-p", cdnFolder );
+
+	Object.keys( releaseFiles ).forEach( function( key ) {
+		var text,
+			builtFile = releaseFiles[ key ],
+			unpathedFile = key.replace( /VER/g, Release.newVersion ),
+			releaseFile = cdnFolder + "/" + unpathedFile;
+
+		if ( /\.map$/.test( releaseFile ) ) {
+
+			// Map files need to reference the new uncompressed name;
+			// assume that all files reside in the same directory.
+			// "file":"jquery.min.js","sources":["jquery.js"]
+			text = fs.readFileSync( builtFile, "utf8" )
+				.replace( /"file":"([^"]+)","sources":\["([^"]+)"\]/,
+					"\"file\":\"" + unpathedFile.replace( /\.min\.map/, ".min.js" ) +
+					"\",\"sources\":[\"" + unpathedFile.replace( /\.min\.map/, ".js" ) + "\"]" );
+			fs.writeFileSync( releaseFile, text );
+		} else if ( builtFile !== releaseFile ) {
+			shell.cp( "-f", builtFile, releaseFile );
+		}
+	} );
+}
+
+function makeArchives( Release, callback ) {
+
+	Release.chdir( Release.dir.repo );
+
+	function makeArchive( cdn, files, callback ) {
+		if ( Release.preRelease ) {
+			console.log( "Skipping archive creation for " + cdn + "; this is a beta release." );
+			callback();
+			return;
+		}
+
+		console.log( "Creating production archive for " + cdn );
+
+		var sum,
+			archiver = require( "archiver" )( "zip" ),
+			md5file = cdnFolder + "/" + cdn + "-md5.txt",
+			output = fs.createWriteStream(
+				cdnFolder + "/" + cdn + "-jquery-" + Release.newVersion + ".zip"
+			),
+			rver = /VER/;
+
+		output.on( "close", callback );
+
+		output.on( "error", function( err ) {
+			throw err;
+		} );
+
+		archiver.pipe( output );
+
+		files = files.map( function( item ) {
+			return "dist" + ( rver.test( item ) ? "/cdn" : "" ) + "/" +
+				item.replace( rver, Release.newVersion );
+		} );
+
+		sum = Release.exec( "md5sum " + files.join( " " ), "Error retrieving md5sum" );
+		fs.writeFileSync( md5file, sum );
+		files.push( md5file );
+
+		files.forEach( function( file ) {
+			archiver.append( fs.createReadStream( file ),
+				{ name: path.basename( file ) } );
+		} );
+
+		archiver.finalize();
+	}
+
+	function buildGoogleCDN( callback ) {
+		makeArchive( "googlecdn", googleFilesCDN, callback );
+	}
+
+	function buildMicrosoftCDN( callback ) {
+		makeArchive( "mscdn", msFilesCDN, callback );
+	}
+
+	buildGoogleCDN( function() {
+		buildMicrosoftCDN( callback );
+	} );
+}
+
+module.exports = {
+	makeReleaseCopies: makeReleaseCopies,
+	makeArchives: makeArchives
+};
diff --git a/civicrm/bower_components/jquery/build/release/dist.js b/civicrm/bower_components/jquery/build/release/dist.js
new file mode 100644
index 0000000000000000000000000000000000000000..ffa6e1768b408666dfef3dcc49a23110013f6d35
--- /dev/null
+++ b/civicrm/bower_components/jquery/build/release/dist.js
@@ -0,0 +1,134 @@
+module.exports = function( Release, complete ) {
+
+	var
+		fs = require( "fs" ),
+		shell = require( "shelljs" ),
+		pkg = require( Release.dir.repo + "/package.json" ),
+		distRemote = Release.remote
+
+			// For local and github dists
+			.replace( /jquery(\.git|$)/, "jquery-dist$1" ),
+
+		// These files are included with the distribution
+		files = [
+			"src",
+			"LICENSE.txt",
+			"AUTHORS.txt",
+			"package.json"
+		];
+
+	/**
+	 * Clone the distribution repo
+	 */
+	function clone() {
+		Release.chdir( Release.dir.base );
+		Release.dir.dist = Release.dir.base + "/dist";
+
+		console.log( "Using distribution repo: ", distRemote );
+		Release.exec( "git clone " + distRemote + " " + Release.dir.dist,
+			"Error cloning repo." );
+
+		// Distribution always works on master
+		Release.chdir( Release.dir.dist );
+		Release.exec( "git checkout master", "Error checking out branch." );
+		console.log();
+	}
+
+	/**
+	 * Generate bower file for jquery-dist
+	 */
+	function generateBower() {
+		return JSON.stringify( {
+			name: pkg.name,
+			main: pkg.main,
+			license: "MIT",
+			ignore: [
+				"package.json"
+			],
+			keywords: pkg.keywords
+		}, null, 2 );
+	}
+
+	/**
+	 * Copy necessary files over to the dist repo
+	 */
+	function copy() {
+
+		// Copy dist files
+		var distFolder = Release.dir.dist + "/dist",
+			externalFolder = Release.dir.dist + "/external",
+			rmIgnore = [
+				"README.md",
+				"node_modules"
+			].map( function( file ) {
+				return Release.dir.dist + "/" + file;
+			} );
+
+		shell.config.globOptions = {
+			ignore: rmIgnore
+		};
+
+		// Remove extraneous files before copy
+		shell.rm( "-rf", Release.dir.dist + "/**/*" );
+
+		shell.mkdir( "-p", distFolder );
+		[
+			"dist/jquery.js",
+			"dist/jquery.min.js",
+			"dist/jquery.min.map"
+		].forEach( function( file ) {
+			shell.cp( "-f", Release.dir.repo + "/" + file, distFolder );
+		} );
+
+		// Copy Sizzle
+		shell.mkdir( "-p", externalFolder );
+		shell.cp( "-rf", Release.dir.repo + "/external/sizzle", externalFolder );
+
+		// Copy other files
+		files.forEach( function( file ) {
+			shell.cp( "-rf", Release.dir.repo + "/" + file, Release.dir.dist );
+		} );
+
+		// Write generated bower file
+		fs.writeFileSync( Release.dir.dist + "/bower.json", generateBower() );
+
+		console.log( "Adding files to dist..." );
+		Release.exec( "git add .", "Error adding files." );
+		Release.exec(
+			"git commit -m 'Release " + Release.newVersion + "'",
+			"Error commiting files."
+		);
+		console.log();
+
+		console.log( "Tagging release on dist..." );
+		Release.exec( "git tag " + Release.newVersion,
+			"Error tagging " + Release.newVersion + " on dist repo." );
+		Release.tagTime = Release.exec( "git log -1 --format='%ad'",
+			"Error getting tag timestamp." ).trim();
+	}
+
+	/**
+	 * Push files to dist repo
+	 */
+	function push() {
+		Release.chdir( Release.dir.dist );
+
+		console.log( "Pushing release to dist repo..." );
+		Release.exec( "git push " + distRemote + " master --tags",
+			"Error pushing master and tags to git repo." );
+
+		// Set repo for npm publish
+		Release.dir.origRepo = Release.dir.repo;
+		Release.dir.repo = Release.dir.dist;
+	}
+
+	Release.walk( [
+		Release._section( "Copy files to distribution repo" ),
+		clone,
+		copy,
+		Release.confirmReview,
+
+		Release._section( "Pushing files to distribution repo" ),
+		push
+	], complete );
+};
diff --git a/civicrm/bower_components/jquery/build/release/ensure-sizzle.js b/civicrm/bower_components/jquery/build/release/ensure-sizzle.js
new file mode 100644
index 0000000000000000000000000000000000000000..7957606431f703b477ae1bff7740e809efee7226
--- /dev/null
+++ b/civicrm/bower_components/jquery/build/release/ensure-sizzle.js
@@ -0,0 +1,51 @@
+var fs = require( "fs" ),
+	npm = require( "npm" ),
+	sizzleLoc = __dirname + "/../../external/sizzle/dist/sizzle.js",
+	rversion = /Engine v(\d+\.\d+\.\d+(?:-[-\.\d\w]+)?)/;
+
+/**
+ * Retrieve the latest tag of Sizzle from npm
+ * @param {Function(string)} callback
+ */
+function getLatestSizzle( callback ) {
+	npm.load( function( err, npm ) {
+		if ( err ) {
+			throw err;
+		}
+		npm.commands.info( [ "sizzle", "version" ], function( err, info ) {
+			if ( err ) {
+				throw err;
+			}
+			callback( Object.keys( info )[ 0 ] );
+		} );
+	} );
+}
+
+/**
+ * Ensure the /src folder has the latest tag of Sizzle
+ * @param {Object} Release
+ * @param {Function} callback
+ */
+function ensureSizzle( Release, callback ) {
+	console.log();
+	console.log( "Checking Sizzle version..." );
+	getLatestSizzle( function( latest ) {
+		var match = rversion.exec( fs.readFileSync( sizzleLoc, "utf8" ) ),
+			version = match ? match[ 1 ] : "Not Found";
+
+		if ( version !== latest ) {
+
+			// colors is inherited from jquery-release
+			console.log(
+				"The Sizzle version in the src folder (" + version.red +
+				") is not the latest tag (" + latest.green + ")."
+			);
+			Release.confirm( callback );
+		} else {
+			console.log( "Sizzle is latest (" + latest.green + ")" );
+			callback();
+		}
+	} );
+}
+
+module.exports = ensureSizzle;
diff --git a/civicrm/bower_components/jquery/build/release/release-notes.js b/civicrm/bower_components/jquery/build/release/release-notes.js
new file mode 100644
index 0000000000000000000000000000000000000000..f3f6a6ff26b6b414121b71a091290982b433df6e
--- /dev/null
+++ b/civicrm/bower_components/jquery/build/release/release-notes.js
@@ -0,0 +1,58 @@
+#!/usr/bin/env node
+/*
+ * jQuery Release Note Generator
+ */
+
+var http = require( "http" ),
+	extract = /<a href="\/ticket\/(\d+)" title="View ticket">(.*?)<[^"]+"component">\s*(\S+)/g,
+	version = process.argv[ 2 ];
+
+if ( !/^\d+\.\d+/.test( version ) ) {
+	console.error( "Invalid version number: " + version );
+	process.exit( 1 );
+}
+
+http.request( {
+	host: "bugs.jquery.com",
+	port: 80,
+	method: "GET",
+	path: "/query?status=closed&resolution=fixed&max=400&" +
+		"component=!web&order=component&milestone=" + version
+}, function( res ) {
+	var data = [];
+
+	res.on( "data", function( chunk ) {
+		data.push( chunk );
+	} );
+
+	res.on( "end", function() {
+		var match, cur, cat,
+			file = data.join( "" );
+
+		while ( ( match = extract.exec( file ) ) ) {
+			if ( "#" + match[ 1 ] !== match[ 2 ] ) {
+				cat = match[ 3 ];
+
+				if ( !cur || cur !== cat ) {
+					if ( cur ) {
+						console.log( "</ul>" );
+					}
+					cur = cat;
+					console.log(
+						"<h3>" + cat.charAt( 0 ).toUpperCase() + cat.slice( 1 ) + "</h3>"
+					);
+					console.log( "<ul>" );
+				}
+
+				console.log(
+					"  <li><a href=\"http://bugs.jquery.com/ticket/" + match[ 1 ] + "\">#" +
+					match[ 1 ] + ": " + match[ 2 ] + "</a></li>"
+				);
+			}
+		}
+		if ( cur ) {
+			console.log( "</ul>" );
+		}
+
+	} );
+} ).end();
diff --git a/civicrm/bower_components/jquery/build/tasks/build.js b/civicrm/bower_components/jquery/build/tasks/build.js
new file mode 100644
index 0000000000000000000000000000000000000000..7034e8dd81f4a20de127439614e2e29c50b8c635
--- /dev/null
+++ b/civicrm/bower_components/jquery/build/tasks/build.js
@@ -0,0 +1,304 @@
+/**
+ * Special concat/build task to handle various jQuery build requirements
+ * Concats AMD modules, removes their definitions,
+ * and includes/excludes specified modules
+ */
+
+module.exports = function( grunt ) {
+
+	"use strict";
+
+	var fs = require( "fs" ),
+		requirejs = require( "requirejs" ),
+		srcFolder = __dirname + "/../../src/",
+		rdefineEnd = /\}\s*?\);[^}\w]*$/,
+		config = {
+			baseUrl: "src",
+			name: "jquery",
+			out: "dist/jquery.js",
+
+			// We have multiple minify steps
+			optimize: "none",
+
+			// Include dependencies loaded with require
+			findNestedDependencies: true,
+
+			// Avoid inserting define() placeholder
+			skipModuleInsertion: true,
+
+			// Avoid breaking semicolons inserted by r.js
+			skipSemiColonInsertion: true,
+			wrap: {
+				startFile: "src/intro.js",
+				endFile: [ "src/exports/global.js", "src/outro.js" ]
+			},
+			rawText: {},
+			onBuildWrite: convert
+		};
+
+	/**
+	 * Strip all definitions generated by requirejs
+	 * Convert "var" modules to var declarations
+	 * "var module" means the module only contains a return
+	 * statement that should be converted to a var declaration
+	 * This is indicated by including the file in any "var" folder
+	 * @param {String} name
+	 * @param {String} path
+	 * @param {String} contents The contents to be written (including their AMD wrappers)
+	 */
+	function convert( name, path, contents ) {
+		var amdName;
+
+		// Convert var modules
+		if ( /.\/var\//.test( path.replace( process.cwd(), "" ) ) ) {
+			contents = contents
+				.replace( /define\([\w\W]*?return/, "var " + ( /var\/([\w-]+)/.exec( name )[ 1 ] ) + " =" )
+				.replace( rdefineEnd, "" );
+
+		// Sizzle treatment
+		} else if ( /\/sizzle$/.test( name ) ) {
+			contents = "var Sizzle =\n" + contents
+
+				// Remove EXPOSE lines from Sizzle
+				.replace( /\/\/\s*EXPOSE[\w\W]*\/\/\s*EXPOSE/, "return Sizzle;" );
+
+		} else {
+
+			contents = contents
+				.replace( /\s*return\s+[^\}]+(\}\s*?\);[^\w\}]*)$/, "$1" )
+
+				// Multiple exports
+				.replace( /\s*exports\.\w+\s*=\s*\w+;/g, "" );
+
+			// Remove define wrappers, closure ends, and empty declarations
+			contents = contents
+				.replace( /define\([^{]*?{/, "" )
+				.replace( rdefineEnd, "" );
+
+			// Remove anything wrapped with
+			// /* ExcludeStart */ /* ExcludeEnd */
+			// or a single line directly after a // BuildExclude comment
+			contents = contents
+				.replace( /\/\*\s*ExcludeStart\s*\*\/[\w\W]*?\/\*\s*ExcludeEnd\s*\*\//ig, "" )
+				.replace( /\/\/\s*BuildExclude\n\r?[\w\W]*?\n\r?/ig, "" );
+
+			// Remove empty definitions
+			contents = contents
+				.replace( /define\(\[[^\]]*\]\)[\W\n]+$/, "" );
+		}
+
+		// AMD Name
+		if ( ( amdName = grunt.option( "amd" ) ) != null && /^exports\/amd$/.test( name ) ) {
+			if ( amdName ) {
+				grunt.log.writeln( "Naming jQuery with AMD name: " + amdName );
+			} else {
+				grunt.log.writeln( "AMD name now anonymous" );
+			}
+
+			// Remove the comma for anonymous defines
+			contents = contents
+				.replace( /(\s*)"jquery"(\,\s*)/, amdName ? "$1\"" + amdName + "\"$2" : "" );
+
+		}
+		return contents;
+	}
+
+	grunt.registerMultiTask(
+		"build",
+		"Concatenate source, remove sub AMD definitions, " +
+			"(include/exclude modules with +/- flags), embed date/version",
+	function() {
+		var flag, index,
+			done = this.async(),
+			flags = this.flags,
+			optIn = flags[ "*" ],
+			name = this.data.dest,
+			minimum = this.data.minimum,
+			removeWith = this.data.removeWith,
+			excluded = [],
+			included = [],
+			version = grunt.config( "pkg.version" ),
+			/**
+			 * Recursively calls the excluder to remove on all modules in the list
+			 * @param {Array} list
+			 * @param {String} [prepend] Prepend this to the module name.
+			 *  Indicates we're walking a directory
+			 */
+			excludeList = function( list, prepend ) {
+				if ( list ) {
+					prepend = prepend ? prepend + "/" : "";
+					list.forEach( function( module ) {
+
+						// Exclude var modules as well
+						if ( module === "var" ) {
+							excludeList(
+								fs.readdirSync( srcFolder + prepend + module ), prepend + module
+							);
+							return;
+						}
+						if ( prepend ) {
+
+							// Skip if this is not a js file and we're walking files in a dir
+							if ( !( module = /([\w-\/]+)\.js$/.exec( module ) ) ) {
+								return;
+							}
+
+							// Prepend folder name if passed
+							// Remove .js extension
+							module = prepend + module[ 1 ];
+						}
+
+						// Avoid infinite recursion
+						if ( excluded.indexOf( module ) === -1 ) {
+							excluder( "-" + module );
+						}
+					} );
+				}
+			},
+			/**
+			 * Adds the specified module to the excluded or included list, depending on the flag
+			 * @param {String} flag A module path relative to
+			 *  the src directory starting with + or - to indicate
+			 *  whether it should included or excluded
+			 */
+			excluder = function( flag ) {
+				var m = /^(\+|\-|)([\w\/-]+)$/.exec( flag ),
+					exclude = m[ 1 ] === "-",
+					module = m[ 2 ];
+
+				if ( exclude ) {
+
+					// Can't exclude sizzle on this branch
+					if ( module === "sizzle" ) {
+						grunt.log.error( "Sizzle cannot be excluded on the 1.x branch." );
+
+					// Can't exclude certain modules
+					} else if ( minimum.indexOf( module ) === -1 ) {
+
+						// Add to excluded
+						if ( excluded.indexOf( module ) === -1 ) {
+							grunt.log.writeln( flag );
+							excluded.push( module );
+
+							// Exclude all files in the folder of the same name
+							// These are the removable dependencies
+							// It's fine if the directory is not there
+							try {
+								excludeList( fs.readdirSync( srcFolder + module ), module );
+							} catch ( e ) {
+								grunt.verbose.writeln( e );
+							}
+						}
+
+						// Check removeWith list
+						excludeList( removeWith[ module ] );
+					} else {
+						grunt.log.error( "Module \"" + module + "\" is a minimum requirement." );
+					}
+				} else {
+					grunt.log.writeln( flag );
+					included.push( module );
+				}
+			};
+
+		// append commit id to version
+		if ( process.env.COMMIT ) {
+			version += " " + process.env.COMMIT;
+		}
+
+		// figure out which files to exclude based on these rules in this order:
+		//  dependency explicit exclude
+		//  > explicit exclude
+		//  > explicit include
+		//  > dependency implicit exclude
+		//  > implicit exclude
+		// examples:
+		//  *                  none (implicit exclude)
+		//  *:*                all (implicit include)
+		//  *:*:-css           all except css and dependents (explicit > implicit)
+		//  *:*:-css:+effects  same (excludes effects because explicit include is
+		//                     trumped by explicit exclude of dependency)
+		//  *:+effects         none except effects and its dependencies
+		//                     (explicit include trumps implicit exclude of dependency)
+		delete flags[ "*" ];
+		for ( flag in flags ) {
+			excluder( flag );
+		}
+
+		// Replace exports/global with a noop noConflict
+		if ( ( index = excluded.indexOf( "exports/global" ) ) > -1 ) {
+			config.rawText[ "exports/global" ] = "define(['../core']," +
+				"function( jQuery ) {\njQuery.noConflict = function() {};\n});";
+			excluded.splice( index, 1 );
+		}
+
+		grunt.verbose.writeflags( excluded, "Excluded" );
+		grunt.verbose.writeflags( included, "Included" );
+
+		// append excluded modules to version
+		if ( excluded.length ) {
+			version += " -" + excluded.join( ",-" );
+
+			// set pkg.version to version with excludes, so minified file picks it up
+			grunt.config.set( "pkg.version", version );
+			grunt.verbose.writeln( "Version changed to " + version );
+
+			// Have to use shallow or core will get excluded since it is a dependency
+			config.excludeShallow = excluded;
+		}
+		config.include = included;
+
+		/**
+		 * Handle Final output from the optimizer
+		 * @param {String} compiled
+		 */
+		config.out = function( compiled ) {
+			compiled = compiled
+
+				// Embed Version
+				.replace( /@VERSION/g, version )
+
+				// Embed Date
+				// yyyy-mm-ddThh:mmZ
+				.replace( /@DATE/g, ( new Date() ).toISOString().replace( /:\d+\.\d+Z$/, "Z" ) );
+
+			// Write concatenated source to file
+			grunt.file.write( name, compiled );
+		};
+
+		// Turn off opt-in if necessary
+		if ( !optIn ) {
+
+			// Overwrite the default inclusions with the explicit ones provided
+			config.rawText.jquery = "define([" +
+				( included.length ? included.join( "," ) : "" ) +
+			"]);";
+		}
+
+		// Trace dependencies and concatenate files
+		requirejs.optimize( config, function( response ) {
+			grunt.verbose.writeln( response );
+			grunt.log.ok( "File '" + name + "' created." );
+			done();
+		}, function( err ) {
+			done( err );
+		} );
+	} );
+
+	// Special "alias" task to make custom build creation less grawlix-y
+	// Translation example
+	//
+	//   grunt custom:+ajax,-dimensions,-effects,-offset
+	//
+	// Becomes:
+	//
+	//   grunt build:*:*:+ajax:-dimensions:-effects:-offset
+	grunt.registerTask( "custom", function() {
+		var args = this.args,
+			modules = args.length ? args[ 0 ].replace( /,/g, ":" ) : "";
+
+		grunt.log.writeln( "Creating custom build...\n" );
+
+		grunt.task.run( [ "build:*:*" + ( modules ? ":" + modules : "" ), "uglify", "dist" ] );
+	} );
+};
diff --git a/civicrm/bower_components/jquery/build/tasks/dist.js b/civicrm/bower_components/jquery/build/tasks/dist.js
new file mode 100644
index 0000000000000000000000000000000000000000..78ce2f254e6826b382f26c927ad57d1b42f78887
--- /dev/null
+++ b/civicrm/bower_components/jquery/build/tasks/dist.js
@@ -0,0 +1,71 @@
+module.exports = function( grunt ) {
+
+	"use strict";
+
+	var fs = require( "fs" ),
+		distpaths = [
+			"dist/jquery.js",
+			"dist/jquery.min.map",
+			"dist/jquery.min.js"
+		];
+
+	// Process files for distribution
+	grunt.registerTask( "dist", function() {
+		var stored, flags, paths, nonascii;
+
+		// Check for stored destination paths
+		// ( set in dist/.destination.json )
+		stored = Object.keys( grunt.config( "dst" ) );
+
+		// Allow command line input as well
+		flags = Object.keys( this.flags );
+
+		// Combine all output target paths
+		paths = [].concat( stored, flags ).filter( function( path ) {
+			return path !== "*";
+		} );
+
+		// Ensure the dist files are pure ASCII
+		nonascii = false;
+
+		distpaths.forEach( function( filename ) {
+			var i, c,
+				text = fs.readFileSync( filename, "utf8" );
+
+			// Ensure files use only \n for line endings, not \r\n
+			if ( /\x0d\x0a/.test( text ) ) {
+				grunt.log.writeln( filename + ": Incorrect line endings (\\r\\n)" );
+				nonascii = true;
+			}
+
+			// Ensure only ASCII chars so script tags don't need a charset attribute
+			if ( text.length !== Buffer.byteLength( text, "utf8" ) ) {
+				grunt.log.writeln( filename + ": Non-ASCII characters detected:" );
+				for ( i = 0; i < text.length; i++ ) {
+					c = text.charCodeAt( i );
+					if ( c > 127 ) {
+						grunt.log.writeln( "- position " + i + ": " + c );
+						grunt.log.writeln( "-- " + text.substring( i - 20, i + 20 ) );
+						break;
+					}
+				}
+				nonascii = true;
+			}
+
+			// Optionally copy dist files to other locations
+			paths.forEach( function( path ) {
+				var created;
+
+				if ( !/\/$/.test( path ) ) {
+					path += "/";
+				}
+
+				created = path + filename.replace( "dist/", "" );
+				grunt.file.write( created, text );
+				grunt.log.writeln( "File '" + created + "' created." );
+			} );
+		} );
+
+		return !nonascii;
+	} );
+};
diff --git a/civicrm/bower_components/jquery/build/tasks/install_old_jsdom.js b/civicrm/bower_components/jquery/build/tasks/install_old_jsdom.js
new file mode 100644
index 0000000000000000000000000000000000000000..271e0cbe041308f9f8c422965410ae757390a2c3
--- /dev/null
+++ b/civicrm/bower_components/jquery/build/tasks/install_old_jsdom.js
@@ -0,0 +1,20 @@
+module.exports = function( grunt ) {
+
+	"use strict";
+
+	// Run this task to run jsdom-related tests on Node.js < 1.0.0.
+	grunt.registerTask( "old_jsdom", function() {
+		if ( !/^v0/.test( process.version ) ) {
+			console.warn( "The old_jsdom task doesn\'t need to be run in io.js or new Node.js" );
+			return;
+		}
+
+		// Use npm on the command-line
+		// There is no local npm
+		grunt.util.spawn( {
+			cmd: "npm",
+			args: [ "install", "jsdom@3" ],
+			opts: { stdio: "inherit" }
+		}, this.async() );
+	} );
+};
diff --git a/civicrm/bower_components/jquery/build/tasks/lib/spawn_test.js b/civicrm/bower_components/jquery/build/tasks/lib/spawn_test.js
new file mode 100644
index 0000000000000000000000000000000000000000..6c4596a3d76499e36d528d01e2296b5724736514
--- /dev/null
+++ b/civicrm/bower_components/jquery/build/tasks/lib/spawn_test.js
@@ -0,0 +1,16 @@
+/* jshint node: true */
+
+"use strict";
+
+// Run Node with provided parameters: the first one being the Grunt
+// done function and latter ones being files to be tested.
+// See the comment in ../node_smoke_tests.js for more information.
+module.exports = function spawnTest( done ) {
+	var testPaths = [].slice.call( arguments, 1 ),
+		spawn = require( "win-spawn" );
+
+	spawn( "node", testPaths, { stdio: "inherit" } )
+		.on( "close", function( code ) {
+			done( code === 0 );
+		} );
+} ;
diff --git a/civicrm/bower_components/jquery/build/tasks/node_smoke_tests.js b/civicrm/bower_components/jquery/build/tasks/node_smoke_tests.js
new file mode 100644
index 0000000000000000000000000000000000000000..1b860b1409c480834c109e0a5d04aa3c0d7fa555
--- /dev/null
+++ b/civicrm/bower_components/jquery/build/tasks/node_smoke_tests.js
@@ -0,0 +1,32 @@
+module.exports = function( grunt ) {
+
+	"use strict";
+
+	var fs = require( "fs" ),
+		spawnTest = require( "./lib/spawn_test.js" ),
+		testsDir = "./test/node_smoke_tests/",
+		nodeSmokeTests = [ "babel:nodeSmokeTests" ];
+
+	// Fire up all tests defined in test/node_smoke_tests/*.js in spawned sub-processes.
+	// All the files under test/node_smoke_tests/*.js are supposed to exit with 0 code
+	// on success or another one on failure. Spawning in sub-processes is
+	// important so that the tests & the main process don't interfere with
+	// each other, e.g. so that they don't share the require cache.
+
+	fs.readdirSync( testsDir )
+		.filter( function( testFilePath ) {
+			return fs.statSync( testsDir + testFilePath ).isFile() &&
+				/\.js$/.test( testFilePath );
+		} )
+		.forEach( function( testFilePath ) {
+			var taskName = "node_" + testFilePath.replace( /\.js$/, "" );
+
+			grunt.registerTask( taskName, function() {
+				spawnTest( this.async(), "test/node_smoke_tests/" + testFilePath );
+			} );
+
+			nodeSmokeTests.push( taskName );
+		} );
+
+	grunt.registerTask( "node_smoke_tests", nodeSmokeTests );
+};
diff --git a/civicrm/bower_components/jquery/build/tasks/promises-aplus-tests.js b/civicrm/bower_components/jquery/build/tasks/promises-aplus-tests.js
new file mode 100644
index 0000000000000000000000000000000000000000..d6d6f778167e70889de33e0d82fd7261d7bb9097
--- /dev/null
+++ b/civicrm/bower_components/jquery/build/tasks/promises-aplus-tests.js
@@ -0,0 +1,20 @@
+module.exports = function( grunt ) {
+
+	"use strict";
+
+	var spawn = require( "child_process" ).spawn;
+
+	grunt.registerTask( "promises-aplus-tests", function() {
+		var done = this.async();
+		spawn(
+			"node",
+			[
+				"./node_modules/.bin/promises-aplus-tests",
+				"test/promises-aplus-adapter.js"
+			],
+			{ stdio: "inherit" }
+		).on( "close", function( code ) {
+			done( code === 0 );
+		} );
+	} );
+};
diff --git a/civicrm/bower_components/jquery/build/tasks/promises_aplus_tests.js b/civicrm/bower_components/jquery/build/tasks/promises_aplus_tests.js
new file mode 100644
index 0000000000000000000000000000000000000000..3e770a07966f42a862f86fa1a148676b534e4776
--- /dev/null
+++ b/civicrm/bower_components/jquery/build/tasks/promises_aplus_tests.js
@@ -0,0 +1,13 @@
+module.exports = function( grunt ) {
+
+	"use strict";
+
+	var spawnTest = require( "./lib/spawn_test.js" );
+
+	grunt.registerTask( "promises_aplus_tests", function() {
+		spawnTest( this.async(),
+			"./node_modules/.bin/promises-aplus-tests",
+			"test/promises_aplus_adapter.js"
+		);
+	} );
+};
diff --git a/civicrm/bower_components/jquery/build/tasks/sourcemap.js b/civicrm/bower_components/jquery/build/tasks/sourcemap.js
new file mode 100644
index 0000000000000000000000000000000000000000..3e4144de012472c954ff9dce40116aa0b1669a64
--- /dev/null
+++ b/civicrm/bower_components/jquery/build/tasks/sourcemap.js
@@ -0,0 +1,14 @@
+var fs = require( "fs" );
+
+module.exports = function( grunt ) {
+	var minLoc = Object.keys( grunt.config( "uglify.all.files" ) )[ 0 ];
+	grunt.registerTask( "remove_map_comment", function() {
+
+		// Remove the source map comment; it causes way too many problems.
+		// The map file is still generated for manual associations
+		// https://github.com/jquery/jquery/issues/1707
+		var text = fs.readFileSync( minLoc, "utf8" )
+			.replace( /\/\/# sourceMappingURL=\S+/, "" );
+		fs.writeFileSync( minLoc, text );
+	} );
+};
diff --git a/civicrm/bower_components/jquery/build/tasks/testswarm.js b/civicrm/bower_components/jquery/build/tasks/testswarm.js
new file mode 100644
index 0000000000000000000000000000000000000000..88e883d0f956b0c80df4ec1ece3f57e15b16b42d
--- /dev/null
+++ b/civicrm/bower_components/jquery/build/tasks/testswarm.js
@@ -0,0 +1,63 @@
+module.exports = function( grunt ) {
+
+	"use strict";
+
+	grunt.registerTask( "testswarm", function( commit, configFile, projectName, browserSets,
+			timeout, testMode ) {
+		var jobName, config, tests,
+			testswarm = require( "testswarm" ),
+			runs = {},
+			done = this.async(),
+			pull = /PR-(\d+)/.exec( commit );
+
+		projectName = projectName || "jquery";
+		config = grunt.file.readJSON( configFile )[ projectName ];
+		browserSets = browserSets || config.browserSets;
+		if ( browserSets[ 0 ] === "[" ) {
+
+			// We got an array, parse it
+			browserSets = JSON.parse( browserSets );
+		}
+		timeout = timeout || 1000 * 60 * 15;
+		tests = grunt.config( [ this.name, "tests" ] );
+
+		if ( pull ) {
+			jobName = "Pull <a href='https://github.com/jquery/jquery/pull/" +
+				pull[ 1 ] + "'>#" + pull[ 1 ] + "</a>";
+		} else {
+			jobName = "Commit <a href='https://github.com/jquery/jquery/commit/" +
+				commit + "'>" + commit.substr( 0, 10 ) + "</a>";
+		}
+
+		if ( testMode === "basic" ) {
+			runs.basic = config.testUrl + commit + "/test/index.html?module=basic";
+		} else {
+			tests.forEach( function( test ) {
+				runs[ test ] = config.testUrl + commit + "/test/index.html?module=" + test;
+			} );
+		}
+
+		testswarm.createClient( {
+			url: config.swarmUrl
+		} )
+		.addReporter( testswarm.reporters.cli )
+		.auth( {
+			id: config.authUsername,
+			token: config.authToken
+		} )
+		.addjob(
+			{
+				name: jobName,
+				runs: runs,
+				runMax: config.runMax,
+				browserSets: browserSets,
+				timeout: timeout
+			}, function( err, passed ) {
+				if ( err ) {
+					grunt.log.error( err );
+				}
+				done( passed );
+			}
+		);
+	} );
+};
diff --git a/civicrm/bower_components/jquery/dist/jquery.js b/civicrm/bower_components/jquery/dist/jquery.js
index 7fc60fca78b6201f814da4b2906cae2b69ee9610..dff7d4dc2cf205d7de99367ac8e59b255ba2441f 100644
--- a/civicrm/bower_components/jquery/dist/jquery.js
+++ b/civicrm/bower_components/jquery/dist/jquery.js
@@ -9,7 +9,7 @@
  * Released under the MIT license
  * http://jquery.org/license
  *
- * Date: 2016-05-20T17:17Z
+ * Date: 2019-04-23T22:39Z
  */
 
 (function( global, factory ) {
@@ -209,8 +209,9 @@ jQuery.extend = jQuery.fn.extend = function() {
 				src = target[ name ];
 				copy = options[ name ];
 
+				// Prevent Object.prototype pollution
 				// Prevent never-ending loop
-				if ( target === copy ) {
+				if ( name === "__proto__" || target === copy ) {
 					continue;
 				}
 
diff --git a/civicrm/bower_components/jquery/dist/jquery.min.js b/civicrm/bower_components/jquery/dist/jquery.min.js
index e836475870da67f3c72f64777c6e0f37d9f4c87b..4693d1d6e11abdd48ccd51ddb0141312e40ba567 100644
--- a/civicrm/bower_components/jquery/dist/jquery.min.js
+++ b/civicrm/bower_components/jquery/dist/jquery.min.js
@@ -1,5 +1,5 @@
 /*! jQuery v1.12.4 | (c) jQuery Foundation | jquery.org/license */
-!function(a,b){"object"==typeof module&&"object"==typeof module.exports?module.exports=a.document?b(a,!0):function(a){if(!a.document)throw new Error("jQuery requires a window with a document");return b(a)}:b(a)}("undefined"!=typeof window?window:this,function(a,b){var c=[],d=a.document,e=c.slice,f=c.concat,g=c.push,h=c.indexOf,i={},j=i.toString,k=i.hasOwnProperty,l={},m="1.12.4",n=function(a,b){return new n.fn.init(a,b)},o=/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,p=/^-ms-/,q=/-([\da-z])/gi,r=function(a,b){return b.toUpperCase()};n.fn=n.prototype={jquery:m,constructor:n,selector:"",length:0,toArray:function(){return e.call(this)},get:function(a){return null!=a?0>a?this[a+this.length]:this[a]:e.call(this)},pushStack:function(a){var b=n.merge(this.constructor(),a);return b.prevObject=this,b.context=this.context,b},each:function(a){return n.each(this,a)},map:function(a){return this.pushStack(n.map(this,function(b,c){return a.call(b,c,b)}))},slice:function(){return this.pushStack(e.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},eq:function(a){var b=this.length,c=+a+(0>a?b:0);return this.pushStack(c>=0&&b>c?[this[c]]:[])},end:function(){return this.prevObject||this.constructor()},push:g,sort:c.sort,splice:c.splice},n.extend=n.fn.extend=function(){var a,b,c,d,e,f,g=arguments[0]||{},h=1,i=arguments.length,j=!1;for("boolean"==typeof g&&(j=g,g=arguments[h]||{},h++),"object"==typeof g||n.isFunction(g)||(g={}),h===i&&(g=this,h--);i>h;h++)if(null!=(e=arguments[h]))for(d in e)a=g[d],c=e[d],g!==c&&(j&&c&&(n.isPlainObject(c)||(b=n.isArray(c)))?(b?(b=!1,f=a&&n.isArray(a)?a:[]):f=a&&n.isPlainObject(a)?a:{},g[d]=n.extend(j,f,c)):void 0!==c&&(g[d]=c));return g},n.extend({expando:"jQuery"+(m+Math.random()).replace(/\D/g,""),isReady:!0,error:function(a){throw new Error(a)},noop:function(){},isFunction:function(a){return"function"===n.type(a)},isArray:Array.isArray||function(a){return"array"===n.type(a)},isWindow:function(a){return null!=a&&a==a.window},isNumeric:function(a){var b=a&&a.toString();return!n.isArray(a)&&b-parseFloat(b)+1>=0},isEmptyObject:function(a){var b;for(b in a)return!1;return!0},isPlainObject:function(a){var b;if(!a||"object"!==n.type(a)||a.nodeType||n.isWindow(a))return!1;try{if(a.constructor&&!k.call(a,"constructor")&&!k.call(a.constructor.prototype,"isPrototypeOf"))return!1}catch(c){return!1}if(!l.ownFirst)for(b in a)return k.call(a,b);for(b in a);return void 0===b||k.call(a,b)},type:function(a){return null==a?a+"":"object"==typeof a||"function"==typeof a?i[j.call(a)]||"object":typeof a},globalEval:function(b){b&&n.trim(b)&&(a.execScript||function(b){a.eval.call(a,b)})(b)},camelCase:function(a){return a.replace(p,"ms-").replace(q,r)},nodeName:function(a,b){return a.nodeName&&a.nodeName.toLowerCase()===b.toLowerCase()},each:function(a,b){var c,d=0;if(s(a)){for(c=a.length;c>d;d++)if(b.call(a[d],d,a[d])===!1)break}else for(d in a)if(b.call(a[d],d,a[d])===!1)break;return a},trim:function(a){return null==a?"":(a+"").replace(o,"")},makeArray:function(a,b){var c=b||[];return null!=a&&(s(Object(a))?n.merge(c,"string"==typeof a?[a]:a):g.call(c,a)),c},inArray:function(a,b,c){var d;if(b){if(h)return h.call(b,a,c);for(d=b.length,c=c?0>c?Math.max(0,d+c):c:0;d>c;c++)if(c in b&&b[c]===a)return c}return-1},merge:function(a,b){var c=+b.length,d=0,e=a.length;while(c>d)a[e++]=b[d++];if(c!==c)while(void 0!==b[d])a[e++]=b[d++];return a.length=e,a},grep:function(a,b,c){for(var d,e=[],f=0,g=a.length,h=!c;g>f;f++)d=!b(a[f],f),d!==h&&e.push(a[f]);return e},map:function(a,b,c){var d,e,g=0,h=[];if(s(a))for(d=a.length;d>g;g++)e=b(a[g],g,c),null!=e&&h.push(e);else for(g in a)e=b(a[g],g,c),null!=e&&h.push(e);return f.apply([],h)},guid:1,proxy:function(a,b){var c,d,f;return"string"==typeof b&&(f=a[b],b=a,a=f),n.isFunction(a)?(c=e.call(arguments,2),d=function(){return a.apply(b||this,c.concat(e.call(arguments)))},d.guid=a.guid=a.guid||n.guid++,d):void 0},now:function(){return+new Date},support:l}),"function"==typeof Symbol&&(n.fn[Symbol.iterator]=c[Symbol.iterator]),n.each("Boolean Number String Function Array Date RegExp Object Error Symbol".split(" "),function(a,b){i["[object "+b+"]"]=b.toLowerCase()});function s(a){var b=!!a&&"length"in a&&a.length,c=n.type(a);return"function"===c||n.isWindow(a)?!1:"array"===c||0===b||"number"==typeof b&&b>0&&b-1 in a}var t=function(a){var b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u="sizzle"+1*new Date,v=a.document,w=0,x=0,y=ga(),z=ga(),A=ga(),B=function(a,b){return a===b&&(l=!0),0},C=1<<31,D={}.hasOwnProperty,E=[],F=E.pop,G=E.push,H=E.push,I=E.slice,J=function(a,b){for(var c=0,d=a.length;d>c;c++)if(a[c]===b)return c;return-1},K="checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped",L="[\\x20\\t\\r\\n\\f]",M="(?:\\\\.|[\\w-]|[^\\x00-\\xa0])+",N="\\["+L+"*("+M+")(?:"+L+"*([*^$|!~]?=)"+L+"*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|("+M+"))|)"+L+"*\\]",O=":("+M+")(?:\\((('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|((?:\\\\.|[^\\\\()[\\]]|"+N+")*)|.*)\\)|)",P=new RegExp(L+"+","g"),Q=new RegExp("^"+L+"+|((?:^|[^\\\\])(?:\\\\.)*)"+L+"+$","g"),R=new RegExp("^"+L+"*,"+L+"*"),S=new RegExp("^"+L+"*([>+~]|"+L+")"+L+"*"),T=new RegExp("="+L+"*([^\\]'\"]*?)"+L+"*\\]","g"),U=new RegExp(O),V=new RegExp("^"+M+"$"),W={ID:new RegExp("^#("+M+")"),CLASS:new RegExp("^\\.("+M+")"),TAG:new RegExp("^("+M+"|[*])"),ATTR:new RegExp("^"+N),PSEUDO:new RegExp("^"+O),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+L+"*(even|odd|(([+-]|)(\\d*)n|)"+L+"*(?:([+-]|)"+L+"*(\\d+)|))"+L+"*\\)|)","i"),bool:new RegExp("^(?:"+K+")$","i"),needsContext:new RegExp("^"+L+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+L+"*((?:-\\d)?\\d*)"+L+"*\\)|)(?=[^-]|$)","i")},X=/^(?:input|select|textarea|button)$/i,Y=/^h\d$/i,Z=/^[^{]+\{\s*\[native \w/,$=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,_=/[+~]/,aa=/'|\\/g,ba=new RegExp("\\\\([\\da-f]{1,6}"+L+"?|("+L+")|.)","ig"),ca=function(a,b,c){var d="0x"+b-65536;return d!==d||c?b:0>d?String.fromCharCode(d+65536):String.fromCharCode(d>>10|55296,1023&d|56320)},da=function(){m()};try{H.apply(E=I.call(v.childNodes),v.childNodes),E[v.childNodes.length].nodeType}catch(ea){H={apply:E.length?function(a,b){G.apply(a,I.call(b))}:function(a,b){var c=a.length,d=0;while(a[c++]=b[d++]);a.length=c-1}}}function fa(a,b,d,e){var f,h,j,k,l,o,r,s,w=b&&b.ownerDocument,x=b?b.nodeType:9;if(d=d||[],"string"!=typeof a||!a||1!==x&&9!==x&&11!==x)return d;if(!e&&((b?b.ownerDocument||b:v)!==n&&m(b),b=b||n,p)){if(11!==x&&(o=$.exec(a)))if(f=o[1]){if(9===x){if(!(j=b.getElementById(f)))return d;if(j.id===f)return d.push(j),d}else if(w&&(j=w.getElementById(f))&&t(b,j)&&j.id===f)return d.push(j),d}else{if(o[2])return H.apply(d,b.getElementsByTagName(a)),d;if((f=o[3])&&c.getElementsByClassName&&b.getElementsByClassName)return H.apply(d,b.getElementsByClassName(f)),d}if(c.qsa&&!A[a+" "]&&(!q||!q.test(a))){if(1!==x)w=b,s=a;else if("object"!==b.nodeName.toLowerCase()){(k=b.getAttribute("id"))?k=k.replace(aa,"\\$&"):b.setAttribute("id",k=u),r=g(a),h=r.length,l=V.test(k)?"#"+k:"[id='"+k+"']";while(h--)r[h]=l+" "+qa(r[h]);s=r.join(","),w=_.test(a)&&oa(b.parentNode)||b}if(s)try{return H.apply(d,w.querySelectorAll(s)),d}catch(y){}finally{k===u&&b.removeAttribute("id")}}}return i(a.replace(Q,"$1"),b,d,e)}function ga(){var a=[];function b(c,e){return a.push(c+" ")>d.cacheLength&&delete b[a.shift()],b[c+" "]=e}return b}function ha(a){return a[u]=!0,a}function ia(a){var b=n.createElement("div");try{return!!a(b)}catch(c){return!1}finally{b.parentNode&&b.parentNode.removeChild(b),b=null}}function ja(a,b){var c=a.split("|"),e=c.length;while(e--)d.attrHandle[c[e]]=b}function ka(a,b){var c=b&&a,d=c&&1===a.nodeType&&1===b.nodeType&&(~b.sourceIndex||C)-(~a.sourceIndex||C);if(d)return d;if(c)while(c=c.nextSibling)if(c===b)return-1;return a?1:-1}function la(a){return function(b){var c=b.nodeName.toLowerCase();return"input"===c&&b.type===a}}function ma(a){return function(b){var c=b.nodeName.toLowerCase();return("input"===c||"button"===c)&&b.type===a}}function na(a){return ha(function(b){return b=+b,ha(function(c,d){var e,f=a([],c.length,b),g=f.length;while(g--)c[e=f[g]]&&(c[e]=!(d[e]=c[e]))})})}function oa(a){return a&&"undefined"!=typeof a.getElementsByTagName&&a}c=fa.support={},f=fa.isXML=function(a){var b=a&&(a.ownerDocument||a).documentElement;return b?"HTML"!==b.nodeName:!1},m=fa.setDocument=function(a){var b,e,g=a?a.ownerDocument||a:v;return g!==n&&9===g.nodeType&&g.documentElement?(n=g,o=n.documentElement,p=!f(n),(e=n.defaultView)&&e.top!==e&&(e.addEventListener?e.addEventListener("unload",da,!1):e.attachEvent&&e.attachEvent("onunload",da)),c.attributes=ia(function(a){return a.className="i",!a.getAttribute("className")}),c.getElementsByTagName=ia(function(a){return a.appendChild(n.createComment("")),!a.getElementsByTagName("*").length}),c.getElementsByClassName=Z.test(n.getElementsByClassName),c.getById=ia(function(a){return o.appendChild(a).id=u,!n.getElementsByName||!n.getElementsByName(u).length}),c.getById?(d.find.ID=function(a,b){if("undefined"!=typeof b.getElementById&&p){var c=b.getElementById(a);return c?[c]:[]}},d.filter.ID=function(a){var b=a.replace(ba,ca);return function(a){return a.getAttribute("id")===b}}):(delete d.find.ID,d.filter.ID=function(a){var b=a.replace(ba,ca);return function(a){var c="undefined"!=typeof a.getAttributeNode&&a.getAttributeNode("id");return c&&c.value===b}}),d.find.TAG=c.getElementsByTagName?function(a,b){return"undefined"!=typeof b.getElementsByTagName?b.getElementsByTagName(a):c.qsa?b.querySelectorAll(a):void 0}:function(a,b){var c,d=[],e=0,f=b.getElementsByTagName(a);if("*"===a){while(c=f[e++])1===c.nodeType&&d.push(c);return d}return f},d.find.CLASS=c.getElementsByClassName&&function(a,b){return"undefined"!=typeof b.getElementsByClassName&&p?b.getElementsByClassName(a):void 0},r=[],q=[],(c.qsa=Z.test(n.querySelectorAll))&&(ia(function(a){o.appendChild(a).innerHTML="<a id='"+u+"'></a><select id='"+u+"-\r\\' msallowcapture=''><option selected=''></option></select>",a.querySelectorAll("[msallowcapture^='']").length&&q.push("[*^$]="+L+"*(?:''|\"\")"),a.querySelectorAll("[selected]").length||q.push("\\["+L+"*(?:value|"+K+")"),a.querySelectorAll("[id~="+u+"-]").length||q.push("~="),a.querySelectorAll(":checked").length||q.push(":checked"),a.querySelectorAll("a#"+u+"+*").length||q.push(".#.+[+~]")}),ia(function(a){var b=n.createElement("input");b.setAttribute("type","hidden"),a.appendChild(b).setAttribute("name","D"),a.querySelectorAll("[name=d]").length&&q.push("name"+L+"*[*^$|!~]?="),a.querySelectorAll(":enabled").length||q.push(":enabled",":disabled"),a.querySelectorAll("*,:x"),q.push(",.*:")})),(c.matchesSelector=Z.test(s=o.matches||o.webkitMatchesSelector||o.mozMatchesSelector||o.oMatchesSelector||o.msMatchesSelector))&&ia(function(a){c.disconnectedMatch=s.call(a,"div"),s.call(a,"[s!='']:x"),r.push("!=",O)}),q=q.length&&new RegExp(q.join("|")),r=r.length&&new RegExp(r.join("|")),b=Z.test(o.compareDocumentPosition),t=b||Z.test(o.contains)?function(a,b){var c=9===a.nodeType?a.documentElement:a,d=b&&b.parentNode;return a===d||!(!d||1!==d.nodeType||!(c.contains?c.contains(d):a.compareDocumentPosition&&16&a.compareDocumentPosition(d)))}:function(a,b){if(b)while(b=b.parentNode)if(b===a)return!0;return!1},B=b?function(a,b){if(a===b)return l=!0,0;var d=!a.compareDocumentPosition-!b.compareDocumentPosition;return d?d:(d=(a.ownerDocument||a)===(b.ownerDocument||b)?a.compareDocumentPosition(b):1,1&d||!c.sortDetached&&b.compareDocumentPosition(a)===d?a===n||a.ownerDocument===v&&t(v,a)?-1:b===n||b.ownerDocument===v&&t(v,b)?1:k?J(k,a)-J(k,b):0:4&d?-1:1)}:function(a,b){if(a===b)return l=!0,0;var c,d=0,e=a.parentNode,f=b.parentNode,g=[a],h=[b];if(!e||!f)return a===n?-1:b===n?1:e?-1:f?1:k?J(k,a)-J(k,b):0;if(e===f)return ka(a,b);c=a;while(c=c.parentNode)g.unshift(c);c=b;while(c=c.parentNode)h.unshift(c);while(g[d]===h[d])d++;return d?ka(g[d],h[d]):g[d]===v?-1:h[d]===v?1:0},n):n},fa.matches=function(a,b){return fa(a,null,null,b)},fa.matchesSelector=function(a,b){if((a.ownerDocument||a)!==n&&m(a),b=b.replace(T,"='$1']"),c.matchesSelector&&p&&!A[b+" "]&&(!r||!r.test(b))&&(!q||!q.test(b)))try{var d=s.call(a,b);if(d||c.disconnectedMatch||a.document&&11!==a.document.nodeType)return d}catch(e){}return fa(b,n,null,[a]).length>0},fa.contains=function(a,b){return(a.ownerDocument||a)!==n&&m(a),t(a,b)},fa.attr=function(a,b){(a.ownerDocument||a)!==n&&m(a);var e=d.attrHandle[b.toLowerCase()],f=e&&D.call(d.attrHandle,b.toLowerCase())?e(a,b,!p):void 0;return void 0!==f?f:c.attributes||!p?a.getAttribute(b):(f=a.getAttributeNode(b))&&f.specified?f.value:null},fa.error=function(a){throw new Error("Syntax error, unrecognized expression: "+a)},fa.uniqueSort=function(a){var b,d=[],e=0,f=0;if(l=!c.detectDuplicates,k=!c.sortStable&&a.slice(0),a.sort(B),l){while(b=a[f++])b===a[f]&&(e=d.push(f));while(e--)a.splice(d[e],1)}return k=null,a},e=fa.getText=function(a){var b,c="",d=0,f=a.nodeType;if(f){if(1===f||9===f||11===f){if("string"==typeof a.textContent)return a.textContent;for(a=a.firstChild;a;a=a.nextSibling)c+=e(a)}else if(3===f||4===f)return a.nodeValue}else while(b=a[d++])c+=e(b);return c},d=fa.selectors={cacheLength:50,createPseudo:ha,match:W,attrHandle:{},find:{},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(a){return a[1]=a[1].replace(ba,ca),a[3]=(a[3]||a[4]||a[5]||"").replace(ba,ca),"~="===a[2]&&(a[3]=" "+a[3]+" "),a.slice(0,4)},CHILD:function(a){return a[1]=a[1].toLowerCase(),"nth"===a[1].slice(0,3)?(a[3]||fa.error(a[0]),a[4]=+(a[4]?a[5]+(a[6]||1):2*("even"===a[3]||"odd"===a[3])),a[5]=+(a[7]+a[8]||"odd"===a[3])):a[3]&&fa.error(a[0]),a},PSEUDO:function(a){var b,c=!a[6]&&a[2];return W.CHILD.test(a[0])?null:(a[3]?a[2]=a[4]||a[5]||"":c&&U.test(c)&&(b=g(c,!0))&&(b=c.indexOf(")",c.length-b)-c.length)&&(a[0]=a[0].slice(0,b),a[2]=c.slice(0,b)),a.slice(0,3))}},filter:{TAG:function(a){var b=a.replace(ba,ca).toLowerCase();return"*"===a?function(){return!0}:function(a){return a.nodeName&&a.nodeName.toLowerCase()===b}},CLASS:function(a){var b=y[a+" "];return b||(b=new RegExp("(^|"+L+")"+a+"("+L+"|$)"))&&y(a,function(a){return b.test("string"==typeof a.className&&a.className||"undefined"!=typeof a.getAttribute&&a.getAttribute("class")||"")})},ATTR:function(a,b,c){return function(d){var e=fa.attr(d,a);return null==e?"!="===b:b?(e+="","="===b?e===c:"!="===b?e!==c:"^="===b?c&&0===e.indexOf(c):"*="===b?c&&e.indexOf(c)>-1:"$="===b?c&&e.slice(-c.length)===c:"~="===b?(" "+e.replace(P," ")+" ").indexOf(c)>-1:"|="===b?e===c||e.slice(0,c.length+1)===c+"-":!1):!0}},CHILD:function(a,b,c,d,e){var f="nth"!==a.slice(0,3),g="last"!==a.slice(-4),h="of-type"===b;return 1===d&&0===e?function(a){return!!a.parentNode}:function(b,c,i){var j,k,l,m,n,o,p=f!==g?"nextSibling":"previousSibling",q=b.parentNode,r=h&&b.nodeName.toLowerCase(),s=!i&&!h,t=!1;if(q){if(f){while(p){m=b;while(m=m[p])if(h?m.nodeName.toLowerCase()===r:1===m.nodeType)return!1;o=p="only"===a&&!o&&"nextSibling"}return!0}if(o=[g?q.firstChild:q.lastChild],g&&s){m=q,l=m[u]||(m[u]={}),k=l[m.uniqueID]||(l[m.uniqueID]={}),j=k[a]||[],n=j[0]===w&&j[1],t=n&&j[2],m=n&&q.childNodes[n];while(m=++n&&m&&m[p]||(t=n=0)||o.pop())if(1===m.nodeType&&++t&&m===b){k[a]=[w,n,t];break}}else if(s&&(m=b,l=m[u]||(m[u]={}),k=l[m.uniqueID]||(l[m.uniqueID]={}),j=k[a]||[],n=j[0]===w&&j[1],t=n),t===!1)while(m=++n&&m&&m[p]||(t=n=0)||o.pop())if((h?m.nodeName.toLowerCase()===r:1===m.nodeType)&&++t&&(s&&(l=m[u]||(m[u]={}),k=l[m.uniqueID]||(l[m.uniqueID]={}),k[a]=[w,t]),m===b))break;return t-=e,t===d||t%d===0&&t/d>=0}}},PSEUDO:function(a,b){var c,e=d.pseudos[a]||d.setFilters[a.toLowerCase()]||fa.error("unsupported pseudo: "+a);return e[u]?e(b):e.length>1?(c=[a,a,"",b],d.setFilters.hasOwnProperty(a.toLowerCase())?ha(function(a,c){var d,f=e(a,b),g=f.length;while(g--)d=J(a,f[g]),a[d]=!(c[d]=f[g])}):function(a){return e(a,0,c)}):e}},pseudos:{not:ha(function(a){var b=[],c=[],d=h(a.replace(Q,"$1"));return d[u]?ha(function(a,b,c,e){var f,g=d(a,null,e,[]),h=a.length;while(h--)(f=g[h])&&(a[h]=!(b[h]=f))}):function(a,e,f){return b[0]=a,d(b,null,f,c),b[0]=null,!c.pop()}}),has:ha(function(a){return function(b){return fa(a,b).length>0}}),contains:ha(function(a){return a=a.replace(ba,ca),function(b){return(b.textContent||b.innerText||e(b)).indexOf(a)>-1}}),lang:ha(function(a){return V.test(a||"")||fa.error("unsupported lang: "+a),a=a.replace(ba,ca).toLowerCase(),function(b){var c;do if(c=p?b.lang:b.getAttribute("xml:lang")||b.getAttribute("lang"))return c=c.toLowerCase(),c===a||0===c.indexOf(a+"-");while((b=b.parentNode)&&1===b.nodeType);return!1}}),target:function(b){var c=a.location&&a.location.hash;return c&&c.slice(1)===b.id},root:function(a){return a===o},focus:function(a){return a===n.activeElement&&(!n.hasFocus||n.hasFocus())&&!!(a.type||a.href||~a.tabIndex)},enabled:function(a){return a.disabled===!1},disabled:function(a){return a.disabled===!0},checked:function(a){var b=a.nodeName.toLowerCase();return"input"===b&&!!a.checked||"option"===b&&!!a.selected},selected:function(a){return a.parentNode&&a.parentNode.selectedIndex,a.selected===!0},empty:function(a){for(a=a.firstChild;a;a=a.nextSibling)if(a.nodeType<6)return!1;return!0},parent:function(a){return!d.pseudos.empty(a)},header:function(a){return Y.test(a.nodeName)},input:function(a){return X.test(a.nodeName)},button:function(a){var b=a.nodeName.toLowerCase();return"input"===b&&"button"===a.type||"button"===b},text:function(a){var b;return"input"===a.nodeName.toLowerCase()&&"text"===a.type&&(null==(b=a.getAttribute("type"))||"text"===b.toLowerCase())},first:na(function(){return[0]}),last:na(function(a,b){return[b-1]}),eq:na(function(a,b,c){return[0>c?c+b:c]}),even:na(function(a,b){for(var c=0;b>c;c+=2)a.push(c);return a}),odd:na(function(a,b){for(var c=1;b>c;c+=2)a.push(c);return a}),lt:na(function(a,b,c){for(var d=0>c?c+b:c;--d>=0;)a.push(d);return a}),gt:na(function(a,b,c){for(var d=0>c?c+b:c;++d<b;)a.push(d);return a})}},d.pseudos.nth=d.pseudos.eq;for(b in{radio:!0,checkbox:!0,file:!0,password:!0,image:!0})d.pseudos[b]=la(b);for(b in{submit:!0,reset:!0})d.pseudos[b]=ma(b);function pa(){}pa.prototype=d.filters=d.pseudos,d.setFilters=new pa,g=fa.tokenize=function(a,b){var c,e,f,g,h,i,j,k=z[a+" "];if(k)return b?0:k.slice(0);h=a,i=[],j=d.preFilter;while(h){c&&!(e=R.exec(h))||(e&&(h=h.slice(e[0].length)||h),i.push(f=[])),c=!1,(e=S.exec(h))&&(c=e.shift(),f.push({value:c,type:e[0].replace(Q," ")}),h=h.slice(c.length));for(g in d.filter)!(e=W[g].exec(h))||j[g]&&!(e=j[g](e))||(c=e.shift(),f.push({value:c,type:g,matches:e}),h=h.slice(c.length));if(!c)break}return b?h.length:h?fa.error(a):z(a,i).slice(0)};function qa(a){for(var b=0,c=a.length,d="";c>b;b++)d+=a[b].value;return d}function ra(a,b,c){var d=b.dir,e=c&&"parentNode"===d,f=x++;return b.first?function(b,c,f){while(b=b[d])if(1===b.nodeType||e)return a(b,c,f)}:function(b,c,g){var h,i,j,k=[w,f];if(g){while(b=b[d])if((1===b.nodeType||e)&&a(b,c,g))return!0}else while(b=b[d])if(1===b.nodeType||e){if(j=b[u]||(b[u]={}),i=j[b.uniqueID]||(j[b.uniqueID]={}),(h=i[d])&&h[0]===w&&h[1]===f)return k[2]=h[2];if(i[d]=k,k[2]=a(b,c,g))return!0}}}function sa(a){return a.length>1?function(b,c,d){var e=a.length;while(e--)if(!a[e](b,c,d))return!1;return!0}:a[0]}function ta(a,b,c){for(var d=0,e=b.length;e>d;d++)fa(a,b[d],c);return c}function ua(a,b,c,d,e){for(var f,g=[],h=0,i=a.length,j=null!=b;i>h;h++)(f=a[h])&&(c&&!c(f,d,e)||(g.push(f),j&&b.push(h)));return g}function va(a,b,c,d,e,f){return d&&!d[u]&&(d=va(d)),e&&!e[u]&&(e=va(e,f)),ha(function(f,g,h,i){var j,k,l,m=[],n=[],o=g.length,p=f||ta(b||"*",h.nodeType?[h]:h,[]),q=!a||!f&&b?p:ua(p,m,a,h,i),r=c?e||(f?a:o||d)?[]:g:q;if(c&&c(q,r,h,i),d){j=ua(r,n),d(j,[],h,i),k=j.length;while(k--)(l=j[k])&&(r[n[k]]=!(q[n[k]]=l))}if(f){if(e||a){if(e){j=[],k=r.length;while(k--)(l=r[k])&&j.push(q[k]=l);e(null,r=[],j,i)}k=r.length;while(k--)(l=r[k])&&(j=e?J(f,l):m[k])>-1&&(f[j]=!(g[j]=l))}}else r=ua(r===g?r.splice(o,r.length):r),e?e(null,g,r,i):H.apply(g,r)})}function wa(a){for(var b,c,e,f=a.length,g=d.relative[a[0].type],h=g||d.relative[" "],i=g?1:0,k=ra(function(a){return a===b},h,!0),l=ra(function(a){return J(b,a)>-1},h,!0),m=[function(a,c,d){var e=!g&&(d||c!==j)||((b=c).nodeType?k(a,c,d):l(a,c,d));return b=null,e}];f>i;i++)if(c=d.relative[a[i].type])m=[ra(sa(m),c)];else{if(c=d.filter[a[i].type].apply(null,a[i].matches),c[u]){for(e=++i;f>e;e++)if(d.relative[a[e].type])break;return va(i>1&&sa(m),i>1&&qa(a.slice(0,i-1).concat({value:" "===a[i-2].type?"*":""})).replace(Q,"$1"),c,e>i&&wa(a.slice(i,e)),f>e&&wa(a=a.slice(e)),f>e&&qa(a))}m.push(c)}return sa(m)}function xa(a,b){var c=b.length>0,e=a.length>0,f=function(f,g,h,i,k){var l,o,q,r=0,s="0",t=f&&[],u=[],v=j,x=f||e&&d.find.TAG("*",k),y=w+=null==v?1:Math.random()||.1,z=x.length;for(k&&(j=g===n||g||k);s!==z&&null!=(l=x[s]);s++){if(e&&l){o=0,g||l.ownerDocument===n||(m(l),h=!p);while(q=a[o++])if(q(l,g||n,h)){i.push(l);break}k&&(w=y)}c&&((l=!q&&l)&&r--,f&&t.push(l))}if(r+=s,c&&s!==r){o=0;while(q=b[o++])q(t,u,g,h);if(f){if(r>0)while(s--)t[s]||u[s]||(u[s]=F.call(i));u=ua(u)}H.apply(i,u),k&&!f&&u.length>0&&r+b.length>1&&fa.uniqueSort(i)}return k&&(w=y,j=v),t};return c?ha(f):f}return h=fa.compile=function(a,b){var c,d=[],e=[],f=A[a+" "];if(!f){b||(b=g(a)),c=b.length;while(c--)f=wa(b[c]),f[u]?d.push(f):e.push(f);f=A(a,xa(e,d)),f.selector=a}return f},i=fa.select=function(a,b,e,f){var i,j,k,l,m,n="function"==typeof a&&a,o=!f&&g(a=n.selector||a);if(e=e||[],1===o.length){if(j=o[0]=o[0].slice(0),j.length>2&&"ID"===(k=j[0]).type&&c.getById&&9===b.nodeType&&p&&d.relative[j[1].type]){if(b=(d.find.ID(k.matches[0].replace(ba,ca),b)||[])[0],!b)return e;n&&(b=b.parentNode),a=a.slice(j.shift().value.length)}i=W.needsContext.test(a)?0:j.length;while(i--){if(k=j[i],d.relative[l=k.type])break;if((m=d.find[l])&&(f=m(k.matches[0].replace(ba,ca),_.test(j[0].type)&&oa(b.parentNode)||b))){if(j.splice(i,1),a=f.length&&qa(j),!a)return H.apply(e,f),e;break}}}return(n||h(a,o))(f,b,!p,e,!b||_.test(a)&&oa(b.parentNode)||b),e},c.sortStable=u.split("").sort(B).join("")===u,c.detectDuplicates=!!l,m(),c.sortDetached=ia(function(a){return 1&a.compareDocumentPosition(n.createElement("div"))}),ia(function(a){return a.innerHTML="<a href='#'></a>","#"===a.firstChild.getAttribute("href")})||ja("type|href|height|width",function(a,b,c){return c?void 0:a.getAttribute(b,"type"===b.toLowerCase()?1:2)}),c.attributes&&ia(function(a){return a.innerHTML="<input/>",a.firstChild.setAttribute("value",""),""===a.firstChild.getAttribute("value")})||ja("value",function(a,b,c){return c||"input"!==a.nodeName.toLowerCase()?void 0:a.defaultValue}),ia(function(a){return null==a.getAttribute("disabled")})||ja(K,function(a,b,c){var d;return c?void 0:a[b]===!0?b.toLowerCase():(d=a.getAttributeNode(b))&&d.specified?d.value:null}),fa}(a);n.find=t,n.expr=t.selectors,n.expr[":"]=n.expr.pseudos,n.uniqueSort=n.unique=t.uniqueSort,n.text=t.getText,n.isXMLDoc=t.isXML,n.contains=t.contains;var u=function(a,b,c){var d=[],e=void 0!==c;while((a=a[b])&&9!==a.nodeType)if(1===a.nodeType){if(e&&n(a).is(c))break;d.push(a)}return d},v=function(a,b){for(var c=[];a;a=a.nextSibling)1===a.nodeType&&a!==b&&c.push(a);return c},w=n.expr.match.needsContext,x=/^<([\w-]+)\s*\/?>(?:<\/\1>|)$/,y=/^.[^:#\[\.,]*$/;function z(a,b,c){if(n.isFunction(b))return n.grep(a,function(a,d){return!!b.call(a,d,a)!==c});if(b.nodeType)return n.grep(a,function(a){return a===b!==c});if("string"==typeof b){if(y.test(b))return n.filter(b,a,c);b=n.filter(b,a)}return n.grep(a,function(a){return n.inArray(a,b)>-1!==c})}n.filter=function(a,b,c){var d=b[0];return c&&(a=":not("+a+")"),1===b.length&&1===d.nodeType?n.find.matchesSelector(d,a)?[d]:[]:n.find.matches(a,n.grep(b,function(a){return 1===a.nodeType}))},n.fn.extend({find:function(a){var b,c=[],d=this,e=d.length;if("string"!=typeof a)return this.pushStack(n(a).filter(function(){for(b=0;e>b;b++)if(n.contains(d[b],this))return!0}));for(b=0;e>b;b++)n.find(a,d[b],c);return c=this.pushStack(e>1?n.unique(c):c),c.selector=this.selector?this.selector+" "+a:a,c},filter:function(a){return this.pushStack(z(this,a||[],!1))},not:function(a){return this.pushStack(z(this,a||[],!0))},is:function(a){return!!z(this,"string"==typeof a&&w.test(a)?n(a):a||[],!1).length}});var A,B=/^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]*))$/,C=n.fn.init=function(a,b,c){var e,f;if(!a)return this;if(c=c||A,"string"==typeof a){if(e="<"===a.charAt(0)&&">"===a.charAt(a.length-1)&&a.length>=3?[null,a,null]:B.exec(a),!e||!e[1]&&b)return!b||b.jquery?(b||c).find(a):this.constructor(b).find(a);if(e[1]){if(b=b instanceof n?b[0]:b,n.merge(this,n.parseHTML(e[1],b&&b.nodeType?b.ownerDocument||b:d,!0)),x.test(e[1])&&n.isPlainObject(b))for(e in b)n.isFunction(this[e])?this[e](b[e]):this.attr(e,b[e]);return this}if(f=d.getElementById(e[2]),f&&f.parentNode){if(f.id!==e[2])return A.find(a);this.length=1,this[0]=f}return this.context=d,this.selector=a,this}return a.nodeType?(this.context=this[0]=a,this.length=1,this):n.isFunction(a)?"undefined"!=typeof c.ready?c.ready(a):a(n):(void 0!==a.selector&&(this.selector=a.selector,this.context=a.context),n.makeArray(a,this))};C.prototype=n.fn,A=n(d);var D=/^(?:parents|prev(?:Until|All))/,E={children:!0,contents:!0,next:!0,prev:!0};n.fn.extend({has:function(a){var b,c=n(a,this),d=c.length;return this.filter(function(){for(b=0;d>b;b++)if(n.contains(this,c[b]))return!0})},closest:function(a,b){for(var c,d=0,e=this.length,f=[],g=w.test(a)||"string"!=typeof a?n(a,b||this.context):0;e>d;d++)for(c=this[d];c&&c!==b;c=c.parentNode)if(c.nodeType<11&&(g?g.index(c)>-1:1===c.nodeType&&n.find.matchesSelector(c,a))){f.push(c);break}return this.pushStack(f.length>1?n.uniqueSort(f):f)},index:function(a){return a?"string"==typeof a?n.inArray(this[0],n(a)):n.inArray(a.jquery?a[0]:a,this):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(a,b){return this.pushStack(n.uniqueSort(n.merge(this.get(),n(a,b))))},addBack:function(a){return this.add(null==a?this.prevObject:this.prevObject.filter(a))}});function F(a,b){do a=a[b];while(a&&1!==a.nodeType);return a}n.each({parent:function(a){var b=a.parentNode;return b&&11!==b.nodeType?b:null},parents:function(a){return u(a,"parentNode")},parentsUntil:function(a,b,c){return u(a,"parentNode",c)},next:function(a){return F(a,"nextSibling")},prev:function(a){return F(a,"previousSibling")},nextAll:function(a){return u(a,"nextSibling")},prevAll:function(a){return u(a,"previousSibling")},nextUntil:function(a,b,c){return u(a,"nextSibling",c)},prevUntil:function(a,b,c){return u(a,"previousSibling",c)},siblings:function(a){return v((a.parentNode||{}).firstChild,a)},children:function(a){return v(a.firstChild)},contents:function(a){return n.nodeName(a,"iframe")?a.contentDocument||a.contentWindow.document:n.merge([],a.childNodes)}},function(a,b){n.fn[a]=function(c,d){var e=n.map(this,b,c);return"Until"!==a.slice(-5)&&(d=c),d&&"string"==typeof d&&(e=n.filter(d,e)),this.length>1&&(E[a]||(e=n.uniqueSort(e)),D.test(a)&&(e=e.reverse())),this.pushStack(e)}});var G=/\S+/g;function H(a){var b={};return n.each(a.match(G)||[],function(a,c){b[c]=!0}),b}n.Callbacks=function(a){a="string"==typeof a?H(a):n.extend({},a);var b,c,d,e,f=[],g=[],h=-1,i=function(){for(e=a.once,d=b=!0;g.length;h=-1){c=g.shift();while(++h<f.length)f[h].apply(c[0],c[1])===!1&&a.stopOnFalse&&(h=f.length,c=!1)}a.memory||(c=!1),b=!1,e&&(f=c?[]:"")},j={add:function(){return f&&(c&&!b&&(h=f.length-1,g.push(c)),function d(b){n.each(b,function(b,c){n.isFunction(c)?a.unique&&j.has(c)||f.push(c):c&&c.length&&"string"!==n.type(c)&&d(c)})}(arguments),c&&!b&&i()),this},remove:function(){return n.each(arguments,function(a,b){var c;while((c=n.inArray(b,f,c))>-1)f.splice(c,1),h>=c&&h--}),this},has:function(a){return a?n.inArray(a,f)>-1:f.length>0},empty:function(){return f&&(f=[]),this},disable:function(){return e=g=[],f=c="",this},disabled:function(){return!f},lock:function(){return e=!0,c||j.disable(),this},locked:function(){return!!e},fireWith:function(a,c){return e||(c=c||[],c=[a,c.slice?c.slice():c],g.push(c),b||i()),this},fire:function(){return j.fireWith(this,arguments),this},fired:function(){return!!d}};return j},n.extend({Deferred:function(a){var b=[["resolve","done",n.Callbacks("once memory"),"resolved"],["reject","fail",n.Callbacks("once memory"),"rejected"],["notify","progress",n.Callbacks("memory")]],c="pending",d={state:function(){return c},always:function(){return e.done(arguments).fail(arguments),this},then:function(){var a=arguments;return n.Deferred(function(c){n.each(b,function(b,f){var g=n.isFunction(a[b])&&a[b];e[f[1]](function(){var a=g&&g.apply(this,arguments);a&&n.isFunction(a.promise)?a.promise().progress(c.notify).done(c.resolve).fail(c.reject):c[f[0]+"With"](this===d?c.promise():this,g?[a]:arguments)})}),a=null}).promise()},promise:function(a){return null!=a?n.extend(a,d):d}},e={};return d.pipe=d.then,n.each(b,function(a,f){var g=f[2],h=f[3];d[f[1]]=g.add,h&&g.add(function(){c=h},b[1^a][2].disable,b[2][2].lock),e[f[0]]=function(){return e[f[0]+"With"](this===e?d:this,arguments),this},e[f[0]+"With"]=g.fireWith}),d.promise(e),a&&a.call(e,e),e},when:function(a){var b=0,c=e.call(arguments),d=c.length,f=1!==d||a&&n.isFunction(a.promise)?d:0,g=1===f?a:n.Deferred(),h=function(a,b,c){return function(d){b[a]=this,c[a]=arguments.length>1?e.call(arguments):d,c===i?g.notifyWith(b,c):--f||g.resolveWith(b,c)}},i,j,k;if(d>1)for(i=new Array(d),j=new Array(d),k=new Array(d);d>b;b++)c[b]&&n.isFunction(c[b].promise)?c[b].promise().progress(h(b,j,i)).done(h(b,k,c)).fail(g.reject):--f;return f||g.resolveWith(k,c),g.promise()}});var I;n.fn.ready=function(a){return n.ready.promise().done(a),this},n.extend({isReady:!1,readyWait:1,holdReady:function(a){a?n.readyWait++:n.ready(!0)},ready:function(a){(a===!0?--n.readyWait:n.isReady)||(n.isReady=!0,a!==!0&&--n.readyWait>0||(I.resolveWith(d,[n]),n.fn.triggerHandler&&(n(d).triggerHandler("ready"),n(d).off("ready"))))}});function J(){d.addEventListener?(d.removeEventListener("DOMContentLoaded",K),a.removeEventListener("load",K)):(d.detachEvent("onreadystatechange",K),a.detachEvent("onload",K))}function K(){(d.addEventListener||"load"===a.event.type||"complete"===d.readyState)&&(J(),n.ready())}n.ready.promise=function(b){if(!I)if(I=n.Deferred(),"complete"===d.readyState||"loading"!==d.readyState&&!d.documentElement.doScroll)a.setTimeout(n.ready);else if(d.addEventListener)d.addEventListener("DOMContentLoaded",K),a.addEventListener("load",K);else{d.attachEvent("onreadystatechange",K),a.attachEvent("onload",K);var c=!1;try{c=null==a.frameElement&&d.documentElement}catch(e){}c&&c.doScroll&&!function f(){if(!n.isReady){try{c.doScroll("left")}catch(b){return a.setTimeout(f,50)}J(),n.ready()}}()}return I.promise(b)},n.ready.promise();var L;for(L in n(l))break;l.ownFirst="0"===L,l.inlineBlockNeedsLayout=!1,n(function(){var a,b,c,e;c=d.getElementsByTagName("body")[0],c&&c.style&&(b=d.createElement("div"),e=d.createElement("div"),e.style.cssText="position:absolute;border:0;width:0;height:0;top:0;left:-9999px",c.appendChild(e).appendChild(b),"undefined"!=typeof b.style.zoom&&(b.style.cssText="display:inline;margin:0;border:0;padding:1px;width:1px;zoom:1",l.inlineBlockNeedsLayout=a=3===b.offsetWidth,a&&(c.style.zoom=1)),c.removeChild(e))}),function(){var a=d.createElement("div");l.deleteExpando=!0;try{delete a.test}catch(b){l.deleteExpando=!1}a=null}();var M=function(a){var b=n.noData[(a.nodeName+" ").toLowerCase()],c=+a.nodeType||1;return 1!==c&&9!==c?!1:!b||b!==!0&&a.getAttribute("classid")===b},N=/^(?:\{[\w\W]*\}|\[[\w\W]*\])$/,O=/([A-Z])/g;function P(a,b,c){if(void 0===c&&1===a.nodeType){var d="data-"+b.replace(O,"-$1").toLowerCase();if(c=a.getAttribute(d),"string"==typeof c){try{c="true"===c?!0:"false"===c?!1:"null"===c?null:+c+""===c?+c:N.test(c)?n.parseJSON(c):c}catch(e){}n.data(a,b,c)}else c=void 0;
-}return c}function Q(a){var b;for(b in a)if(("data"!==b||!n.isEmptyObject(a[b]))&&"toJSON"!==b)return!1;return!0}function R(a,b,d,e){if(M(a)){var f,g,h=n.expando,i=a.nodeType,j=i?n.cache:a,k=i?a[h]:a[h]&&h;if(k&&j[k]&&(e||j[k].data)||void 0!==d||"string"!=typeof b)return k||(k=i?a[h]=c.pop()||n.guid++:h),j[k]||(j[k]=i?{}:{toJSON:n.noop}),"object"!=typeof b&&"function"!=typeof b||(e?j[k]=n.extend(j[k],b):j[k].data=n.extend(j[k].data,b)),g=j[k],e||(g.data||(g.data={}),g=g.data),void 0!==d&&(g[n.camelCase(b)]=d),"string"==typeof b?(f=g[b],null==f&&(f=g[n.camelCase(b)])):f=g,f}}function S(a,b,c){if(M(a)){var d,e,f=a.nodeType,g=f?n.cache:a,h=f?a[n.expando]:n.expando;if(g[h]){if(b&&(d=c?g[h]:g[h].data)){n.isArray(b)?b=b.concat(n.map(b,n.camelCase)):b in d?b=[b]:(b=n.camelCase(b),b=b in d?[b]:b.split(" ")),e=b.length;while(e--)delete d[b[e]];if(c?!Q(d):!n.isEmptyObject(d))return}(c||(delete g[h].data,Q(g[h])))&&(f?n.cleanData([a],!0):l.deleteExpando||g!=g.window?delete g[h]:g[h]=void 0)}}}n.extend({cache:{},noData:{"applet ":!0,"embed ":!0,"object ":"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"},hasData:function(a){return a=a.nodeType?n.cache[a[n.expando]]:a[n.expando],!!a&&!Q(a)},data:function(a,b,c){return R(a,b,c)},removeData:function(a,b){return S(a,b)},_data:function(a,b,c){return R(a,b,c,!0)},_removeData:function(a,b){return S(a,b,!0)}}),n.fn.extend({data:function(a,b){var c,d,e,f=this[0],g=f&&f.attributes;if(void 0===a){if(this.length&&(e=n.data(f),1===f.nodeType&&!n._data(f,"parsedAttrs"))){c=g.length;while(c--)g[c]&&(d=g[c].name,0===d.indexOf("data-")&&(d=n.camelCase(d.slice(5)),P(f,d,e[d])));n._data(f,"parsedAttrs",!0)}return e}return"object"==typeof a?this.each(function(){n.data(this,a)}):arguments.length>1?this.each(function(){n.data(this,a,b)}):f?P(f,a,n.data(f,a)):void 0},removeData:function(a){return this.each(function(){n.removeData(this,a)})}}),n.extend({queue:function(a,b,c){var d;return a?(b=(b||"fx")+"queue",d=n._data(a,b),c&&(!d||n.isArray(c)?d=n._data(a,b,n.makeArray(c)):d.push(c)),d||[]):void 0},dequeue:function(a,b){b=b||"fx";var c=n.queue(a,b),d=c.length,e=c.shift(),f=n._queueHooks(a,b),g=function(){n.dequeue(a,b)};"inprogress"===e&&(e=c.shift(),d--),e&&("fx"===b&&c.unshift("inprogress"),delete f.stop,e.call(a,g,f)),!d&&f&&f.empty.fire()},_queueHooks:function(a,b){var c=b+"queueHooks";return n._data(a,c)||n._data(a,c,{empty:n.Callbacks("once memory").add(function(){n._removeData(a,b+"queue"),n._removeData(a,c)})})}}),n.fn.extend({queue:function(a,b){var c=2;return"string"!=typeof a&&(b=a,a="fx",c--),arguments.length<c?n.queue(this[0],a):void 0===b?this:this.each(function(){var c=n.queue(this,a,b);n._queueHooks(this,a),"fx"===a&&"inprogress"!==c[0]&&n.dequeue(this,a)})},dequeue:function(a){return this.each(function(){n.dequeue(this,a)})},clearQueue:function(a){return this.queue(a||"fx",[])},promise:function(a,b){var c,d=1,e=n.Deferred(),f=this,g=this.length,h=function(){--d||e.resolveWith(f,[f])};"string"!=typeof a&&(b=a,a=void 0),a=a||"fx";while(g--)c=n._data(f[g],a+"queueHooks"),c&&c.empty&&(d++,c.empty.add(h));return h(),e.promise(b)}}),function(){var a;l.shrinkWrapBlocks=function(){if(null!=a)return a;a=!1;var b,c,e;return c=d.getElementsByTagName("body")[0],c&&c.style?(b=d.createElement("div"),e=d.createElement("div"),e.style.cssText="position:absolute;border:0;width:0;height:0;top:0;left:-9999px",c.appendChild(e).appendChild(b),"undefined"!=typeof b.style.zoom&&(b.style.cssText="-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box;display:block;margin:0;border:0;padding:1px;width:1px;zoom:1",b.appendChild(d.createElement("div")).style.width="5px",a=3!==b.offsetWidth),c.removeChild(e),a):void 0}}();var T=/[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/.source,U=new RegExp("^(?:([+-])=|)("+T+")([a-z%]*)$","i"),V=["Top","Right","Bottom","Left"],W=function(a,b){return a=b||a,"none"===n.css(a,"display")||!n.contains(a.ownerDocument,a)};function X(a,b,c,d){var e,f=1,g=20,h=d?function(){return d.cur()}:function(){return n.css(a,b,"")},i=h(),j=c&&c[3]||(n.cssNumber[b]?"":"px"),k=(n.cssNumber[b]||"px"!==j&&+i)&&U.exec(n.css(a,b));if(k&&k[3]!==j){j=j||k[3],c=c||[],k=+i||1;do f=f||".5",k/=f,n.style(a,b,k+j);while(f!==(f=h()/i)&&1!==f&&--g)}return c&&(k=+k||+i||0,e=c[1]?k+(c[1]+1)*c[2]:+c[2],d&&(d.unit=j,d.start=k,d.end=e)),e}var Y=function(a,b,c,d,e,f,g){var h=0,i=a.length,j=null==c;if("object"===n.type(c)){e=!0;for(h in c)Y(a,b,h,c[h],!0,f,g)}else if(void 0!==d&&(e=!0,n.isFunction(d)||(g=!0),j&&(g?(b.call(a,d),b=null):(j=b,b=function(a,b,c){return j.call(n(a),c)})),b))for(;i>h;h++)b(a[h],c,g?d:d.call(a[h],h,b(a[h],c)));return e?a:j?b.call(a):i?b(a[0],c):f},Z=/^(?:checkbox|radio)$/i,$=/<([\w:-]+)/,_=/^$|\/(?:java|ecma)script/i,aa=/^\s+/,ba="abbr|article|aside|audio|bdi|canvas|data|datalist|details|dialog|figcaption|figure|footer|header|hgroup|main|mark|meter|nav|output|picture|progress|section|summary|template|time|video";function ca(a){var b=ba.split("|"),c=a.createDocumentFragment();if(c.createElement)while(b.length)c.createElement(b.pop());return c}!function(){var a=d.createElement("div"),b=d.createDocumentFragment(),c=d.createElement("input");a.innerHTML="  <link/><table></table><a href='/a'>a</a><input type='checkbox'/>",l.leadingWhitespace=3===a.firstChild.nodeType,l.tbody=!a.getElementsByTagName("tbody").length,l.htmlSerialize=!!a.getElementsByTagName("link").length,l.html5Clone="<:nav></:nav>"!==d.createElement("nav").cloneNode(!0).outerHTML,c.type="checkbox",c.checked=!0,b.appendChild(c),l.appendChecked=c.checked,a.innerHTML="<textarea>x</textarea>",l.noCloneChecked=!!a.cloneNode(!0).lastChild.defaultValue,b.appendChild(a),c=d.createElement("input"),c.setAttribute("type","radio"),c.setAttribute("checked","checked"),c.setAttribute("name","t"),a.appendChild(c),l.checkClone=a.cloneNode(!0).cloneNode(!0).lastChild.checked,l.noCloneEvent=!!a.addEventListener,a[n.expando]=1,l.attributes=!a.getAttribute(n.expando)}();var da={option:[1,"<select multiple='multiple'>","</select>"],legend:[1,"<fieldset>","</fieldset>"],area:[1,"<map>","</map>"],param:[1,"<object>","</object>"],thead:[1,"<table>","</table>"],tr:[2,"<table><tbody>","</tbody></table>"],col:[2,"<table><tbody></tbody><colgroup>","</colgroup></table>"],td:[3,"<table><tbody><tr>","</tr></tbody></table>"],_default:l.htmlSerialize?[0,"",""]:[1,"X<div>","</div>"]};da.optgroup=da.option,da.tbody=da.tfoot=da.colgroup=da.caption=da.thead,da.th=da.td;function ea(a,b){var c,d,e=0,f="undefined"!=typeof a.getElementsByTagName?a.getElementsByTagName(b||"*"):"undefined"!=typeof a.querySelectorAll?a.querySelectorAll(b||"*"):void 0;if(!f)for(f=[],c=a.childNodes||a;null!=(d=c[e]);e++)!b||n.nodeName(d,b)?f.push(d):n.merge(f,ea(d,b));return void 0===b||b&&n.nodeName(a,b)?n.merge([a],f):f}function fa(a,b){for(var c,d=0;null!=(c=a[d]);d++)n._data(c,"globalEval",!b||n._data(b[d],"globalEval"))}var ga=/<|&#?\w+;/,ha=/<tbody/i;function ia(a){Z.test(a.type)&&(a.defaultChecked=a.checked)}function ja(a,b,c,d,e){for(var f,g,h,i,j,k,m,o=a.length,p=ca(b),q=[],r=0;o>r;r++)if(g=a[r],g||0===g)if("object"===n.type(g))n.merge(q,g.nodeType?[g]:g);else if(ga.test(g)){i=i||p.appendChild(b.createElement("div")),j=($.exec(g)||["",""])[1].toLowerCase(),m=da[j]||da._default,i.innerHTML=m[1]+n.htmlPrefilter(g)+m[2],f=m[0];while(f--)i=i.lastChild;if(!l.leadingWhitespace&&aa.test(g)&&q.push(b.createTextNode(aa.exec(g)[0])),!l.tbody){g="table"!==j||ha.test(g)?"<table>"!==m[1]||ha.test(g)?0:i:i.firstChild,f=g&&g.childNodes.length;while(f--)n.nodeName(k=g.childNodes[f],"tbody")&&!k.childNodes.length&&g.removeChild(k)}n.merge(q,i.childNodes),i.textContent="";while(i.firstChild)i.removeChild(i.firstChild);i=p.lastChild}else q.push(b.createTextNode(g));i&&p.removeChild(i),l.appendChecked||n.grep(ea(q,"input"),ia),r=0;while(g=q[r++])if(d&&n.inArray(g,d)>-1)e&&e.push(g);else if(h=n.contains(g.ownerDocument,g),i=ea(p.appendChild(g),"script"),h&&fa(i),c){f=0;while(g=i[f++])_.test(g.type||"")&&c.push(g)}return i=null,p}!function(){var b,c,e=d.createElement("div");for(b in{submit:!0,change:!0,focusin:!0})c="on"+b,(l[b]=c in a)||(e.setAttribute(c,"t"),l[b]=e.attributes[c].expando===!1);e=null}();var ka=/^(?:input|select|textarea)$/i,la=/^key/,ma=/^(?:mouse|pointer|contextmenu|drag|drop)|click/,na=/^(?:focusinfocus|focusoutblur)$/,oa=/^([^.]*)(?:\.(.+)|)/;function pa(){return!0}function qa(){return!1}function ra(){try{return d.activeElement}catch(a){}}function sa(a,b,c,d,e,f){var g,h;if("object"==typeof b){"string"!=typeof c&&(d=d||c,c=void 0);for(h in b)sa(a,h,c,d,b[h],f);return a}if(null==d&&null==e?(e=c,d=c=void 0):null==e&&("string"==typeof c?(e=d,d=void 0):(e=d,d=c,c=void 0)),e===!1)e=qa;else if(!e)return a;return 1===f&&(g=e,e=function(a){return n().off(a),g.apply(this,arguments)},e.guid=g.guid||(g.guid=n.guid++)),a.each(function(){n.event.add(this,b,e,d,c)})}n.event={global:{},add:function(a,b,c,d,e){var f,g,h,i,j,k,l,m,o,p,q,r=n._data(a);if(r){c.handler&&(i=c,c=i.handler,e=i.selector),c.guid||(c.guid=n.guid++),(g=r.events)||(g=r.events={}),(k=r.handle)||(k=r.handle=function(a){return"undefined"==typeof n||a&&n.event.triggered===a.type?void 0:n.event.dispatch.apply(k.elem,arguments)},k.elem=a),b=(b||"").match(G)||[""],h=b.length;while(h--)f=oa.exec(b[h])||[],o=q=f[1],p=(f[2]||"").split(".").sort(),o&&(j=n.event.special[o]||{},o=(e?j.delegateType:j.bindType)||o,j=n.event.special[o]||{},l=n.extend({type:o,origType:q,data:d,handler:c,guid:c.guid,selector:e,needsContext:e&&n.expr.match.needsContext.test(e),namespace:p.join(".")},i),(m=g[o])||(m=g[o]=[],m.delegateCount=0,j.setup&&j.setup.call(a,d,p,k)!==!1||(a.addEventListener?a.addEventListener(o,k,!1):a.attachEvent&&a.attachEvent("on"+o,k))),j.add&&(j.add.call(a,l),l.handler.guid||(l.handler.guid=c.guid)),e?m.splice(m.delegateCount++,0,l):m.push(l),n.event.global[o]=!0);a=null}},remove:function(a,b,c,d,e){var f,g,h,i,j,k,l,m,o,p,q,r=n.hasData(a)&&n._data(a);if(r&&(k=r.events)){b=(b||"").match(G)||[""],j=b.length;while(j--)if(h=oa.exec(b[j])||[],o=q=h[1],p=(h[2]||"").split(".").sort(),o){l=n.event.special[o]||{},o=(d?l.delegateType:l.bindType)||o,m=k[o]||[],h=h[2]&&new RegExp("(^|\\.)"+p.join("\\.(?:.*\\.|)")+"(\\.|$)"),i=f=m.length;while(f--)g=m[f],!e&&q!==g.origType||c&&c.guid!==g.guid||h&&!h.test(g.namespace)||d&&d!==g.selector&&("**"!==d||!g.selector)||(m.splice(f,1),g.selector&&m.delegateCount--,l.remove&&l.remove.call(a,g));i&&!m.length&&(l.teardown&&l.teardown.call(a,p,r.handle)!==!1||n.removeEvent(a,o,r.handle),delete k[o])}else for(o in k)n.event.remove(a,o+b[j],c,d,!0);n.isEmptyObject(k)&&(delete r.handle,n._removeData(a,"events"))}},trigger:function(b,c,e,f){var g,h,i,j,l,m,o,p=[e||d],q=k.call(b,"type")?b.type:b,r=k.call(b,"namespace")?b.namespace.split("."):[];if(i=m=e=e||d,3!==e.nodeType&&8!==e.nodeType&&!na.test(q+n.event.triggered)&&(q.indexOf(".")>-1&&(r=q.split("."),q=r.shift(),r.sort()),h=q.indexOf(":")<0&&"on"+q,b=b[n.expando]?b:new n.Event(q,"object"==typeof b&&b),b.isTrigger=f?2:3,b.namespace=r.join("."),b.rnamespace=b.namespace?new RegExp("(^|\\.)"+r.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,b.result=void 0,b.target||(b.target=e),c=null==c?[b]:n.makeArray(c,[b]),l=n.event.special[q]||{},f||!l.trigger||l.trigger.apply(e,c)!==!1)){if(!f&&!l.noBubble&&!n.isWindow(e)){for(j=l.delegateType||q,na.test(j+q)||(i=i.parentNode);i;i=i.parentNode)p.push(i),m=i;m===(e.ownerDocument||d)&&p.push(m.defaultView||m.parentWindow||a)}o=0;while((i=p[o++])&&!b.isPropagationStopped())b.type=o>1?j:l.bindType||q,g=(n._data(i,"events")||{})[b.type]&&n._data(i,"handle"),g&&g.apply(i,c),g=h&&i[h],g&&g.apply&&M(i)&&(b.result=g.apply(i,c),b.result===!1&&b.preventDefault());if(b.type=q,!f&&!b.isDefaultPrevented()&&(!l._default||l._default.apply(p.pop(),c)===!1)&&M(e)&&h&&e[q]&&!n.isWindow(e)){m=e[h],m&&(e[h]=null),n.event.triggered=q;try{e[q]()}catch(s){}n.event.triggered=void 0,m&&(e[h]=m)}return b.result}},dispatch:function(a){a=n.event.fix(a);var b,c,d,f,g,h=[],i=e.call(arguments),j=(n._data(this,"events")||{})[a.type]||[],k=n.event.special[a.type]||{};if(i[0]=a,a.delegateTarget=this,!k.preDispatch||k.preDispatch.call(this,a)!==!1){h=n.event.handlers.call(this,a,j),b=0;while((f=h[b++])&&!a.isPropagationStopped()){a.currentTarget=f.elem,c=0;while((g=f.handlers[c++])&&!a.isImmediatePropagationStopped())a.rnamespace&&!a.rnamespace.test(g.namespace)||(a.handleObj=g,a.data=g.data,d=((n.event.special[g.origType]||{}).handle||g.handler).apply(f.elem,i),void 0!==d&&(a.result=d)===!1&&(a.preventDefault(),a.stopPropagation()))}return k.postDispatch&&k.postDispatch.call(this,a),a.result}},handlers:function(a,b){var c,d,e,f,g=[],h=b.delegateCount,i=a.target;if(h&&i.nodeType&&("click"!==a.type||isNaN(a.button)||a.button<1))for(;i!=this;i=i.parentNode||this)if(1===i.nodeType&&(i.disabled!==!0||"click"!==a.type)){for(d=[],c=0;h>c;c++)f=b[c],e=f.selector+" ",void 0===d[e]&&(d[e]=f.needsContext?n(e,this).index(i)>-1:n.find(e,this,null,[i]).length),d[e]&&d.push(f);d.length&&g.push({elem:i,handlers:d})}return h<b.length&&g.push({elem:this,handlers:b.slice(h)}),g},fix:function(a){if(a[n.expando])return a;var b,c,e,f=a.type,g=a,h=this.fixHooks[f];h||(this.fixHooks[f]=h=ma.test(f)?this.mouseHooks:la.test(f)?this.keyHooks:{}),e=h.props?this.props.concat(h.props):this.props,a=new n.Event(g),b=e.length;while(b--)c=e[b],a[c]=g[c];return a.target||(a.target=g.srcElement||d),3===a.target.nodeType&&(a.target=a.target.parentNode),a.metaKey=!!a.metaKey,h.filter?h.filter(a,g):a},props:"altKey bubbles cancelable ctrlKey currentTarget detail eventPhase metaKey relatedTarget shiftKey target timeStamp view which".split(" "),fixHooks:{},keyHooks:{props:"char charCode key keyCode".split(" "),filter:function(a,b){return null==a.which&&(a.which=null!=b.charCode?b.charCode:b.keyCode),a}},mouseHooks:{props:"button buttons clientX clientY fromElement offsetX offsetY pageX pageY screenX screenY toElement".split(" "),filter:function(a,b){var c,e,f,g=b.button,h=b.fromElement;return null==a.pageX&&null!=b.clientX&&(e=a.target.ownerDocument||d,f=e.documentElement,c=e.body,a.pageX=b.clientX+(f&&f.scrollLeft||c&&c.scrollLeft||0)-(f&&f.clientLeft||c&&c.clientLeft||0),a.pageY=b.clientY+(f&&f.scrollTop||c&&c.scrollTop||0)-(f&&f.clientTop||c&&c.clientTop||0)),!a.relatedTarget&&h&&(a.relatedTarget=h===a.target?b.toElement:h),a.which||void 0===g||(a.which=1&g?1:2&g?3:4&g?2:0),a}},special:{load:{noBubble:!0},focus:{trigger:function(){if(this!==ra()&&this.focus)try{return this.focus(),!1}catch(a){}},delegateType:"focusin"},blur:{trigger:function(){return this===ra()&&this.blur?(this.blur(),!1):void 0},delegateType:"focusout"},click:{trigger:function(){return n.nodeName(this,"input")&&"checkbox"===this.type&&this.click?(this.click(),!1):void 0},_default:function(a){return n.nodeName(a.target,"a")}},beforeunload:{postDispatch:function(a){void 0!==a.result&&a.originalEvent&&(a.originalEvent.returnValue=a.result)}}},simulate:function(a,b,c){var d=n.extend(new n.Event,c,{type:a,isSimulated:!0});n.event.trigger(d,null,b),d.isDefaultPrevented()&&c.preventDefault()}},n.removeEvent=d.removeEventListener?function(a,b,c){a.removeEventListener&&a.removeEventListener(b,c)}:function(a,b,c){var d="on"+b;a.detachEvent&&("undefined"==typeof a[d]&&(a[d]=null),a.detachEvent(d,c))},n.Event=function(a,b){return this instanceof n.Event?(a&&a.type?(this.originalEvent=a,this.type=a.type,this.isDefaultPrevented=a.defaultPrevented||void 0===a.defaultPrevented&&a.returnValue===!1?pa:qa):this.type=a,b&&n.extend(this,b),this.timeStamp=a&&a.timeStamp||n.now(),void(this[n.expando]=!0)):new n.Event(a,b)},n.Event.prototype={constructor:n.Event,isDefaultPrevented:qa,isPropagationStopped:qa,isImmediatePropagationStopped:qa,preventDefault:function(){var a=this.originalEvent;this.isDefaultPrevented=pa,a&&(a.preventDefault?a.preventDefault():a.returnValue=!1)},stopPropagation:function(){var a=this.originalEvent;this.isPropagationStopped=pa,a&&!this.isSimulated&&(a.stopPropagation&&a.stopPropagation(),a.cancelBubble=!0)},stopImmediatePropagation:function(){var a=this.originalEvent;this.isImmediatePropagationStopped=pa,a&&a.stopImmediatePropagation&&a.stopImmediatePropagation(),this.stopPropagation()}},n.each({mouseenter:"mouseover",mouseleave:"mouseout",pointerenter:"pointerover",pointerleave:"pointerout"},function(a,b){n.event.special[a]={delegateType:b,bindType:b,handle:function(a){var c,d=this,e=a.relatedTarget,f=a.handleObj;return e&&(e===d||n.contains(d,e))||(a.type=f.origType,c=f.handler.apply(this,arguments),a.type=b),c}}}),l.submit||(n.event.special.submit={setup:function(){return n.nodeName(this,"form")?!1:void n.event.add(this,"click._submit keypress._submit",function(a){var b=a.target,c=n.nodeName(b,"input")||n.nodeName(b,"button")?n.prop(b,"form"):void 0;c&&!n._data(c,"submit")&&(n.event.add(c,"submit._submit",function(a){a._submitBubble=!0}),n._data(c,"submit",!0))})},postDispatch:function(a){a._submitBubble&&(delete a._submitBubble,this.parentNode&&!a.isTrigger&&n.event.simulate("submit",this.parentNode,a))},teardown:function(){return n.nodeName(this,"form")?!1:void n.event.remove(this,"._submit")}}),l.change||(n.event.special.change={setup:function(){return ka.test(this.nodeName)?("checkbox"!==this.type&&"radio"!==this.type||(n.event.add(this,"propertychange._change",function(a){"checked"===a.originalEvent.propertyName&&(this._justChanged=!0)}),n.event.add(this,"click._change",function(a){this._justChanged&&!a.isTrigger&&(this._justChanged=!1),n.event.simulate("change",this,a)})),!1):void n.event.add(this,"beforeactivate._change",function(a){var b=a.target;ka.test(b.nodeName)&&!n._data(b,"change")&&(n.event.add(b,"change._change",function(a){!this.parentNode||a.isSimulated||a.isTrigger||n.event.simulate("change",this.parentNode,a)}),n._data(b,"change",!0))})},handle:function(a){var b=a.target;return this!==b||a.isSimulated||a.isTrigger||"radio"!==b.type&&"checkbox"!==b.type?a.handleObj.handler.apply(this,arguments):void 0},teardown:function(){return n.event.remove(this,"._change"),!ka.test(this.nodeName)}}),l.focusin||n.each({focus:"focusin",blur:"focusout"},function(a,b){var c=function(a){n.event.simulate(b,a.target,n.event.fix(a))};n.event.special[b]={setup:function(){var d=this.ownerDocument||this,e=n._data(d,b);e||d.addEventListener(a,c,!0),n._data(d,b,(e||0)+1)},teardown:function(){var d=this.ownerDocument||this,e=n._data(d,b)-1;e?n._data(d,b,e):(d.removeEventListener(a,c,!0),n._removeData(d,b))}}}),n.fn.extend({on:function(a,b,c,d){return sa(this,a,b,c,d)},one:function(a,b,c,d){return sa(this,a,b,c,d,1)},off:function(a,b,c){var d,e;if(a&&a.preventDefault&&a.handleObj)return d=a.handleObj,n(a.delegateTarget).off(d.namespace?d.origType+"."+d.namespace:d.origType,d.selector,d.handler),this;if("object"==typeof a){for(e in a)this.off(e,b,a[e]);return this}return b!==!1&&"function"!=typeof b||(c=b,b=void 0),c===!1&&(c=qa),this.each(function(){n.event.remove(this,a,c,b)})},trigger:function(a,b){return this.each(function(){n.event.trigger(a,b,this)})},triggerHandler:function(a,b){var c=this[0];return c?n.event.trigger(a,b,c,!0):void 0}});var ta=/ jQuery\d+="(?:null|\d+)"/g,ua=new RegExp("<(?:"+ba+")[\\s/>]","i"),va=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:-]+)[^>]*)\/>/gi,wa=/<script|<style|<link/i,xa=/checked\s*(?:[^=]|=\s*.checked.)/i,ya=/^true\/(.*)/,za=/^\s*<!(?:\[CDATA\[|--)|(?:\]\]|--)>\s*$/g,Aa=ca(d),Ba=Aa.appendChild(d.createElement("div"));function Ca(a,b){return n.nodeName(a,"table")&&n.nodeName(11!==b.nodeType?b:b.firstChild,"tr")?a.getElementsByTagName("tbody")[0]||a.appendChild(a.ownerDocument.createElement("tbody")):a}function Da(a){return a.type=(null!==n.find.attr(a,"type"))+"/"+a.type,a}function Ea(a){var b=ya.exec(a.type);return b?a.type=b[1]:a.removeAttribute("type"),a}function Fa(a,b){if(1===b.nodeType&&n.hasData(a)){var c,d,e,f=n._data(a),g=n._data(b,f),h=f.events;if(h){delete g.handle,g.events={};for(c in h)for(d=0,e=h[c].length;e>d;d++)n.event.add(b,c,h[c][d])}g.data&&(g.data=n.extend({},g.data))}}function Ga(a,b){var c,d,e;if(1===b.nodeType){if(c=b.nodeName.toLowerCase(),!l.noCloneEvent&&b[n.expando]){e=n._data(b);for(d in e.events)n.removeEvent(b,d,e.handle);b.removeAttribute(n.expando)}"script"===c&&b.text!==a.text?(Da(b).text=a.text,Ea(b)):"object"===c?(b.parentNode&&(b.outerHTML=a.outerHTML),l.html5Clone&&a.innerHTML&&!n.trim(b.innerHTML)&&(b.innerHTML=a.innerHTML)):"input"===c&&Z.test(a.type)?(b.defaultChecked=b.checked=a.checked,b.value!==a.value&&(b.value=a.value)):"option"===c?b.defaultSelected=b.selected=a.defaultSelected:"input"!==c&&"textarea"!==c||(b.defaultValue=a.defaultValue)}}function Ha(a,b,c,d){b=f.apply([],b);var e,g,h,i,j,k,m=0,o=a.length,p=o-1,q=b[0],r=n.isFunction(q);if(r||o>1&&"string"==typeof q&&!l.checkClone&&xa.test(q))return a.each(function(e){var f=a.eq(e);r&&(b[0]=q.call(this,e,f.html())),Ha(f,b,c,d)});if(o&&(k=ja(b,a[0].ownerDocument,!1,a,d),e=k.firstChild,1===k.childNodes.length&&(k=e),e||d)){for(i=n.map(ea(k,"script"),Da),h=i.length;o>m;m++)g=k,m!==p&&(g=n.clone(g,!0,!0),h&&n.merge(i,ea(g,"script"))),c.call(a[m],g,m);if(h)for(j=i[i.length-1].ownerDocument,n.map(i,Ea),m=0;h>m;m++)g=i[m],_.test(g.type||"")&&!n._data(g,"globalEval")&&n.contains(j,g)&&(g.src?n._evalUrl&&n._evalUrl(g.src):n.globalEval((g.text||g.textContent||g.innerHTML||"").replace(za,"")));k=e=null}return a}function Ia(a,b,c){for(var d,e=b?n.filter(b,a):a,f=0;null!=(d=e[f]);f++)c||1!==d.nodeType||n.cleanData(ea(d)),d.parentNode&&(c&&n.contains(d.ownerDocument,d)&&fa(ea(d,"script")),d.parentNode.removeChild(d));return a}n.extend({htmlPrefilter:function(a){return a.replace(va,"<$1></$2>")},clone:function(a,b,c){var d,e,f,g,h,i=n.contains(a.ownerDocument,a);if(l.html5Clone||n.isXMLDoc(a)||!ua.test("<"+a.nodeName+">")?f=a.cloneNode(!0):(Ba.innerHTML=a.outerHTML,Ba.removeChild(f=Ba.firstChild)),!(l.noCloneEvent&&l.noCloneChecked||1!==a.nodeType&&11!==a.nodeType||n.isXMLDoc(a)))for(d=ea(f),h=ea(a),g=0;null!=(e=h[g]);++g)d[g]&&Ga(e,d[g]);if(b)if(c)for(h=h||ea(a),d=d||ea(f),g=0;null!=(e=h[g]);g++)Fa(e,d[g]);else Fa(a,f);return d=ea(f,"script"),d.length>0&&fa(d,!i&&ea(a,"script")),d=h=e=null,f},cleanData:function(a,b){for(var d,e,f,g,h=0,i=n.expando,j=n.cache,k=l.attributes,m=n.event.special;null!=(d=a[h]);h++)if((b||M(d))&&(f=d[i],g=f&&j[f])){if(g.events)for(e in g.events)m[e]?n.event.remove(d,e):n.removeEvent(d,e,g.handle);j[f]&&(delete j[f],k||"undefined"==typeof d.removeAttribute?d[i]=void 0:d.removeAttribute(i),c.push(f))}}}),n.fn.extend({domManip:Ha,detach:function(a){return Ia(this,a,!0)},remove:function(a){return Ia(this,a)},text:function(a){return Y(this,function(a){return void 0===a?n.text(this):this.empty().append((this[0]&&this[0].ownerDocument||d).createTextNode(a))},null,a,arguments.length)},append:function(){return Ha(this,arguments,function(a){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var b=Ca(this,a);b.appendChild(a)}})},prepend:function(){return Ha(this,arguments,function(a){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var b=Ca(this,a);b.insertBefore(a,b.firstChild)}})},before:function(){return Ha(this,arguments,function(a){this.parentNode&&this.parentNode.insertBefore(a,this)})},after:function(){return Ha(this,arguments,function(a){this.parentNode&&this.parentNode.insertBefore(a,this.nextSibling)})},empty:function(){for(var a,b=0;null!=(a=this[b]);b++){1===a.nodeType&&n.cleanData(ea(a,!1));while(a.firstChild)a.removeChild(a.firstChild);a.options&&n.nodeName(a,"select")&&(a.options.length=0)}return this},clone:function(a,b){return a=null==a?!1:a,b=null==b?a:b,this.map(function(){return n.clone(this,a,b)})},html:function(a){return Y(this,function(a){var b=this[0]||{},c=0,d=this.length;if(void 0===a)return 1===b.nodeType?b.innerHTML.replace(ta,""):void 0;if("string"==typeof a&&!wa.test(a)&&(l.htmlSerialize||!ua.test(a))&&(l.leadingWhitespace||!aa.test(a))&&!da[($.exec(a)||["",""])[1].toLowerCase()]){a=n.htmlPrefilter(a);try{for(;d>c;c++)b=this[c]||{},1===b.nodeType&&(n.cleanData(ea(b,!1)),b.innerHTML=a);b=0}catch(e){}}b&&this.empty().append(a)},null,a,arguments.length)},replaceWith:function(){var a=[];return Ha(this,arguments,function(b){var c=this.parentNode;n.inArray(this,a)<0&&(n.cleanData(ea(this)),c&&c.replaceChild(b,this))},a)}}),n.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(a,b){n.fn[a]=function(a){for(var c,d=0,e=[],f=n(a),h=f.length-1;h>=d;d++)c=d===h?this:this.clone(!0),n(f[d])[b](c),g.apply(e,c.get());return this.pushStack(e)}});var Ja,Ka={HTML:"block",BODY:"block"};function La(a,b){var c=n(b.createElement(a)).appendTo(b.body),d=n.css(c[0],"display");return c.detach(),d}function Ma(a){var b=d,c=Ka[a];return c||(c=La(a,b),"none"!==c&&c||(Ja=(Ja||n("<iframe frameborder='0' width='0' height='0'/>")).appendTo(b.documentElement),b=(Ja[0].contentWindow||Ja[0].contentDocument).document,b.write(),b.close(),c=La(a,b),Ja.detach()),Ka[a]=c),c}var Na=/^margin/,Oa=new RegExp("^("+T+")(?!px)[a-z%]+$","i"),Pa=function(a,b,c,d){var e,f,g={};for(f in b)g[f]=a.style[f],a.style[f]=b[f];e=c.apply(a,d||[]);for(f in b)a.style[f]=g[f];return e},Qa=d.documentElement;!function(){var b,c,e,f,g,h,i=d.createElement("div"),j=d.createElement("div");if(j.style){j.style.cssText="float:left;opacity:.5",l.opacity="0.5"===j.style.opacity,l.cssFloat=!!j.style.cssFloat,j.style.backgroundClip="content-box",j.cloneNode(!0).style.backgroundClip="",l.clearCloneStyle="content-box"===j.style.backgroundClip,i=d.createElement("div"),i.style.cssText="border:0;width:8px;height:0;top:0;left:-9999px;padding:0;margin-top:1px;position:absolute",j.innerHTML="",i.appendChild(j),l.boxSizing=""===j.style.boxSizing||""===j.style.MozBoxSizing||""===j.style.WebkitBoxSizing,n.extend(l,{reliableHiddenOffsets:function(){return null==b&&k(),f},boxSizingReliable:function(){return null==b&&k(),e},pixelMarginRight:function(){return null==b&&k(),c},pixelPosition:function(){return null==b&&k(),b},reliableMarginRight:function(){return null==b&&k(),g},reliableMarginLeft:function(){return null==b&&k(),h}});function k(){var k,l,m=d.documentElement;m.appendChild(i),j.style.cssText="-webkit-box-sizing:border-box;box-sizing:border-box;position:relative;display:block;margin:auto;border:1px;padding:1px;top:1%;width:50%",b=e=h=!1,c=g=!0,a.getComputedStyle&&(l=a.getComputedStyle(j),b="1%"!==(l||{}).top,h="2px"===(l||{}).marginLeft,e="4px"===(l||{width:"4px"}).width,j.style.marginRight="50%",c="4px"===(l||{marginRight:"4px"}).marginRight,k=j.appendChild(d.createElement("div")),k.style.cssText=j.style.cssText="-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box;display:block;margin:0;border:0;padding:0",k.style.marginRight=k.style.width="0",j.style.width="1px",g=!parseFloat((a.getComputedStyle(k)||{}).marginRight),j.removeChild(k)),j.style.display="none",f=0===j.getClientRects().length,f&&(j.style.display="",j.innerHTML="<table><tr><td></td><td>t</td></tr></table>",j.childNodes[0].style.borderCollapse="separate",k=j.getElementsByTagName("td"),k[0].style.cssText="margin:0;border:0;padding:0;display:none",f=0===k[0].offsetHeight,f&&(k[0].style.display="",k[1].style.display="none",f=0===k[0].offsetHeight)),m.removeChild(i)}}}();var Ra,Sa,Ta=/^(top|right|bottom|left)$/;a.getComputedStyle?(Ra=function(b){var c=b.ownerDocument.defaultView;return c&&c.opener||(c=a),c.getComputedStyle(b)},Sa=function(a,b,c){var d,e,f,g,h=a.style;return c=c||Ra(a),g=c?c.getPropertyValue(b)||c[b]:void 0,""!==g&&void 0!==g||n.contains(a.ownerDocument,a)||(g=n.style(a,b)),c&&!l.pixelMarginRight()&&Oa.test(g)&&Na.test(b)&&(d=h.width,e=h.minWidth,f=h.maxWidth,h.minWidth=h.maxWidth=h.width=g,g=c.width,h.width=d,h.minWidth=e,h.maxWidth=f),void 0===g?g:g+""}):Qa.currentStyle&&(Ra=function(a){return a.currentStyle},Sa=function(a,b,c){var d,e,f,g,h=a.style;return c=c||Ra(a),g=c?c[b]:void 0,null==g&&h&&h[b]&&(g=h[b]),Oa.test(g)&&!Ta.test(b)&&(d=h.left,e=a.runtimeStyle,f=e&&e.left,f&&(e.left=a.currentStyle.left),h.left="fontSize"===b?"1em":g,g=h.pixelLeft+"px",h.left=d,f&&(e.left=f)),void 0===g?g:g+""||"auto"});function Ua(a,b){return{get:function(){return a()?void delete this.get:(this.get=b).apply(this,arguments)}}}var Va=/alpha\([^)]*\)/i,Wa=/opacity\s*=\s*([^)]*)/i,Xa=/^(none|table(?!-c[ea]).+)/,Ya=new RegExp("^("+T+")(.*)$","i"),Za={position:"absolute",visibility:"hidden",display:"block"},$a={letterSpacing:"0",fontWeight:"400"},_a=["Webkit","O","Moz","ms"],ab=d.createElement("div").style;function bb(a){if(a in ab)return a;var b=a.charAt(0).toUpperCase()+a.slice(1),c=_a.length;while(c--)if(a=_a[c]+b,a in ab)return a}function cb(a,b){for(var c,d,e,f=[],g=0,h=a.length;h>g;g++)d=a[g],d.style&&(f[g]=n._data(d,"olddisplay"),c=d.style.display,b?(f[g]||"none"!==c||(d.style.display=""),""===d.style.display&&W(d)&&(f[g]=n._data(d,"olddisplay",Ma(d.nodeName)))):(e=W(d),(c&&"none"!==c||!e)&&n._data(d,"olddisplay",e?c:n.css(d,"display"))));for(g=0;h>g;g++)d=a[g],d.style&&(b&&"none"!==d.style.display&&""!==d.style.display||(d.style.display=b?f[g]||"":"none"));return a}function db(a,b,c){var d=Ya.exec(b);return d?Math.max(0,d[1]-(c||0))+(d[2]||"px"):b}function eb(a,b,c,d,e){for(var f=c===(d?"border":"content")?4:"width"===b?1:0,g=0;4>f;f+=2)"margin"===c&&(g+=n.css(a,c+V[f],!0,e)),d?("content"===c&&(g-=n.css(a,"padding"+V[f],!0,e)),"margin"!==c&&(g-=n.css(a,"border"+V[f]+"Width",!0,e))):(g+=n.css(a,"padding"+V[f],!0,e),"padding"!==c&&(g+=n.css(a,"border"+V[f]+"Width",!0,e)));return g}function fb(a,b,c){var d=!0,e="width"===b?a.offsetWidth:a.offsetHeight,f=Ra(a),g=l.boxSizing&&"border-box"===n.css(a,"boxSizing",!1,f);if(0>=e||null==e){if(e=Sa(a,b,f),(0>e||null==e)&&(e=a.style[b]),Oa.test(e))return e;d=g&&(l.boxSizingReliable()||e===a.style[b]),e=parseFloat(e)||0}return e+eb(a,b,c||(g?"border":"content"),d,f)+"px"}n.extend({cssHooks:{opacity:{get:function(a,b){if(b){var c=Sa(a,"opacity");return""===c?"1":c}}}},cssNumber:{animationIterationCount:!0,columnCount:!0,fillOpacity:!0,flexGrow:!0,flexShrink:!0,fontWeight:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,widows:!0,zIndex:!0,zoom:!0},cssProps:{"float":l.cssFloat?"cssFloat":"styleFloat"},style:function(a,b,c,d){if(a&&3!==a.nodeType&&8!==a.nodeType&&a.style){var e,f,g,h=n.camelCase(b),i=a.style;if(b=n.cssProps[h]||(n.cssProps[h]=bb(h)||h),g=n.cssHooks[b]||n.cssHooks[h],void 0===c)return g&&"get"in g&&void 0!==(e=g.get(a,!1,d))?e:i[b];if(f=typeof c,"string"===f&&(e=U.exec(c))&&e[1]&&(c=X(a,b,e),f="number"),null!=c&&c===c&&("number"===f&&(c+=e&&e[3]||(n.cssNumber[h]?"":"px")),l.clearCloneStyle||""!==c||0!==b.indexOf("background")||(i[b]="inherit"),!(g&&"set"in g&&void 0===(c=g.set(a,c,d)))))try{i[b]=c}catch(j){}}},css:function(a,b,c,d){var e,f,g,h=n.camelCase(b);return b=n.cssProps[h]||(n.cssProps[h]=bb(h)||h),g=n.cssHooks[b]||n.cssHooks[h],g&&"get"in g&&(f=g.get(a,!0,c)),void 0===f&&(f=Sa(a,b,d)),"normal"===f&&b in $a&&(f=$a[b]),""===c||c?(e=parseFloat(f),c===!0||isFinite(e)?e||0:f):f}}),n.each(["height","width"],function(a,b){n.cssHooks[b]={get:function(a,c,d){return c?Xa.test(n.css(a,"display"))&&0===a.offsetWidth?Pa(a,Za,function(){return fb(a,b,d)}):fb(a,b,d):void 0},set:function(a,c,d){var e=d&&Ra(a);return db(a,c,d?eb(a,b,d,l.boxSizing&&"border-box"===n.css(a,"boxSizing",!1,e),e):0)}}}),l.opacity||(n.cssHooks.opacity={get:function(a,b){return Wa.test((b&&a.currentStyle?a.currentStyle.filter:a.style.filter)||"")?.01*parseFloat(RegExp.$1)+"":b?"1":""},set:function(a,b){var c=a.style,d=a.currentStyle,e=n.isNumeric(b)?"alpha(opacity="+100*b+")":"",f=d&&d.filter||c.filter||"";c.zoom=1,(b>=1||""===b)&&""===n.trim(f.replace(Va,""))&&c.removeAttribute&&(c.removeAttribute("filter"),""===b||d&&!d.filter)||(c.filter=Va.test(f)?f.replace(Va,e):f+" "+e)}}),n.cssHooks.marginRight=Ua(l.reliableMarginRight,function(a,b){return b?Pa(a,{display:"inline-block"},Sa,[a,"marginRight"]):void 0}),n.cssHooks.marginLeft=Ua(l.reliableMarginLeft,function(a,b){return b?(parseFloat(Sa(a,"marginLeft"))||(n.contains(a.ownerDocument,a)?a.getBoundingClientRect().left-Pa(a,{
-marginLeft:0},function(){return a.getBoundingClientRect().left}):0))+"px":void 0}),n.each({margin:"",padding:"",border:"Width"},function(a,b){n.cssHooks[a+b]={expand:function(c){for(var d=0,e={},f="string"==typeof c?c.split(" "):[c];4>d;d++)e[a+V[d]+b]=f[d]||f[d-2]||f[0];return e}},Na.test(a)||(n.cssHooks[a+b].set=db)}),n.fn.extend({css:function(a,b){return Y(this,function(a,b,c){var d,e,f={},g=0;if(n.isArray(b)){for(d=Ra(a),e=b.length;e>g;g++)f[b[g]]=n.css(a,b[g],!1,d);return f}return void 0!==c?n.style(a,b,c):n.css(a,b)},a,b,arguments.length>1)},show:function(){return cb(this,!0)},hide:function(){return cb(this)},toggle:function(a){return"boolean"==typeof a?a?this.show():this.hide():this.each(function(){W(this)?n(this).show():n(this).hide()})}});function gb(a,b,c,d,e){return new gb.prototype.init(a,b,c,d,e)}n.Tween=gb,gb.prototype={constructor:gb,init:function(a,b,c,d,e,f){this.elem=a,this.prop=c,this.easing=e||n.easing._default,this.options=b,this.start=this.now=this.cur(),this.end=d,this.unit=f||(n.cssNumber[c]?"":"px")},cur:function(){var a=gb.propHooks[this.prop];return a&&a.get?a.get(this):gb.propHooks._default.get(this)},run:function(a){var b,c=gb.propHooks[this.prop];return this.options.duration?this.pos=b=n.easing[this.easing](a,this.options.duration*a,0,1,this.options.duration):this.pos=b=a,this.now=(this.end-this.start)*b+this.start,this.options.step&&this.options.step.call(this.elem,this.now,this),c&&c.set?c.set(this):gb.propHooks._default.set(this),this}},gb.prototype.init.prototype=gb.prototype,gb.propHooks={_default:{get:function(a){var b;return 1!==a.elem.nodeType||null!=a.elem[a.prop]&&null==a.elem.style[a.prop]?a.elem[a.prop]:(b=n.css(a.elem,a.prop,""),b&&"auto"!==b?b:0)},set:function(a){n.fx.step[a.prop]?n.fx.step[a.prop](a):1!==a.elem.nodeType||null==a.elem.style[n.cssProps[a.prop]]&&!n.cssHooks[a.prop]?a.elem[a.prop]=a.now:n.style(a.elem,a.prop,a.now+a.unit)}}},gb.propHooks.scrollTop=gb.propHooks.scrollLeft={set:function(a){a.elem.nodeType&&a.elem.parentNode&&(a.elem[a.prop]=a.now)}},n.easing={linear:function(a){return a},swing:function(a){return.5-Math.cos(a*Math.PI)/2},_default:"swing"},n.fx=gb.prototype.init,n.fx.step={};var hb,ib,jb=/^(?:toggle|show|hide)$/,kb=/queueHooks$/;function lb(){return a.setTimeout(function(){hb=void 0}),hb=n.now()}function mb(a,b){var c,d={height:a},e=0;for(b=b?1:0;4>e;e+=2-b)c=V[e],d["margin"+c]=d["padding"+c]=a;return b&&(d.opacity=d.width=a),d}function nb(a,b,c){for(var d,e=(qb.tweeners[b]||[]).concat(qb.tweeners["*"]),f=0,g=e.length;g>f;f++)if(d=e[f].call(c,b,a))return d}function ob(a,b,c){var d,e,f,g,h,i,j,k,m=this,o={},p=a.style,q=a.nodeType&&W(a),r=n._data(a,"fxshow");c.queue||(h=n._queueHooks(a,"fx"),null==h.unqueued&&(h.unqueued=0,i=h.empty.fire,h.empty.fire=function(){h.unqueued||i()}),h.unqueued++,m.always(function(){m.always(function(){h.unqueued--,n.queue(a,"fx").length||h.empty.fire()})})),1===a.nodeType&&("height"in b||"width"in b)&&(c.overflow=[p.overflow,p.overflowX,p.overflowY],j=n.css(a,"display"),k="none"===j?n._data(a,"olddisplay")||Ma(a.nodeName):j,"inline"===k&&"none"===n.css(a,"float")&&(l.inlineBlockNeedsLayout&&"inline"!==Ma(a.nodeName)?p.zoom=1:p.display="inline-block")),c.overflow&&(p.overflow="hidden",l.shrinkWrapBlocks()||m.always(function(){p.overflow=c.overflow[0],p.overflowX=c.overflow[1],p.overflowY=c.overflow[2]}));for(d in b)if(e=b[d],jb.exec(e)){if(delete b[d],f=f||"toggle"===e,e===(q?"hide":"show")){if("show"!==e||!r||void 0===r[d])continue;q=!0}o[d]=r&&r[d]||n.style(a,d)}else j=void 0;if(n.isEmptyObject(o))"inline"===("none"===j?Ma(a.nodeName):j)&&(p.display=j);else{r?"hidden"in r&&(q=r.hidden):r=n._data(a,"fxshow",{}),f&&(r.hidden=!q),q?n(a).show():m.done(function(){n(a).hide()}),m.done(function(){var b;n._removeData(a,"fxshow");for(b in o)n.style(a,b,o[b])});for(d in o)g=nb(q?r[d]:0,d,m),d in r||(r[d]=g.start,q&&(g.end=g.start,g.start="width"===d||"height"===d?1:0))}}function pb(a,b){var c,d,e,f,g;for(c in a)if(d=n.camelCase(c),e=b[d],f=a[c],n.isArray(f)&&(e=f[1],f=a[c]=f[0]),c!==d&&(a[d]=f,delete a[c]),g=n.cssHooks[d],g&&"expand"in g){f=g.expand(f),delete a[d];for(c in f)c in a||(a[c]=f[c],b[c]=e)}else b[d]=e}function qb(a,b,c){var d,e,f=0,g=qb.prefilters.length,h=n.Deferred().always(function(){delete i.elem}),i=function(){if(e)return!1;for(var b=hb||lb(),c=Math.max(0,j.startTime+j.duration-b),d=c/j.duration||0,f=1-d,g=0,i=j.tweens.length;i>g;g++)j.tweens[g].run(f);return h.notifyWith(a,[j,f,c]),1>f&&i?c:(h.resolveWith(a,[j]),!1)},j=h.promise({elem:a,props:n.extend({},b),opts:n.extend(!0,{specialEasing:{},easing:n.easing._default},c),originalProperties:b,originalOptions:c,startTime:hb||lb(),duration:c.duration,tweens:[],createTween:function(b,c){var d=n.Tween(a,j.opts,b,c,j.opts.specialEasing[b]||j.opts.easing);return j.tweens.push(d),d},stop:function(b){var c=0,d=b?j.tweens.length:0;if(e)return this;for(e=!0;d>c;c++)j.tweens[c].run(1);return b?(h.notifyWith(a,[j,1,0]),h.resolveWith(a,[j,b])):h.rejectWith(a,[j,b]),this}}),k=j.props;for(pb(k,j.opts.specialEasing);g>f;f++)if(d=qb.prefilters[f].call(j,a,k,j.opts))return n.isFunction(d.stop)&&(n._queueHooks(j.elem,j.opts.queue).stop=n.proxy(d.stop,d)),d;return n.map(k,nb,j),n.isFunction(j.opts.start)&&j.opts.start.call(a,j),n.fx.timer(n.extend(i,{elem:a,anim:j,queue:j.opts.queue})),j.progress(j.opts.progress).done(j.opts.done,j.opts.complete).fail(j.opts.fail).always(j.opts.always)}n.Animation=n.extend(qb,{tweeners:{"*":[function(a,b){var c=this.createTween(a,b);return X(c.elem,a,U.exec(b),c),c}]},tweener:function(a,b){n.isFunction(a)?(b=a,a=["*"]):a=a.match(G);for(var c,d=0,e=a.length;e>d;d++)c=a[d],qb.tweeners[c]=qb.tweeners[c]||[],qb.tweeners[c].unshift(b)},prefilters:[ob],prefilter:function(a,b){b?qb.prefilters.unshift(a):qb.prefilters.push(a)}}),n.speed=function(a,b,c){var d=a&&"object"==typeof a?n.extend({},a):{complete:c||!c&&b||n.isFunction(a)&&a,duration:a,easing:c&&b||b&&!n.isFunction(b)&&b};return d.duration=n.fx.off?0:"number"==typeof d.duration?d.duration:d.duration in n.fx.speeds?n.fx.speeds[d.duration]:n.fx.speeds._default,null!=d.queue&&d.queue!==!0||(d.queue="fx"),d.old=d.complete,d.complete=function(){n.isFunction(d.old)&&d.old.call(this),d.queue&&n.dequeue(this,d.queue)},d},n.fn.extend({fadeTo:function(a,b,c,d){return this.filter(W).css("opacity",0).show().end().animate({opacity:b},a,c,d)},animate:function(a,b,c,d){var e=n.isEmptyObject(a),f=n.speed(b,c,d),g=function(){var b=qb(this,n.extend({},a),f);(e||n._data(this,"finish"))&&b.stop(!0)};return g.finish=g,e||f.queue===!1?this.each(g):this.queue(f.queue,g)},stop:function(a,b,c){var d=function(a){var b=a.stop;delete a.stop,b(c)};return"string"!=typeof a&&(c=b,b=a,a=void 0),b&&a!==!1&&this.queue(a||"fx",[]),this.each(function(){var b=!0,e=null!=a&&a+"queueHooks",f=n.timers,g=n._data(this);if(e)g[e]&&g[e].stop&&d(g[e]);else for(e in g)g[e]&&g[e].stop&&kb.test(e)&&d(g[e]);for(e=f.length;e--;)f[e].elem!==this||null!=a&&f[e].queue!==a||(f[e].anim.stop(c),b=!1,f.splice(e,1));!b&&c||n.dequeue(this,a)})},finish:function(a){return a!==!1&&(a=a||"fx"),this.each(function(){var b,c=n._data(this),d=c[a+"queue"],e=c[a+"queueHooks"],f=n.timers,g=d?d.length:0;for(c.finish=!0,n.queue(this,a,[]),e&&e.stop&&e.stop.call(this,!0),b=f.length;b--;)f[b].elem===this&&f[b].queue===a&&(f[b].anim.stop(!0),f.splice(b,1));for(b=0;g>b;b++)d[b]&&d[b].finish&&d[b].finish.call(this);delete c.finish})}}),n.each(["toggle","show","hide"],function(a,b){var c=n.fn[b];n.fn[b]=function(a,d,e){return null==a||"boolean"==typeof a?c.apply(this,arguments):this.animate(mb(b,!0),a,d,e)}}),n.each({slideDown:mb("show"),slideUp:mb("hide"),slideToggle:mb("toggle"),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"},fadeToggle:{opacity:"toggle"}},function(a,b){n.fn[a]=function(a,c,d){return this.animate(b,a,c,d)}}),n.timers=[],n.fx.tick=function(){var a,b=n.timers,c=0;for(hb=n.now();c<b.length;c++)a=b[c],a()||b[c]!==a||b.splice(c--,1);b.length||n.fx.stop(),hb=void 0},n.fx.timer=function(a){n.timers.push(a),a()?n.fx.start():n.timers.pop()},n.fx.interval=13,n.fx.start=function(){ib||(ib=a.setInterval(n.fx.tick,n.fx.interval))},n.fx.stop=function(){a.clearInterval(ib),ib=null},n.fx.speeds={slow:600,fast:200,_default:400},n.fn.delay=function(b,c){return b=n.fx?n.fx.speeds[b]||b:b,c=c||"fx",this.queue(c,function(c,d){var e=a.setTimeout(c,b);d.stop=function(){a.clearTimeout(e)}})},function(){var a,b=d.createElement("input"),c=d.createElement("div"),e=d.createElement("select"),f=e.appendChild(d.createElement("option"));c=d.createElement("div"),c.setAttribute("className","t"),c.innerHTML="  <link/><table></table><a href='/a'>a</a><input type='checkbox'/>",a=c.getElementsByTagName("a")[0],b.setAttribute("type","checkbox"),c.appendChild(b),a=c.getElementsByTagName("a")[0],a.style.cssText="top:1px",l.getSetAttribute="t"!==c.className,l.style=/top/.test(a.getAttribute("style")),l.hrefNormalized="/a"===a.getAttribute("href"),l.checkOn=!!b.value,l.optSelected=f.selected,l.enctype=!!d.createElement("form").enctype,e.disabled=!0,l.optDisabled=!f.disabled,b=d.createElement("input"),b.setAttribute("value",""),l.input=""===b.getAttribute("value"),b.value="t",b.setAttribute("type","radio"),l.radioValue="t"===b.value}();var rb=/\r/g,sb=/[\x20\t\r\n\f]+/g;n.fn.extend({val:function(a){var b,c,d,e=this[0];{if(arguments.length)return d=n.isFunction(a),this.each(function(c){var e;1===this.nodeType&&(e=d?a.call(this,c,n(this).val()):a,null==e?e="":"number"==typeof e?e+="":n.isArray(e)&&(e=n.map(e,function(a){return null==a?"":a+""})),b=n.valHooks[this.type]||n.valHooks[this.nodeName.toLowerCase()],b&&"set"in b&&void 0!==b.set(this,e,"value")||(this.value=e))});if(e)return b=n.valHooks[e.type]||n.valHooks[e.nodeName.toLowerCase()],b&&"get"in b&&void 0!==(c=b.get(e,"value"))?c:(c=e.value,"string"==typeof c?c.replace(rb,""):null==c?"":c)}}}),n.extend({valHooks:{option:{get:function(a){var b=n.find.attr(a,"value");return null!=b?b:n.trim(n.text(a)).replace(sb," ")}},select:{get:function(a){for(var b,c,d=a.options,e=a.selectedIndex,f="select-one"===a.type||0>e,g=f?null:[],h=f?e+1:d.length,i=0>e?h:f?e:0;h>i;i++)if(c=d[i],(c.selected||i===e)&&(l.optDisabled?!c.disabled:null===c.getAttribute("disabled"))&&(!c.parentNode.disabled||!n.nodeName(c.parentNode,"optgroup"))){if(b=n(c).val(),f)return b;g.push(b)}return g},set:function(a,b){var c,d,e=a.options,f=n.makeArray(b),g=e.length;while(g--)if(d=e[g],n.inArray(n.valHooks.option.get(d),f)>-1)try{d.selected=c=!0}catch(h){d.scrollHeight}else d.selected=!1;return c||(a.selectedIndex=-1),e}}}}),n.each(["radio","checkbox"],function(){n.valHooks[this]={set:function(a,b){return n.isArray(b)?a.checked=n.inArray(n(a).val(),b)>-1:void 0}},l.checkOn||(n.valHooks[this].get=function(a){return null===a.getAttribute("value")?"on":a.value})});var tb,ub,vb=n.expr.attrHandle,wb=/^(?:checked|selected)$/i,xb=l.getSetAttribute,yb=l.input;n.fn.extend({attr:function(a,b){return Y(this,n.attr,a,b,arguments.length>1)},removeAttr:function(a){return this.each(function(){n.removeAttr(this,a)})}}),n.extend({attr:function(a,b,c){var d,e,f=a.nodeType;if(3!==f&&8!==f&&2!==f)return"undefined"==typeof a.getAttribute?n.prop(a,b,c):(1===f&&n.isXMLDoc(a)||(b=b.toLowerCase(),e=n.attrHooks[b]||(n.expr.match.bool.test(b)?ub:tb)),void 0!==c?null===c?void n.removeAttr(a,b):e&&"set"in e&&void 0!==(d=e.set(a,c,b))?d:(a.setAttribute(b,c+""),c):e&&"get"in e&&null!==(d=e.get(a,b))?d:(d=n.find.attr(a,b),null==d?void 0:d))},attrHooks:{type:{set:function(a,b){if(!l.radioValue&&"radio"===b&&n.nodeName(a,"input")){var c=a.value;return a.setAttribute("type",b),c&&(a.value=c),b}}}},removeAttr:function(a,b){var c,d,e=0,f=b&&b.match(G);if(f&&1===a.nodeType)while(c=f[e++])d=n.propFix[c]||c,n.expr.match.bool.test(c)?yb&&xb||!wb.test(c)?a[d]=!1:a[n.camelCase("default-"+c)]=a[d]=!1:n.attr(a,c,""),a.removeAttribute(xb?c:d)}}),ub={set:function(a,b,c){return b===!1?n.removeAttr(a,c):yb&&xb||!wb.test(c)?a.setAttribute(!xb&&n.propFix[c]||c,c):a[n.camelCase("default-"+c)]=a[c]=!0,c}},n.each(n.expr.match.bool.source.match(/\w+/g),function(a,b){var c=vb[b]||n.find.attr;yb&&xb||!wb.test(b)?vb[b]=function(a,b,d){var e,f;return d||(f=vb[b],vb[b]=e,e=null!=c(a,b,d)?b.toLowerCase():null,vb[b]=f),e}:vb[b]=function(a,b,c){return c?void 0:a[n.camelCase("default-"+b)]?b.toLowerCase():null}}),yb&&xb||(n.attrHooks.value={set:function(a,b,c){return n.nodeName(a,"input")?void(a.defaultValue=b):tb&&tb.set(a,b,c)}}),xb||(tb={set:function(a,b,c){var d=a.getAttributeNode(c);return d||a.setAttributeNode(d=a.ownerDocument.createAttribute(c)),d.value=b+="","value"===c||b===a.getAttribute(c)?b:void 0}},vb.id=vb.name=vb.coords=function(a,b,c){var d;return c?void 0:(d=a.getAttributeNode(b))&&""!==d.value?d.value:null},n.valHooks.button={get:function(a,b){var c=a.getAttributeNode(b);return c&&c.specified?c.value:void 0},set:tb.set},n.attrHooks.contenteditable={set:function(a,b,c){tb.set(a,""===b?!1:b,c)}},n.each(["width","height"],function(a,b){n.attrHooks[b]={set:function(a,c){return""===c?(a.setAttribute(b,"auto"),c):void 0}}})),l.style||(n.attrHooks.style={get:function(a){return a.style.cssText||void 0},set:function(a,b){return a.style.cssText=b+""}});var zb=/^(?:input|select|textarea|button|object)$/i,Ab=/^(?:a|area)$/i;n.fn.extend({prop:function(a,b){return Y(this,n.prop,a,b,arguments.length>1)},removeProp:function(a){return a=n.propFix[a]||a,this.each(function(){try{this[a]=void 0,delete this[a]}catch(b){}})}}),n.extend({prop:function(a,b,c){var d,e,f=a.nodeType;if(3!==f&&8!==f&&2!==f)return 1===f&&n.isXMLDoc(a)||(b=n.propFix[b]||b,e=n.propHooks[b]),void 0!==c?e&&"set"in e&&void 0!==(d=e.set(a,c,b))?d:a[b]=c:e&&"get"in e&&null!==(d=e.get(a,b))?d:a[b]},propHooks:{tabIndex:{get:function(a){var b=n.find.attr(a,"tabindex");return b?parseInt(b,10):zb.test(a.nodeName)||Ab.test(a.nodeName)&&a.href?0:-1}}},propFix:{"for":"htmlFor","class":"className"}}),l.hrefNormalized||n.each(["href","src"],function(a,b){n.propHooks[b]={get:function(a){return a.getAttribute(b,4)}}}),l.optSelected||(n.propHooks.selected={get:function(a){var b=a.parentNode;return b&&(b.selectedIndex,b.parentNode&&b.parentNode.selectedIndex),null},set:function(a){var b=a.parentNode;b&&(b.selectedIndex,b.parentNode&&b.parentNode.selectedIndex)}}),n.each(["tabIndex","readOnly","maxLength","cellSpacing","cellPadding","rowSpan","colSpan","useMap","frameBorder","contentEditable"],function(){n.propFix[this.toLowerCase()]=this}),l.enctype||(n.propFix.enctype="encoding");var Bb=/[\t\r\n\f]/g;function Cb(a){return n.attr(a,"class")||""}n.fn.extend({addClass:function(a){var b,c,d,e,f,g,h,i=0;if(n.isFunction(a))return this.each(function(b){n(this).addClass(a.call(this,b,Cb(this)))});if("string"==typeof a&&a){b=a.match(G)||[];while(c=this[i++])if(e=Cb(c),d=1===c.nodeType&&(" "+e+" ").replace(Bb," ")){g=0;while(f=b[g++])d.indexOf(" "+f+" ")<0&&(d+=f+" ");h=n.trim(d),e!==h&&n.attr(c,"class",h)}}return this},removeClass:function(a){var b,c,d,e,f,g,h,i=0;if(n.isFunction(a))return this.each(function(b){n(this).removeClass(a.call(this,b,Cb(this)))});if(!arguments.length)return this.attr("class","");if("string"==typeof a&&a){b=a.match(G)||[];while(c=this[i++])if(e=Cb(c),d=1===c.nodeType&&(" "+e+" ").replace(Bb," ")){g=0;while(f=b[g++])while(d.indexOf(" "+f+" ")>-1)d=d.replace(" "+f+" "," ");h=n.trim(d),e!==h&&n.attr(c,"class",h)}}return this},toggleClass:function(a,b){var c=typeof a;return"boolean"==typeof b&&"string"===c?b?this.addClass(a):this.removeClass(a):n.isFunction(a)?this.each(function(c){n(this).toggleClass(a.call(this,c,Cb(this),b),b)}):this.each(function(){var b,d,e,f;if("string"===c){d=0,e=n(this),f=a.match(G)||[];while(b=f[d++])e.hasClass(b)?e.removeClass(b):e.addClass(b)}else void 0!==a&&"boolean"!==c||(b=Cb(this),b&&n._data(this,"__className__",b),n.attr(this,"class",b||a===!1?"":n._data(this,"__className__")||""))})},hasClass:function(a){var b,c,d=0;b=" "+a+" ";while(c=this[d++])if(1===c.nodeType&&(" "+Cb(c)+" ").replace(Bb," ").indexOf(b)>-1)return!0;return!1}}),n.each("blur focus focusin focusout load resize scroll unload click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup error contextmenu".split(" "),function(a,b){n.fn[b]=function(a,c){return arguments.length>0?this.on(b,null,a,c):this.trigger(b)}}),n.fn.extend({hover:function(a,b){return this.mouseenter(a).mouseleave(b||a)}});var Db=a.location,Eb=n.now(),Fb=/\?/,Gb=/(,)|(\[|{)|(}|])|"(?:[^"\\\r\n]|\\["\\\/bfnrt]|\\u[\da-fA-F]{4})*"\s*:?|true|false|null|-?(?!0\d)\d+(?:\.\d+|)(?:[eE][+-]?\d+|)/g;n.parseJSON=function(b){if(a.JSON&&a.JSON.parse)return a.JSON.parse(b+"");var c,d=null,e=n.trim(b+"");return e&&!n.trim(e.replace(Gb,function(a,b,e,f){return c&&b&&(d=0),0===d?a:(c=e||b,d+=!f-!e,"")}))?Function("return "+e)():n.error("Invalid JSON: "+b)},n.parseXML=function(b){var c,d;if(!b||"string"!=typeof b)return null;try{a.DOMParser?(d=new a.DOMParser,c=d.parseFromString(b,"text/xml")):(c=new a.ActiveXObject("Microsoft.XMLDOM"),c.async="false",c.loadXML(b))}catch(e){c=void 0}return c&&c.documentElement&&!c.getElementsByTagName("parsererror").length||n.error("Invalid XML: "+b),c};var Hb=/#.*$/,Ib=/([?&])_=[^&]*/,Jb=/^(.*?):[ \t]*([^\r\n]*)\r?$/gm,Kb=/^(?:about|app|app-storage|.+-extension|file|res|widget):$/,Lb=/^(?:GET|HEAD)$/,Mb=/^\/\//,Nb=/^([\w.+-]+:)(?:\/\/(?:[^\/?#]*@|)([^\/?#:]*)(?::(\d+)|)|)/,Ob={},Pb={},Qb="*/".concat("*"),Rb=Db.href,Sb=Nb.exec(Rb.toLowerCase())||[];function Tb(a){return function(b,c){"string"!=typeof b&&(c=b,b="*");var d,e=0,f=b.toLowerCase().match(G)||[];if(n.isFunction(c))while(d=f[e++])"+"===d.charAt(0)?(d=d.slice(1)||"*",(a[d]=a[d]||[]).unshift(c)):(a[d]=a[d]||[]).push(c)}}function Ub(a,b,c,d){var e={},f=a===Pb;function g(h){var i;return e[h]=!0,n.each(a[h]||[],function(a,h){var j=h(b,c,d);return"string"!=typeof j||f||e[j]?f?!(i=j):void 0:(b.dataTypes.unshift(j),g(j),!1)}),i}return g(b.dataTypes[0])||!e["*"]&&g("*")}function Vb(a,b){var c,d,e=n.ajaxSettings.flatOptions||{};for(d in b)void 0!==b[d]&&((e[d]?a:c||(c={}))[d]=b[d]);return c&&n.extend(!0,a,c),a}function Wb(a,b,c){var d,e,f,g,h=a.contents,i=a.dataTypes;while("*"===i[0])i.shift(),void 0===e&&(e=a.mimeType||b.getResponseHeader("Content-Type"));if(e)for(g in h)if(h[g]&&h[g].test(e)){i.unshift(g);break}if(i[0]in c)f=i[0];else{for(g in c){if(!i[0]||a.converters[g+" "+i[0]]){f=g;break}d||(d=g)}f=f||d}return f?(f!==i[0]&&i.unshift(f),c[f]):void 0}function Xb(a,b,c,d){var e,f,g,h,i,j={},k=a.dataTypes.slice();if(k[1])for(g in a.converters)j[g.toLowerCase()]=a.converters[g];f=k.shift();while(f)if(a.responseFields[f]&&(c[a.responseFields[f]]=b),!i&&d&&a.dataFilter&&(b=a.dataFilter(b,a.dataType)),i=f,f=k.shift())if("*"===f)f=i;else if("*"!==i&&i!==f){if(g=j[i+" "+f]||j["* "+f],!g)for(e in j)if(h=e.split(" "),h[1]===f&&(g=j[i+" "+h[0]]||j["* "+h[0]])){g===!0?g=j[e]:j[e]!==!0&&(f=h[0],k.unshift(h[1]));break}if(g!==!0)if(g&&a["throws"])b=g(b);else try{b=g(b)}catch(l){return{state:"parsererror",error:g?l:"No conversion from "+i+" to "+f}}}return{state:"success",data:b}}n.extend({active:0,lastModified:{},etag:{},ajaxSettings:{url:Rb,type:"GET",isLocal:Kb.test(Sb[1]),global:!0,processData:!0,async:!0,contentType:"application/x-www-form-urlencoded; charset=UTF-8",accepts:{"*":Qb,text:"text/plain",html:"text/html",xml:"application/xml, text/xml",json:"application/json, text/javascript"},contents:{xml:/\bxml\b/,html:/\bhtml/,json:/\bjson\b/},responseFields:{xml:"responseXML",text:"responseText",json:"responseJSON"},converters:{"* text":String,"text html":!0,"text json":n.parseJSON,"text xml":n.parseXML},flatOptions:{url:!0,context:!0}},ajaxSetup:function(a,b){return b?Vb(Vb(a,n.ajaxSettings),b):Vb(n.ajaxSettings,a)},ajaxPrefilter:Tb(Ob),ajaxTransport:Tb(Pb),ajax:function(b,c){"object"==typeof b&&(c=b,b=void 0),c=c||{};var d,e,f,g,h,i,j,k,l=n.ajaxSetup({},c),m=l.context||l,o=l.context&&(m.nodeType||m.jquery)?n(m):n.event,p=n.Deferred(),q=n.Callbacks("once memory"),r=l.statusCode||{},s={},t={},u=0,v="canceled",w={readyState:0,getResponseHeader:function(a){var b;if(2===u){if(!k){k={};while(b=Jb.exec(g))k[b[1].toLowerCase()]=b[2]}b=k[a.toLowerCase()]}return null==b?null:b},getAllResponseHeaders:function(){return 2===u?g:null},setRequestHeader:function(a,b){var c=a.toLowerCase();return u||(a=t[c]=t[c]||a,s[a]=b),this},overrideMimeType:function(a){return u||(l.mimeType=a),this},statusCode:function(a){var b;if(a)if(2>u)for(b in a)r[b]=[r[b],a[b]];else w.always(a[w.status]);return this},abort:function(a){var b=a||v;return j&&j.abort(b),y(0,b),this}};if(p.promise(w).complete=q.add,w.success=w.done,w.error=w.fail,l.url=((b||l.url||Rb)+"").replace(Hb,"").replace(Mb,Sb[1]+"//"),l.type=c.method||c.type||l.method||l.type,l.dataTypes=n.trim(l.dataType||"*").toLowerCase().match(G)||[""],null==l.crossDomain&&(d=Nb.exec(l.url.toLowerCase()),l.crossDomain=!(!d||d[1]===Sb[1]&&d[2]===Sb[2]&&(d[3]||("http:"===d[1]?"80":"443"))===(Sb[3]||("http:"===Sb[1]?"80":"443")))),l.data&&l.processData&&"string"!=typeof l.data&&(l.data=n.param(l.data,l.traditional)),Ub(Ob,l,c,w),2===u)return w;i=n.event&&l.global,i&&0===n.active++&&n.event.trigger("ajaxStart"),l.type=l.type.toUpperCase(),l.hasContent=!Lb.test(l.type),f=l.url,l.hasContent||(l.data&&(f=l.url+=(Fb.test(f)?"&":"?")+l.data,delete l.data),l.cache===!1&&(l.url=Ib.test(f)?f.replace(Ib,"$1_="+Eb++):f+(Fb.test(f)?"&":"?")+"_="+Eb++)),l.ifModified&&(n.lastModified[f]&&w.setRequestHeader("If-Modified-Since",n.lastModified[f]),n.etag[f]&&w.setRequestHeader("If-None-Match",n.etag[f])),(l.data&&l.hasContent&&l.contentType!==!1||c.contentType)&&w.setRequestHeader("Content-Type",l.contentType),w.setRequestHeader("Accept",l.dataTypes[0]&&l.accepts[l.dataTypes[0]]?l.accepts[l.dataTypes[0]]+("*"!==l.dataTypes[0]?", "+Qb+"; q=0.01":""):l.accepts["*"]);for(e in l.headers)w.setRequestHeader(e,l.headers[e]);if(l.beforeSend&&(l.beforeSend.call(m,w,l)===!1||2===u))return w.abort();v="abort";for(e in{success:1,error:1,complete:1})w[e](l[e]);if(j=Ub(Pb,l,c,w)){if(w.readyState=1,i&&o.trigger("ajaxSend",[w,l]),2===u)return w;l.async&&l.timeout>0&&(h=a.setTimeout(function(){w.abort("timeout")},l.timeout));try{u=1,j.send(s,y)}catch(x){if(!(2>u))throw x;y(-1,x)}}else y(-1,"No Transport");function y(b,c,d,e){var k,s,t,v,x,y=c;2!==u&&(u=2,h&&a.clearTimeout(h),j=void 0,g=e||"",w.readyState=b>0?4:0,k=b>=200&&300>b||304===b,d&&(v=Wb(l,w,d)),v=Xb(l,v,w,k),k?(l.ifModified&&(x=w.getResponseHeader("Last-Modified"),x&&(n.lastModified[f]=x),x=w.getResponseHeader("etag"),x&&(n.etag[f]=x)),204===b||"HEAD"===l.type?y="nocontent":304===b?y="notmodified":(y=v.state,s=v.data,t=v.error,k=!t)):(t=y,!b&&y||(y="error",0>b&&(b=0))),w.status=b,w.statusText=(c||y)+"",k?p.resolveWith(m,[s,y,w]):p.rejectWith(m,[w,y,t]),w.statusCode(r),r=void 0,i&&o.trigger(k?"ajaxSuccess":"ajaxError",[w,l,k?s:t]),q.fireWith(m,[w,y]),i&&(o.trigger("ajaxComplete",[w,l]),--n.active||n.event.trigger("ajaxStop")))}return w},getJSON:function(a,b,c){return n.get(a,b,c,"json")},getScript:function(a,b){return n.get(a,void 0,b,"script")}}),n.each(["get","post"],function(a,b){n[b]=function(a,c,d,e){return n.isFunction(c)&&(e=e||d,d=c,c=void 0),n.ajax(n.extend({url:a,type:b,dataType:e,data:c,success:d},n.isPlainObject(a)&&a))}}),n._evalUrl=function(a){return n.ajax({url:a,type:"GET",dataType:"script",cache:!0,async:!1,global:!1,"throws":!0})},n.fn.extend({wrapAll:function(a){if(n.isFunction(a))return this.each(function(b){n(this).wrapAll(a.call(this,b))});if(this[0]){var b=n(a,this[0].ownerDocument).eq(0).clone(!0);this[0].parentNode&&b.insertBefore(this[0]),b.map(function(){var a=this;while(a.firstChild&&1===a.firstChild.nodeType)a=a.firstChild;return a}).append(this)}return this},wrapInner:function(a){return n.isFunction(a)?this.each(function(b){n(this).wrapInner(a.call(this,b))}):this.each(function(){var b=n(this),c=b.contents();c.length?c.wrapAll(a):b.append(a)})},wrap:function(a){var b=n.isFunction(a);return this.each(function(c){n(this).wrapAll(b?a.call(this,c):a)})},unwrap:function(){return this.parent().each(function(){n.nodeName(this,"body")||n(this).replaceWith(this.childNodes)}).end()}});function Yb(a){return a.style&&a.style.display||n.css(a,"display")}function Zb(a){if(!n.contains(a.ownerDocument||d,a))return!0;while(a&&1===a.nodeType){if("none"===Yb(a)||"hidden"===a.type)return!0;a=a.parentNode}return!1}n.expr.filters.hidden=function(a){return l.reliableHiddenOffsets()?a.offsetWidth<=0&&a.offsetHeight<=0&&!a.getClientRects().length:Zb(a)},n.expr.filters.visible=function(a){return!n.expr.filters.hidden(a)};var $b=/%20/g,_b=/\[\]$/,ac=/\r?\n/g,bc=/^(?:submit|button|image|reset|file)$/i,cc=/^(?:input|select|textarea|keygen)/i;function dc(a,b,c,d){var e;if(n.isArray(b))n.each(b,function(b,e){c||_b.test(a)?d(a,e):dc(a+"["+("object"==typeof e&&null!=e?b:"")+"]",e,c,d)});else if(c||"object"!==n.type(b))d(a,b);else for(e in b)dc(a+"["+e+"]",b[e],c,d)}n.param=function(a,b){var c,d=[],e=function(a,b){b=n.isFunction(b)?b():null==b?"":b,d[d.length]=encodeURIComponent(a)+"="+encodeURIComponent(b)};if(void 0===b&&(b=n.ajaxSettings&&n.ajaxSettings.traditional),n.isArray(a)||a.jquery&&!n.isPlainObject(a))n.each(a,function(){e(this.name,this.value)});else for(c in a)dc(c,a[c],b,e);return d.join("&").replace($b,"+")},n.fn.extend({serialize:function(){return n.param(this.serializeArray())},serializeArray:function(){return this.map(function(){var a=n.prop(this,"elements");return a?n.makeArray(a):this}).filter(function(){var a=this.type;return this.name&&!n(this).is(":disabled")&&cc.test(this.nodeName)&&!bc.test(a)&&(this.checked||!Z.test(a))}).map(function(a,b){var c=n(this).val();return null==c?null:n.isArray(c)?n.map(c,function(a){return{name:b.name,value:a.replace(ac,"\r\n")}}):{name:b.name,value:c.replace(ac,"\r\n")}}).get()}}),n.ajaxSettings.xhr=void 0!==a.ActiveXObject?function(){return this.isLocal?ic():d.documentMode>8?hc():/^(get|post|head|put|delete|options)$/i.test(this.type)&&hc()||ic()}:hc;var ec=0,fc={},gc=n.ajaxSettings.xhr();a.attachEvent&&a.attachEvent("onunload",function(){for(var a in fc)fc[a](void 0,!0)}),l.cors=!!gc&&"withCredentials"in gc,gc=l.ajax=!!gc,gc&&n.ajaxTransport(function(b){if(!b.crossDomain||l.cors){var c;return{send:function(d,e){var f,g=b.xhr(),h=++ec;if(g.open(b.type,b.url,b.async,b.username,b.password),b.xhrFields)for(f in b.xhrFields)g[f]=b.xhrFields[f];b.mimeType&&g.overrideMimeType&&g.overrideMimeType(b.mimeType),b.crossDomain||d["X-Requested-With"]||(d["X-Requested-With"]="XMLHttpRequest");for(f in d)void 0!==d[f]&&g.setRequestHeader(f,d[f]+"");g.send(b.hasContent&&b.data||null),c=function(a,d){var f,i,j;if(c&&(d||4===g.readyState))if(delete fc[h],c=void 0,g.onreadystatechange=n.noop,d)4!==g.readyState&&g.abort();else{j={},f=g.status,"string"==typeof g.responseText&&(j.text=g.responseText);try{i=g.statusText}catch(k){i=""}f||!b.isLocal||b.crossDomain?1223===f&&(f=204):f=j.text?200:404}j&&e(f,i,j,g.getAllResponseHeaders())},b.async?4===g.readyState?a.setTimeout(c):g.onreadystatechange=fc[h]=c:c()},abort:function(){c&&c(void 0,!0)}}}});function hc(){try{return new a.XMLHttpRequest}catch(b){}}function ic(){try{return new a.ActiveXObject("Microsoft.XMLHTTP")}catch(b){}}n.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/\b(?:java|ecma)script\b/},converters:{"text script":function(a){return n.globalEval(a),a}}}),n.ajaxPrefilter("script",function(a){void 0===a.cache&&(a.cache=!1),a.crossDomain&&(a.type="GET",a.global=!1)}),n.ajaxTransport("script",function(a){if(a.crossDomain){var b,c=d.head||n("head")[0]||d.documentElement;return{send:function(e,f){b=d.createElement("script"),b.async=!0,a.scriptCharset&&(b.charset=a.scriptCharset),b.src=a.url,b.onload=b.onreadystatechange=function(a,c){(c||!b.readyState||/loaded|complete/.test(b.readyState))&&(b.onload=b.onreadystatechange=null,b.parentNode&&b.parentNode.removeChild(b),b=null,c||f(200,"success"))},c.insertBefore(b,c.firstChild)},abort:function(){b&&b.onload(void 0,!0)}}}});var jc=[],kc=/(=)\?(?=&|$)|\?\?/;n.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var a=jc.pop()||n.expando+"_"+Eb++;return this[a]=!0,a}}),n.ajaxPrefilter("json jsonp",function(b,c,d){var e,f,g,h=b.jsonp!==!1&&(kc.test(b.url)?"url":"string"==typeof b.data&&0===(b.contentType||"").indexOf("application/x-www-form-urlencoded")&&kc.test(b.data)&&"data");return h||"jsonp"===b.dataTypes[0]?(e=b.jsonpCallback=n.isFunction(b.jsonpCallback)?b.jsonpCallback():b.jsonpCallback,h?b[h]=b[h].replace(kc,"$1"+e):b.jsonp!==!1&&(b.url+=(Fb.test(b.url)?"&":"?")+b.jsonp+"="+e),b.converters["script json"]=function(){return g||n.error(e+" was not called"),g[0]},b.dataTypes[0]="json",f=a[e],a[e]=function(){g=arguments},d.always(function(){void 0===f?n(a).removeProp(e):a[e]=f,b[e]&&(b.jsonpCallback=c.jsonpCallback,jc.push(e)),g&&n.isFunction(f)&&f(g[0]),g=f=void 0}),"script"):void 0}),n.parseHTML=function(a,b,c){if(!a||"string"!=typeof a)return null;"boolean"==typeof b&&(c=b,b=!1),b=b||d;var e=x.exec(a),f=!c&&[];return e?[b.createElement(e[1])]:(e=ja([a],b,f),f&&f.length&&n(f).remove(),n.merge([],e.childNodes))};var lc=n.fn.load;n.fn.load=function(a,b,c){if("string"!=typeof a&&lc)return lc.apply(this,arguments);var d,e,f,g=this,h=a.indexOf(" ");return h>-1&&(d=n.trim(a.slice(h,a.length)),a=a.slice(0,h)),n.isFunction(b)?(c=b,b=void 0):b&&"object"==typeof b&&(e="POST"),g.length>0&&n.ajax({url:a,type:e||"GET",dataType:"html",data:b}).done(function(a){f=arguments,g.html(d?n("<div>").append(n.parseHTML(a)).find(d):a)}).always(c&&function(a,b){g.each(function(){c.apply(this,f||[a.responseText,b,a])})}),this},n.each(["ajaxStart","ajaxStop","ajaxComplete","ajaxError","ajaxSuccess","ajaxSend"],function(a,b){n.fn[b]=function(a){return this.on(b,a)}}),n.expr.filters.animated=function(a){return n.grep(n.timers,function(b){return a===b.elem}).length};function mc(a){return n.isWindow(a)?a:9===a.nodeType?a.defaultView||a.parentWindow:!1}n.offset={setOffset:function(a,b,c){var d,e,f,g,h,i,j,k=n.css(a,"position"),l=n(a),m={};"static"===k&&(a.style.position="relative"),h=l.offset(),f=n.css(a,"top"),i=n.css(a,"left"),j=("absolute"===k||"fixed"===k)&&n.inArray("auto",[f,i])>-1,j?(d=l.position(),g=d.top,e=d.left):(g=parseFloat(f)||0,e=parseFloat(i)||0),n.isFunction(b)&&(b=b.call(a,c,n.extend({},h))),null!=b.top&&(m.top=b.top-h.top+g),null!=b.left&&(m.left=b.left-h.left+e),"using"in b?b.using.call(a,m):l.css(m)}},n.fn.extend({offset:function(a){if(arguments.length)return void 0===a?this:this.each(function(b){n.offset.setOffset(this,a,b)});var b,c,d={top:0,left:0},e=this[0],f=e&&e.ownerDocument;if(f)return b=f.documentElement,n.contains(b,e)?("undefined"!=typeof e.getBoundingClientRect&&(d=e.getBoundingClientRect()),c=mc(f),{top:d.top+(c.pageYOffset||b.scrollTop)-(b.clientTop||0),left:d.left+(c.pageXOffset||b.scrollLeft)-(b.clientLeft||0)}):d},position:function(){if(this[0]){var a,b,c={top:0,left:0},d=this[0];return"fixed"===n.css(d,"position")?b=d.getBoundingClientRect():(a=this.offsetParent(),b=this.offset(),n.nodeName(a[0],"html")||(c=a.offset()),c.top+=n.css(a[0],"borderTopWidth",!0),c.left+=n.css(a[0],"borderLeftWidth",!0)),{top:b.top-c.top-n.css(d,"marginTop",!0),left:b.left-c.left-n.css(d,"marginLeft",!0)}}},offsetParent:function(){return this.map(function(){var a=this.offsetParent;while(a&&!n.nodeName(a,"html")&&"static"===n.css(a,"position"))a=a.offsetParent;return a||Qa})}}),n.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(a,b){var c=/Y/.test(b);n.fn[a]=function(d){return Y(this,function(a,d,e){var f=mc(a);return void 0===e?f?b in f?f[b]:f.document.documentElement[d]:a[d]:void(f?f.scrollTo(c?n(f).scrollLeft():e,c?e:n(f).scrollTop()):a[d]=e)},a,d,arguments.length,null)}}),n.each(["top","left"],function(a,b){n.cssHooks[b]=Ua(l.pixelPosition,function(a,c){return c?(c=Sa(a,b),Oa.test(c)?n(a).position()[b]+"px":c):void 0})}),n.each({Height:"height",Width:"width"},function(a,b){n.each({
-padding:"inner"+a,content:b,"":"outer"+a},function(c,d){n.fn[d]=function(d,e){var f=arguments.length&&(c||"boolean"!=typeof d),g=c||(d===!0||e===!0?"margin":"border");return Y(this,function(b,c,d){var e;return n.isWindow(b)?b.document.documentElement["client"+a]:9===b.nodeType?(e=b.documentElement,Math.max(b.body["scroll"+a],e["scroll"+a],b.body["offset"+a],e["offset"+a],e["client"+a])):void 0===d?n.css(b,c,g):n.style(b,c,d,g)},b,f?d:void 0,f,null)}})}),n.fn.extend({bind:function(a,b,c){return this.on(a,null,b,c)},unbind:function(a,b){return this.off(a,null,b)},delegate:function(a,b,c,d){return this.on(b,a,c,d)},undelegate:function(a,b,c){return 1===arguments.length?this.off(a,"**"):this.off(b,a||"**",c)}}),n.fn.size=function(){return this.length},n.fn.andSelf=n.fn.addBack,"function"==typeof define&&define.amd&&define("jquery",[],function(){return n});var nc=a.jQuery,oc=a.$;return n.noConflict=function(b){return a.$===n&&(a.$=oc),b&&a.jQuery===n&&(a.jQuery=nc),n},b||(a.jQuery=a.$=n),n});
+!function(a,b){"object"==typeof module&&"object"==typeof module.exports?module.exports=a.document?b(a,!0):function(a){if(!a.document)throw new Error("jQuery requires a window with a document");return b(a)}:b(a)}("undefined"!=typeof window?window:this,function(a,b){var c=[],d=a.document,e=c.slice,f=c.concat,g=c.push,h=c.indexOf,i={},j=i.toString,k=i.hasOwnProperty,l={},m="1.12.4",n=function(a,b){return new n.fn.init(a,b)},o=/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,p=/^-ms-/,q=/-([\da-z])/gi,r=function(a,b){return b.toUpperCase()};n.fn=n.prototype={jquery:m,constructor:n,selector:"",length:0,toArray:function(){return e.call(this)},get:function(a){return null!=a?a<0?this[a+this.length]:this[a]:e.call(this)},pushStack:function(a){var b=n.merge(this.constructor(),a);return b.prevObject=this,b.context=this.context,b},each:function(a){return n.each(this,a)},map:function(a){return this.pushStack(n.map(this,function(b,c){return a.call(b,c,b)}))},slice:function(){return this.pushStack(e.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},eq:function(a){var b=this.length,c=+a+(a<0?b:0);return this.pushStack(c>=0&&c<b?[this[c]]:[])},end:function(){return this.prevObject||this.constructor()},push:g,sort:c.sort,splice:c.splice},n.extend=n.fn.extend=function(){var a,b,c,d,e,f,g=arguments[0]||{},h=1,i=arguments.length,j=!1;for("boolean"==typeof g&&(j=g,g=arguments[h]||{},h++),"object"==typeof g||n.isFunction(g)||(g={}),h===i&&(g=this,h--);h<i;h++)if(null!=(e=arguments[h]))for(d in e)a=g[d],c=e[d],"__proto__"!==d&&g!==c&&(j&&c&&(n.isPlainObject(c)||(b=n.isArray(c)))?(b?(b=!1,f=a&&n.isArray(a)?a:[]):f=a&&n.isPlainObject(a)?a:{},g[d]=n.extend(j,f,c)):void 0!==c&&(g[d]=c));return g},n.extend({expando:"jQuery"+(m+Math.random()).replace(/\D/g,""),isReady:!0,error:function(a){throw new Error(a)},noop:function(){},isFunction:function(a){return"function"===n.type(a)},isArray:Array.isArray||function(a){return"array"===n.type(a)},isWindow:function(a){return null!=a&&a==a.window},isNumeric:function(a){var b=a&&a.toString();return!n.isArray(a)&&b-parseFloat(b)+1>=0},isEmptyObject:function(a){var b;for(b in a)return!1;return!0},isPlainObject:function(a){var b;if(!a||"object"!==n.type(a)||a.nodeType||n.isWindow(a))return!1;try{if(a.constructor&&!k.call(a,"constructor")&&!k.call(a.constructor.prototype,"isPrototypeOf"))return!1}catch(c){return!1}if(!l.ownFirst)for(b in a)return k.call(a,b);for(b in a);return void 0===b||k.call(a,b)},type:function(a){return null==a?a+"":"object"==typeof a||"function"==typeof a?i[j.call(a)]||"object":typeof a},globalEval:function(b){b&&n.trim(b)&&(a.execScript||function(b){a.eval.call(a,b)})(b)},camelCase:function(a){return a.replace(p,"ms-").replace(q,r)},nodeName:function(a,b){return a.nodeName&&a.nodeName.toLowerCase()===b.toLowerCase()},each:function(a,b){var c,d=0;if(s(a)){for(c=a.length;d<c;d++)if(!1===b.call(a[d],d,a[d]))break}else for(d in a)if(!1===b.call(a[d],d,a[d]))break;return a},trim:function(a){return null==a?"":(a+"").replace(o,"")},makeArray:function(a,b){var c=b||[];return null!=a&&(s(Object(a))?n.merge(c,"string"==typeof a?[a]:a):g.call(c,a)),c},inArray:function(a,b,c){var d;if(b){if(h)return h.call(b,a,c);for(d=b.length,c=c?c<0?Math.max(0,d+c):c:0;c<d;c++)if(c in b&&b[c]===a)return c}return-1},merge:function(a,b){var c=+b.length,d=0,e=a.length;while(d<c)a[e++]=b[d++];if(c!==c)while(void 0!==b[d])a[e++]=b[d++];return a.length=e,a},grep:function(a,b,c){for(var d,e=[],f=0,g=a.length,h=!c;f<g;f++)(d=!b(a[f],f))!==h&&e.push(a[f]);return e},map:function(a,b,c){var d,e,g=0,h=[];if(s(a))for(d=a.length;g<d;g++)null!=(e=b(a[g],g,c))&&h.push(e);else for(g in a)null!=(e=b(a[g],g,c))&&h.push(e);return f.apply([],h)},guid:1,proxy:function(a,b){var c,d,f;if("string"==typeof b&&(f=a[b],b=a,a=f),n.isFunction(a))return c=e.call(arguments,2),d=function(){return a.apply(b||this,c.concat(e.call(arguments)))},d.guid=a.guid=a.guid||n.guid++,d},now:function(){return+new Date},support:l}),"function"==typeof Symbol&&(n.fn[Symbol.iterator]=c[Symbol.iterator]),n.each("Boolean Number String Function Array Date RegExp Object Error Symbol".split(" "),function(a,b){i["[object "+b+"]"]=b.toLowerCase()});function s(a){var b=!!a&&"length"in a&&a.length,c=n.type(a);return"function"!==c&&!n.isWindow(a)&&("array"===c||0===b||"number"==typeof b&&b>0&&b-1 in a)}var t=function(a){var b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u="sizzle"+1*new Date,v=a.document,w=0,x=0,y=fa(),z=fa(),A=fa(),B=function(a,b){return a===b&&(l=!0),0},C=1<<31,D={}.hasOwnProperty,E=[],F=E.pop,G=E.push,H=E.push,I=E.slice,J=function(a,b){for(var c=0,d=a.length;c<d;c++)if(a[c]===b)return c;return-1},K="checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped",L="[\\x20\\t\\r\\n\\f]",M="(?:\\\\.|[\\w-]|[^\\x00-\\xa0])+",N="\\["+L+"*("+M+")(?:"+L+"*([*^$|!~]?=)"+L+"*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|("+M+"))|)"+L+"*\\]",O=":("+M+")(?:\\((('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|((?:\\\\.|[^\\\\()[\\]]|"+N+")*)|.*)\\)|)",P=new RegExp(L+"+","g"),Q=new RegExp("^"+L+"+|((?:^|[^\\\\])(?:\\\\.)*)"+L+"+$","g"),R=new RegExp("^"+L+"*,"+L+"*"),S=new RegExp("^"+L+"*([>+~]|"+L+")"+L+"*"),T=new RegExp("="+L+"*([^\\]'\"]*?)"+L+"*\\]","g"),U=new RegExp(O),V=new RegExp("^"+M+"$"),W={ID:new RegExp("^#("+M+")"),CLASS:new RegExp("^\\.("+M+")"),TAG:new RegExp("^("+M+"|[*])"),ATTR:new RegExp("^"+N),PSEUDO:new RegExp("^"+O),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+L+"*(even|odd|(([+-]|)(\\d*)n|)"+L+"*(?:([+-]|)"+L+"*(\\d+)|))"+L+"*\\)|)","i"),bool:new RegExp("^(?:"+K+")$","i"),needsContext:new RegExp("^"+L+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+L+"*((?:-\\d)?\\d*)"+L+"*\\)|)(?=[^-]|$)","i")},X=/^(?:input|select|textarea|button)$/i,Y=/^h\d$/i,Z=/^[^{]+\{\s*\[native \w/,$=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,_=/[+~]/,aa=/'|\\/g,ba=new RegExp("\\\\([\\da-f]{1,6}"+L+"?|("+L+")|.)","ig"),ca=function(a,b,c){var d="0x"+b-65536;return d!==d||c?b:d<0?String.fromCharCode(d+65536):String.fromCharCode(d>>10|55296,1023&d|56320)},da=function(){m()};try{H.apply(E=I.call(v.childNodes),v.childNodes),E[v.childNodes.length].nodeType}catch(xa){H={apply:E.length?function(a,b){G.apply(a,I.call(b))}:function(a,b){var c=a.length,d=0;while(a[c++]=b[d++]);a.length=c-1}}}function ea(a,b,d,e){var f,h,j,k,l,o,r,s,w=b&&b.ownerDocument,x=b?b.nodeType:9;if(d=d||[],"string"!=typeof a||!a||1!==x&&9!==x&&11!==x)return d;if(!e&&((b?b.ownerDocument||b:v)!==n&&m(b),b=b||n,p)){if(11!==x&&(o=$.exec(a)))if(f=o[1]){if(9===x){if(!(j=b.getElementById(f)))return d;if(j.id===f)return d.push(j),d}else if(w&&(j=w.getElementById(f))&&t(b,j)&&j.id===f)return d.push(j),d}else{if(o[2])return H.apply(d,b.getElementsByTagName(a)),d;if((f=o[3])&&c.getElementsByClassName&&b.getElementsByClassName)return H.apply(d,b.getElementsByClassName(f)),d}if(c.qsa&&!A[a+" "]&&(!q||!q.test(a))){if(1!==x)w=b,s=a;else if("object"!==b.nodeName.toLowerCase()){(k=b.getAttribute("id"))?k=k.replace(aa,"\\$&"):b.setAttribute("id",k=u),r=g(a),h=r.length,l=V.test(k)?"#"+k:"[id='"+k+"']";while(h--)r[h]=l+" "+pa(r[h]);s=r.join(","),w=_.test(a)&&na(b.parentNode)||b}if(s)try{return H.apply(d,w.querySelectorAll(s)),d}catch(y){}finally{k===u&&b.removeAttribute("id")}}}return i(a.replace(Q,"$1"),b,d,e)}function fa(){var a=[];function b(c,e){return a.push(c+" ")>d.cacheLength&&delete b[a.shift()],b[c+" "]=e}return b}function ga(a){return a[u]=!0,a}function ha(a){var b=n.createElement("div");try{return!!a(b)}catch(xa){return!1}finally{b.parentNode&&b.parentNode.removeChild(b),b=null}}function ia(a,b){var c=a.split("|"),e=c.length;while(e--)d.attrHandle[c[e]]=b}function ja(a,b){var c=b&&a,d=c&&1===a.nodeType&&1===b.nodeType&&(~b.sourceIndex||C)-(~a.sourceIndex||C);if(d)return d;if(c)while(c=c.nextSibling)if(c===b)return-1;return a?1:-1}function ka(a){return function(b){return"input"===b.nodeName.toLowerCase()&&b.type===a}}function la(a){return function(b){var c=b.nodeName.toLowerCase();return("input"===c||"button"===c)&&b.type===a}}function ma(a){return ga(function(b){return b=+b,ga(function(c,d){var e,f=a([],c.length,b),g=f.length;while(g--)c[e=f[g]]&&(c[e]=!(d[e]=c[e]))})})}function na(a){return a&&void 0!==a.getElementsByTagName&&a}c=ea.support={},f=ea.isXML=function(a){var b=a&&(a.ownerDocument||a).documentElement;return!!b&&"HTML"!==b.nodeName},m=ea.setDocument=function(a){var b,e,g=a?a.ownerDocument||a:v;return g!==n&&9===g.nodeType&&g.documentElement?(n=g,o=n.documentElement,p=!f(n),(e=n.defaultView)&&e.top!==e&&(e.addEventListener?e.addEventListener("unload",da,!1):e.attachEvent&&e.attachEvent("onunload",da)),c.attributes=ha(function(a){return a.className="i",!a.getAttribute("className")}),c.getElementsByTagName=ha(function(a){return a.appendChild(n.createComment("")),!a.getElementsByTagName("*").length}),c.getElementsByClassName=Z.test(n.getElementsByClassName),c.getById=ha(function(a){return o.appendChild(a).id=u,!n.getElementsByName||!n.getElementsByName(u).length}),c.getById?(d.find.ID=function(a,b){if(void 0!==b.getElementById&&p){var c=b.getElementById(a);return c?[c]:[]}},d.filter.ID=function(a){var b=a.replace(ba,ca);return function(a){return a.getAttribute("id")===b}}):(delete d.find.ID,d.filter.ID=function(a){var b=a.replace(ba,ca);return function(a){var c=void 0!==a.getAttributeNode&&a.getAttributeNode("id");return c&&c.value===b}}),d.find.TAG=c.getElementsByTagName?function(a,b){return void 0!==b.getElementsByTagName?b.getElementsByTagName(a):c.qsa?b.querySelectorAll(a):void 0}:function(a,b){var c,d=[],e=0,f=b.getElementsByTagName(a);if("*"===a){while(c=f[e++])1===c.nodeType&&d.push(c);return d}return f},d.find.CLASS=c.getElementsByClassName&&function(a,b){if(void 0!==b.getElementsByClassName&&p)return b.getElementsByClassName(a)},r=[],q=[],(c.qsa=Z.test(n.querySelectorAll))&&(ha(function(a){o.appendChild(a).innerHTML="<a id='"+u+"'></a><select id='"+u+"-\r\\' msallowcapture=''><option selected=''></option></select>",a.querySelectorAll("[msallowcapture^='']").length&&q.push("[*^$]="+L+"*(?:''|\"\")"),a.querySelectorAll("[selected]").length||q.push("\\["+L+"*(?:value|"+K+")"),a.querySelectorAll("[id~="+u+"-]").length||q.push("~="),a.querySelectorAll(":checked").length||q.push(":checked"),a.querySelectorAll("a#"+u+"+*").length||q.push(".#.+[+~]")}),ha(function(a){var b=n.createElement("input");b.setAttribute("type","hidden"),a.appendChild(b).setAttribute("name","D"),a.querySelectorAll("[name=d]").length&&q.push("name"+L+"*[*^$|!~]?="),a.querySelectorAll(":enabled").length||q.push(":enabled",":disabled"),a.querySelectorAll("*,:x"),q.push(",.*:")})),(c.matchesSelector=Z.test(s=o.matches||o.webkitMatchesSelector||o.mozMatchesSelector||o.oMatchesSelector||o.msMatchesSelector))&&ha(function(a){c.disconnectedMatch=s.call(a,"div"),s.call(a,"[s!='']:x"),r.push("!=",O)}),q=q.length&&new RegExp(q.join("|")),r=r.length&&new RegExp(r.join("|")),b=Z.test(o.compareDocumentPosition),t=b||Z.test(o.contains)?function(a,b){var c=9===a.nodeType?a.documentElement:a,d=b&&b.parentNode;return a===d||!(!d||1!==d.nodeType||!(c.contains?c.contains(d):a.compareDocumentPosition&&16&a.compareDocumentPosition(d)))}:function(a,b){if(b)while(b=b.parentNode)if(b===a)return!0;return!1},B=b?function(a,b){if(a===b)return l=!0,0;var d=!a.compareDocumentPosition-!b.compareDocumentPosition;return d||(d=(a.ownerDocument||a)===(b.ownerDocument||b)?a.compareDocumentPosition(b):1,1&d||!c.sortDetached&&b.compareDocumentPosition(a)===d?a===n||a.ownerDocument===v&&t(v,a)?-1:b===n||b.ownerDocument===v&&t(v,b)?1:k?J(k,a)-J(k,b):0:4&d?-1:1)}:function(a,b){if(a===b)return l=!0,0;var c,d=0,e=a.parentNode,f=b.parentNode,g=[a],h=[b];if(!e||!f)return a===n?-1:b===n?1:e?-1:f?1:k?J(k,a)-J(k,b):0;if(e===f)return ja(a,b);c=a;while(c=c.parentNode)g.unshift(c);c=b;while(c=c.parentNode)h.unshift(c);while(g[d]===h[d])d++;return d?ja(g[d],h[d]):g[d]===v?-1:h[d]===v?1:0},n):n},ea.matches=function(a,b){return ea(a,null,null,b)},ea.matchesSelector=function(a,b){if((a.ownerDocument||a)!==n&&m(a),b=b.replace(T,"='$1']"),c.matchesSelector&&p&&!A[b+" "]&&(!r||!r.test(b))&&(!q||!q.test(b)))try{var d=s.call(a,b);if(d||c.disconnectedMatch||a.document&&11!==a.document.nodeType)return d}catch(xa){}return ea(b,n,null,[a]).length>0},ea.contains=function(a,b){return(a.ownerDocument||a)!==n&&m(a),t(a,b)},ea.attr=function(a,b){(a.ownerDocument||a)!==n&&m(a);var e=d.attrHandle[b.toLowerCase()],f=e&&D.call(d.attrHandle,b.toLowerCase())?e(a,b,!p):void 0;return void 0!==f?f:c.attributes||!p?a.getAttribute(b):(f=a.getAttributeNode(b))&&f.specified?f.value:null},ea.error=function(a){throw new Error("Syntax error, unrecognized expression: "+a)},ea.uniqueSort=function(a){var b,d=[],e=0,f=0;if(l=!c.detectDuplicates,k=!c.sortStable&&a.slice(0),a.sort(B),l){while(b=a[f++])b===a[f]&&(e=d.push(f));while(e--)a.splice(d[e],1)}return k=null,a},e=ea.getText=function(a){var b,c="",d=0,f=a.nodeType;if(f){if(1===f||9===f||11===f){if("string"==typeof a.textContent)return a.textContent;for(a=a.firstChild;a;a=a.nextSibling)c+=e(a)}else if(3===f||4===f)return a.nodeValue}else while(b=a[d++])c+=e(b);return c},d=ea.selectors={cacheLength:50,createPseudo:ga,match:W,attrHandle:{},find:{},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(a){return a[1]=a[1].replace(ba,ca),a[3]=(a[3]||a[4]||a[5]||"").replace(ba,ca),"~="===a[2]&&(a[3]=" "+a[3]+" "),a.slice(0,4)},CHILD:function(a){return a[1]=a[1].toLowerCase(),"nth"===a[1].slice(0,3)?(a[3]||ea.error(a[0]),a[4]=+(a[4]?a[5]+(a[6]||1):2*("even"===a[3]||"odd"===a[3])),a[5]=+(a[7]+a[8]||"odd"===a[3])):a[3]&&ea.error(a[0]),a},PSEUDO:function(a){var b,c=!a[6]&&a[2];return W.CHILD.test(a[0])?null:(a[3]?a[2]=a[4]||a[5]||"":c&&U.test(c)&&(b=g(c,!0))&&(b=c.indexOf(")",c.length-b)-c.length)&&(a[0]=a[0].slice(0,b),a[2]=c.slice(0,b)),a.slice(0,3))}},filter:{TAG:function(a){var b=a.replace(ba,ca).toLowerCase();return"*"===a?function(){return!0}:function(a){return a.nodeName&&a.nodeName.toLowerCase()===b}},CLASS:function(a){var b=y[a+" "];return b||(b=new RegExp("(^|"+L+")"+a+"("+L+"|$)"))&&y(a,function(a){return b.test("string"==typeof a.className&&a.className||void 0!==a.getAttribute&&a.getAttribute("class")||"")})},ATTR:function(a,b,c){return function(d){var e=ea.attr(d,a);return null==e?"!="===b:!b||(e+="","="===b?e===c:"!="===b?e!==c:"^="===b?c&&0===e.indexOf(c):"*="===b?c&&e.indexOf(c)>-1:"$="===b?c&&e.slice(-c.length)===c:"~="===b?(" "+e.replace(P," ")+" ").indexOf(c)>-1:"|="===b&&(e===c||e.slice(0,c.length+1)===c+"-"))}},CHILD:function(a,b,c,d,e){var f="nth"!==a.slice(0,3),g="last"!==a.slice(-4),h="of-type"===b;return 1===d&&0===e?function(a){return!!a.parentNode}:function(b,c,i){var j,k,l,m,n,o,p=f!==g?"nextSibling":"previousSibling",q=b.parentNode,r=h&&b.nodeName.toLowerCase(),s=!i&&!h,t=!1;if(q){if(f){while(p){m=b;while(m=m[p])if(h?m.nodeName.toLowerCase()===r:1===m.nodeType)return!1;o=p="only"===a&&!o&&"nextSibling"}return!0}if(o=[g?q.firstChild:q.lastChild],g&&s){m=q,l=m[u]||(m[u]={}),k=l[m.uniqueID]||(l[m.uniqueID]={}),j=k[a]||[],n=j[0]===w&&j[1],t=n&&j[2],m=n&&q.childNodes[n];while(m=++n&&m&&m[p]||(t=n=0)||o.pop())if(1===m.nodeType&&++t&&m===b){k[a]=[w,n,t];break}}else if(s&&(m=b,l=m[u]||(m[u]={}),k=l[m.uniqueID]||(l[m.uniqueID]={}),j=k[a]||[],n=j[0]===w&&j[1],t=n),!1===t)while(m=++n&&m&&m[p]||(t=n=0)||o.pop())if((h?m.nodeName.toLowerCase()===r:1===m.nodeType)&&++t&&(s&&(l=m[u]||(m[u]={}),k=l[m.uniqueID]||(l[m.uniqueID]={}),k[a]=[w,t]),m===b))break;return(t-=e)===d||t%d==0&&t/d>=0}}},PSEUDO:function(a,b){var c,e=d.pseudos[a]||d.setFilters[a.toLowerCase()]||ea.error("unsupported pseudo: "+a);return e[u]?e(b):e.length>1?(c=[a,a,"",b],d.setFilters.hasOwnProperty(a.toLowerCase())?ga(function(a,c){var d,f=e(a,b),g=f.length;while(g--)d=J(a,f[g]),a[d]=!(c[d]=f[g])}):function(a){return e(a,0,c)}):e}},pseudos:{not:ga(function(a){var b=[],c=[],d=h(a.replace(Q,"$1"));return d[u]?ga(function(a,b,c,e){var f,g=d(a,null,e,[]),h=a.length;while(h--)(f=g[h])&&(a[h]=!(b[h]=f))}):function(a,e,f){return b[0]=a,d(b,null,f,c),b[0]=null,!c.pop()}}),has:ga(function(a){return function(b){return ea(a,b).length>0}}),contains:ga(function(a){return a=a.replace(ba,ca),function(b){return(b.textContent||b.innerText||e(b)).indexOf(a)>-1}}),lang:ga(function(a){return V.test(a||"")||ea.error("unsupported lang: "+a),a=a.replace(ba,ca).toLowerCase(),function(b){var c;do{if(c=p?b.lang:b.getAttribute("xml:lang")||b.getAttribute("lang"))return(c=c.toLowerCase())===a||0===c.indexOf(a+"-")}while((b=b.parentNode)&&1===b.nodeType);return!1}}),target:function(b){var c=a.location&&a.location.hash;return c&&c.slice(1)===b.id},root:function(a){return a===o},focus:function(a){return a===n.activeElement&&(!n.hasFocus||n.hasFocus())&&!!(a.type||a.href||~a.tabIndex)},enabled:function(a){return!1===a.disabled},disabled:function(a){return!0===a.disabled},checked:function(a){var b=a.nodeName.toLowerCase();return"input"===b&&!!a.checked||"option"===b&&!!a.selected},selected:function(a){return a.parentNode&&a.parentNode.selectedIndex,!0===a.selected},empty:function(a){for(a=a.firstChild;a;a=a.nextSibling)if(a.nodeType<6)return!1;return!0},parent:function(a){return!d.pseudos.empty(a)},header:function(a){return Y.test(a.nodeName)},input:function(a){return X.test(a.nodeName)},button:function(a){var b=a.nodeName.toLowerCase();return"input"===b&&"button"===a.type||"button"===b},text:function(a){var b;return"input"===a.nodeName.toLowerCase()&&"text"===a.type&&(null==(b=a.getAttribute("type"))||"text"===b.toLowerCase())},first:ma(function(){return[0]}),last:ma(function(a,b){return[b-1]}),eq:ma(function(a,b,c){return[c<0?c+b:c]}),even:ma(function(a,b){for(var c=0;c<b;c+=2)a.push(c);return a}),odd:ma(function(a,b){for(var c=1;c<b;c+=2)a.push(c);return a}),lt:ma(function(a,b,c){for(var d=c<0?c+b:c;--d>=0;)a.push(d);return a}),gt:ma(function(a,b,c){for(var d=c<0?c+b:c;++d<b;)a.push(d);return a})}},d.pseudos.nth=d.pseudos.eq;for(b in{radio:!0,checkbox:!0,file:!0,password:!0,image:!0})d.pseudos[b]=ka(b);for(b in{submit:!0,reset:!0})d.pseudos[b]=la(b);function oa(){}oa.prototype=d.filters=d.pseudos,d.setFilters=new oa,g=ea.tokenize=function(a,b){var c,e,f,g,h,i,j,k=z[a+" "];if(k)return b?0:k.slice(0);h=a,i=[],j=d.preFilter;while(h){c&&!(e=R.exec(h))||(e&&(h=h.slice(e[0].length)||h),i.push(f=[])),c=!1,(e=S.exec(h))&&(c=e.shift(),f.push({value:c,type:e[0].replace(Q," ")}),h=h.slice(c.length));for(g in d.filter)!(e=W[g].exec(h))||j[g]&&!(e=j[g](e))||(c=e.shift(),f.push({value:c,type:g,matches:e}),h=h.slice(c.length));if(!c)break}return b?h.length:h?ea.error(a):z(a,i).slice(0)};function pa(a){for(var b=0,c=a.length,d="";b<c;b++)d+=a[b].value;return d}function qa(a,b,c){var d=b.dir,e=c&&"parentNode"===d,f=x++;return b.first?function(b,c,f){while(b=b[d])if(1===b.nodeType||e)return a(b,c,f)}:function(b,c,g){var h,i,j,k=[w,f];if(g){while(b=b[d])if((1===b.nodeType||e)&&a(b,c,g))return!0}else while(b=b[d])if(1===b.nodeType||e){if(j=b[u]||(b[u]={}),i=j[b.uniqueID]||(j[b.uniqueID]={}),(h=i[d])&&h[0]===w&&h[1]===f)return k[2]=h[2];if(i[d]=k,k[2]=a(b,c,g))return!0}}}function ra(a){return a.length>1?function(b,c,d){var e=a.length;while(e--)if(!a[e](b,c,d))return!1;return!0}:a[0]}function sa(a,b,c){for(var d=0,e=b.length;d<e;d++)ea(a,b[d],c);return c}function ta(a,b,c,d,e){for(var f,g=[],h=0,i=a.length,j=null!=b;h<i;h++)(f=a[h])&&(c&&!c(f,d,e)||(g.push(f),j&&b.push(h)));return g}function ua(a,b,c,d,e,f){return d&&!d[u]&&(d=ua(d)),e&&!e[u]&&(e=ua(e,f)),ga(function(f,g,h,i){var j,k,l,m=[],n=[],o=g.length,p=f||sa(b||"*",h.nodeType?[h]:h,[]),q=!a||!f&&b?p:ta(p,m,a,h,i),r=c?e||(f?a:o||d)?[]:g:q;if(c&&c(q,r,h,i),d){j=ta(r,n),d(j,[],h,i),k=j.length;while(k--)(l=j[k])&&(r[n[k]]=!(q[n[k]]=l))}if(f){if(e||a){if(e){j=[],k=r.length;while(k--)(l=r[k])&&j.push(q[k]=l);e(null,r=[],j,i)}k=r.length;while(k--)(l=r[k])&&(j=e?J(f,l):m[k])>-1&&(f[j]=!(g[j]=l))}}else r=ta(r===g?r.splice(o,r.length):r),e?e(null,g,r,i):H.apply(g,r)})}function va(a){for(var b,c,e,f=a.length,g=d.relative[a[0].type],h=g||d.relative[" "],i=g?1:0,k=qa(function(a){return a===b},h,!0),l=qa(function(a){return J(b,a)>-1},h,!0),m=[function(a,c,d){var e=!g&&(d||c!==j)||((b=c).nodeType?k(a,c,d):l(a,c,d));return b=null,e}];i<f;i++)if(c=d.relative[a[i].type])m=[qa(ra(m),c)];else{if(c=d.filter[a[i].type].apply(null,a[i].matches),c[u]){for(e=++i;e<f;e++)if(d.relative[a[e].type])break;return ua(i>1&&ra(m),i>1&&pa(a.slice(0,i-1).concat({value:" "===a[i-2].type?"*":""})).replace(Q,"$1"),c,i<e&&va(a.slice(i,e)),e<f&&va(a=a.slice(e)),e<f&&pa(a))}m.push(c)}return ra(m)}function wa(a,b){var c=b.length>0,e=a.length>0,f=function(f,g,h,i,k){var l,o,q,r=0,s="0",t=f&&[],u=[],v=j,x=f||e&&d.find.TAG("*",k),y=w+=null==v?1:Math.random()||.1,z=x.length;for(k&&(j=g===n||g||k);s!==z&&null!=(l=x[s]);s++){if(e&&l){o=0,g||l.ownerDocument===n||(m(l),h=!p);while(q=a[o++])if(q(l,g||n,h)){i.push(l);break}k&&(w=y)}c&&((l=!q&&l)&&r--,f&&t.push(l))}if(r+=s,c&&s!==r){o=0;while(q=b[o++])q(t,u,g,h);if(f){if(r>0)while(s--)t[s]||u[s]||(u[s]=F.call(i));u=ta(u)}H.apply(i,u),k&&!f&&u.length>0&&r+b.length>1&&ea.uniqueSort(i)}return k&&(w=y,j=v),t};return c?ga(f):f}return h=ea.compile=function(a,b){var c,d=[],e=[],f=A[a+" "];if(!f){b||(b=g(a)),c=b.length;while(c--)f=va(b[c]),f[u]?d.push(f):e.push(f);f=A(a,wa(e,d)),f.selector=a}return f},i=ea.select=function(a,b,e,f){var i,j,k,l,m,n="function"==typeof a&&a,o=!f&&g(a=n.selector||a);if(e=e||[],1===o.length){if(j=o[0]=o[0].slice(0),j.length>2&&"ID"===(k=j[0]).type&&c.getById&&9===b.nodeType&&p&&d.relative[j[1].type]){if(!(b=(d.find.ID(k.matches[0].replace(ba,ca),b)||[])[0]))return e;n&&(b=b.parentNode),a=a.slice(j.shift().value.length)}i=W.needsContext.test(a)?0:j.length;while(i--){if(k=j[i],d.relative[l=k.type])break;if((m=d.find[l])&&(f=m(k.matches[0].replace(ba,ca),_.test(j[0].type)&&na(b.parentNode)||b))){if(j.splice(i,1),!(a=f.length&&pa(j)))return H.apply(e,f),e;break}}}return(n||h(a,o))(f,b,!p,e,!b||_.test(a)&&na(b.parentNode)||b),e},c.sortStable=u.split("").sort(B).join("")===u,c.detectDuplicates=!!l,m(),c.sortDetached=ha(function(a){return 1&a.compareDocumentPosition(n.createElement("div"))}),ha(function(a){return a.innerHTML="<a href='#'></a>","#"===a.firstChild.getAttribute("href")})||ia("type|href|height|width",function(a,b,c){if(!c)return a.getAttribute(b,"type"===b.toLowerCase()?1:2)}),c.attributes&&ha(function(a){return a.innerHTML="<input/>",a.firstChild.setAttribute("value",""),""===a.firstChild.getAttribute("value")})||ia("value",function(a,b,c){if(!c&&"input"===a.nodeName.toLowerCase())return a.defaultValue}),ha(function(a){return null==a.getAttribute("disabled")})||ia(K,function(a,b,c){var d;if(!c)return!0===a[b]?b.toLowerCase():(d=a.getAttributeNode(b))&&d.specified?d.value:null}),ea}(a);n.find=t,n.expr=t.selectors,n.expr[":"]=n.expr.pseudos,n.uniqueSort=n.unique=t.uniqueSort,n.text=t.getText,n.isXMLDoc=t.isXML,n.contains=t.contains;var u=function(a,b,c){var d=[],e=void 0!==c;while((a=a[b])&&9!==a.nodeType)if(1===a.nodeType){if(e&&n(a).is(c))break;d.push(a)}return d},v=function(a,b){for(var c=[];a;a=a.nextSibling)1===a.nodeType&&a!==b&&c.push(a);return c},w=n.expr.match.needsContext,x=/^<([\w-]+)\s*\/?>(?:<\/\1>|)$/,y=/^.[^:#\[\.,]*$/;function z(a,b,c){if(n.isFunction(b))return n.grep(a,function(a,d){return!!b.call(a,d,a)!==c});if(b.nodeType)return n.grep(a,function(a){return a===b!==c});if("string"==typeof b){if(y.test(b))return n.filter(b,a,c);b=n.filter(b,a)}return n.grep(a,function(a){return n.inArray(a,b)>-1!==c})}n.filter=function(a,b,c){var d=b[0];return c&&(a=":not("+a+")"),1===b.length&&1===d.nodeType?n.find.matchesSelector(d,a)?[d]:[]:n.find.matches(a,n.grep(b,function(a){return 1===a.nodeType}))},n.fn.extend({find:function(a){var b,c=[],d=this,e=d.length;if("string"!=typeof a)return this.pushStack(n(a).filter(function(){for(b=0;b<e;b++)if(n.contains(d[b],this))return!0}));for(b=0;b<e;b++)n.find(a,d[b],c);return c=this.pushStack(e>1?n.unique(c):c),c.selector=this.selector?this.selector+" "+a:a,c},filter:function(a){return this.pushStack(z(this,a||[],!1))},not:function(a){return this.pushStack(z(this,a||[],!0))},is:function(a){return!!z(this,"string"==typeof a&&w.test(a)?n(a):a||[],!1).length}});var A,B=/^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]*))$/;(n.fn.init=function(a,b,c){var e,f;if(!a)return this;if(c=c||A,"string"==typeof a){if(!(e="<"===a.charAt(0)&&">"===a.charAt(a.length-1)&&a.length>=3?[null,a,null]:B.exec(a))||!e[1]&&b)return!b||b.jquery?(b||c).find(a):this.constructor(b).find(a);if(e[1]){if(b=b instanceof n?b[0]:b,n.merge(this,n.parseHTML(e[1],b&&b.nodeType?b.ownerDocument||b:d,!0)),x.test(e[1])&&n.isPlainObject(b))for(e in b)n.isFunction(this[e])?this[e](b[e]):this.attr(e,b[e]);return this}if((f=d.getElementById(e[2]))&&f.parentNode){if(f.id!==e[2])return A.find(a);this.length=1,this[0]=f}return this.context=d,this.selector=a,this}return a.nodeType?(this.context=this[0]=a,this.length=1,this):n.isFunction(a)?void 0!==c.ready?c.ready(a):a(n):(void 0!==a.selector&&(this.selector=a.selector,this.context=a.context),n.makeArray(a,this))}).prototype=n.fn,A=n(d);var C=/^(?:parents|prev(?:Until|All))/,D={children:!0,contents:!0,next:!0,prev:!0};n.fn.extend({has:function(a){var b,c=n(a,this),d=c.length;return this.filter(function(){for(b=0;b<d;b++)if(n.contains(this,c[b]))return!0})},closest:function(a,b){for(var c,d=0,e=this.length,f=[],g=w.test(a)||"string"!=typeof a?n(a,b||this.context):0;d<e;d++)for(c=this[d];c&&c!==b;c=c.parentNode)if(c.nodeType<11&&(g?g.index(c)>-1:1===c.nodeType&&n.find.matchesSelector(c,a))){f.push(c);break}return this.pushStack(f.length>1?n.uniqueSort(f):f)},index:function(a){return a?"string"==typeof a?n.inArray(this[0],n(a)):n.inArray(a.jquery?a[0]:a,this):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(a,b){return this.pushStack(n.uniqueSort(n.merge(this.get(),n(a,b))))},addBack:function(a){return this.add(null==a?this.prevObject:this.prevObject.filter(a))}});function E(a,b){do{a=a[b]}while(a&&1!==a.nodeType);return a}n.each({parent:function(a){var b=a.parentNode;return b&&11!==b.nodeType?b:null},parents:function(a){return u(a,"parentNode")},parentsUntil:function(a,b,c){return u(a,"parentNode",c)},next:function(a){return E(a,"nextSibling")},prev:function(a){return E(a,"previousSibling")},nextAll:function(a){return u(a,"nextSibling")},prevAll:function(a){return u(a,"previousSibling")},nextUntil:function(a,b,c){return u(a,"nextSibling",c)},prevUntil:function(a,b,c){return u(a,"previousSibling",c)},siblings:function(a){return v((a.parentNode||{}).firstChild,a)},children:function(a){return v(a.firstChild)},contents:function(a){return n.nodeName(a,"iframe")?a.contentDocument||a.contentWindow.document:n.merge([],a.childNodes)}},function(a,b){n.fn[a]=function(c,d){var e=n.map(this,b,c);return"Until"!==a.slice(-5)&&(d=c),d&&"string"==typeof d&&(e=n.filter(d,e)),this.length>1&&(D[a]||(e=n.uniqueSort(e)),C.test(a)&&(e=e.reverse())),this.pushStack(e)}});var F=/\S+/g;function G(a){var b={};return n.each(a.match(F)||[],function(a,c){b[c]=!0}),b}n.Callbacks=function(a){a="string"==typeof a?G(a):n.extend({},a);var b,c,d,e,f=[],g=[],h=-1,i=function(){for(e=a.once,d=b=!0;g.length;h=-1){c=g.shift();while(++h<f.length)!1===f[h].apply(c[0],c[1])&&a.stopOnFalse&&(h=f.length,c=!1)}a.memory||(c=!1),b=!1,e&&(f=c?[]:"")},j={add:function(){return f&&(c&&!b&&(h=f.length-1,g.push(c)),function b(c){n.each(c,function(c,d){n.isFunction(d)?a.unique&&j.has(d)||f.push(d):d&&d.length&&"string"!==n.type(d)&&b(d)})}(arguments),c&&!b&&i()),this},remove:function(){return n.each(arguments,function(a,b){var c;while((c=n.inArray(b,f,c))>-1)f.splice(c,1),c<=h&&h--}),this},has:function(a){return a?n.inArray(a,f)>-1:f.length>0},empty:function(){return f&&(f=[]),this},disable:function(){return e=g=[],f=c="",this},disabled:function(){return!f},lock:function(){return e=!0,c||j.disable(),this},locked:function(){return!!e},fireWith:function(a,c){return e||(c=c||[],c=[a,c.slice?c.slice():c],g.push(c),b||i()),this},fire:function(){return j.fireWith(this,arguments),this},fired:function(){return!!d}};return j},n.extend({Deferred:function(a){var b=[["resolve","done",n.Callbacks("once memory"),"resolved"],["reject","fail",n.Callbacks("once memory"),"rejected"],["notify","progress",n.Callbacks("memory")]],c="pending",d={state:function(){return c},always:function(){return e.done(arguments).fail(arguments),this},then:function(){var a=arguments;return n.Deferred(function(c){n.each(b,function(b,f){var g=n.isFunction(a[b])&&a[b];e[f[1]](function(){var a=g&&g.apply(this,arguments);a&&n.isFunction(a.promise)?a.promise().progress(c.notify).done(c.resolve).fail(c.reject):c[f[0]+"With"](this===d?c.promise():this,g?[a]:arguments)})}),a=null}).promise()},promise:function(a){return null!=a?n.extend(a,d):d}},e={};return d.pipe=d.then,n.each(b,function(a,f){var g=f[2],h=f[3];d[f[1]]=g.add,h&&g.add(function(){c=h},b[1^a][2].disable,b[2][2].lock),e[f[0]]=function(){return e[f[0]+"With"](this===e?d:this,arguments),this},e[f[0]+"With"]=g.fireWith}),d.promise(e),a&&a.call(e,e),e},when:function(a){var b=0,c=e.call(arguments),d=c.length,f=1!==d||a&&n.isFunction(a.promise)?d:0,g=1===f?a:n.Deferred(),h=function(a,b,c){return function(d){b[a]=this,c[a]=arguments.length>1?e.call(arguments):d,c===i?g.notifyWith(b,c):--f||g.resolveWith(b,c)}},i,j,k;if(d>1)for(i=new Array(d),j=new Array(d),k=new Array(d);b<d;b++)c[b]&&n.isFunction(c[b].promise)?c[b].promise().progress(h(b,j,i)).done(h(b,k,c)).fail(g.reject):--f;return f||g.resolveWith(k,c),g.promise()}});var H;n.fn.ready=function(a){return n.ready.promise().done(a),this},n.extend({isReady:!1,readyWait:1,holdReady:function(a){a?n.readyWait++:n.ready(!0)},ready:function(a){(!0===a?--n.readyWait:n.isReady)||(n.isReady=!0,!0!==a&&--n.readyWait>0||(H.resolveWith(d,[n]),n.fn.triggerHandler&&(n(d).triggerHandler("ready"),n(d).off("ready"))))}});function I(){d.addEventListener?(d.removeEventListener("DOMContentLoaded",J),a.removeEventListener("load",J)):(d.detachEvent("onreadystatechange",J),a.detachEvent("onload",J))}function J(){(d.addEventListener||"load"===a.event.type||"complete"===d.readyState)&&(I(),n.ready())}n.ready.promise=function(b){if(!H)if(H=n.Deferred(),"complete"===d.readyState||"loading"!==d.readyState&&!d.documentElement.doScroll)a.setTimeout(n.ready);else if(d.addEventListener)d.addEventListener("DOMContentLoaded",J),a.addEventListener("load",J);else{d.attachEvent("onreadystatechange",J),a.attachEvent("onload",J);var c=!1;try{c=null==a.frameElement&&d.documentElement}catch(e){}c&&c.doScroll&&function b(){if(!n.isReady){try{c.doScroll("left")}catch(e){return a.setTimeout(b,50)}I(),n.ready()}}()}return H.promise(b)},n.ready.promise();var K;for(K in n(l))break;l.ownFirst="0"===K,l.inlineBlockNeedsLayout=!1,n(function(){var a,b,c,e;(c=d.getElementsByTagName("body")[0])&&c.style&&(b=d.createElement("div"),e=d.createElement("div"),e.style.cssText="position:absolute;border:0;width:0;height:0;top:0;left:-9999px",c.appendChild(e).appendChild(b),void 0!==b.style.zoom&&(b.style.cssText="display:inline;margin:0;border:0;padding:1px;width:1px;zoom:1",l.inlineBlockNeedsLayout=a=3===b.offsetWidth,a&&(c.style.zoom=1)),c.removeChild(e))}),function(){var a=d.createElement("div");l.deleteExpando=!0;try{delete a.test}catch(b){l.deleteExpando=!1}a=null}();var L=function(a){var b=n.noData[(a.nodeName+" ").toLowerCase()],c=+a.nodeType||1;return(1===c||9===c)&&(!b||!0!==b&&a.getAttribute("classid")===b)},M=/^(?:\{[\w\W]*\}|\[[\w\W]*\])$/,N=/([A-Z])/g;function O(a,b,c){if(void 0===c&&1===a.nodeType){var d="data-"+b.replace(N,"-$1").toLowerCase();if("string"==typeof(c=a.getAttribute(d))){try{c="true"===c||"false"!==c&&("null"===c?null:+c+""===c?+c:M.test(c)?n.parseJSON(c):c)}catch(e){}n.data(a,b,c)}else c=void 0}return c}function P(a){var b
+;for(b in a)if(("data"!==b||!n.isEmptyObject(a[b]))&&"toJSON"!==b)return!1;return!0}function Q(a,b,d,e){if(L(a)){var f,g,h=n.expando,i=a.nodeType,j=i?n.cache:a,k=i?a[h]:a[h]&&h;if(k&&j[k]&&(e||j[k].data)||void 0!==d||"string"!=typeof b)return k||(k=i?a[h]=c.pop()||n.guid++:h),j[k]||(j[k]=i?{}:{toJSON:n.noop}),"object"!=typeof b&&"function"!=typeof b||(e?j[k]=n.extend(j[k],b):j[k].data=n.extend(j[k].data,b)),g=j[k],e||(g.data||(g.data={}),g=g.data),void 0!==d&&(g[n.camelCase(b)]=d),"string"==typeof b?null==(f=g[b])&&(f=g[n.camelCase(b)]):f=g,f}}function R(a,b,c){if(L(a)){var d,e,f=a.nodeType,g=f?n.cache:a,h=f?a[n.expando]:n.expando;if(g[h]){if(b&&(d=c?g[h]:g[h].data)){n.isArray(b)?b=b.concat(n.map(b,n.camelCase)):b in d?b=[b]:(b=n.camelCase(b),b=b in d?[b]:b.split(" ")),e=b.length;while(e--)delete d[b[e]];if(c?!P(d):!n.isEmptyObject(d))return}(c||(delete g[h].data,P(g[h])))&&(f?n.cleanData([a],!0):l.deleteExpando||g!=g.window?delete g[h]:g[h]=void 0)}}}n.extend({cache:{},noData:{"applet ":!0,"embed ":!0,"object ":"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"},hasData:function(a){return!!(a=a.nodeType?n.cache[a[n.expando]]:a[n.expando])&&!P(a)},data:function(a,b,c){return Q(a,b,c)},removeData:function(a,b){return R(a,b)},_data:function(a,b,c){return Q(a,b,c,!0)},_removeData:function(a,b){return R(a,b,!0)}}),n.fn.extend({data:function(a,b){var c,d,e,f=this[0],g=f&&f.attributes;if(void 0===a){if(this.length&&(e=n.data(f),1===f.nodeType&&!n._data(f,"parsedAttrs"))){c=g.length;while(c--)g[c]&&(d=g[c].name,0===d.indexOf("data-")&&(d=n.camelCase(d.slice(5)),O(f,d,e[d])));n._data(f,"parsedAttrs",!0)}return e}return"object"==typeof a?this.each(function(){n.data(this,a)}):arguments.length>1?this.each(function(){n.data(this,a,b)}):f?O(f,a,n.data(f,a)):void 0},removeData:function(a){return this.each(function(){n.removeData(this,a)})}}),n.extend({queue:function(a,b,c){var d;if(a)return b=(b||"fx")+"queue",d=n._data(a,b),c&&(!d||n.isArray(c)?d=n._data(a,b,n.makeArray(c)):d.push(c)),d||[]},dequeue:function(a,b){b=b||"fx";var c=n.queue(a,b),d=c.length,e=c.shift(),f=n._queueHooks(a,b),g=function(){n.dequeue(a,b)};"inprogress"===e&&(e=c.shift(),d--),e&&("fx"===b&&c.unshift("inprogress"),delete f.stop,e.call(a,g,f)),!d&&f&&f.empty.fire()},_queueHooks:function(a,b){var c=b+"queueHooks";return n._data(a,c)||n._data(a,c,{empty:n.Callbacks("once memory").add(function(){n._removeData(a,b+"queue"),n._removeData(a,c)})})}}),n.fn.extend({queue:function(a,b){var c=2;return"string"!=typeof a&&(b=a,a="fx",c--),arguments.length<c?n.queue(this[0],a):void 0===b?this:this.each(function(){var c=n.queue(this,a,b);n._queueHooks(this,a),"fx"===a&&"inprogress"!==c[0]&&n.dequeue(this,a)})},dequeue:function(a){return this.each(function(){n.dequeue(this,a)})},clearQueue:function(a){return this.queue(a||"fx",[])},promise:function(a,b){var c,d=1,e=n.Deferred(),f=this,g=this.length,h=function(){--d||e.resolveWith(f,[f])};"string"!=typeof a&&(b=a,a=void 0),a=a||"fx";while(g--)(c=n._data(f[g],a+"queueHooks"))&&c.empty&&(d++,c.empty.add(h));return h(),e.promise(b)}}),function(){var a;l.shrinkWrapBlocks=function(){if(null!=a)return a;a=!1;var b,c,e;return(c=d.getElementsByTagName("body")[0])&&c.style?(b=d.createElement("div"),e=d.createElement("div"),e.style.cssText="position:absolute;border:0;width:0;height:0;top:0;left:-9999px",c.appendChild(e).appendChild(b),void 0!==b.style.zoom&&(b.style.cssText="-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box;display:block;margin:0;border:0;padding:1px;width:1px;zoom:1",b.appendChild(d.createElement("div")).style.width="5px",a=3!==b.offsetWidth),c.removeChild(e),a):void 0}}();var S=/[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/.source,T=new RegExp("^(?:([+-])=|)("+S+")([a-z%]*)$","i"),U=["Top","Right","Bottom","Left"],V=function(a,b){return a=b||a,"none"===n.css(a,"display")||!n.contains(a.ownerDocument,a)};function W(a,b,c,d){var e,f=1,g=20,h=d?function(){return d.cur()}:function(){return n.css(a,b,"")},i=h(),j=c&&c[3]||(n.cssNumber[b]?"":"px"),k=(n.cssNumber[b]||"px"!==j&&+i)&&T.exec(n.css(a,b));if(k&&k[3]!==j){j=j||k[3],c=c||[],k=+i||1;do{f=f||".5",k/=f,n.style(a,b,k+j)}while(f!==(f=h()/i)&&1!==f&&--g)}return c&&(k=+k||+i||0,e=c[1]?k+(c[1]+1)*c[2]:+c[2],d&&(d.unit=j,d.start=k,d.end=e)),e}var X=function(a,b,c,d,e,f,g){var h=0,i=a.length,j=null==c;if("object"===n.type(c)){e=!0;for(h in c)X(a,b,h,c[h],!0,f,g)}else if(void 0!==d&&(e=!0,n.isFunction(d)||(g=!0),j&&(g?(b.call(a,d),b=null):(j=b,b=function(a,b,c){return j.call(n(a),c)})),b))for(;h<i;h++)b(a[h],c,g?d:d.call(a[h],h,b(a[h],c)));return e?a:j?b.call(a):i?b(a[0],c):f},Y=/^(?:checkbox|radio)$/i,Z=/<([\w:-]+)/,$=/^$|\/(?:java|ecma)script/i,_=/^\s+/,aa="abbr|article|aside|audio|bdi|canvas|data|datalist|details|dialog|figcaption|figure|footer|header|hgroup|main|mark|meter|nav|output|picture|progress|section|summary|template|time|video";function ba(a){var b=aa.split("|"),c=a.createDocumentFragment();if(c.createElement)while(b.length)c.createElement(b.pop());return c}!function(){var a=d.createElement("div"),b=d.createDocumentFragment(),c=d.createElement("input");a.innerHTML="  <link/><table></table><a href='/a'>a</a><input type='checkbox'/>",l.leadingWhitespace=3===a.firstChild.nodeType,l.tbody=!a.getElementsByTagName("tbody").length,l.htmlSerialize=!!a.getElementsByTagName("link").length,l.html5Clone="<:nav></:nav>"!==d.createElement("nav").cloneNode(!0).outerHTML,c.type="checkbox",c.checked=!0,b.appendChild(c),l.appendChecked=c.checked,a.innerHTML="<textarea>x</textarea>",l.noCloneChecked=!!a.cloneNode(!0).lastChild.defaultValue,b.appendChild(a),c=d.createElement("input"),c.setAttribute("type","radio"),c.setAttribute("checked","checked"),c.setAttribute("name","t"),a.appendChild(c),l.checkClone=a.cloneNode(!0).cloneNode(!0).lastChild.checked,l.noCloneEvent=!!a.addEventListener,a[n.expando]=1,l.attributes=!a.getAttribute(n.expando)}();var ca={option:[1,"<select multiple='multiple'>","</select>"],legend:[1,"<fieldset>","</fieldset>"],area:[1,"<map>","</map>"],param:[1,"<object>","</object>"],thead:[1,"<table>","</table>"],tr:[2,"<table><tbody>","</tbody></table>"],col:[2,"<table><tbody></tbody><colgroup>","</colgroup></table>"],td:[3,"<table><tbody><tr>","</tr></tbody></table>"],_default:l.htmlSerialize?[0,"",""]:[1,"X<div>","</div>"]};ca.optgroup=ca.option,ca.tbody=ca.tfoot=ca.colgroup=ca.caption=ca.thead,ca.th=ca.td;function da(a,b){var c,d,e=0,f=void 0!==a.getElementsByTagName?a.getElementsByTagName(b||"*"):void 0!==a.querySelectorAll?a.querySelectorAll(b||"*"):void 0;if(!f)for(f=[],c=a.childNodes||a;null!=(d=c[e]);e++)!b||n.nodeName(d,b)?f.push(d):n.merge(f,da(d,b));return void 0===b||b&&n.nodeName(a,b)?n.merge([a],f):f}function ea(a,b){for(var c,d=0;null!=(c=a[d]);d++)n._data(c,"globalEval",!b||n._data(b[d],"globalEval"))}var fa=/<|&#?\w+;/,ga=/<tbody/i;function ha(a){Y.test(a.type)&&(a.defaultChecked=a.checked)}function ia(a,b,c,d,e){for(var f,g,h,i,j,k,m,o=a.length,p=ba(b),q=[],r=0;r<o;r++)if((g=a[r])||0===g)if("object"===n.type(g))n.merge(q,g.nodeType?[g]:g);else if(fa.test(g)){i=i||p.appendChild(b.createElement("div")),j=(Z.exec(g)||["",""])[1].toLowerCase(),m=ca[j]||ca._default,i.innerHTML=m[1]+n.htmlPrefilter(g)+m[2],f=m[0];while(f--)i=i.lastChild;if(!l.leadingWhitespace&&_.test(g)&&q.push(b.createTextNode(_.exec(g)[0])),!l.tbody){g="table"!==j||ga.test(g)?"<table>"!==m[1]||ga.test(g)?0:i:i.firstChild,f=g&&g.childNodes.length;while(f--)n.nodeName(k=g.childNodes[f],"tbody")&&!k.childNodes.length&&g.removeChild(k)}n.merge(q,i.childNodes),i.textContent="";while(i.firstChild)i.removeChild(i.firstChild);i=p.lastChild}else q.push(b.createTextNode(g));i&&p.removeChild(i),l.appendChecked||n.grep(da(q,"input"),ha),r=0;while(g=q[r++])if(d&&n.inArray(g,d)>-1)e&&e.push(g);else if(h=n.contains(g.ownerDocument,g),i=da(p.appendChild(g),"script"),h&&ea(i),c){f=0;while(g=i[f++])$.test(g.type||"")&&c.push(g)}return i=null,p}!function(){var b,c,e=d.createElement("div");for(b in{submit:!0,change:!0,focusin:!0})c="on"+b,(l[b]=c in a)||(e.setAttribute(c,"t"),l[b]=!1===e.attributes[c].expando);e=null}();var ja=/^(?:input|select|textarea)$/i,ka=/^key/,la=/^(?:mouse|pointer|contextmenu|drag|drop)|click/,ma=/^(?:focusinfocus|focusoutblur)$/,na=/^([^.]*)(?:\.(.+)|)/;function oa(){return!0}function pa(){return!1}function qa(){try{return d.activeElement}catch(a){}}function ra(a,b,c,d,e,f){var g,h;if("object"==typeof b){"string"!=typeof c&&(d=d||c,c=void 0);for(h in b)ra(a,h,c,d,b[h],f);return a}if(null==d&&null==e?(e=c,d=c=void 0):null==e&&("string"==typeof c?(e=d,d=void 0):(e=d,d=c,c=void 0)),!1===e)e=pa;else if(!e)return a;return 1===f&&(g=e,e=function(a){return n().off(a),g.apply(this,arguments)},e.guid=g.guid||(g.guid=n.guid++)),a.each(function(){n.event.add(this,b,e,d,c)})}n.event={global:{},add:function(a,b,c,d,e){var f,g,h,i,j,k,l,m,o,p,q,r=n._data(a);if(r){c.handler&&(i=c,c=i.handler,e=i.selector),c.guid||(c.guid=n.guid++),(g=r.events)||(g=r.events={}),(k=r.handle)||(k=r.handle=function(a){return void 0===n||a&&n.event.triggered===a.type?void 0:n.event.dispatch.apply(k.elem,arguments)},k.elem=a),b=(b||"").match(F)||[""],h=b.length;while(h--)f=na.exec(b[h])||[],o=q=f[1],p=(f[2]||"").split(".").sort(),o&&(j=n.event.special[o]||{},o=(e?j.delegateType:j.bindType)||o,j=n.event.special[o]||{},l=n.extend({type:o,origType:q,data:d,handler:c,guid:c.guid,selector:e,needsContext:e&&n.expr.match.needsContext.test(e),namespace:p.join(".")},i),(m=g[o])||(m=g[o]=[],m.delegateCount=0,j.setup&&!1!==j.setup.call(a,d,p,k)||(a.addEventListener?a.addEventListener(o,k,!1):a.attachEvent&&a.attachEvent("on"+o,k))),j.add&&(j.add.call(a,l),l.handler.guid||(l.handler.guid=c.guid)),e?m.splice(m.delegateCount++,0,l):m.push(l),n.event.global[o]=!0);a=null}},remove:function(a,b,c,d,e){var f,g,h,i,j,k,l,m,o,p,q,r=n.hasData(a)&&n._data(a);if(r&&(k=r.events)){b=(b||"").match(F)||[""],j=b.length;while(j--)if(h=na.exec(b[j])||[],o=q=h[1],p=(h[2]||"").split(".").sort(),o){l=n.event.special[o]||{},o=(d?l.delegateType:l.bindType)||o,m=k[o]||[],h=h[2]&&new RegExp("(^|\\.)"+p.join("\\.(?:.*\\.|)")+"(\\.|$)"),i=f=m.length;while(f--)g=m[f],!e&&q!==g.origType||c&&c.guid!==g.guid||h&&!h.test(g.namespace)||d&&d!==g.selector&&("**"!==d||!g.selector)||(m.splice(f,1),g.selector&&m.delegateCount--,l.remove&&l.remove.call(a,g));i&&!m.length&&(l.teardown&&!1!==l.teardown.call(a,p,r.handle)||n.removeEvent(a,o,r.handle),delete k[o])}else for(o in k)n.event.remove(a,o+b[j],c,d,!0);n.isEmptyObject(k)&&(delete r.handle,n._removeData(a,"events"))}},trigger:function(b,c,e,f){var g,h,i,j,l,m,o,p=[e||d],q=k.call(b,"type")?b.type:b,r=k.call(b,"namespace")?b.namespace.split("."):[];if(i=m=e=e||d,3!==e.nodeType&&8!==e.nodeType&&!ma.test(q+n.event.triggered)&&(q.indexOf(".")>-1&&(r=q.split("."),q=r.shift(),r.sort()),h=q.indexOf(":")<0&&"on"+q,b=b[n.expando]?b:new n.Event(q,"object"==typeof b&&b),b.isTrigger=f?2:3,b.namespace=r.join("."),b.rnamespace=b.namespace?new RegExp("(^|\\.)"+r.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,b.result=void 0,b.target||(b.target=e),c=null==c?[b]:n.makeArray(c,[b]),l=n.event.special[q]||{},f||!l.trigger||!1!==l.trigger.apply(e,c))){if(!f&&!l.noBubble&&!n.isWindow(e)){for(j=l.delegateType||q,ma.test(j+q)||(i=i.parentNode);i;i=i.parentNode)p.push(i),m=i;m===(e.ownerDocument||d)&&p.push(m.defaultView||m.parentWindow||a)}o=0;while((i=p[o++])&&!b.isPropagationStopped())b.type=o>1?j:l.bindType||q,g=(n._data(i,"events")||{})[b.type]&&n._data(i,"handle"),g&&g.apply(i,c),(g=h&&i[h])&&g.apply&&L(i)&&(b.result=g.apply(i,c),!1===b.result&&b.preventDefault());if(b.type=q,!f&&!b.isDefaultPrevented()&&(!l._default||!1===l._default.apply(p.pop(),c))&&L(e)&&h&&e[q]&&!n.isWindow(e)){m=e[h],m&&(e[h]=null),n.event.triggered=q;try{e[q]()}catch(s){}n.event.triggered=void 0,m&&(e[h]=m)}return b.result}},dispatch:function(a){a=n.event.fix(a);var b,c,d,f,g,h=[],i=e.call(arguments),j=(n._data(this,"events")||{})[a.type]||[],k=n.event.special[a.type]||{};if(i[0]=a,a.delegateTarget=this,!k.preDispatch||!1!==k.preDispatch.call(this,a)){h=n.event.handlers.call(this,a,j),b=0;while((f=h[b++])&&!a.isPropagationStopped()){a.currentTarget=f.elem,c=0;while((g=f.handlers[c++])&&!a.isImmediatePropagationStopped())a.rnamespace&&!a.rnamespace.test(g.namespace)||(a.handleObj=g,a.data=g.data,void 0!==(d=((n.event.special[g.origType]||{}).handle||g.handler).apply(f.elem,i))&&!1===(a.result=d)&&(a.preventDefault(),a.stopPropagation()))}return k.postDispatch&&k.postDispatch.call(this,a),a.result}},handlers:function(a,b){var c,d,e,f,g=[],h=b.delegateCount,i=a.target;if(h&&i.nodeType&&("click"!==a.type||isNaN(a.button)||a.button<1))for(;i!=this;i=i.parentNode||this)if(1===i.nodeType&&(!0!==i.disabled||"click"!==a.type)){for(d=[],c=0;c<h;c++)f=b[c],e=f.selector+" ",void 0===d[e]&&(d[e]=f.needsContext?n(e,this).index(i)>-1:n.find(e,this,null,[i]).length),d[e]&&d.push(f);d.length&&g.push({elem:i,handlers:d})}return h<b.length&&g.push({elem:this,handlers:b.slice(h)}),g},fix:function(a){if(a[n.expando])return a;var b,c,e,f=a.type,g=a,h=this.fixHooks[f];h||(this.fixHooks[f]=h=la.test(f)?this.mouseHooks:ka.test(f)?this.keyHooks:{}),e=h.props?this.props.concat(h.props):this.props,a=new n.Event(g),b=e.length;while(b--)c=e[b],a[c]=g[c];return a.target||(a.target=g.srcElement||d),3===a.target.nodeType&&(a.target=a.target.parentNode),a.metaKey=!!a.metaKey,h.filter?h.filter(a,g):a},props:"altKey bubbles cancelable ctrlKey currentTarget detail eventPhase metaKey relatedTarget shiftKey target timeStamp view which".split(" "),fixHooks:{},keyHooks:{props:"char charCode key keyCode".split(" "),filter:function(a,b){return null==a.which&&(a.which=null!=b.charCode?b.charCode:b.keyCode),a}},mouseHooks:{props:"button buttons clientX clientY fromElement offsetX offsetY pageX pageY screenX screenY toElement".split(" "),filter:function(a,b){var c,e,f,g=b.button,h=b.fromElement;return null==a.pageX&&null!=b.clientX&&(e=a.target.ownerDocument||d,f=e.documentElement,c=e.body,a.pageX=b.clientX+(f&&f.scrollLeft||c&&c.scrollLeft||0)-(f&&f.clientLeft||c&&c.clientLeft||0),a.pageY=b.clientY+(f&&f.scrollTop||c&&c.scrollTop||0)-(f&&f.clientTop||c&&c.clientTop||0)),!a.relatedTarget&&h&&(a.relatedTarget=h===a.target?b.toElement:h),a.which||void 0===g||(a.which=1&g?1:2&g?3:4&g?2:0),a}},special:{load:{noBubble:!0},focus:{trigger:function(){if(this!==qa()&&this.focus)try{return this.focus(),!1}catch(a){}},delegateType:"focusin"},blur:{trigger:function(){if(this===qa()&&this.blur)return this.blur(),!1},delegateType:"focusout"},click:{trigger:function(){if(n.nodeName(this,"input")&&"checkbox"===this.type&&this.click)return this.click(),!1},_default:function(a){return n.nodeName(a.target,"a")}},beforeunload:{postDispatch:function(a){void 0!==a.result&&a.originalEvent&&(a.originalEvent.returnValue=a.result)}}},simulate:function(a,b,c){var d=n.extend(new n.Event,c,{type:a,isSimulated:!0});n.event.trigger(d,null,b),d.isDefaultPrevented()&&c.preventDefault()}},n.removeEvent=d.removeEventListener?function(a,b,c){a.removeEventListener&&a.removeEventListener(b,c)}:function(a,b,c){var d="on"+b;a.detachEvent&&(void 0===a[d]&&(a[d]=null),a.detachEvent(d,c))},n.Event=function(a,b){if(!(this instanceof n.Event))return new n.Event(a,b);a&&a.type?(this.originalEvent=a,this.type=a.type,this.isDefaultPrevented=a.defaultPrevented||void 0===a.defaultPrevented&&!1===a.returnValue?oa:pa):this.type=a,b&&n.extend(this,b),this.timeStamp=a&&a.timeStamp||n.now(),this[n.expando]=!0},n.Event.prototype={constructor:n.Event,isDefaultPrevented:pa,isPropagationStopped:pa,isImmediatePropagationStopped:pa,preventDefault:function(){var a=this.originalEvent;this.isDefaultPrevented=oa,a&&(a.preventDefault?a.preventDefault():a.returnValue=!1)},stopPropagation:function(){var a=this.originalEvent;this.isPropagationStopped=oa,a&&!this.isSimulated&&(a.stopPropagation&&a.stopPropagation(),a.cancelBubble=!0)},stopImmediatePropagation:function(){var a=this.originalEvent;this.isImmediatePropagationStopped=oa,a&&a.stopImmediatePropagation&&a.stopImmediatePropagation(),this.stopPropagation()}},n.each({mouseenter:"mouseover",mouseleave:"mouseout",pointerenter:"pointerover",pointerleave:"pointerout"},function(a,b){n.event.special[a]={delegateType:b,bindType:b,handle:function(a){var c,d=this,e=a.relatedTarget,f=a.handleObj;return e&&(e===d||n.contains(d,e))||(a.type=f.origType,c=f.handler.apply(this,arguments),a.type=b),c}}}),l.submit||(n.event.special.submit={setup:function(){if(n.nodeName(this,"form"))return!1;n.event.add(this,"click._submit keypress._submit",function(a){var b=a.target,c=n.nodeName(b,"input")||n.nodeName(b,"button")?n.prop(b,"form"):void 0;c&&!n._data(c,"submit")&&(n.event.add(c,"submit._submit",function(a){a._submitBubble=!0}),n._data(c,"submit",!0))})},postDispatch:function(a){a._submitBubble&&(delete a._submitBubble,this.parentNode&&!a.isTrigger&&n.event.simulate("submit",this.parentNode,a))},teardown:function(){if(n.nodeName(this,"form"))return!1;n.event.remove(this,"._submit")}}),l.change||(n.event.special.change={setup:function(){if(ja.test(this.nodeName))return"checkbox"!==this.type&&"radio"!==this.type||(n.event.add(this,"propertychange._change",function(a){"checked"===a.originalEvent.propertyName&&(this._justChanged=!0)}),n.event.add(this,"click._change",function(a){this._justChanged&&!a.isTrigger&&(this._justChanged=!1),n.event.simulate("change",this,a)})),!1;n.event.add(this,"beforeactivate._change",function(a){var b=a.target;ja.test(b.nodeName)&&!n._data(b,"change")&&(n.event.add(b,"change._change",function(a){!this.parentNode||a.isSimulated||a.isTrigger||n.event.simulate("change",this.parentNode,a)}),n._data(b,"change",!0))})},handle:function(a){var b=a.target;if(this!==b||a.isSimulated||a.isTrigger||"radio"!==b.type&&"checkbox"!==b.type)return a.handleObj.handler.apply(this,arguments)},teardown:function(){return n.event.remove(this,"._change"),!ja.test(this.nodeName)}}),l.focusin||n.each({focus:"focusin",blur:"focusout"},function(a,b){var c=function(a){n.event.simulate(b,a.target,n.event.fix(a))};n.event.special[b]={setup:function(){var d=this.ownerDocument||this,e=n._data(d,b);e||d.addEventListener(a,c,!0),n._data(d,b,(e||0)+1)},teardown:function(){var d=this.ownerDocument||this,e=n._data(d,b)-1;e?n._data(d,b,e):(d.removeEventListener(a,c,!0),n._removeData(d,b))}}}),n.fn.extend({on:function(a,b,c,d){return ra(this,a,b,c,d)},one:function(a,b,c,d){return ra(this,a,b,c,d,1)},off:function(a,b,c){var d,e;if(a&&a.preventDefault&&a.handleObj)return d=a.handleObj,n(a.delegateTarget).off(d.namespace?d.origType+"."+d.namespace:d.origType,d.selector,d.handler),this;if("object"==typeof a){for(e in a)this.off(e,b,a[e]);return this}return!1!==b&&"function"!=typeof b||(c=b,b=void 0),!1===c&&(c=pa),this.each(function(){n.event.remove(this,a,c,b)})},trigger:function(a,b){return this.each(function(){n.event.trigger(a,b,this)})},triggerHandler:function(a,b){var c=this[0];if(c)return n.event.trigger(a,b,c,!0)}});var sa=/ jQuery\d+="(?:null|\d+)"/g,ta=new RegExp("<(?:"+aa+")[\\s/>]","i"),ua=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:-]+)[^>]*)\/>/gi,va=/<script|<style|<link/i,wa=/checked\s*(?:[^=]|=\s*.checked.)/i,xa=/^true\/(.*)/,ya=/^\s*<!(?:\[CDATA\[|--)|(?:\]\]|--)>\s*$/g,za=ba(d),Aa=za.appendChild(d.createElement("div"));function Ba(a,b){return n.nodeName(a,"table")&&n.nodeName(11!==b.nodeType?b:b.firstChild,"tr")?a.getElementsByTagName("tbody")[0]||a.appendChild(a.ownerDocument.createElement("tbody")):a}function Ca(a){return a.type=(null!==n.find.attr(a,"type"))+"/"+a.type,a}function Da(a){var b=xa.exec(a.type);return b?a.type=b[1]:a.removeAttribute("type"),a}function Ea(a,b){if(1===b.nodeType&&n.hasData(a)){var c,d,e,f=n._data(a),g=n._data(b,f),h=f.events;if(h){delete g.handle,g.events={};for(c in h)for(d=0,e=h[c].length;d<e;d++)n.event.add(b,c,h[c][d])}g.data&&(g.data=n.extend({},g.data))}}function Fa(a,b){var c,d,e;if(1===b.nodeType){if(c=b.nodeName.toLowerCase(),!l.noCloneEvent&&b[n.expando]){e=n._data(b);for(d in e.events)n.removeEvent(b,d,e.handle);b.removeAttribute(n.expando)}"script"===c&&b.text!==a.text?(Ca(b).text=a.text,Da(b)):"object"===c?(b.parentNode&&(b.outerHTML=a.outerHTML),l.html5Clone&&a.innerHTML&&!n.trim(b.innerHTML)&&(b.innerHTML=a.innerHTML)):"input"===c&&Y.test(a.type)?(b.defaultChecked=b.checked=a.checked,b.value!==a.value&&(b.value=a.value)):"option"===c?b.defaultSelected=b.selected=a.defaultSelected:"input"!==c&&"textarea"!==c||(b.defaultValue=a.defaultValue)}}function Ga(a,b,c,d){b=f.apply([],b);var e,g,h,i,j,k,m=0,o=a.length,p=o-1,q=b[0],r=n.isFunction(q);if(r||o>1&&"string"==typeof q&&!l.checkClone&&wa.test(q))return a.each(function(e){var f=a.eq(e);r&&(b[0]=q.call(this,e,f.html())),Ga(f,b,c,d)});if(o&&(k=ia(b,a[0].ownerDocument,!1,a,d),e=k.firstChild,1===k.childNodes.length&&(k=e),e||d)){for(i=n.map(da(k,"script"),Ca),h=i.length;m<o;m++)g=k,m!==p&&(g=n.clone(g,!0,!0),h&&n.merge(i,da(g,"script"))),c.call(a[m],g,m);if(h)for(j=i[i.length-1].ownerDocument,n.map(i,Da),m=0;m<h;m++)g=i[m],$.test(g.type||"")&&!n._data(g,"globalEval")&&n.contains(j,g)&&(g.src?n._evalUrl&&n._evalUrl(g.src):n.globalEval((g.text||g.textContent||g.innerHTML||"").replace(ya,"")));k=e=null}return a}function Ha(a,b,c){for(var d,e=b?n.filter(b,a):a,f=0;null!=(d=e[f]);f++)c||1!==d.nodeType||n.cleanData(da(d)),d.parentNode&&(c&&n.contains(d.ownerDocument,d)&&ea(da(d,"script")),d.parentNode.removeChild(d));return a}n.extend({htmlPrefilter:function(a){return a.replace(ua,"<$1></$2>")},clone:function(a,b,c){var d,e,f,g,h,i=n.contains(a.ownerDocument,a);if(l.html5Clone||n.isXMLDoc(a)||!ta.test("<"+a.nodeName+">")?f=a.cloneNode(!0):(Aa.innerHTML=a.outerHTML,Aa.removeChild(f=Aa.firstChild)),!(l.noCloneEvent&&l.noCloneChecked||1!==a.nodeType&&11!==a.nodeType||n.isXMLDoc(a)))for(d=da(f),h=da(a),g=0;null!=(e=h[g]);++g)d[g]&&Fa(e,d[g]);if(b)if(c)for(h=h||da(a),d=d||da(f),g=0;null!=(e=h[g]);g++)Ea(e,d[g]);else Ea(a,f);return d=da(f,"script"),d.length>0&&ea(d,!i&&da(a,"script")),d=h=e=null,f},cleanData:function(a,b){for(var d,e,f,g,h=0,i=n.expando,j=n.cache,k=l.attributes,m=n.event.special;null!=(d=a[h]);h++)if((b||L(d))&&(f=d[i],g=f&&j[f])){if(g.events)for(e in g.events)m[e]?n.event.remove(d,e):n.removeEvent(d,e,g.handle);j[f]&&(delete j[f],k||void 0===d.removeAttribute?d[i]=void 0:d.removeAttribute(i),c.push(f))}}}),n.fn.extend({domManip:Ga,detach:function(a){return Ha(this,a,!0)},remove:function(a){return Ha(this,a)},text:function(a){return X(this,function(a){return void 0===a?n.text(this):this.empty().append((this[0]&&this[0].ownerDocument||d).createTextNode(a))},null,a,arguments.length)},append:function(){return Ga(this,arguments,function(a){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){Ba(this,a).appendChild(a)}})},prepend:function(){return Ga(this,arguments,function(a){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var b=Ba(this,a);b.insertBefore(a,b.firstChild)}})},before:function(){return Ga(this,arguments,function(a){this.parentNode&&this.parentNode.insertBefore(a,this)})},after:function(){return Ga(this,arguments,function(a){this.parentNode&&this.parentNode.insertBefore(a,this.nextSibling)})},empty:function(){for(var a,b=0;null!=(a=this[b]);b++){1===a.nodeType&&n.cleanData(da(a,!1));while(a.firstChild)a.removeChild(a.firstChild);a.options&&n.nodeName(a,"select")&&(a.options.length=0)}return this},clone:function(a,b){return a=null!=a&&a,b=null==b?a:b,this.map(function(){return n.clone(this,a,b)})},html:function(a){return X(this,function(a){var b=this[0]||{},c=0,d=this.length;if(void 0===a)return 1===b.nodeType?b.innerHTML.replace(sa,""):void 0;if("string"==typeof a&&!va.test(a)&&(l.htmlSerialize||!ta.test(a))&&(l.leadingWhitespace||!_.test(a))&&!ca[(Z.exec(a)||["",""])[1].toLowerCase()]){a=n.htmlPrefilter(a);try{for(;c<d;c++)b=this[c]||{},1===b.nodeType&&(n.cleanData(da(b,!1)),b.innerHTML=a);b=0}catch(e){}}b&&this.empty().append(a)},null,a,arguments.length)},replaceWith:function(){var a=[];return Ga(this,arguments,function(b){var c=this.parentNode;n.inArray(this,a)<0&&(n.cleanData(da(this)),c&&c.replaceChild(b,this))},a)}}),n.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(a,b){n.fn[a]=function(a){for(var c,d=0,e=[],f=n(a),h=f.length-1;d<=h;d++)c=d===h?this:this.clone(!0),n(f[d])[b](c),g.apply(e,c.get());return this.pushStack(e)}});var Ia,Ja={HTML:"block",BODY:"block"};function Ka(a,b){var c=n(b.createElement(a)).appendTo(b.body),d=n.css(c[0],"display");return c.detach(),d}function La(a){var b=d,c=Ja[a];return c||(c=Ka(a,b),"none"!==c&&c||(Ia=(Ia||n("<iframe frameborder='0' width='0' height='0'/>")).appendTo(b.documentElement),b=(Ia[0].contentWindow||Ia[0].contentDocument).document,b.write(),b.close(),c=Ka(a,b),Ia.detach()),Ja[a]=c),c}var Ma=/^margin/,Na=new RegExp("^("+S+")(?!px)[a-z%]+$","i"),Oa=function(a,b,c,d){var e,f,g={};for(f in b)g[f]=a.style[f],a.style[f]=b[f];e=c.apply(a,d||[]);for(f in b)a.style[f]=g[f];return e},Pa=d.documentElement;!function(){var b,c,e,f,g,h,i=d.createElement("div"),j=d.createElement("div");function k(){var k,l,m=d.documentElement;m.appendChild(i),j.style.cssText="-webkit-box-sizing:border-box;box-sizing:border-box;position:relative;display:block;margin:auto;border:1px;padding:1px;top:1%;width:50%",b=e=h=!1,c=g=!0,a.getComputedStyle&&(l=a.getComputedStyle(j),b="1%"!==(l||{}).top,h="2px"===(l||{}).marginLeft,e="4px"===(l||{width:"4px"}).width,j.style.marginRight="50%",c="4px"===(l||{marginRight:"4px"}).marginRight,k=j.appendChild(d.createElement("div")),k.style.cssText=j.style.cssText="-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box;display:block;margin:0;border:0;padding:0",k.style.marginRight=k.style.width="0",j.style.width="1px",g=!parseFloat((a.getComputedStyle(k)||{}).marginRight),j.removeChild(k)),j.style.display="none",f=0===j.getClientRects().length,f&&(j.style.display="",j.innerHTML="<table><tr><td></td><td>t</td></tr></table>",j.childNodes[0].style.borderCollapse="separate",k=j.getElementsByTagName("td"),k[0].style.cssText="margin:0;border:0;padding:0;display:none",(f=0===k[0].offsetHeight)&&(k[0].style.display="",k[1].style.display="none",f=0===k[0].offsetHeight)),m.removeChild(i)}j.style&&(j.style.cssText="float:left;opacity:.5",l.opacity="0.5"===j.style.opacity,l.cssFloat=!!j.style.cssFloat,j.style.backgroundClip="content-box",j.cloneNode(!0).style.backgroundClip="",l.clearCloneStyle="content-box"===j.style.backgroundClip,i=d.createElement("div"),i.style.cssText="border:0;width:8px;height:0;top:0;left:-9999px;padding:0;margin-top:1px;position:absolute",j.innerHTML="",i.appendChild(j),l.boxSizing=""===j.style.boxSizing||""===j.style.MozBoxSizing||""===j.style.WebkitBoxSizing,n.extend(l,{reliableHiddenOffsets:function(){return null==b&&k(),f},boxSizingReliable:function(){return null==b&&k(),e},pixelMarginRight:function(){return null==b&&k(),c},pixelPosition:function(){return null==b&&k(),b},reliableMarginRight:function(){return null==b&&k(),g},reliableMarginLeft:function(){return null==b&&k(),h}}))}();var Qa,Ra,Sa=/^(top|right|bottom|left)$/;a.getComputedStyle?(Qa=function(b){var c=b.ownerDocument.defaultView;return c&&c.opener||(c=a),c.getComputedStyle(b)},Ra=function(a,b,c){var d,e,f,g,h=a.style;return c=c||Qa(a),g=c?c.getPropertyValue(b)||c[b]:void 0,""!==g&&void 0!==g||n.contains(a.ownerDocument,a)||(g=n.style(a,b)),c&&!l.pixelMarginRight()&&Na.test(g)&&Ma.test(b)&&(d=h.width,e=h.minWidth,f=h.maxWidth,h.minWidth=h.maxWidth=h.width=g,g=c.width,h.width=d,h.minWidth=e,h.maxWidth=f),void 0===g?g:g+""}):Pa.currentStyle&&(Qa=function(a){return a.currentStyle},Ra=function(a,b,c){var d,e,f,g,h=a.style;return c=c||Qa(a),g=c?c[b]:void 0,null==g&&h&&h[b]&&(g=h[b]),Na.test(g)&&!Sa.test(b)&&(d=h.left,e=a.runtimeStyle,f=e&&e.left,f&&(e.left=a.currentStyle.left),h.left="fontSize"===b?"1em":g,g=h.pixelLeft+"px",h.left=d,f&&(e.left=f)),void 0===g?g:g+""||"auto"});function Ta(a,b){return{get:function(){return a()?void delete this.get:(this.get=b).apply(this,arguments)}}}var Ua=/alpha\([^)]*\)/i,Va=/opacity\s*=\s*([^)]*)/i,Wa=/^(none|table(?!-c[ea]).+)/,Xa=new RegExp("^("+S+")(.*)$","i"),Ya={position:"absolute",visibility:"hidden",display:"block"},Za={letterSpacing:"0",fontWeight:"400"},$a=["Webkit","O","Moz","ms"],_a=d.createElement("div").style;function ab(a){if(a in _a)return a;var b=a.charAt(0).toUpperCase()+a.slice(1),c=$a.length;while(c--)if((a=$a[c]+b)in _a)return a}function bb(a,b){for(var c,d,e,f=[],g=0,h=a.length;g<h;g++)d=a[g],d.style&&(f[g]=n._data(d,"olddisplay"),c=d.style.display,b?(f[g]||"none"!==c||(d.style.display=""),""===d.style.display&&V(d)&&(f[g]=n._data(d,"olddisplay",La(d.nodeName)))):(e=V(d),(c&&"none"!==c||!e)&&n._data(d,"olddisplay",e?c:n.css(d,"display"))));for(g=0;g<h;g++)d=a[g],d.style&&(b&&"none"!==d.style.display&&""!==d.style.display||(d.style.display=b?f[g]||"":"none"));return a}function cb(a,b,c){var d=Xa.exec(b);return d?Math.max(0,d[1]-(c||0))+(d[2]||"px"):b}function db(a,b,c,d,e){for(var f=c===(d?"border":"content")?4:"width"===b?1:0,g=0;f<4;f+=2)"margin"===c&&(g+=n.css(a,c+U[f],!0,e)),d?("content"===c&&(g-=n.css(a,"padding"+U[f],!0,e)),"margin"!==c&&(g-=n.css(a,"border"+U[f]+"Width",!0,e))):(g+=n.css(a,"padding"+U[f],!0,e),"padding"!==c&&(g+=n.css(a,"border"+U[f]+"Width",!0,e)));return g}function eb(a,b,c){var d=!0,e="width"===b?a.offsetWidth:a.offsetHeight,f=Qa(a),g=l.boxSizing&&"border-box"===n.css(a,"boxSizing",!1,f);if(e<=0||null==e){if(e=Ra(a,b,f),(e<0||null==e)&&(e=a.style[b]),Na.test(e))return e;d=g&&(l.boxSizingReliable()||e===a.style[b]),e=parseFloat(e)||0}return e+db(a,b,c||(g?"border":"content"),d,f)+"px"}n.extend({cssHooks:{opacity:{get:function(a,b){if(b){var c=Ra(a,"opacity");return""===c?"1":c}}}},cssNumber:{animationIterationCount:!0,columnCount:!0,fillOpacity:!0,flexGrow:!0,flexShrink:!0,fontWeight:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,widows:!0,zIndex:!0,zoom:!0},cssProps:{float:l.cssFloat?"cssFloat":"styleFloat"},style:function(a,b,c,d){if(a&&3!==a.nodeType&&8!==a.nodeType&&a.style){var e,f,g,h=n.camelCase(b),i=a.style;if(b=n.cssProps[h]||(n.cssProps[h]=ab(h)||h),g=n.cssHooks[b]||n.cssHooks[h],void 0===c)return g&&"get"in g&&void 0!==(e=g.get(a,!1,d))?e:i[b];if(f=typeof c,"string"===f&&(e=T.exec(c))&&e[1]&&(c=W(a,b,e),f="number"),null!=c&&c===c&&("number"===f&&(c+=e&&e[3]||(n.cssNumber[h]?"":"px")),l.clearCloneStyle||""!==c||0!==b.indexOf("background")||(i[b]="inherit"),!(g&&"set"in g&&void 0===(c=g.set(a,c,d)))))try{i[b]=c}catch(j){}}},css:function(a,b,c,d){var e,f,g,h=n.camelCase(b);return b=n.cssProps[h]||(n.cssProps[h]=ab(h)||h),g=n.cssHooks[b]||n.cssHooks[h],g&&"get"in g&&(f=g.get(a,!0,c)),void 0===f&&(f=Ra(a,b,d)),"normal"===f&&b in Za&&(f=Za[b]),""===c||c?(e=parseFloat(f),!0===c||isFinite(e)?e||0:f):f}}),n.each(["height","width"],function(a,b){n.cssHooks[b]={get:function(a,c,d){if(c)return Wa.test(n.css(a,"display"))&&0===a.offsetWidth?Oa(a,Ya,function(){return eb(a,b,d)}):eb(a,b,d)},set:function(a,c,d){var e=d&&Qa(a);return cb(a,c,d?db(a,b,d,l.boxSizing&&"border-box"===n.css(a,"boxSizing",!1,e),e):0)}}}),l.opacity||(n.cssHooks.opacity={get:function(a,b){return Va.test((b&&a.currentStyle?a.currentStyle.filter:a.style.filter)||"")?.01*parseFloat(RegExp.$1)+"":b?"1":""},set:function(a,b){var c=a.style,d=a.currentStyle,e=n.isNumeric(b)?"alpha(opacity="+100*b+")":"",f=d&&d.filter||c.filter||"";c.zoom=1,(b>=1||""===b)&&""===n.trim(f.replace(Ua,""))&&c.removeAttribute&&(c.removeAttribute("filter"),""===b||d&&!d.filter)||(c.filter=Ua.test(f)?f.replace(Ua,e):f+" "+e)}}),n.cssHooks.marginRight=Ta(l.reliableMarginRight,function(a,b){if(b)return Oa(a,{display:"inline-block"},Ra,[a,"marginRight"])}),n.cssHooks.marginLeft=Ta(l.reliableMarginLeft,function(a,b){if(b)return(parseFloat(Ra(a,"marginLeft"))||(n.contains(a.ownerDocument,a)?a.getBoundingClientRect().left-Oa(a,{marginLeft:0},function(){return a.getBoundingClientRect().left}):0))+"px"}),n.each({
+margin:"",padding:"",border:"Width"},function(a,b){n.cssHooks[a+b]={expand:function(c){for(var d=0,e={},f="string"==typeof c?c.split(" "):[c];d<4;d++)e[a+U[d]+b]=f[d]||f[d-2]||f[0];return e}},Ma.test(a)||(n.cssHooks[a+b].set=cb)}),n.fn.extend({css:function(a,b){return X(this,function(a,b,c){var d,e,f={},g=0;if(n.isArray(b)){for(d=Qa(a),e=b.length;g<e;g++)f[b[g]]=n.css(a,b[g],!1,d);return f}return void 0!==c?n.style(a,b,c):n.css(a,b)},a,b,arguments.length>1)},show:function(){return bb(this,!0)},hide:function(){return bb(this)},toggle:function(a){return"boolean"==typeof a?a?this.show():this.hide():this.each(function(){V(this)?n(this).show():n(this).hide()})}});function fb(a,b,c,d,e){return new fb.prototype.init(a,b,c,d,e)}n.Tween=fb,fb.prototype={constructor:fb,init:function(a,b,c,d,e,f){this.elem=a,this.prop=c,this.easing=e||n.easing._default,this.options=b,this.start=this.now=this.cur(),this.end=d,this.unit=f||(n.cssNumber[c]?"":"px")},cur:function(){var a=fb.propHooks[this.prop];return a&&a.get?a.get(this):fb.propHooks._default.get(this)},run:function(a){var b,c=fb.propHooks[this.prop];return this.options.duration?this.pos=b=n.easing[this.easing](a,this.options.duration*a,0,1,this.options.duration):this.pos=b=a,this.now=(this.end-this.start)*b+this.start,this.options.step&&this.options.step.call(this.elem,this.now,this),c&&c.set?c.set(this):fb.propHooks._default.set(this),this}},fb.prototype.init.prototype=fb.prototype,fb.propHooks={_default:{get:function(a){var b;return 1!==a.elem.nodeType||null!=a.elem[a.prop]&&null==a.elem.style[a.prop]?a.elem[a.prop]:(b=n.css(a.elem,a.prop,""),b&&"auto"!==b?b:0)},set:function(a){n.fx.step[a.prop]?n.fx.step[a.prop](a):1!==a.elem.nodeType||null==a.elem.style[n.cssProps[a.prop]]&&!n.cssHooks[a.prop]?a.elem[a.prop]=a.now:n.style(a.elem,a.prop,a.now+a.unit)}}},fb.propHooks.scrollTop=fb.propHooks.scrollLeft={set:function(a){a.elem.nodeType&&a.elem.parentNode&&(a.elem[a.prop]=a.now)}},n.easing={linear:function(a){return a},swing:function(a){return.5-Math.cos(a*Math.PI)/2},_default:"swing"},n.fx=fb.prototype.init,n.fx.step={};var gb,hb,ib=/^(?:toggle|show|hide)$/,jb=/queueHooks$/;function kb(){return a.setTimeout(function(){gb=void 0}),gb=n.now()}function lb(a,b){var c,d={height:a},e=0;for(b=b?1:0;e<4;e+=2-b)c=U[e],d["margin"+c]=d["padding"+c]=a;return b&&(d.opacity=d.width=a),d}function mb(a,b,c){for(var d,e=(pb.tweeners[b]||[]).concat(pb.tweeners["*"]),f=0,g=e.length;f<g;f++)if(d=e[f].call(c,b,a))return d}function nb(a,b,c){var d,e,f,g,h,i,j,k,m=this,o={},p=a.style,q=a.nodeType&&V(a),r=n._data(a,"fxshow");c.queue||(h=n._queueHooks(a,"fx"),null==h.unqueued&&(h.unqueued=0,i=h.empty.fire,h.empty.fire=function(){h.unqueued||i()}),h.unqueued++,m.always(function(){m.always(function(){h.unqueued--,n.queue(a,"fx").length||h.empty.fire()})})),1===a.nodeType&&("height"in b||"width"in b)&&(c.overflow=[p.overflow,p.overflowX,p.overflowY],j=n.css(a,"display"),"inline"===(k="none"===j?n._data(a,"olddisplay")||La(a.nodeName):j)&&"none"===n.css(a,"float")&&(l.inlineBlockNeedsLayout&&"inline"!==La(a.nodeName)?p.zoom=1:p.display="inline-block")),c.overflow&&(p.overflow="hidden",l.shrinkWrapBlocks()||m.always(function(){p.overflow=c.overflow[0],p.overflowX=c.overflow[1],p.overflowY=c.overflow[2]}));for(d in b)if(e=b[d],ib.exec(e)){if(delete b[d],f=f||"toggle"===e,e===(q?"hide":"show")){if("show"!==e||!r||void 0===r[d])continue;q=!0}o[d]=r&&r[d]||n.style(a,d)}else j=void 0;if(n.isEmptyObject(o))"inline"===("none"===j?La(a.nodeName):j)&&(p.display=j);else{r?"hidden"in r&&(q=r.hidden):r=n._data(a,"fxshow",{}),f&&(r.hidden=!q),q?n(a).show():m.done(function(){n(a).hide()}),m.done(function(){var b;n._removeData(a,"fxshow");for(b in o)n.style(a,b,o[b])});for(d in o)g=mb(q?r[d]:0,d,m),d in r||(r[d]=g.start,q&&(g.end=g.start,g.start="width"===d||"height"===d?1:0))}}function ob(a,b){var c,d,e,f,g;for(c in a)if(d=n.camelCase(c),e=b[d],f=a[c],n.isArray(f)&&(e=f[1],f=a[c]=f[0]),c!==d&&(a[d]=f,delete a[c]),(g=n.cssHooks[d])&&"expand"in g){f=g.expand(f),delete a[d];for(c in f)c in a||(a[c]=f[c],b[c]=e)}else b[d]=e}function pb(a,b,c){var d,e,f=0,g=pb.prefilters.length,h=n.Deferred().always(function(){delete i.elem}),i=function(){if(e)return!1;for(var b=gb||kb(),c=Math.max(0,j.startTime+j.duration-b),d=c/j.duration||0,f=1-d,g=0,i=j.tweens.length;g<i;g++)j.tweens[g].run(f);return h.notifyWith(a,[j,f,c]),f<1&&i?c:(h.resolveWith(a,[j]),!1)},j=h.promise({elem:a,props:n.extend({},b),opts:n.extend(!0,{specialEasing:{},easing:n.easing._default},c),originalProperties:b,originalOptions:c,startTime:gb||kb(),duration:c.duration,tweens:[],createTween:function(b,c){var d=n.Tween(a,j.opts,b,c,j.opts.specialEasing[b]||j.opts.easing);return j.tweens.push(d),d},stop:function(b){var c=0,d=b?j.tweens.length:0;if(e)return this;for(e=!0;c<d;c++)j.tweens[c].run(1);return b?(h.notifyWith(a,[j,1,0]),h.resolveWith(a,[j,b])):h.rejectWith(a,[j,b]),this}}),k=j.props;for(ob(k,j.opts.specialEasing);f<g;f++)if(d=pb.prefilters[f].call(j,a,k,j.opts))return n.isFunction(d.stop)&&(n._queueHooks(j.elem,j.opts.queue).stop=n.proxy(d.stop,d)),d;return n.map(k,mb,j),n.isFunction(j.opts.start)&&j.opts.start.call(a,j),n.fx.timer(n.extend(i,{elem:a,anim:j,queue:j.opts.queue})),j.progress(j.opts.progress).done(j.opts.done,j.opts.complete).fail(j.opts.fail).always(j.opts.always)}n.Animation=n.extend(pb,{tweeners:{"*":[function(a,b){var c=this.createTween(a,b);return W(c.elem,a,T.exec(b),c),c}]},tweener:function(a,b){n.isFunction(a)?(b=a,a=["*"]):a=a.match(F);for(var c,d=0,e=a.length;d<e;d++)c=a[d],pb.tweeners[c]=pb.tweeners[c]||[],pb.tweeners[c].unshift(b)},prefilters:[nb],prefilter:function(a,b){b?pb.prefilters.unshift(a):pb.prefilters.push(a)}}),n.speed=function(a,b,c){var d=a&&"object"==typeof a?n.extend({},a):{complete:c||!c&&b||n.isFunction(a)&&a,duration:a,easing:c&&b||b&&!n.isFunction(b)&&b};return d.duration=n.fx.off?0:"number"==typeof d.duration?d.duration:d.duration in n.fx.speeds?n.fx.speeds[d.duration]:n.fx.speeds._default,null!=d.queue&&!0!==d.queue||(d.queue="fx"),d.old=d.complete,d.complete=function(){n.isFunction(d.old)&&d.old.call(this),d.queue&&n.dequeue(this,d.queue)},d},n.fn.extend({fadeTo:function(a,b,c,d){return this.filter(V).css("opacity",0).show().end().animate({opacity:b},a,c,d)},animate:function(a,b,c,d){var e=n.isEmptyObject(a),f=n.speed(b,c,d),g=function(){var b=pb(this,n.extend({},a),f);(e||n._data(this,"finish"))&&b.stop(!0)};return g.finish=g,e||!1===f.queue?this.each(g):this.queue(f.queue,g)},stop:function(a,b,c){var d=function(a){var b=a.stop;delete a.stop,b(c)};return"string"!=typeof a&&(c=b,b=a,a=void 0),b&&!1!==a&&this.queue(a||"fx",[]),this.each(function(){var b=!0,e=null!=a&&a+"queueHooks",f=n.timers,g=n._data(this);if(e)g[e]&&g[e].stop&&d(g[e]);else for(e in g)g[e]&&g[e].stop&&jb.test(e)&&d(g[e]);for(e=f.length;e--;)f[e].elem!==this||null!=a&&f[e].queue!==a||(f[e].anim.stop(c),b=!1,f.splice(e,1));!b&&c||n.dequeue(this,a)})},finish:function(a){return!1!==a&&(a=a||"fx"),this.each(function(){var b,c=n._data(this),d=c[a+"queue"],e=c[a+"queueHooks"],f=n.timers,g=d?d.length:0;for(c.finish=!0,n.queue(this,a,[]),e&&e.stop&&e.stop.call(this,!0),b=f.length;b--;)f[b].elem===this&&f[b].queue===a&&(f[b].anim.stop(!0),f.splice(b,1));for(b=0;b<g;b++)d[b]&&d[b].finish&&d[b].finish.call(this);delete c.finish})}}),n.each(["toggle","show","hide"],function(a,b){var c=n.fn[b];n.fn[b]=function(a,d,e){return null==a||"boolean"==typeof a?c.apply(this,arguments):this.animate(lb(b,!0),a,d,e)}}),n.each({slideDown:lb("show"),slideUp:lb("hide"),slideToggle:lb("toggle"),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"},fadeToggle:{opacity:"toggle"}},function(a,b){n.fn[a]=function(a,c,d){return this.animate(b,a,c,d)}}),n.timers=[],n.fx.tick=function(){var a,b=n.timers,c=0;for(gb=n.now();c<b.length;c++)(a=b[c])()||b[c]!==a||b.splice(c--,1);b.length||n.fx.stop(),gb=void 0},n.fx.timer=function(a){n.timers.push(a),a()?n.fx.start():n.timers.pop()},n.fx.interval=13,n.fx.start=function(){hb||(hb=a.setInterval(n.fx.tick,n.fx.interval))},n.fx.stop=function(){a.clearInterval(hb),hb=null},n.fx.speeds={slow:600,fast:200,_default:400},n.fn.delay=function(b,c){return b=n.fx?n.fx.speeds[b]||b:b,c=c||"fx",this.queue(c,function(c,d){var e=a.setTimeout(c,b);d.stop=function(){a.clearTimeout(e)}})},function(){var a,b=d.createElement("input"),c=d.createElement("div"),e=d.createElement("select"),f=e.appendChild(d.createElement("option"));c=d.createElement("div"),c.setAttribute("className","t"),c.innerHTML="  <link/><table></table><a href='/a'>a</a><input type='checkbox'/>",a=c.getElementsByTagName("a")[0],b.setAttribute("type","checkbox"),c.appendChild(b),a=c.getElementsByTagName("a")[0],a.style.cssText="top:1px",l.getSetAttribute="t"!==c.className,l.style=/top/.test(a.getAttribute("style")),l.hrefNormalized="/a"===a.getAttribute("href"),l.checkOn=!!b.value,l.optSelected=f.selected,l.enctype=!!d.createElement("form").enctype,e.disabled=!0,l.optDisabled=!f.disabled,b=d.createElement("input"),b.setAttribute("value",""),l.input=""===b.getAttribute("value"),b.value="t",b.setAttribute("type","radio"),l.radioValue="t"===b.value}();var qb=/\r/g,rb=/[\x20\t\r\n\f]+/g;n.fn.extend({val:function(a){var b,c,d,e=this[0];{if(arguments.length)return d=n.isFunction(a),this.each(function(c){var e;1===this.nodeType&&(e=d?a.call(this,c,n(this).val()):a,null==e?e="":"number"==typeof e?e+="":n.isArray(e)&&(e=n.map(e,function(a){return null==a?"":a+""})),(b=n.valHooks[this.type]||n.valHooks[this.nodeName.toLowerCase()])&&"set"in b&&void 0!==b.set(this,e,"value")||(this.value=e))});if(e)return(b=n.valHooks[e.type]||n.valHooks[e.nodeName.toLowerCase()])&&"get"in b&&void 0!==(c=b.get(e,"value"))?c:(c=e.value,"string"==typeof c?c.replace(qb,""):null==c?"":c)}}}),n.extend({valHooks:{option:{get:function(a){var b=n.find.attr(a,"value");return null!=b?b:n.trim(n.text(a)).replace(rb," ")}},select:{get:function(a){for(var b,c,d=a.options,e=a.selectedIndex,f="select-one"===a.type||e<0,g=f?null:[],h=f?e+1:d.length,i=e<0?h:f?e:0;i<h;i++)if(c=d[i],(c.selected||i===e)&&(l.optDisabled?!c.disabled:null===c.getAttribute("disabled"))&&(!c.parentNode.disabled||!n.nodeName(c.parentNode,"optgroup"))){if(b=n(c).val(),f)return b;g.push(b)}return g},set:function(a,b){var c,d,e=a.options,f=n.makeArray(b),g=e.length;while(g--)if(d=e[g],n.inArray(n.valHooks.option.get(d),f)>-1)try{d.selected=c=!0}catch(h){d.scrollHeight}else d.selected=!1;return c||(a.selectedIndex=-1),e}}}}),n.each(["radio","checkbox"],function(){n.valHooks[this]={set:function(a,b){if(n.isArray(b))return a.checked=n.inArray(n(a).val(),b)>-1}},l.checkOn||(n.valHooks[this].get=function(a){return null===a.getAttribute("value")?"on":a.value})});var sb,tb,ub=n.expr.attrHandle,vb=/^(?:checked|selected)$/i,wb=l.getSetAttribute,xb=l.input;n.fn.extend({attr:function(a,b){return X(this,n.attr,a,b,arguments.length>1)},removeAttr:function(a){return this.each(function(){n.removeAttr(this,a)})}}),n.extend({attr:function(a,b,c){var d,e,f=a.nodeType;if(3!==f&&8!==f&&2!==f)return void 0===a.getAttribute?n.prop(a,b,c):(1===f&&n.isXMLDoc(a)||(b=b.toLowerCase(),e=n.attrHooks[b]||(n.expr.match.bool.test(b)?tb:sb)),void 0!==c?null===c?void n.removeAttr(a,b):e&&"set"in e&&void 0!==(d=e.set(a,c,b))?d:(a.setAttribute(b,c+""),c):e&&"get"in e&&null!==(d=e.get(a,b))?d:(d=n.find.attr(a,b),null==d?void 0:d))},attrHooks:{type:{set:function(a,b){if(!l.radioValue&&"radio"===b&&n.nodeName(a,"input")){var c=a.value;return a.setAttribute("type",b),c&&(a.value=c),b}}}},removeAttr:function(a,b){var c,d,e=0,f=b&&b.match(F);if(f&&1===a.nodeType)while(c=f[e++])d=n.propFix[c]||c,n.expr.match.bool.test(c)?xb&&wb||!vb.test(c)?a[d]=!1:a[n.camelCase("default-"+c)]=a[d]=!1:n.attr(a,c,""),a.removeAttribute(wb?c:d)}}),tb={set:function(a,b,c){return!1===b?n.removeAttr(a,c):xb&&wb||!vb.test(c)?a.setAttribute(!wb&&n.propFix[c]||c,c):a[n.camelCase("default-"+c)]=a[c]=!0,c}},n.each(n.expr.match.bool.source.match(/\w+/g),function(a,b){var c=ub[b]||n.find.attr;xb&&wb||!vb.test(b)?ub[b]=function(a,b,d){var e,f;return d||(f=ub[b],ub[b]=e,e=null!=c(a,b,d)?b.toLowerCase():null,ub[b]=f),e}:ub[b]=function(a,b,c){if(!c)return a[n.camelCase("default-"+b)]?b.toLowerCase():null}}),xb&&wb||(n.attrHooks.value={set:function(a,b,c){if(!n.nodeName(a,"input"))return sb&&sb.set(a,b,c);a.defaultValue=b}}),wb||(sb={set:function(a,b,c){var d=a.getAttributeNode(c);if(d||a.setAttributeNode(d=a.ownerDocument.createAttribute(c)),d.value=b+="","value"===c||b===a.getAttribute(c))return b}},ub.id=ub.name=ub.coords=function(a,b,c){var d;if(!c)return(d=a.getAttributeNode(b))&&""!==d.value?d.value:null},n.valHooks.button={get:function(a,b){var c=a.getAttributeNode(b);if(c&&c.specified)return c.value},set:sb.set},n.attrHooks.contenteditable={set:function(a,b,c){sb.set(a,""!==b&&b,c)}},n.each(["width","height"],function(a,b){n.attrHooks[b]={set:function(a,c){if(""===c)return a.setAttribute(b,"auto"),c}}})),l.style||(n.attrHooks.style={get:function(a){return a.style.cssText||void 0},set:function(a,b){return a.style.cssText=b+""}});var yb=/^(?:input|select|textarea|button|object)$/i,zb=/^(?:a|area)$/i;n.fn.extend({prop:function(a,b){return X(this,n.prop,a,b,arguments.length>1)},removeProp:function(a){return a=n.propFix[a]||a,this.each(function(){try{this[a]=void 0,delete this[a]}catch(b){}})}}),n.extend({prop:function(a,b,c){var d,e,f=a.nodeType;if(3!==f&&8!==f&&2!==f)return 1===f&&n.isXMLDoc(a)||(b=n.propFix[b]||b,e=n.propHooks[b]),void 0!==c?e&&"set"in e&&void 0!==(d=e.set(a,c,b))?d:a[b]=c:e&&"get"in e&&null!==(d=e.get(a,b))?d:a[b]},propHooks:{tabIndex:{get:function(a){var b=n.find.attr(a,"tabindex");return b?parseInt(b,10):yb.test(a.nodeName)||zb.test(a.nodeName)&&a.href?0:-1}}},propFix:{for:"htmlFor",class:"className"}}),l.hrefNormalized||n.each(["href","src"],function(a,b){n.propHooks[b]={get:function(a){return a.getAttribute(b,4)}}}),l.optSelected||(n.propHooks.selected={get:function(a){var b=a.parentNode;return b&&(b.selectedIndex,b.parentNode&&b.parentNode.selectedIndex),null},set:function(a){var b=a.parentNode;b&&(b.selectedIndex,b.parentNode&&b.parentNode.selectedIndex)}}),n.each(["tabIndex","readOnly","maxLength","cellSpacing","cellPadding","rowSpan","colSpan","useMap","frameBorder","contentEditable"],function(){n.propFix[this.toLowerCase()]=this}),l.enctype||(n.propFix.enctype="encoding");var Ab=/[\t\r\n\f]/g;function Bb(a){return n.attr(a,"class")||""}n.fn.extend({addClass:function(a){var b,c,d,e,f,g,h,i=0;if(n.isFunction(a))return this.each(function(b){n(this).addClass(a.call(this,b,Bb(this)))});if("string"==typeof a&&a){b=a.match(F)||[];while(c=this[i++])if(e=Bb(c),d=1===c.nodeType&&(" "+e+" ").replace(Ab," ")){g=0;while(f=b[g++])d.indexOf(" "+f+" ")<0&&(d+=f+" ");h=n.trim(d),e!==h&&n.attr(c,"class",h)}}return this},removeClass:function(a){var b,c,d,e,f,g,h,i=0;if(n.isFunction(a))return this.each(function(b){n(this).removeClass(a.call(this,b,Bb(this)))});if(!arguments.length)return this.attr("class","");if("string"==typeof a&&a){b=a.match(F)||[];while(c=this[i++])if(e=Bb(c),d=1===c.nodeType&&(" "+e+" ").replace(Ab," ")){g=0;while(f=b[g++])while(d.indexOf(" "+f+" ")>-1)d=d.replace(" "+f+" "," ");h=n.trim(d),e!==h&&n.attr(c,"class",h)}}return this},toggleClass:function(a,b){var c=typeof a;return"boolean"==typeof b&&"string"===c?b?this.addClass(a):this.removeClass(a):n.isFunction(a)?this.each(function(c){n(this).toggleClass(a.call(this,c,Bb(this),b),b)}):this.each(function(){var b,d,e,f;if("string"===c){d=0,e=n(this),f=a.match(F)||[];while(b=f[d++])e.hasClass(b)?e.removeClass(b):e.addClass(b)}else void 0!==a&&"boolean"!==c||(b=Bb(this),b&&n._data(this,"__className__",b),n.attr(this,"class",b||!1===a?"":n._data(this,"__className__")||""))})},hasClass:function(a){var b,c,d=0;b=" "+a+" ";while(c=this[d++])if(1===c.nodeType&&(" "+Bb(c)+" ").replace(Ab," ").indexOf(b)>-1)return!0;return!1}}),n.each("blur focus focusin focusout load resize scroll unload click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup error contextmenu".split(" "),function(a,b){n.fn[b]=function(a,c){return arguments.length>0?this.on(b,null,a,c):this.trigger(b)}}),n.fn.extend({hover:function(a,b){return this.mouseenter(a).mouseleave(b||a)}});var Cb=a.location,Db=n.now(),Eb=/\?/,Fb=/(,)|(\[|{)|(}|])|"(?:[^"\\\r\n]|\\["\\\/bfnrt]|\\u[\da-fA-F]{4})*"\s*:?|true|false|null|-?(?!0\d)\d+(?:\.\d+|)(?:[eE][+-]?\d+|)/g;n.parseJSON=function(b){if(a.JSON&&a.JSON.parse)return a.JSON.parse(b+"");var c,d=null,e=n.trim(b+"");return e&&!n.trim(e.replace(Fb,function(a,b,e,f){return c&&b&&(d=0),0===d?a:(c=e||b,d+=!f-!e,"")}))?Function("return "+e)():n.error("Invalid JSON: "+b)},n.parseXML=function(b){var c,d;if(!b||"string"!=typeof b)return null;try{a.DOMParser?(d=new a.DOMParser,c=d.parseFromString(b,"text/xml")):(c=new a.ActiveXObject("Microsoft.XMLDOM"),c.async="false",c.loadXML(b))}catch(e){c=void 0}return c&&c.documentElement&&!c.getElementsByTagName("parsererror").length||n.error("Invalid XML: "+b),c};var Gb=/#.*$/,Hb=/([?&])_=[^&]*/,Ib=/^(.*?):[ \t]*([^\r\n]*)\r?$/gm,Jb=/^(?:about|app|app-storage|.+-extension|file|res|widget):$/,Kb=/^(?:GET|HEAD)$/,Lb=/^\/\//,Mb=/^([\w.+-]+:)(?:\/\/(?:[^\/?#]*@|)([^\/?#:]*)(?::(\d+)|)|)/,Nb={},Ob={},Pb="*/".concat("*"),Qb=Cb.href,Rb=Mb.exec(Qb.toLowerCase())||[];function Sb(a){return function(b,c){"string"!=typeof b&&(c=b,b="*");var d,e=0,f=b.toLowerCase().match(F)||[];if(n.isFunction(c))while(d=f[e++])"+"===d.charAt(0)?(d=d.slice(1)||"*",(a[d]=a[d]||[]).unshift(c)):(a[d]=a[d]||[]).push(c)}}function Tb(a,b,c,d){var e={},f=a===Ob;function g(h){var i;return e[h]=!0,n.each(a[h]||[],function(a,h){var j=h(b,c,d);return"string"!=typeof j||f||e[j]?f?!(i=j):void 0:(b.dataTypes.unshift(j),g(j),!1)}),i}return g(b.dataTypes[0])||!e["*"]&&g("*")}function Ub(a,b){var c,d,e=n.ajaxSettings.flatOptions||{};for(d in b)void 0!==b[d]&&((e[d]?a:c||(c={}))[d]=b[d]);return c&&n.extend(!0,a,c),a}function Vb(a,b,c){var d,e,f,g,h=a.contents,i=a.dataTypes;while("*"===i[0])i.shift(),void 0===e&&(e=a.mimeType||b.getResponseHeader("Content-Type"));if(e)for(g in h)if(h[g]&&h[g].test(e)){i.unshift(g);break}if(i[0]in c)f=i[0];else{for(g in c){if(!i[0]||a.converters[g+" "+i[0]]){f=g;break}d||(d=g)}f=f||d}if(f)return f!==i[0]&&i.unshift(f),c[f]}function Wb(a,b,c,d){var e,f,g,h,i,j={},k=a.dataTypes.slice();if(k[1])for(g in a.converters)j[g.toLowerCase()]=a.converters[g];f=k.shift();while(f)if(a.responseFields[f]&&(c[a.responseFields[f]]=b),!i&&d&&a.dataFilter&&(b=a.dataFilter(b,a.dataType)),i=f,f=k.shift())if("*"===f)f=i;else if("*"!==i&&i!==f){if(!(g=j[i+" "+f]||j["* "+f]))for(e in j)if(h=e.split(" "),h[1]===f&&(g=j[i+" "+h[0]]||j["* "+h[0]])){!0===g?g=j[e]:!0!==j[e]&&(f=h[0],k.unshift(h[1]));break}if(!0!==g)if(g&&a.throws)b=g(b);else try{b=g(b)}catch(l){return{state:"parsererror",error:g?l:"No conversion from "+i+" to "+f}}}return{state:"success",data:b}}n.extend({active:0,lastModified:{},etag:{},ajaxSettings:{url:Qb,type:"GET",isLocal:Jb.test(Rb[1]),global:!0,processData:!0,async:!0,contentType:"application/x-www-form-urlencoded; charset=UTF-8",accepts:{"*":Pb,text:"text/plain",html:"text/html",xml:"application/xml, text/xml",json:"application/json, text/javascript"},contents:{xml:/\bxml\b/,html:/\bhtml/,json:/\bjson\b/},responseFields:{xml:"responseXML",text:"responseText",json:"responseJSON"},converters:{"* text":String,"text html":!0,"text json":n.parseJSON,"text xml":n.parseXML},flatOptions:{url:!0,context:!0}},ajaxSetup:function(a,b){return b?Ub(Ub(a,n.ajaxSettings),b):Ub(n.ajaxSettings,a)},ajaxPrefilter:Sb(Nb),ajaxTransport:Sb(Ob),ajax:function(b,c){"object"==typeof b&&(c=b,b=void 0),c=c||{};var d,e,f,g,h,i,j,k,l=n.ajaxSetup({},c),m=l.context||l,o=l.context&&(m.nodeType||m.jquery)?n(m):n.event,p=n.Deferred(),q=n.Callbacks("once memory"),r=l.statusCode||{},s={},t={},u=0,v="canceled",w={readyState:0,getResponseHeader:function(a){var b;if(2===u){if(!k){k={};while(b=Ib.exec(g))k[b[1].toLowerCase()]=b[2]}b=k[a.toLowerCase()]}return null==b?null:b},getAllResponseHeaders:function(){return 2===u?g:null},setRequestHeader:function(a,b){var c=a.toLowerCase();return u||(a=t[c]=t[c]||a,s[a]=b),this},overrideMimeType:function(a){return u||(l.mimeType=a),this},statusCode:function(a){var b;if(a)if(u<2)for(b in a)r[b]=[r[b],a[b]];else w.always(a[w.status]);return this},abort:function(a){var b=a||v;return j&&j.abort(b),x(0,b),this}};if(p.promise(w).complete=q.add,w.success=w.done,w.error=w.fail,l.url=((b||l.url||Qb)+"").replace(Gb,"").replace(Lb,Rb[1]+"//"),l.type=c.method||c.type||l.method||l.type,l.dataTypes=n.trim(l.dataType||"*").toLowerCase().match(F)||[""],null==l.crossDomain&&(d=Mb.exec(l.url.toLowerCase()),l.crossDomain=!(!d||d[1]===Rb[1]&&d[2]===Rb[2]&&(d[3]||("http:"===d[1]?"80":"443"))===(Rb[3]||("http:"===Rb[1]?"80":"443")))),l.data&&l.processData&&"string"!=typeof l.data&&(l.data=n.param(l.data,l.traditional)),Tb(Nb,l,c,w),2===u)return w;i=n.event&&l.global,i&&0==n.active++&&n.event.trigger("ajaxStart"),l.type=l.type.toUpperCase(),l.hasContent=!Kb.test(l.type),f=l.url,l.hasContent||(l.data&&(f=l.url+=(Eb.test(f)?"&":"?")+l.data,delete l.data),!1===l.cache&&(l.url=Hb.test(f)?f.replace(Hb,"$1_="+Db++):f+(Eb.test(f)?"&":"?")+"_="+Db++)),l.ifModified&&(n.lastModified[f]&&w.setRequestHeader("If-Modified-Since",n.lastModified[f]),n.etag[f]&&w.setRequestHeader("If-None-Match",n.etag[f])),(l.data&&l.hasContent&&!1!==l.contentType||c.contentType)&&w.setRequestHeader("Content-Type",l.contentType),w.setRequestHeader("Accept",l.dataTypes[0]&&l.accepts[l.dataTypes[0]]?l.accepts[l.dataTypes[0]]+("*"!==l.dataTypes[0]?", "+Pb+"; q=0.01":""):l.accepts["*"]);for(e in l.headers)w.setRequestHeader(e,l.headers[e]);if(l.beforeSend&&(!1===l.beforeSend.call(m,w,l)||2===u))return w.abort();v="abort";for(e in{success:1,error:1,complete:1})w[e](l[e]);if(j=Tb(Ob,l,c,w)){if(w.readyState=1,i&&o.trigger("ajaxSend",[w,l]),2===u)return w;l.async&&l.timeout>0&&(h=a.setTimeout(function(){w.abort("timeout")},l.timeout));try{u=1,j.send(s,x)}catch(y){if(!(u<2))throw y;x(-1,y)}}else x(-1,"No Transport");function x(b,c,d,e){var k,s,t,v,x,y=c;2!==u&&(u=2,h&&a.clearTimeout(h),j=void 0,g=e||"",w.readyState=b>0?4:0,k=b>=200&&b<300||304===b,d&&(v=Vb(l,w,d)),v=Wb(l,v,w,k),k?(l.ifModified&&(x=w.getResponseHeader("Last-Modified"),x&&(n.lastModified[f]=x),(x=w.getResponseHeader("etag"))&&(n.etag[f]=x)),204===b||"HEAD"===l.type?y="nocontent":304===b?y="notmodified":(y=v.state,s=v.data,t=v.error,k=!t)):(t=y,!b&&y||(y="error",b<0&&(b=0))),w.status=b,w.statusText=(c||y)+"",k?p.resolveWith(m,[s,y,w]):p.rejectWith(m,[w,y,t]),w.statusCode(r),r=void 0,i&&o.trigger(k?"ajaxSuccess":"ajaxError",[w,l,k?s:t]),q.fireWith(m,[w,y]),i&&(o.trigger("ajaxComplete",[w,l]),--n.active||n.event.trigger("ajaxStop")))}return w},getJSON:function(a,b,c){return n.get(a,b,c,"json")},getScript:function(a,b){return n.get(a,void 0,b,"script")}}),n.each(["get","post"],function(a,b){n[b]=function(a,c,d,e){return n.isFunction(c)&&(e=e||d,d=c,c=void 0),n.ajax(n.extend({url:a,type:b,dataType:e,data:c,success:d},n.isPlainObject(a)&&a))}}),n._evalUrl=function(a){return n.ajax({url:a,type:"GET",dataType:"script",cache:!0,async:!1,global:!1,throws:!0})},n.fn.extend({wrapAll:function(a){if(n.isFunction(a))return this.each(function(b){n(this).wrapAll(a.call(this,b))});if(this[0]){var b=n(a,this[0].ownerDocument).eq(0).clone(!0);this[0].parentNode&&b.insertBefore(this[0]),b.map(function(){var a=this;while(a.firstChild&&1===a.firstChild.nodeType)a=a.firstChild;return a}).append(this)}return this},wrapInner:function(a){return n.isFunction(a)?this.each(function(b){n(this).wrapInner(a.call(this,b))}):this.each(function(){var b=n(this),c=b.contents();c.length?c.wrapAll(a):b.append(a)})},wrap:function(a){var b=n.isFunction(a);return this.each(function(c){n(this).wrapAll(b?a.call(this,c):a)})},unwrap:function(){return this.parent().each(function(){n.nodeName(this,"body")||n(this).replaceWith(this.childNodes)}).end()}});function Xb(a){return a.style&&a.style.display||n.css(a,"display")}function Yb(a){if(!n.contains(a.ownerDocument||d,a))return!0;while(a&&1===a.nodeType){if("none"===Xb(a)||"hidden"===a.type)return!0;a=a.parentNode}return!1}n.expr.filters.hidden=function(a){return l.reliableHiddenOffsets()?a.offsetWidth<=0&&a.offsetHeight<=0&&!a.getClientRects().length:Yb(a)},n.expr.filters.visible=function(a){return!n.expr.filters.hidden(a)};var Zb=/%20/g,$b=/\[\]$/,_b=/\r?\n/g,ac=/^(?:submit|button|image|reset|file)$/i,bc=/^(?:input|select|textarea|keygen)/i;function cc(a,b,c,d){var e;if(n.isArray(b))n.each(b,function(b,e){c||$b.test(a)?d(a,e):cc(a+"["+("object"==typeof e&&null!=e?b:"")+"]",e,c,d)});else if(c||"object"!==n.type(b))d(a,b);else for(e in b)cc(a+"["+e+"]",b[e],c,d)}n.param=function(a,b){var c,d=[],e=function(a,b){b=n.isFunction(b)?b():null==b?"":b,d[d.length]=encodeURIComponent(a)+"="+encodeURIComponent(b)};if(void 0===b&&(b=n.ajaxSettings&&n.ajaxSettings.traditional),n.isArray(a)||a.jquery&&!n.isPlainObject(a))n.each(a,function(){e(this.name,this.value)});else for(c in a)cc(c,a[c],b,e);return d.join("&").replace(Zb,"+")},n.fn.extend({serialize:function(){return n.param(this.serializeArray())},serializeArray:function(){return this.map(function(){var a=n.prop(this,"elements");return a?n.makeArray(a):this}).filter(function(){var a=this.type;return this.name&&!n(this).is(":disabled")&&bc.test(this.nodeName)&&!ac.test(a)&&(this.checked||!Y.test(a))}).map(function(a,b){var c=n(this).val();return null==c?null:n.isArray(c)?n.map(c,function(a){return{name:b.name,value:a.replace(_b,"\r\n")}}):{name:b.name,value:c.replace(_b,"\r\n")}}).get()}}),n.ajaxSettings.xhr=void 0!==a.ActiveXObject?function(){return this.isLocal?hc():d.documentMode>8?gc():/^(get|post|head|put|delete|options)$/i.test(this.type)&&gc()||hc()}:gc;var dc=0,ec={},fc=n.ajaxSettings.xhr();a.attachEvent&&a.attachEvent("onunload",function(){for(var a in ec)ec[a](void 0,!0)}),l.cors=!!fc&&"withCredentials"in fc,(fc=l.ajax=!!fc)&&n.ajaxTransport(function(b){if(!b.crossDomain||l.cors){var c;return{send:function(d,e){var f,g=b.xhr(),h=++dc;if(g.open(b.type,b.url,b.async,b.username,b.password),b.xhrFields)for(f in b.xhrFields)g[f]=b.xhrFields[f];b.mimeType&&g.overrideMimeType&&g.overrideMimeType(b.mimeType),b.crossDomain||d["X-Requested-With"]||(d["X-Requested-With"]="XMLHttpRequest");for(f in d)void 0!==d[f]&&g.setRequestHeader(f,d[f]+"");g.send(b.hasContent&&b.data||null),c=function(a,d){var f,i,j;if(c&&(d||4===g.readyState))if(delete ec[h],c=void 0,g.onreadystatechange=n.noop,d)4!==g.readyState&&g.abort();else{j={},f=g.status,"string"==typeof g.responseText&&(j.text=g.responseText);try{i=g.statusText}catch(k){i=""}f||!b.isLocal||b.crossDomain?1223===f&&(f=204):f=j.text?200:404}j&&e(f,i,j,g.getAllResponseHeaders())},b.async?4===g.readyState?a.setTimeout(c):g.onreadystatechange=ec[h]=c:c()},abort:function(){c&&c(void 0,!0)}}}});function gc(){try{return new a.XMLHttpRequest}catch(b){}}function hc(){try{return new a.ActiveXObject("Microsoft.XMLHTTP")}catch(b){}}n.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/\b(?:java|ecma)script\b/},converters:{"text script":function(a){return n.globalEval(a),a}}}),n.ajaxPrefilter("script",function(a){void 0===a.cache&&(a.cache=!1),a.crossDomain&&(a.type="GET",a.global=!1)}),n.ajaxTransport("script",function(a){if(a.crossDomain){var b,c=d.head||n("head")[0]||d.documentElement;return{send:function(e,f){b=d.createElement("script"),b.async=!0,a.scriptCharset&&(b.charset=a.scriptCharset),b.src=a.url,b.onload=b.onreadystatechange=function(a,c){(c||!b.readyState||/loaded|complete/.test(b.readyState))&&(b.onload=b.onreadystatechange=null,b.parentNode&&b.parentNode.removeChild(b),b=null,c||f(200,"success"))},c.insertBefore(b,c.firstChild)},abort:function(){b&&b.onload(void 0,!0)}}}});var ic=[],jc=/(=)\?(?=&|$)|\?\?/;n.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var a=ic.pop()||n.expando+"_"+Db++;return this[a]=!0,a}}),n.ajaxPrefilter("json jsonp",function(b,c,d){var e,f,g,h=!1!==b.jsonp&&(jc.test(b.url)?"url":"string"==typeof b.data&&0===(b.contentType||"").indexOf("application/x-www-form-urlencoded")&&jc.test(b.data)&&"data");if(h||"jsonp"===b.dataTypes[0])return e=b.jsonpCallback=n.isFunction(b.jsonpCallback)?b.jsonpCallback():b.jsonpCallback,h?b[h]=b[h].replace(jc,"$1"+e):!1!==b.jsonp&&(b.url+=(Eb.test(b.url)?"&":"?")+b.jsonp+"="+e),b.converters["script json"]=function(){return g||n.error(e+" was not called"),g[0]},b.dataTypes[0]="json",f=a[e],a[e]=function(){g=arguments},d.always(function(){void 0===f?n(a).removeProp(e):a[e]=f,b[e]&&(b.jsonpCallback=c.jsonpCallback,ic.push(e)),g&&n.isFunction(f)&&f(g[0]),g=f=void 0}),"script"}),n.parseHTML=function(a,b,c){if(!a||"string"!=typeof a)return null;"boolean"==typeof b&&(c=b,b=!1),b=b||d;var e=x.exec(a),f=!c&&[];return e?[b.createElement(e[1])]:(e=ia([a],b,f),f&&f.length&&n(f).remove(),n.merge([],e.childNodes))};var kc=n.fn.load;n.fn.load=function(a,b,c){if("string"!=typeof a&&kc)return kc.apply(this,arguments);var d,e,f,g=this,h=a.indexOf(" ");return h>-1&&(d=n.trim(a.slice(h,a.length)),a=a.slice(0,h)),n.isFunction(b)?(c=b,b=void 0):b&&"object"==typeof b&&(e="POST"),g.length>0&&n.ajax({url:a,type:e||"GET",dataType:"html",data:b}).done(function(a){f=arguments,g.html(d?n("<div>").append(n.parseHTML(a)).find(d):a)}).always(c&&function(a,b){g.each(function(){c.apply(this,f||[a.responseText,b,a])})}),this},n.each(["ajaxStart","ajaxStop","ajaxComplete","ajaxError","ajaxSuccess","ajaxSend"],function(a,b){n.fn[b]=function(a){return this.on(b,a)}}),n.expr.filters.animated=function(a){return n.grep(n.timers,function(b){return a===b.elem}).length};function lc(a){return n.isWindow(a)?a:9===a.nodeType&&(a.defaultView||a.parentWindow)}n.offset={setOffset:function(a,b,c){var d,e,f,g,h,i,j,k=n.css(a,"position"),l=n(a),m={};"static"===k&&(a.style.position="relative"),h=l.offset(),f=n.css(a,"top"),i=n.css(a,"left"),j=("absolute"===k||"fixed"===k)&&n.inArray("auto",[f,i])>-1,j?(d=l.position(),g=d.top,e=d.left):(g=parseFloat(f)||0,e=parseFloat(i)||0),n.isFunction(b)&&(b=b.call(a,c,n.extend({},h))),null!=b.top&&(m.top=b.top-h.top+g),null!=b.left&&(m.left=b.left-h.left+e),"using"in b?b.using.call(a,m):l.css(m)}},n.fn.extend({offset:function(a){if(arguments.length)return void 0===a?this:this.each(function(b){n.offset.setOffset(this,a,b)});var b,c,d={top:0,left:0},e=this[0],f=e&&e.ownerDocument;if(f)return b=f.documentElement,n.contains(b,e)?(void 0!==e.getBoundingClientRect&&(d=e.getBoundingClientRect()),c=lc(f),{top:d.top+(c.pageYOffset||b.scrollTop)-(b.clientTop||0),left:d.left+(c.pageXOffset||b.scrollLeft)-(b.clientLeft||0)}):d},position:function(){if(this[0]){var a,b,c={top:0,left:0},d=this[0];return"fixed"===n.css(d,"position")?b=d.getBoundingClientRect():(a=this.offsetParent(),b=this.offset(),n.nodeName(a[0],"html")||(c=a.offset()),c.top+=n.css(a[0],"borderTopWidth",!0),c.left+=n.css(a[0],"borderLeftWidth",!0)),{top:b.top-c.top-n.css(d,"marginTop",!0),left:b.left-c.left-n.css(d,"marginLeft",!0)}}},offsetParent:function(){return this.map(function(){var a=this.offsetParent;while(a&&!n.nodeName(a,"html")&&"static"===n.css(a,"position"))a=a.offsetParent;return a||Pa})}}),n.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(a,b){var c=/Y/.test(b);n.fn[a]=function(d){return X(this,function(a,d,e){var f=lc(a);if(void 0===e)return f?b in f?f[b]:f.document.documentElement[d]:a[d];f?f.scrollTo(c?n(f).scrollLeft():e,c?e:n(f).scrollTop()):a[d]=e},a,d,arguments.length,null)}}),n.each(["top","left"],function(a,b){n.cssHooks[b]=Ta(l.pixelPosition,function(a,c){if(c)return c=Ra(a,b),Na.test(c)?n(a).position()[b]+"px":c})}),n.each({Height:"height",Width:"width"},function(a,b){n.each({padding:"inner"+a,content:b,"":"outer"+a},function(c,d){n.fn[d]=function(d,e){var f=arguments.length&&(c||"boolean"!=typeof d),g=c||(!0===d||!0===e?"margin":"border")
+;return X(this,function(b,c,d){var e;return n.isWindow(b)?b.document.documentElement["client"+a]:9===b.nodeType?(e=b.documentElement,Math.max(b.body["scroll"+a],e["scroll"+a],b.body["offset"+a],e["offset"+a],e["client"+a])):void 0===d?n.css(b,c,g):n.style(b,c,d,g)},b,f?d:void 0,f,null)}})}),n.fn.extend({bind:function(a,b,c){return this.on(a,null,b,c)},unbind:function(a,b){return this.off(a,null,b)},delegate:function(a,b,c,d){return this.on(b,a,c,d)},undelegate:function(a,b,c){return 1===arguments.length?this.off(a,"**"):this.off(b,a||"**",c)}}),n.fn.size=function(){return this.length},n.fn.andSelf=n.fn.addBack,"function"==typeof define&&define.amd&&define("jquery",[],function(){return n});var mc=a.jQuery,nc=a.$;return n.noConflict=function(b){return a.$===n&&(a.$=nc),b&&a.jQuery===n&&(a.jQuery=mc),n},b||(a.jQuery=a.$=n),n});
diff --git a/civicrm/bower_components/jquery/dist/jquery.min.map b/civicrm/bower_components/jquery/dist/jquery.min.map
index 36fd3e9ef32aee6ed3fcf2449f9a75bc04746c80..cb53ce85489526259b1ac705959feed4f5549ec8 100644
--- a/civicrm/bower_components/jquery/dist/jquery.min.map
+++ b/civicrm/bower_components/jquery/dist/jquery.min.map
@@ -1 +1 @@
-{"version":3,"sources":["jquery.js"],"names":["global","factory","module","exports","document","w","Error","window","this","noGlobal","deletedIds","slice","concat","push","indexOf","class2type","toString","hasOwn","hasOwnProperty","support","version","jQuery","selector","context","fn","init","rtrim","rmsPrefix","rdashAlpha","fcamelCase","all","letter","toUpperCase","prototype","jquery","constructor","length","toArray","call","get","num","pushStack","elems","ret","merge","prevObject","each","callback","map","elem","i","apply","arguments","first","eq","last","len","j","end","sort","splice","extend","src","copyIsArray","copy","name","options","clone","target","deep","isFunction","isPlainObject","isArray","undefined","expando","Math","random","replace","isReady","error","msg","noop","obj","type","Array","isWindow","isNumeric","realStringObj","parseFloat","isEmptyObject","key","nodeType","e","ownFirst","globalEval","data","trim","execScript","camelCase","string","nodeName","toLowerCase","isArrayLike","text","makeArray","arr","results","Object","inArray","max","second","grep","invert","callbackInverse","matches","callbackExpect","arg","value","guid","proxy","args","tmp","now","Date","Symbol","iterator","split","Sizzle","Expr","getText","isXML","tokenize","compile","select","outermostContext","sortInput","hasDuplicate","setDocument","docElem","documentIsHTML","rbuggyQSA","rbuggyMatches","contains","preferredDoc","dirruns","done","classCache","createCache","tokenCache","compilerCache","sortOrder","a","b","MAX_NEGATIVE","pop","push_native","list","booleans","whitespace","identifier","attributes","pseudos","rwhitespace","RegExp","rcomma","rcombinators","rattributeQuotes","rpseudo","ridentifier","matchExpr","ID","CLASS","TAG","ATTR","PSEUDO","CHILD","bool","needsContext","rinputs","rheader","rnative","rquickExpr","rsibling","rescape","runescape","funescape","_","escaped","escapedWhitespace","high","String","fromCharCode","unloadHandler","childNodes","els","seed","m","nid","nidselect","match","groups","newSelector","newContext","ownerDocument","exec","getElementById","id","getElementsByTagName","getElementsByClassName","qsa","test","getAttribute","setAttribute","toSelector","join","testContext","parentNode","querySelectorAll","qsaError","removeAttribute","keys","cache","cacheLength","shift","markFunction","assert","div","createElement","removeChild","addHandle","attrs","handler","attrHandle","siblingCheck","cur","diff","sourceIndex","nextSibling","createInputPseudo","createButtonPseudo","createPositionalPseudo","argument","matchIndexes","documentElement","node","hasCompare","parent","doc","defaultView","top","addEventListener","attachEvent","className","appendChild","createComment","getById","getElementsByName","find","filter","attrId","getAttributeNode","tag","innerHTML","input","matchesSelector","webkitMatchesSelector","mozMatchesSelector","oMatchesSelector","msMatchesSelector","disconnectedMatch","compareDocumentPosition","adown","bup","compare","sortDetached","aup","ap","bp","unshift","expr","elements","attr","val","specified","uniqueSort","duplicates","detectDuplicates","sortStable","textContent","firstChild","nodeValue","selectors","createPseudo","relative",">","dir"," ","+","~","preFilter","excess","unquoted","nodeNameSelector","pattern","operator","check","result","what","simple","forward","ofType","xml","uniqueCache","outerCache","nodeIndex","start","useCache","lastChild","uniqueID","pseudo","setFilters","idx","matched","not","matcher","unmatched","has","innerText","lang","elemLang","hash","location","root","focus","activeElement","hasFocus","href","tabIndex","enabled","disabled","checked","selected","selectedIndex","empty","header","button","even","odd","lt","gt","radio","checkbox","file","password","image","submit","reset","filters","parseOnly","tokens","soFar","preFilters","cached","addCombinator","combinator","base","checkNonElements","doneName","oldCache","newCache","elementMatcher","matchers","multipleContexts","contexts","condense","newUnmatched","mapped","setMatcher","postFilter","postFinder","postSelector","temp","preMap","postMap","preexisting","matcherIn","matcherOut","matcherFromTokens","checkContext","leadingRelative","implicitRelative","matchContext","matchAnyContext","matcherFromGroupMatchers","elementMatchers","setMatchers","bySet","byElement","superMatcher","outermost","matchedCount","setMatched","contextBackup","dirrunsUnique","token","compiled","div1","defaultValue","unique","isXMLDoc","until","truncate","is","siblings","n","rneedsContext","rsingleTag","risSimple","winnow","qualifier","self","rootjQuery","charAt","parseHTML","ready","rparentsprev","guaranteedUnique","children","contents","next","prev","targets","closest","l","pos","index","prevAll","add","addBack","sibling","parents","parentsUntil","nextAll","nextUntil","prevUntil","contentDocument","contentWindow","reverse","rnotwhite","createOptions","object","flag","Callbacks","firing","memory","fired","locked","queue","firingIndex","fire","once","stopOnFalse","remove","disable","lock","fireWith","Deferred","func","tuples","state","promise","always","deferred","fail","then","fns","newDefer","tuple","returned","progress","notify","resolve","reject","pipe","stateString","when","subordinate","resolveValues","remaining","updateFunc","values","progressValues","notifyWith","resolveWith","progressContexts","resolveContexts","readyList","readyWait","holdReady","hold","wait","triggerHandler","off","detach","removeEventListener","completed","detachEvent","event","readyState","doScroll","setTimeout","frameElement","doScrollCheck","inlineBlockNeedsLayout","body","container","style","cssText","zoom","offsetWidth","deleteExpando","acceptData","noData","rbrace","rmultiDash","dataAttr","parseJSON","isEmptyDataObject","internalData","pvt","thisCache","internalKey","isNode","toJSON","internalRemoveData","cleanData","applet ","embed ","object ","hasData","removeData","_data","_removeData","dequeue","startLength","hooks","_queueHooks","stop","setter","clearQueue","count","defer","shrinkWrapBlocksVal","shrinkWrapBlocks","width","pnum","source","rcssNum","cssExpand","isHidden","el","css","adjustCSS","prop","valueParts","tween","adjusted","scale","maxIterations","currentValue","initial","unit","cssNumber","initialInUnit","access","chainable","emptyGet","raw","bulk","rcheckableType","rtagName","rscriptType","rleadingWhitespace","nodeNames","createSafeFragment","safeFrag","createDocumentFragment","fragment","leadingWhitespace","tbody","htmlSerialize","html5Clone","cloneNode","outerHTML","appendChecked","noCloneChecked","checkClone","noCloneEvent","wrapMap","option","legend","area","param","thead","tr","col","td","_default","optgroup","tfoot","colgroup","caption","th","getAll","found","setGlobalEval","refElements","rhtml","rtbody","fixDefaultChecked","defaultChecked","buildFragment","scripts","selection","ignored","wrap","safe","nodes","htmlPrefilter","createTextNode","eventName","change","focusin","rformElems","rkeyEvent","rmouseEvent","rfocusMorph","rtypenamespace","returnTrue","returnFalse","safeActiveElement","err","on","types","one","origFn","events","t","handleObjIn","special","eventHandle","handleObj","handlers","namespaces","origType","elemData","handle","triggered","dispatch","delegateType","bindType","namespace","delegateCount","setup","mappedTypes","origCount","teardown","removeEvent","trigger","onlyHandlers","ontype","bubbleType","eventPath","Event","isTrigger","rnamespace","noBubble","parentWindow","isPropagationStopped","preventDefault","isDefaultPrevented","fix","handlerQueue","delegateTarget","preDispatch","currentTarget","isImmediatePropagationStopped","stopPropagation","postDispatch","sel","isNaN","originalEvent","fixHook","fixHooks","mouseHooks","keyHooks","props","srcElement","metaKey","original","which","charCode","keyCode","eventDoc","fromElement","pageX","clientX","scrollLeft","clientLeft","pageY","clientY","scrollTop","clientTop","relatedTarget","toElement","load","blur","click","beforeunload","returnValue","simulate","isSimulated","defaultPrevented","timeStamp","cancelBubble","stopImmediatePropagation","mouseenter","mouseleave","pointerenter","pointerleave","orig","related","form","_submitBubble","propertyName","_justChanged","attaches","rinlinejQuery","rnoshimcache","rxhtmlTag","rnoInnerhtml","rchecked","rscriptTypeMasked","rcleanScript","safeFragment","fragmentDiv","manipulationTarget","content","disableScript","restoreScript","cloneCopyEvent","dest","oldData","curData","fixCloneNodeIssues","defaultSelected","domManip","collection","hasScripts","iNoClone","html","_evalUrl","keepData","dataAndEvents","deepDataAndEvents","destElements","srcElements","inPage","forceAcceptData","append","prepend","insertBefore","before","after","replaceWith","replaceChild","appendTo","prependTo","insertAfter","replaceAll","insert","iframe","elemdisplay","HTML","BODY","actualDisplay","display","defaultDisplay","write","close","rmargin","rnumnonpx","swap","old","pixelPositionVal","pixelMarginRightVal","boxSizingReliableVal","reliableHiddenOffsetsVal","reliableMarginRightVal","reliableMarginLeftVal","opacity","cssFloat","backgroundClip","clearCloneStyle","boxSizing","MozBoxSizing","WebkitBoxSizing","reliableHiddenOffsets","computeStyleTests","boxSizingReliable","pixelMarginRight","pixelPosition","reliableMarginRight","reliableMarginLeft","divStyle","getComputedStyle","marginLeft","marginRight","getClientRects","borderCollapse","offsetHeight","getStyles","curCSS","rposition","view","opener","computed","minWidth","maxWidth","getPropertyValue","currentStyle","left","rs","rsLeft","runtimeStyle","pixelLeft","addGetHookIf","conditionFn","hookFn","ralpha","ropacity","rdisplayswap","rnumsplit","cssShow","position","visibility","cssNormalTransform","letterSpacing","fontWeight","cssPrefixes","emptyStyle","vendorPropName","capName","showHide","show","hidden","setPositiveNumber","subtract","augmentWidthOrHeight","extra","isBorderBox","styles","getWidthOrHeight","valueIsBorderBox","cssHooks","animationIterationCount","columnCount","fillOpacity","flexGrow","flexShrink","lineHeight","order","orphans","widows","zIndex","cssProps","float","origName","set","isFinite","$1","getBoundingClientRect","margin","padding","border","prefix","suffix","expand","expanded","parts","hide","toggle","Tween","easing","propHooks","run","percent","eased","duration","step","fx","linear","p","swing","cos","PI","fxNow","timerId","rfxtypes","rrun","createFxNow","genFx","includeWidth","height","createTween","animation","Animation","tweeners","defaultPrefilter","opts","oldfire","checkDisplay","anim","dataShow","unqueued","overflow","overflowX","overflowY","propFilter","specialEasing","properties","stopped","prefilters","tick","currentTime","startTime","tweens","originalProperties","originalOptions","gotoEnd","rejectWith","timer","complete","*","tweener","prefilter","speed","opt","speeds","fadeTo","to","animate","optall","doAnimation","finish","stopQueue","timers","cssFn","slideDown","slideUp","slideToggle","fadeIn","fadeOut","fadeToggle","interval","setInterval","clearInterval","slow","fast","delay","time","timeout","clearTimeout","getSetAttribute","hrefNormalized","checkOn","optSelected","enctype","optDisabled","radioValue","rreturn","rspaces","valHooks","optionSet","scrollHeight","nodeHook","boolHook","ruseDefault","getSetInput","removeAttr","nType","attrHooks","propName","attrNames","propFix","getter","setAttributeNode","createAttribute","coords","contenteditable","rfocusable","rclickable","removeProp","tabindex","parseInt","for","class","rclass","getClass","addClass","classes","curValue","clazz","finalValue","removeClass","toggleClass","stateVal","classNames","hasClass","hover","fnOver","fnOut","nonce","rquery","rvalidtokens","JSON","parse","requireNonComma","depth","str","comma","open","Function","parseXML","DOMParser","parseFromString","ActiveXObject","async","loadXML","rhash","rts","rheaders","rlocalProtocol","rnoContent","rprotocol","rurl","transports","allTypes","ajaxLocation","ajaxLocParts","addToPrefiltersOrTransports","structure","dataTypeExpression","dataType","dataTypes","inspectPrefiltersOrTransports","jqXHR","inspected","seekingTransport","inspect","prefilterOrFactory","dataTypeOrTransport","ajaxExtend","flatOptions","ajaxSettings","ajaxHandleResponses","s","responses","firstDataType","ct","finalDataType","mimeType","getResponseHeader","converters","ajaxConvert","response","isSuccess","conv2","current","conv","responseFields","dataFilter","active","lastModified","etag","url","isLocal","processData","contentType","accepts","json","* text","text html","text json","text xml","ajaxSetup","settings","ajaxPrefilter","ajaxTransport","ajax","cacheURL","responseHeadersString","timeoutTimer","fireGlobals","transport","responseHeaders","callbackContext","globalEventContext","completeDeferred","statusCode","requestHeaders","requestHeadersNames","strAbort","getAllResponseHeaders","setRequestHeader","lname","overrideMimeType","code","status","abort","statusText","finalText","success","method","crossDomain","traditional","hasContent","ifModified","headers","beforeSend","send","nativeStatusText","modified","getJSON","getScript","throws","wrapAll","wrapInner","unwrap","getDisplay","filterHidden","visible","r20","rbracket","rCRLF","rsubmitterTypes","rsubmittable","buildParams","v","encodeURIComponent","serialize","serializeArray","xhr","createActiveXHR","documentMode","createStandardXHR","xhrId","xhrCallbacks","xhrSupported","cors","username","xhrFields","isAbort","onreadystatechange","responseText","XMLHttpRequest","script","text script","head","scriptCharset","charset","onload","oldCallbacks","rjsonp","jsonp","jsonpCallback","originalSettings","callbackName","overwritten","responseContainer","jsonProp","keepScripts","parsed","_load","params","animated","getWindow","offset","setOffset","curPosition","curLeft","curCSSTop","curTop","curOffset","curCSSLeft","calculatePosition","curElem","using","win","box","pageYOffset","pageXOffset","offsetParent","parentOffset","scrollTo","Height","Width","","defaultExtra","funcName","bind","unbind","delegate","undelegate","size","andSelf","define","amd","_jQuery","_$","$","noConflict"],"mappings":";CAcC,SAAUA,EAAQC,GAEK,gBAAXC,SAAiD,gBAAnBA,QAAOC,QAQhDD,OAAOC,QAAUH,EAAOI,SACvBH,EAASD,GAAQ,GACjB,SAAUK,GACT,IAAMA,EAAED,SACP,KAAM,IAAIE,OAAO,2CAElB,OAAOL,GAASI,IAGlBJ,EAASD,IAIS,mBAAXO,QAAyBA,OAASC,KAAM,SAAUD,EAAQE,GAOnE,GAAIC,MAEAN,EAAWG,EAAOH,SAElBO,EAAQD,EAAWC,MAEnBC,EAASF,EAAWE,OAEpBC,EAAOH,EAAWG,KAElBC,EAAUJ,EAAWI,QAErBC,KAEAC,EAAWD,EAAWC,SAEtBC,EAASF,EAAWG,eAEpBC,KAKHC,EAAU,SAGVC,EAAS,SAAUC,EAAUC,GAI5B,MAAO,IAAIF,GAAOG,GAAGC,KAAMH,EAAUC,IAKtCG,EAAQ,qCAGRC,EAAY,QACZC,EAAa,eAGbC,EAAa,SAAUC,EAAKC,GAC3B,MAAOA,GAAOC,cAGhBX,GAAOG,GAAKH,EAAOY,WAGlBC,OAAQd,EAERe,YAAad,EAGbC,SAAU,GAGVc,OAAQ,EAERC,QAAS,WACR,MAAO1B,GAAM2B,KAAM9B,OAKpB+B,IAAK,SAAUC,GACd,MAAc,OAAPA,EAGE,EAANA,EAAUhC,KAAMgC,EAAMhC,KAAK4B,QAAW5B,KAAMgC,GAG9C7B,EAAM2B,KAAM9B,OAKdiC,UAAW,SAAUC,GAGpB,GAAIC,GAAMtB,EAAOuB,MAAOpC,KAAK2B,cAAeO,EAO5C,OAJAC,GAAIE,WAAarC,KACjBmC,EAAIpB,QAAUf,KAAKe,QAGZoB,GAIRG,KAAM,SAAUC,GACf,MAAO1B,GAAOyB,KAAMtC,KAAMuC,IAG3BC,IAAK,SAAUD,GACd,MAAOvC,MAAKiC,UAAWpB,EAAO2B,IAAKxC,KAAM,SAAUyC,EAAMC,GACxD,MAAOH,GAAST,KAAMW,EAAMC,EAAGD,OAIjCtC,MAAO,WACN,MAAOH,MAAKiC,UAAW9B,EAAMwC,MAAO3C,KAAM4C,aAG3CC,MAAO,WACN,MAAO7C,MAAK8C,GAAI,IAGjBC,KAAM,WACL,MAAO/C,MAAK8C,GAAI,KAGjBA,GAAI,SAAUJ,GACb,GAAIM,GAAMhD,KAAK4B,OACdqB,GAAKP,GAAU,EAAJA,EAAQM,EAAM,EAC1B,OAAOhD,MAAKiC,UAAWgB,GAAK,GAASD,EAAJC,GAAYjD,KAAMiD,SAGpDC,IAAK,WACJ,MAAOlD,MAAKqC,YAAcrC,KAAK2B,eAKhCtB,KAAMA,EACN8C,KAAMjD,EAAWiD,KACjBC,OAAQlD,EAAWkD,QAGpBvC,EAAOwC,OAASxC,EAAOG,GAAGqC,OAAS,WAClC,GAAIC,GAAKC,EAAaC,EAAMC,EAAMC,EAASC,EAC1CC,EAAShB,UAAW,OACpBF,EAAI,EACJd,EAASgB,UAAUhB,OACnBiC,GAAO,CAsBR,KAnBuB,iBAAXD,KACXC,EAAOD,EAGPA,EAAShB,UAAWF,OACpBA,KAIsB,gBAAXkB,IAAwB/C,EAAOiD,WAAYF,KACtDA,MAIIlB,IAAMd,IACVgC,EAAS5D,KACT0C,KAGWd,EAAJc,EAAYA,IAGnB,GAAqC,OAA9BgB,EAAUd,UAAWF,IAG3B,IAAMe,IAAQC,GACbJ,EAAMM,EAAQH,GACdD,EAAOE,EAASD,GAGXG,IAAWJ,IAKXK,GAAQL,IAAU3C,EAAOkD,cAAeP,KAC1CD,EAAc1C,EAAOmD,QAASR,MAE3BD,GACJA,GAAc,EACdI,EAAQL,GAAOzC,EAAOmD,QAASV,GAAQA,MAGvCK,EAAQL,GAAOzC,EAAOkD,cAAeT,GAAQA,KAI9CM,EAAQH,GAAS5C,EAAOwC,OAAQQ,EAAMF,EAAOH,IAGzBS,SAATT,IACXI,EAAQH,GAASD,GAOrB,OAAOI,IAGR/C,EAAOwC,QAGNa,QAAS,UAAatD,EAAUuD,KAAKC,UAAWC,QAAS,MAAO,IAGhEC,SAAS,EAETC,MAAO,SAAUC,GAChB,KAAM,IAAI1E,OAAO0E,IAGlBC,KAAM,aAKNX,WAAY,SAAUY,GACrB,MAA8B,aAAvB7D,EAAO8D,KAAMD,IAGrBV,QAASY,MAAMZ,SAAW,SAAUU,GACnC,MAA8B,UAAvB7D,EAAO8D,KAAMD,IAGrBG,SAAU,SAAUH,GAEnB,MAAc,OAAPA,GAAeA,GAAOA,EAAI3E,QAGlC+E,UAAW,SAAUJ,GAMpB,GAAIK,GAAgBL,GAAOA,EAAIlE,UAC/B,QAAQK,EAAOmD,QAASU,IAAWK,EAAgBC,WAAYD,GAAkB,GAAO,GAGzFE,cAAe,SAAUP,GACxB,GAAIjB,EACJ,KAAMA,IAAQiB,GACb,OAAO,CAER,QAAO,GAGRX,cAAe,SAAUW,GACxB,GAAIQ,EAKJ,KAAMR,GAA8B,WAAvB7D,EAAO8D,KAAMD,IAAsBA,EAAIS,UAAYtE,EAAOgE,SAAUH,GAChF,OAAO,CAGR,KAGC,GAAKA,EAAI/C,cACPlB,EAAOqB,KAAM4C,EAAK,iBAClBjE,EAAOqB,KAAM4C,EAAI/C,YAAYF,UAAW,iBACzC,OAAO,EAEP,MAAQ2D,GAGT,OAAO,EAKR,IAAMzE,EAAQ0E,SACb,IAAMH,IAAOR,GACZ,MAAOjE,GAAOqB,KAAM4C,EAAKQ,EAM3B,KAAMA,IAAOR,IAEb,MAAeT,UAARiB,GAAqBzE,EAAOqB,KAAM4C,EAAKQ,IAG/CP,KAAM,SAAUD,GACf,MAAY,OAAPA,EACGA,EAAM,GAEQ,gBAARA,IAAmC,kBAARA,GACxCnE,EAAYC,EAASsB,KAAM4C,KAAW,eAC/BA,IAKTY,WAAY,SAAUC,GAChBA,GAAQ1E,EAAO2E,KAAMD,KAKvBxF,EAAO0F,YAAc,SAAUF,GAChCxF,EAAe,KAAE+B,KAAM/B,EAAQwF,KAC3BA,IAMPG,UAAW,SAAUC,GACpB,MAAOA,GAAOtB,QAASlD,EAAW,OAAQkD,QAASjD,EAAYC,IAGhEuE,SAAU,SAAUnD,EAAMgB,GACzB,MAAOhB,GAAKmD,UAAYnD,EAAKmD,SAASC,gBAAkBpC,EAAKoC,eAG9DvD,KAAM,SAAUoC,EAAKnC,GACpB,GAAIX,GAAQc,EAAI,CAEhB,IAAKoD,EAAapB,IAEjB,IADA9C,EAAS8C,EAAI9C,OACDA,EAAJc,EAAYA,IACnB,GAAKH,EAAST,KAAM4C,EAAKhC,GAAKA,EAAGgC,EAAKhC,OAAU,EAC/C,UAIF,KAAMA,IAAKgC,GACV,GAAKnC,EAAST,KAAM4C,EAAKhC,GAAKA,EAAGgC,EAAKhC,OAAU,EAC/C,KAKH,OAAOgC,IAIRc,KAAM,SAAUO,GACf,MAAe,OAARA,EACN,IACEA,EAAO,IAAK1B,QAASnD,EAAO,KAIhC8E,UAAW,SAAUC,EAAKC,GACzB,GAAI/D,GAAM+D,KAaV,OAXY,OAAPD,IACCH,EAAaK,OAAQF,IACzBpF,EAAOuB,MAAOD,EACE,gBAAR8D,IACLA,GAAQA,GAGX5F,EAAKyB,KAAMK,EAAK8D,IAIX9D,GAGRiE,QAAS,SAAU3D,EAAMwD,EAAKvD,GAC7B,GAAIM,EAEJ,IAAKiD,EAAM,CACV,GAAK3F,EACJ,MAAOA,GAAQwB,KAAMmE,EAAKxD,EAAMC,EAMjC,KAHAM,EAAMiD,EAAIrE,OACVc,EAAIA,EAAQ,EAAJA,EAAQyB,KAAKkC,IAAK,EAAGrD,EAAMN,GAAMA,EAAI,EAEjCM,EAAJN,EAASA,IAGhB,GAAKA,IAAKuD,IAAOA,EAAKvD,KAAQD,EAC7B,MAAOC,GAKV,MAAO,IAGRN,MAAO,SAAUS,EAAOyD,GACvB,GAAItD,IAAOsD,EAAO1E,OACjBqB,EAAI,EACJP,EAAIG,EAAMjB,MAEX,OAAYoB,EAAJC,EACPJ,EAAOH,KAAQ4D,EAAQrD,IAKxB,IAAKD,IAAQA,EACZ,MAAwBiB,SAAhBqC,EAAQrD,GACfJ,EAAOH,KAAQ4D,EAAQrD,IAMzB,OAFAJ,GAAMjB,OAASc,EAERG,GAGR0D,KAAM,SAAUrE,EAAOK,EAAUiE,GAShC,IARA,GAAIC,GACHC,KACAhE,EAAI,EACJd,EAASM,EAAMN,OACf+E,GAAkBH,EAIP5E,EAAJc,EAAYA,IACnB+D,GAAmBlE,EAAUL,EAAOQ,GAAKA,GACpC+D,IAAoBE,GACxBD,EAAQrG,KAAM6B,EAAOQ,GAIvB,OAAOgE,IAIRlE,IAAK,SAAUN,EAAOK,EAAUqE,GAC/B,GAAIhF,GAAQiF,EACXnE,EAAI,EACJP,IAGD,IAAK2D,EAAa5D,GAEjB,IADAN,EAASM,EAAMN,OACHA,EAAJc,EAAYA,IACnBmE,EAAQtE,EAAUL,EAAOQ,GAAKA,EAAGkE,GAEnB,MAATC,GACJ1E,EAAI9B,KAAMwG,OAMZ,KAAMnE,IAAKR,GACV2E,EAAQtE,EAAUL,EAAOQ,GAAKA,EAAGkE,GAEnB,MAATC,GACJ1E,EAAI9B,KAAMwG,EAMb,OAAOzG,GAAOuC,SAAWR,IAI1B2E,KAAM,EAINC,MAAO,SAAU/F,EAAID,GACpB,GAAIiG,GAAMD,EAAOE,CAUjB,OARwB,gBAAZlG,KACXkG,EAAMjG,EAAID,GACVA,EAAUC,EACVA,EAAKiG,GAKApG,EAAOiD,WAAY9C,IAKzBgG,EAAO7G,EAAM2B,KAAMc,UAAW,GAC9BmE,EAAQ,WACP,MAAO/F,GAAG2B,MAAO5B,GAAWf,KAAMgH,EAAK5G,OAAQD,EAAM2B,KAAMc,cAI5DmE,EAAMD,KAAO9F,EAAG8F,KAAO9F,EAAG8F,MAAQjG,EAAOiG,OAElCC,GAbP,QAgBDG,IAAK,WACJ,OAAQ,GAAMC,OAKfxG,QAASA,IAQa,kBAAXyG,UACXvG,EAAOG,GAAIoG,OAAOC,UAAanH,EAAYkH,OAAOC,WAKnDxG,EAAOyB,KAAM,uEAAuEgF,MAAO,KAC3F,SAAU5E,EAAGe,GACZlD,EAAY,WAAakD,EAAO,KAAQA,EAAKoC,eAG9C,SAASC,GAAapB,GAMrB,GAAI9C,KAAW8C,GAAO,UAAYA,IAAOA,EAAI9C,OAC5C+C,EAAO9D,EAAO8D,KAAMD,EAErB,OAAc,aAATC,GAAuB9D,EAAOgE,SAAUH,IACrC,EAGQ,UAATC,GAA+B,IAAX/C,GACR,gBAAXA,IAAuBA,EAAS,GAAOA,EAAS,IAAO8C,GAEhE,GAAI6C,GAWJ,SAAWxH,GAEX,GAAI2C,GACH/B,EACA6G,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EAGAC,EACArI,EACAsI,EACAC,EACAC,EACAC,EACA3B,EACA4B,EAGApE,EAAU,SAAW,EAAI,GAAIiD,MAC7BoB,EAAexI,EAAOH,SACtB4I,EAAU,EACVC,EAAO,EACPC,EAAaC,KACbC,EAAaD,KACbE,EAAgBF,KAChBG,EAAY,SAAUC,EAAGC,GAIxB,MAHKD,KAAMC,IACVhB,GAAe,GAET,GAIRiB,EAAe,GAAK,GAGpBxI,KAAcC,eACduF,KACAiD,EAAMjD,EAAIiD,IACVC,EAAclD,EAAI5F,KAClBA,EAAO4F,EAAI5F,KACXF,EAAQ8F,EAAI9F,MAGZG,EAAU,SAAU8I,EAAM3G,GAGzB,IAFA,GAAIC,GAAI,EACPM,EAAMoG,EAAKxH,OACAoB,EAAJN,EAASA,IAChB,GAAK0G,EAAK1G,KAAOD,EAChB,MAAOC,EAGT,OAAO,IAGR2G,EAAW,6HAKXC,EAAa,sBAGbC,EAAa,mCAGbC,EAAa,MAAQF,EAAa,KAAOC,EAAa,OAASD,EAE9D,gBAAkBA,EAElB,2DAA6DC,EAAa,OAASD,EACnF,OAEDG,EAAU,KAAOF,EAAa,wFAKAC,EAAa,eAM3CE,EAAc,GAAIC,QAAQL,EAAa,IAAK,KAC5CpI,EAAQ,GAAIyI,QAAQ,IAAML,EAAa,8BAAgCA,EAAa,KAAM,KAE1FM,EAAS,GAAID,QAAQ,IAAML,EAAa,KAAOA,EAAa,KAC5DO,EAAe,GAAIF,QAAQ,IAAML,EAAa,WAAaA,EAAa,IAAMA,EAAa,KAE3FQ,EAAmB,GAAIH,QAAQ,IAAML,EAAa,iBAAmBA,EAAa,OAAQ,KAE1FS,EAAU,GAAIJ,QAAQF,GACtBO,EAAc,GAAIL,QAAQ,IAAMJ,EAAa,KAE7CU,GACCC,GAAM,GAAIP,QAAQ,MAAQJ,EAAa,KACvCY,MAAS,GAAIR,QAAQ,QAAUJ,EAAa,KAC5Ca,IAAO,GAAIT,QAAQ,KAAOJ,EAAa,SACvCc,KAAQ,GAAIV,QAAQ,IAAMH,GAC1Bc,OAAU,GAAIX,QAAQ,IAAMF,GAC5Bc,MAAS,GAAIZ,QAAQ,yDAA2DL,EAC/E,+BAAiCA,EAAa,cAAgBA,EAC9D,aAAeA,EAAa,SAAU,KACvCkB,KAAQ,GAAIb,QAAQ,OAASN,EAAW,KAAM,KAG9CoB,aAAgB,GAAId,QAAQ,IAAML,EAAa,mDAC9CA,EAAa,mBAAqBA,EAAa,mBAAoB,MAGrEoB,EAAU,sCACVC,EAAU,SAEVC,EAAU,yBAGVC,EAAa,mCAEbC,EAAW,OACXC,GAAU,QAGVC,GAAY,GAAIrB,QAAQ,qBAAuBL,EAAa,MAAQA,EAAa,OAAQ,MACzF2B,GAAY,SAAUC,EAAGC,EAASC,GACjC,GAAIC,GAAO,KAAOF,EAAU,KAI5B,OAAOE,KAASA,GAAQD,EACvBD,EACO,EAAPE,EAECC,OAAOC,aAAcF,EAAO,OAE5BC,OAAOC,aAAcF,GAAQ,GAAK,MAAe,KAAPA,EAAe,QAO5DG,GAAgB,WACfvD,IAIF,KACC5H,EAAKsC,MACHsD,EAAM9F,EAAM2B,KAAMyG,EAAakD,YAChClD,EAAakD,YAIdxF,EAAKsC,EAAakD,WAAW7J,QAASuD,SACrC,MAAQC,IACT/E,GAASsC,MAAOsD,EAAIrE,OAGnB,SAAUgC,EAAQ8H,GACjBvC,EAAYxG,MAAOiB,EAAQzD,EAAM2B,KAAK4J,KAKvC,SAAU9H,EAAQ8H,GACjB,GAAIzI,GAAIW,EAAOhC,OACdc,EAAI,CAEL,OAASkB,EAAOX,KAAOyI,EAAIhJ,MAC3BkB,EAAOhC,OAASqB,EAAI,IAKvB,QAASsE,IAAQzG,EAAUC,EAASmF,EAASyF,GAC5C,GAAIC,GAAGlJ,EAAGD,EAAMoJ,EAAKC,EAAWC,EAAOC,EAAQC,EAC9CC,EAAanL,GAAWA,EAAQoL,cAGhChH,EAAWpE,EAAUA,EAAQoE,SAAW,CAKzC,IAHAe,EAAUA,MAGe,gBAAbpF,KAA0BA,GACxB,IAAbqE,GAA+B,IAAbA,GAA+B,KAAbA,EAEpC,MAAOe,EAIR,KAAMyF,KAEE5K,EAAUA,EAAQoL,eAAiBpL,EAAUwH,KAAmB3I,GACtEqI,EAAalH,GAEdA,EAAUA,GAAWnB,EAEhBuI,GAAiB,CAIrB,GAAkB,KAAbhD,IAAoB4G,EAAQlB,EAAWuB,KAAMtL,IAGjD,GAAM8K,EAAIG,EAAM,IAGf,GAAkB,IAAb5G,EAAiB,CACrB,KAAM1C,EAAO1B,EAAQsL,eAAgBT,IAUpC,MAAO1F,EALP,IAAKzD,EAAK6J,KAAOV,EAEhB,MADA1F,GAAQ7F,KAAMoC,GACPyD,MAYT,IAAKgG,IAAezJ,EAAOyJ,EAAWG,eAAgBT,KACrDtD,EAAUvH,EAAS0B,IACnBA,EAAK6J,KAAOV,EAGZ,MADA1F,GAAQ7F,KAAMoC,GACPyD,MAKH,CAAA,GAAK6F,EAAM,GAEjB,MADA1L,GAAKsC,MAAOuD,EAASnF,EAAQwL,qBAAsBzL,IAC5CoF,CAGD,KAAM0F,EAAIG,EAAM,KAAOpL,EAAQ6L,wBACrCzL,EAAQyL,uBAGR,MADAnM,GAAKsC,MAAOuD,EAASnF,EAAQyL,uBAAwBZ,IAC9C1F,EAKT,GAAKvF,EAAQ8L,MACX5D,EAAe/H,EAAW,QACzBsH,IAAcA,EAAUsE,KAAM5L,IAAc,CAE9C,GAAkB,IAAbqE,EACJ+G,EAAanL,EACbkL,EAAcnL,MAMR,IAAwC,WAAnCC,EAAQ6E,SAASC,cAA6B,EAGnDgG,EAAM9K,EAAQ4L,aAAc,OACjCd,EAAMA,EAAIxH,QAAS0G,GAAS,QAE5BhK,EAAQ6L,aAAc,KAAOf,EAAM3H,GAIpC8H,EAASrE,EAAU7G,GACnB4B,EAAIsJ,EAAOpK,OACXkK,EAAY9B,EAAY0C,KAAMb,GAAQ,IAAMA,EAAM,QAAUA,EAAM,IAClE,OAAQnJ,IACPsJ,EAAOtJ,GAAKoJ,EAAY,IAAMe,GAAYb,EAAOtJ,GAElDuJ,GAAcD,EAAOc,KAAM,KAG3BZ,EAAapB,EAAS4B,KAAM5L,IAAciM,GAAahM,EAAQiM,aAC9DjM,EAGF,GAAKkL,EACJ,IAIC,MAHA5L,GAAKsC,MAAOuD,EACXgG,EAAWe,iBAAkBhB,IAEvB/F,EACN,MAAQgH,IACR,QACIrB,IAAQ3H,GACZnD,EAAQoM,gBAAiB,QAS/B,MAAOtF,GAAQ/G,EAASuD,QAASnD,EAAO,MAAQH,EAASmF,EAASyF,GASnE,QAAShD,MACR,GAAIyE,KAEJ,SAASC,GAAOnI,EAAK2B,GAMpB,MAJKuG,GAAK/M,KAAM6E,EAAM,KAAQsC,EAAK8F,mBAE3BD,GAAOD,EAAKG,SAEZF,EAAOnI,EAAM,KAAQ2B,EAE9B,MAAOwG,GAOR,QAASG,IAAcxM,GAEtB,MADAA,GAAIkD,IAAY,EACTlD,EAOR,QAASyM,IAAQzM,GAChB,GAAI0M,GAAM9N,EAAS+N,cAAc,MAEjC,KACC,QAAS3M,EAAI0M,GACZ,MAAOtI,GACR,OAAO,EACN,QAEIsI,EAAIV,YACRU,EAAIV,WAAWY,YAAaF,GAG7BA,EAAM,MASR,QAASG,IAAWC,EAAOC,GAC1B,GAAI9H,GAAM6H,EAAMxG,MAAM,KACrB5E,EAAIuD,EAAIrE,MAET,OAAQc,IACP8E,EAAKwG,WAAY/H,EAAIvD,IAAOqL,EAU9B,QAASE,IAAclF,EAAGC,GACzB,GAAIkF,GAAMlF,GAAKD,EACdoF,EAAOD,GAAsB,IAAfnF,EAAE5D,UAAiC,IAAf6D,EAAE7D,YAChC6D,EAAEoF,aAAenF,KACjBF,EAAEqF,aAAenF,EAGtB,IAAKkF,EACJ,MAAOA,EAIR,IAAKD,EACJ,MAASA,EAAMA,EAAIG,YAClB,GAAKH,IAAQlF,EACZ,MAAO,EAKV,OAAOD,GAAI,EAAI,GAOhB,QAASuF,IAAmB3J,GAC3B,MAAO,UAAUlC,GAChB,GAAIgB,GAAOhB,EAAKmD,SAASC,aACzB,OAAgB,UAATpC,GAAoBhB,EAAKkC,OAASA,GAQ3C,QAAS4J,IAAoB5J,GAC5B,MAAO,UAAUlC,GAChB,GAAIgB,GAAOhB,EAAKmD,SAASC,aACzB,QAAiB,UAATpC,GAA6B,WAATA,IAAsBhB,EAAKkC,OAASA,GAQlE,QAAS6J,IAAwBxN,GAChC,MAAOwM,IAAa,SAAUiB,GAE7B,MADAA,IAAYA,EACLjB,GAAa,SAAU7B,EAAMjF,GACnC,GAAIzD,GACHyL,EAAe1N,KAAQ2K,EAAK/J,OAAQ6M,GACpC/L,EAAIgM,EAAa9M,MAGlB,OAAQc,IACFiJ,EAAO1I,EAAIyL,EAAahM,MAC5BiJ,EAAK1I,KAAOyD,EAAQzD,GAAK0I,EAAK1I,SAYnC,QAAS8J,IAAahM,GACrB,MAAOA,IAAmD,mBAAjCA,GAAQwL,sBAAwCxL,EAI1EJ,EAAU4G,GAAO5G,WAOjB+G,EAAQH,GAAOG,MAAQ,SAAUjF,GAGhC,GAAIkM,GAAkBlM,IAASA,EAAK0J,eAAiB1J,GAAMkM,eAC3D,OAAOA,GAA+C,SAA7BA,EAAgB/I,UAAsB,GAQhEqC,EAAcV,GAAOU,YAAc,SAAU2G,GAC5C,GAAIC,GAAYC,EACfC,EAAMH,EAAOA,EAAKzC,eAAiByC,EAAOrG,CAG3C,OAAKwG,KAAQnP,GAA6B,IAAjBmP,EAAI5J,UAAmB4J,EAAIJ,iBAKpD/O,EAAWmP,EACX7G,EAAUtI,EAAS+O,gBACnBxG,GAAkBT,EAAO9H,IAInBkP,EAASlP,EAASoP,cAAgBF,EAAOG,MAAQH,IAEjDA,EAAOI,iBACXJ,EAAOI,iBAAkB,SAAU1D,IAAe,GAGvCsD,EAAOK,aAClBL,EAAOK,YAAa,WAAY3D,KAUlC7K,EAAQ6I,WAAaiE,GAAO,SAAUC,GAErC,MADAA,GAAI0B,UAAY,KACR1B,EAAIf,aAAa,eAO1BhM,EAAQ4L,qBAAuBkB,GAAO,SAAUC,GAE/C,MADAA,GAAI2B,YAAazP,EAAS0P,cAAc,MAChC5B,EAAInB,qBAAqB,KAAK3K,SAIvCjB,EAAQ6L,uBAAyB5B,EAAQ8B,KAAM9M,EAAS4M,wBAMxD7L,EAAQ4O,QAAU9B,GAAO,SAAUC,GAElC,MADAxF,GAAQmH,YAAa3B,GAAMpB,GAAKpI,GACxBtE,EAAS4P,oBAAsB5P,EAAS4P,kBAAmBtL,GAAUtC,SAIzEjB,EAAQ4O,SACZ/H,EAAKiI,KAAS,GAAI,SAAUnD,EAAIvL,GAC/B,GAAuC,mBAA3BA,GAAQsL,gBAAkClE,EAAiB,CACtE,GAAIyD,GAAI7K,EAAQsL,eAAgBC,EAChC,OAAOV,IAAMA,QAGfpE,EAAKkI,OAAW,GAAI,SAAUpD,GAC7B,GAAIqD,GAASrD,EAAGjI,QAAS2G,GAAWC,GACpC,OAAO,UAAUxI,GAChB,MAAOA,GAAKkK,aAAa,QAAUgD,YAM9BnI,GAAKiI,KAAS,GAErBjI,EAAKkI,OAAW,GAAK,SAAUpD,GAC9B,GAAIqD,GAASrD,EAAGjI,QAAS2G,GAAWC,GACpC,OAAO,UAAUxI,GAChB,GAAImM,GAAwC,mBAA1BnM,GAAKmN,kBACtBnN,EAAKmN,iBAAiB,KACvB,OAAOhB,IAAQA,EAAK/H,QAAU8I,KAMjCnI,EAAKiI,KAAU,IAAI9O,EAAQ4L,qBAC1B,SAAUsD,EAAK9O,GACd,MAA6C,mBAAjCA,GAAQwL,qBACZxL,EAAQwL,qBAAsBsD,GAG1BlP,EAAQ8L,IACZ1L,EAAQkM,iBAAkB4C,GAD3B,QAKR,SAAUA,EAAK9O,GACd,GAAI0B,GACHwE,KACAvE,EAAI,EAEJwD,EAAUnF,EAAQwL,qBAAsBsD,EAGzC,IAAa,MAARA,EAAc,CAClB,MAASpN,EAAOyD,EAAQxD,KACA,IAAlBD,EAAK0C,UACT8B,EAAI5G,KAAMoC,EAIZ,OAAOwE,GAER,MAAOf,IAITsB,EAAKiI,KAAY,MAAI9O,EAAQ6L,wBAA0B,SAAU4C,EAAWrO,GAC3E,MAA+C,mBAAnCA,GAAQyL,wBAA0CrE,EACtDpH,EAAQyL,uBAAwB4C,GADxC,QAWD/G,KAOAD,MAEMzH,EAAQ8L,IAAM7B,EAAQ8B,KAAM9M,EAASqN,qBAG1CQ,GAAO,SAAUC,GAMhBxF,EAAQmH,YAAa3B,GAAMoC,UAAY,UAAY5L,EAAU,qBAC3CA,EAAU,kEAOvBwJ,EAAIT,iBAAiB,wBAAwBrL,QACjDwG,EAAU/H,KAAM,SAAWiJ,EAAa,gBAKnCoE,EAAIT,iBAAiB,cAAcrL,QACxCwG,EAAU/H,KAAM,MAAQiJ,EAAa,aAAeD,EAAW,KAI1DqE,EAAIT,iBAAkB,QAAU/I,EAAU,MAAOtC,QACtDwG,EAAU/H,KAAK,MAMVqN,EAAIT,iBAAiB,YAAYrL,QACtCwG,EAAU/H,KAAK,YAMVqN,EAAIT,iBAAkB,KAAO/I,EAAU,MAAOtC,QACnDwG,EAAU/H,KAAK,cAIjBoN,GAAO,SAAUC,GAGhB,GAAIqC,GAAQnQ,EAAS+N,cAAc,QACnCoC,GAAMnD,aAAc,OAAQ,UAC5Bc,EAAI2B,YAAaU,GAAQnD,aAAc,OAAQ,KAI1Cc,EAAIT,iBAAiB,YAAYrL,QACrCwG,EAAU/H,KAAM,OAASiJ,EAAa,eAKjCoE,EAAIT,iBAAiB,YAAYrL,QACtCwG,EAAU/H,KAAM,WAAY,aAI7BqN,EAAIT,iBAAiB,QACrB7E,EAAU/H,KAAK,YAIXM,EAAQqP,gBAAkBpF,EAAQ8B,KAAOhG,EAAUwB,EAAQxB,SAChEwB,EAAQ+H,uBACR/H,EAAQgI,oBACRhI,EAAQiI,kBACRjI,EAAQkI,qBAER3C,GAAO,SAAUC,GAGhB/M,EAAQ0P,kBAAoB3J,EAAQ5E,KAAM4L,EAAK,OAI/ChH,EAAQ5E,KAAM4L,EAAK,aACnBrF,EAAchI,KAAM,KAAMoJ,KAI5BrB,EAAYA,EAAUxG,QAAU,GAAI+H,QAAQvB,EAAU0E,KAAK,MAC3DzE,EAAgBA,EAAczG,QAAU,GAAI+H,QAAQtB,EAAcyE,KAAK,MAIvE+B,EAAajE,EAAQ8B,KAAMxE,EAAQoI,yBAKnChI,EAAWuG,GAAcjE,EAAQ8B,KAAMxE,EAAQI,UAC9C,SAAUS,EAAGC,GACZ,GAAIuH,GAAuB,IAAfxH,EAAE5D,SAAiB4D,EAAE4F,gBAAkB5F,EAClDyH,EAAMxH,GAAKA,EAAEgE,UACd,OAAOjE,KAAMyH,MAAWA,GAAwB,IAAjBA,EAAIrL,YAClCoL,EAAMjI,SACLiI,EAAMjI,SAAUkI,GAChBzH,EAAEuH,yBAA8D,GAAnCvH,EAAEuH,wBAAyBE,MAG3D,SAAUzH,EAAGC,GACZ,GAAKA,EACJ,MAASA,EAAIA,EAAEgE,WACd,GAAKhE,IAAMD,EACV,OAAO,CAIV,QAAO,GAOTD,EAAY+F,EACZ,SAAU9F,EAAGC,GAGZ,GAAKD,IAAMC,EAEV,MADAhB,IAAe,EACR,CAIR,IAAIyI,IAAW1H,EAAEuH,yBAA2BtH,EAAEsH,uBAC9C,OAAKG,GACGA,GAIRA,GAAY1H,EAAEoD,eAAiBpD,MAAUC,EAAEmD,eAAiBnD,GAC3DD,EAAEuH,wBAAyBtH,GAG3B,EAGc,EAAVyH,IACF9P,EAAQ+P,cAAgB1H,EAAEsH,wBAAyBvH,KAAQ0H,EAGxD1H,IAAMnJ,GAAYmJ,EAAEoD,gBAAkB5D,GAAgBD,EAASC,EAAcQ,GAC1E,GAEHC,IAAMpJ,GAAYoJ,EAAEmD,gBAAkB5D,GAAgBD,EAASC,EAAcS,GAC1E,EAIDjB,EACJzH,EAASyH,EAAWgB,GAAMzI,EAASyH,EAAWiB,GAChD,EAGe,EAAVyH,EAAc,GAAK,IAE3B,SAAU1H,EAAGC,GAEZ,GAAKD,IAAMC,EAEV,MADAhB,IAAe,EACR,CAGR,IAAIkG,GACHxL,EAAI,EACJiO,EAAM5H,EAAEiE,WACRwD,EAAMxH,EAAEgE,WACR4D,GAAO7H,GACP8H,GAAO7H,EAGR,KAAM2H,IAAQH,EACb,MAAOzH,KAAMnJ,EAAW,GACvBoJ,IAAMpJ,EAAW,EACjB+Q,EAAM,GACNH,EAAM,EACNzI,EACEzH,EAASyH,EAAWgB,GAAMzI,EAASyH,EAAWiB,GAChD,CAGK,IAAK2H,IAAQH,EACnB,MAAOvC,IAAclF,EAAGC,EAIzBkF,GAAMnF,CACN,OAASmF,EAAMA,EAAIlB,WAClB4D,EAAGE,QAAS5C,EAEbA,GAAMlF,CACN,OAASkF,EAAMA,EAAIlB,WAClB6D,EAAGC,QAAS5C,EAIb,OAAQ0C,EAAGlO,KAAOmO,EAAGnO,GACpBA,GAGD,OAAOA,GAENuL,GAAc2C,EAAGlO,GAAImO,EAAGnO,IAGxBkO,EAAGlO,KAAO6F,EAAe,GACzBsI,EAAGnO,KAAO6F,EAAe,EACzB,GAGK3I,GArWCA,GAwWT2H,GAAOb,QAAU,SAAUqK,EAAMC,GAChC,MAAOzJ,IAAQwJ,EAAM,KAAM,KAAMC,IAGlCzJ,GAAOyI,gBAAkB,SAAUvN,EAAMsO,GASxC,IAPOtO,EAAK0J,eAAiB1J,KAAW7C,GACvCqI,EAAaxF,GAIdsO,EAAOA,EAAK1M,QAASyF,EAAkB,UAElCnJ,EAAQqP,iBAAmB7H,IAC9BU,EAAekI,EAAO,QACpB1I,IAAkBA,EAAcqE,KAAMqE,OACtC3I,IAAkBA,EAAUsE,KAAMqE,IAErC,IACC,GAAI5O,GAAMuE,EAAQ5E,KAAMW,EAAMsO,EAG9B,IAAK5O,GAAOxB,EAAQ0P,mBAGlB5N,EAAK7C,UAAuC,KAA3B6C,EAAK7C,SAASuF,SAChC,MAAOhD,GAEP,MAAOiD,IAGV,MAAOmC,IAAQwJ,EAAMnR,EAAU,MAAQ6C,IAASb,OAAS,GAG1D2F,GAAOe,SAAW,SAAUvH,EAAS0B,GAKpC,OAHO1B,EAAQoL,eAAiBpL,KAAcnB,GAC7CqI,EAAalH,GAEPuH,EAAUvH,EAAS0B,IAG3B8E,GAAO0J,KAAO,SAAUxO,EAAMgB,IAEtBhB,EAAK0J,eAAiB1J,KAAW7C,GACvCqI,EAAaxF,EAGd,IAAIzB,GAAKwG,EAAKwG,WAAYvK,EAAKoC,eAE9BqL,EAAMlQ,GAAMP,EAAOqB,KAAM0F,EAAKwG,WAAYvK,EAAKoC,eAC9C7E,EAAIyB,EAAMgB,GAAO0E,GACjBlE,MAEF,OAAeA,UAARiN,EACNA,EACAvQ,EAAQ6I,aAAerB,EACtB1F,EAAKkK,aAAclJ,IAClByN,EAAMzO,EAAKmN,iBAAiBnM,KAAUyN,EAAIC,UAC1CD,EAAIrK,MACJ,MAGJU,GAAOhD,MAAQ,SAAUC,GACxB,KAAM,IAAI1E,OAAO,0CAA4C0E,IAO9D+C,GAAO6J,WAAa,SAAUlL,GAC7B,GAAIzD,GACH4O,KACApO,EAAI,EACJP,EAAI,CAOL,IAJAsF,GAAgBrH,EAAQ2Q,iBACxBvJ,GAAapH,EAAQ4Q,YAAcrL,EAAQ/F,MAAO,GAClD+F,EAAQ/C,KAAM2F,GAETd,EAAe,CACnB,MAASvF,EAAOyD,EAAQxD,KAClBD,IAASyD,EAASxD,KACtBO,EAAIoO,EAAWhR,KAAMqC,GAGvB,OAAQO,IACPiD,EAAQ9C,OAAQiO,EAAYpO,GAAK,GAQnC,MAFA8E,GAAY,KAEL7B,GAORuB,EAAUF,GAAOE,QAAU,SAAUhF,GACpC,GAAImM,GACHzM,EAAM,GACNO,EAAI,EACJyC,EAAW1C,EAAK0C,QAEjB,IAAMA,GAMC,GAAkB,IAAbA,GAA+B,IAAbA,GAA+B,KAAbA,EAAkB,CAGjE,GAAiC,gBAArB1C,GAAK+O,YAChB,MAAO/O,GAAK+O,WAGZ,KAAM/O,EAAOA,EAAKgP,WAAYhP,EAAMA,EAAOA,EAAK4L,YAC/ClM,GAAOsF,EAAShF,OAGZ,IAAkB,IAAb0C,GAA+B,IAAbA,EAC7B,MAAO1C,GAAKiP,cAhBZ,OAAS9C,EAAOnM,EAAKC,KAEpBP,GAAOsF,EAASmH,EAkBlB,OAAOzM,IAGRqF,EAAOD,GAAOoK,WAGbrE,YAAa,GAEbsE,aAAcpE,GAEdzB,MAAO9B,EAEP+D,cAEAyB,QAEAoC,UACCC,KAAOC,IAAK,aAAclP,OAAO,GACjCmP,KAAOD,IAAK,cACZE,KAAOF,IAAK,kBAAmBlP,OAAO,GACtCqP,KAAOH,IAAK,oBAGbI,WACC9H,KAAQ,SAAU0B,GAUjB,MATAA,GAAM,GAAKA,EAAM,GAAG1H,QAAS2G,GAAWC,IAGxCc,EAAM,IAAOA,EAAM,IAAMA,EAAM,IAAMA,EAAM,IAAM,IAAK1H,QAAS2G,GAAWC,IAExD,OAAbc,EAAM,KACVA,EAAM,GAAK,IAAMA,EAAM,GAAK,KAGtBA,EAAM5L,MAAO,EAAG,IAGxBoK,MAAS,SAAUwB,GA6BlB,MAlBAA,GAAM,GAAKA,EAAM,GAAGlG,cAEY,QAA3BkG,EAAM,GAAG5L,MAAO,EAAG,IAEjB4L,EAAM,IACXxE,GAAOhD,MAAOwH,EAAM,IAKrBA,EAAM,KAAQA,EAAM,GAAKA,EAAM,IAAMA,EAAM,IAAM,GAAK,GAAmB,SAAbA,EAAM,IAA8B,QAAbA,EAAM,KACzFA,EAAM,KAAUA,EAAM,GAAKA,EAAM,IAAqB,QAAbA,EAAM,KAGpCA,EAAM,IACjBxE,GAAOhD,MAAOwH,EAAM,IAGdA,GAGRzB,OAAU,SAAUyB,GACnB,GAAIqG,GACHC,GAAYtG,EAAM,IAAMA,EAAM,EAE/B,OAAK9B,GAAiB,MAAEyC,KAAMX,EAAM,IAC5B,MAIHA,EAAM,GACVA,EAAM,GAAKA,EAAM,IAAMA,EAAM,IAAM,GAGxBsG,GAAYtI,EAAQ2C,KAAM2F,KAEpCD,EAASzK,EAAU0K,GAAU,MAE7BD,EAASC,EAAS/R,QAAS,IAAK+R,EAASzQ,OAASwQ,GAAWC,EAASzQ,UAGvEmK,EAAM,GAAKA,EAAM,GAAG5L,MAAO,EAAGiS,GAC9BrG,EAAM,GAAKsG,EAASlS,MAAO,EAAGiS,IAIxBrG,EAAM5L,MAAO,EAAG,MAIzBuP,QAECtF,IAAO,SAAUkI,GAChB,GAAI1M,GAAW0M,EAAiBjO,QAAS2G,GAAWC,IAAYpF,aAChE,OAA4B,MAArByM,EACN,WAAa,OAAO,GACpB,SAAU7P,GACT,MAAOA,GAAKmD,UAAYnD,EAAKmD,SAASC,gBAAkBD,IAI3DuE,MAAS,SAAUiF,GAClB,GAAImD,GAAU7J,EAAY0G,EAAY,IAEtC,OAAOmD,KACLA,EAAU,GAAI5I,QAAQ,MAAQL,EAAa,IAAM8F,EAAY,IAAM9F,EAAa,SACjFZ,EAAY0G,EAAW,SAAU3M,GAChC,MAAO8P,GAAQ7F,KAAgC,gBAAnBjK,GAAK2M,WAA0B3M,EAAK2M,WAA0C,mBAAtB3M,GAAKkK,cAAgClK,EAAKkK,aAAa,UAAY,OAI1JtC,KAAQ,SAAU5G,EAAM+O,EAAUC,GACjC,MAAO,UAAUhQ,GAChB,GAAIiQ,GAASnL,GAAO0J,KAAMxO,EAAMgB,EAEhC,OAAe,OAAViP,EACgB,OAAbF,EAEFA,GAINE,GAAU,GAEU,MAAbF,EAAmBE,IAAWD,EACvB,OAAbD,EAAoBE,IAAWD,EAClB,OAAbD,EAAoBC,GAAqC,IAA5BC,EAAOpS,QAASmS,GAChC,OAAbD,EAAoBC,GAASC,EAAOpS,QAASmS,GAAU,GAC1C,OAAbD,EAAoBC,GAASC,EAAOvS,OAAQsS,EAAM7Q,UAAa6Q,EAClD,OAAbD,GAAsB,IAAME,EAAOrO,QAASqF,EAAa,KAAQ,KAAMpJ,QAASmS,GAAU,GAC7E,OAAbD,EAAoBE,IAAWD,GAASC,EAAOvS,MAAO,EAAGsS,EAAM7Q,OAAS,KAAQ6Q,EAAQ,KACxF,IAZO,IAgBVlI,MAAS,SAAU5F,EAAMgO,EAAMlE,EAAU5L,EAAOE,GAC/C,GAAI6P,GAAgC,QAAvBjO,EAAKxE,MAAO,EAAG,GAC3B0S,EAA+B,SAArBlO,EAAKxE,MAAO,IACtB2S,EAAkB,YAATH,CAEV,OAAiB,KAAV9P,GAAwB,IAATE,EAGrB,SAAUN,GACT,QAASA,EAAKuK,YAGf,SAAUvK,EAAM1B,EAASgS,GACxB,GAAI1F,GAAO2F,EAAaC,EAAYrE,EAAMsE,EAAWC,EACpDpB,EAAMa,IAAWC,EAAU,cAAgB,kBAC3C/D,EAASrM,EAAKuK,WACdvJ,EAAOqP,GAAUrQ,EAAKmD,SAASC,cAC/BuN,GAAYL,IAAQD,EACpB3E,GAAO,CAER,IAAKW,EAAS,CAGb,GAAK8D,EAAS,CACb,MAAQb,EAAM,CACbnD,EAAOnM,CACP,OAASmM,EAAOA,EAAMmD,GACrB,GAAKe,EACJlE,EAAKhJ,SAASC,gBAAkBpC,EACd,IAAlBmL,EAAKzJ,SAEL,OAAO,CAITgO,GAAQpB,EAAe,SAATpN,IAAoBwO,GAAS,cAE5C,OAAO,EAMR,GAHAA,GAAUN,EAAU/D,EAAO2C,WAAa3C,EAAOuE,WAG1CR,GAAWO,EAAW,CAK1BxE,EAAOE,EACPmE,EAAarE,EAAM1K,KAAc0K,EAAM1K,OAIvC8O,EAAcC,EAAYrE,EAAK0E,YAC7BL,EAAYrE,EAAK0E,cAEnBjG,EAAQ2F,EAAarO,OACrBuO,EAAY7F,EAAO,KAAQ7E,GAAW6E,EAAO,GAC7Cc,EAAO+E,GAAa7F,EAAO,GAC3BuB,EAAOsE,GAAapE,EAAOrD,WAAYyH,EAEvC,OAAStE,IAASsE,GAAatE,GAAQA,EAAMmD,KAG3C5D,EAAO+E,EAAY,IAAMC,EAAMjK,MAGhC,GAAuB,IAAlB0F,EAAKzJ,YAAoBgJ,GAAQS,IAASnM,EAAO,CACrDuQ,EAAarO,IAAW6D,EAAS0K,EAAW/E,EAC5C,YAuBF,IAjBKiF,IAEJxE,EAAOnM,EACPwQ,EAAarE,EAAM1K,KAAc0K,EAAM1K,OAIvC8O,EAAcC,EAAYrE,EAAK0E,YAC7BL,EAAYrE,EAAK0E,cAEnBjG,EAAQ2F,EAAarO,OACrBuO,EAAY7F,EAAO,KAAQ7E,GAAW6E,EAAO,GAC7Cc,EAAO+E,GAKH/E,KAAS,EAEb,MAASS,IAASsE,GAAatE,GAAQA,EAAMmD,KAC3C5D,EAAO+E,EAAY,IAAMC,EAAMjK,MAEhC,IAAO4J,EACNlE,EAAKhJ,SAASC,gBAAkBpC,EACd,IAAlBmL,EAAKzJ,aACHgJ,IAGGiF,IACJH,EAAarE,EAAM1K,KAAc0K,EAAM1K,OAIvC8O,EAAcC,EAAYrE,EAAK0E,YAC7BL,EAAYrE,EAAK0E,cAEnBN,EAAarO,IAAW6D,EAAS2F,IAG7BS,IAASnM,GACb,KASL,OADA0L,IAAQpL,EACDoL,IAAStL,GAAWsL,EAAOtL,IAAU,GAAKsL,EAAOtL,GAAS,KAKrEyH,OAAU,SAAUiJ,EAAQ9E,GAK3B,GAAIzH,GACHhG,EAAKwG,EAAKiC,QAAS8J,IAAY/L,EAAKgM,WAAYD,EAAO1N,gBACtD0B,GAAOhD,MAAO,uBAAyBgP,EAKzC,OAAKvS,GAAIkD,GACDlD,EAAIyN,GAIPzN,EAAGY,OAAS,GAChBoF,GAASuM,EAAQA,EAAQ,GAAI9E,GACtBjH,EAAKgM,WAAW9S,eAAgB6S,EAAO1N,eAC7C2H,GAAa,SAAU7B,EAAMjF,GAC5B,GAAI+M,GACHC,EAAU1S,EAAI2K,EAAM8C,GACpB/L,EAAIgR,EAAQ9R,MACb,OAAQc,IACP+Q,EAAMnT,EAASqL,EAAM+H,EAAQhR,IAC7BiJ,EAAM8H,KAAW/M,EAAS+M,GAAQC,EAAQhR,MAG5C,SAAUD,GACT,MAAOzB,GAAIyB,EAAM,EAAGuE,KAIhBhG,IAITyI,SAECkK,IAAOnG,GAAa,SAAU1M,GAI7B,GAAIiP,MACH7J,KACA0N,EAAUhM,EAAS9G,EAASuD,QAASnD,EAAO,MAE7C,OAAO0S,GAAS1P,GACfsJ,GAAa,SAAU7B,EAAMjF,EAAS3F,EAASgS,GAC9C,GAAItQ,GACHoR,EAAYD,EAASjI,EAAM,KAAMoH,MACjCrQ,EAAIiJ,EAAK/J,MAGV,OAAQc,KACDD,EAAOoR,EAAUnR,MACtBiJ,EAAKjJ,KAAOgE,EAAQhE,GAAKD,MAI5B,SAAUA,EAAM1B,EAASgS,GAKxB,MAJAhD,GAAM,GAAKtN,EACXmR,EAAS7D,EAAO,KAAMgD,EAAK7M,GAE3B6J,EAAM,GAAK,MACH7J,EAAQgD,SAInB4K,IAAOtG,GAAa,SAAU1M,GAC7B,MAAO,UAAU2B,GAChB,MAAO8E,IAAQzG,EAAU2B,GAAOb,OAAS,KAI3C0G,SAAYkF,GAAa,SAAUzH,GAElC,MADAA,GAAOA,EAAK1B,QAAS2G,GAAWC,IACzB,SAAUxI,GAChB,OAASA,EAAK+O,aAAe/O,EAAKsR,WAAatM,EAAShF,IAASnC,QAASyF,GAAS,MAWrFiO,KAAQxG,GAAc,SAAUwG,GAM/B,MAJMhK,GAAY0C,KAAKsH,GAAQ,KAC9BzM,GAAOhD,MAAO,qBAAuByP,GAEtCA,EAAOA,EAAK3P,QAAS2G,GAAWC,IAAYpF,cACrC,SAAUpD,GAChB,GAAIwR,EACJ,GACC,IAAMA,EAAW9L,EAChB1F,EAAKuR,KACLvR,EAAKkK,aAAa,aAAelK,EAAKkK,aAAa,QAGnD,MADAsH,GAAWA,EAASpO,cACboO,IAAaD,GAA2C,IAAnCC,EAAS3T,QAAS0T,EAAO,YAE5CvR,EAAOA,EAAKuK,aAAiC,IAAlBvK,EAAK0C,SAC3C,QAAO,KAKTvB,OAAU,SAAUnB,GACnB,GAAIyR,GAAOnU,EAAOoU,UAAYpU,EAAOoU,SAASD,IAC9C,OAAOA,IAAQA,EAAK/T,MAAO,KAAQsC,EAAK6J,IAGzC8H,KAAQ,SAAU3R,GACjB,MAAOA,KAASyF,GAGjBmM,MAAS,SAAU5R,GAClB,MAAOA,KAAS7C,EAAS0U,iBAAmB1U,EAAS2U,UAAY3U,EAAS2U,gBAAkB9R,EAAKkC,MAAQlC,EAAK+R,OAAS/R,EAAKgS,WAI7HC,QAAW,SAAUjS,GACpB,MAAOA,GAAKkS,YAAa,GAG1BA,SAAY,SAAUlS,GACrB,MAAOA,GAAKkS,YAAa,GAG1BC,QAAW,SAAUnS,GAGpB,GAAImD,GAAWnD,EAAKmD,SAASC,aAC7B,OAAqB,UAAbD,KAA0BnD,EAAKmS,SAA0B,WAAbhP,KAA2BnD,EAAKoS,UAGrFA,SAAY,SAAUpS,GAOrB,MAJKA,GAAKuK,YACTvK,EAAKuK,WAAW8H,cAGVrS,EAAKoS,YAAa,GAI1BE,MAAS,SAAUtS,GAKlB,IAAMA,EAAOA,EAAKgP,WAAYhP,EAAMA,EAAOA,EAAK4L,YAC/C,GAAK5L,EAAK0C,SAAW,EACpB,OAAO,CAGT,QAAO,GAGR2J,OAAU,SAAUrM,GACnB,OAAQ+E,EAAKiC,QAAe,MAAGhH,IAIhCuS,OAAU,SAAUvS,GACnB,MAAOkI,GAAQ+B,KAAMjK,EAAKmD,WAG3BmK,MAAS,SAAUtN,GAClB,MAAOiI,GAAQgC,KAAMjK,EAAKmD,WAG3BqP,OAAU,SAAUxS,GACnB,GAAIgB,GAAOhB,EAAKmD,SAASC,aACzB,OAAgB,UAATpC,GAAkC,WAAdhB,EAAKkC,MAA8B,WAATlB,GAGtDsC,KAAQ,SAAUtD,GACjB,GAAIwO,EACJ,OAAuC,UAAhCxO,EAAKmD,SAASC,eACN,SAAdpD,EAAKkC,OAImC,OAArCsM,EAAOxO,EAAKkK,aAAa,UAA2C,SAAvBsE,EAAKpL,gBAIvDhD,MAAS2L,GAAuB,WAC/B,OAAS,KAGVzL,KAAQyL,GAAuB,SAAUE,EAAc9M,GACtD,OAASA,EAAS,KAGnBkB,GAAM0L,GAAuB,SAAUE,EAAc9M,EAAQ6M,GAC5D,OAAoB,EAAXA,EAAeA,EAAW7M,EAAS6M,KAG7CyG,KAAQ1G,GAAuB,SAAUE,EAAc9M,GAEtD,IADA,GAAIc,GAAI,EACId,EAAJc,EAAYA,GAAK,EACxBgM,EAAarO,KAAMqC,EAEpB,OAAOgM,KAGRyG,IAAO3G,GAAuB,SAAUE,EAAc9M,GAErD,IADA,GAAIc,GAAI,EACId,EAAJc,EAAYA,GAAK,EACxBgM,EAAarO,KAAMqC,EAEpB,OAAOgM,KAGR0G,GAAM5G,GAAuB,SAAUE,EAAc9M,EAAQ6M,GAE5D,IADA,GAAI/L,GAAe,EAAX+L,EAAeA,EAAW7M,EAAS6M,IACjC/L,GAAK,GACdgM,EAAarO,KAAMqC,EAEpB,OAAOgM,KAGR2G,GAAM7G,GAAuB,SAAUE,EAAc9M,EAAQ6M,GAE5D,IADA,GAAI/L,GAAe,EAAX+L,EAAeA,EAAW7M,EAAS6M,IACjC/L,EAAId,GACb8M,EAAarO,KAAMqC,EAEpB,OAAOgM,OAKVlH,EAAKiC,QAAa,IAAIjC,EAAKiC,QAAY,EAGvC,KAAM/G,KAAO4S,OAAO,EAAMC,UAAU,EAAMC,MAAM,EAAMC,UAAU,EAAMC,OAAO,GAC5ElO,EAAKiC,QAAS/G,GAAM4L,GAAmB5L,EAExC,KAAMA,KAAOiT,QAAQ,EAAMC,OAAO,GACjCpO,EAAKiC,QAAS/G,GAAM6L,GAAoB7L,EAIzC,SAAS8Q,OACTA,GAAW/R,UAAY+F,EAAKqO,QAAUrO,EAAKiC,QAC3CjC,EAAKgM,WAAa,GAAIA,IAEtB7L,EAAWJ,GAAOI,SAAW,SAAU7G,EAAUgV,GAChD,GAAIpC,GAAS3H,EAAOgK,EAAQpR,EAC3BqR,EAAOhK,EAAQiK,EACfC,EAAStN,EAAY9H,EAAW,IAEjC,IAAKoV,EACJ,MAAOJ,GAAY,EAAII,EAAO/V,MAAO,EAGtC6V,GAAQlV,EACRkL,KACAiK,EAAazO,EAAK2K,SAElB,OAAQ6D,EAAQ,CAGTtC,KAAY3H,EAAQnC,EAAOwC,KAAM4J,MACjCjK,IAEJiK,EAAQA,EAAM7V,MAAO4L,EAAM,GAAGnK,SAAYoU,GAE3ChK,EAAO3L,KAAO0V,OAGfrC,GAAU,GAGJ3H,EAAQlC,EAAauC,KAAM4J,MAChCtC,EAAU3H,EAAMwB,QAChBwI,EAAO1V,MACNwG,MAAO6M,EAEP/O,KAAMoH,EAAM,GAAG1H,QAASnD,EAAO,OAEhC8U,EAAQA,EAAM7V,MAAOuT,EAAQ9R,QAI9B,KAAM+C,IAAQ6C,GAAKkI,SACZ3D,EAAQ9B,EAAWtF,GAAOyH,KAAM4J,KAAcC,EAAYtR,MAC9DoH,EAAQkK,EAAYtR,GAAQoH,MAC7B2H,EAAU3H,EAAMwB,QAChBwI,EAAO1V,MACNwG,MAAO6M,EACP/O,KAAMA,EACN+B,QAASqF,IAEViK,EAAQA,EAAM7V,MAAOuT,EAAQ9R,QAI/B,KAAM8R,EACL,MAOF,MAAOoC,GACNE,EAAMpU,OACNoU,EACCzO,GAAOhD,MAAOzD,GAEd8H,EAAY9H,EAAUkL,GAAS7L,MAAO,GAGzC,SAAS0M,IAAYkJ,GAIpB,IAHA,GAAIrT,GAAI,EACPM,EAAM+S,EAAOnU,OACbd,EAAW,GACAkC,EAAJN,EAASA,IAChB5B,GAAYiV,EAAOrT,GAAGmE,KAEvB,OAAO/F,GAGR,QAASqV,IAAevC,EAASwC,EAAYC,GAC5C,GAAItE,GAAMqE,EAAWrE,IACpBuE,EAAmBD,GAAgB,eAARtE,EAC3BwE,EAAW9N,GAEZ,OAAO2N,GAAWvT,MAEjB,SAAUJ,EAAM1B,EAASgS,GACxB,MAAStQ,EAAOA,EAAMsP,GACrB,GAAuB,IAAlBtP,EAAK0C,UAAkBmR,EAC3B,MAAO1C,GAASnR,EAAM1B,EAASgS,IAMlC,SAAUtQ,EAAM1B,EAASgS,GACxB,GAAIyD,GAAUxD,EAAaC,EAC1BwD,GAAajO,EAAS+N,EAGvB,IAAKxD,GACJ,MAAStQ,EAAOA,EAAMsP,GACrB,IAAuB,IAAlBtP,EAAK0C,UAAkBmR,IACtB1C,EAASnR,EAAM1B,EAASgS,GAC5B,OAAO,MAKV,OAAStQ,EAAOA,EAAMsP,GACrB,GAAuB,IAAlBtP,EAAK0C,UAAkBmR,EAAmB,CAO9C,GANArD,EAAaxQ,EAAMyB,KAAczB,EAAMyB,OAIvC8O,EAAcC,EAAYxQ,EAAK6Q,YAAeL,EAAYxQ,EAAK6Q,eAEzDkD,EAAWxD,EAAajB,KAC7ByE,EAAU,KAAQhO,GAAWgO,EAAU,KAAQD,EAG/C,MAAQE,GAAU,GAAMD,EAAU,EAMlC,IAHAxD,EAAajB,GAAQ0E,EAGfA,EAAU,GAAM7C,EAASnR,EAAM1B,EAASgS,GAC7C,OAAO,IASf,QAAS2D,IAAgBC,GACxB,MAAOA,GAAS/U,OAAS,EACxB,SAAUa,EAAM1B,EAASgS,GACxB,GAAIrQ,GAAIiU,EAAS/U,MACjB,OAAQc,IACP,IAAMiU,EAASjU,GAAID,EAAM1B,EAASgS,GACjC,OAAO,CAGT,QAAO,GAER4D,EAAS,GAGX,QAASC,IAAkB9V,EAAU+V,EAAU3Q,GAG9C,IAFA,GAAIxD,GAAI,EACPM,EAAM6T,EAASjV,OACJoB,EAAJN,EAASA,IAChB6E,GAAQzG,EAAU+V,EAASnU,GAAIwD,EAEhC,OAAOA,GAGR,QAAS4Q,IAAUjD,EAAWrR,EAAKkN,EAAQ3O,EAASgS,GAOnD,IANA,GAAItQ,GACHsU,KACArU,EAAI,EACJM,EAAM6Q,EAAUjS,OAChBoV,EAAgB,MAAPxU,EAEEQ,EAAJN,EAASA,KACVD,EAAOoR,EAAUnR,MAChBgN,IAAUA,EAAQjN,EAAM1B,EAASgS,KACtCgE,EAAa1W,KAAMoC,GACduU,GACJxU,EAAInC,KAAMqC,IAMd,OAAOqU,GAGR,QAASE,IAAY9E,EAAWrR,EAAU8S,EAASsD,EAAYC,EAAYC,GAO1E,MANKF,KAAeA,EAAYhT,KAC/BgT,EAAaD,GAAYC,IAErBC,IAAeA,EAAYjT,KAC/BiT,EAAaF,GAAYE,EAAYC,IAE/B5J,GAAa,SAAU7B,EAAMzF,EAASnF,EAASgS,GACrD,GAAIsE,GAAM3U,EAAGD,EACZ6U,KACAC,KACAC,EAActR,EAAQtE,OAGtBM,EAAQyJ,GAAQiL,GAAkB9V,GAAY,IAAKC,EAAQoE,UAAapE,GAAYA,MAGpF0W,GAAYtF,IAAexG,GAAS7K,EAEnCoB,EADA4U,GAAU5U,EAAOoV,EAAQnF,EAAWpR,EAASgS,GAG9C2E,EAAa9D,EAEZuD,IAAgBxL,EAAOwG,EAAYqF,GAAeN,MAMjDhR,EACDuR,CAQF,IALK7D,GACJA,EAAS6D,EAAWC,EAAY3W,EAASgS,GAIrCmE,EAAa,CACjBG,EAAOP,GAAUY,EAAYH,GAC7BL,EAAYG,KAAUtW,EAASgS,GAG/BrQ,EAAI2U,EAAKzV,MACT,OAAQc,KACDD,EAAO4U,EAAK3U,MACjBgV,EAAYH,EAAQ7U,MAAS+U,EAAWF,EAAQ7U,IAAOD,IAK1D,GAAKkJ,GACJ,GAAKwL,GAAchF,EAAY,CAC9B,GAAKgF,EAAa,CAEjBE,KACA3U,EAAIgV,EAAW9V,MACf,OAAQc,KACDD,EAAOiV,EAAWhV,KAEvB2U,EAAKhX,KAAOoX,EAAU/U,GAAKD,EAG7B0U,GAAY,KAAOO,KAAkBL,EAAMtE,GAI5CrQ,EAAIgV,EAAW9V,MACf,OAAQc,KACDD,EAAOiV,EAAWhV,MACtB2U,EAAOF,EAAa7W,EAASqL,EAAMlJ,GAAS6U,EAAO5U,IAAM,KAE1DiJ,EAAK0L,KAAUnR,EAAQmR,GAAQ5U,SAOlCiV,GAAaZ,GACZY,IAAexR,EACdwR,EAAWtU,OAAQoU,EAAaE,EAAW9V,QAC3C8V,GAEGP,EACJA,EAAY,KAAMjR,EAASwR,EAAY3E,GAEvC1S,EAAKsC,MAAOuD,EAASwR,KAMzB,QAASC,IAAmB5B,GAwB3B,IAvBA,GAAI6B,GAAchE,EAAS3Q,EAC1BD,EAAM+S,EAAOnU,OACbiW,EAAkBrQ,EAAKqK,SAAUkE,EAAO,GAAGpR,MAC3CmT,EAAmBD,GAAmBrQ,EAAKqK,SAAS,KACpDnP,EAAImV,EAAkB,EAAI,EAG1BE,EAAe5B,GAAe,SAAU1T,GACvC,MAAOA,KAASmV,GACdE,GAAkB,GACrBE,EAAkB7B,GAAe,SAAU1T,GAC1C,MAAOnC,GAASsX,EAAcnV,GAAS,IACrCqV,GAAkB,GACrBnB,GAAa,SAAUlU,EAAM1B,EAASgS,GACrC,GAAI5Q,IAAS0V,IAAqB9E,GAAOhS,IAAY+G,MACnD8P,EAAe7W,GAASoE,SACxB4S,EAActV,EAAM1B,EAASgS,GAC7BiF,EAAiBvV,EAAM1B,EAASgS,GAGlC,OADA6E,GAAe,KACRzV,IAGGa,EAAJN,EAASA,IAChB,GAAMkR,EAAUpM,EAAKqK,SAAUkE,EAAOrT,GAAGiC,MACxCgS,GAAaR,GAAcO,GAAgBC,GAAY/C,QACjD,CAIN,GAHAA,EAAUpM,EAAKkI,OAAQqG,EAAOrT,GAAGiC,MAAOhC,MAAO,KAAMoT,EAAOrT,GAAGgE,SAG1DkN,EAAS1P,GAAY,CAGzB,IADAjB,IAAMP,EACMM,EAAJC,EAASA,IAChB,GAAKuE,EAAKqK,SAAUkE,EAAO9S,GAAG0B,MAC7B,KAGF,OAAOsS,IACNvU,EAAI,GAAKgU,GAAgBC,GACzBjU,EAAI,GAAKmK,GAERkJ,EAAO5V,MAAO,EAAGuC,EAAI,GAAItC,QAASyG,MAAgC,MAAzBkP,EAAQrT,EAAI,GAAIiC,KAAe,IAAM,MAC7EN,QAASnD,EAAO,MAClB0S,EACI3Q,EAAJP,GAASiV,GAAmB5B,EAAO5V,MAAOuC,EAAGO,IACzCD,EAAJC,GAAW0U,GAAoB5B,EAASA,EAAO5V,MAAO8C,IAClDD,EAAJC,GAAW4J,GAAYkJ,IAGzBY,EAAStW,KAAMuT,GAIjB,MAAO8C,IAAgBC,GAGxB,QAASsB,IAA0BC,EAAiBC,GACnD,GAAIC,GAAQD,EAAYvW,OAAS,EAChCyW,EAAYH,EAAgBtW,OAAS,EACrC0W,EAAe,SAAU3M,EAAM5K,EAASgS,EAAK7M,EAASqS,GACrD,GAAI9V,GAAMQ,EAAG2Q,EACZ4E,EAAe,EACf9V,EAAI,IACJmR,EAAYlI,MACZ8M,KACAC,EAAgB5Q,EAEhB5F,EAAQyJ,GAAQ0M,GAAa7Q,EAAKiI,KAAU,IAAG,IAAK8I,GAEpDI,EAAiBnQ,GAA4B,MAAjBkQ,EAAwB,EAAIvU,KAAKC,UAAY,GACzEpB,EAAMd,EAAMN,MASb,KAPK2W,IACJzQ,EAAmB/G,IAAYnB,GAAYmB,GAAWwX,GAM/C7V,IAAMM,GAA4B,OAApBP,EAAOP,EAAMQ,IAAaA,IAAM,CACrD,GAAK2V,GAAa5V,EAAO,CACxBQ,EAAI,EACElC,GAAW0B,EAAK0J,gBAAkBvM,IACvCqI,EAAaxF,GACbsQ,GAAO5K,EAER,OAASyL,EAAUsE,EAAgBjV,KAClC,GAAK2Q,EAASnR,EAAM1B,GAAWnB,EAAUmT,GAAO,CAC/C7M,EAAQ7F,KAAMoC,EACd,OAGG8V,IACJ/P,EAAUmQ,GAKPP,KAEE3V,GAAQmR,GAAWnR,IACxB+V,IAII7M,GACJkI,EAAUxT,KAAMoC,IAgBnB,GATA+V,GAAgB9V,EASX0V,GAAS1V,IAAM8V,EAAe,CAClCvV,EAAI,CACJ,OAAS2Q,EAAUuE,EAAYlV,KAC9B2Q,EAASC,EAAW4E,EAAY1X,EAASgS,EAG1C,IAAKpH,EAAO,CAEX,GAAK6M,EAAe,EACnB,MAAQ9V,IACAmR,EAAUnR,IAAM+V,EAAW/V,KACjC+V,EAAW/V,GAAKwG,EAAIpH,KAAMoE,GAM7BuS,GAAa3B,GAAU2B,GAIxBpY,EAAKsC,MAAOuD,EAASuS,GAGhBF,IAAc5M,GAAQ8M,EAAW7W,OAAS,GAC5C4W,EAAeL,EAAYvW,OAAW,GAExC2F,GAAO6J,WAAYlL,GAUrB,MALKqS,KACJ/P,EAAUmQ,EACV7Q,EAAmB4Q,GAGb7E,EAGT,OAAOuE,GACN5K,GAAc8K,GACdA,EAgLF,MA7KA1Q,GAAUL,GAAOK,QAAU,SAAU9G,EAAUiL,GAC9C,GAAIrJ,GACHyV,KACAD,KACAhC,EAASrN,EAAe/H,EAAW,IAEpC,KAAMoV,EAAS,CAERnK,IACLA,EAAQpE,EAAU7G,IAEnB4B,EAAIqJ,EAAMnK,MACV,OAAQc,IACPwT,EAASyB,GAAmB5L,EAAMrJ,IAC7BwT,EAAQhS,GACZiU,EAAY9X,KAAM6V,GAElBgC,EAAgB7X,KAAM6V,EAKxBA,GAASrN,EAAe/H,EAAUmX,GAA0BC,EAAiBC,IAG7EjC,EAAOpV,SAAWA,EAEnB,MAAOoV,IAYRrO,EAASN,GAAOM,OAAS,SAAU/G,EAAUC,EAASmF,EAASyF,GAC9D,GAAIjJ,GAAGqT,EAAQ6C,EAAOjU,EAAM8K,EAC3BoJ,EAA+B,kBAAb/X,IAA2BA,EAC7CiL,GAASJ,GAAQhE,EAAW7G,EAAW+X,EAAS/X,UAAYA,EAM7D,IAJAoF,EAAUA,MAIY,IAAjB6F,EAAMnK,OAAe,CAIzB,GADAmU,EAAShK,EAAM,GAAKA,EAAM,GAAG5L,MAAO,GAC/B4V,EAAOnU,OAAS,GAAkC,QAA5BgX,EAAQ7C,EAAO,IAAIpR,MAC5ChE,EAAQ4O,SAAgC,IAArBxO,EAAQoE,UAAkBgD,GAC7CX,EAAKqK,SAAUkE,EAAO,GAAGpR,MAAS,CAGnC,GADA5D,GAAYyG,EAAKiI,KAAS,GAAGmJ,EAAMlS,QAAQ,GAAGrC,QAAQ2G,GAAWC,IAAYlK,QAAkB,IACzFA,EACL,MAAOmF,EAGI2S,KACX9X,EAAUA,EAAQiM,YAGnBlM,EAAWA,EAASX,MAAO4V,EAAOxI,QAAQ1G,MAAMjF,QAIjDc,EAAIuH,EAAwB,aAAEyC,KAAM5L,GAAa,EAAIiV,EAAOnU,MAC5D,OAAQc,IAAM,CAIb,GAHAkW,EAAQ7C,EAAOrT,GAGV8E,EAAKqK,SAAWlN,EAAOiU,EAAMjU,MACjC,KAED,KAAM8K,EAAOjI,EAAKiI,KAAM9K,MAEjBgH,EAAO8D,EACZmJ,EAAMlS,QAAQ,GAAGrC,QAAS2G,GAAWC,IACrCH,EAAS4B,KAAMqJ,EAAO,GAAGpR,OAAUoI,GAAahM,EAAQiM,aAAgBjM,IACpE,CAKJ,GAFAgV,EAAO3S,OAAQV,EAAG,GAClB5B,EAAW6K,EAAK/J,QAAUiL,GAAYkJ,IAChCjV,EAEL,MADAT,GAAKsC,MAAOuD,EAASyF,GACdzF,CAGR,SAeJ,OAPE2S,GAAYjR,EAAS9G,EAAUiL,IAChCJ,EACA5K,GACCoH,EACDjC,GACCnF,GAAW+J,EAAS4B,KAAM5L,IAAciM,GAAahM,EAAQiM,aAAgBjM,GAExEmF,GAMRvF,EAAQ4Q,WAAarN,EAAQoD,MAAM,IAAInE,KAAM2F,GAAYgE,KAAK,MAAQ5I,EAItEvD,EAAQ2Q,mBAAqBtJ,EAG7BC,IAIAtH,EAAQ+P,aAAejD,GAAO,SAAUqL,GAEvC,MAAuE,GAAhEA,EAAKxI,wBAAyB1Q,EAAS+N,cAAc,UAMvDF,GAAO,SAAUC,GAEtB,MADAA,GAAIoC,UAAY,mBAC+B,MAAxCpC,EAAI+D,WAAW9E,aAAa,WAEnCkB,GAAW,yBAA0B,SAAUpL,EAAMgB,EAAMiE,GAC1D,MAAMA,GAAN,OACQjF,EAAKkK,aAAclJ,EAA6B,SAAvBA,EAAKoC,cAA2B,EAAI,KAOjElF,EAAQ6I,YAAeiE,GAAO,SAAUC,GAG7C,MAFAA,GAAIoC,UAAY,WAChBpC,EAAI+D,WAAW7E,aAAc,QAAS,IACY,KAA3Cc,EAAI+D,WAAW9E,aAAc,YAEpCkB,GAAW,QAAS,SAAUpL,EAAMgB,EAAMiE,GACzC,MAAMA,IAAyC,UAAhCjF,EAAKmD,SAASC,cAA7B,OACQpD,EAAKsW,eAOTtL,GAAO,SAAUC,GACtB,MAAuC,OAAhCA,EAAIf,aAAa,eAExBkB,GAAWxE,EAAU,SAAU5G,EAAMgB,EAAMiE,GAC1C,GAAIwJ,EACJ,OAAMxJ,GAAN,OACQjF,EAAMgB,MAAW,EAAOA,EAAKoC,eACjCqL,EAAMzO,EAAKmN,iBAAkBnM,KAAWyN,EAAIC,UAC7CD,EAAIrK,MACL,OAKGU,IAEHxH,EAIJc,GAAO4O,KAAOlI,EACd1G,EAAOkQ,KAAOxJ,EAAOoK,UACrB9Q,EAAOkQ,KAAM,KAAQlQ,EAAOkQ,KAAKtH,QACjC5I,EAAOuQ,WAAavQ,EAAOmY,OAASzR,EAAO6J,WAC3CvQ,EAAOkF,KAAOwB,EAAOE,QACrB5G,EAAOoY,SAAW1R,EAAOG,MACzB7G,EAAOyH,SAAWf,EAAOe,QAIzB,IAAIyJ,GAAM,SAAUtP,EAAMsP,EAAKmH,GAC9B,GAAIxF,MACHyF,EAAqBlV,SAAViV,CAEZ,QAAUzW,EAAOA,EAAMsP,KAA6B,IAAlBtP,EAAK0C,SACtC,GAAuB,IAAlB1C,EAAK0C,SAAiB,CAC1B,GAAKgU,GAAYtY,EAAQ4B,GAAO2W,GAAIF,GACnC,KAEDxF,GAAQrT,KAAMoC,GAGhB,MAAOiR,IAIJ2F,EAAW,SAAUC,EAAG7W,GAG3B,IAFA,GAAIiR,MAEI4F,EAAGA,EAAIA,EAAEjL,YACI,IAAfiL,EAAEnU,UAAkBmU,IAAM7W,GAC9BiR,EAAQrT,KAAMiZ,EAIhB,OAAO5F,IAIJ6F,EAAgB1Y,EAAOkQ,KAAKhF,MAAMtB,aAElC+O,EAAa,gCAIbC,EAAY,gBAGhB,SAASC,GAAQ1I,EAAU2I,EAAWhG,GACrC,GAAK9S,EAAOiD,WAAY6V,GACvB,MAAO9Y,GAAO0F,KAAMyK,EAAU,SAAUvO,EAAMC,GAE7C,QAASiX,EAAU7X,KAAMW,EAAMC,EAAGD,KAAWkR,GAK/C,IAAKgG,EAAUxU,SACd,MAAOtE,GAAO0F,KAAMyK,EAAU,SAAUvO,GACvC,MAASA,KAASkX,IAAgBhG,GAKpC,IAA0B,gBAAdgG,GAAyB,CACpC,GAAKF,EAAU/M,KAAMiN,GACpB,MAAO9Y,GAAO6O,OAAQiK,EAAW3I,EAAU2C,EAG5CgG,GAAY9Y,EAAO6O,OAAQiK,EAAW3I,GAGvC,MAAOnQ,GAAO0F,KAAMyK,EAAU,SAAUvO,GACvC,MAAS5B,GAAOuF,QAAS3D,EAAMkX,GAAc,KAAShG,IAIxD9S,EAAO6O,OAAS,SAAUqB,EAAM7O,EAAOyR,GACtC,GAAIlR,GAAOP,EAAO,EAMlB,OAJKyR,KACJ5C,EAAO,QAAUA,EAAO,KAGD,IAAjB7O,EAAMN,QAAkC,IAAlBa,EAAK0C,SACjCtE,EAAO4O,KAAKO,gBAAiBvN,EAAMsO,IAAWtO,MAC9C5B,EAAO4O,KAAK/I,QAASqK,EAAMlQ,EAAO0F,KAAMrE,EAAO,SAAUO,GACxD,MAAyB,KAAlBA,EAAK0C,aAIftE,EAAOG,GAAGqC,QACToM,KAAM,SAAU3O,GACf,GAAI4B,GACHP,KACAyX,EAAO5Z,KACPgD,EAAM4W,EAAKhY,MAEZ,IAAyB,gBAAbd,GACX,MAAOd,MAAKiC,UAAWpB,EAAQC,GAAW4O,OAAQ,WACjD,IAAMhN,EAAI,EAAOM,EAAJN,EAASA,IACrB,GAAK7B,EAAOyH,SAAUsR,EAAMlX,GAAK1C,MAChC,OAAO,IAMX,KAAM0C,EAAI,EAAOM,EAAJN,EAASA,IACrB7B,EAAO4O,KAAM3O,EAAU8Y,EAAMlX,GAAKP,EAMnC,OAFAA,GAAMnC,KAAKiC,UAAWe,EAAM,EAAInC,EAAOmY,OAAQ7W,GAAQA,GACvDA,EAAIrB,SAAWd,KAAKc,SAAWd,KAAKc,SAAW,IAAMA,EAAWA,EACzDqB,GAERuN,OAAQ,SAAU5O,GACjB,MAAOd,MAAKiC,UAAWyX,EAAQ1Z,KAAMc,OAAgB,KAEtD6S,IAAK,SAAU7S,GACd,MAAOd,MAAKiC,UAAWyX,EAAQ1Z,KAAMc,OAAgB,KAEtDsY,GAAI,SAAUtY,GACb,QAAS4Y,EACR1Z,KAIoB,gBAAbc,IAAyByY,EAAc7M,KAAM5L,GACnDD,EAAQC,GACRA,OACD,GACCc,SASJ,IAAIiY,GAKHhP,EAAa,sCAEb5J,EAAOJ,EAAOG,GAAGC,KAAO,SAAUH,EAAUC,EAASqT,GACpD,GAAIrI,GAAOtJ,CAGX,KAAM3B,EACL,MAAOd,KAQR,IAHAoU,EAAOA,GAAQyF,EAGU,gBAAb/Y,GAAwB,CAanC,GAPCiL,EAL6B,MAAzBjL,EAASgZ,OAAQ,IACsB,MAA3ChZ,EAASgZ,OAAQhZ,EAASc,OAAS,IACnCd,EAASc,QAAU,GAGT,KAAMd,EAAU,MAGlB+J,EAAWuB,KAAMtL,IAIrBiL,IAAWA,EAAO,IAAQhL,EAwDxB,OAAMA,GAAWA,EAAQW,QACtBX,GAAWqT,GAAO3E,KAAM3O,GAK1Bd,KAAK2B,YAAaZ,GAAU0O,KAAM3O,EA3DzC,IAAKiL,EAAO,GAAM,CAYjB,GAXAhL,EAAUA,YAAmBF,GAASE,EAAS,GAAMA,EAIrDF,EAAOuB,MAAOpC,KAAMa,EAAOkZ,UAC1BhO,EAAO,GACPhL,GAAWA,EAAQoE,SAAWpE,EAAQoL,eAAiBpL,EAAUnB,GACjE,IAII4Z,EAAW9M,KAAMX,EAAO,KAASlL,EAAOkD,cAAehD,GAC3D,IAAMgL,IAAShL,GAGTF,EAAOiD,WAAY9D,KAAM+L,IAC7B/L,KAAM+L,GAAShL,EAASgL,IAIxB/L,KAAKiR,KAAMlF,EAAOhL,EAASgL,GAK9B,OAAO/L,MAQP,GAJAyC,EAAO7C,EAASyM,eAAgBN,EAAO,IAIlCtJ,GAAQA,EAAKuK,WAAa,CAI9B,GAAKvK,EAAK6J,KAAOP,EAAO,GACvB,MAAO8N,GAAWpK,KAAM3O,EAIzBd,MAAK4B,OAAS,EACd5B,KAAM,GAAMyC,EAKb,MAFAzC,MAAKe,QAAUnB,EACfI,KAAKc,SAAWA,EACTd,KAcH,MAAKc,GAASqE,UACpBnF,KAAKe,QAAUf,KAAM,GAAMc,EAC3Bd,KAAK4B,OAAS,EACP5B,MAIIa,EAAOiD,WAAYhD,GACD,mBAAfsT,GAAK4F,MAClB5F,EAAK4F,MAAOlZ,GAGZA,EAAUD,IAGeoD,SAAtBnD,EAASA,WACbd,KAAKc,SAAWA,EAASA,SACzBd,KAAKe,QAAUD,EAASC,SAGlBF,EAAOmF,UAAWlF,EAAUd,OAIrCiB,GAAKQ,UAAYZ,EAAOG,GAGxB6Y,EAAahZ,EAAQjB,EAGrB,IAAIqa,GAAe,iCAGlBC,GACCC,UAAU,EACVC,UAAU,EACVC,MAAM,EACNC,MAAM,EAGRzZ,GAAOG,GAAGqC,QACTyQ,IAAK,SAAUlQ,GACd,GAAIlB,GACH6X,EAAU1Z,EAAQ+C,EAAQ5D,MAC1BgD,EAAMuX,EAAQ3Y,MAEf,OAAO5B,MAAK0P,OAAQ,WACnB,IAAMhN,EAAI,EAAOM,EAAJN,EAASA,IACrB,GAAK7B,EAAOyH,SAAUtI,KAAMua,EAAS7X,IACpC,OAAO,KAMX8X,QAAS,SAAU7I,EAAW5Q,GAS7B,IARA,GAAImN,GACHxL,EAAI,EACJ+X,EAAIza,KAAK4B,OACT8R,KACAgH,EAAMnB,EAAc7M,KAAMiF,IAAoC,gBAAdA,GAC/C9Q,EAAQ8Q,EAAW5Q,GAAWf,KAAKe,SACnC,EAEU0Z,EAAJ/X,EAAOA,IACd,IAAMwL,EAAMlO,KAAM0C,GAAKwL,GAAOA,IAAQnN,EAASmN,EAAMA,EAAIlB,WAGxD,GAAKkB,EAAI/I,SAAW,KAAQuV,EAC3BA,EAAIC,MAAOzM,GAAQ,GAGF,IAAjBA,EAAI/I,UACHtE,EAAO4O,KAAKO,gBAAiB9B,EAAKyD,IAAgB,CAEnD+B,EAAQrT,KAAM6N,EACd,OAKH,MAAOlO,MAAKiC,UAAWyR,EAAQ9R,OAAS,EAAIf,EAAOuQ,WAAYsC,GAAYA,IAK5EiH,MAAO,SAAUlY,GAGhB,MAAMA,GAKe,gBAATA,GACJ5B,EAAOuF,QAASpG,KAAM,GAAKa,EAAQ4B,IAIpC5B,EAAOuF,QAGb3D,EAAKf,OAASe,EAAM,GAAMA,EAAMzC,MAZvBA,KAAM,IAAOA,KAAM,GAAIgN,WAAehN,KAAK6C,QAAQ+X,UAAUhZ,OAAS,IAejFiZ,IAAK,SAAU/Z,EAAUC,GACxB,MAAOf,MAAKiC,UACXpB,EAAOuQ,WACNvQ,EAAOuB,MAAOpC,KAAK+B,MAAOlB,EAAQC,EAAUC,OAK/C+Z,QAAS,SAAUha,GAClB,MAAOd,MAAK6a,IAAiB,MAAZ/Z,EAChBd,KAAKqC,WAAarC,KAAKqC,WAAWqN,OAAQ5O,MAK7C,SAASia,GAAS7M,EAAK6D,GACtB,EACC7D,GAAMA,EAAK6D,SACF7D,GAAwB,IAAjBA,EAAI/I,SAErB,OAAO+I,GAGRrN,EAAOyB,MACNwM,OAAQ,SAAUrM,GACjB,GAAIqM,GAASrM,EAAKuK,UAClB,OAAO8B,IAA8B,KAApBA,EAAO3J,SAAkB2J,EAAS,MAEpDkM,QAAS,SAAUvY,GAClB,MAAOsP,GAAKtP,EAAM,eAEnBwY,aAAc,SAAUxY,EAAMC,EAAGwW,GAChC,MAAOnH,GAAKtP,EAAM,aAAcyW,IAEjCmB,KAAM,SAAU5X,GACf,MAAOsY,GAAStY,EAAM,gBAEvB6X,KAAM,SAAU7X,GACf,MAAOsY,GAAStY,EAAM,oBAEvByY,QAAS,SAAUzY,GAClB,MAAOsP,GAAKtP,EAAM,gBAEnBmY,QAAS,SAAUnY,GAClB,MAAOsP,GAAKtP,EAAM,oBAEnB0Y,UAAW,SAAU1Y,EAAMC,EAAGwW,GAC7B,MAAOnH,GAAKtP,EAAM,cAAeyW,IAElCkC,UAAW,SAAU3Y,EAAMC,EAAGwW,GAC7B,MAAOnH,GAAKtP,EAAM,kBAAmByW,IAEtCG,SAAU,SAAU5W,GACnB,MAAO4W,IAAY5W,EAAKuK,gBAAmByE,WAAYhP,IAExD0X,SAAU,SAAU1X,GACnB,MAAO4W,GAAU5W,EAAKgP,aAEvB2I,SAAU,SAAU3X,GACnB,MAAO5B,GAAO+E,SAAUnD,EAAM,UAC7BA,EAAK4Y,iBAAmB5Y,EAAK6Y,cAAc1b,SAC3CiB,EAAOuB,SAAWK,EAAKgJ,cAEvB,SAAUhI,EAAMzC,GAClBH,EAAOG,GAAIyC,GAAS,SAAUyV,EAAOpY,GACpC,GAAIqB,GAAMtB,EAAO2B,IAAKxC,KAAMgB,EAAIkY,EAuBhC,OArB0B,UAArBzV,EAAKtD,MAAO,MAChBW,EAAWoY,GAGPpY,GAAgC,gBAAbA,KACvBqB,EAAMtB,EAAO6O,OAAQ5O,EAAUqB,IAG3BnC,KAAK4B,OAAS,IAGZsY,EAAkBzW,KACvBtB,EAAMtB,EAAOuQ,WAAYjP,IAIrB8X,EAAavN,KAAMjJ,KACvBtB,EAAMA,EAAIoZ,YAILvb,KAAKiC,UAAWE,KAGzB,IAAIqZ,GAAY,MAKhB,SAASC,GAAe/X,GACvB,GAAIgY,KAIJ,OAHA7a,GAAOyB,KAAMoB,EAAQqI,MAAOyP,OAAmB,SAAUtQ,EAAGyQ,GAC3DD,EAAQC,IAAS,IAEXD,EAyBR7a,EAAO+a,UAAY,SAAUlY,GAI5BA,EAA6B,gBAAZA,GAChB+X,EAAe/X,GACf7C,EAAOwC,UAAYK,EAEpB,IACCmY,GAGAC,EAGAC,EAGAC,EAGA5S,KAGA6S,KAGAC,EAAc,GAGdC,EAAO,WAQN,IALAH,EAAStY,EAAQ0Y,KAIjBL,EAAQF,GAAS,EACTI,EAAMra,OAAQsa,EAAc,GAAK,CACxCJ,EAASG,EAAM1O,OACf,SAAU2O,EAAc9S,EAAKxH,OAGvBwH,EAAM8S,GAAcvZ,MAAOmZ,EAAQ,GAAKA,EAAQ,OAAU,GAC9DpY,EAAQ2Y,cAGRH,EAAc9S,EAAKxH,OACnBka,GAAS,GAMNpY,EAAQoY,SACbA,GAAS,GAGVD,GAAS,EAGJG,IAIH5S,EADI0S,KAKG,KAMVlC,GAGCiB,IAAK,WA2BJ,MA1BKzR,KAGC0S,IAAWD,IACfK,EAAc9S,EAAKxH,OAAS,EAC5Bqa,EAAM5b,KAAMyb,IAGb,QAAWjB,GAAK7T,GACfnG,EAAOyB,KAAM0E,EAAM,SAAUkE,EAAGtE,GAC1B/F,EAAOiD,WAAY8C,GACjBlD,EAAQsV,QAAWY,EAAK9F,IAAKlN,IAClCwC,EAAK/I,KAAMuG,GAEDA,GAAOA,EAAIhF,QAAiC,WAAvBf,EAAO8D,KAAMiC,IAG7CiU,EAAKjU,MAGHhE,WAEAkZ,IAAWD,GACfM,KAGKnc,MAIRsc,OAAQ,WAYP,MAXAzb,GAAOyB,KAAMM,UAAW,SAAUsI,EAAGtE,GACpC,GAAI+T,EACJ,QAAUA,EAAQ9Z,EAAOuF,QAASQ,EAAKwC,EAAMuR,IAAY,GACxDvR,EAAKhG,OAAQuX,EAAO,GAGNuB,GAATvB,GACJuB,MAIIlc,MAKR8T,IAAK,SAAU9S,GACd,MAAOA,GACNH,EAAOuF,QAASpF,EAAIoI,GAAS,GAC7BA,EAAKxH,OAAS,GAIhBmT,MAAO,WAIN,MAHK3L,KACJA,MAEMpJ,MAMRuc,QAAS,WAGR,MAFAP,GAASC,KACT7S,EAAO0S,EAAS,GACT9b,MAER2U,SAAU,WACT,OAAQvL,GAMToT,KAAM,WAKL,MAJAR,IAAS,EACHF,GACLlC,EAAK2C,UAECvc,MAERgc,OAAQ,WACP,QAASA,GAIVS,SAAU,SAAU1b,EAASiG,GAS5B,MARMgV,KACLhV,EAAOA,MACPA,GAASjG,EAASiG,EAAK7G,MAAQ6G,EAAK7G,QAAU6G,GAC9CiV,EAAM5b,KAAM2G,GACN6U,GACLM,KAGKnc,MAIRmc,KAAM,WAEL,MADAvC,GAAK6C,SAAUzc,KAAM4C,WACd5C,MAIR+b,MAAO,WACN,QAASA,GAIZ,OAAOnC,IAIR/Y,EAAOwC,QAENqZ,SAAU,SAAUC,GACnB,GAAIC,KAGA,UAAW,OAAQ/b,EAAO+a,UAAW,eAAiB,aACtD,SAAU,OAAQ/a,EAAO+a,UAAW,eAAiB,aACrD,SAAU,WAAY/a,EAAO+a,UAAW,YAE3CiB,EAAQ,UACRC,GACCD,MAAO,WACN,MAAOA,IAERE,OAAQ,WAEP,MADAC,GAASvU,KAAM7F,WAAYqa,KAAMra,WAC1B5C,MAERkd,KAAM,WACL,GAAIC,GAAMva,SACV,OAAO/B,GAAO6b,SAAU,SAAUU,GACjCvc,EAAOyB,KAAMsa,EAAQ,SAAUla,EAAG2a,GACjC,GAAIrc,GAAKH,EAAOiD,WAAYqZ,EAAKza,KAASya,EAAKza,EAG/Csa,GAAUK,EAAO,IAAO,WACvB,GAAIC,GAAWtc,GAAMA,EAAG2B,MAAO3C,KAAM4C,UAChC0a,IAAYzc,EAAOiD,WAAYwZ,EAASR,SAC5CQ,EAASR,UACPS,SAAUH,EAASI,QACnB/U,KAAM2U,EAASK,SACfR,KAAMG,EAASM,QAEjBN,EAAUC,EAAO,GAAM,QACtBrd,OAAS8c,EAAUM,EAASN,UAAY9c,KACxCgB,GAAOsc,GAAa1a,eAKxBua,EAAM,OACHL,WAKLA,QAAS,SAAUpY,GAClB,MAAc,OAAPA,EAAc7D,EAAOwC,OAAQqB,EAAKoY,GAAYA,IAGvDE,IAyCD,OAtCAF,GAAQa,KAAOb,EAAQI,KAGvBrc,EAAOyB,KAAMsa,EAAQ,SAAUla,EAAG2a,GACjC,GAAIjU,GAAOiU,EAAO,GACjBO,EAAcP,EAAO,EAGtBP,GAASO,EAAO,IAAQjU,EAAKyR,IAGxB+C,GACJxU,EAAKyR,IAAK,WAGTgC,EAAQe,GAGNhB,EAAY,EAAJla,GAAS,GAAI6Z,QAASK,EAAQ,GAAK,GAAIJ,MAInDQ,EAAUK,EAAO,IAAQ,WAExB,MADAL,GAAUK,EAAO,GAAM,QAAUrd,OAASgd,EAAWF,EAAU9c,KAAM4C,WAC9D5C,MAERgd,EAAUK,EAAO,GAAM,QAAWjU,EAAKqT,WAIxCK,EAAQA,QAASE,GAGZL,GACJA,EAAK7a,KAAMkb,EAAUA,GAIfA,GAIRa,KAAM,SAAUC,GACf,GAAIpb,GAAI,EACPqb,EAAgB5d,EAAM2B,KAAMc,WAC5BhB,EAASmc,EAAcnc,OAGvBoc,EAAuB,IAAXpc,GACTkc,GAAejd,EAAOiD,WAAYga,EAAYhB,SAAclb,EAAS,EAIxEob,EAAyB,IAAdgB,EAAkBF,EAAcjd,EAAO6b,WAGlDuB,EAAa,SAAUvb,EAAGmU,EAAUqH,GACnC,MAAO,UAAUrX,GAChBgQ,EAAUnU,GAAM1C,KAChBke,EAAQxb,GAAME,UAAUhB,OAAS,EAAIzB,EAAM2B,KAAMc,WAAciE,EAC1DqX,IAAWC,EACfnB,EAASoB,WAAYvH,EAAUqH,KAEfF,GAChBhB,EAASqB,YAAaxH,EAAUqH,KAKnCC,EAAgBG,EAAkBC,CAGnC,IAAK3c,EAAS,EAIb,IAHAuc,EAAiB,GAAIvZ,OAAOhD,GAC5B0c,EAAmB,GAAI1Z,OAAOhD,GAC9B2c,EAAkB,GAAI3Z,OAAOhD,GACjBA,EAAJc,EAAYA,IACdqb,EAAerb,IAAO7B,EAAOiD,WAAYia,EAAerb,GAAIoa,SAChEiB,EAAerb,GAAIoa,UACjBS,SAAUU,EAAYvb,EAAG4b,EAAkBH,IAC3C1V,KAAMwV,EAAYvb,EAAG6b,EAAiBR,IACtCd,KAAMD,EAASU,UAEfM,CAUL,OAJMA,IACLhB,EAASqB,YAAaE,EAAiBR,GAGjCf,EAASF,YAMlB,IAAI0B,EAEJ3d,GAAOG,GAAGgZ,MAAQ,SAAUhZ,GAK3B,MAFAH,GAAOmZ,MAAM8C,UAAUrU,KAAMzH,GAEtBhB,MAGRa,EAAOwC,QAGNiB,SAAS,EAITma,UAAW,EAGXC,UAAW,SAAUC,GACfA,EACJ9d,EAAO4d,YAEP5d,EAAOmZ,OAAO,IAKhBA,MAAO,SAAU4E,IAGXA,KAAS,IAAS/d,EAAO4d,UAAY5d,EAAOyD,WAKjDzD,EAAOyD,SAAU,EAGZsa,KAAS,KAAU/d,EAAO4d,UAAY,IAK3CD,EAAUH,YAAaze,GAAYiB,IAG9BA,EAAOG,GAAG6d,iBACdhe,EAAQjB,GAAWif,eAAgB,SACnChe,EAAQjB,GAAWkf,IAAK,cAQ3B,SAASC,KACHnf,EAASsP,kBACbtP,EAASof,oBAAqB,mBAAoBC,GAClDlf,EAAOif,oBAAqB,OAAQC,KAGpCrf,EAASsf,YAAa,qBAAsBD,GAC5Clf,EAAOmf,YAAa,SAAUD,IAOhC,QAASA,MAGHrf,EAASsP,kBACS,SAAtBnP,EAAOof,MAAMxa,MACW,aAAxB/E,EAASwf,cAETL,IACAle,EAAOmZ,SAITnZ,EAAOmZ,MAAM8C,QAAU,SAAUpY,GAChC,IAAM8Z,EAQL,GANAA,EAAY3d,EAAO6b,WAMU,aAAxB9c,EAASwf,YACa,YAAxBxf,EAASwf,aAA6Bxf,EAAS+O,gBAAgB0Q,SAGjEtf,EAAOuf,WAAYze,EAAOmZ,WAGpB,IAAKpa,EAASsP,iBAGpBtP,EAASsP,iBAAkB,mBAAoB+P,GAG/Clf,EAAOmP,iBAAkB,OAAQ+P,OAG3B,CAGNrf,EAASuP,YAAa,qBAAsB8P,GAG5Clf,EAAOoP,YAAa,SAAU8P,EAI9B,IAAIhQ,IAAM,CAEV,KACCA,EAA6B,MAAvBlP,EAAOwf,cAAwB3f,EAAS+O,gBAC7C,MAAQvJ,IAEL6J,GAAOA,EAAIoQ,WACf,QAAWG,KACV,IAAM3e,EAAOyD,QAAU,CAEtB,IAIC2K,EAAIoQ,SAAU,QACb,MAAQja,GACT,MAAOrF,GAAOuf,WAAYE,EAAe,IAI1CT,IAGAle,EAAOmZ,YAMZ,MAAOwE,GAAU1B,QAASpY,IAI3B7D,EAAOmZ,MAAM8C,SAOb,IAAIpa,EACJ,KAAMA,IAAK7B,GAAQF,GAClB,KAEDA,GAAQ0E,SAAiB,MAAN3C,EAInB/B,EAAQ8e,wBAAyB,EAGjC5e,EAAQ,WAGP,GAAIqQ,GAAKxD,EAAKgS,EAAMC,CAEpBD,GAAO9f,EAAS2M,qBAAsB,QAAU,GAC1CmT,GAASA,EAAKE,QAOpBlS,EAAM9N,EAAS+N,cAAe,OAC9BgS,EAAY/f,EAAS+N,cAAe,OACpCgS,EAAUC,MAAMC,QAAU,iEAC1BH,EAAKrQ,YAAasQ,GAAYtQ,YAAa3B,GAEZ,mBAAnBA,GAAIkS,MAAME,OAMrBpS,EAAIkS,MAAMC,QAAU,gEAEpBlf,EAAQ8e,uBAAyBvO,EAA0B,IAApBxD,EAAIqS,YACtC7O,IAKJwO,EAAKE,MAAME,KAAO,IAIpBJ,EAAK9R,YAAa+R,MAInB,WACC,GAAIjS,GAAM9N,EAAS+N,cAAe,MAGlChN,GAAQqf,eAAgB,CACxB,WACQtS,GAAIhB,KACV,MAAQtH,GACTzE,EAAQqf,eAAgB,EAIzBtS,EAAM,OAEP,IAAIuS,GAAa,SAAUxd,GAC1B,GAAIyd,GAASrf,EAAOqf,QAAUzd,EAAKmD,SAAW,KAAMC,eACnDV,GAAY1C,EAAK0C,UAAY,CAG9B,OAAoB,KAAbA,GAA+B,IAAbA,GACxB,GAGC+a,GAAUA,KAAW,GAAQzd,EAAKkK,aAAc,aAAgBuT,GAM/DC,EAAS,gCACZC,EAAa,UAEd,SAASC,GAAU5d,EAAMyC,EAAKK,GAI7B,GAActB,SAATsB,GAAwC,IAAlB9C,EAAK0C,SAAiB,CAEhD,GAAI1B,GAAO,QAAUyB,EAAIb,QAAS+b,EAAY,OAAQva,aAItD,IAFAN,EAAO9C,EAAKkK,aAAclJ,GAEL,gBAAT8B,GAAoB,CAC/B,IACCA,EAAgB,SAATA,GAAkB,EACf,UAATA,GAAmB,EACV,SAATA,EAAkB,MAGjBA,EAAO,KAAOA,GAAQA,EACvB4a,EAAOzT,KAAMnH,GAAS1E,EAAOyf,UAAW/a,GACxCA,EACA,MAAQH,IAGVvE,EAAO0E,KAAM9C,EAAMyC,EAAKK,OAGxBA,GAAOtB;CAIT,MAAOsB,GAIR,QAASgb,GAAmB7b,GAC3B,GAAIjB,EACJ,KAAMA,IAAQiB,GAGb,IAAc,SAATjB,IAAmB5C,EAAOoE,cAAeP,EAAKjB,MAGrC,WAATA,EACJ,OAAO,CAIT,QAAO,EAGR,QAAS+c,GAAc/d,EAAMgB,EAAM8B,EAAMkb,GACxC,GAAMR,EAAYxd,GAAlB,CAIA,GAAIN,GAAKue,EACRC,EAAc9f,EAAOqD,QAIrB0c,EAASne,EAAK0C,SAIdkI,EAAQuT,EAAS/f,EAAOwM,MAAQ5K,EAIhC6J,EAAKsU,EAASne,EAAMke,GAAgBle,EAAMke,IAAiBA,CAI5D,IAAQrU,GAAOe,EAAOf,KAAWmU,GAAQpT,EAAOf,GAAK/G,OAC3CtB,SAATsB,GAAsC,gBAAT9B,GAkE9B,MA9DM6I,KAKJA,EADIsU,EACCne,EAAMke,GAAgBzgB,EAAWgJ,OAASrI,EAAOiG,OAEjD6Z,GAIDtT,EAAOf,KAIZe,EAAOf,GAAOsU,MAAgBC,OAAQhgB,EAAO4D,OAKzB,gBAAThB,IAAqC,kBAATA,KAClCgd,EACJpT,EAAOf,GAAOzL,EAAOwC,OAAQgK,EAAOf,GAAM7I,GAE1C4J,EAAOf,GAAK/G,KAAO1E,EAAOwC,OAAQgK,EAAOf,GAAK/G,KAAM9B,IAItDid,EAAYrT,EAAOf,GAKbmU,IACCC,EAAUnb,OACfmb,EAAUnb,SAGXmb,EAAYA,EAAUnb,MAGTtB,SAATsB,IACJmb,EAAW7f,EAAO6E,UAAWjC,IAAW8B,GAKpB,gBAAT9B,IAGXtB,EAAMue,EAAWjd,GAGL,MAAPtB,IAGJA,EAAMue,EAAW7f,EAAO6E,UAAWjC,MAGpCtB,EAAMue,EAGAve,GAGR,QAAS2e,GAAoBre,EAAMgB,EAAMgd,GACxC,GAAMR,EAAYxd,GAAlB,CAIA,GAAIie,GAAWhe,EACdke,EAASne,EAAK0C,SAGdkI,EAAQuT,EAAS/f,EAAOwM,MAAQ5K,EAChC6J,EAAKsU,EAASne,EAAM5B,EAAOqD,SAAYrD,EAAOqD,OAI/C,IAAMmJ,EAAOf,GAAb,CAIA,GAAK7I,IAEJid,EAAYD,EAAMpT,EAAOf,GAAOe,EAAOf,GAAK/G,MAE3B,CAGV1E,EAAOmD,QAASP,GAuBrBA,EAAOA,EAAKrD,OAAQS,EAAO2B,IAAKiB,EAAM5C,EAAO6E,YApBxCjC,IAAQid,GACZjd,GAASA,IAITA,EAAO5C,EAAO6E,UAAWjC,GAExBA,EADIA,IAAQid,IACHjd,GAEFA,EAAK6D,MAAO,MActB5E,EAAIe,EAAK7B,MACT,OAAQc,UACAge,GAAWjd,EAAMf,GAKzB,IAAK+d,GAAOF,EAAmBG,IAAe7f,EAAOoE,cAAeyb,GACnE,QAMGD,UACEpT,GAAOf,GAAK/G,KAIbgb,EAAmBlT,EAAOf,QAM5BsU,EACJ/f,EAAOkgB,WAAate,IAAQ,GAIjB9B,EAAQqf,eAAiB3S,GAASA,EAAMtN,aAE5CsN,GAAOf,GAIde,EAAOf,GAAOrI,UAIhBpD,EAAOwC,QACNgK,SAIA6S,QACCc,WAAW,EACXC,UAAU,EAGVC,UAAW,8CAGZC,QAAS,SAAU1e,GAElB,MADAA,GAAOA,EAAK0C,SAAWtE,EAAOwM,MAAO5K,EAAM5B,EAAOqD,UAAczB,EAAM5B,EAAOqD,WACpEzB,IAAS8d,EAAmB9d,IAGtC8C,KAAM,SAAU9C,EAAMgB,EAAM8B,GAC3B,MAAOib,GAAc/d,EAAMgB,EAAM8B,IAGlC6b,WAAY,SAAU3e,EAAMgB,GAC3B,MAAOqd,GAAoBre,EAAMgB,IAIlC4d,MAAO,SAAU5e,EAAMgB,EAAM8B,GAC5B,MAAOib,GAAc/d,EAAMgB,EAAM8B,GAAM,IAGxC+b,YAAa,SAAU7e,EAAMgB,GAC5B,MAAOqd,GAAoBre,EAAMgB,GAAM,MAIzC5C,EAAOG,GAAGqC,QACTkC,KAAM,SAAUL,EAAK2B,GACpB,GAAInE,GAAGe,EAAM8B,EACZ9C,EAAOzC,KAAM,GACb8N,EAAQrL,GAAQA,EAAK+G,UAMtB,IAAavF,SAARiB,EAAoB,CACxB,GAAKlF,KAAK4B,SACT2D,EAAO1E,EAAO0E,KAAM9C,GAEG,IAAlBA,EAAK0C,WAAmBtE,EAAOwgB,MAAO5e,EAAM,gBAAkB,CAClEC,EAAIoL,EAAMlM,MACV,OAAQc,IAIFoL,EAAOpL,KACXe,EAAOqK,EAAOpL,GAAIe,KACe,IAA5BA,EAAKnD,QAAS,WAClBmD,EAAO5C,EAAO6E,UAAWjC,EAAKtD,MAAO,IACrCkgB,EAAU5d,EAAMgB,EAAM8B,EAAM9B,KAI/B5C,GAAOwgB,MAAO5e,EAAM,eAAe,GAIrC,MAAO8C,GAIR,MAAoB,gBAARL,GACJlF,KAAKsC,KAAM,WACjBzB,EAAO0E,KAAMvF,KAAMkF,KAIdtC,UAAUhB,OAAS,EAGzB5B,KAAKsC,KAAM,WACVzB,EAAO0E,KAAMvF,KAAMkF,EAAK2B,KAKzBpE,EAAO4d,EAAU5d,EAAMyC,EAAKrE,EAAO0E,KAAM9C,EAAMyC,IAAUjB,QAG3Dmd,WAAY,SAAUlc,GACrB,MAAOlF,MAAKsC,KAAM,WACjBzB,EAAOugB,WAAYphB,KAAMkF,QAM5BrE,EAAOwC,QACN4Y,MAAO,SAAUxZ,EAAMkC,EAAMY,GAC5B,GAAI0W,EAEJ,OAAKxZ,IACJkC,GAASA,GAAQ,MAAS,QAC1BsX,EAAQpb,EAAOwgB,MAAO5e,EAAMkC,GAGvBY,KACE0W,GAASpb,EAAOmD,QAASuB,GAC9B0W,EAAQpb,EAAOwgB,MAAO5e,EAAMkC,EAAM9D,EAAOmF,UAAWT,IAEpD0W,EAAM5b,KAAMkF,IAGP0W,OAZR,QAgBDsF,QAAS,SAAU9e,EAAMkC,GACxBA,EAAOA,GAAQ,IAEf,IAAIsX,GAAQpb,EAAOob,MAAOxZ,EAAMkC,GAC/B6c,EAAcvF,EAAMra,OACpBZ,EAAKib,EAAM1O,QACXkU,EAAQ5gB,EAAO6gB,YAAajf,EAAMkC,GAClC0V,EAAO,WACNxZ,EAAO0gB,QAAS9e,EAAMkC,GAIZ,gBAAP3D,IACJA,EAAKib,EAAM1O,QACXiU,KAGIxgB,IAIU,OAAT2D,GACJsX,EAAMnL,QAAS,oBAIT2Q,GAAME,KACb3gB,EAAGc,KAAMW,EAAM4X,EAAMoH,KAGhBD,GAAeC,GACpBA,EAAM1M,MAAMoH,QAMduF,YAAa,SAAUjf,EAAMkC,GAC5B,GAAIO,GAAMP,EAAO,YACjB,OAAO9D,GAAOwgB,MAAO5e,EAAMyC,IAASrE,EAAOwgB,MAAO5e,EAAMyC,GACvD6P,MAAOlU,EAAO+a,UAAW,eAAgBf,IAAK,WAC7Cha,EAAOygB,YAAa7e,EAAMkC,EAAO,SACjC9D,EAAOygB,YAAa7e,EAAMyC,UAM9BrE,EAAOG,GAAGqC,QACT4Y,MAAO,SAAUtX,EAAMY,GACtB,GAAIqc,GAAS,CAQb,OANqB,gBAATjd,KACXY,EAAOZ,EACPA,EAAO,KACPid,KAGIhf,UAAUhB,OAASggB,EAChB/gB,EAAOob,MAAOjc,KAAM,GAAK2E,GAGjBV,SAATsB,EACNvF,KACAA,KAAKsC,KAAM,WACV,GAAI2Z,GAAQpb,EAAOob,MAAOjc,KAAM2E,EAAMY,EAGtC1E,GAAO6gB,YAAa1hB,KAAM2E,GAEZ,OAATA,GAAgC,eAAfsX,EAAO,IAC5Bpb,EAAO0gB,QAASvhB,KAAM2E,MAI1B4c,QAAS,SAAU5c,GAClB,MAAO3E,MAAKsC,KAAM,WACjBzB,EAAO0gB,QAASvhB,KAAM2E,MAGxBkd,WAAY,SAAUld,GACrB,MAAO3E,MAAKic,MAAOtX,GAAQ,UAK5BmY,QAAS,SAAUnY,EAAMD,GACxB,GAAIuC,GACH6a,EAAQ,EACRC,EAAQlhB,EAAO6b,WACf1L,EAAWhR,KACX0C,EAAI1C,KAAK4B,OACT6b,EAAU,aACCqE,GACTC,EAAM1D,YAAarN,GAAYA,IAIb,iBAATrM,KACXD,EAAMC,EACNA,EAAOV,QAERU,EAAOA,GAAQ,IAEf,OAAQjC,IACPuE,EAAMpG,EAAOwgB,MAAOrQ,EAAUtO,GAAKiC,EAAO,cACrCsC,GAAOA,EAAI8N,QACf+M,IACA7a,EAAI8N,MAAM8F,IAAK4C,GAIjB,OADAA,KACOsE,EAAMjF,QAASpY,MAKxB,WACC,GAAIsd,EAEJrhB,GAAQshB,iBAAmB,WAC1B,GAA4B,MAAvBD,EACJ,MAAOA,EAIRA,IAAsB,CAGtB,IAAItU,GAAKgS,EAAMC,CAGf,OADAD,GAAO9f,EAAS2M,qBAAsB,QAAU,GAC1CmT,GAASA,EAAKE,OAOpBlS,EAAM9N,EAAS+N,cAAe,OAC9BgS,EAAY/f,EAAS+N,cAAe,OACpCgS,EAAUC,MAAMC,QAAU,iEAC1BH,EAAKrQ,YAAasQ,GAAYtQ,YAAa3B,GAIZ,mBAAnBA,GAAIkS,MAAME,OAGrBpS,EAAIkS,MAAMC,QAIT,iJAGDnS,EAAI2B,YAAazP,EAAS+N,cAAe,QAAUiS,MAAMsC,MAAQ,MACjEF,EAA0C,IAApBtU,EAAIqS,aAG3BL,EAAK9R,YAAa+R,GAEXqC,GA9BP,UAkCF,IAAIG,GAAO,sCAA0CC,OAEjDC,EAAU,GAAI1Y,QAAQ,iBAAmBwY,EAAO,cAAe,KAG/DG,GAAc,MAAO,QAAS,SAAU,QAExCC,EAAW,SAAU9f,EAAM+f,GAK7B,MADA/f,GAAO+f,GAAM/f,EAC4B,SAAlC5B,EAAO4hB,IAAKhgB,EAAM,aACvB5B,EAAOyH,SAAU7F,EAAK0J,cAAe1J,GAKzC,SAASigB,GAAWjgB,EAAMkgB,EAAMC,EAAYC,GAC3C,GAAIC,GACHC,EAAQ,EACRC,EAAgB,GAChBC,EAAeJ,EACd,WAAa,MAAOA,GAAM3U,OAC1B,WAAa,MAAOrN,GAAO4hB,IAAKhgB,EAAMkgB,EAAM,KAC7CO,EAAUD,IACVE,EAAOP,GAAcA,EAAY,KAAS/hB,EAAOuiB,UAAWT,GAAS,GAAK,MAG1EU,GAAkBxiB,EAAOuiB,UAAWT,IAAmB,OAATQ,IAAkBD,IAC/Db,EAAQjW,KAAMvL,EAAO4hB,IAAKhgB,EAAMkgB,GAElC,IAAKU,GAAiBA,EAAe,KAAQF,EAAO,CAGnDA,EAAOA,GAAQE,EAAe,GAG9BT,EAAaA,MAGbS,GAAiBH,GAAW,CAE5B,GAICH,GAAQA,GAAS,KAGjBM,GAAgCN,EAChCliB,EAAO+e,MAAOnd,EAAMkgB,EAAMU,EAAgBF,SAK1CJ,KAAYA,EAAQE,IAAiBC,IAAuB,IAAVH,KAAiBC,GAiBrE,MAbKJ,KACJS,GAAiBA,IAAkBH,GAAW,EAG9CJ,EAAWF,EAAY,GACtBS,GAAkBT,EAAY,GAAM,GAAMA,EAAY,IACrDA,EAAY,GACTC,IACJA,EAAMM,KAAOA,EACbN,EAAM1P,MAAQkQ,EACdR,EAAM3f,IAAM4f,IAGPA,EAMR,GAAIQ,GAAS,SAAUphB,EAAOlB,EAAIkE,EAAK2B,EAAO0c,EAAWC,EAAUC,GAClE,GAAI/gB,GAAI,EACPd,EAASM,EAAMN,OACf8hB,EAAc,MAAPxe,CAGR,IAA4B,WAAvBrE,EAAO8D,KAAMO,GAAqB,CACtCqe,GAAY,CACZ,KAAM7gB,IAAKwC,GACVoe,EAAQphB,EAAOlB,EAAI0B,EAAGwC,EAAKxC,IAAK,EAAM8gB,EAAUC,OAI3C,IAAexf,SAAV4C,IACX0c,GAAY,EAEN1iB,EAAOiD,WAAY+C,KACxB4c,GAAM,GAGFC,IAGCD,GACJziB,EAAGc,KAAMI,EAAO2E,GAChB7F,EAAK,OAIL0iB,EAAO1iB,EACPA,EAAK,SAAUyB,EAAMyC,EAAK2B,GACzB,MAAO6c,GAAK5hB,KAAMjB,EAAQ4B,GAAQoE,MAKhC7F,GACJ,KAAYY,EAAJc,EAAYA,IACnB1B,EACCkB,EAAOQ,GACPwC,EACAue,EAAM5c,EAAQA,EAAM/E,KAAMI,EAAOQ,GAAKA,EAAG1B,EAAIkB,EAAOQ,GAAKwC,IAM7D,OAAOqe,GACNrhB,EAGAwhB,EACC1iB,EAAGc,KAAMI,GACTN,EAASZ,EAAIkB,EAAO,GAAKgD,GAAQse,GAEhCG,EAAiB,wBAEjBC,EAAW,aAEXC,EAAc,4BAEdC,GAAqB,OAErBC,GAAY,yLAMhB,SAASC,IAAoBpkB,GAC5B,GAAIwJ,GAAO2a,GAAUzc,MAAO,KAC3B2c,EAAWrkB,EAASskB,wBAErB,IAAKD,EAAStW,cACb,MAAQvE,EAAKxH,OACZqiB,EAAStW,cACRvE,EAAKF,MAIR,OAAO+a,IAIR,WACC,GAAIvW,GAAM9N,EAAS+N,cAAe,OACjCwW,EAAWvkB,EAASskB,yBACpBnU,EAAQnQ,EAAS+N,cAAe,QAGjCD,GAAIoC,UAAY,qEAGhBnP,EAAQyjB,kBAAgD,IAA5B1W,EAAI+D,WAAWtM,SAI3CxE,EAAQ0jB,OAAS3W,EAAInB,qBAAsB,SAAU3K,OAIrDjB,EAAQ2jB,gBAAkB5W,EAAInB,qBAAsB,QAAS3K,OAI7DjB,EAAQ4jB,WACyD,kBAAhE3kB,EAAS+N,cAAe,OAAQ6W,WAAW,GAAOC,UAInD1U,EAAMpL,KAAO,WACboL,EAAM6E,SAAU,EAChBuP,EAAS9U,YAAaU,GACtBpP,EAAQ+jB,cAAgB3U,EAAM6E,QAI9BlH,EAAIoC,UAAY,yBAChBnP,EAAQgkB,iBAAmBjX,EAAI8W,WAAW,GAAOnR,UAAU0F,aAG3DoL,EAAS9U,YAAa3B,GAItBqC,EAAQnQ,EAAS+N,cAAe,SAChCoC,EAAMnD,aAAc,OAAQ,SAC5BmD,EAAMnD,aAAc,UAAW,WAC/BmD,EAAMnD,aAAc,OAAQ,KAE5Bc,EAAI2B,YAAaU,GAIjBpP,EAAQikB,WAAalX,EAAI8W,WAAW,GAAOA,WAAW,GAAOnR,UAAUuB,QAIvEjU,EAAQkkB,eAAiBnX,EAAIwB,iBAK7BxB,EAAK7M,EAAOqD,SAAY,EACxBvD,EAAQ6I,YAAckE,EAAIf,aAAc9L,EAAOqD,WAKhD,IAAI4gB,KACHC,QAAU,EAAG,+BAAgC,aAC7CC,QAAU,EAAG,aAAc,eAC3BC,MAAQ,EAAG,QAAS,UAGpBC,OAAS,EAAG,WAAY,aACxBC,OAAS,EAAG,UAAW,YACvBC,IAAM,EAAG,iBAAkB,oBAC3BC,KAAO,EAAG,mCAAoC,uBAC9CC,IAAM,EAAG,qBAAsB,yBAI/BC,SAAU5kB,EAAQ2jB,eAAkB,EAAG,GAAI,KAAS,EAAG,SAAU,UAIlEQ,IAAQU,SAAWV,GAAQC,OAE3BD,GAAQT,MAAQS,GAAQW,MAAQX,GAAQY,SAAWZ,GAAQa,QAAUb,GAAQK,MAC7EL,GAAQc,GAAKd,GAAQQ,EAGrB,SAASO,IAAQ9kB,EAAS8O,GACzB,GAAI3N,GAAOO,EACVC,EAAI,EACJojB,EAAgD,mBAAjC/kB,GAAQwL,qBACtBxL,EAAQwL,qBAAsBsD,GAAO,KACD,mBAA7B9O,GAAQkM,iBACdlM,EAAQkM,iBAAkB4C,GAAO,KACjC5L,MAEH,KAAM6hB,EACL,IAAMA,KAAY5jB,EAAQnB,EAAQ0K,YAAc1K,EACtB,OAAvB0B,EAAOP,EAAOQ,IAChBA,KAEMmN,GAAOhP,EAAO+E,SAAUnD,EAAMoN,GACnCiW,EAAMzlB,KAAMoC,GAEZ5B,EAAOuB,MAAO0jB,EAAOD,GAAQpjB,EAAMoN,GAKtC,OAAe5L,UAAR4L,GAAqBA,GAAOhP,EAAO+E,SAAU7E,EAAS8O,GAC5DhP,EAAOuB,OAASrB,GAAW+kB,GAC3BA,EAKF,QAASC,IAAe7jB,EAAO8jB,GAG9B,IAFA,GAAIvjB,GACHC,EAAI,EAC4B,OAAvBD,EAAOP,EAAOQ,IAAeA,IACtC7B,EAAOwgB,MACN5e,EACA,cACCujB,GAAenlB,EAAOwgB,MAAO2E,EAAatjB,GAAK,eAMnD,GAAIujB,IAAQ,YACXC,GAAS,SAEV,SAASC,IAAmB1jB,GACtBkhB,EAAejX,KAAMjK,EAAKkC,QAC9BlC,EAAK2jB,eAAiB3jB,EAAKmS,SAI7B,QAASyR,IAAenkB,EAAOnB,EAASulB,EAASC,EAAWC,GAW3D,IAVA,GAAIvjB,GAAGR,EAAM6F,EACZrB,EAAK4I,EAAKwU,EAAOoC,EACjBhM,EAAIvY,EAAMN,OAGV8kB,EAAO1C,GAAoBjjB,GAE3B4lB,KACAjkB,EAAI,EAEO+X,EAAJ/X,EAAOA,IAGd,GAFAD,EAAOP,EAAOQ,GAETD,GAAiB,IAATA,EAGZ,GAA6B,WAAxB5B,EAAO8D,KAAMlC,GACjB5B,EAAOuB,MAAOukB,EAAOlkB,EAAK0C,UAAa1C,GAASA,OAG1C,IAAMwjB,GAAMvZ,KAAMjK,GAIlB,CACNwE,EAAMA,GAAOyf,EAAKrX,YAAatO,EAAQ4M,cAAe,QAGtDkC,GAAQ+T,EAASxX,KAAM3J,KAAY,GAAI,KAAQ,GAAIoD,cACnD4gB,EAAO3B,GAASjV,IAASiV,GAAQS,SAEjCte,EAAI6I,UAAY2W,EAAM,GAAM5lB,EAAO+lB,cAAenkB,GAASgkB,EAAM,GAGjExjB,EAAIwjB,EAAM,EACV,OAAQxjB,IACPgE,EAAMA,EAAIoM,SASX,KALM1S,EAAQyjB,mBAAqBN,GAAmBpX,KAAMjK,IAC3DkkB,EAAMtmB,KAAMU,EAAQ8lB,eAAgB/C,GAAmB1X,KAAM3J,GAAQ,MAIhE9B,EAAQ0jB,MAAQ,CAGrB5hB,EAAe,UAARoN,GAAoBqW,GAAOxZ,KAAMjK,GAIzB,YAAdgkB,EAAM,IAAsBP,GAAOxZ,KAAMjK,GAExC,EADAwE,EAJDA,EAAIwK,WAOLxO,EAAIR,GAAQA,EAAKgJ,WAAW7J,MAC5B,OAAQqB,IACFpC,EAAO+E,SAAYye,EAAQ5hB,EAAKgJ,WAAYxI,GAAO,WACtDohB,EAAM5Y,WAAW7J,QAElBa,EAAKmL,YAAayW,GAKrBxjB,EAAOuB,MAAOukB,EAAO1f,EAAIwE,YAGzBxE,EAAIuK,YAAc,EAGlB,OAAQvK,EAAIwK,WACXxK,EAAI2G,YAAa3G,EAAIwK,WAItBxK,GAAMyf,EAAKrT,cAxDXsT,GAAMtmB,KAAMU,EAAQ8lB,eAAgBpkB,GA8DlCwE,IACJyf,EAAK9Y,YAAa3G,GAKbtG,EAAQ+jB,eACb7jB,EAAO0F,KAAMsf,GAAQc,EAAO,SAAWR,IAGxCzjB,EAAI,CACJ,OAAUD,EAAOkkB,EAAOjkB,KAGvB,GAAK6jB,GAAa1lB,EAAOuF,QAAS3D,EAAM8jB,GAAc,GAChDC,GACJA,EAAQnmB,KAAMoC,OAiBhB,IAXA6F,EAAWzH,EAAOyH,SAAU7F,EAAK0J,cAAe1J,GAGhDwE,EAAM4e,GAAQa,EAAKrX,YAAa5M,GAAQ,UAGnC6F,GACJyd,GAAe9e,GAIXqf,EAAU,CACdrjB,EAAI,CACJ,OAAUR,EAAOwE,EAAKhE,KAChB4gB,EAAYnX,KAAMjK,EAAKkC,MAAQ,KACnC2hB,EAAQjmB,KAAMoC,GAQlB,MAFAwE,GAAM,KAECyf,GAIR,WACC,GAAIhkB,GAAGokB,EACNpZ,EAAM9N,EAAS+N,cAAe,MAG/B,KAAMjL,KAAOiT,QAAQ,EAAMoR,QAAQ,EAAMC,SAAS,GACjDF,EAAY,KAAOpkB,GAEX/B,EAAS+B,GAAMokB,IAAa/mB,MAGnC2N,EAAId,aAAcka,EAAW,KAC7BnmB,EAAS+B,GAAMgL,EAAIlE,WAAYsd,GAAY5iB,WAAY,EAKzDwJ,GAAM,OAIP,IAAIuZ,IAAa,+BAChBC,GAAY,OACZC,GAAc,iDACdC,GAAc,kCACdC,GAAiB,qBAElB,SAASC,MACR,OAAO,EAGR,QAASC,MACR,OAAO,EAKR,QAASC,MACR,IACC,MAAO5nB,GAAS0U,cACf,MAAQmT,KAGX,QAASC,IAAIjlB,EAAMklB,EAAO7mB,EAAUyE,EAAMvE,EAAI4mB,GAC7C,GAAIC,GAAQljB,CAGZ,IAAsB,gBAAVgjB,GAAqB,CAGP,gBAAb7mB,KAGXyE,EAAOA,GAAQzE,EACfA,EAAWmD,OAEZ,KAAMU,IAAQgjB,GACbD,GAAIjlB,EAAMkC,EAAM7D,EAAUyE,EAAMoiB,EAAOhjB,GAAQijB,EAEhD,OAAOnlB,GAsBR,GAnBa,MAAR8C,GAAsB,MAANvE,GAGpBA,EAAKF,EACLyE,EAAOzE,EAAWmD,QACD,MAANjD,IACc,gBAAbF,IAGXE,EAAKuE,EACLA,EAAOtB,SAIPjD,EAAKuE,EACLA,EAAOzE,EACPA,EAAWmD,SAGRjD,KAAO,EACXA,EAAKumB,OACC,KAAMvmB,EACZ,MAAOyB,EAeR,OAZa,KAARmlB,IACJC,EAAS7mB,EACTA,EAAK,SAAUme,GAId,MADAte,KAASie,IAAKK,GACP0I,EAAOllB,MAAO3C,KAAM4C,YAI5B5B,EAAG8F,KAAO+gB,EAAO/gB,OAAU+gB,EAAO/gB,KAAOjG,EAAOiG,SAE1CrE,EAAKH,KAAM,WACjBzB,EAAOse,MAAMtE,IAAK7a,KAAM2nB,EAAO3mB,EAAIuE,EAAMzE,KAQ3CD,EAAOse,OAEN3f,UAEAqb,IAAK,SAAUpY,EAAMklB,EAAO5Z,EAASxI,EAAMzE,GAC1C,GAAImG,GAAK6gB,EAAQC,EAAGC,EACnBC,EAASC,EAAaC,EACtBC,EAAUzjB,EAAM0jB,EAAYC,EAC5BC,EAAW1nB,EAAOwgB,MAAO5e,EAG1B,IAAM8lB,EAAN,CAKKxa,EAAQA,UACZia,EAAcja,EACdA,EAAUia,EAAYja,QACtBjN,EAAWknB,EAAYlnB,UAIlBiN,EAAQjH,OACbiH,EAAQjH,KAAOjG,EAAOiG,SAIfghB,EAASS,EAAST,UACzBA,EAASS,EAAST,YAEXI,EAAcK,EAASC,UAC9BN,EAAcK,EAASC,OAAS,SAAUpjB,GAIzC,MAAyB,mBAAXvE,IACVuE,GAAKvE,EAAOse,MAAMsJ,YAAcrjB,EAAET,KAErCV,OADApD,EAAOse,MAAMuJ,SAAS/lB,MAAOulB,EAAYzlB,KAAMG,YAMjDslB,EAAYzlB,KAAOA,GAIpBklB,GAAUA,GAAS,IAAK5b,MAAOyP,KAAiB,IAChDuM,EAAIJ,EAAM/lB,MACV,OAAQmmB,IACP9gB,EAAMogB,GAAejb,KAAMub,EAAOI,QAClCpjB,EAAO2jB,EAAWrhB,EAAK,GACvBohB,GAAephB,EAAK,IAAO,IAAKK,MAAO,KAAMnE,OAGvCwB,IAKNsjB,EAAUpnB,EAAOse,MAAM8I,QAAStjB,OAGhCA,GAAS7D,EAAWmnB,EAAQU,aAAeV,EAAQW,WAAcjkB,EAGjEsjB,EAAUpnB,EAAOse,MAAM8I,QAAStjB,OAGhCwjB,EAAYtnB,EAAOwC,QAClBsB,KAAMA,EACN2jB,SAAUA,EACV/iB,KAAMA,EACNwI,QAASA,EACTjH,KAAMiH,EAAQjH,KACdhG,SAAUA,EACV2J,aAAc3J,GAAYD,EAAOkQ,KAAKhF,MAAMtB,aAAaiC,KAAM5L,GAC/D+nB,UAAWR,EAAWvb,KAAM,MAC1Bkb,IAGKI,EAAWN,EAAQnjB,MAC1ByjB,EAAWN,EAAQnjB,MACnByjB,EAASU,cAAgB,EAGnBb,EAAQc,OACbd,EAAQc,MAAMjnB,KAAMW,EAAM8C,EAAM8iB,EAAYH,MAAkB,IAGzDzlB,EAAKyM,iBACTzM,EAAKyM,iBAAkBvK,EAAMujB,GAAa,GAE/BzlB,EAAK0M,aAChB1M,EAAK0M,YAAa,KAAOxK,EAAMujB,KAK7BD,EAAQpN,MACZoN,EAAQpN,IAAI/Y,KAAMW,EAAM0lB,GAElBA,EAAUpa,QAAQjH,OACvBqhB,EAAUpa,QAAQjH,KAAOiH,EAAQjH,OAK9BhG,EACJsnB,EAAShlB,OAAQglB,EAASU,gBAAiB,EAAGX,GAE9CC,EAAS/nB,KAAM8nB,GAIhBtnB,EAAOse,MAAM3f,OAAQmF,IAAS,EAI/BlC,GAAO,OAIR6Z,OAAQ,SAAU7Z,EAAMklB,EAAO5Z,EAASjN,EAAUkoB,GACjD,GAAI/lB,GAAGklB,EAAWlhB,EACjBgiB,EAAWlB,EAAGD,EACdG,EAASG,EAAUzjB,EACnB0jB,EAAYC,EACZC,EAAW1nB,EAAOsgB,QAAS1e,IAAU5B,EAAOwgB,MAAO5e,EAEpD,IAAM8lB,IAAeT,EAASS,EAAST,QAAvC,CAKAH,GAAUA,GAAS,IAAK5b,MAAOyP,KAAiB,IAChDuM,EAAIJ,EAAM/lB,MACV,OAAQmmB,IAMP,GALA9gB,EAAMogB,GAAejb,KAAMub,EAAOI,QAClCpjB,EAAO2jB,EAAWrhB,EAAK,GACvBohB,GAAephB,EAAK,IAAO,IAAKK,MAAO,KAAMnE,OAGvCwB,EAAN,CAOAsjB,EAAUpnB,EAAOse,MAAM8I,QAAStjB,OAChCA,GAAS7D,EAAWmnB,EAAQU,aAAeV,EAAQW,WAAcjkB,EACjEyjB,EAAWN,EAAQnjB,OACnBsC,EAAMA,EAAK,IACV,GAAI0C,QAAQ,UAAY0e,EAAWvb,KAAM,iBAAoB,WAG9Dmc,EAAYhmB,EAAImlB,EAASxmB,MACzB,OAAQqB,IACPklB,EAAYC,EAAUnlB,IAEf+lB,GAAeV,IAAaH,EAAUG,UACzCva,GAAWA,EAAQjH,OAASqhB,EAAUrhB,MACtCG,IAAOA,EAAIyF,KAAMyb,EAAUU,YAC3B/nB,GAAYA,IAAaqnB,EAAUrnB,WACxB,OAAbA,IAAqBqnB,EAAUrnB,YAChCsnB,EAAShlB,OAAQH,EAAG,GAEfklB,EAAUrnB,UACdsnB,EAASU,gBAELb,EAAQ3L,QACZ2L,EAAQ3L,OAAOxa,KAAMW,EAAM0lB,GAOzBc,KAAcb,EAASxmB,SACrBqmB,EAAQiB,UACbjB,EAAQiB,SAASpnB,KAAMW,EAAM4lB,EAAYE,EAASC,WAAa,GAE/D3nB,EAAOsoB,YAAa1mB,EAAMkC,EAAM4jB,EAASC,cAGnCV,GAAQnjB,QA1Cf,KAAMA,IAAQmjB,GACbjnB,EAAOse,MAAM7C,OAAQ7Z,EAAMkC,EAAOgjB,EAAOI,GAAKha,EAASjN,GAAU,EA8C/DD,GAAOoE,cAAe6iB,WACnBS,GAASC,OAIhB3nB,EAAOygB,YAAa7e,EAAM,aAI5B2mB,QAAS,SAAUjK,EAAO5Z,EAAM9C,EAAM4mB,GACrC,GAAIb,GAAQc,EAAQpb,EACnBqb,EAAYtB,EAAShhB,EAAKvE,EAC1B8mB,GAAc/mB,GAAQ7C,GACtB+E,EAAOlE,EAAOqB,KAAMqd,EAAO,QAAWA,EAAMxa,KAAOwa,EACnDkJ,EAAa5nB,EAAOqB,KAAMqd,EAAO,aAAgBA,EAAM0J,UAAUvhB,MAAO,OAKzE,IAHA4G,EAAMjH,EAAMxE,EAAOA,GAAQ7C,EAGJ,IAAlB6C,EAAK0C,UAAoC,IAAlB1C,EAAK0C,WAK5BiiB,GAAY1a,KAAM/H,EAAO9D,EAAOse,MAAMsJ,aAItC9jB,EAAKrE,QAAS,KAAQ,KAG1B+nB,EAAa1jB,EAAK2C,MAAO,KACzB3C,EAAO0jB,EAAW9a,QAClB8a,EAAWllB,QAEZmmB,EAAS3kB,EAAKrE,QAAS,KAAQ,GAAK,KAAOqE,EAG3Cwa,EAAQA,EAAOte,EAAOqD,SACrBib,EACA,GAAIte,GAAO4oB,MAAO9kB,EAAuB,gBAAVwa,IAAsBA,GAGtDA,EAAMuK,UAAYL,EAAe,EAAI,EACrClK,EAAM0J,UAAYR,EAAWvb,KAAM,KACnCqS,EAAMwK,WAAaxK,EAAM0J,UACxB,GAAIlf,QAAQ,UAAY0e,EAAWvb,KAAM,iBAAoB,WAC7D,KAGDqS,EAAMzM,OAASzO,OACTkb,EAAMvb,SACXub,EAAMvb,OAASnB,GAIhB8C,EAAe,MAARA,GACJ4Z,GACFte,EAAOmF,UAAWT,GAAQ4Z,IAG3B8I,EAAUpnB,EAAOse,MAAM8I,QAAStjB,OAC1B0kB,IAAgBpB,EAAQmB,SAAWnB,EAAQmB,QAAQzmB,MAAOF,EAAM8C,MAAW,GAAjF,CAMA,IAAM8jB,IAAiBpB,EAAQ2B,WAAa/oB,EAAOgE,SAAUpC,GAAS,CAMrE,IAJA8mB,EAAatB,EAAQU,cAAgBhkB,EAC/ByiB,GAAY1a,KAAM6c,EAAa5kB,KACpCuJ,EAAMA,EAAIlB,YAEHkB,EAAKA,EAAMA,EAAIlB,WACtBwc,EAAUnpB,KAAM6N,GAChBjH,EAAMiH,CAIFjH,MAAUxE,EAAK0J,eAAiBvM,IACpC4pB,EAAUnpB,KAAM4G,EAAI+H,aAAe/H,EAAI4iB,cAAgB9pB,GAKzD2C,EAAI,CACJ,QAAUwL,EAAMsb,EAAW9mB,QAAYyc,EAAM2K,uBAE5C3K,EAAMxa,KAAOjC,EAAI,EAChB6mB,EACAtB,EAAQW,UAAYjkB,EAGrB6jB,GAAW3nB,EAAOwgB,MAAOnT,EAAK,eAAoBiR,EAAMxa,OACvD9D,EAAOwgB,MAAOnT,EAAK,UAEfsa,GACJA,EAAO7lB,MAAOuL,EAAK3I,GAIpBijB,EAASc,GAAUpb,EAAKob,GACnBd,GAAUA,EAAO7lB,OAASsd,EAAY/R,KAC1CiR,EAAMzM,OAAS8V,EAAO7lB,MAAOuL,EAAK3I,GAC7B4Z,EAAMzM,UAAW,GACrByM,EAAM4K,iBAOT,IAHA5K,EAAMxa,KAAOA,GAGP0kB,IAAiBlK,EAAM6K,wBAGxB/B,EAAQ1C,UACV0C,EAAQ1C,SAAS5iB,MAAO6mB,EAAUtgB,MAAO3D,MAAW,IAChD0a,EAAYxd,IAMZ6mB,GAAU7mB,EAAMkC,KAAW9D,EAAOgE,SAAUpC,GAAS,CAGzDwE,EAAMxE,EAAM6mB,GAEPriB,IACJxE,EAAM6mB,GAAW,MAIlBzoB,EAAOse,MAAMsJ,UAAY9jB,CACzB,KACClC,EAAMkC,KACL,MAAQS,IAKVvE,EAAOse,MAAMsJ,UAAYxkB,OAEpBgD,IACJxE,EAAM6mB,GAAWriB,GAMrB,MAAOkY,GAAMzM,SAGdgW,SAAU,SAAUvJ,GAGnBA,EAAQte,EAAOse,MAAM8K,IAAK9K,EAE1B,IAAIzc,GAAGO,EAAGd,EAAKuR,EAASyU,EACvB+B,KACAljB,EAAO7G,EAAM2B,KAAMc,WACnBwlB,GAAavnB,EAAOwgB,MAAOrhB,KAAM,eAAoBmf,EAAMxa,UAC3DsjB,EAAUpnB,EAAOse,MAAM8I,QAAS9I,EAAMxa,SAOvC,IAJAqC,EAAM,GAAMmY,EACZA,EAAMgL,eAAiBnqB,MAGlBioB,EAAQmC,aAAenC,EAAQmC,YAAYtoB,KAAM9B,KAAMmf,MAAY,EAAxE,CAKA+K,EAAerpB,EAAOse,MAAMiJ,SAAStmB,KAAM9B,KAAMmf,EAAOiJ,GAGxD1lB,EAAI,CACJ,QAAUgR,EAAUwW,EAAcxnB,QAAYyc,EAAM2K,uBAAyB,CAC5E3K,EAAMkL,cAAgB3W,EAAQjR,KAE9BQ,EAAI,CACJ,QAAUklB,EAAYzU,EAAQ0U,SAAUnlB,QACtCkc,EAAMmL,gCAIDnL,EAAMwK,aAAcxK,EAAMwK,WAAWjd,KAAMyb,EAAUU,aAE1D1J,EAAMgJ,UAAYA,EAClBhJ,EAAM5Z,KAAO4iB,EAAU5iB,KAEvBpD,IAAUtB,EAAOse,MAAM8I,QAASE,EAAUG,eAAmBE,QAC5DL,EAAUpa,SAAUpL,MAAO+Q,EAAQjR,KAAMuE,GAE7B/C,SAAR9B,IACGgd,EAAMzM,OAASvQ,MAAU,IAC/Bgd,EAAM4K,iBACN5K,EAAMoL,oBAYX,MAJKtC,GAAQuC,cACZvC,EAAQuC,aAAa1oB,KAAM9B,KAAMmf,GAG3BA,EAAMzM,SAGd0V,SAAU,SAAUjJ,EAAOiJ,GAC1B,GAAI1lB,GAAGgE,EAAS+jB,EAAKtC,EACpB+B,KACApB,EAAgBV,EAASU,cACzB5a,EAAMiR,EAAMvb,MAQb,IAAKklB,GAAiB5a,EAAI/I,WACR,UAAfga,EAAMxa,MAAoB+lB,MAAOvL,EAAMlK,SAAYkK,EAAMlK,OAAS,GAGpE,KAAQ/G,GAAOlO,KAAMkO,EAAMA,EAAIlB,YAAchN,KAK5C,GAAsB,IAAjBkO,EAAI/I,WAAoB+I,EAAIyG,YAAa,GAAuB,UAAfwK,EAAMxa,MAAqB,CAEhF,IADA+B,KACMhE,EAAI,EAAOomB,EAAJpmB,EAAmBA,IAC/BylB,EAAYC,EAAU1lB,GAGtB+nB,EAAMtC,EAAUrnB,SAAW,IAEHmD,SAAnByC,EAAS+jB,KACb/jB,EAAS+jB,GAAQtC,EAAU1d,aAC1B5J,EAAQ4pB,EAAKzqB,MAAO2a,MAAOzM,GAAQ,GACnCrN,EAAO4O,KAAMgb,EAAKzqB,KAAM,MAAQkO,IAAQtM,QAErC8E,EAAS+jB,IACb/jB,EAAQrG,KAAM8nB,EAGXzhB,GAAQ9E,QACZsoB,EAAa7pB,MAAQoC,KAAMyL,EAAKka,SAAU1hB,IAW9C,MAJKoiB,GAAgBV,EAASxmB,QAC7BsoB,EAAa7pB,MAAQoC,KAAMzC,KAAMooB,SAAUA,EAASjoB,MAAO2oB,KAGrDoB,GAGRD,IAAK,SAAU9K,GACd,GAAKA,EAAOte,EAAOqD,SAClB,MAAOib,EAIR,IAAIzc,GAAGigB,EAAMnf,EACZmB,EAAOwa,EAAMxa,KACbgmB,EAAgBxL,EAChByL,EAAU5qB,KAAK6qB,SAAUlmB,EAEpBimB,KACL5qB,KAAK6qB,SAAUlmB,GAASimB,EACvBzD,GAAYza,KAAM/H,GAAS3E,KAAK8qB,WAChC5D,GAAUxa,KAAM/H,GAAS3E,KAAK+qB,aAGhCvnB,EAAOonB,EAAQI,MAAQhrB,KAAKgrB,MAAM5qB,OAAQwqB,EAAQI,OAAUhrB,KAAKgrB,MAEjE7L,EAAQ,GAAIte,GAAO4oB,MAAOkB,GAE1BjoB,EAAIc,EAAK5B,MACT,OAAQc,IACPigB,EAAOnf,EAAMd,GACbyc,EAAOwD,GAASgI,EAAehI,EAmBhC,OAdMxD,GAAMvb,SACXub,EAAMvb,OAAS+mB,EAAcM,YAAcrrB,GAKb,IAA1Buf,EAAMvb,OAAOuB,WACjBga,EAAMvb,OAASub,EAAMvb,OAAOoJ,YAK7BmS,EAAM+L,UAAY/L,EAAM+L,QAEjBN,EAAQlb,OAASkb,EAAQlb,OAAQyP,EAAOwL,GAAkBxL,GAIlE6L,MAAO,+HACyD1jB,MAAO,KAEvEujB,YAEAE,UACCC,MAAO,4BAA4B1jB,MAAO,KAC1CoI,OAAQ,SAAUyP,EAAOgM,GAOxB,MAJoB,OAAfhM,EAAMiM,QACVjM,EAAMiM,MAA6B,MAArBD,EAASE,SAAmBF,EAASE,SAAWF,EAASG,SAGjEnM,IAIT2L,YACCE,MAAO,mGACoC1jB,MAAO,KAClDoI,OAAQ,SAAUyP,EAAOgM,GACxB,GAAIzL,GAAM6L,EAAUxc,EACnBkG,EAASkW,EAASlW,OAClBuW,EAAcL,EAASK,WA6BxB,OA1BoB,OAAfrM,EAAMsM,OAAqC,MAApBN,EAASO,UACpCH,EAAWpM,EAAMvb,OAAOuI,eAAiBvM,EACzCmP,EAAMwc,EAAS5c,gBACf+Q,EAAO6L,EAAS7L,KAEhBP,EAAMsM,MAAQN,EAASO,SACpB3c,GAAOA,EAAI4c,YAAcjM,GAAQA,EAAKiM,YAAc,IACpD5c,GAAOA,EAAI6c,YAAclM,GAAQA,EAAKkM,YAAc,GACvDzM,EAAM0M,MAAQV,EAASW,SACpB/c,GAAOA,EAAIgd,WAAcrM,GAAQA,EAAKqM,WAAc,IACpDhd,GAAOA,EAAIid,WAActM,GAAQA,EAAKsM,WAAc,KAIlD7M,EAAM8M,eAAiBT,IAC5BrM,EAAM8M,cAAgBT,IAAgBrM,EAAMvb,OAC3CunB,EAASe,UACTV,GAKIrM,EAAMiM,OAAoBnnB,SAAXgR,IACpBkK,EAAMiM,MAAmB,EAATnW,EAAa,EAAe,EAATA,EAAa,EAAe,EAATA,EAAa,EAAI,GAGjEkK,IAIT8I,SACCkE,MAGCvC,UAAU,GAEXvV,OAGC+U,QAAS,WACR,GAAKppB,OAASwnB,MAAuBxnB,KAAKqU,MACzC,IAEC,MADArU,MAAKqU,SACE,EACN,MAAQjP,MAQZujB,aAAc,WAEfyD,MACChD,QAAS,WACR,MAAKppB,QAASwnB,MAAuBxnB,KAAKosB,MACzCpsB,KAAKosB,QACE,GAFR,QAKDzD,aAAc,YAEf0D,OAGCjD,QAAS,WACR,MAAKvoB,GAAO+E,SAAU5F,KAAM,UAA2B,aAAdA,KAAK2E,MAAuB3E,KAAKqsB,OACzErsB,KAAKqsB,SACE,GAFR,QAOD9G,SAAU,SAAUpG,GACnB,MAAOte,GAAO+E,SAAUuZ,EAAMvb,OAAQ,OAIxC0oB,cACC9B,aAAc,SAAUrL,GAIDlb,SAAjBkb,EAAMzM,QAAwByM,EAAMwL,gBACxCxL,EAAMwL,cAAc4B,YAAcpN,EAAMzM,WAO5C8Z,SAAU,SAAU7nB,EAAMlC,EAAM0c,GAC/B,GAAI/Z,GAAIvE,EAAOwC,OACd,GAAIxC,GAAO4oB,MACXtK,GAECxa,KAAMA,EACN8nB,aAAa,GAaf5rB,GAAOse,MAAMiK,QAAShkB,EAAG,KAAM3C,GAE1B2C,EAAE4kB,sBACN7K,EAAM4K,mBAKTlpB,EAAOsoB,YAAcvpB,EAASof,oBAC7B,SAAUvc,EAAMkC,EAAM6jB,GAGhB/lB,EAAKuc,qBACTvc,EAAKuc,oBAAqBra,EAAM6jB,IAGlC,SAAU/lB,EAAMkC,EAAM6jB,GACrB,GAAI/kB,GAAO,KAAOkB,CAEblC,GAAKyc,cAKoB,mBAAjBzc,GAAMgB,KACjBhB,EAAMgB,GAAS,MAGhBhB,EAAKyc,YAAazb,EAAM+kB,KAI3B3nB,EAAO4oB,MAAQ,SAAUnmB,EAAK0nB,GAG7B,MAAQhrB,gBAAgBa,GAAO4oB,OAK1BnmB,GAAOA,EAAIqB,MACf3E,KAAK2qB,cAAgBrnB,EACrBtD,KAAK2E,KAAOrB,EAAIqB,KAIhB3E,KAAKgqB,mBAAqB1mB,EAAIopB,kBACHzoB,SAAzBX,EAAIopB,kBAGJppB,EAAIipB,eAAgB,EACrBjF,GACAC,IAIDvnB,KAAK2E,KAAOrB,EAIR0nB,GACJnqB,EAAOwC,OAAQrD,KAAMgrB,GAItBhrB,KAAK2sB,UAAYrpB,GAAOA,EAAIqpB,WAAa9rB,EAAOqG,WAGhDlH,KAAMa,EAAOqD,UAAY,IAhCjB,GAAIrD,GAAO4oB,MAAOnmB,EAAK0nB,IAqChCnqB,EAAO4oB,MAAMhoB,WACZE,YAAad,EAAO4oB,MACpBO,mBAAoBzC,GACpBuC,qBAAsBvC,GACtB+C,8BAA+B/C,GAE/BwC,eAAgB,WACf,GAAI3kB,GAAIpF,KAAK2qB,aAEb3qB,MAAKgqB,mBAAqB1C,GACpBliB,IAKDA,EAAE2kB,eACN3kB,EAAE2kB,iBAKF3kB,EAAEmnB,aAAc,IAGlBhC,gBAAiB,WAChB,GAAInlB,GAAIpF,KAAK2qB,aAEb3qB,MAAK8pB,qBAAuBxC,GAEtBliB,IAAKpF,KAAKysB,cAKXrnB,EAAEmlB,iBACNnlB,EAAEmlB,kBAKHnlB,EAAEwnB,cAAe,IAElBC,yBAA0B,WACzB,GAAIznB,GAAIpF,KAAK2qB,aAEb3qB,MAAKsqB,8BAAgChD,GAEhCliB,GAAKA,EAAEynB,0BACXznB,EAAEynB,2BAGH7sB,KAAKuqB,oBAYP1pB,EAAOyB,MACNwqB,WAAY,YACZC,WAAY,WACZC,aAAc,cACdC,aAAc,cACZ,SAAUC,EAAMjD,GAClBppB,EAAOse,MAAM8I,QAASiF,IACrBvE,aAAcsB,EACdrB,SAAUqB,EAEVzB,OAAQ,SAAUrJ,GACjB,GAAIhd,GACHyB,EAAS5D,KACTmtB,EAAUhO,EAAM8M,cAChB9D,EAAYhJ,EAAMgJ,SASnB,OALMgF,KAAaA,IAAYvpB,GAAW/C,EAAOyH,SAAU1E,EAAQupB,MAClEhO,EAAMxa,KAAOwjB,EAAUG,SACvBnmB,EAAMgmB,EAAUpa,QAAQpL,MAAO3C,KAAM4C,WACrCuc,EAAMxa,KAAOslB,GAEP9nB,MAMJxB,EAAQgV,SAEb9U,EAAOse,MAAM8I,QAAQtS,QACpBoT,MAAO,WAGN,MAAKloB,GAAO+E,SAAU5F,KAAM,SACpB,MAIRa,GAAOse,MAAMtE,IAAK7a,KAAM,iCAAkC,SAAUoF,GAGnE,GAAI3C,GAAO2C,EAAExB,OACZwpB,EAAOvsB,EAAO+E,SAAUnD,EAAM,UAAa5B,EAAO+E,SAAUnD,EAAM,UAMjE5B,EAAO8hB,KAAMlgB,EAAM,QACnBwB,MAEGmpB,KAASvsB,EAAOwgB,MAAO+L,EAAM,YACjCvsB,EAAOse,MAAMtE,IAAKuS,EAAM,iBAAkB,SAAUjO,GACnDA,EAAMkO,eAAgB,IAEvBxsB,EAAOwgB,MAAO+L,EAAM,UAAU,OAOjC5C,aAAc,SAAUrL,GAGlBA,EAAMkO,sBACHlO,GAAMkO,cACRrtB,KAAKgN,aAAemS,EAAMuK,WAC9B7oB,EAAOse,MAAMqN,SAAU,SAAUxsB,KAAKgN,WAAYmS,KAKrD+J,SAAU,WAGT,MAAKroB,GAAO+E,SAAU5F,KAAM,SACpB,MAIRa,GAAOse,MAAM7C,OAAQtc,KAAM,eAMxBW,EAAQomB,SAEblmB,EAAOse,MAAM8I,QAAQlB,QAEpBgC,MAAO,WAEN,MAAK9B,IAAWva,KAAM1M,KAAK4F,WAKP,aAAd5F,KAAK2E,MAAqC,UAAd3E,KAAK2E,OACrC9D,EAAOse,MAAMtE,IAAK7a,KAAM,yBAA0B,SAAUmf,GACjB,YAArCA,EAAMwL,cAAc2C,eACxBttB,KAAKutB,cAAe,KAGtB1sB,EAAOse,MAAMtE,IAAK7a,KAAM,gBAAiB,SAAUmf,GAC7Cnf,KAAKutB,eAAiBpO,EAAMuK,YAChC1pB,KAAKutB,cAAe,GAIrB1sB,EAAOse,MAAMqN,SAAU,SAAUxsB,KAAMmf,OAGlC,OAIRte,GAAOse,MAAMtE,IAAK7a,KAAM,yBAA0B,SAAUoF,GAC3D,GAAI3C,GAAO2C,EAAExB,MAERqjB,IAAWva,KAAMjK,EAAKmD,YAAe/E,EAAOwgB,MAAO5e,EAAM,YAC7D5B,EAAOse,MAAMtE,IAAKpY,EAAM,iBAAkB,SAAU0c,IAC9Cnf,KAAKgN,YAAemS,EAAMsN,aAAgBtN,EAAMuK,WACpD7oB,EAAOse,MAAMqN,SAAU,SAAUxsB,KAAKgN,WAAYmS,KAGpDte,EAAOwgB,MAAO5e,EAAM,UAAU,OAKjC+lB,OAAQ,SAAUrJ,GACjB,GAAI1c,GAAO0c,EAAMvb,MAGjB,OAAK5D,QAASyC,GAAQ0c,EAAMsN,aAAetN,EAAMuK,WAChC,UAAdjnB,EAAKkC,MAAkC,aAAdlC,EAAKkC,KAEzBwa,EAAMgJ,UAAUpa,QAAQpL,MAAO3C,KAAM4C,WAH7C,QAODsmB,SAAU,WAGT,MAFAroB,GAAOse,MAAM7C,OAAQtc,KAAM,aAEnBinB,GAAWva,KAAM1M,KAAK4F,aAa3BjF,EAAQqmB,SACbnmB,EAAOyB,MAAQ+R,MAAO,UAAW+X,KAAM,YAAc,SAAUc,EAAMjD,GAGpE,GAAIlc,GAAU,SAAUoR,GACvBte,EAAOse,MAAMqN,SAAUvC,EAAK9K,EAAMvb,OAAQ/C,EAAOse,MAAM8K,IAAK9K,IAG7Dte,GAAOse,MAAM8I,QAASgC,IACrBlB,MAAO,WACN,GAAIha,GAAM/O,KAAKmM,eAAiBnM,KAC/BwtB,EAAW3sB,EAAOwgB,MAAOtS,EAAKkb,EAEzBuD,IACLze,EAAIG,iBAAkBge,EAAMnf,GAAS,GAEtClN,EAAOwgB,MAAOtS,EAAKkb,GAAOuD,GAAY,GAAM,IAE7CtE,SAAU,WACT,GAAIna,GAAM/O,KAAKmM,eAAiBnM,KAC/BwtB,EAAW3sB,EAAOwgB,MAAOtS,EAAKkb,GAAQ,CAEjCuD,GAIL3sB,EAAOwgB,MAAOtS,EAAKkb,EAAKuD,IAHxBze,EAAIiQ,oBAAqBkO,EAAMnf,GAAS,GACxClN,EAAOygB,YAAavS,EAAKkb,QAS9BppB,EAAOG,GAAGqC,QAETqkB,GAAI,SAAUC,EAAO7mB,EAAUyE,EAAMvE,GACpC,MAAO0mB,IAAI1nB,KAAM2nB,EAAO7mB,EAAUyE,EAAMvE,IAEzC4mB,IAAK,SAAUD,EAAO7mB,EAAUyE,EAAMvE,GACrC,MAAO0mB,IAAI1nB,KAAM2nB,EAAO7mB,EAAUyE,EAAMvE,EAAI,IAE7C8d,IAAK,SAAU6I,EAAO7mB,EAAUE,GAC/B,GAAImnB,GAAWxjB,CACf,IAAKgjB,GAASA,EAAMoC,gBAAkBpC,EAAMQ,UAW3C,MARAA,GAAYR,EAAMQ,UAClBtnB,EAAQ8mB,EAAMwC,gBAAiBrL,IAC9BqJ,EAAUU,UACTV,EAAUG,SAAW,IAAMH,EAAUU,UACrCV,EAAUG,SACXH,EAAUrnB,SACVqnB,EAAUpa,SAEJ/N,IAER,IAAsB,gBAAV2nB,GAAqB,CAGhC,IAAMhjB,IAAQgjB,GACb3nB,KAAK8e,IAAKna,EAAM7D,EAAU6mB,EAAOhjB,GAElC,OAAO3E,MAWR,MATKc,MAAa,GAA6B,kBAAbA,KAGjCE,EAAKF,EACLA,EAAWmD,QAEPjD,KAAO,IACXA,EAAKumB,IAECvnB,KAAKsC,KAAM,WACjBzB,EAAOse,MAAM7C,OAAQtc,KAAM2nB,EAAO3mB,EAAIF,MAIxCsoB,QAAS,SAAUzkB,EAAMY,GACxB,MAAOvF,MAAKsC,KAAM,WACjBzB,EAAOse,MAAMiK,QAASzkB,EAAMY,EAAMvF,SAGpC6e,eAAgB,SAAUla,EAAMY,GAC/B,GAAI9C,GAAOzC,KAAM,EACjB,OAAKyC,GACG5B,EAAOse,MAAMiK,QAASzkB,EAAMY,EAAM9C,GAAM,GADhD,SAOF,IAAIgrB,IAAgB,6BACnBC,GAAe,GAAI/jB,QAAQ,OAASoa,GAAY,WAAY,KAC5D4J,GAAY,2EAKZC,GAAe,wBAGfC,GAAW,oCACXC,GAAoB,cACpBC,GAAe,2CACfC,GAAehK,GAAoBpkB,GACnCquB,GAAcD,GAAa3e,YAAazP,EAAS+N,cAAe,OAIjE,SAASugB,IAAoBzrB,EAAM0rB,GAClC,MAAOttB,GAAO+E,SAAUnD,EAAM,UAC7B5B,EAAO+E,SAA+B,KAArBuoB,EAAQhpB,SAAkBgpB,EAAUA,EAAQ1c,WAAY,MAEzEhP,EAAK8J,qBAAsB,SAAW,IACrC9J,EAAK4M,YAAa5M,EAAK0J,cAAcwB,cAAe,UACrDlL,EAIF,QAAS2rB,IAAe3rB,GAEvB,MADAA,GAAKkC,MAA8C,OAArC9D,EAAO4O,KAAKwB,KAAMxO,EAAM,SAAsB,IAAMA,EAAKkC,KAChElC,EAER,QAAS4rB,IAAe5rB,GACvB,GAAIsJ,GAAQ+hB,GAAkB1hB,KAAM3J,EAAKkC,KAMzC,OALKoH,GACJtJ,EAAKkC,KAAOoH,EAAO,GAEnBtJ,EAAK0K,gBAAiB,QAEhB1K,EAGR,QAAS6rB,IAAgBhrB,EAAKirB,GAC7B,GAAuB,IAAlBA,EAAKppB,UAAmBtE,EAAOsgB,QAAS7d,GAA7C,CAIA,GAAIqB,GAAMjC,EAAG+X,EACZ+T,EAAU3tB,EAAOwgB,MAAO/d,GACxBmrB,EAAU5tB,EAAOwgB,MAAOkN,EAAMC,GAC9B1G,EAAS0G,EAAQ1G,MAElB,IAAKA,EAAS,OACN2G,GAAQjG,OACfiG,EAAQ3G,SAER,KAAMnjB,IAAQmjB,GACb,IAAMplB,EAAI,EAAG+X,EAAIqN,EAAQnjB,GAAO/C,OAAY6Y,EAAJ/X,EAAOA,IAC9C7B,EAAOse,MAAMtE,IAAK0T,EAAM5pB,EAAMmjB,EAAQnjB,GAAQjC,IAM5C+rB,EAAQlpB,OACZkpB,EAAQlpB,KAAO1E,EAAOwC,UAAYorB,EAAQlpB,QAI5C,QAASmpB,IAAoBprB,EAAKirB,GACjC,GAAI3oB,GAAUR,EAAGG,CAGjB,IAAuB,IAAlBgpB,EAAKppB,SAAV,CAOA,GAHAS,EAAW2oB,EAAK3oB,SAASC,eAGnBlF,EAAQkkB,cAAgB0J,EAAM1tB,EAAOqD,SAAY,CACtDqB,EAAO1E,EAAOwgB,MAAOkN,EAErB,KAAMnpB,IAAKG,GAAKuiB,OACfjnB,EAAOsoB,YAAaoF,EAAMnpB,EAAGG,EAAKijB,OAInC+F,GAAKphB,gBAAiBtM,EAAOqD,SAIZ,WAAb0B,GAAyB2oB,EAAKxoB,OAASzC,EAAIyC,MAC/CqoB,GAAeG,GAAOxoB,KAAOzC,EAAIyC,KACjCsoB,GAAeE,IAIS,WAAb3oB,GACN2oB,EAAKvhB,aACTuhB,EAAK9J,UAAYnhB,EAAImhB,WAOjB9jB,EAAQ4jB,YAAgBjhB,EAAIwM,YAAcjP,EAAO2E,KAAM+oB,EAAKze,aAChEye,EAAKze,UAAYxM,EAAIwM,YAGE,UAAblK,GAAwB+d,EAAejX,KAAMpJ,EAAIqB,OAM5D4pB,EAAKnI,eAAiBmI,EAAK3Z,QAAUtR,EAAIsR,QAIpC2Z,EAAK1nB,QAAUvD,EAAIuD,QACvB0nB,EAAK1nB,MAAQvD,EAAIuD,QAKM,WAAbjB,EACX2oB,EAAKI,gBAAkBJ,EAAK1Z,SAAWvR,EAAIqrB,gBAInB,UAAb/oB,GAAqC,aAAbA,IACnC2oB,EAAKxV,aAAezV,EAAIyV,eAI1B,QAAS6V,IAAUC,EAAY7nB,EAAMzE,EAAUikB,GAG9Cxf,EAAO5G,EAAOuC,SAAWqE,EAEzB,IAAInE,GAAO+L,EAAMkgB,EAChBxI,EAASvX,EAAKoV,EACdzhB,EAAI,EACJ+X,EAAIoU,EAAWjtB,OACfmtB,EAAWtU,EAAI,EACf5T,EAAQG,EAAM,GACdlD,EAAajD,EAAOiD,WAAY+C,EAGjC,IAAK/C,GACD2W,EAAI,GAAsB,gBAAV5T,KAChBlG,EAAQikB,YAAciJ,GAASnhB,KAAM7F,GACxC,MAAOgoB,GAAWvsB,KAAM,SAAUqY,GACjC,GAAIf,GAAOiV,EAAW/rB,GAAI6X,EACrB7W,KACJkD,EAAM,GAAMH,EAAM/E,KAAM9B,KAAM2a,EAAOf,EAAKoV,SAE3CJ,GAAUhV,EAAM5S,EAAMzE,EAAUikB,IAIlC,IAAK/L,IACJ0J,EAAWkC,GAAerf,EAAM6nB,EAAY,GAAI1iB,eAAe,EAAO0iB,EAAYrI,GAClF3jB,EAAQshB,EAAS1S,WAEmB,IAA/B0S,EAAS1Y,WAAW7J,SACxBuiB,EAAWthB,GAIPA,GAAS2jB,GAAU,CAOvB,IANAF,EAAUzlB,EAAO2B,IAAKqjB,GAAQ1B,EAAU,UAAYiK,IACpDU,EAAaxI,EAAQ1kB,OAKT6Y,EAAJ/X,EAAOA,IACdkM,EAAOuV,EAEFzhB,IAAMqsB,IACVngB,EAAO/N,EAAO8C,MAAOiL,GAAM,GAAM,GAG5BkgB,GAIJjuB,EAAOuB,MAAOkkB,EAAST,GAAQjX,EAAM,YAIvCrM,EAAST,KAAM+sB,EAAYnsB,GAAKkM,EAAMlM,EAGvC,IAAKosB,EAOJ,IANA/f,EAAMuX,EAASA,EAAQ1kB,OAAS,GAAIuK,cAGpCtL,EAAO2B,IAAK8jB,EAAS+H,IAGf3rB,EAAI,EAAOosB,EAAJpsB,EAAgBA,IAC5BkM,EAAO0X,EAAS5jB,GACXmhB,EAAYnX,KAAMkC,EAAKjK,MAAQ,MAClC9D,EAAOwgB,MAAOzS,EAAM,eACrB/N,EAAOyH,SAAUyG,EAAKH,KAEjBA,EAAKtL,IAGJzC,EAAOouB,UACXpuB,EAAOouB,SAAUrgB,EAAKtL,KAGvBzC,EAAOyE,YACJsJ,EAAK7I,MAAQ6I,EAAK4C,aAAe5C,EAAKkB,WAAa,IACnDzL,QAAS0pB,GAAc,KAQ9B5J,GAAWthB,EAAQ,KAIrB,MAAOgsB,GAGR,QAASvS,IAAQ7Z,EAAM3B,EAAUouB,GAKhC,IAJA,GAAItgB,GACH1M,EAAQpB,EAAWD,EAAO6O,OAAQ5O,EAAU2B,GAASA,EACrDC,EAAI,EAE4B,OAAvBkM,EAAO1M,EAAOQ,IAAeA,IAEhCwsB,GAA8B,IAAlBtgB,EAAKzJ,UACtBtE,EAAOkgB,UAAW8E,GAAQjX,IAGtBA,EAAK5B,aACJkiB,GAAYruB,EAAOyH,SAAUsG,EAAKzC,cAAeyC,IACrDmX,GAAeF,GAAQjX,EAAM,WAE9BA,EAAK5B,WAAWY,YAAagB,GAI/B,OAAOnM,GAGR5B,EAAOwC,QACNujB,cAAe,SAAUoI,GACxB,MAAOA,GAAK3qB,QAASspB,GAAW,cAGjChqB,MAAO,SAAUlB,EAAM0sB,EAAeC,GACrC,GAAIC,GAAczgB,EAAMjL,EAAOjB,EAAG4sB,EACjCC,EAAS1uB,EAAOyH,SAAU7F,EAAK0J,cAAe1J,EAa/C,IAXK9B,EAAQ4jB,YAAc1jB,EAAOoY,SAAUxW,KAC1CirB,GAAahhB,KAAM,IAAMjK,EAAKmD,SAAW,KAE1CjC,EAAQlB,EAAK+hB,WAAW,IAIxByJ,GAAYne,UAAYrN,EAAKgiB,UAC7BwJ,GAAYrgB,YAAajK,EAAQsqB,GAAYxc,eAGtC9Q,EAAQkkB,cAAiBlkB,EAAQgkB,gBACnB,IAAlBliB,EAAK0C,UAAoC,KAAlB1C,EAAK0C,UAAsBtE,EAAOoY,SAAUxW,IAOtE,IAJA4sB,EAAexJ,GAAQliB,GACvB2rB,EAAczJ,GAAQpjB,GAGhBC,EAAI,EAAkC,OAA7BkM,EAAO0gB,EAAa5sB,MAAiBA,EAG9C2sB,EAAc3sB,IAClBgsB,GAAoB9f,EAAMygB,EAAc3sB,GAM3C,IAAKysB,EACJ,GAAKC,EAIJ,IAHAE,EAAcA,GAAezJ,GAAQpjB,GACrC4sB,EAAeA,GAAgBxJ,GAAQliB,GAEjCjB,EAAI,EAAkC,OAA7BkM,EAAO0gB,EAAa5sB,IAAeA,IACjD4rB,GAAgB1f,EAAMygB,EAAc3sB,QAGrC4rB,IAAgB7rB,EAAMkB,EAaxB,OARA0rB,GAAexJ,GAAQliB,EAAO,UACzB0rB,EAAaztB,OAAS,GAC1BmkB,GAAesJ,GAAeE,GAAU1J,GAAQpjB,EAAM,WAGvD4sB,EAAeC,EAAc1gB,EAAO,KAG7BjL,GAGRod,UAAW,SAAU7e,EAAsBstB,GAQ1C,IAPA,GAAI/sB,GAAMkC,EAAM2H,EAAI/G,EACnB7C,EAAI,EACJie,EAAc9f,EAAOqD,QACrBmJ,EAAQxM,EAAOwM,MACf7D,EAAa7I,EAAQ6I,WACrBye,EAAUpnB,EAAOse,MAAM8I,QAES,OAAvBxlB,EAAOP,EAAOQ,IAAeA,IACtC,IAAK8sB,GAAmBvP,EAAYxd,MAEnC6J,EAAK7J,EAAMke,GACXpb,EAAO+G,GAAMe,EAAOf,IAER,CACX,GAAK/G,EAAKuiB,OACT,IAAMnjB,IAAQY,GAAKuiB,OACbG,EAAStjB,GACb9D,EAAOse,MAAM7C,OAAQ7Z,EAAMkC,GAI3B9D,EAAOsoB,YAAa1mB,EAAMkC,EAAMY,EAAKijB,OAMnCnb,GAAOf,WAEJe,GAAOf,GAMR9C,GAA8C,mBAAzB/G,GAAK0K,gBAO/B1K,EAAMke,GAAgB1c,OANtBxB,EAAK0K,gBAAiBwT,GASvBzgB,EAAWG,KAAMiM,QAQvBzL,EAAOG,GAAGqC,QAGTurB,SAAUA,GAEV7P,OAAQ,SAAUje,GACjB,MAAOwb,IAAQtc,KAAMc,GAAU,IAGhCwb,OAAQ,SAAUxb,GACjB,MAAOwb,IAAQtc,KAAMc,IAGtBiF,KAAM,SAAUc,GACf,MAAOyc,GAAQtjB,KAAM,SAAU6G,GAC9B,MAAiB5C,UAAV4C,EACNhG,EAAOkF,KAAM/F,MACbA,KAAK+U,QAAQ0a,QACVzvB,KAAM,IAAOA,KAAM,GAAImM,eAAiBvM,GAAWinB,eAAgBhgB,KAErE,KAAMA,EAAOjE,UAAUhB,SAG3B6tB,OAAQ,WACP,MAAOb,IAAU5uB,KAAM4C,UAAW,SAAUH,GAC3C,GAAuB,IAAlBzC,KAAKmF,UAAoC,KAAlBnF,KAAKmF,UAAqC,IAAlBnF,KAAKmF,SAAiB,CACzE,GAAIvB,GAASsqB,GAAoBluB,KAAMyC,EACvCmB,GAAOyL,YAAa5M,OAKvBitB,QAAS,WACR,MAAOd,IAAU5uB,KAAM4C,UAAW,SAAUH,GAC3C,GAAuB,IAAlBzC,KAAKmF,UAAoC,KAAlBnF,KAAKmF,UAAqC,IAAlBnF,KAAKmF,SAAiB,CACzE,GAAIvB,GAASsqB,GAAoBluB,KAAMyC,EACvCmB,GAAO+rB,aAAcltB,EAAMmB,EAAO6N,gBAKrCme,OAAQ,WACP,MAAOhB,IAAU5uB,KAAM4C,UAAW,SAAUH,GACtCzC,KAAKgN,YACThN,KAAKgN,WAAW2iB,aAAcltB,EAAMzC,SAKvC6vB,MAAO,WACN,MAAOjB,IAAU5uB,KAAM4C,UAAW,SAAUH,GACtCzC,KAAKgN,YACThN,KAAKgN,WAAW2iB,aAAcltB,EAAMzC,KAAKqO,gBAK5C0G,MAAO,WAIN,IAHA,GAAItS,GACHC,EAAI,EAE2B,OAAtBD,EAAOzC,KAAM0C,IAAeA,IAAM,CAGpB,IAAlBD,EAAK0C,UACTtE,EAAOkgB,UAAW8E,GAAQpjB,GAAM,GAIjC,OAAQA,EAAKgP,WACZhP,EAAKmL,YAAanL,EAAKgP,WAKnBhP,GAAKiB,SAAW7C,EAAO+E,SAAUnD,EAAM,YAC3CA,EAAKiB,QAAQ9B,OAAS,GAIxB,MAAO5B,OAGR2D,MAAO,SAAUwrB,EAAeC,GAI/B,MAHAD,GAAiC,MAAjBA,GAAwB,EAAQA,EAChDC,EAAyC,MAArBA,EAA4BD,EAAgBC,EAEzDpvB,KAAKwC,IAAK,WAChB,MAAO3B,GAAO8C,MAAO3D,KAAMmvB,EAAeC,MAI5CJ,KAAM,SAAUnoB,GACf,MAAOyc,GAAQtjB,KAAM,SAAU6G,GAC9B,GAAIpE,GAAOzC,KAAM,OAChB0C,EAAI,EACJ+X,EAAIza,KAAK4B,MAEV,IAAeqC,SAAV4C,EACJ,MAAyB,KAAlBpE,EAAK0C,SACX1C,EAAKqN,UAAUzL,QAASopB,GAAe,IACvCxpB,MAIF,IAAsB,gBAAV4C,KAAuB+mB,GAAalhB,KAAM7F,KACnDlG,EAAQ2jB,gBAAkBoJ,GAAahhB,KAAM7F,MAC7ClG,EAAQyjB,oBAAsBN,GAAmBpX,KAAM7F,MACxDie,IAAWlB,EAASxX,KAAMvF,KAAa,GAAI,KAAQ,GAAIhB,eAAkB,CAE1EgB,EAAQhG,EAAO+lB,cAAe/f,EAE9B,KACC,KAAY4T,EAAJ/X,EAAOA,IAGdD,EAAOzC,KAAM0C,OACU,IAAlBD,EAAK0C,WACTtE,EAAOkgB,UAAW8E,GAAQpjB,GAAM,IAChCA,EAAKqN,UAAYjJ,EAInBpE,GAAO,EAGN,MAAQ2C,KAGN3C,GACJzC,KAAK+U,QAAQ0a,OAAQ5oB,IAEpB,KAAMA,EAAOjE,UAAUhB,SAG3BkuB,YAAa,WACZ,GAAItJ,KAGJ,OAAOoI,IAAU5uB,KAAM4C,UAAW,SAAUH,GAC3C,GAAIqM,GAAS9O,KAAKgN,UAEbnM,GAAOuF,QAASpG,KAAMwmB,GAAY,IACtC3lB,EAAOkgB,UAAW8E,GAAQ7lB,OACrB8O,GACJA,EAAOihB,aAActtB,EAAMzC,QAK3BwmB,MAIL3lB,EAAOyB,MACN0tB,SAAU,SACVC,UAAW,UACXN,aAAc,SACdO,YAAa,QACbC,WAAY,eACV,SAAU1sB,EAAM0nB,GAClBtqB,EAAOG,GAAIyC,GAAS,SAAU3C,GAO7B,IANA,GAAIoB,GACHQ,EAAI,EACJP,KACAiuB,EAASvvB,EAAQC,GACjBiC,EAAOqtB,EAAOxuB,OAAS,EAEXmB,GAALL,EAAWA,IAClBR,EAAQQ,IAAMK,EAAO/C,KAAOA,KAAK2D,OAAO,GACxC9C,EAAQuvB,EAAQ1tB,IAAOyoB,GAAYjpB,GAGnC7B,EAAKsC,MAAOR,EAAKD,EAAMH,MAGxB,OAAO/B,MAAKiC,UAAWE,KAKzB,IAAIkuB,IACHC,IAICC,KAAM,QACNC,KAAM,QAUR,SAASC,IAAehtB,EAAMsL,GAC7B,GAAItM,GAAO5B,EAAQkO,EAAIpB,cAAelK,IAASusB,SAAUjhB,EAAI2Q,MAE5DgR,EAAU7vB,EAAO4hB,IAAKhgB,EAAM,GAAK,UAMlC,OAFAA,GAAKsc,SAEE2R,EAOR,QAASC,IAAgB/qB,GACxB,GAAImJ,GAAMnP,EACT8wB,EAAUJ,GAAa1qB,EA2BxB,OAzBM8qB,KACLA,EAAUD,GAAe7qB,EAAUmJ,GAGlB,SAAZ2hB,GAAuBA,IAG3BL,IAAWA,IAAUxvB,EAAQ,mDAC3BmvB,SAAUjhB,EAAIJ,iBAGhBI,GAAQshB,GAAQ,GAAI/U,eAAiB+U,GAAQ,GAAIhV,iBAAkBzb,SAGnEmP,EAAI6hB,QACJ7hB,EAAI8hB,QAEJH,EAAUD,GAAe7qB,EAAUmJ,GACnCshB,GAAOtR,UAIRuR,GAAa1qB,GAAa8qB,GAGpBA,EAER,GAAII,IAAU,UAEVC,GAAY,GAAIpnB,QAAQ,KAAOwY,EAAO,kBAAmB,KAEzD6O,GAAO,SAAUvuB,EAAMiB,EAASnB,EAAUyE,GAC7C,GAAI7E,GAAKsB,EACRwtB,IAGD,KAAMxtB,IAAQC,GACbutB,EAAKxtB,GAAShB,EAAKmd,MAAOnc,GAC1BhB,EAAKmd,MAAOnc,GAASC,EAASD,EAG/BtB,GAAMI,EAASI,MAAOF,EAAMuE,MAG5B,KAAMvD,IAAQC,GACbjB,EAAKmd,MAAOnc,GAASwtB,EAAKxtB,EAG3B,OAAOtB,IAIJwM,GAAkB/O,EAAS+O,iBAI/B,WACC,GAAIuiB,GAAkBC,EAAqBC,EAC1CC,EAA0BC,EAAwBC,EAClD5R,EAAY/f,EAAS+N,cAAe,OACpCD,EAAM9N,EAAS+N,cAAe,MAG/B,IAAMD,EAAIkS,MAAV,CAIAlS,EAAIkS,MAAMC,QAAU,wBAIpBlf,EAAQ6wB,QAAgC,QAAtB9jB,EAAIkS,MAAM4R,QAI5B7wB,EAAQ8wB,WAAa/jB,EAAIkS,MAAM6R,SAE/B/jB,EAAIkS,MAAM8R,eAAiB,cAC3BhkB,EAAI8W,WAAW,GAAO5E,MAAM8R,eAAiB,GAC7C/wB,EAAQgxB,gBAA+C,gBAA7BjkB,EAAIkS,MAAM8R,eAEpC/R,EAAY/f,EAAS+N,cAAe,OACpCgS,EAAUC,MAAMC,QAAU,4FAE1BnS,EAAIoC,UAAY,GAChB6P,EAAUtQ,YAAa3B,GAIvB/M,EAAQixB,UAAoC,KAAxBlkB,EAAIkS,MAAMgS,WAA+C,KAA3BlkB,EAAIkS,MAAMiS,cAC7B,KAA9BnkB,EAAIkS,MAAMkS,gBAEXjxB,EAAOwC,OAAQ1C,GACdoxB,sBAAuB,WAItB,MAHyB,OAApBb,GACJc,IAEMX,GAGRY,kBAAmB,WAOlB,MAHyB,OAApBf,GACJc,IAEMZ,GAGRc,iBAAkB,WAMjB,MAHyB,OAApBhB,GACJc,IAEMb,GAGRgB,cAAe,WAId,MAHyB,OAApBjB,GACJc,IAEMd,GAGRkB,oBAAqB,WAMpB,MAHyB,OAApBlB,GACJc,IAEMV,GAGRe,mBAAoB,WAMnB,MAHyB,OAApBnB,GACJc,IAEMT,IAIT,SAASS,KACR,GAAI5X,GAAUkY,EACb3jB,EAAkB/O,EAAS+O,eAG5BA,GAAgBU,YAAasQ,GAE7BjS,EAAIkS,MAAMC,QAIT,0IAODqR,EAAmBE,EAAuBG,GAAwB,EAClEJ,EAAsBG,GAAyB,EAG1CvxB,EAAOwyB,mBACXD,EAAWvyB,EAAOwyB,iBAAkB7kB,GACpCwjB,EAA8C,QAAzBoB,OAAiBrjB,IACtCsiB,EAA0D,SAAhCe,OAAiBE,WAC3CpB,EAAkE,SAAzCkB,IAAcpQ,MAAO,QAAUA,MAIxDxU,EAAIkS,MAAM6S,YAAc,MACxBtB,EAA6E,SAArDmB,IAAcG,YAAa,QAAUA,YAM7DrY,EAAW1M,EAAI2B,YAAazP,EAAS+N,cAAe,QAGpDyM,EAASwF,MAAMC,QAAUnS,EAAIkS,MAAMC,QAIlC,8HAEDzF,EAASwF,MAAM6S,YAAcrY,EAASwF,MAAMsC,MAAQ,IACpDxU,EAAIkS,MAAMsC,MAAQ,MAElBoP,GACEtsB,YAAcjF,EAAOwyB,iBAAkBnY,QAAmBqY,aAE5D/kB,EAAIE,YAAawM,IAWlB1M,EAAIkS,MAAM8Q,QAAU,OACpBW,EAA2D,IAAhC3jB,EAAIglB,iBAAiB9wB,OAC3CyvB,IACJ3jB,EAAIkS,MAAM8Q,QAAU,GACpBhjB,EAAIoC,UAAY,8CAChBpC,EAAIjC,WAAY,GAAImU,MAAM+S,eAAiB,WAC3CvY,EAAW1M,EAAInB,qBAAsB,MACrC6N,EAAU,GAAIwF,MAAMC,QAAU,2CAC9BwR,EAA0D,IAA/BjX,EAAU,GAAIwY,aACpCvB,IACJjX,EAAU,GAAIwF,MAAM8Q,QAAU,GAC9BtW,EAAU,GAAIwF,MAAM8Q,QAAU,OAC9BW,EAA0D,IAA/BjX,EAAU,GAAIwY,eAK3CjkB,EAAgBf,YAAa+R,OAM/B,IAAIkT,IAAWC,GACdC,GAAY,2BAERhzB,GAAOwyB,kBACXM,GAAY,SAAUpwB,GAKrB,GAAIuwB,GAAOvwB,EAAK0J,cAAc6C,WAM9B,OAJMgkB,IAASA,EAAKC,SACnBD,EAAOjzB,GAGDizB,EAAKT,iBAAkB9vB,IAG/BqwB,GAAS,SAAUrwB,EAAMgB,EAAMyvB,GAC9B,GAAIhR,GAAOiR,EAAUC,EAAUjxB,EAC9Byd,EAAQnd,EAAKmd,KA2Cd,OAzCAsT,GAAWA,GAAYL,GAAWpwB,GAGlCN,EAAM+wB,EAAWA,EAASG,iBAAkB5vB,IAAUyvB,EAAUzvB,GAASQ,OAK1D,KAAR9B,GAAsB8B,SAAR9B,GAAwBtB,EAAOyH,SAAU7F,EAAK0J,cAAe1J,KACjFN,EAAMtB,EAAO+e,MAAOnd,EAAMgB,IAGtByvB,IASEvyB,EAAQuxB,oBAAsBnB,GAAUrkB,KAAMvK,IAAS2uB,GAAQpkB,KAAMjJ,KAG1Eye,EAAQtC,EAAMsC,MACdiR,EAAWvT,EAAMuT,SACjBC,EAAWxT,EAAMwT,SAGjBxT,EAAMuT,SAAWvT,EAAMwT,SAAWxT,EAAMsC,MAAQ/f,EAChDA,EAAM+wB,EAAShR,MAGftC,EAAMsC,MAAQA,EACdtC,EAAMuT,SAAWA,EACjBvT,EAAMwT,SAAWA,GAMJnvB,SAAR9B,EACNA,EACAA,EAAM,KAEGwM,GAAgB2kB,eAC3BT,GAAY,SAAUpwB,GACrB,MAAOA,GAAK6wB,cAGbR,GAAS,SAAUrwB,EAAMgB,EAAMyvB,GAC9B,GAAIK,GAAMC,EAAIC,EAAQtxB,EACrByd,EAAQnd,EAAKmd,KA2Cd,OAzCAsT,GAAWA,GAAYL,GAAWpwB,GAClCN,EAAM+wB,EAAWA,EAAUzvB,GAASQ,OAIxB,MAAP9B,GAAeyd,GAASA,EAAOnc,KACnCtB,EAAMyd,EAAOnc,IAYTstB,GAAUrkB,KAAMvK,KAAU4wB,GAAUrmB,KAAMjJ,KAG9C8vB,EAAO3T,EAAM2T,KACbC,EAAK/wB,EAAKixB,aACVD,EAASD,GAAMA,EAAGD,KAGbE,IACJD,EAAGD,KAAO9wB,EAAK6wB,aAAaC,MAE7B3T,EAAM2T,KAAgB,aAAT9vB,EAAsB,MAAQtB,EAC3CA,EAAMyd,EAAM+T,UAAY,KAGxB/T,EAAM2T,KAAOA,EACRE,IACJD,EAAGD,KAAOE,IAMGxvB,SAAR9B,EACNA,EACAA,EAAM,IAAM,QAOf,SAASyxB,IAAcC,EAAaC,GAGnC,OACC/xB,IAAK,WACJ,MAAK8xB,gBAIG7zB,MAAK+B,KAKJ/B,KAAK+B,IAAM+xB,GAASnxB,MAAO3C,KAAM4C,aAM7C,GAEEmxB,IAAS,kBACVC,GAAW,yBAMXC,GAAe,4BACfC,GAAY,GAAIvqB,QAAQ,KAAOwY,EAAO,SAAU,KAEhDgS,IAAYC,SAAU,WAAYC,WAAY,SAAU3D,QAAS,SACjE4D,IACCC,cAAe,IACfC,WAAY,OAGbC,IAAgB,SAAU,IAAK,MAAO,MACtCC,GAAa90B,EAAS+N,cAAe,OAAQiS,KAI9C,SAAS+U,IAAgBlxB,GAGxB,GAAKA,IAAQixB,IACZ,MAAOjxB,EAIR,IAAImxB,GAAUnxB,EAAKqW,OAAQ,GAAItY,cAAgBiC,EAAKtD,MAAO,GAC1DuC,EAAI+xB,GAAY7yB,MAEjB,OAAQc,IAEP,GADAe,EAAOgxB,GAAa/xB,GAAMkyB,EACrBnxB,IAAQixB,IACZ,MAAOjxB,GAKV,QAASoxB,IAAU7jB,EAAU8jB,GAM5B,IALA,GAAIpE,GAASjuB,EAAMsyB,EAClB7W,KACAvD,EAAQ,EACR/Y,EAASoP,EAASpP,OAEHA,EAAR+Y,EAAgBA,IACvBlY,EAAOuO,EAAU2J,GACXlY,EAAKmd,QAIX1B,EAAQvD,GAAU9Z,EAAOwgB,MAAO5e,EAAM,cACtCiuB,EAAUjuB,EAAKmd,MAAM8Q,QAChBoE,GAIE5W,EAAQvD,IAAuB,SAAZ+V,IACxBjuB,EAAKmd,MAAM8Q,QAAU,IAMM,KAAvBjuB,EAAKmd,MAAM8Q,SAAkBnO,EAAU9f,KAC3Cyb,EAAQvD,GACP9Z,EAAOwgB,MAAO5e,EAAM,aAAckuB,GAAgBluB,EAAKmD,cAGzDmvB,EAASxS,EAAU9f,IAEdiuB,GAAuB,SAAZA,IAAuBqE,IACtCl0B,EAAOwgB,MACN5e,EACA,aACAsyB,EAASrE,EAAU7vB,EAAO4hB,IAAKhgB,EAAM,aAQzC,KAAMkY,EAAQ,EAAW/Y,EAAR+Y,EAAgBA,IAChClY,EAAOuO,EAAU2J,GACXlY,EAAKmd,QAGLkV,GAA+B,SAAvBryB,EAAKmd,MAAM8Q,SAA6C,KAAvBjuB,EAAKmd,MAAM8Q,UACzDjuB,EAAKmd,MAAM8Q,QAAUoE,EAAO5W,EAAQvD,IAAW,GAAK,QAItD,OAAO3J,GAGR,QAASgkB,IAAmBvyB,EAAMoE,EAAOouB,GACxC,GAAIvuB,GAAUwtB,GAAU9nB,KAAMvF,EAC9B,OAAOH,GAGNvC,KAAKkC,IAAK,EAAGK,EAAS,IAAQuuB,GAAY,KAAUvuB,EAAS,IAAO,MACpEG,EAGF,QAASquB,IAAsBzyB,EAAMgB,EAAM0xB,EAAOC,EAAaC,GAW9D,IAVA,GAAI3yB,GAAIyyB,KAAYC,EAAc,SAAW,WAG5C,EAGS,UAAT3xB,EAAmB,EAAI,EAEvByN,EAAM,EAEK,EAAJxO,EAAOA,GAAK,EAGJ,WAAVyyB,IACJjkB,GAAOrQ,EAAO4hB,IAAKhgB,EAAM0yB,EAAQ7S,EAAW5f,IAAK,EAAM2yB,IAGnDD,GAGW,YAAVD,IACJjkB,GAAOrQ,EAAO4hB,IAAKhgB,EAAM,UAAY6f,EAAW5f,IAAK,EAAM2yB,IAI7C,WAAVF,IACJjkB,GAAOrQ,EAAO4hB,IAAKhgB,EAAM,SAAW6f,EAAW5f,GAAM,SAAS,EAAM2yB,MAKrEnkB,GAAOrQ,EAAO4hB,IAAKhgB,EAAM,UAAY6f,EAAW5f,IAAK,EAAM2yB,GAG5C,YAAVF,IACJjkB,GAAOrQ,EAAO4hB,IAAKhgB,EAAM,SAAW6f,EAAW5f,GAAM,SAAS,EAAM2yB,IAKvE,OAAOnkB,GAGR,QAASokB,IAAkB7yB,EAAMgB,EAAM0xB,GAGtC,GAAII,IAAmB,EACtBrkB,EAAe,UAATzN,EAAmBhB,EAAKsd,YAActd,EAAKmwB,aACjDyC,EAASxC,GAAWpwB,GACpB2yB,EAAcz0B,EAAQixB,WAC8B,eAAnD/wB,EAAO4hB,IAAKhgB,EAAM,aAAa,EAAO4yB,EAKxC,IAAY,GAAPnkB,GAAmB,MAAPA,EAAc,CAS9B,GANAA,EAAM4hB,GAAQrwB,EAAMgB,EAAM4xB,IACf,EAANnkB,GAAkB,MAAPA,KACfA,EAAMzO,EAAKmd,MAAOnc,IAIdstB,GAAUrkB,KAAMwE,GACpB,MAAOA,EAKRqkB,GAAmBH,IAChBz0B,EAAQsxB,qBAAuB/gB,IAAQzO,EAAKmd,MAAOnc,IAGtDyN,EAAMlM,WAAYkM,IAAS,EAI5B,MAASA,GACRgkB,GACCzyB,EACAgB,EACA0xB,IAAWC,EAAc,SAAW,WACpCG,EACAF,GAEE,KAGLx0B,EAAOwC,QAINmyB,UACChE,SACCzvB,IAAK,SAAUU,EAAMywB,GACpB,GAAKA,EAAW,CAGf,GAAI/wB,GAAM2wB,GAAQrwB,EAAM,UACxB,OAAe,KAARN,EAAa,IAAMA,MAO9BihB,WACCqS,yBAA2B,EAC3BC,aAAe,EACfC,aAAe,EACfC,UAAY,EACZC,YAAc,EACdrB,YAAc,EACdsB,YAAc,EACdtE,SAAW,EACXuE,OAAS,EACTC,SAAW,EACXC,QAAU,EACVC,QAAU,EACVpW,MAAQ,GAKTqW,UAGCC,QAASz1B,EAAQ8wB,SAAW,WAAa,cAI1C7R,MAAO,SAAUnd,EAAMgB,EAAMoD,EAAOsuB,GAGnC,GAAM1yB,GAA0B,IAAlBA,EAAK0C,UAAoC,IAAlB1C,EAAK0C,UAAmB1C,EAAKmd,MAAlE,CAKA,GAAIzd,GAAKwC,EAAM8c,EACd4U,EAAWx1B,EAAO6E,UAAWjC,GAC7Bmc,EAAQnd,EAAKmd,KAUd,IARAnc,EAAO5C,EAAOs1B,SAAUE,KACrBx1B,EAAOs1B,SAAUE,GAAa1B,GAAgB0B,IAAcA,GAI/D5U,EAAQ5gB,EAAO20B,SAAU/xB,IAAU5C,EAAO20B,SAAUa,GAGrCpyB,SAAV4C,EA0CJ,MAAK4a,IAAS,OAASA,IACwBxd,UAA5C9B,EAAMsf,EAAM1f,IAAKU,GAAM,EAAO0yB,IAEzBhzB,EAIDyd,EAAOnc,EArCd,IAXAkB,QAAckC,GAGA,WAATlC,IAAuBxC,EAAMkgB,EAAQjW,KAAMvF,KAAa1E,EAAK,KACjE0E,EAAQ6b,EAAWjgB,EAAMgB,EAAMtB,GAG/BwC,EAAO,UAIM,MAATkC,GAAiBA,IAAUA,IAKlB,WAATlC,IACJkC,GAAS1E,GAAOA,EAAK,KAAStB,EAAOuiB,UAAWiT,GAAa,GAAK,OAM7D11B,EAAQgxB,iBAA6B,KAAV9qB,GAAiD,IAAjCpD,EAAKnD,QAAS,gBAC9Dsf,EAAOnc,GAAS,aAIXge,GAAY,OAASA,IACsBxd,UAA9C4C,EAAQ4a,EAAM6U,IAAK7zB,EAAMoE,EAAOsuB,MAIlC,IACCvV,EAAOnc,GAASoD,EACf,MAAQzB,OAiBbqd,IAAK,SAAUhgB,EAAMgB,EAAM0xB,EAAOE,GACjC,GAAIrzB,GAAKkP,EAAKuQ,EACb4U,EAAWx1B,EAAO6E,UAAWjC,EA0B9B,OAvBAA,GAAO5C,EAAOs1B,SAAUE,KACrBx1B,EAAOs1B,SAAUE,GAAa1B,GAAgB0B,IAAcA,GAI/D5U,EAAQ5gB,EAAO20B,SAAU/xB,IAAU5C,EAAO20B,SAAUa,GAG/C5U,GAAS,OAASA,KACtBvQ,EAAMuQ,EAAM1f,IAAKU,GAAM,EAAM0yB,IAIjBlxB,SAARiN,IACJA,EAAM4hB,GAAQrwB,EAAMgB,EAAM4xB,IAId,WAARnkB,GAAoBzN,IAAQ6wB,MAChCpjB,EAAMojB,GAAoB7wB,IAIZ,KAAV0xB,GAAgBA,GACpBnzB,EAAMgD,WAAYkM,GACXikB,KAAU,GAAQoB,SAAUv0B,GAAQA,GAAO,EAAIkP,GAEhDA,KAITrQ,EAAOyB,MAAQ,SAAU,SAAW,SAAUI,EAAGe,GAChD5C,EAAO20B,SAAU/xB,IAChB1B,IAAK,SAAUU,EAAMywB,EAAUiC,GAC9B,MAAKjC,GAIGe,GAAavnB,KAAM7L,EAAO4hB,IAAKhgB,EAAM,aACtB,IAArBA,EAAKsd,YACJiR,GAAMvuB,EAAM0xB,GAAS,WACpB,MAAOmB,IAAkB7yB,EAAMgB,EAAM0xB,KAEtCG,GAAkB7yB,EAAMgB,EAAM0xB,GATjC,QAaDmB,IAAK,SAAU7zB,EAAMoE,EAAOsuB,GAC3B,GAAIE,GAASF,GAAStC,GAAWpwB,EACjC,OAAOuyB,IAAmBvyB,EAAMoE,EAAOsuB,EACtCD,GACCzyB,EACAgB,EACA0xB,EACAx0B,EAAQixB,WAC4C,eAAnD/wB,EAAO4hB,IAAKhgB,EAAM,aAAa,EAAO4yB,GACvCA,GACG,OAMF10B,EAAQ6wB,UACb3wB,EAAO20B,SAAShE,SACfzvB,IAAK,SAAUU,EAAMywB,GAGpB,MAAOc,IAAStnB,MAAQwmB,GAAYzwB,EAAK6wB,aACxC7wB,EAAK6wB,aAAa5jB,OAClBjN,EAAKmd,MAAMlQ,SAAY,IACpB,IAAO1K,WAAY2E,OAAO6sB,IAAS,GACrCtD,EAAW,IAAM,IAGpBoD,IAAK,SAAU7zB,EAAMoE,GACpB,GAAI+Y,GAAQnd,EAAKmd,MAChB0T,EAAe7wB,EAAK6wB,aACpB9B,EAAU3wB,EAAOiE,UAAW+B,GAAU,iBAA2B,IAARA,EAAc,IAAM,GAC7E6I,EAAS4jB,GAAgBA,EAAa5jB,QAAUkQ,EAAMlQ,QAAU,EAIjEkQ,GAAME,KAAO,GAKNjZ,GAAS,GAAe,KAAVA,IAC6B,KAAhDhG,EAAO2E,KAAMkK,EAAOrL,QAAS0vB,GAAQ,MACrCnU,EAAMzS,kBAKPyS,EAAMzS,gBAAiB,UAIR,KAAVtG,GAAgBysB,IAAiBA,EAAa5jB,UAMpDkQ,EAAMlQ,OAASqkB,GAAOrnB,KAAMgD,GAC3BA,EAAOrL,QAAS0vB,GAAQvC,GACxB9hB,EAAS,IAAM8hB,MAKnB3wB,EAAO20B,SAAS/C,YAAcmB,GAAcjzB,EAAQyxB,oBACnD,SAAU3vB,EAAMywB,GACf,MAAKA,GACGlC,GAAMvuB,GAAQiuB,QAAW,gBAC/BoC,IAAUrwB,EAAM,gBAFlB,SAOF5B,EAAO20B,SAAShD,WAAaoB,GAAcjzB,EAAQ0xB,mBAClD,SAAU5vB,EAAMywB,GACf,MAAKA,IAEHluB,WAAY8tB,GAAQrwB,EAAM,iBAMxB5B,EAAOyH,SAAU7F,EAAK0J,cAAe1J,GACtCA,EAAKg0B,wBAAwBlD,KAC5BvC,GAAMvuB;AAAQ+vB,WAAY,GAAK,WAC9B,MAAO/vB,GAAKg0B,wBAAwBlD,OAEtC,IAEE,KAfL,SAqBF1yB,EAAOyB,MACNo0B,OAAQ,GACRC,QAAS,GACTC,OAAQ,SACN,SAAUC,EAAQC,GACpBj2B,EAAO20B,SAAUqB,EAASC,IACzBC,OAAQ,SAAUlwB,GAOjB,IANA,GAAInE,GAAI,EACPs0B,KAGAC,EAAyB,gBAAVpwB,GAAqBA,EAAMS,MAAO,MAAUT,GAEhD,EAAJnE,EAAOA,IACds0B,EAAUH,EAASvU,EAAW5f,GAAMo0B,GACnCG,EAAOv0B,IAAOu0B,EAAOv0B,EAAI,IAAOu0B,EAAO,EAGzC,OAAOD,KAIHlG,GAAQpkB,KAAMmqB,KACnBh2B,EAAO20B,SAAUqB,EAASC,GAASR,IAAMtB,MAI3Cn0B,EAAOG,GAAGqC,QACTof,IAAK,SAAUhf,EAAMoD,GACpB,MAAOyc,GAAQtjB,KAAM,SAAUyC,EAAMgB,EAAMoD,GAC1C,GAAIwuB,GAAQryB,EACXR,KACAE,EAAI,CAEL,IAAK7B,EAAOmD,QAASP,GAAS,CAI7B,IAHA4xB,EAASxC,GAAWpwB,GACpBO,EAAMS,EAAK7B,OAECoB,EAAJN,EAASA,IAChBF,EAAKiB,EAAMf,IAAQ7B,EAAO4hB,IAAKhgB,EAAMgB,EAAMf,IAAK,EAAO2yB,EAGxD,OAAO7yB,GAGR,MAAiByB,UAAV4C,EACNhG,EAAO+e,MAAOnd,EAAMgB,EAAMoD,GAC1BhG,EAAO4hB,IAAKhgB,EAAMgB,IACjBA,EAAMoD,EAAOjE,UAAUhB,OAAS,IAEpCkzB,KAAM,WACL,MAAOD,IAAU70B,MAAM,IAExBk3B,KAAM,WACL,MAAOrC,IAAU70B,OAElBm3B,OAAQ,SAAUta,GACjB,MAAsB,iBAAVA,GACJA,EAAQ7c,KAAK80B,OAAS90B,KAAKk3B,OAG5Bl3B,KAAKsC,KAAM,WACZigB,EAAUviB,MACda,EAAQb,MAAO80B,OAEfj0B,EAAQb,MAAOk3B,WAOnB,SAASE,IAAO30B,EAAMiB,EAASif,EAAMzf,EAAKm0B,GACzC,MAAO,IAAID,IAAM31B,UAAUR,KAAMwB,EAAMiB,EAASif,EAAMzf,EAAKm0B,GAE5Dx2B,EAAOu2B,MAAQA,GAEfA,GAAM31B,WACLE,YAAay1B,GACbn2B,KAAM,SAAUwB,EAAMiB,EAASif,EAAMzf,EAAKm0B,EAAQlU,GACjDnjB,KAAKyC,KAAOA,EACZzC,KAAK2iB,KAAOA,EACZ3iB,KAAKq3B,OAASA,GAAUx2B,EAAOw2B,OAAO9R,SACtCvlB,KAAK0D,QAAUA,EACf1D,KAAKmT,MAAQnT,KAAKkH,IAAMlH,KAAKkO,MAC7BlO,KAAKkD,IAAMA,EACXlD,KAAKmjB,KAAOA,IAAUtiB,EAAOuiB,UAAWT,GAAS,GAAK,OAEvDzU,IAAK,WACJ,GAAIuT,GAAQ2V,GAAME,UAAWt3B,KAAK2iB,KAElC,OAAOlB,IAASA,EAAM1f,IACrB0f,EAAM1f,IAAK/B,MACXo3B,GAAME,UAAU/R,SAASxjB,IAAK/B,OAEhCu3B,IAAK,SAAUC,GACd,GAAIC,GACHhW,EAAQ2V,GAAME,UAAWt3B,KAAK2iB,KAoB/B,OAlBK3iB,MAAK0D,QAAQg0B,SACjB13B,KAAK0a,IAAM+c,EAAQ52B,EAAOw2B,OAAQr3B,KAAKq3B,QACtCG,EAASx3B,KAAK0D,QAAQg0B,SAAWF,EAAS,EAAG,EAAGx3B,KAAK0D,QAAQg0B,UAG9D13B,KAAK0a,IAAM+c,EAAQD,EAEpBx3B,KAAKkH,KAAQlH,KAAKkD,IAAMlD,KAAKmT,OAAUskB,EAAQz3B,KAAKmT,MAE/CnT,KAAK0D,QAAQi0B,MACjB33B,KAAK0D,QAAQi0B,KAAK71B,KAAM9B,KAAKyC,KAAMzC,KAAKkH,IAAKlH,MAGzCyhB,GAASA,EAAM6U,IACnB7U,EAAM6U,IAAKt2B,MAEXo3B,GAAME,UAAU/R,SAAS+Q,IAAKt2B,MAExBA,OAITo3B,GAAM31B,UAAUR,KAAKQ,UAAY21B,GAAM31B,UAEvC21B,GAAME,WACL/R,UACCxjB,IAAK,SAAU8gB,GACd,GAAInQ,EAIJ,OAA6B,KAAxBmQ,EAAMpgB,KAAK0C,UACa,MAA5B0d,EAAMpgB,KAAMogB,EAAMF,OAAoD,MAAlCE,EAAMpgB,KAAKmd,MAAOiD,EAAMF,MACrDE,EAAMpgB,KAAMogB,EAAMF,OAO1BjQ,EAAS7R,EAAO4hB,IAAKI,EAAMpgB,KAAMogB,EAAMF,KAAM,IAGrCjQ,GAAqB,SAAXA,EAAwBA,EAAJ,IAEvC4jB,IAAK,SAAUzT,GAIThiB,EAAO+2B,GAAGD,KAAM9U,EAAMF,MAC1B9hB,EAAO+2B,GAAGD,KAAM9U,EAAMF,MAAQE,GACK,IAAxBA,EAAMpgB,KAAK0C,UACiC,MAArD0d,EAAMpgB,KAAKmd,MAAO/e,EAAOs1B,SAAUtT,EAAMF,SAC1C9hB,EAAO20B,SAAU3S,EAAMF,MAGxBE,EAAMpgB,KAAMogB,EAAMF,MAASE,EAAM3b,IAFjCrG,EAAO+e,MAAOiD,EAAMpgB,KAAMogB,EAAMF,KAAME,EAAM3b,IAAM2b,EAAMM,SAW5DiU,GAAME,UAAUvL,UAAYqL,GAAME,UAAU3L,YAC3C2K,IAAK,SAAUzT,GACTA,EAAMpgB,KAAK0C,UAAY0d,EAAMpgB,KAAKuK,aACtC6V,EAAMpgB,KAAMogB,EAAMF,MAASE,EAAM3b,OAKpCrG,EAAOw2B,QACNQ,OAAQ,SAAUC,GACjB,MAAOA,IAERC,MAAO,SAAUD,GAChB,MAAO,GAAM3zB,KAAK6zB,IAAKF,EAAI3zB,KAAK8zB,IAAO,GAExC1S,SAAU,SAGX1kB,EAAO+2B,GAAKR,GAAM31B,UAAUR,KAG5BJ,EAAO+2B,GAAGD,OAKV,IACCO,IAAOC,GACPC,GAAW,yBACXC,GAAO,aAGR,SAASC,MAIR,MAHAv4B,GAAOuf,WAAY,WAClB4Y,GAAQj0B,SAEAi0B,GAAQr3B,EAAOqG,MAIzB,QAASqxB,IAAO5zB,EAAM6zB,GACrB,GAAIpN,GACHtd,GAAU2qB,OAAQ9zB,GAClBjC,EAAI,CAKL,KADA81B,EAAeA,EAAe,EAAI,EACtB,EAAJ91B,EAAQA,GAAK,EAAI81B,EACxBpN,EAAQ9I,EAAW5f,GACnBoL,EAAO,SAAWsd,GAAUtd,EAAO,UAAYsd,GAAUzmB,CAO1D,OAJK6zB,KACJ1qB,EAAM0jB,QAAU1jB,EAAMoU,MAAQvd,GAGxBmJ,EAGR,QAAS4qB,IAAa7xB,EAAO8b,EAAMgW,GAKlC,IAJA,GAAI9V,GACHgM,GAAe+J,GAAUC,SAAUlW,QAAeviB,OAAQw4B,GAAUC,SAAU,MAC9Ele,EAAQ,EACR/Y,EAASitB,EAAWjtB,OACLA,EAAR+Y,EAAgBA,IACvB,GAAOkI,EAAQgM,EAAYlU,GAAQ7Y,KAAM62B,EAAWhW,EAAM9b,GAGzD,MAAOgc,GAKV,QAASiW,IAAkBr2B,EAAMuoB,EAAO+N,GAEvC,GAAIpW,GAAM9b,EAAOswB,EAAQtU,EAAOpB,EAAOuX,EAAStI,EAASuI,EACxDC,EAAOl5B,KACPktB,KACAtN,EAAQnd,EAAKmd,MACbmV,EAAStyB,EAAK0C,UAAYod,EAAU9f,GACpC02B,EAAWt4B,EAAOwgB,MAAO5e,EAAM,SAG1Bs2B,GAAK9c,QACVwF,EAAQ5gB,EAAO6gB,YAAajf,EAAM,MACX,MAAlBgf,EAAM2X,WACV3X,EAAM2X,SAAW,EACjBJ,EAAUvX,EAAM1M,MAAMoH,KACtBsF,EAAM1M,MAAMoH,KAAO,WACZsF,EAAM2X,UACXJ,MAIHvX,EAAM2X,WAENF,EAAKnc,OAAQ,WAIZmc,EAAKnc,OAAQ,WACZ0E,EAAM2X,WACAv4B,EAAOob,MAAOxZ,EAAM,MAAOb,QAChC6f,EAAM1M,MAAMoH,YAOO,IAAlB1Z,EAAK0C,WAAoB,UAAY6lB,IAAS,SAAWA,MAM7D+N,EAAKM,UAAazZ,EAAMyZ,SAAUzZ,EAAM0Z,UAAW1Z,EAAM2Z,WAIzD7I,EAAU7vB,EAAO4hB,IAAKhgB,EAAM,WAG5Bw2B,EAA2B,SAAZvI,EACd7vB,EAAOwgB,MAAO5e,EAAM,eAAkBkuB,GAAgBluB,EAAKmD,UAAa8qB,EAEnD,WAAjBuI,GAA6D,SAAhCp4B,EAAO4hB,IAAKhgB,EAAM,WAI7C9B,EAAQ8e,wBAA8D,WAApCkR,GAAgBluB,EAAKmD,UAG5Dga,EAAME,KAAO,EAFbF,EAAM8Q,QAAU,iBAOdqI,EAAKM,WACTzZ,EAAMyZ,SAAW,SACX14B,EAAQshB,oBACbiX,EAAKnc,OAAQ,WACZ6C,EAAMyZ,SAAWN,EAAKM,SAAU,GAChCzZ,EAAM0Z,UAAYP,EAAKM,SAAU,GACjCzZ,EAAM2Z,UAAYR,EAAKM,SAAU,KAMpC,KAAM1W,IAAQqI,GAEb,GADAnkB,EAAQmkB,EAAOrI,GACVyV,GAAShsB,KAAMvF,GAAU,CAG7B,SAFOmkB,GAAOrI,GACdwU,EAASA,GAAoB,WAAVtwB,EACdA,KAAYkuB,EAAS,OAAS,QAAW,CAI7C,GAAe,SAAVluB,IAAoBsyB,GAAiCl1B,SAArBk1B,EAAUxW,GAG9C,QAFAoS,IAAS,EAKX7H,EAAMvK,GAASwW,GAAYA,EAAUxW,IAAU9hB,EAAO+e,MAAOnd,EAAMkgB,OAInE+N,GAAUzsB,MAIZ,IAAMpD,EAAOoE,cAAeioB,GAwCuD,YAAzD,SAAZwD,EAAqBC,GAAgBluB,EAAKmD,UAAa8qB,KACpE9Q,EAAM8Q,QAAUA,OAzCoB,CAC/ByI,EACC,UAAYA,KAChBpE,EAASoE,EAASpE,QAGnBoE,EAAWt4B,EAAOwgB,MAAO5e,EAAM,aAI3B00B,IACJgC,EAASpE,QAAUA,GAEfA,EACJl0B,EAAQ4B,GAAOqyB,OAEfoE,EAAKzwB,KAAM,WACV5H,EAAQ4B,GAAOy0B,SAGjBgC,EAAKzwB,KAAM,WACV,GAAIka,EACJ9hB,GAAOygB,YAAa7e,EAAM,SAC1B,KAAMkgB,IAAQuK,GACbrsB,EAAO+e,MAAOnd,EAAMkgB,EAAMuK,EAAMvK,KAGlC,KAAMA,IAAQuK,GACbrK,EAAQ6V,GAAa3D,EAASoE,EAAUxW,GAAS,EAAGA,EAAMuW,GAElDvW,IAAQwW,KACfA,EAAUxW,GAASE,EAAM1P,MACpB4hB,IACJlS,EAAM3f,IAAM2f,EAAM1P,MAClB0P,EAAM1P,MAAiB,UAATwP,GAA6B,WAATA,EAAoB,EAAI,KAW/D,QAAS6W,IAAYxO,EAAOyO,GAC3B,GAAI9e,GAAOlX,EAAM4zB,EAAQxwB,EAAO4a,CAGhC,KAAM9G,IAASqQ,GAed,GAdAvnB,EAAO5C,EAAO6E,UAAWiV,GACzB0c,EAASoC,EAAeh2B,GACxBoD,EAAQmkB,EAAOrQ,GACV9Z,EAAOmD,QAAS6C,KACpBwwB,EAASxwB,EAAO,GAChBA,EAAQmkB,EAAOrQ,GAAU9T,EAAO,IAG5B8T,IAAUlX,IACdunB,EAAOvnB,GAASoD,QACTmkB,GAAOrQ,IAGf8G,EAAQ5gB,EAAO20B,SAAU/xB,GACpBge,GAAS,UAAYA,GAAQ,CACjC5a,EAAQ4a,EAAMsV,OAAQlwB,SACfmkB,GAAOvnB,EAId,KAAMkX,IAAS9T,GACN8T,IAASqQ,KAChBA,EAAOrQ,GAAU9T,EAAO8T,GACxB8e,EAAe9e,GAAU0c,OAI3BoC,GAAeh2B,GAAS4zB,EAK3B,QAASuB,IAAWn2B,EAAMi3B,EAAYh2B,GACrC,GAAIgP,GACHinB,EACAhf,EAAQ,EACR/Y,EAASg3B,GAAUgB,WAAWh4B,OAC9Bob,EAAWnc,EAAO6b,WAAWK,OAAQ,iBAG7B8c,GAAKp3B,OAEbo3B,EAAO,WACN,GAAKF,EACJ,OAAO,CAYR,KAVA,GAAIG,GAAc5B,IAASI,KAC1Bta,EAAY7Z,KAAKkC,IAAK,EAAGsyB,EAAUoB,UAAYpB,EAAUjB,SAAWoC,GAIpEziB,EAAO2G,EAAY2a,EAAUjB,UAAY,EACzCF,EAAU,EAAIngB,EACdsD,EAAQ,EACR/Y,EAAS+2B,EAAUqB,OAAOp4B,OAEXA,EAAR+Y,EAAiBA,IACxBge,EAAUqB,OAAQrf,GAAQ4c,IAAKC,EAKhC,OAFAxa,GAASoB,WAAY3b,GAAQk2B,EAAWnB,EAASxZ,IAElC,EAAVwZ,GAAe51B,EACZoc,GAEPhB,EAASqB,YAAa5b,GAAQk2B,KACvB,IAGTA,EAAY3b,EAASF,SACpBra,KAAMA,EACNuoB,MAAOnqB,EAAOwC,UAAYq2B,GAC1BX,KAAMl4B,EAAOwC,QAAQ,GACpBo2B,iBACApC,OAAQx2B,EAAOw2B,OAAO9R,UACpB7hB,GACHu2B,mBAAoBP,EACpBQ,gBAAiBx2B,EACjBq2B,UAAW7B,IAASI,KACpBZ,SAAUh0B,EAAQg0B,SAClBsC,UACAtB,YAAa,SAAU/V,EAAMzf,GAC5B,GAAI2f,GAAQhiB,EAAOu2B,MAAO30B,EAAMk2B,EAAUI,KAAMpW,EAAMzf,EACpDy1B,EAAUI,KAAKU,cAAe9W,IAAUgW,EAAUI,KAAK1B,OAEzD,OADAsB,GAAUqB,OAAO35B,KAAMwiB,GAChBA,GAERlB,KAAM,SAAUwY,GACf,GAAIxf,GAAQ,EAIX/Y,EAASu4B,EAAUxB,EAAUqB,OAAOp4B,OAAS,CAC9C,IAAK+3B,EACJ,MAAO35B,KAGR,KADA25B,GAAU,EACM/3B,EAAR+Y,EAAiBA,IACxBge,EAAUqB,OAAQrf,GAAQ4c,IAAK,EAWhC,OANK4C,IACJnd,EAASoB,WAAY3b,GAAQk2B,EAAW,EAAG,IAC3C3b,EAASqB,YAAa5b,GAAQk2B,EAAWwB,KAEzCnd,EAASod,WAAY33B,GAAQk2B,EAAWwB,IAElCn6B,QAGTgrB,EAAQ2N,EAAU3N,KAInB,KAFAwO,GAAYxO,EAAO2N,EAAUI,KAAKU,eAElB73B,EAAR+Y,EAAiBA,IAExB,GADAjI,EAASkmB,GAAUgB,WAAYjf,GAAQ7Y,KAAM62B,EAAWl2B,EAAMuoB,EAAO2N,EAAUI,MAM9E,MAJKl4B,GAAOiD,WAAY4O,EAAOiP,QAC9B9gB,EAAO6gB,YAAaiX,EAAUl2B,KAAMk2B,EAAUI,KAAK9c,OAAQ0F,KAC1D9gB,EAAOkG,MAAO2L,EAAOiP,KAAMjP,IAEtBA,CAmBT,OAfA7R,GAAO2B,IAAKwoB,EAAO0N,GAAaC,GAE3B93B,EAAOiD,WAAY60B,EAAUI,KAAK5lB,QACtCwlB,EAAUI,KAAK5lB,MAAMrR,KAAMW,EAAMk2B,GAGlC93B,EAAO+2B,GAAGyC,MACTx5B,EAAOwC,OAAQw2B,GACdp3B,KAAMA,EACNy2B,KAAMP,EACN1c,MAAO0c,EAAUI,KAAK9c,SAKjB0c,EAAUpb,SAAUob,EAAUI,KAAKxb,UACxC9U,KAAMkwB,EAAUI,KAAKtwB,KAAMkwB,EAAUI,KAAKuB,UAC1Crd,KAAM0b,EAAUI,KAAK9b,MACrBF,OAAQ4b,EAAUI,KAAKhc,QAG1Blc,EAAO+3B,UAAY/3B,EAAOwC,OAAQu1B,IAEjCC,UACC0B,KAAO,SAAU5X,EAAM9b,GACtB,GAAIgc,GAAQ7iB,KAAK04B,YAAa/V,EAAM9b,EAEpC,OADA6b,GAAWG,EAAMpgB,KAAMkgB,EAAMN,EAAQjW,KAAMvF,GAASgc,GAC7CA,KAIT2X,QAAS,SAAUxP,EAAOzoB,GACpB1B,EAAOiD,WAAYknB,IACvBzoB,EAAWyoB,EACXA,GAAU,MAEVA,EAAQA,EAAMjf,MAAOyP,EAOtB,KAJA,GAAImH,GACHhI,EAAQ,EACR/Y,EAASopB,EAAMppB,OAEAA,EAAR+Y,EAAiBA,IACxBgI,EAAOqI,EAAOrQ,GACdie,GAAUC,SAAUlW,GAASiW,GAAUC,SAAUlW,OACjDiW,GAAUC,SAAUlW,GAAO7R,QAASvO,IAItCq3B,YAAcd,IAEd2B,UAAW,SAAUl4B,EAAUmtB,GACzBA,EACJkJ,GAAUgB,WAAW9oB,QAASvO,GAE9Bq2B,GAAUgB,WAAWv5B,KAAMkC,MAK9B1B,EAAO65B,MAAQ,SAAUA,EAAOrD,EAAQr2B,GACvC,GAAI25B,GAAMD,GAA0B,gBAAVA,GAAqB75B,EAAOwC,UAAYq3B,IACjEJ,SAAUt5B,IAAOA,GAAMq2B,GACtBx2B,EAAOiD,WAAY42B,IAAWA,EAC/BhD,SAAUgD,EACVrD,OAAQr2B,GAAMq2B,GAAUA,IAAWx2B,EAAOiD,WAAYuzB,IAAYA,EAyBnE,OAtBAsD,GAAIjD,SAAW72B,EAAO+2B,GAAG9Y,IAAM,EAA4B,gBAAjB6b,GAAIjD,SAAwBiD,EAAIjD,SACzEiD,EAAIjD,WAAY72B,GAAO+2B,GAAGgD,OACzB/5B,EAAO+2B,GAAGgD,OAAQD,EAAIjD,UAAa72B,EAAO+2B,GAAGgD,OAAOrV,SAGpC,MAAboV,EAAI1e,OAAiB0e,EAAI1e,SAAU,IACvC0e,EAAI1e,MAAQ,MAIb0e,EAAI1J,IAAM0J,EAAIL,SAEdK,EAAIL,SAAW,WACTz5B,EAAOiD,WAAY62B,EAAI1J,MAC3B0J,EAAI1J,IAAInvB,KAAM9B,MAGV26B,EAAI1e,OACRpb,EAAO0gB,QAASvhB,KAAM26B,EAAI1e,QAIrB0e,GAGR95B,EAAOG,GAAGqC,QACTw3B,OAAQ,SAAUH,EAAOI,EAAIzD,EAAQ90B,GAGpC,MAAOvC,MAAK0P,OAAQ6S,GAAWE,IAAK,UAAW,GAAIqS,OAGjD5xB,MAAM63B,SAAWvJ,QAASsJ,GAAMJ,EAAOrD,EAAQ90B,IAElDw4B,QAAS,SAAUpY,EAAM+X,EAAOrD,EAAQ90B,GACvC,GAAIwS,GAAQlU,EAAOoE,cAAe0d,GACjCqY,EAASn6B,EAAO65B,MAAOA,EAAOrD,EAAQ90B,GACtC04B,EAAc,WAGb,GAAI/B,GAAON,GAAW54B,KAAMa,EAAOwC,UAAYsf,GAAQqY,IAGlDjmB,GAASlU,EAAOwgB,MAAOrhB,KAAM,YACjCk5B,EAAKvX,MAAM,GAKd,OAFCsZ,GAAYC,OAASD,EAEflmB,GAASimB,EAAO/e,SAAU,EAChCjc,KAAKsC,KAAM24B,GACXj7B,KAAKic,MAAO+e,EAAO/e,MAAOgf,IAE5BtZ,KAAM,SAAUhd,EAAMkd,EAAYsY,GACjC,GAAIgB,GAAY,SAAU1Z,GACzB,GAAIE,GAAOF,EAAME,WACVF,GAAME,KACbA,EAAMwY,GAYP,OATqB,gBAATx1B,KACXw1B,EAAUtY,EACVA,EAAald,EACbA,EAAOV,QAEH4d,GAAcld,KAAS,GAC3B3E,KAAKic,MAAOtX,GAAQ,SAGd3E,KAAKsC,KAAM,WACjB,GAAIif,IAAU,EACb5G,EAAgB,MAARhW,GAAgBA,EAAO,aAC/By2B,EAASv6B,EAAOu6B,OAChB71B,EAAO1E,EAAOwgB,MAAOrhB,KAEtB,IAAK2a,EACCpV,EAAMoV,IAAWpV,EAAMoV,GAAQgH,MACnCwZ,EAAW51B,EAAMoV,QAGlB,KAAMA,IAASpV,GACTA,EAAMoV,IAAWpV,EAAMoV,GAAQgH,MAAQ0W,GAAK3rB,KAAMiO,IACtDwgB,EAAW51B,EAAMoV,GAKpB,KAAMA,EAAQygB,EAAOx5B,OAAQ+Y,KACvBygB,EAAQzgB,GAAQlY,OAASzC,MACnB,MAAR2E,GAAgBy2B,EAAQzgB,GAAQsB,QAAUtX,IAE5Cy2B,EAAQzgB,GAAQue,KAAKvX,KAAMwY,GAC3B5Y,GAAU,EACV6Z,EAAOh4B,OAAQuX,EAAO,KAOnB4G,GAAY4Y,GAChBt5B,EAAO0gB,QAASvhB,KAAM2E,MAIzBu2B,OAAQ,SAAUv2B,GAIjB,MAHKA,MAAS,IACbA,EAAOA,GAAQ,MAET3E,KAAKsC,KAAM,WACjB,GAAIqY,GACHpV,EAAO1E,EAAOwgB,MAAOrhB,MACrBic,EAAQ1W,EAAMZ,EAAO,SACrB8c,EAAQlc,EAAMZ,EAAO,cACrBy2B,EAASv6B,EAAOu6B,OAChBx5B,EAASqa,EAAQA,EAAMra,OAAS,CAajC,KAVA2D,EAAK21B,QAAS,EAGdr6B,EAAOob,MAAOjc,KAAM2E,MAEf8c,GAASA,EAAME,MACnBF,EAAME,KAAK7f,KAAM9B,MAAM,GAIlB2a,EAAQygB,EAAOx5B,OAAQ+Y,KACvBygB,EAAQzgB,GAAQlY,OAASzC,MAAQo7B,EAAQzgB,GAAQsB,QAAUtX,IAC/Dy2B,EAAQzgB,GAAQue,KAAKvX,MAAM,GAC3ByZ,EAAOh4B,OAAQuX,EAAO,GAKxB,KAAMA,EAAQ,EAAW/Y,EAAR+Y,EAAgBA,IAC3BsB,EAAOtB,IAAWsB,EAAOtB,GAAQugB,QACrCjf,EAAOtB,GAAQugB,OAAOp5B,KAAM9B,YAKvBuF,GAAK21B,YAKfr6B,EAAOyB,MAAQ,SAAU,OAAQ,QAAU,SAAUI,EAAGe,GACvD,GAAI43B,GAAQx6B,EAAOG,GAAIyC,EACvB5C,GAAOG,GAAIyC,GAAS,SAAUi3B,EAAOrD,EAAQ90B,GAC5C,MAAgB,OAATm4B,GAAkC,iBAAVA,GAC9BW,EAAM14B,MAAO3C,KAAM4C,WACnB5C,KAAK+6B,QAASxC,GAAO90B,GAAM,GAAQi3B,EAAOrD,EAAQ90B,MAKrD1B,EAAOyB,MACNg5B,UAAW/C,GAAO,QAClBgD,QAAShD,GAAO,QAChBiD,YAAajD,GAAO,UACpBkD,QAAUjK,QAAS,QACnBkK,SAAWlK,QAAS,QACpBmK,YAAcnK,QAAS,WACrB,SAAU/tB,EAAMunB,GAClBnqB,EAAOG,GAAIyC,GAAS,SAAUi3B,EAAOrD,EAAQ90B,GAC5C,MAAOvC,MAAK+6B,QAAS/P,EAAO0P,EAAOrD,EAAQ90B,MAI7C1B,EAAOu6B,UACPv6B,EAAO+2B,GAAGiC,KAAO,WAChB,GAAIQ,GACHe,EAASv6B,EAAOu6B,OAChB14B,EAAI,CAIL,KAFAw1B,GAAQr3B,EAAOqG,MAEPxE,EAAI04B,EAAOx5B,OAAQc,IAC1B23B,EAAQe,EAAQ14B,GAGV23B,KAAWe,EAAQ14B,KAAQ23B,GAChCe,EAAOh4B,OAAQV,IAAK,EAIhB04B,GAAOx5B,QACZf,EAAO+2B,GAAGjW,OAEXuW,GAAQj0B,QAGTpD,EAAO+2B,GAAGyC,MAAQ,SAAUA,GAC3Bx5B,EAAOu6B,OAAO/6B,KAAMg6B,GACfA,IACJx5B,EAAO+2B,GAAGzkB,QAEVtS,EAAOu6B,OAAOlyB,OAIhBrI,EAAO+2B,GAAGgE,SAAW,GAErB/6B,EAAO+2B,GAAGzkB,MAAQ,WACXglB,KACLA,GAAUp4B,EAAO87B,YAAah7B,EAAO+2B,GAAGiC,KAAMh5B,EAAO+2B,GAAGgE,YAI1D/6B,EAAO+2B,GAAGjW,KAAO,WAChB5hB,EAAO+7B,cAAe3D,IACtBA,GAAU,MAGXt3B,EAAO+2B,GAAGgD,QACTmB,KAAM,IACNC,KAAM,IAGNzW,SAAU,KAMX1kB,EAAOG,GAAGi7B,MAAQ,SAAUC,EAAMv3B,GAIjC,MAHAu3B,GAAOr7B,EAAO+2B,GAAK/2B,EAAO+2B,GAAGgD,OAAQsB,IAAUA,EAAOA,EACtDv3B,EAAOA,GAAQ,KAER3E,KAAKic,MAAOtX,EAAM,SAAU0V,EAAMoH,GACxC,GAAI0a,GAAUp8B,EAAOuf,WAAYjF,EAAM6hB,EACvCza,GAAME,KAAO,WACZ5hB,EAAOq8B,aAAcD,OAMxB,WACC,GAAIpzB,GACHgH,EAAQnQ,EAAS+N,cAAe,SAChCD,EAAM9N,EAAS+N,cAAe,OAC9B9F,EAASjI,EAAS+N,cAAe,UACjCgtB,EAAM9yB,EAAOwH,YAAazP,EAAS+N,cAAe,UAGnDD,GAAM9N,EAAS+N,cAAe,OAC9BD,EAAId,aAAc,YAAa,KAC/Bc,EAAIoC,UAAY,qEAChB/G,EAAI2E,EAAInB,qBAAsB,KAAO,GAIrCwD,EAAMnD,aAAc,OAAQ,YAC5Bc,EAAI2B,YAAaU,GAEjBhH,EAAI2E,EAAInB,qBAAsB,KAAO,GAGrCxD,EAAE6W,MAAMC,QAAU,UAIlBlf,EAAQ07B,gBAAoC,MAAlB3uB,EAAI0B,UAI9BzO,EAAQif,MAAQ,MAAMlT,KAAM3D,EAAE4D,aAAc,UAI5ChM,EAAQ27B,eAA8C,OAA7BvzB,EAAE4D,aAAc,QAGzChM,EAAQ47B,UAAYxsB,EAAMlJ,MAI1BlG,EAAQ67B,YAAc7B,EAAI9lB,SAG1BlU,EAAQ87B,UAAY78B,EAAS+N,cAAe,QAAS8uB,QAIrD50B,EAAO8M,UAAW,EAClBhU,EAAQ+7B,aAAe/B,EAAIhmB,SAI3B5E,EAAQnQ,EAAS+N,cAAe,SAChCoC,EAAMnD,aAAc,QAAS,IAC7BjM,EAAQoP,MAA0C,KAAlCA,EAAMpD,aAAc,SAGpCoD,EAAMlJ,MAAQ,IACdkJ,EAAMnD,aAAc,OAAQ,SAC5BjM,EAAQg8B,WAA6B,MAAhB5sB,EAAMlJ,QAI5B,IAAI+1B,IAAU,MACbC,GAAU,kBAEXh8B,GAAOG,GAAGqC,QACT6N,IAAK,SAAUrK,GACd,GAAI4a,GAAOtf,EAAK2B,EACfrB,EAAOzC,KAAM,EAEd,EAAA,GAAM4C,UAAUhB,OA6BhB,MAFAkC,GAAajD,EAAOiD,WAAY+C,GAEzB7G,KAAKsC,KAAM,SAAUI,GAC3B,GAAIwO,EAEmB,KAAlBlR,KAAKmF,WAKT+L,EADIpN,EACE+C,EAAM/E,KAAM9B,KAAM0C,EAAG7B,EAAQb,MAAOkR,OAEpCrK,EAIK,MAAPqK,EACJA,EAAM,GACoB,gBAARA,GAClBA,GAAO,GACIrQ,EAAOmD,QAASkN,KAC3BA,EAAMrQ,EAAO2B,IAAK0O,EAAK,SAAUrK,GAChC,MAAgB,OAATA,EAAgB,GAAKA,EAAQ,MAItC4a,EAAQ5gB,EAAOi8B,SAAU98B,KAAK2E,OAAU9D,EAAOi8B,SAAU98B,KAAK4F,SAASC,eAGjE4b,GAAY,OAASA,IAA+Cxd,SAApCwd,EAAM6U,IAAKt2B,KAAMkR,EAAK,WAC3DlR,KAAK6G,MAAQqK,KAxDd,IAAKzO,EAIJ,MAHAgf,GAAQ5gB,EAAOi8B,SAAUr6B,EAAKkC,OAC7B9D,EAAOi8B,SAAUr6B,EAAKmD,SAASC,eAG/B4b,GACA,OAASA,IACgCxd,UAAvC9B,EAAMsf,EAAM1f,IAAKU,EAAM,UAElBN,GAGRA,EAAMM,EAAKoE,MAEW,gBAAR1E,GAGbA,EAAIkC,QAASu4B,GAAS,IAGf,MAAPz6B,EAAc,GAAKA,OA0CxBtB,EAAOwC,QACNy5B,UACC/X,QACChjB,IAAK,SAAUU,GACd,GAAIyO,GAAMrQ,EAAO4O,KAAKwB,KAAMxO,EAAM,QAClC,OAAc,OAAPyO,EACNA,EAMArQ,EAAO2E,KAAM3E,EAAOkF,KAAMtD,IAAS4B,QAASw4B,GAAS,OAGxDh1B,QACC9F,IAAK,SAAUU,GAYd,IAXA,GAAIoE,GAAOke,EACVrhB,EAAUjB,EAAKiB,QACfiX,EAAQlY,EAAKqS,cACb8S,EAAoB,eAAdnlB,EAAKkC,MAAiC,EAARgW,EACpCuD,EAAS0J,EAAM,QACfvhB,EAAMuhB,EAAMjN,EAAQ,EAAIjX,EAAQ9B,OAChCc,EAAY,EAARiY,EACHtU,EACAuhB,EAAMjN,EAAQ,EAGJtU,EAAJ3D,EAASA,IAIhB,GAHAqiB,EAASrhB,EAAShB,IAGXqiB,EAAOlQ,UAAYnS,IAAMiY,KAG5Bha,EAAQ+7B,aACR3X,EAAOpQ,SAC8B,OAAtCoQ,EAAOpY,aAAc,gBACnBoY,EAAO/X,WAAW2H,WACnB9T,EAAO+E,SAAUmf,EAAO/X,WAAY,aAAiB,CAMxD,GAHAnG,EAAQhG,EAAQkkB,GAAS7T,MAGpB0W,EACJ,MAAO/gB,EAIRqX,GAAO7d,KAAMwG,GAIf,MAAOqX,IAGRoY,IAAK,SAAU7zB,EAAMoE,GACpB,GAAIk2B,GAAWhY,EACdrhB,EAAUjB,EAAKiB,QACfwa,EAASrd,EAAOmF,UAAWa,GAC3BnE,EAAIgB,EAAQ9B,MAEb,OAAQc,IAGP,GAFAqiB,EAASrhB,EAAShB,GAEb7B,EAAOuF,QAASvF,EAAOi8B,SAAS/X,OAAOhjB,IAAKgjB,GAAU7G,GAAW,GAMrE,IACC6G,EAAOlQ,SAAWkoB,GAAY,EAE7B,MAAQ7xB,GAGT6Z,EAAOiY,iBAIRjY,GAAOlQ,UAAW,CASpB,OAJMkoB,KACLt6B,EAAKqS,cAAgB,IAGfpR,OAOX7C,EAAOyB,MAAQ,QAAS,YAAc,WACrCzB,EAAOi8B,SAAU98B,OAChBs2B,IAAK,SAAU7zB,EAAMoE,GACpB,MAAKhG,GAAOmD,QAAS6C,GACXpE,EAAKmS,QAAU/T,EAAOuF,QAASvF,EAAQ4B,GAAOyO,MAAOrK,GAAU,GADzE,SAKIlG,EAAQ47B,UACb17B,EAAOi8B,SAAU98B,MAAO+B,IAAM,SAAUU,GACvC,MAAwC,QAAjCA,EAAKkK,aAAc,SAAqB,KAAOlK,EAAKoE,SAQ9D,IAAIo2B,IAAUC,GACblvB,GAAanN,EAAOkQ,KAAK/C,WACzBmvB,GAAc,0BACdd,GAAkB17B,EAAQ07B,gBAC1Be,GAAcz8B,EAAQoP,KAEvBlP,GAAOG,GAAGqC,QACT4N,KAAM,SAAUxN,EAAMoD,GACrB,MAAOyc,GAAQtjB,KAAMa,EAAOoQ,KAAMxN,EAAMoD,EAAOjE,UAAUhB,OAAS,IAGnEy7B,WAAY,SAAU55B,GACrB,MAAOzD,MAAKsC,KAAM,WACjBzB,EAAOw8B,WAAYr9B,KAAMyD,QAK5B5C,EAAOwC,QACN4N,KAAM,SAAUxO,EAAMgB,EAAMoD,GAC3B,GAAI1E,GAAKsf,EACR6b,EAAQ76B,EAAK0C,QAGd,IAAe,IAAVm4B,GAAyB,IAAVA,GAAyB,IAAVA,EAKnC,MAAkC,mBAAtB76B,GAAKkK,aACT9L,EAAO8hB,KAAMlgB,EAAMgB,EAAMoD,IAKlB,IAAVy2B,GAAgBz8B,EAAOoY,SAAUxW,KACrCgB,EAAOA,EAAKoC,cACZ4b,EAAQ5gB,EAAO08B,UAAW95B,KACvB5C,EAAOkQ,KAAKhF,MAAMvB,KAAKkC,KAAMjJ,GAASy5B,GAAWD,KAGtCh5B,SAAV4C,EACW,OAAVA,MACJhG,GAAOw8B,WAAY56B,EAAMgB,GAIrBge,GAAS,OAASA,IACuBxd,UAA3C9B,EAAMsf,EAAM6U,IAAK7zB,EAAMoE,EAAOpD,IACzBtB,GAGRM,EAAKmK,aAAcnJ,EAAMoD,EAAQ,IAC1BA,GAGH4a,GAAS,OAASA,IAA+C,QAApCtf,EAAMsf,EAAM1f,IAAKU,EAAMgB,IACjDtB,GAGRA,EAAMtB,EAAO4O,KAAKwB,KAAMxO,EAAMgB,GAGhB,MAAPtB,EAAc8B,OAAY9B,KAGlCo7B,WACC54B,MACC2xB,IAAK,SAAU7zB,EAAMoE,GACpB,IAAMlG,EAAQg8B,YAAwB,UAAV91B,GAC3BhG,EAAO+E,SAAUnD,EAAM,SAAY,CAInC,GAAIyO,GAAMzO,EAAKoE,KAKf,OAJApE,GAAKmK,aAAc,OAAQ/F,GACtBqK,IACJzO,EAAKoE,MAAQqK,GAEPrK,MAMXw2B,WAAY,SAAU56B,EAAMoE,GAC3B,GAAIpD,GAAM+5B,EACT96B,EAAI,EACJ+6B,EAAY52B,GAASA,EAAMkF,MAAOyP,EAEnC,IAAKiiB,GAA+B,IAAlBh7B,EAAK0C,SACtB,MAAU1B,EAAOg6B,EAAW/6B,KAC3B86B,EAAW38B,EAAO68B,QAASj6B,IAAUA,EAGhC5C,EAAOkQ,KAAKhF,MAAMvB,KAAKkC,KAAMjJ,GAG5B25B,IAAef,KAAoBc,GAAYzwB,KAAMjJ,GACzDhB,EAAM+6B,IAAa,EAKnB/6B,EAAM5B,EAAO6E,UAAW,WAAajC,IACpChB,EAAM+6B,IAAa,EAKrB38B,EAAOoQ,KAAMxO,EAAMgB,EAAM,IAG1BhB,EAAK0K,gBAAiBkvB,GAAkB54B,EAAO+5B,MAOnDN,IACC5G,IAAK,SAAU7zB,EAAMoE,EAAOpD,GAgB3B,MAfKoD,MAAU,EAGdhG,EAAOw8B,WAAY56B,EAAMgB,GACd25B,IAAef,KAAoBc,GAAYzwB,KAAMjJ,GAGhEhB,EAAKmK,cAAeyvB,IAAmBx7B,EAAO68B,QAASj6B,IAAUA,EAAMA,GAMvEhB,EAAM5B,EAAO6E,UAAW,WAAajC,IAAWhB,EAAMgB,IAAS,EAEzDA,IAIT5C,EAAOyB,KAAMzB,EAAOkQ,KAAKhF,MAAMvB,KAAK4X,OAAOrW,MAAO,QAAU,SAAUrJ,EAAGe,GACxE,GAAIk6B,GAAS3vB,GAAYvK,IAAU5C,EAAO4O,KAAKwB,IAE1CmsB,KAAef,KAAoBc,GAAYzwB,KAAMjJ,GACzDuK,GAAYvK,GAAS,SAAUhB,EAAMgB,EAAMiE,GAC1C,GAAIvF,GAAKqmB,CAWT,OAVM9gB,KAGL8gB,EAASxa,GAAYvK,GACrBuK,GAAYvK,GAAStB,EACrBA,EAAqC,MAA/Bw7B,EAAQl7B,EAAMgB,EAAMiE,GACzBjE,EAAKoC,cACL,KACDmI,GAAYvK,GAAS+kB,GAEfrmB,GAGR6L,GAAYvK,GAAS,SAAUhB,EAAMgB,EAAMiE,GAC1C,MAAMA,GAAN,OACQjF,EAAM5B,EAAO6E,UAAW,WAAajC,IAC3CA,EAAKoC,cACL,QAOCu3B,IAAgBf,KACrBx7B,EAAO08B,UAAU12B,OAChByvB,IAAK,SAAU7zB,EAAMoE,EAAOpD,GAC3B,MAAK5C,GAAO+E,SAAUnD,EAAM,cAG3BA,EAAKsW,aAAelS,GAIbo2B,IAAYA,GAAS3G,IAAK7zB,EAAMoE,EAAOpD,MAO5C44B,KAILY,IACC3G,IAAK,SAAU7zB,EAAMoE,EAAOpD,GAG3B,GAAItB,GAAMM,EAAKmN,iBAAkBnM,EAUjC,OATMtB,IACLM,EAAKm7B,iBACFz7B,EAAMM,EAAK0J,cAAc0xB,gBAAiBp6B,IAI9CtB,EAAI0E,MAAQA,GAAS,GAGP,UAATpD,GAAoBoD,IAAUpE,EAAKkK,aAAclJ,GAC9CoD,EADR,SAOFmH,GAAW1B,GAAK0B,GAAWvK,KAAOuK,GAAW8vB,OAC5C,SAAUr7B,EAAMgB,EAAMiE,GACrB,GAAIvF,EACJ,OAAMuF,GAAN,QACUvF,EAAMM,EAAKmN,iBAAkBnM,KAA0B,KAAdtB,EAAI0E,MACrD1E,EAAI0E,MACJ,MAKJhG,EAAOi8B,SAAS7nB,QACflT,IAAK,SAAUU,EAAMgB,GACpB,GAAItB,GAAMM,EAAKmN,iBAAkBnM,EACjC,OAAKtB,IAAOA,EAAIgP,UACRhP,EAAI0E,MADZ,QAIDyvB,IAAK2G,GAAS3G,KAKfz1B,EAAO08B,UAAUQ,iBAChBzH,IAAK,SAAU7zB,EAAMoE,EAAOpD,GAC3Bw5B,GAAS3G,IAAK7zB,EAAgB,KAAVoE,GAAe,EAAQA,EAAOpD,KAMpD5C,EAAOyB,MAAQ,QAAS,UAAY,SAAUI,EAAGe,GAChD5C,EAAO08B,UAAW95B,IACjB6yB,IAAK,SAAU7zB,EAAMoE,GACpB,MAAe,KAAVA,GACJpE,EAAKmK,aAAcnJ,EAAM,QAClBoD,GAFR,YASElG,EAAQif,QACb/e,EAAO08B,UAAU3d,OAChB7d,IAAK,SAAUU,GAKd,MAAOA,GAAKmd,MAAMC,SAAW5b,QAE9BqyB,IAAK,SAAU7zB,EAAMoE,GACpB,MAASpE,GAAKmd,MAAMC,QAAUhZ,EAAQ,KAQzC,IAAIm3B,IAAa,6CAChBC,GAAa,eAEdp9B,GAAOG,GAAGqC,QACTsf,KAAM,SAAUlf,EAAMoD,GACrB,MAAOyc,GAAQtjB,KAAMa,EAAO8hB,KAAMlf,EAAMoD,EAAOjE,UAAUhB,OAAS,IAGnEs8B,WAAY,SAAUz6B,GAErB,MADAA,GAAO5C,EAAO68B,QAASj6B,IAAUA,EAC1BzD,KAAKsC,KAAM,WAGjB,IACCtC,KAAMyD,GAASQ,aACRjE,MAAMyD,GACZ,MAAQ2B,UAKbvE,EAAOwC,QACNsf,KAAM,SAAUlgB,EAAMgB,EAAMoD,GAC3B,GAAI1E,GAAKsf,EACR6b,EAAQ76B,EAAK0C,QAGd,IAAe,IAAVm4B,GAAyB,IAAVA,GAAyB,IAAVA,EAWnC,MAPe,KAAVA,GAAgBz8B,EAAOoY,SAAUxW,KAGrCgB,EAAO5C,EAAO68B,QAASj6B,IAAUA,EACjCge,EAAQ5gB,EAAOy2B,UAAW7zB,IAGZQ,SAAV4C,EACC4a,GAAS,OAASA,IACuBxd,UAA3C9B,EAAMsf,EAAM6U,IAAK7zB,EAAMoE,EAAOpD,IACzBtB,EAGCM,EAAMgB,GAASoD,EAGpB4a,GAAS,OAASA,IAA+C,QAApCtf,EAAMsf,EAAM1f,IAAKU,EAAMgB,IACjDtB,EAGDM,EAAMgB,IAGd6zB,WACC7iB,UACC1S,IAAK,SAAUU,GAMd,GAAI07B,GAAWt9B,EAAO4O,KAAKwB,KAAMxO,EAAM,WAEvC,OAAO07B,GACNC,SAAUD,EAAU,IACpBH,GAAWtxB,KAAMjK,EAAKmD,WACrBq4B,GAAWvxB,KAAMjK,EAAKmD,WAAcnD,EAAK+R,KACxC,EACA,MAKNkpB,SACCW,MAAO,UACPC,QAAS,eAML39B,EAAQ27B,gBAGbz7B,EAAOyB,MAAQ,OAAQ,OAAS,SAAUI,EAAGe,GAC5C5C,EAAOy2B,UAAW7zB,IACjB1B,IAAK,SAAUU,GACd,MAAOA,GAAKkK,aAAclJ,EAAM,OAY9B9C,EAAQ67B,cACb37B,EAAOy2B,UAAUziB,UAChB9S,IAAK,SAAUU,GACd,GAAIqM,GAASrM,EAAKuK,UAUlB,OARK8B,KACJA,EAAOgG,cAGFhG,EAAO9B,YACX8B,EAAO9B,WAAW8H,eAGb,MAERwhB,IAAK,SAAU7zB,GACd,GAAIqM,GAASrM,EAAKuK,UACb8B,KACJA,EAAOgG,cAEFhG,EAAO9B,YACX8B,EAAO9B,WAAW8H,kBAOvBjU,EAAOyB,MACN,WACA,WACA,YACA,cACA,cACA,UACA,UACA,SACA,cACA,mBACE,WACFzB,EAAO68B,QAAS19B,KAAK6F,eAAkB7F,OAIlCW,EAAQ87B,UACb57B,EAAO68B,QAAQjB,QAAU,WAM1B,IAAI8B,IAAS,aAEb,SAASC,IAAU/7B,GAClB,MAAO5B,GAAOoQ,KAAMxO,EAAM,UAAa,GAGxC5B,EAAOG,GAAGqC,QACTo7B,SAAU,SAAU53B,GACnB,GAAI63B,GAASj8B,EAAMyL,EAAKywB,EAAUC,EAAO37B,EAAG47B,EAC3Cn8B,EAAI,CAEL,IAAK7B,EAAOiD,WAAY+C,GACvB,MAAO7G,MAAKsC,KAAM,SAAUW,GAC3BpC,EAAQb,MAAOy+B,SAAU53B,EAAM/E,KAAM9B,KAAMiD,EAAGu7B,GAAUx+B,SAI1D,IAAsB,gBAAV6G,IAAsBA,EAAQ,CACzC63B,EAAU73B,EAAMkF,MAAOyP,MAEvB,OAAU/Y,EAAOzC,KAAM0C,KAKtB,GAJAi8B,EAAWH,GAAU/7B,GACrByL,EAAwB,IAAlBzL,EAAK0C,WACR,IAAMw5B,EAAW,KAAMt6B,QAASk6B,GAAQ,KAEhC,CACVt7B,EAAI,CACJ,OAAU27B,EAAQF,EAASz7B,KACrBiL,EAAI5N,QAAS,IAAMs+B,EAAQ,KAAQ,IACvC1wB,GAAO0wB,EAAQ,IAKjBC,GAAah+B,EAAO2E,KAAM0I,GACrBywB,IAAaE,GACjBh+B,EAAOoQ,KAAMxO,EAAM,QAASo8B,IAMhC,MAAO7+B,OAGR8+B,YAAa,SAAUj4B,GACtB,GAAI63B,GAASj8B,EAAMyL,EAAKywB,EAAUC,EAAO37B,EAAG47B,EAC3Cn8B,EAAI,CAEL,IAAK7B,EAAOiD,WAAY+C,GACvB,MAAO7G,MAAKsC,KAAM,SAAUW,GAC3BpC,EAAQb,MAAO8+B,YAAaj4B,EAAM/E,KAAM9B,KAAMiD,EAAGu7B,GAAUx+B,SAI7D,KAAM4C,UAAUhB,OACf,MAAO5B,MAAKiR,KAAM,QAAS,GAG5B,IAAsB,gBAAVpK,IAAsBA,EAAQ,CACzC63B,EAAU73B,EAAMkF,MAAOyP,MAEvB,OAAU/Y,EAAOzC,KAAM0C,KAOtB,GANAi8B,EAAWH,GAAU/7B,GAGrByL,EAAwB,IAAlBzL,EAAK0C,WACR,IAAMw5B,EAAW,KAAMt6B,QAASk6B,GAAQ,KAEhC,CACVt7B,EAAI,CACJ,OAAU27B,EAAQF,EAASz7B,KAG1B,MAAQiL,EAAI5N,QAAS,IAAMs+B,EAAQ,KAAQ,GAC1C1wB,EAAMA,EAAI7J,QAAS,IAAMu6B,EAAQ,IAAK,IAKxCC,GAAah+B,EAAO2E,KAAM0I,GACrBywB,IAAaE,GACjBh+B,EAAOoQ,KAAMxO,EAAM,QAASo8B,IAMhC,MAAO7+B,OAGR++B,YAAa,SAAUl4B,EAAOm4B,GAC7B,GAAIr6B,SAAckC,EAElB,OAAyB,iBAAbm4B,IAAmC,WAATr6B,EAC9Bq6B,EAAWh/B,KAAKy+B,SAAU53B,GAAU7G,KAAK8+B,YAAaj4B,GAGzDhG,EAAOiD,WAAY+C,GAChB7G,KAAKsC,KAAM,SAAUI,GAC3B7B,EAAQb,MAAO++B,YACdl4B,EAAM/E,KAAM9B,KAAM0C,EAAG87B,GAAUx+B,MAAQg/B,GACvCA,KAKIh/B,KAAKsC,KAAM,WACjB,GAAI8M,GAAW1M,EAAGkX,EAAMqlB,CAExB,IAAc,WAATt6B,EAAoB,CAGxBjC,EAAI,EACJkX,EAAO/Y,EAAQb,MACfi/B,EAAap4B,EAAMkF,MAAOyP,MAE1B,OAAUpM,EAAY6vB,EAAYv8B,KAG5BkX,EAAKslB,SAAU9vB,GACnBwK,EAAKklB,YAAa1vB,GAElBwK,EAAK6kB,SAAUrvB,OAKInL,UAAV4C,GAAgC,YAATlC,IAClCyK,EAAYovB,GAAUx+B,MACjBoP,GAGJvO,EAAOwgB,MAAOrhB,KAAM,gBAAiBoP,GAOtCvO,EAAOoQ,KAAMjR,KAAM,QAClBoP,GAAavI,KAAU,EACvB,GACAhG,EAAOwgB,MAAOrhB,KAAM,kBAAqB,QAM7Ck/B,SAAU,SAAUp+B,GACnB,GAAIsO,GAAW3M,EACdC,EAAI,CAEL0M,GAAY,IAAMtO,EAAW,GAC7B,OAAU2B,EAAOzC,KAAM0C,KACtB,GAAuB,IAAlBD,EAAK0C,WACP,IAAMq5B,GAAU/7B,GAAS,KAAM4B,QAASk6B,GAAQ,KAChDj+B,QAAS8O,GAAc,GAEzB,OAAO,CAIT,QAAO,KAUTvO,EAAOyB,KAAM,0MAEsDgF,MAAO,KACzE,SAAU5E,EAAGe,GAGb5C,EAAOG,GAAIyC,GAAS,SAAU8B,EAAMvE,GACnC,MAAO4B,WAAUhB,OAAS,EACzB5B,KAAK0nB,GAAIjkB,EAAM,KAAM8B,EAAMvE,GAC3BhB,KAAKopB,QAAS3lB,MAIjB5C,EAAOG,GAAGqC,QACT87B,MAAO,SAAUC,EAAQC,GACxB,MAAOr/B,MAAK8sB,WAAYsS,GAASrS,WAAYsS,GAASD,KAKxD,IAAIjrB,IAAWpU,EAAOoU,SAElBmrB,GAAQz+B,EAAOqG,MAEfq4B,GAAS,KAITC,GAAe,kIAEnB3+B,GAAOyf,UAAY,SAAU/a,GAG5B,GAAKxF,EAAO0/B,MAAQ1/B,EAAO0/B,KAAKC,MAI/B,MAAO3/B,GAAO0/B,KAAKC,MAAOn6B,EAAO,GAGlC,IAAIo6B,GACHC,EAAQ,KACRC,EAAMh/B,EAAO2E,KAAMD,EAAO,GAI3B,OAAOs6B,KAAQh/B,EAAO2E,KAAMq6B,EAAIx7B,QAASm7B,GAAc,SAAU5mB,EAAOknB,EAAOC,EAAMlP,GAQpF,MALK8O,IAAmBG,IACvBF,EAAQ,GAIM,IAAVA,EACGhnB,GAIR+mB,EAAkBI,GAAQD,EAM1BF,IAAU/O,GAASkP,EAGZ,OAELC,SAAU,UAAYH,KACxBh/B,EAAO0D,MAAO,iBAAmBgB,IAKnC1E,EAAOo/B,SAAW,SAAU16B,GAC3B,GAAIwN,GAAK9L,CACT,KAAM1B,GAAwB,gBAATA,GACpB,MAAO,KAER,KACMxF,EAAOmgC,WACXj5B,EAAM,GAAIlH,GAAOmgC,UACjBntB,EAAM9L,EAAIk5B,gBAAiB56B,EAAM,cAEjCwN,EAAM,GAAIhT,GAAOqgC,cAAe,oBAChCrtB,EAAIstB,MAAQ,QACZttB,EAAIutB,QAAS/6B,IAEb,MAAQH,GACT2N,EAAM9O,OAKP,MAHM8O,IAAQA,EAAIpE,kBAAmBoE,EAAIxG,qBAAsB,eAAgB3K,QAC9Ef,EAAO0D,MAAO,gBAAkBgB,GAE1BwN,EAIR,IACCwtB,IAAQ,OACRC,GAAM,gBAGNC,GAAW,gCAGXC,GAAiB,4DACjBC,GAAa,iBACbC,GAAY,QACZC,GAAO,4DAWPjH,MAOAkH,MAGAC,GAAW,KAAK3gC,OAAQ,KAGxB4gC,GAAe7sB,GAASK,KAGxBysB,GAAeJ,GAAKz0B,KAAM40B,GAAan7B,kBAGxC,SAASq7B,IAA6BC,GAGrC,MAAO,UAAUC,EAAoBzkB,GAED,gBAAvBykB,KACXzkB,EAAOykB,EACPA,EAAqB,IAGtB,IAAIC,GACH3+B,EAAI,EACJ4+B,EAAYF,EAAmBv7B,cAAckG,MAAOyP,MAErD,IAAK3a,EAAOiD,WAAY6Y,GAGvB,MAAU0kB,EAAWC,EAAW5+B,KAGD,MAAzB2+B,EAASvnB,OAAQ,IACrBunB,EAAWA,EAASlhC,MAAO,IAAO,KAChCghC,EAAWE,GAAaF,EAAWE,QAAmBvwB,QAAS6L,KAI/DwkB,EAAWE,GAAaF,EAAWE,QAAmBhhC,KAAMsc,IAQnE,QAAS4kB,IAA+BJ,EAAWz9B,EAASw2B,EAAiBsH,GAE5E,GAAIC,MACHC,EAAqBP,IAAcL,EAEpC,SAASa,GAASN,GACjB,GAAIxsB,EAcJ,OAbA4sB,GAAWJ,IAAa,EACxBxgC,EAAOyB,KAAM6+B,EAAWE,OAAkB,SAAUn2B,EAAG02B,GACtD,GAAIC,GAAsBD,EAAoBl+B,EAASw2B,EAAiBsH,EACxE,OAAoC,gBAAxBK,IACVH,GAAqBD,EAAWI,GAKtBH,IACD7sB,EAAWgtB,GADf,QAHNn+B,EAAQ49B,UAAUxwB,QAAS+wB,GAC3BF,EAASE,IACF,KAKFhtB,EAGR,MAAO8sB,GAASj+B,EAAQ49B,UAAW,MAAUG,EAAW,MAASE,EAAS,KAM3E,QAASG,IAAYl+B,EAAQN,GAC5B,GAAIO,GAAMqB,EACT68B,EAAclhC,EAAOmhC,aAAaD,eAEnC,KAAM78B,IAAO5B,GACQW,SAAfX,EAAK4B,MACP68B,EAAa78B,GAAQtB,EAAWC,IAAUA,OAAiBqB,GAAQ5B,EAAK4B,GAO5E,OAJKrB,IACJhD,EAAOwC,QAAQ,EAAMO,EAAQC,GAGvBD,EAOR,QAASq+B,IAAqBC,EAAGV,EAAOW,GACvC,GAAIC,GAAeC,EAAIC,EAAe39B,EACrCyV,EAAW8nB,EAAE9nB,SACbknB,EAAYY,EAAEZ,SAGf,OAA2B,MAAnBA,EAAW,GAClBA,EAAU/zB,QACEtJ,SAAPo+B,IACJA,EAAKH,EAAEK,UAAYf,EAAMgB,kBAAmB,gBAK9C,IAAKH,EACJ,IAAM19B,IAAQyV,GACb,GAAKA,EAAUzV,IAAUyV,EAAUzV,GAAO+H,KAAM21B,GAAO,CACtDf,EAAUxwB,QAASnM,EACnB,OAMH,GAAK28B,EAAW,IAAOa,GACtBG,EAAgBhB,EAAW,OACrB,CAGN,IAAM38B,IAAQw9B,GAAY,CACzB,IAAMb,EAAW,IAAOY,EAAEO,WAAY99B,EAAO,IAAM28B,EAAW,IAAQ,CACrEgB,EAAgB39B,CAChB,OAEKy9B,IACLA,EAAgBz9B,GAKlB29B,EAAgBA,GAAiBF,EAMlC,MAAKE,IACCA,IAAkBhB,EAAW,IACjCA,EAAUxwB,QAASwxB,GAEbH,EAAWG,IAJnB,OAWD,QAASI,IAAaR,EAAGS,EAAUnB,EAAOoB,GACzC,GAAIC,GAAOC,EAASC,EAAM97B,EAAKqT,EAC9BmoB,KAGAnB,EAAYY,EAAEZ,UAAUnhC,OAGzB,IAAKmhC,EAAW,GACf,IAAMyB,IAAQb,GAAEO,WACfA,EAAYM,EAAKl9B,eAAkBq8B,EAAEO,WAAYM,EAInDD,GAAUxB,EAAU/zB,OAGpB,OAAQu1B,EAcP,GAZKZ,EAAEc,eAAgBF,KACtBtB,EAAOU,EAAEc,eAAgBF,IAAcH,IAIlCroB,GAAQsoB,GAAaV,EAAEe,aAC5BN,EAAWT,EAAEe,WAAYN,EAAUT,EAAEb,WAGtC/mB,EAAOwoB,EACPA,EAAUxB,EAAU/zB,QAKnB,GAAiB,MAAZu1B,EAEJA,EAAUxoB,MAGJ,IAAc,MAATA,GAAgBA,IAASwoB,EAAU,CAM9C,GAHAC,EAAON,EAAYnoB,EAAO,IAAMwoB,IAAaL,EAAY,KAAOK,IAG1DC,EACL,IAAMF,IAASJ,GAId,GADAx7B,EAAM47B,EAAMv7B,MAAO,KACdL,EAAK,KAAQ67B,IAGjBC,EAAON,EAAYnoB,EAAO,IAAMrT,EAAK,KACpCw7B,EAAY,KAAOx7B,EAAK,KACb,CAGN87B,KAAS,EACbA,EAAON,EAAYI,GAGRJ,EAAYI,MAAY,IACnCC,EAAU77B,EAAK,GACfq6B,EAAUxwB,QAAS7J,EAAK,IAEzB,OAOJ,GAAK87B,KAAS,EAGb,GAAKA,GAAQb,EAAG,UACfS,EAAWI,EAAMJ,OAEjB,KACCA,EAAWI,EAAMJ,GAChB,MAAQv9B,GACT,OACCyX,MAAO,cACPtY,MAAOw+B,EAAO39B,EAAI,sBAAwBkV,EAAO,OAASwoB,IASjE,OAASjmB,MAAO,UAAWtX,KAAMo9B,GAGlC9hC,EAAOwC,QAGN6/B,OAAQ,EAGRC,gBACAC,QAEApB,cACCqB,IAAKrC,GACLr8B,KAAM,MACN2+B,QAAS5C,GAAeh0B,KAAMu0B,GAAc,IAC5CzhC,QAAQ,EACR+jC,aAAa,EACblD,OAAO,EACPmD,YAAa,mDAabC,SACClJ,IAAKwG,GACLh7B,KAAM,aACNipB,KAAM,YACNjc,IAAK,4BACL2wB,KAAM,qCAGPtpB,UACCrH,IAAK,UACLic,KAAM,SACN0U,KAAM,YAGPV,gBACCjwB,IAAK,cACLhN,KAAM,eACN29B,KAAM,gBAKPjB,YAGCkB,SAAUr4B,OAGVs4B,aAAa,EAGbC,YAAahjC,EAAOyf,UAGpBwjB,WAAYjjC,EAAOo/B,UAOpB8B,aACCsB,KAAK,EACLtiC,SAAS,IAOXgjC,UAAW,SAAUngC,EAAQogC,GAC5B,MAAOA,GAGNlC,GAAYA,GAAYl+B,EAAQ/C,EAAOmhC,cAAgBgC,GAGvDlC,GAAYjhC,EAAOmhC,aAAcp+B,IAGnCqgC,cAAe/C,GAA6BtH,IAC5CsK,cAAehD,GAA6BJ,IAG5CqD,KAAM,SAAUd,EAAK3/B,GAGA,gBAAR2/B,KACX3/B,EAAU2/B,EACVA,EAAMp/B,QAIPP,EAAUA,KAEV,IAGCuzB,GAGAv0B,EAGA0hC,EAGAC,EAGAC,EAGAC,EAEAC,EAGAC,EAGAvC,EAAIrhC,EAAOkjC,aAAergC,GAG1BghC,EAAkBxC,EAAEnhC,SAAWmhC,EAG/ByC,EAAqBzC,EAAEnhC,UACpB2jC,EAAgBv/B,UAAYu/B,EAAgBhjC,QAC7Cb,EAAQ6jC,GACR7jC,EAAOse,MAGTnC,EAAWnc,EAAO6b,WAClBkoB,EAAmB/jC,EAAO+a,UAAW,eAGrCipB,EAAa3C,EAAE2C,eAGfC,KACAC,KAGAloB,EAAQ,EAGRmoB,EAAW,WAGXxD,GACCpiB,WAAY,EAGZojB,kBAAmB,SAAUt9B,GAC5B,GAAI6G,EACJ,IAAe,IAAV8Q,EAAc,CAClB,IAAM4nB,EAAkB,CACvBA,IACA,OAAU14B,EAAQ00B,GAASr0B,KAAMi4B,GAChCI,EAAiB14B,EAAO,GAAIlG,eAAkBkG,EAAO,GAGvDA,EAAQ04B,EAAiBv/B,EAAIW,eAE9B,MAAgB,OAATkG,EAAgB,KAAOA,GAI/Bk5B,sBAAuB,WACtB,MAAiB,KAAVpoB,EAAcwnB,EAAwB,MAI9Ca,iBAAkB,SAAUzhC,EAAMoD,GACjC,GAAIs+B,GAAQ1hC,EAAKoC,aAKjB,OAJMgX,KACLpZ,EAAOshC,EAAqBI,GAAUJ,EAAqBI,IAAW1hC,EACtEqhC,EAAgBrhC,GAASoD,GAEnB7G,MAIRolC,iBAAkB,SAAUzgC,GAI3B,MAHMkY,KACLqlB,EAAEK,SAAW59B,GAEP3E,MAIR6kC,WAAY,SAAUriC,GACrB,GAAI6iC,EACJ,IAAK7iC,EACJ,GAAa,EAARqa,EACJ,IAAMwoB,IAAQ7iC,GAGbqiC,EAAYQ,IAAWR,EAAYQ,GAAQ7iC,EAAK6iC,QAKjD7D,GAAMzkB,OAAQva,EAAKg/B,EAAM8D,QAG3B,OAAOtlC,OAIRulC,MAAO,SAAUC,GAChB,GAAIC,GAAYD,GAAcR,CAK9B,OAJKR,IACJA,EAAUe,MAAOE,GAElBh9B,EAAM,EAAGg9B,GACFzlC,MA0CV,IArCAgd,EAASF,QAAS0kB,GAAQlH,SAAWsK,EAAiB/pB,IACtD2mB,EAAMkE,QAAUlE,EAAM/4B,KACtB+4B,EAAMj9B,MAAQi9B,EAAMvkB,KAMpBilB,EAAEmB,MAAUA,GAAOnB,EAAEmB,KAAOrC,IAAiB,IAC3C38B,QAASk8B,GAAO,IAChBl8B,QAASu8B,GAAWK,GAAc,GAAM,MAG1CiB,EAAEv9B,KAAOjB,EAAQiiC,QAAUjiC,EAAQiB,MAAQu9B,EAAEyD,QAAUzD,EAAEv9B,KAGzDu9B,EAAEZ,UAAYzgC,EAAO2E,KAAM08B,EAAEb,UAAY,KAAMx7B,cAAckG,MAAOyP,KAAiB,IAG/D,MAAjB0mB,EAAE0D,cACN3O,EAAQ4J,GAAKz0B,KAAM81B,EAAEmB,IAAIx9B,eACzBq8B,EAAE0D,eAAkB3O,GACjBA,EAAO,KAAQgK,GAAc,IAAOhK,EAAO,KAAQgK,GAAc,KAChEhK,EAAO,KAAwB,UAAfA,EAAO,GAAkB,KAAO,WAC/CgK,GAAc,KAA+B,UAAtBA,GAAc,GAAkB,KAAO,UAK/DiB,EAAE38B,MAAQ28B,EAAEqB,aAAiC,gBAAXrB,GAAE38B,OACxC28B,EAAE38B,KAAO1E,EAAOqkB,MAAOgd,EAAE38B,KAAM28B,EAAE2D,cAIlCtE,GAA+B3H,GAAYsI,EAAGx+B,EAAS89B,GAGxC,IAAV3kB,EACJ,MAAO2kB,EAKR+C,GAAc1jC,EAAOse,OAAS+iB,EAAE1iC,OAG3B+kC,GAAmC,IAApB1jC,EAAOqiC,UAC1BriC,EAAOse,MAAMiK,QAAS,aAIvB8Y,EAAEv9B,KAAOu9B,EAAEv9B,KAAKnD,cAGhB0gC,EAAE4D,YAAcnF,GAAWj0B,KAAMw1B,EAAEv9B,MAInCy/B,EAAWlC,EAAEmB,IAGPnB,EAAE4D,aAGF5D,EAAE38B,OACN6+B,EAAalC,EAAEmB,MAAS9D,GAAO7yB,KAAM03B,GAAa,IAAM,KAAQlC,EAAE38B,WAG3D28B,GAAE38B,MAIL28B,EAAE70B,SAAU,IAChB60B,EAAEmB,IAAM7C,GAAI9zB,KAAM03B,GAGjBA,EAAS//B,QAASm8B,GAAK,OAASlB,MAGhC8E,GAAa7E,GAAO7yB,KAAM03B,GAAa,IAAM,KAAQ,KAAO9E,OAK1D4C,EAAE6D,aACDllC,EAAOsiC,aAAciB,IACzB5C,EAAM0D,iBAAkB,oBAAqBrkC,EAAOsiC,aAAciB,IAE9DvjC,EAAOuiC,KAAMgB,IACjB5C,EAAM0D,iBAAkB,gBAAiBrkC,EAAOuiC,KAAMgB,MAKnDlC,EAAE38B,MAAQ28B,EAAE4D,YAAc5D,EAAEsB,eAAgB,GAAS9/B,EAAQ8/B,cACjEhC,EAAM0D,iBAAkB,eAAgBhD,EAAEsB,aAI3ChC,EAAM0D,iBACL,SACAhD,EAAEZ,UAAW,IAAOY,EAAEuB,QAASvB,EAAEZ,UAAW,IAC3CY,EAAEuB,QAASvB,EAAEZ,UAAW,KACA,MAArBY,EAAEZ,UAAW,GAAc,KAAOP,GAAW,WAAa,IAC7DmB,EAAEuB,QAAS,KAIb,KAAM/gC,IAAKw/B,GAAE8D,QACZxE,EAAM0D,iBAAkBxiC,EAAGw/B,EAAE8D,QAAStjC,GAIvC,IAAKw/B,EAAE+D,aACJ/D,EAAE+D,WAAWnkC,KAAM4iC,EAAiBlD,EAAOU,MAAQ,GAAmB,IAAVrlB,GAG9D,MAAO2kB,GAAM+D,OAIdP,GAAW,OAGX,KAAMtiC,KAAOgjC,QAAS,EAAGnhC,MAAO,EAAG+1B,SAAU,GAC5CkH,EAAO9+B,GAAKw/B,EAAGx/B,GAOhB,IAHA8hC,EAAYjD,GAA+BT,GAAYoB,EAAGx+B,EAAS89B,GAK5D,CASN,GARAA,EAAMpiB,WAAa,EAGdmlB,GACJI,EAAmBvb,QAAS,YAAcoY,EAAOU,IAInC,IAAVrlB,EACJ,MAAO2kB,EAIHU,GAAE7B,OAAS6B,EAAE/F,QAAU,IAC3BmI,EAAevkC,EAAOuf,WAAY,WACjCkiB,EAAM+D,MAAO,YACXrD,EAAE/F,SAGN,KACCtf,EAAQ,EACR2nB,EAAU0B,KAAMpB,EAAgBr8B,GAC/B,MAAQrD,GAGT,KAAa,EAARyX,GAKJ,KAAMzX,EAJNqD,GAAM,GAAIrD,QA5BZqD,GAAM,GAAI,eAsCX,SAASA,GAAM68B,EAAQa,EAAkBhE,EAAW6D,GACnD,GAAIpD,GAAW8C,EAASnhC,EAAOo+B,EAAUyD,EACxCZ,EAAaW,CAGC,KAAVtpB,IAKLA,EAAQ,EAGHynB,GACJvkC,EAAOq8B,aAAckI,GAKtBE,EAAYvgC,OAGZogC,EAAwB2B,GAAW,GAGnCxE,EAAMpiB,WAAakmB,EAAS,EAAI,EAAI,EAGpC1C,EAAY0C,GAAU,KAAgB,IAATA,GAA2B,MAAXA,EAGxCnD,IACJQ,EAAWV,GAAqBC,EAAGV,EAAOW,IAI3CQ,EAAWD,GAAaR,EAAGS,EAAUnB,EAAOoB,GAGvCA,GAGCV,EAAE6D,aACNK,EAAW5E,EAAMgB,kBAAmB,iBAC/B4D,IACJvlC,EAAOsiC,aAAciB,GAAagC,GAEnCA,EAAW5E,EAAMgB,kBAAmB,QAC/B4D,IACJvlC,EAAOuiC,KAAMgB,GAAagC,IAKZ,MAAXd,GAA6B,SAAXpD,EAAEv9B,KACxB6gC,EAAa,YAGS,MAAXF,EACXE,EAAa,eAIbA,EAAa7C,EAAS9lB,MACtB6oB,EAAU/C,EAASp9B,KACnBhB,EAAQo+B,EAASp+B,MACjBq+B,GAAar+B,KAMdA,EAAQihC,GACHF,GAAWE,IACfA,EAAa,QACC,EAATF,IACJA,EAAS,KAMZ9D,EAAM8D,OAASA,EACf9D,EAAMgE,YAAeW,GAAoBX,GAAe,GAGnD5C,EACJ5lB,EAASqB,YAAaqmB,GAAmBgB,EAASF,EAAYhE,IAE9DxkB,EAASod,WAAYsK,GAAmBlD,EAAOgE,EAAYjhC,IAI5Di9B,EAAMqD,WAAYA,GAClBA,EAAa5gC,OAERsgC,GACJI,EAAmBvb,QAASwZ,EAAY,cAAgB,aACrDpB,EAAOU,EAAGU,EAAY8C,EAAUnhC,IAIpCqgC,EAAiBnoB,SAAUioB,GAAmBlD,EAAOgE,IAEhDjB,IACJI,EAAmBvb,QAAS,gBAAkBoY,EAAOU,MAG3CrhC,EAAOqiC,QAChBriC,EAAOse,MAAMiK,QAAS,cAKzB,MAAOoY,IAGR6E,QAAS,SAAUhD,EAAK99B,EAAMhD,GAC7B,MAAO1B,GAAOkB,IAAKshC,EAAK99B,EAAMhD,EAAU,SAGzC+jC,UAAW,SAAUjD,EAAK9gC,GACzB,MAAO1B,GAAOkB,IAAKshC,EAAKp/B,OAAW1B,EAAU,aAI/C1B,EAAOyB,MAAQ,MAAO,QAAU,SAAUI,EAAGijC,GAC5C9kC,EAAQ8kC,GAAW,SAAUtC,EAAK99B,EAAMhD,EAAUoC,GAUjD,MAPK9D,GAAOiD,WAAYyB,KACvBZ,EAAOA,GAAQpC,EACfA,EAAWgD,EACXA,EAAOtB,QAIDpD,EAAOsjC,KAAMtjC,EAAOwC,QAC1BggC,IAAKA,EACL1+B,KAAMghC,EACNtE,SAAU18B,EACVY,KAAMA,EACNmgC,QAASnjC,GACP1B,EAAOkD,cAAes/B,IAASA,OAKpCxiC,EAAOouB,SAAW,SAAUoU,GAC3B,MAAOxiC,GAAOsjC,MACbd,IAAKA,EAGL1+B,KAAM,MACN08B,SAAU,SACVh0B,OAAO,EACPgzB,OAAO,EACP7gC,QAAQ,EACR+mC,UAAU,KAKZ1lC,EAAOG,GAAGqC,QACTmjC,QAAS,SAAUxX,GAClB,GAAKnuB,EAAOiD,WAAYkrB,GACvB,MAAOhvB,MAAKsC,KAAM,SAAUI,GAC3B7B,EAAQb,MAAOwmC,QAASxX,EAAKltB,KAAM9B,KAAM0C,KAI3C,IAAK1C,KAAM,GAAM,CAGhB,GAAIymB,GAAO5lB,EAAQmuB,EAAMhvB,KAAM,GAAImM,eAAgBrJ,GAAI,GAAIa,OAAO,EAE7D3D,MAAM,GAAIgN,YACdyZ,EAAKkJ,aAAc3vB,KAAM,IAG1BymB,EAAKjkB,IAAK,WACT,GAAIC,GAAOzC,IAEX,OAAQyC,EAAKgP,YAA2C,IAA7BhP,EAAKgP,WAAWtM,SAC1C1C,EAAOA,EAAKgP,UAGb,OAAOhP,KACJgtB,OAAQzvB,MAGb,MAAOA,OAGRymC,UAAW,SAAUzX,GACpB,MAAKnuB,GAAOiD,WAAYkrB,GAChBhvB,KAAKsC,KAAM,SAAUI,GAC3B7B,EAAQb,MAAOymC,UAAWzX,EAAKltB,KAAM9B,KAAM0C,MAItC1C,KAAKsC,KAAM,WACjB,GAAIsX,GAAO/Y,EAAQb,MAClBoa,EAAWR,EAAKQ,UAEZA,GAASxY,OACbwY,EAASosB,QAASxX,GAGlBpV,EAAK6V,OAAQT,MAKhBvI,KAAM,SAAUuI,GACf,GAAIlrB,GAAajD,EAAOiD,WAAYkrB,EAEpC,OAAOhvB,MAAKsC,KAAM,SAAUI,GAC3B7B,EAAQb,MAAOwmC,QAAS1iC,EAAakrB,EAAKltB,KAAM9B,KAAM0C,GAAMssB,MAI9D0X,OAAQ,WACP,MAAO1mC,MAAK8O,SAASxM,KAAM,WACpBzB,EAAO+E,SAAU5F,KAAM,SAC5Ba,EAAQb,MAAO8vB,YAAa9vB,KAAKyL,cAE/BvI,QAKN,SAASyjC,IAAYlkC,GACpB,MAAOA,GAAKmd,OAASnd,EAAKmd,MAAM8Q,SAAW7vB,EAAO4hB,IAAKhgB,EAAM,WAG9D,QAASmkC,IAAcnkC,GAGtB,IAAM5B,EAAOyH,SAAU7F,EAAK0J,eAAiBvM,EAAU6C,GACtD,OAAO,CAER,OAAQA,GAA0B,IAAlBA,EAAK0C,SAAiB,CACrC,GAA4B,SAAvBwhC,GAAYlkC,IAAmC,WAAdA,EAAKkC,KAC1C,OAAO,CAERlC,GAAOA,EAAKuK,WAEb,OAAO,EAGRnM,EAAOkQ,KAAK8E,QAAQkf,OAAS,SAAUtyB,GAItC,MAAO9B,GAAQoxB,wBACZtvB,EAAKsd,aAAe,GAAKtd,EAAKmwB,cAAgB,IAC9CnwB,EAAKiwB,iBAAiB9wB,OACvBglC,GAAcnkC,IAGjB5B,EAAOkQ,KAAK8E,QAAQgxB,QAAU,SAAUpkC,GACvC,OAAQ5B,EAAOkQ,KAAK8E,QAAQkf,OAAQtyB,GAMrC,IAAIqkC,IAAM,OACTC,GAAW,QACXC,GAAQ,SACRC,GAAkB,wCAClBC,GAAe,oCAEhB,SAASC,IAAatQ,EAAQnyB,EAAKmhC,EAAahrB,GAC/C,GAAIpX,EAEJ,IAAK5C,EAAOmD,QAASU,GAGpB7D,EAAOyB,KAAMoC,EAAK,SAAUhC,EAAG0kC,GACzBvB,GAAekB,GAASr6B,KAAMmqB,GAGlChc,EAAKgc,EAAQuQ,GAKbD,GACCtQ,EAAS,KAAqB,gBAANuQ,IAAuB,MAALA,EAAY1kC,EAAI,IAAO,IACjE0kC,EACAvB,EACAhrB,SAKG,IAAMgrB,GAAsC,WAAvBhlC,EAAO8D,KAAMD,GAUxCmW,EAAKgc,EAAQnyB,OAPb,KAAMjB,IAAQiB,GACbyiC,GAAatQ,EAAS,IAAMpzB,EAAO,IAAKiB,EAAKjB,GAAQoiC,EAAahrB,GAYrEha,EAAOqkB,MAAQ,SAAUnc,EAAG88B,GAC3B,GAAIhP,GACHqL,KACArnB,EAAM,SAAU3V,EAAK2B,GAGpBA,EAAQhG,EAAOiD,WAAY+C,GAAUA,IAAqB,MAATA,EAAgB,GAAKA,EACtEq7B,EAAGA,EAAEtgC,QAAWylC,mBAAoBniC,GAAQ,IAAMmiC,mBAAoBxgC,GASxE,IALqB5C,SAAhB4hC,IACJA,EAAchlC,EAAOmhC,cAAgBnhC,EAAOmhC,aAAa6D,aAIrDhlC,EAAOmD,QAAS+E,IAASA,EAAErH,SAAWb,EAAOkD,cAAegF,GAGhElI,EAAOyB,KAAMyG,EAAG,WACf8R,EAAK7a,KAAKyD,KAAMzD,KAAK6G,aAOtB,KAAMgwB,IAAU9tB,GACfo+B,GAAatQ,EAAQ9tB,EAAG8tB,GAAUgP,EAAahrB,EAKjD,OAAOqnB,GAAEp1B,KAAM,KAAMzI,QAASyiC,GAAK,MAGpCjmC,EAAOG,GAAGqC,QACTikC,UAAW,WACV,MAAOzmC,GAAOqkB,MAAOllB,KAAKunC,mBAE3BA,eAAgB,WACf,MAAOvnC,MAAKwC,IAAK,WAGhB,GAAIwO,GAAWnQ,EAAO8hB,KAAM3iB,KAAM,WAClC,OAAOgR,GAAWnQ,EAAOmF,UAAWgL,GAAahR,OAEjD0P,OAAQ,WACR,GAAI/K,GAAO3E,KAAK2E,IAGhB,OAAO3E,MAAKyD,OAAS5C,EAAQb,MAAOoZ,GAAI,cACvC8tB,GAAax6B,KAAM1M,KAAK4F,YAAeqhC,GAAgBv6B,KAAM/H,KAC3D3E,KAAK4U,UAAY+O,EAAejX,KAAM/H,MAEzCnC,IAAK,SAAUE,EAAGD,GAClB,GAAIyO,GAAMrQ,EAAQb,MAAOkR,KAEzB,OAAc,OAAPA,EACN,KACArQ,EAAOmD,QAASkN,GACfrQ,EAAO2B,IAAK0O,EAAK,SAAUA,GAC1B,OAASzN,KAAMhB,EAAKgB,KAAMoD,MAAOqK,EAAI7M,QAAS2iC,GAAO,YAEpDvjC,KAAMhB,EAAKgB,KAAMoD,MAAOqK,EAAI7M,QAAS2iC,GAAO,WAC7CjlC,SAONlB,EAAOmhC,aAAawF,IAA+BvjC,SAAzBlE,EAAOqgC,cAGhC,WAGC,MAAKpgC,MAAKsjC,QACFmE,KASH7nC,EAAS8nC,aAAe,EACrBC,KASD,wCAAwCj7B,KAAM1M,KAAK2E,OACzDgjC,MAAuBF,MAIzBE,EAED,IAAIC,IAAQ,EACXC,MACAC,GAAejnC,EAAOmhC,aAAawF,KAK/BznC,GAAOoP,aACXpP,EAAOoP,YAAa,WAAY,WAC/B,IAAM,GAAIjK,KAAO2iC,IAChBA,GAAc3iC,GAAOjB,QAAW,KAMnCtD,EAAQonC,OAASD,IAAkB,mBAAqBA,IACxDA,GAAennC,EAAQwjC,OAAS2D,GAG3BA,IAEJjnC,EAAOqjC,cAAe,SAAUxgC,GAG/B,IAAMA,EAAQkiC,aAAejlC,EAAQonC,KAAO,CAE3C,GAAIxlC,EAEJ,QACC2jC,KAAM,SAAUF,EAAS1L,GACxB,GAAI53B,GACH8kC,EAAM9jC,EAAQ8jC,MACdl7B,IAAOs7B,EAYR,IATAJ,EAAIzH,KACHr8B,EAAQiB,KACRjB,EAAQ2/B,IACR3/B,EAAQ28B,MACR38B,EAAQskC,SACRtkC,EAAQ+R,UAIJ/R,EAAQukC,UACZ,IAAMvlC,IAAKgB,GAAQukC,UAClBT,EAAK9kC,GAAMgB,EAAQukC,UAAWvlC,EAK3BgB,GAAQ6+B,UAAYiF,EAAIpC,kBAC5BoC,EAAIpC,iBAAkB1hC,EAAQ6+B,UAQzB7+B,EAAQkiC,aAAgBI,EAAS,sBACtCA,EAAS,oBAAuB,iBAIjC,KAAMtjC,IAAKsjC,GAQY/hC,SAAjB+hC,EAAStjC,IACb8kC,EAAItC,iBAAkBxiC,EAAGsjC,EAAStjC,GAAM,GAO1C8kC,GAAItB,KAAQxiC,EAAQoiC,YAAcpiC,EAAQ6B,MAAU,MAGpDhD,EAAW,SAAU2I,EAAGg9B,GACvB,GAAI5C,GAAQE,EAAYrD,CAGxB,IAAK5/B,IAAc2lC,GAA8B,IAAnBV,EAAIpoB,YAQjC,SALOyoB,IAAcv7B,GACrB/J,EAAW0B,OACXujC,EAAIW,mBAAqBtnC,EAAO4D,KAG3ByjC,EACoB,IAAnBV,EAAIpoB,YACRooB,EAAIjC,YAEC,CACNpD,KACAmD,EAASkC,EAAIlC,OAKoB,gBAArBkC,GAAIY,eACfjG,EAAUp8B,KAAOyhC,EAAIY,aAKtB,KACC5C,EAAagC,EAAIhC,WAChB,MAAQpgC,GAGTogC,EAAa,GAQRF,IAAU5hC,EAAQ4/B,SAAY5/B,EAAQkiC,YAIrB,OAAXN,IACXA,EAAS,KAJTA,EAASnD,EAAUp8B,KAAO,IAAM,IAU9Bo8B,GACJ7H,EAAUgL,EAAQE,EAAYrD,EAAWqF,EAAIvC,0BAOzCvhC,EAAQ28B,MAIiB,IAAnBmH,EAAIpoB,WAIfrf,EAAOuf,WAAY/c,GAKnBilC,EAAIW,mBAAqBN,GAAcv7B,GAAO/J,EAV9CA,KAcFgjC,MAAO,WACDhjC,GACJA,EAAU0B,QAAW,OAS3B,SAAS0jC,MACR,IACC,MAAO,IAAI5nC,GAAOsoC,eACjB,MAAQjjC,KAGX,QAASqiC,MACR,IACC,MAAO,IAAI1nC,GAAOqgC,cAAe,qBAChC,MAAQh7B,KAOXvE,EAAOkjC,WACNN,SACC6E,OAAQ,6FAGTluB,UACCkuB,OAAQ,2BAET7F,YACC8F,cAAe,SAAUxiC,GAExB,MADAlF,GAAOyE,WAAYS,GACZA,MAMVlF,EAAOojC,cAAe,SAAU,SAAU/B,GACxBj+B,SAAZi+B,EAAE70B,QACN60B,EAAE70B,OAAQ,GAEN60B,EAAE0D,cACN1D,EAAEv9B,KAAO,MACTu9B,EAAE1iC,QAAS,KAKbqB,EAAOqjC,cAAe,SAAU,SAAUhC,GAGzC,GAAKA,EAAE0D,YAAc,CAEpB,GAAI0C,GACHE,EAAO5oC,EAAS4oC,MAAQ3nC,EAAQ,QAAU,IAAOjB,EAAS+O,eAE3D,QAECu3B,KAAM,SAAUh7B,EAAG3I,GAElB+lC,EAAS1oC,EAAS+N,cAAe,UAEjC26B,EAAOjI,OAAQ,EAEV6B,EAAEuG,gBACNH,EAAOI,QAAUxG,EAAEuG,eAGpBH,EAAOhlC,IAAM4+B,EAAEmB,IAGfiF,EAAOK,OAASL,EAAOH,mBAAqB,SAAUj9B,EAAGg9B,IAEnDA,IAAYI,EAAOlpB,YAAc,kBAAkB1S,KAAM47B,EAAOlpB,eAGpEkpB,EAAOK,OAASL,EAAOH,mBAAqB,KAGvCG,EAAOt7B,YACXs7B,EAAOt7B,WAAWY,YAAa06B,GAIhCA,EAAS,KAGHJ,GACL3lC,EAAU,IAAK,aAOlBimC,EAAK7Y,aAAc2Y,EAAQE,EAAK/2B,aAGjC8zB,MAAO,WACD+C,GACJA,EAAOK,OAAQ1kC,QAAW,OAU/B,IAAI2kC,OACHC,GAAS,mBAGVhoC,GAAOkjC,WACN+E,MAAO,WACPC,cAAe,WACd,GAAIxmC,GAAWqmC,GAAa1/B,OAAWrI,EAAOqD,QAAU,IAAQo7B,IAEhE,OADAt/B,MAAMuC,IAAa,EACZA,KAKT1B,EAAOojC,cAAe,aAAc,SAAU/B,EAAG8G,EAAkBxH,GAElE,GAAIyH,GAAcC,EAAaC,EAC9BC,EAAWlH,EAAE4G,SAAU,IAAWD,GAAOn8B,KAAMw1B,EAAEmB,KAChD,MACkB,gBAAXnB,GAAE38B,MAE6C,KADnD28B,EAAEsB,aAAe,IACjBljC,QAAS,sCACXuoC,GAAOn8B,KAAMw1B,EAAE38B,OAAU,OAI5B,OAAK6jC,IAAiC,UAArBlH,EAAEZ,UAAW,IAG7B2H,EAAe/G,EAAE6G,cAAgBloC,EAAOiD,WAAYo+B,EAAE6G,eACrD7G,EAAE6G,gBACF7G,EAAE6G,cAGEK,EACJlH,EAAGkH,GAAalH,EAAGkH,GAAW/kC,QAASwkC,GAAQ,KAAOI,GAC3C/G,EAAE4G,SAAU,IACvB5G,EAAEmB,MAAS9D,GAAO7yB,KAAMw1B,EAAEmB,KAAQ,IAAM,KAAQnB,EAAE4G,MAAQ,IAAMG,GAIjE/G,EAAEO,WAAY,eAAkB,WAI/B,MAHM0G,IACLtoC,EAAO0D,MAAO0kC,EAAe,mBAEvBE,EAAmB,IAI3BjH,EAAEZ,UAAW,GAAM,OAGnB4H,EAAcnpC,EAAQkpC,GACtBlpC,EAAQkpC,GAAiB,WACxBE,EAAoBvmC,WAIrB4+B,EAAMzkB,OAAQ,WAGQ9Y,SAAhBilC,EACJroC,EAAQd,GAASm+B,WAAY+K,GAI7BlpC,EAAQkpC,GAAiBC,EAIrBhH,EAAG+G,KAGP/G,EAAE6G,cAAgBC,EAAiBD,cAGnCH,GAAavoC,KAAM4oC,IAIfE,GAAqBtoC,EAAOiD,WAAYolC,IAC5CA,EAAaC,EAAmB,IAGjCA,EAAoBD,EAAcjlC,SAI5B,UA9DR,SAyEDpD,EAAOkZ,UAAY,SAAUxU,EAAMxE,EAASsoC,GAC3C,IAAM9jC,GAAwB,gBAATA,GACpB,MAAO,KAEgB,kBAAZxE,KACXsoC,EAActoC,EACdA,GAAU,GAEXA,EAAUA,GAAWnB,CAErB,IAAI0pC,GAAS9vB,EAAWpN,KAAM7G,GAC7B+gB,GAAW+iB,KAGZ,OAAKC,IACKvoC,EAAQ4M,cAAe27B,EAAQ,MAGzCA,EAASjjB,IAAiB9gB,GAAQxE,EAASulB,GAEtCA,GAAWA,EAAQ1kB,QACvBf,EAAQylB,GAAUhK,SAGZzb,EAAOuB,SAAWknC,EAAO79B,aAKjC,IAAI89B,IAAQ1oC,EAAOG,GAAGmrB,IAKtBtrB,GAAOG,GAAGmrB,KAAO,SAAUkX,EAAKmG,EAAQjnC,GACvC,GAAoB,gBAAR8gC,IAAoBkG,GAC/B,MAAOA,IAAM5mC,MAAO3C,KAAM4C,UAG3B,IAAI9B,GAAU6D,EAAMg+B,EACnB/oB,EAAO5Z,KACP8e,EAAMukB,EAAI/iC,QAAS,IAsDpB,OApDKwe,GAAM,KACVhe,EAAWD,EAAO2E,KAAM69B,EAAIljC,MAAO2e,EAAKukB,EAAIzhC,SAC5CyhC,EAAMA,EAAIljC,MAAO,EAAG2e,IAIhBje,EAAOiD,WAAY0lC,IAGvBjnC,EAAWinC,EACXA,EAASvlC,QAGEulC,GAA4B,gBAAXA,KAC5B7kC,EAAO,QAIHiV,EAAKhY,OAAS,GAClBf,EAAOsjC,MACNd,IAAKA,EAKL1+B,KAAMA,GAAQ,MACd08B,SAAU,OACV97B,KAAMikC,IACH/gC,KAAM,SAAU2/B,GAGnBzF,EAAW//B,UAEXgX,EAAKoV,KAAMluB,EAIVD,EAAQ,SAAU4uB,OAAQ5uB,EAAOkZ,UAAWquB,IAAiB34B,KAAM3O,GAGnEsnC,KAKErrB,OAAQxa,GAAY,SAAUi/B,EAAO8D,GACxC1rB,EAAKtX,KAAM,WACVC,EAASI,MAAO3C,KAAM2iC,IAAcnB,EAAM4G,aAAc9C,EAAQ9D,QAK5DxhC,MAORa,EAAOyB,MACN,YACA,WACA,eACA,YACA,cACA,YACE,SAAUI,EAAGiC,GACf9D,EAAOG,GAAI2D,GAAS,SAAU3D,GAC7B,MAAOhB,MAAK0nB,GAAI/iB,EAAM3D,MAOxBH,EAAOkQ,KAAK8E,QAAQ4zB,SAAW,SAAUhnC,GACxC,MAAO5B,GAAO0F,KAAM1F,EAAOu6B,OAAQ,SAAUp6B,GAC5C,MAAOyB,KAASzB,EAAGyB,OAChBb,OAUL,SAAS8nC,IAAWjnC,GACnB,MAAO5B,GAAOgE,SAAUpC,GACvBA,EACkB,IAAlBA,EAAK0C,SACJ1C,EAAKuM,aAAevM,EAAKonB,cACzB,EAGHhpB,EAAO8oC,QACNC,UAAW,SAAUnnC,EAAMiB,EAAShB,GACnC,GAAImnC,GAAaC,EAASC,EAAWC,EAAQC,EAAWC,EAAYC,EACnE/V,EAAWvzB,EAAO4hB,IAAKhgB,EAAM,YAC7B2nC,EAAUvpC,EAAQ4B,GAClBuoB,IAGiB,YAAboJ,IACJ3xB,EAAKmd,MAAMwU,SAAW,YAGvB6V,EAAYG,EAAQT,SACpBI,EAAYlpC,EAAO4hB,IAAKhgB,EAAM,OAC9BynC,EAAarpC,EAAO4hB,IAAKhgB,EAAM,QAC/B0nC,GAAmC,aAAb/V,GAAwC,UAAbA,IAChDvzB,EAAOuF,QAAS,QAAU2jC,EAAWG,IAAiB,GAIlDC,GACJN,EAAcO,EAAQhW,WACtB4V,EAASH,EAAY56B,IACrB66B,EAAUD,EAAYtW,OAEtByW,EAAShlC,WAAY+kC,IAAe,EACpCD,EAAU9kC,WAAYklC,IAAgB,GAGlCrpC,EAAOiD,WAAYJ,KAGvBA,EAAUA,EAAQ5B,KAAMW,EAAMC,EAAG7B,EAAOwC,UAAY4mC,KAGjC,MAAfvmC,EAAQuL,MACZ+b,EAAM/b,IAAQvL,EAAQuL,IAAMg7B,EAAUh7B,IAAQ+6B,GAE1B,MAAhBtmC,EAAQ6vB,OACZvI,EAAMuI,KAAS7vB,EAAQ6vB,KAAO0W,EAAU1W,KAASuW,GAG7C,SAAWpmC,GACfA,EAAQ2mC,MAAMvoC,KAAMW,EAAMuoB,GAE1Bof,EAAQ3nB,IAAKuI,KAKhBnqB,EAAOG,GAAGqC,QACTsmC,OAAQ,SAAUjmC,GACjB,GAAKd,UAAUhB,OACd,MAAmBqC,UAAZP,EACN1D,KACAA,KAAKsC,KAAM,SAAUI,GACpB7B,EAAO8oC,OAAOC,UAAW5pC,KAAM0D,EAAShB,IAI3C,IAAIwF,GAASoiC,EACZC,GAAQt7B,IAAK,EAAGskB,KAAM,GACtB9wB,EAAOzC,KAAM,GACb+O,EAAMtM,GAAQA,EAAK0J,aAEpB,IAAM4C,EAON,MAHA7G,GAAU6G,EAAIJ,gBAGR9N,EAAOyH,SAAUJ,EAASzF,IAMW,mBAA/BA,GAAKg0B,wBAChB8T,EAAM9nC,EAAKg0B,yBAEZ6T,EAAMZ,GAAW36B,IAEhBE,IAAKs7B,EAAIt7B,KAASq7B,EAAIE,aAAetiC,EAAQ6jB,YAAiB7jB,EAAQ8jB,WAAc,GACpFuH,KAAMgX,EAAIhX,MAAS+W,EAAIG,aAAeviC,EAAQyjB,aAAiBzjB,EAAQ0jB,YAAc,KAX9E2e,GAeTnW,SAAU,WACT,GAAMp0B,KAAM,GAAZ,CAIA,GAAI0qC,GAAcf,EACjBgB,GAAiB17B,IAAK,EAAGskB,KAAM,GAC/B9wB,EAAOzC,KAAM,EA2Bd,OAvBwC,UAAnCa,EAAO4hB,IAAKhgB,EAAM,YAGtBknC,EAASlnC,EAAKg0B,yBAIdiU,EAAe1qC,KAAK0qC,eAGpBf,EAAS3pC,KAAK2pC,SACR9oC,EAAO+E,SAAU8kC,EAAc,GAAK,UACzCC,EAAeD,EAAaf,UAI7BgB,EAAa17B,KAAQpO,EAAO4hB,IAAKioB,EAAc,GAAK,kBAAkB,GACtEC,EAAapX,MAAQ1yB,EAAO4hB,IAAKioB,EAAc,GAAK,mBAAmB,KAOvEz7B,IAAM06B,EAAO16B,IAAO07B,EAAa17B,IAAMpO,EAAO4hB,IAAKhgB,EAAM,aAAa,GACtE8wB,KAAMoW,EAAOpW,KAAOoX,EAAapX,KAAO1yB,EAAO4hB,IAAKhgB,EAAM,cAAc,MAI1EioC,aAAc,WACb,MAAO1qC,MAAKwC,IAAK,WAChB,GAAIkoC,GAAe1qC,KAAK0qC,YAExB,OAAQA,IAAmB7pC,EAAO+E,SAAU8kC,EAAc,SACd,WAA3C7pC,EAAO4hB,IAAKioB,EAAc,YAC1BA,EAAeA,EAAaA,YAE7B,OAAOA,IAAgB/7B,QAM1B9N,EAAOyB,MAAQqpB,WAAY,cAAeI,UAAW,eAAiB,SAAU4Z,EAAQhjB,GACvF,GAAI1T,GAAM,IAAIvC,KAAMiW,EAEpB9hB,GAAOG,GAAI2kC,GAAW,SAAUz0B,GAC/B,MAAOoS,GAAQtjB,KAAM,SAAUyC,EAAMkjC,EAAQz0B,GAC5C,GAAIo5B,GAAMZ,GAAWjnC,EAErB,OAAawB,UAARiN,EACGo5B,EAAQ3nB,IAAQ2nB,GAAQA,EAAK3nB,GACnC2nB,EAAI1qC,SAAS+O,gBAAiBg3B,GAC9BljC,EAAMkjC,QAGH2E,EACJA,EAAIM,SACF37B,EAAYpO,EAAQypC,GAAM3e,aAApBza,EACPjC,EAAMiC,EAAMrQ,EAAQypC,GAAMve,aAI3BtpB,EAAMkjC,GAAWz0B,IAEhBy0B,EAAQz0B,EAAKtO,UAAUhB,OAAQ,SASpCf,EAAOyB,MAAQ,MAAO,QAAU,SAAUI,EAAGigB,GAC5C9hB,EAAO20B,SAAU7S,GAASiR,GAAcjzB,EAAQwxB,cAC/C,SAAU1vB,EAAMywB,GACf,MAAKA,IACJA,EAAWJ,GAAQrwB,EAAMkgB,GAGlBoO,GAAUrkB,KAAMwmB,GACtBryB,EAAQ4B,GAAO2xB,WAAYzR,GAAS,KACpCuQ,GANF,WAcHryB,EAAOyB,MAAQuoC,OAAQ,SAAUC,MAAO,SAAW,SAAUrnC,EAAMkB,GAClE9D,EAAOyB;AAAQq0B,QAAS,QAAUlzB,EAAM0qB,QAASxpB,EAAMomC,GAAI,QAAUtnC,GACrE,SAAUunC,EAAcC,GAGvBpqC,EAAOG,GAAIiqC,GAAa,SAAUvU,EAAQ7vB,GACzC,GAAI0c,GAAY3gB,UAAUhB,SAAYopC,GAAkC,iBAAXtU,IAC5DvB,EAAQ6V,IAAkBtU,KAAW,GAAQ7vB,KAAU,EAAO,SAAW,SAE1E,OAAOyc,GAAQtjB,KAAM,SAAUyC,EAAMkC,EAAMkC,GAC1C,GAAIkI,EAEJ,OAAKlO,GAAOgE,SAAUpC,GAKdA,EAAK7C,SAAS+O,gBAAiB,SAAWlL,GAI3B,IAAlBhB,EAAK0C,UACT4J,EAAMtM,EAAKkM,gBAMJxK,KAAKkC,IACX5D,EAAKid,KAAM,SAAWjc,GAAQsL,EAAK,SAAWtL,GAC9ChB,EAAKid,KAAM,SAAWjc,GAAQsL,EAAK,SAAWtL,GAC9CsL,EAAK,SAAWtL,KAIDQ,SAAV4C,EAGNhG,EAAO4hB,IAAKhgB,EAAMkC,EAAMwwB,GAGxBt0B,EAAO+e,MAAOnd,EAAMkC,EAAMkC,EAAOsuB,IAChCxwB,EAAM4e,EAAYmT,EAASzyB,OAAWsf,EAAW,WAMvD1iB,EAAOG,GAAGqC,QAET6nC,KAAM,SAAUvjB,EAAOpiB,EAAMvE,GAC5B,MAAOhB,MAAK0nB,GAAIC,EAAO,KAAMpiB,EAAMvE,IAEpCmqC,OAAQ,SAAUxjB,EAAO3mB,GACxB,MAAOhB,MAAK8e,IAAK6I,EAAO,KAAM3mB,IAG/BoqC,SAAU,SAAUtqC,EAAU6mB,EAAOpiB,EAAMvE,GAC1C,MAAOhB,MAAK0nB,GAAIC,EAAO7mB,EAAUyE,EAAMvE,IAExCqqC,WAAY,SAAUvqC,EAAU6mB,EAAO3mB,GAGtC,MAA4B,KAArB4B,UAAUhB,OAChB5B,KAAK8e,IAAKhe,EAAU,MACpBd,KAAK8e,IAAK6I,EAAO7mB,GAAY,KAAME,MAKtCH,EAAOG,GAAGsqC,KAAO,WAChB,MAAOtrC,MAAK4B,QAGbf,EAAOG,GAAGuqC,QAAU1qC,EAAOG,GAAG8Z,QAkBP,kBAAX0wB,SAAyBA,OAAOC,KAC3CD,OAAQ,YAAc,WACrB,MAAO3qC,IAMT,IAGC6qC,IAAU3rC,EAAOc,OAGjB8qC,GAAK5rC,EAAO6rC,CAqBb,OAnBA/qC,GAAOgrC,WAAa,SAAUhoC,GAS7B,MARK9D,GAAO6rC,IAAM/qC,IACjBd,EAAO6rC,EAAID,IAGP9nC,GAAQ9D,EAAOc,SAAWA,IAC9Bd,EAAOc,OAAS6qC,IAGV7qC,GAMFZ,IACLF,EAAOc,OAASd,EAAO6rC,EAAI/qC,GAGrBA","file":"jquery.min.js"}
\ No newline at end of file
+{"version":3,"sources":["jquery.js"],"names":["global","factory","module","exports","document","w","Error","window","this","noGlobal","deletedIds","slice","concat","push","indexOf","class2type","toString","hasOwn","hasOwnProperty","support","version","jQuery","selector","context","fn","init","rtrim","rmsPrefix","rdashAlpha","fcamelCase","all","letter","toUpperCase","prototype","jquery","constructor","length","toArray","call","get","num","pushStack","elems","ret","merge","prevObject","each","callback","map","elem","i","apply","arguments","first","eq","last","len","j","end","sort","splice","extend","src","copyIsArray","copy","name","options","clone","target","deep","isFunction","isPlainObject","isArray","undefined","expando","Math","random","replace","isReady","error","msg","noop","obj","type","Array","isWindow","isNumeric","realStringObj","parseFloat","isEmptyObject","key","nodeType","e","ownFirst","globalEval","data","trim","execScript","camelCase","string","nodeName","toLowerCase","isArrayLike","text","makeArray","arr","results","Object","inArray","max","second","grep","invert","callbackInverse","matches","callbackExpect","arg","value","guid","proxy","args","tmp","now","Date","Symbol","iterator","split","Sizzle","Expr","getText","isXML","tokenize","compile","select","outermostContext","sortInput","hasDuplicate","setDocument","docElem","documentIsHTML","rbuggyQSA","rbuggyMatches","contains","preferredDoc","dirruns","done","classCache","createCache","tokenCache","compilerCache","sortOrder","a","b","MAX_NEGATIVE","pop","push_native","list","booleans","whitespace","identifier","attributes","pseudos","rwhitespace","RegExp","rcomma","rcombinators","rattributeQuotes","rpseudo","ridentifier","matchExpr","ID","CLASS","TAG","ATTR","PSEUDO","CHILD","bool","needsContext","rinputs","rheader","rnative","rquickExpr","rsibling","rescape","runescape","funescape","_","escaped","escapedWhitespace","high","String","fromCharCode","unloadHandler","childNodes","els","seed","m","nid","nidselect","match","groups","newSelector","newContext","ownerDocument","exec","getElementById","id","getElementsByTagName","getElementsByClassName","qsa","test","getAttribute","setAttribute","toSelector","join","testContext","parentNode","querySelectorAll","qsaError","removeAttribute","keys","cache","cacheLength","shift","markFunction","assert","div","createElement","removeChild","addHandle","attrs","handler","attrHandle","siblingCheck","cur","diff","sourceIndex","nextSibling","createInputPseudo","createButtonPseudo","createPositionalPseudo","argument","matchIndexes","documentElement","node","hasCompare","parent","doc","defaultView","top","addEventListener","attachEvent","className","appendChild","createComment","getById","getElementsByName","find","filter","attrId","getAttributeNode","tag","innerHTML","input","matchesSelector","webkitMatchesSelector","mozMatchesSelector","oMatchesSelector","msMatchesSelector","disconnectedMatch","compareDocumentPosition","adown","bup","compare","sortDetached","aup","ap","bp","unshift","expr","elements","attr","val","specified","uniqueSort","duplicates","detectDuplicates","sortStable","textContent","firstChild","nodeValue","selectors","createPseudo","relative",">","dir"," ","+","~","preFilter","excess","unquoted","nodeNameSelector","pattern","operator","check","result","what","simple","forward","ofType","xml","uniqueCache","outerCache","nodeIndex","start","useCache","lastChild","uniqueID","pseudo","setFilters","idx","matched","not","matcher","unmatched","has","innerText","lang","elemLang","hash","location","root","focus","activeElement","hasFocus","href","tabIndex","enabled","disabled","checked","selected","selectedIndex","empty","header","button","even","odd","lt","gt","radio","checkbox","file","password","image","submit","reset","filters","parseOnly","tokens","soFar","preFilters","cached","addCombinator","combinator","base","checkNonElements","doneName","oldCache","newCache","elementMatcher","matchers","multipleContexts","contexts","condense","newUnmatched","mapped","setMatcher","postFilter","postFinder","postSelector","temp","preMap","postMap","preexisting","matcherIn","matcherOut","matcherFromTokens","checkContext","leadingRelative","implicitRelative","matchContext","matchAnyContext","matcherFromGroupMatchers","elementMatchers","setMatchers","bySet","byElement","superMatcher","outermost","matchedCount","setMatched","contextBackup","dirrunsUnique","token","compiled","div1","defaultValue","unique","isXMLDoc","until","truncate","is","siblings","n","rneedsContext","rsingleTag","risSimple","winnow","qualifier","self","rootjQuery","charAt","parseHTML","ready","rparentsprev","guaranteedUnique","children","contents","next","prev","targets","closest","l","pos","index","prevAll","add","addBack","sibling","parents","parentsUntil","nextAll","nextUntil","prevUntil","contentDocument","contentWindow","reverse","rnotwhite","createOptions","object","flag","Callbacks","firing","memory","fired","locked","queue","firingIndex","fire","once","stopOnFalse","remove","disable","lock","fireWith","Deferred","func","tuples","state","promise","always","deferred","fail","then","fns","newDefer","tuple","returned","progress","notify","resolve","reject","pipe","stateString","when","subordinate","resolveValues","remaining","updateFunc","values","progressValues","notifyWith","resolveWith","progressContexts","resolveContexts","readyList","readyWait","holdReady","hold","wait","triggerHandler","off","detach","removeEventListener","completed","detachEvent","event","readyState","doScroll","setTimeout","frameElement","doScrollCheck","inlineBlockNeedsLayout","body","container","style","cssText","zoom","offsetWidth","deleteExpando","acceptData","noData","rbrace","rmultiDash","dataAttr","parseJSON","isEmptyDataObject","internalData","pvt","thisCache","internalKey","isNode","toJSON","internalRemoveData","cleanData","applet ","embed ","object ","hasData","removeData","_data","_removeData","dequeue","startLength","hooks","_queueHooks","stop","setter","clearQueue","count","defer","shrinkWrapBlocksVal","shrinkWrapBlocks","width","pnum","source","rcssNum","cssExpand","isHidden","el","css","adjustCSS","prop","valueParts","tween","adjusted","scale","maxIterations","currentValue","initial","unit","cssNumber","initialInUnit","access","chainable","emptyGet","raw","bulk","rcheckableType","rtagName","rscriptType","rleadingWhitespace","nodeNames","createSafeFragment","safeFrag","createDocumentFragment","fragment","leadingWhitespace","tbody","htmlSerialize","html5Clone","cloneNode","outerHTML","appendChecked","noCloneChecked","checkClone","noCloneEvent","wrapMap","option","legend","area","param","thead","tr","col","td","_default","optgroup","tfoot","colgroup","caption","th","getAll","found","setGlobalEval","refElements","rhtml","rtbody","fixDefaultChecked","defaultChecked","buildFragment","scripts","selection","ignored","wrap","safe","nodes","htmlPrefilter","createTextNode","eventName","change","focusin","rformElems","rkeyEvent","rmouseEvent","rfocusMorph","rtypenamespace","returnTrue","returnFalse","safeActiveElement","err","on","types","one","origFn","events","t","handleObjIn","special","eventHandle","handleObj","handlers","namespaces","origType","elemData","handle","triggered","dispatch","delegateType","bindType","namespace","delegateCount","setup","mappedTypes","origCount","teardown","removeEvent","trigger","onlyHandlers","ontype","bubbleType","eventPath","Event","isTrigger","rnamespace","noBubble","parentWindow","isPropagationStopped","preventDefault","isDefaultPrevented","fix","handlerQueue","delegateTarget","preDispatch","currentTarget","isImmediatePropagationStopped","stopPropagation","postDispatch","sel","isNaN","originalEvent","fixHook","fixHooks","mouseHooks","keyHooks","props","srcElement","metaKey","original","which","charCode","keyCode","eventDoc","fromElement","pageX","clientX","scrollLeft","clientLeft","pageY","clientY","scrollTop","clientTop","relatedTarget","toElement","load","blur","click","beforeunload","returnValue","simulate","isSimulated","defaultPrevented","timeStamp","cancelBubble","stopImmediatePropagation","mouseenter","mouseleave","pointerenter","pointerleave","orig","related","form","_submitBubble","propertyName","_justChanged","attaches","rinlinejQuery","rnoshimcache","rxhtmlTag","rnoInnerhtml","rchecked","rscriptTypeMasked","rcleanScript","safeFragment","fragmentDiv","manipulationTarget","content","disableScript","restoreScript","cloneCopyEvent","dest","oldData","curData","fixCloneNodeIssues","defaultSelected","domManip","collection","hasScripts","iNoClone","html","_evalUrl","keepData","dataAndEvents","deepDataAndEvents","destElements","srcElements","inPage","forceAcceptData","append","prepend","insertBefore","before","after","replaceWith","replaceChild","appendTo","prependTo","insertAfter","replaceAll","insert","iframe","elemdisplay","HTML","BODY","actualDisplay","display","defaultDisplay","write","close","rmargin","rnumnonpx","swap","old","pixelPositionVal","pixelMarginRightVal","boxSizingReliableVal","reliableHiddenOffsetsVal","reliableMarginRightVal","reliableMarginLeftVal","computeStyleTests","divStyle","getComputedStyle","marginLeft","marginRight","getClientRects","borderCollapse","offsetHeight","opacity","cssFloat","backgroundClip","clearCloneStyle","boxSizing","MozBoxSizing","WebkitBoxSizing","reliableHiddenOffsets","boxSizingReliable","pixelMarginRight","pixelPosition","reliableMarginRight","reliableMarginLeft","getStyles","curCSS","rposition","view","opener","computed","minWidth","maxWidth","getPropertyValue","currentStyle","left","rs","rsLeft","runtimeStyle","pixelLeft","addGetHookIf","conditionFn","hookFn","ralpha","ropacity","rdisplayswap","rnumsplit","cssShow","position","visibility","cssNormalTransform","letterSpacing","fontWeight","cssPrefixes","emptyStyle","vendorPropName","capName","showHide","show","hidden","setPositiveNumber","subtract","augmentWidthOrHeight","extra","isBorderBox","styles","getWidthOrHeight","valueIsBorderBox","cssHooks","animationIterationCount","columnCount","fillOpacity","flexGrow","flexShrink","lineHeight","order","orphans","widows","zIndex","cssProps","float","origName","set","isFinite","$1","getBoundingClientRect","margin","padding","border","prefix","suffix","expand","expanded","parts","hide","toggle","Tween","easing","propHooks","run","percent","eased","duration","step","fx","linear","p","swing","cos","PI","fxNow","timerId","rfxtypes","rrun","createFxNow","genFx","includeWidth","height","createTween","animation","Animation","tweeners","defaultPrefilter","opts","oldfire","checkDisplay","anim","dataShow","unqueued","overflow","overflowX","overflowY","propFilter","specialEasing","properties","stopped","prefilters","tick","currentTime","startTime","tweens","originalProperties","originalOptions","gotoEnd","rejectWith","timer","complete","*","tweener","prefilter","speed","opt","speeds","fadeTo","to","animate","optall","doAnimation","finish","stopQueue","timers","cssFn","slideDown","slideUp","slideToggle","fadeIn","fadeOut","fadeToggle","interval","setInterval","clearInterval","slow","fast","delay","time","timeout","clearTimeout","getSetAttribute","hrefNormalized","checkOn","optSelected","enctype","optDisabled","radioValue","rreturn","rspaces","valHooks","optionSet","scrollHeight","nodeHook","boolHook","ruseDefault","getSetInput","removeAttr","nType","attrHooks","propName","attrNames","propFix","getter","setAttributeNode","createAttribute","coords","contenteditable","rfocusable","rclickable","removeProp","tabindex","parseInt","for","class","rclass","getClass","addClass","classes","curValue","clazz","finalValue","removeClass","toggleClass","stateVal","classNames","hasClass","hover","fnOver","fnOut","nonce","rquery","rvalidtokens","JSON","parse","requireNonComma","depth","str","comma","open","Function","parseXML","DOMParser","parseFromString","ActiveXObject","async","loadXML","rhash","rts","rheaders","rlocalProtocol","rnoContent","rprotocol","rurl","transports","allTypes","ajaxLocation","ajaxLocParts","addToPrefiltersOrTransports","structure","dataTypeExpression","dataType","dataTypes","inspectPrefiltersOrTransports","jqXHR","inspected","seekingTransport","inspect","prefilterOrFactory","dataTypeOrTransport","ajaxExtend","flatOptions","ajaxSettings","ajaxHandleResponses","s","responses","firstDataType","ct","finalDataType","mimeType","getResponseHeader","converters","ajaxConvert","response","isSuccess","conv2","current","conv","responseFields","dataFilter","active","lastModified","etag","url","isLocal","processData","contentType","accepts","json","* text","text html","text json","text xml","ajaxSetup","settings","ajaxPrefilter","ajaxTransport","ajax","cacheURL","responseHeadersString","timeoutTimer","fireGlobals","transport","responseHeaders","callbackContext","globalEventContext","completeDeferred","statusCode","requestHeaders","requestHeadersNames","strAbort","getAllResponseHeaders","setRequestHeader","lname","overrideMimeType","code","status","abort","statusText","finalText","success","method","crossDomain","traditional","hasContent","ifModified","headers","beforeSend","send","nativeStatusText","modified","getJSON","getScript","throws","wrapAll","wrapInner","unwrap","getDisplay","filterHidden","visible","r20","rbracket","rCRLF","rsubmitterTypes","rsubmittable","buildParams","v","encodeURIComponent","serialize","serializeArray","xhr","createActiveXHR","documentMode","createStandardXHR","xhrId","xhrCallbacks","xhrSupported","cors","username","xhrFields","isAbort","onreadystatechange","responseText","XMLHttpRequest","script","text script","head","scriptCharset","charset","onload","oldCallbacks","rjsonp","jsonp","jsonpCallback","originalSettings","callbackName","overwritten","responseContainer","jsonProp","keepScripts","parsed","_load","params","animated","getWindow","offset","setOffset","curPosition","curLeft","curCSSTop","curTop","curOffset","curCSSLeft","calculatePosition","curElem","using","win","box","pageYOffset","pageXOffset","offsetParent","parentOffset","scrollTo","Height","Width","","defaultExtra","funcName","bind","unbind","delegate","undelegate","size","andSelf","define","amd","_jQuery","_$","$","noConflict"],"mappings":"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","file":"jquery.min.js"}
\ No newline at end of file
diff --git a/civicrm/bower_components/jquery/external/npo/npo.js b/civicrm/bower_components/jquery/external/npo/npo.js
new file mode 100644
index 0000000000000000000000000000000000000000..1984691f13ae5dfcfb3e5d7c075e55c1adb2ffa4
--- /dev/null
+++ b/civicrm/bower_components/jquery/external/npo/npo.js
@@ -0,0 +1,5 @@
+/*! Native Promise Only
+    v0.7.8-a (c) Kyle Simpson
+    MIT License: http://getify.mit-license.org
+*/
+!function(t,n,e){n[t]=n[t]||e(),"undefined"!=typeof module&&module.exports?module.exports=n[t]:"function"==typeof define&&define.amd&&define(function(){return n[t]})}("Promise","undefined"!=typeof global?global:this,function(){"use strict";function t(t,n){l.add(t,n),h||(h=y(l.drain))}function n(t){var n,e=typeof t;return null==t||"object"!=e&&"function"!=e||(n=t.then),"function"==typeof n?n:!1}function e(){for(var t=0;t<this.chain.length;t++)o(this,1===this.state?this.chain[t].success:this.chain[t].failure,this.chain[t]);this.chain.length=0}function o(t,e,o){var r,i;try{e===!1?o.reject(t.msg):(r=e===!0?t.msg:e.call(void 0,t.msg),r===o.promise?o.reject(TypeError("Promise-chain cycle")):(i=n(r))?i.call(r,o.resolve,o.reject):o.resolve(r))}catch(c){o.reject(c)}}function r(o){var c,u,a=this;if(!a.triggered){a.triggered=!0,a.def&&(a=a.def);try{(c=n(o))?(u=new f(a),c.call(o,function(){r.apply(u,arguments)},function(){i.apply(u,arguments)})):(a.msg=o,a.state=1,a.chain.length>0&&t(e,a))}catch(s){i.call(u||new f(a),s)}}}function i(n){var o=this;o.triggered||(o.triggered=!0,o.def&&(o=o.def),o.msg=n,o.state=2,o.chain.length>0&&t(e,o))}function c(t,n,e,o){for(var r=0;r<n.length;r++)!function(r){t.resolve(n[r]).then(function(t){e(r,t)},o)}(r)}function f(t){this.def=t,this.triggered=!1}function u(t){this.promise=t,this.state=0,this.triggered=!1,this.chain=[],this.msg=void 0}function a(n){if("function"!=typeof n)throw TypeError("Not a function");if(0!==this.__NPO__)throw TypeError("Not a promise");this.__NPO__=1;var o=new u(this);this.then=function(n,r){var i={success:"function"==typeof n?n:!0,failure:"function"==typeof r?r:!1};return i.promise=new this.constructor(function(t,n){if("function"!=typeof t||"function"!=typeof n)throw TypeError("Not a function");i.resolve=t,i.reject=n}),o.chain.push(i),0!==o.state&&t(e,o),i.promise},this["catch"]=function(t){return this.then(void 0,t)};try{n.call(void 0,function(t){r.call(o,t)},function(t){i.call(o,t)})}catch(c){i.call(o,c)}}var s,h,l,p=Object.prototype.toString,y="undefined"!=typeof setImmediate?function(t){return setImmediate(t)}:setTimeout;try{Object.defineProperty({},"x",{}),s=function(t,n,e,o){return Object.defineProperty(t,n,{value:e,writable:!0,configurable:o!==!1})}}catch(d){s=function(t,n,e){return t[n]=e,t}}l=function(){function t(t,n){this.fn=t,this.self=n,this.next=void 0}var n,e,o;return{add:function(r,i){o=new t(r,i),e?e.next=o:n=o,e=o,o=void 0},drain:function(){var t=n;for(n=e=h=void 0;t;)t.fn.call(t.self),t=t.next}}}();var g=s({},"constructor",a,!1);return a.prototype=g,s(g,"__NPO__",0,!1),s(a,"resolve",function(t){var n=this;return t&&"object"==typeof t&&1===t.__NPO__?t:new n(function(n,e){if("function"!=typeof n||"function"!=typeof e)throw TypeError("Not a function");n(t)})}),s(a,"reject",function(t){return new this(function(n,e){if("function"!=typeof n||"function"!=typeof e)throw TypeError("Not a function");e(t)})}),s(a,"all",function(t){var n=this;return"[object Array]"!=p.call(t)?n.reject(TypeError("Not an array")):0===t.length?n.resolve([]):new n(function(e,o){if("function"!=typeof e||"function"!=typeof o)throw TypeError("Not a function");var r=t.length,i=Array(r),f=0;c(n,t,function(t,n){i[t]=n,++f===r&&e(i)},o)})}),s(a,"race",function(t){var n=this;return"[object Array]"!=p.call(t)?n.reject(TypeError("Not an array")):new n(function(e,o){if("function"!=typeof e||"function"!=typeof o)throw TypeError("Not a function");c(n,t,function(t,n){e(n)},o)})}),a});
diff --git a/civicrm/bower_components/jquery/external/qunit-assert-step/MIT-LICENSE.txt b/civicrm/bower_components/jquery/external/qunit-assert-step/MIT-LICENSE.txt
new file mode 100644
index 0000000000000000000000000000000000000000..aed5dc97ec522694847559c2539584aa4e23b177
--- /dev/null
+++ b/civicrm/bower_components/jquery/external/qunit-assert-step/MIT-LICENSE.txt
@@ -0,0 +1,21 @@
+Copyright jQuery Foundation and other contributors
+http://jquery.com/
+
+Permission is hereby granted, free of charge, to any person obtaining
+a copy of this software and associated documentation files (the
+"Software"), to deal in the Software without restriction, including
+without limitation the rights to use, copy, modify, merge, publish,
+distribute, sublicense, and/or sell copies of the Software, and to
+permit persons to whom the Software is furnished to do so, subject to
+the following conditions:
+
+The above copyright notice and this permission notice shall be
+included in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
diff --git a/civicrm/bower_components/jquery/external/qunit-assert-step/qunit-assert-step.js b/civicrm/bower_components/jquery/external/qunit-assert-step/qunit-assert-step.js
new file mode 100644
index 0000000000000000000000000000000000000000..90bca18cf6ef11f9d5d5a635f322e082204a885b
--- /dev/null
+++ b/civicrm/bower_components/jquery/external/qunit-assert-step/qunit-assert-step.js
@@ -0,0 +1,26 @@
+QUnit.extend( QUnit.assert, {
+
+	/**
+	 * Check the sequence/order
+	 *
+	 * @example test('Example unit test', function(assert) { assert.step(1); setTimeout(function () { assert.step(3); start(); }, 100); assert.step(2); stop(); });
+	 * @param Number expected The excepted step within the test()
+	 * @param String message (optional)
+	 */
+	step: function (expected, message) {
+		// increment internal step counter.
+		QUnit.config.current.step++;
+		if (typeof message === "undefined") {
+			message = "step " + expected;
+		}
+		var actual = QUnit.config.current.step;
+		QUnit.push(QUnit.equiv(actual, expected), actual, expected, message);
+	}
+});
+
+/**
+ * Reset the step counter for every test()
+ */
+QUnit.testStart(function () {
+	QUnit.config.current.step = 0;
+});
diff --git a/civicrm/bower_components/jquery/external/qunit/LICENSE.txt b/civicrm/bower_components/jquery/external/qunit/LICENSE.txt
new file mode 100644
index 0000000000000000000000000000000000000000..fb928a54325dd94ecc7aa87fb10ec29a8b92f7d1
--- /dev/null
+++ b/civicrm/bower_components/jquery/external/qunit/LICENSE.txt
@@ -0,0 +1,36 @@
+Copyright jQuery Foundation and other contributors, https://jquery.org/
+
+This software consists of voluntary contributions made by many
+individuals. For exact contribution history, see the revision history
+available at https://github.com/jquery/qunit
+
+The following license applies to all parts of this software except as
+documented below:
+
+====
+
+Permission is hereby granted, free of charge, to any person obtaining
+a copy of this software and associated documentation files (the
+"Software"), to deal in the Software without restriction, including
+without limitation the rights to use, copy, modify, merge, publish,
+distribute, sublicense, and/or sell copies of the Software, and to
+permit persons to whom the Software is furnished to do so, subject to
+the following conditions:
+
+The above copyright notice and this permission notice shall be
+included in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+
+====
+
+All files located in the node_modules and external directories are
+externally maintained libraries used by this software which have their
+own licenses; we recommend you read them, as their terms may differ from
+the terms above.
diff --git a/civicrm/bower_components/jquery/external/qunit/qunit.css b/civicrm/bower_components/jquery/external/qunit/qunit.css
new file mode 100644
index 0000000000000000000000000000000000000000..0eb0b0171daac2f53e38bb496e5b04d9ee4ffd19
--- /dev/null
+++ b/civicrm/bower_components/jquery/external/qunit/qunit.css
@@ -0,0 +1,280 @@
+/*!
+ * QUnit 1.17.1
+ * http://qunitjs.com/
+ *
+ * Copyright jQuery Foundation and other contributors
+ * Released under the MIT license
+ * http://jquery.org/license
+ *
+ * Date: 2015-01-20T19:39Z
+ */
+
+/** Font Family and Sizes */
+
+#qunit-tests, #qunit-header, #qunit-banner, #qunit-testrunner-toolbar, #qunit-userAgent, #qunit-testresult {
+	font-family: "Helvetica Neue Light", "HelveticaNeue-Light", "Helvetica Neue", Calibri, Helvetica, Arial, sans-serif;
+}
+
+#qunit-testrunner-toolbar, #qunit-userAgent, #qunit-testresult, #qunit-tests li { font-size: small; }
+#qunit-tests { font-size: smaller; }
+
+
+/** Resets */
+
+#qunit-tests, #qunit-header, #qunit-banner, #qunit-userAgent, #qunit-testresult, #qunit-modulefilter {
+	margin: 0;
+	padding: 0;
+}
+
+
+/** Header */
+
+#qunit-header {
+	padding: 0.5em 0 0.5em 1em;
+
+	color: #8699A4;
+	background-color: #0D3349;
+
+	font-size: 1.5em;
+	line-height: 1em;
+	font-weight: 400;
+
+	border-radius: 5px 5px 0 0;
+}
+
+#qunit-header a {
+	text-decoration: none;
+	color: #C2CCD1;
+}
+
+#qunit-header a:hover,
+#qunit-header a:focus {
+	color: #FFF;
+}
+
+#qunit-testrunner-toolbar label {
+	display: inline-block;
+	padding: 0 0.5em 0 0.1em;
+}
+
+#qunit-banner {
+	height: 5px;
+}
+
+#qunit-testrunner-toolbar {
+	padding: 0.5em 1em 0.5em 1em;
+	color: #5E740B;
+	background-color: #EEE;
+	overflow: hidden;
+}
+
+#qunit-userAgent {
+	padding: 0.5em 1em 0.5em 1em;
+	background-color: #2B81AF;
+	color: #FFF;
+	text-shadow: rgba(0, 0, 0, 0.5) 2px 2px 1px;
+}
+
+#qunit-modulefilter-container {
+	float: right;
+	padding: 0.2em;
+}
+
+.qunit-url-config {
+	display: inline-block;
+	padding: 0.1em;
+}
+
+.qunit-filter {
+	display: block;
+	float: right;
+	margin-left: 1em;
+}
+
+/** Tests: Pass/Fail */
+
+#qunit-tests {
+	list-style-position: inside;
+}
+
+#qunit-tests li {
+	padding: 0.4em 1em 0.4em 1em;
+	border-bottom: 1px solid #FFF;
+	list-style-position: inside;
+}
+
+#qunit-tests > li {
+	display: none;
+}
+
+#qunit-tests li.running,
+#qunit-tests li.pass,
+#qunit-tests li.fail,
+#qunit-tests li.skipped {
+	display: list-item;
+}
+
+#qunit-tests.hidepass li.running,
+#qunit-tests.hidepass li.pass {
+	display: none;
+}
+
+#qunit-tests li strong {
+	cursor: pointer;
+}
+
+#qunit-tests li.skipped strong {
+	cursor: default;
+}
+
+#qunit-tests li a {
+	padding: 0.5em;
+	color: #C2CCD1;
+	text-decoration: none;
+}
+#qunit-tests li a:hover,
+#qunit-tests li a:focus {
+	color: #000;
+}
+
+#qunit-tests li .runtime {
+	float: right;
+	font-size: smaller;
+}
+
+.qunit-assert-list {
+	margin-top: 0.5em;
+	padding: 0.5em;
+
+	background-color: #FFF;
+
+	border-radius: 5px;
+}
+
+.qunit-collapsed {
+	display: none;
+}
+
+#qunit-tests table {
+	border-collapse: collapse;
+	margin-top: 0.2em;
+}
+
+#qunit-tests th {
+	text-align: right;
+	vertical-align: top;
+	padding: 0 0.5em 0 0;
+}
+
+#qunit-tests td {
+	vertical-align: top;
+}
+
+#qunit-tests pre {
+	margin: 0;
+	white-space: pre-wrap;
+	word-wrap: break-word;
+}
+
+#qunit-tests del {
+	background-color: #E0F2BE;
+	color: #374E0C;
+	text-decoration: none;
+}
+
+#qunit-tests ins {
+	background-color: #FFCACA;
+	color: #500;
+	text-decoration: none;
+}
+
+/*** Test Counts */
+
+#qunit-tests b.counts                       { color: #000; }
+#qunit-tests b.passed                       { color: #5E740B; }
+#qunit-tests b.failed                       { color: #710909; }
+
+#qunit-tests li li {
+	padding: 5px;
+	background-color: #FFF;
+	border-bottom: none;
+	list-style-position: inside;
+}
+
+/*** Passing Styles */
+
+#qunit-tests li li.pass {
+	color: #3C510C;
+	background-color: #FFF;
+	border-left: 10px solid #C6E746;
+}
+
+#qunit-tests .pass                          { color: #528CE0; background-color: #D2E0E6; }
+#qunit-tests .pass .test-name               { color: #366097; }
+
+#qunit-tests .pass .test-actual,
+#qunit-tests .pass .test-expected           { color: #999; }
+
+#qunit-banner.qunit-pass                    { background-color: #C6E746; }
+
+/*** Failing Styles */
+
+#qunit-tests li li.fail {
+	color: #710909;
+	background-color: #FFF;
+	border-left: 10px solid #EE5757;
+	white-space: pre;
+}
+
+#qunit-tests > li:last-child {
+	border-radius: 0 0 5px 5px;
+}
+
+#qunit-tests .fail                          { color: #000; background-color: #EE5757; }
+#qunit-tests .fail .test-name,
+#qunit-tests .fail .module-name             { color: #000; }
+
+#qunit-tests .fail .test-actual             { color: #EE5757; }
+#qunit-tests .fail .test-expected           { color: #008000; }
+
+#qunit-banner.qunit-fail                    { background-color: #EE5757; }
+
+/*** Skipped tests */
+
+#qunit-tests .skipped {
+	background-color: #EBECE9;
+}
+
+#qunit-tests .qunit-skipped-label {
+	background-color: #F4FF77;
+	display: inline-block;
+	font-style: normal;
+	color: #366097;
+	line-height: 1.8em;
+	padding: 0 0.5em;
+	margin: -0.4em 0.4em -0.4em 0;
+}
+
+/** Result */
+
+#qunit-testresult {
+	padding: 0.5em 1em 0.5em 1em;
+
+	color: #2B81AF;
+	background-color: #D2E0E6;
+
+	border-bottom: 1px solid #FFF;
+}
+#qunit-testresult .module-name {
+	font-weight: 700;
+}
+
+/** Fixture */
+
+#qunit-fixture {
+	position: absolute;
+	top: -10000px;
+	left: -10000px;
+	width: 1000px;
+	height: 1000px;
+}
diff --git a/civicrm/bower_components/jquery/external/qunit/qunit.js b/civicrm/bower_components/jquery/external/qunit/qunit.js
new file mode 100644
index 0000000000000000000000000000000000000000..006ca47474b21f11068f34fc9ab4cd1f290bcb97
--- /dev/null
+++ b/civicrm/bower_components/jquery/external/qunit/qunit.js
@@ -0,0 +1,2875 @@
+/*!
+ * QUnit 1.17.1
+ * http://qunitjs.com/
+ *
+ * Copyright jQuery Foundation and other contributors
+ * Released under the MIT license
+ * http://jquery.org/license
+ *
+ * Date: 2015-01-20T19:39Z
+ */
+
+(function( window ) {
+
+var QUnit,
+	config,
+	onErrorFnPrev,
+	loggingCallbacks = {},
+	fileName = ( sourceFromStacktrace( 0 ) || "" ).replace( /(:\d+)+\)?/, "" ).replace( /.+\//, "" ),
+	toString = Object.prototype.toString,
+	hasOwn = Object.prototype.hasOwnProperty,
+	// Keep a local reference to Date (GH-283)
+	Date = window.Date,
+	now = Date.now || function() {
+		return new Date().getTime();
+	},
+	globalStartCalled = false,
+	runStarted = false,
+	setTimeout = window.setTimeout,
+	clearTimeout = window.clearTimeout,
+	defined = {
+		document: window.document !== undefined,
+		setTimeout: window.setTimeout !== undefined,
+		sessionStorage: (function() {
+			var x = "qunit-test-string";
+			try {
+				sessionStorage.setItem( x, x );
+				sessionStorage.removeItem( x );
+				return true;
+			} catch ( e ) {
+				return false;
+			}
+		}())
+	},
+	/**
+	 * Provides a normalized error string, correcting an issue
+	 * with IE 7 (and prior) where Error.prototype.toString is
+	 * not properly implemented
+	 *
+	 * Based on http://es5.github.com/#x15.11.4.4
+	 *
+	 * @param {String|Error} error
+	 * @return {String} error message
+	 */
+	errorString = function( error ) {
+		var name, message,
+			errorString = error.toString();
+		if ( errorString.substring( 0, 7 ) === "[object" ) {
+			name = error.name ? error.name.toString() : "Error";
+			message = error.message ? error.message.toString() : "";
+			if ( name && message ) {
+				return name + ": " + message;
+			} else if ( name ) {
+				return name;
+			} else if ( message ) {
+				return message;
+			} else {
+				return "Error";
+			}
+		} else {
+			return errorString;
+		}
+	},
+	/**
+	 * Makes a clone of an object using only Array or Object as base,
+	 * and copies over the own enumerable properties.
+	 *
+	 * @param {Object} obj
+	 * @return {Object} New object with only the own properties (recursively).
+	 */
+	objectValues = function( obj ) {
+		var key, val,
+			vals = QUnit.is( "array", obj ) ? [] : {};
+		for ( key in obj ) {
+			if ( hasOwn.call( obj, key ) ) {
+				val = obj[ key ];
+				vals[ key ] = val === Object( val ) ? objectValues( val ) : val;
+			}
+		}
+		return vals;
+	};
+
+QUnit = {};
+
+/**
+ * Config object: Maintain internal state
+ * Later exposed as QUnit.config
+ * `config` initialized at top of scope
+ */
+config = {
+	// The queue of tests to run
+	queue: [],
+
+	// block until document ready
+	blocking: true,
+
+	// by default, run previously failed tests first
+	// very useful in combination with "Hide passed tests" checked
+	reorder: true,
+
+	// by default, modify document.title when suite is done
+	altertitle: true,
+
+	// by default, scroll to top of the page when suite is done
+	scrolltop: true,
+
+	// when enabled, all tests must call expect()
+	requireExpects: false,
+
+	// add checkboxes that are persisted in the query-string
+	// when enabled, the id is set to `true` as a `QUnit.config` property
+	urlConfig: [
+		{
+			id: "hidepassed",
+			label: "Hide passed tests",
+			tooltip: "Only show tests and assertions that fail. Stored as query-strings."
+		},
+		{
+			id: "noglobals",
+			label: "Check for Globals",
+			tooltip: "Enabling this will test if any test introduces new properties on the " +
+				"`window` object. Stored as query-strings."
+		},
+		{
+			id: "notrycatch",
+			label: "No try-catch",
+			tooltip: "Enabling this will run tests outside of a try-catch block. Makes debugging " +
+				"exceptions in IE reasonable. Stored as query-strings."
+		}
+	],
+
+	// Set of all modules.
+	modules: [],
+
+	// The first unnamed module
+	currentModule: {
+		name: "",
+		tests: []
+	},
+
+	callbacks: {}
+};
+
+// Push a loose unnamed module to the modules collection
+config.modules.push( config.currentModule );
+
+// Initialize more QUnit.config and QUnit.urlParams
+(function() {
+	var i, current,
+		location = window.location || { search: "", protocol: "file:" },
+		params = location.search.slice( 1 ).split( "&" ),
+		length = params.length,
+		urlParams = {};
+
+	if ( params[ 0 ] ) {
+		for ( i = 0; i < length; i++ ) {
+			current = params[ i ].split( "=" );
+			current[ 0 ] = decodeURIComponent( current[ 0 ] );
+
+			// allow just a key to turn on a flag, e.g., test.html?noglobals
+			current[ 1 ] = current[ 1 ] ? decodeURIComponent( current[ 1 ] ) : true;
+			if ( urlParams[ current[ 0 ] ] ) {
+				urlParams[ current[ 0 ] ] = [].concat( urlParams[ current[ 0 ] ], current[ 1 ] );
+			} else {
+				urlParams[ current[ 0 ] ] = current[ 1 ];
+			}
+		}
+	}
+
+	if ( urlParams.filter === true ) {
+		delete urlParams.filter;
+	}
+
+	QUnit.urlParams = urlParams;
+
+	// String search anywhere in moduleName+testName
+	config.filter = urlParams.filter;
+
+	config.testId = [];
+	if ( urlParams.testId ) {
+
+		// Ensure that urlParams.testId is an array
+		urlParams.testId = [].concat( urlParams.testId );
+		for ( i = 0; i < urlParams.testId.length; i++ ) {
+			config.testId.push( urlParams.testId[ i ] );
+		}
+	}
+
+	// Figure out if we're running the tests from a server or not
+	QUnit.isLocal = location.protocol === "file:";
+}());
+
+// Root QUnit object.
+// `QUnit` initialized at top of scope
+extend( QUnit, {
+
+	// call on start of module test to prepend name to all tests
+	module: function( name, testEnvironment ) {
+		var currentModule = {
+			name: name,
+			testEnvironment: testEnvironment,
+			tests: []
+		};
+
+		// DEPRECATED: handles setup/teardown functions,
+		// beforeEach and afterEach should be used instead
+		if ( testEnvironment && testEnvironment.setup ) {
+			testEnvironment.beforeEach = testEnvironment.setup;
+			delete testEnvironment.setup;
+		}
+		if ( testEnvironment && testEnvironment.teardown ) {
+			testEnvironment.afterEach = testEnvironment.teardown;
+			delete testEnvironment.teardown;
+		}
+
+		config.modules.push( currentModule );
+		config.currentModule = currentModule;
+	},
+
+	// DEPRECATED: QUnit.asyncTest() will be removed in QUnit 2.0.
+	asyncTest: function( testName, expected, callback ) {
+		if ( arguments.length === 2 ) {
+			callback = expected;
+			expected = null;
+		}
+
+		QUnit.test( testName, expected, callback, true );
+	},
+
+	test: function( testName, expected, callback, async ) {
+		var test;
+
+		if ( arguments.length === 2 ) {
+			callback = expected;
+			expected = null;
+		}
+
+		test = new Test({
+			testName: testName,
+			expected: expected,
+			async: async,
+			callback: callback
+		});
+
+		test.queue();
+	},
+
+	skip: function( testName ) {
+		var test = new Test({
+			testName: testName,
+			skip: true
+		});
+
+		test.queue();
+	},
+
+	// DEPRECATED: The functionality of QUnit.start() will be altered in QUnit 2.0.
+	// In QUnit 2.0, invoking it will ONLY affect the `QUnit.config.autostart` blocking behavior.
+	start: function( count ) {
+		var globalStartAlreadyCalled = globalStartCalled;
+
+		if ( !config.current ) {
+			globalStartCalled = true;
+
+			if ( runStarted ) {
+				throw new Error( "Called start() outside of a test context while already started" );
+			} else if ( globalStartAlreadyCalled || count > 1 ) {
+				throw new Error( "Called start() outside of a test context too many times" );
+			} else if ( config.autostart ) {
+				throw new Error( "Called start() outside of a test context when " +
+					"QUnit.config.autostart was true" );
+			} else if ( !config.pageLoaded ) {
+
+				// The page isn't completely loaded yet, so bail out and let `QUnit.load` handle it
+				config.autostart = true;
+				return;
+			}
+		} else {
+
+			// If a test is running, adjust its semaphore
+			config.current.semaphore -= count || 1;
+
+			// Don't start until equal number of stop-calls
+			if ( config.current.semaphore > 0 ) {
+				return;
+			}
+
+			// throw an Error if start is called more often than stop
+			if ( config.current.semaphore < 0 ) {
+				config.current.semaphore = 0;
+
+				QUnit.pushFailure(
+					"Called start() while already started (test's semaphore was 0 already)",
+					sourceFromStacktrace( 2 )
+				);
+				return;
+			}
+		}
+
+		resumeProcessing();
+	},
+
+	// DEPRECATED: QUnit.stop() will be removed in QUnit 2.0.
+	stop: function( count ) {
+
+		// If there isn't a test running, don't allow QUnit.stop() to be called
+		if ( !config.current ) {
+			throw new Error( "Called stop() outside of a test context" );
+		}
+
+		// If a test is running, adjust its semaphore
+		config.current.semaphore += count || 1;
+
+		pauseProcessing();
+	},
+
+	config: config,
+
+	// Safe object type checking
+	is: function( type, obj ) {
+		return QUnit.objectType( obj ) === type;
+	},
+
+	objectType: function( obj ) {
+		if ( typeof obj === "undefined" ) {
+			return "undefined";
+		}
+
+		// Consider: typeof null === object
+		if ( obj === null ) {
+			return "null";
+		}
+
+		var match = toString.call( obj ).match( /^\[object\s(.*)\]$/ ),
+			type = match && match[ 1 ] || "";
+
+		switch ( type ) {
+			case "Number":
+				if ( isNaN( obj ) ) {
+					return "nan";
+				}
+				return "number";
+			case "String":
+			case "Boolean":
+			case "Array":
+			case "Date":
+			case "RegExp":
+			case "Function":
+				return type.toLowerCase();
+		}
+		if ( typeof obj === "object" ) {
+			return "object";
+		}
+		return undefined;
+	},
+
+	extend: extend,
+
+	load: function() {
+		config.pageLoaded = true;
+
+		// Initialize the configuration options
+		extend( config, {
+			stats: { all: 0, bad: 0 },
+			moduleStats: { all: 0, bad: 0 },
+			started: 0,
+			updateRate: 1000,
+			autostart: true,
+			filter: ""
+		}, true );
+
+		config.blocking = false;
+
+		if ( config.autostart ) {
+			resumeProcessing();
+		}
+	}
+});
+
+// Register logging callbacks
+(function() {
+	var i, l, key,
+		callbacks = [ "begin", "done", "log", "testStart", "testDone",
+			"moduleStart", "moduleDone" ];
+
+	function registerLoggingCallback( key ) {
+		var loggingCallback = function( callback ) {
+			if ( QUnit.objectType( callback ) !== "function" ) {
+				throw new Error(
+					"QUnit logging methods require a callback function as their first parameters."
+				);
+			}
+
+			config.callbacks[ key ].push( callback );
+		};
+
+		// DEPRECATED: This will be removed on QUnit 2.0.0+
+		// Stores the registered functions allowing restoring
+		// at verifyLoggingCallbacks() if modified
+		loggingCallbacks[ key ] = loggingCallback;
+
+		return loggingCallback;
+	}
+
+	for ( i = 0, l = callbacks.length; i < l; i++ ) {
+		key = callbacks[ i ];
+
+		// Initialize key collection of logging callback
+		if ( QUnit.objectType( config.callbacks[ key ] ) === "undefined" ) {
+			config.callbacks[ key ] = [];
+		}
+
+		QUnit[ key ] = registerLoggingCallback( key );
+	}
+})();
+
+// `onErrorFnPrev` initialized at top of scope
+// Preserve other handlers
+onErrorFnPrev = window.onerror;
+
+// Cover uncaught exceptions
+// Returning true will suppress the default browser handler,
+// returning false will let it run.
+window.onerror = function( error, filePath, linerNr ) {
+	var ret = false;
+	if ( onErrorFnPrev ) {
+		ret = onErrorFnPrev( error, filePath, linerNr );
+	}
+
+	// Treat return value as window.onerror itself does,
+	// Only do our handling if not suppressed.
+	if ( ret !== true ) {
+		if ( QUnit.config.current ) {
+			if ( QUnit.config.current.ignoreGlobalErrors ) {
+				return true;
+			}
+			QUnit.pushFailure( error, filePath + ":" + linerNr );
+		} else {
+			QUnit.test( "global failure", extend(function() {
+				QUnit.pushFailure( error, filePath + ":" + linerNr );
+			}, { validTest: true } ) );
+		}
+		return false;
+	}
+
+	return ret;
+};
+
+function done() {
+	var runtime, passed;
+
+	config.autorun = true;
+
+	// Log the last module results
+	if ( config.previousModule ) {
+		runLoggingCallbacks( "moduleDone", {
+			name: config.previousModule.name,
+			tests: config.previousModule.tests,
+			failed: config.moduleStats.bad,
+			passed: config.moduleStats.all - config.moduleStats.bad,
+			total: config.moduleStats.all,
+			runtime: now() - config.moduleStats.started
+		});
+	}
+	delete config.previousModule;
+
+	runtime = now() - config.started;
+	passed = config.stats.all - config.stats.bad;
+
+	runLoggingCallbacks( "done", {
+		failed: config.stats.bad,
+		passed: passed,
+		total: config.stats.all,
+		runtime: runtime
+	});
+}
+
+// Doesn't support IE6 to IE9
+// See also https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Error/Stack
+function extractStacktrace( e, offset ) {
+	offset = offset === undefined ? 4 : offset;
+
+	var stack, include, i;
+
+	if ( e.stacktrace ) {
+
+		// Opera 12.x
+		return e.stacktrace.split( "\n" )[ offset + 3 ];
+	} else if ( e.stack ) {
+
+		// Firefox, Chrome, Safari 6+, IE10+, PhantomJS and Node
+		stack = e.stack.split( "\n" );
+		if ( /^error$/i.test( stack[ 0 ] ) ) {
+			stack.shift();
+		}
+		if ( fileName ) {
+			include = [];
+			for ( i = offset; i < stack.length; i++ ) {
+				if ( stack[ i ].indexOf( fileName ) !== -1 ) {
+					break;
+				}
+				include.push( stack[ i ] );
+			}
+			if ( include.length ) {
+				return include.join( "\n" );
+			}
+		}
+		return stack[ offset ];
+	} else if ( e.sourceURL ) {
+
+		// Safari < 6
+		// exclude useless self-reference for generated Error objects
+		if ( /qunit.js$/.test( e.sourceURL ) ) {
+			return;
+		}
+
+		// for actual exceptions, this is useful
+		return e.sourceURL + ":" + e.line;
+	}
+}
+
+function sourceFromStacktrace( offset ) {
+	var e = new Error();
+	if ( !e.stack ) {
+		try {
+			throw e;
+		} catch ( err ) {
+			// This should already be true in most browsers
+			e = err;
+		}
+	}
+	return extractStacktrace( e, offset );
+}
+
+function synchronize( callback, last ) {
+	if ( QUnit.objectType( callback ) === "array" ) {
+		while ( callback.length ) {
+			synchronize( callback.shift() );
+		}
+		return;
+	}
+	config.queue.push( callback );
+
+	if ( config.autorun && !config.blocking ) {
+		process( last );
+	}
+}
+
+function process( last ) {
+	function next() {
+		process( last );
+	}
+	var start = now();
+	config.depth = ( config.depth || 0 ) + 1;
+
+	while ( config.queue.length && !config.blocking ) {
+		if ( !defined.setTimeout || config.updateRate <= 0 ||
+				( ( now() - start ) < config.updateRate ) ) {
+			if ( config.current ) {
+
+				// Reset async tracking for each phase of the Test lifecycle
+				config.current.usedAsync = false;
+			}
+			config.queue.shift()();
+		} else {
+			setTimeout( next, 13 );
+			break;
+		}
+	}
+	config.depth--;
+	if ( last && !config.blocking && !config.queue.length && config.depth === 0 ) {
+		done();
+	}
+}
+
+function begin() {
+	var i, l,
+		modulesLog = [];
+
+	// If the test run hasn't officially begun yet
+	if ( !config.started ) {
+
+		// Record the time of the test run's beginning
+		config.started = now();
+
+		verifyLoggingCallbacks();
+
+		// Delete the loose unnamed module if unused.
+		if ( config.modules[ 0 ].name === "" && config.modules[ 0 ].tests.length === 0 ) {
+			config.modules.shift();
+		}
+
+		// Avoid unnecessary information by not logging modules' test environments
+		for ( i = 0, l = config.modules.length; i < l; i++ ) {
+			modulesLog.push({
+				name: config.modules[ i ].name,
+				tests: config.modules[ i ].tests
+			});
+		}
+
+		// The test run is officially beginning now
+		runLoggingCallbacks( "begin", {
+			totalTests: Test.count,
+			modules: modulesLog
+		});
+	}
+
+	config.blocking = false;
+	process( true );
+}
+
+function resumeProcessing() {
+	runStarted = true;
+
+	// A slight delay to allow this iteration of the event loop to finish (more assertions, etc.)
+	if ( defined.setTimeout ) {
+		setTimeout(function() {
+			if ( config.current && config.current.semaphore > 0 ) {
+				return;
+			}
+			if ( config.timeout ) {
+				clearTimeout( config.timeout );
+			}
+
+			begin();
+		}, 13 );
+	} else {
+		begin();
+	}
+}
+
+function pauseProcessing() {
+	config.blocking = true;
+
+	if ( config.testTimeout && defined.setTimeout ) {
+		clearTimeout( config.timeout );
+		config.timeout = setTimeout(function() {
+			if ( config.current ) {
+				config.current.semaphore = 0;
+				QUnit.pushFailure( "Test timed out", sourceFromStacktrace( 2 ) );
+			} else {
+				throw new Error( "Test timed out" );
+			}
+			resumeProcessing();
+		}, config.testTimeout );
+	}
+}
+
+function saveGlobal() {
+	config.pollution = [];
+
+	if ( config.noglobals ) {
+		for ( var key in window ) {
+			if ( hasOwn.call( window, key ) ) {
+				// in Opera sometimes DOM element ids show up here, ignore them
+				if ( /^qunit-test-output/.test( key ) ) {
+					continue;
+				}
+				config.pollution.push( key );
+			}
+		}
+	}
+}
+
+function checkPollution() {
+	var newGlobals,
+		deletedGlobals,
+		old = config.pollution;
+
+	saveGlobal();
+
+	newGlobals = diff( config.pollution, old );
+	if ( newGlobals.length > 0 ) {
+		QUnit.pushFailure( "Introduced global variable(s): " + newGlobals.join( ", " ) );
+	}
+
+	deletedGlobals = diff( old, config.pollution );
+	if ( deletedGlobals.length > 0 ) {
+		QUnit.pushFailure( "Deleted global variable(s): " + deletedGlobals.join( ", " ) );
+	}
+}
+
+// returns a new Array with the elements that are in a but not in b
+function diff( a, b ) {
+	var i, j,
+		result = a.slice();
+
+	for ( i = 0; i < result.length; i++ ) {
+		for ( j = 0; j < b.length; j++ ) {
+			if ( result[ i ] === b[ j ] ) {
+				result.splice( i, 1 );
+				i--;
+				break;
+			}
+		}
+	}
+	return result;
+}
+
+function extend( a, b, undefOnly ) {
+	for ( var prop in b ) {
+		if ( hasOwn.call( b, prop ) ) {
+
+			// Avoid "Member not found" error in IE8 caused by messing with window.constructor
+			if ( !( prop === "constructor" && a === window ) ) {
+				if ( b[ prop ] === undefined ) {
+					delete a[ prop ];
+				} else if ( !( undefOnly && typeof a[ prop ] !== "undefined" ) ) {
+					a[ prop ] = b[ prop ];
+				}
+			}
+		}
+	}
+
+	return a;
+}
+
+function runLoggingCallbacks( key, args ) {
+	var i, l, callbacks;
+
+	callbacks = config.callbacks[ key ];
+	for ( i = 0, l = callbacks.length; i < l; i++ ) {
+		callbacks[ i ]( args );
+	}
+}
+
+// DEPRECATED: This will be removed on 2.0.0+
+// This function verifies if the loggingCallbacks were modified by the user
+// If so, it will restore it, assign the given callback and print a console warning
+function verifyLoggingCallbacks() {
+	var loggingCallback, userCallback;
+
+	for ( loggingCallback in loggingCallbacks ) {
+		if ( QUnit[ loggingCallback ] !== loggingCallbacks[ loggingCallback ] ) {
+
+			userCallback = QUnit[ loggingCallback ];
+
+			// Restore the callback function
+			QUnit[ loggingCallback ] = loggingCallbacks[ loggingCallback ];
+
+			// Assign the deprecated given callback
+			QUnit[ loggingCallback ]( userCallback );
+
+			if ( window.console && window.console.warn ) {
+				window.console.warn(
+					"QUnit." + loggingCallback + " was replaced with a new value.\n" +
+					"Please, check out the documentation on how to apply logging callbacks.\n" +
+					"Reference: http://api.qunitjs.com/category/callbacks/"
+				);
+			}
+		}
+	}
+}
+
+// from jquery.js
+function inArray( elem, array ) {
+	if ( array.indexOf ) {
+		return array.indexOf( elem );
+	}
+
+	for ( var i = 0, length = array.length; i < length; i++ ) {
+		if ( array[ i ] === elem ) {
+			return i;
+		}
+	}
+
+	return -1;
+}
+
+function Test( settings ) {
+	var i, l;
+
+	++Test.count;
+
+	extend( this, settings );
+	this.assertions = [];
+	this.semaphore = 0;
+	this.usedAsync = false;
+	this.module = config.currentModule;
+	this.stack = sourceFromStacktrace( 3 );
+
+	// Register unique strings
+	for ( i = 0, l = this.module.tests; i < l.length; i++ ) {
+		if ( this.module.tests[ i ].name === this.testName ) {
+			this.testName += " ";
+		}
+	}
+
+	this.testId = generateHash( this.module.name, this.testName );
+
+	this.module.tests.push({
+		name: this.testName,
+		testId: this.testId
+	});
+
+	if ( settings.skip ) {
+
+		// Skipped tests will fully ignore any sent callback
+		this.callback = function() {};
+		this.async = false;
+		this.expected = 0;
+	} else {
+		this.assert = new Assert( this );
+	}
+}
+
+Test.count = 0;
+
+Test.prototype = {
+	before: function() {
+		if (
+
+			// Emit moduleStart when we're switching from one module to another
+			this.module !== config.previousModule ||
+
+				// They could be equal (both undefined) but if the previousModule property doesn't
+				// yet exist it means this is the first test in a suite that isn't wrapped in a
+				// module, in which case we'll just emit a moduleStart event for 'undefined'.
+				// Without this, reporters can get testStart before moduleStart  which is a problem.
+				!hasOwn.call( config, "previousModule" )
+		) {
+			if ( hasOwn.call( config, "previousModule" ) ) {
+				runLoggingCallbacks( "moduleDone", {
+					name: config.previousModule.name,
+					tests: config.previousModule.tests,
+					failed: config.moduleStats.bad,
+					passed: config.moduleStats.all - config.moduleStats.bad,
+					total: config.moduleStats.all,
+					runtime: now() - config.moduleStats.started
+				});
+			}
+			config.previousModule = this.module;
+			config.moduleStats = { all: 0, bad: 0, started: now() };
+			runLoggingCallbacks( "moduleStart", {
+				name: this.module.name,
+				tests: this.module.tests
+			});
+		}
+
+		config.current = this;
+
+		this.testEnvironment = extend( {}, this.module.testEnvironment );
+		delete this.testEnvironment.beforeEach;
+		delete this.testEnvironment.afterEach;
+
+		this.started = now();
+		runLoggingCallbacks( "testStart", {
+			name: this.testName,
+			module: this.module.name,
+			testId: this.testId
+		});
+
+		if ( !config.pollution ) {
+			saveGlobal();
+		}
+	},
+
+	run: function() {
+		var promise;
+
+		config.current = this;
+
+		if ( this.async ) {
+			QUnit.stop();
+		}
+
+		this.callbackStarted = now();
+
+		if ( config.notrycatch ) {
+			promise = this.callback.call( this.testEnvironment, this.assert );
+			this.resolvePromise( promise );
+			return;
+		}
+
+		try {
+			promise = this.callback.call( this.testEnvironment, this.assert );
+			this.resolvePromise( promise );
+		} catch ( e ) {
+			this.pushFailure( "Died on test #" + ( this.assertions.length + 1 ) + " " +
+				this.stack + ": " + ( e.message || e ), extractStacktrace( e, 0 ) );
+
+			// else next test will carry the responsibility
+			saveGlobal();
+
+			// Restart the tests if they're blocking
+			if ( config.blocking ) {
+				QUnit.start();
+			}
+		}
+	},
+
+	after: function() {
+		checkPollution();
+	},
+
+	queueHook: function( hook, hookName ) {
+		var promise,
+			test = this;
+		return function runHook() {
+			config.current = test;
+			if ( config.notrycatch ) {
+				promise = hook.call( test.testEnvironment, test.assert );
+				test.resolvePromise( promise, hookName );
+				return;
+			}
+			try {
+				promise = hook.call( test.testEnvironment, test.assert );
+				test.resolvePromise( promise, hookName );
+			} catch ( error ) {
+				test.pushFailure( hookName + " failed on " + test.testName + ": " +
+					( error.message || error ), extractStacktrace( error, 0 ) );
+			}
+		};
+	},
+
+	// Currently only used for module level hooks, can be used to add global level ones
+	hooks: function( handler ) {
+		var hooks = [];
+
+		// Hooks are ignored on skipped tests
+		if ( this.skip ) {
+			return hooks;
+		}
+
+		if ( this.module.testEnvironment &&
+				QUnit.objectType( this.module.testEnvironment[ handler ] ) === "function" ) {
+			hooks.push( this.queueHook( this.module.testEnvironment[ handler ], handler ) );
+		}
+
+		return hooks;
+	},
+
+	finish: function() {
+		config.current = this;
+		if ( config.requireExpects && this.expected === null ) {
+			this.pushFailure( "Expected number of assertions to be defined, but expect() was " +
+				"not called.", this.stack );
+		} else if ( this.expected !== null && this.expected !== this.assertions.length ) {
+			this.pushFailure( "Expected " + this.expected + " assertions, but " +
+				this.assertions.length + " were run", this.stack );
+		} else if ( this.expected === null && !this.assertions.length ) {
+			this.pushFailure( "Expected at least one assertion, but none were run - call " +
+				"expect(0) to accept zero assertions.", this.stack );
+		}
+
+		var i,
+			bad = 0;
+
+		this.runtime = now() - this.started;
+		config.stats.all += this.assertions.length;
+		config.moduleStats.all += this.assertions.length;
+
+		for ( i = 0; i < this.assertions.length; i++ ) {
+			if ( !this.assertions[ i ].result ) {
+				bad++;
+				config.stats.bad++;
+				config.moduleStats.bad++;
+			}
+		}
+
+		runLoggingCallbacks( "testDone", {
+			name: this.testName,
+			module: this.module.name,
+			skipped: !!this.skip,
+			failed: bad,
+			passed: this.assertions.length - bad,
+			total: this.assertions.length,
+			runtime: this.runtime,
+
+			// HTML Reporter use
+			assertions: this.assertions,
+			testId: this.testId,
+
+			// DEPRECATED: this property will be removed in 2.0.0, use runtime instead
+			duration: this.runtime
+		});
+
+		// QUnit.reset() is deprecated and will be replaced for a new
+		// fixture reset function on QUnit 2.0/2.1.
+		// It's still called here for backwards compatibility handling
+		QUnit.reset();
+
+		config.current = undefined;
+	},
+
+	queue: function() {
+		var bad,
+			test = this;
+
+		if ( !this.valid() ) {
+			return;
+		}
+
+		function run() {
+
+			// each of these can by async
+			synchronize([
+				function() {
+					test.before();
+				},
+
+				test.hooks( "beforeEach" ),
+
+				function() {
+					test.run();
+				},
+
+				test.hooks( "afterEach" ).reverse(),
+
+				function() {
+					test.after();
+				},
+				function() {
+					test.finish();
+				}
+			]);
+		}
+
+		// `bad` initialized at top of scope
+		// defer when previous test run passed, if storage is available
+		bad = QUnit.config.reorder && defined.sessionStorage &&
+				+sessionStorage.getItem( "qunit-test-" + this.module.name + "-" + this.testName );
+
+		if ( bad ) {
+			run();
+		} else {
+			synchronize( run, true );
+		}
+	},
+
+	push: function( result, actual, expected, message ) {
+		var source,
+			details = {
+				module: this.module.name,
+				name: this.testName,
+				result: result,
+				message: message,
+				actual: actual,
+				expected: expected,
+				testId: this.testId,
+				runtime: now() - this.started
+			};
+
+		if ( !result ) {
+			source = sourceFromStacktrace();
+
+			if ( source ) {
+				details.source = source;
+			}
+		}
+
+		runLoggingCallbacks( "log", details );
+
+		this.assertions.push({
+			result: !!result,
+			message: message
+		});
+	},
+
+	pushFailure: function( message, source, actual ) {
+		if ( !this instanceof Test ) {
+			throw new Error( "pushFailure() assertion outside test context, was " +
+				sourceFromStacktrace( 2 ) );
+		}
+
+		var details = {
+				module: this.module.name,
+				name: this.testName,
+				result: false,
+				message: message || "error",
+				actual: actual || null,
+				testId: this.testId,
+				runtime: now() - this.started
+			};
+
+		if ( source ) {
+			details.source = source;
+		}
+
+		runLoggingCallbacks( "log", details );
+
+		this.assertions.push({
+			result: false,
+			message: message
+		});
+	},
+
+	resolvePromise: function( promise, phase ) {
+		var then, message,
+			test = this;
+		if ( promise != null ) {
+			then = promise.then;
+			if ( QUnit.objectType( then ) === "function" ) {
+				QUnit.stop();
+				then.call(
+					promise,
+					QUnit.start,
+					function( error ) {
+						message = "Promise rejected " +
+							( !phase ? "during" : phase.replace( /Each$/, "" ) ) +
+							" " + test.testName + ": " + ( error.message || error );
+						test.pushFailure( message, extractStacktrace( error, 0 ) );
+
+						// else next test will carry the responsibility
+						saveGlobal();
+
+						// Unblock
+						QUnit.start();
+					}
+				);
+			}
+		}
+	},
+
+	valid: function() {
+		var include,
+			filter = config.filter,
+			module = QUnit.urlParams.module && QUnit.urlParams.module.toLowerCase(),
+			fullName = ( this.module.name + ": " + this.testName ).toLowerCase();
+
+		// Internally-generated tests are always valid
+		if ( this.callback && this.callback.validTest ) {
+			return true;
+		}
+
+		if ( config.testId.length > 0 && inArray( this.testId, config.testId ) < 0 ) {
+			return false;
+		}
+
+		if ( module && ( !this.module.name || this.module.name.toLowerCase() !== module ) ) {
+			return false;
+		}
+
+		if ( !filter ) {
+			return true;
+		}
+
+		include = filter.charAt( 0 ) !== "!";
+		if ( !include ) {
+			filter = filter.toLowerCase().slice( 1 );
+		}
+
+		// If the filter matches, we need to honour include
+		if ( fullName.indexOf( filter ) !== -1 ) {
+			return include;
+		}
+
+		// Otherwise, do the opposite
+		return !include;
+	}
+
+};
+
+// Resets the test setup. Useful for tests that modify the DOM.
+/*
+DEPRECATED: Use multiple tests instead of resetting inside a test.
+Use testStart or testDone for custom cleanup.
+This method will throw an error in 2.0, and will be removed in 2.1
+*/
+QUnit.reset = function() {
+
+	// Return on non-browser environments
+	// This is necessary to not break on node tests
+	if ( typeof window === "undefined" ) {
+		return;
+	}
+
+	var fixture = defined.document && document.getElementById &&
+			document.getElementById( "qunit-fixture" );
+
+	if ( fixture ) {
+		fixture.innerHTML = config.fixture;
+	}
+};
+
+QUnit.pushFailure = function() {
+	if ( !QUnit.config.current ) {
+		throw new Error( "pushFailure() assertion outside test context, in " +
+			sourceFromStacktrace( 2 ) );
+	}
+
+	// Gets current test obj
+	var currentTest = QUnit.config.current;
+
+	return currentTest.pushFailure.apply( currentTest, arguments );
+};
+
+// Based on Java's String.hashCode, a simple but not
+// rigorously collision resistant hashing function
+function generateHash( module, testName ) {
+	var hex,
+		i = 0,
+		hash = 0,
+		str = module + "\x1C" + testName,
+		len = str.length;
+
+	for ( ; i < len; i++ ) {
+		hash  = ( ( hash << 5 ) - hash ) + str.charCodeAt( i );
+		hash |= 0;
+	}
+
+	// Convert the possibly negative integer hash code into an 8 character hex string, which isn't
+	// strictly necessary but increases user understanding that the id is a SHA-like hash
+	hex = ( 0x100000000 + hash ).toString( 16 );
+	if ( hex.length < 8 ) {
+		hex = "0000000" + hex;
+	}
+
+	return hex.slice( -8 );
+}
+
+function Assert( testContext ) {
+	this.test = testContext;
+}
+
+// Assert helpers
+QUnit.assert = Assert.prototype = {
+
+	// Specify the number of expected assertions to guarantee that failed test
+	// (no assertions are run at all) don't slip through.
+	expect: function( asserts ) {
+		if ( arguments.length === 1 ) {
+			this.test.expected = asserts;
+		} else {
+			return this.test.expected;
+		}
+	},
+
+	// Increment this Test's semaphore counter, then return a single-use function that
+	// decrements that counter a maximum of once.
+	async: function() {
+		var test = this.test,
+			popped = false;
+
+		test.semaphore += 1;
+		test.usedAsync = true;
+		pauseProcessing();
+
+		return function done() {
+			if ( !popped ) {
+				test.semaphore -= 1;
+				popped = true;
+				resumeProcessing();
+			} else {
+				test.pushFailure( "Called the callback returned from `assert.async` more than once",
+					sourceFromStacktrace( 2 ) );
+			}
+		};
+	},
+
+	// Exports test.push() to the user API
+	push: function( /* result, actual, expected, message */ ) {
+		var assert = this,
+			currentTest = ( assert instanceof Assert && assert.test ) || QUnit.config.current;
+
+		// Backwards compatibility fix.
+		// Allows the direct use of global exported assertions and QUnit.assert.*
+		// Although, it's use is not recommended as it can leak assertions
+		// to other tests from async tests, because we only get a reference to the current test,
+		// not exactly the test where assertion were intended to be called.
+		if ( !currentTest ) {
+			throw new Error( "assertion outside test context, in " + sourceFromStacktrace( 2 ) );
+		}
+
+		if ( currentTest.usedAsync === true && currentTest.semaphore === 0 ) {
+			currentTest.pushFailure( "Assertion after the final `assert.async` was resolved",
+				sourceFromStacktrace( 2 ) );
+
+			// Allow this assertion to continue running anyway...
+		}
+
+		if ( !( assert instanceof Assert ) ) {
+			assert = currentTest.assert;
+		}
+		return assert.test.push.apply( assert.test, arguments );
+	},
+
+	/**
+	 * Asserts rough true-ish result.
+	 * @name ok
+	 * @function
+	 * @example ok( "asdfasdf".length > 5, "There must be at least 5 chars" );
+	 */
+	ok: function( result, message ) {
+		message = message || ( result ? "okay" : "failed, expected argument to be truthy, was: " +
+			QUnit.dump.parse( result ) );
+		this.push( !!result, result, true, message );
+	},
+
+	/**
+	 * Assert that the first two arguments are equal, with an optional message.
+	 * Prints out both actual and expected values.
+	 * @name equal
+	 * @function
+	 * @example equal( format( "{0} bytes.", 2), "2 bytes.", "replaces {0} with next argument" );
+	 */
+	equal: function( actual, expected, message ) {
+		/*jshint eqeqeq:false */
+		this.push( expected == actual, actual, expected, message );
+	},
+
+	/**
+	 * @name notEqual
+	 * @function
+	 */
+	notEqual: function( actual, expected, message ) {
+		/*jshint eqeqeq:false */
+		this.push( expected != actual, actual, expected, message );
+	},
+
+	/**
+	 * @name propEqual
+	 * @function
+	 */
+	propEqual: function( actual, expected, message ) {
+		actual = objectValues( actual );
+		expected = objectValues( expected );
+		this.push( QUnit.equiv( actual, expected ), actual, expected, message );
+	},
+
+	/**
+	 * @name notPropEqual
+	 * @function
+	 */
+	notPropEqual: function( actual, expected, message ) {
+		actual = objectValues( actual );
+		expected = objectValues( expected );
+		this.push( !QUnit.equiv( actual, expected ), actual, expected, message );
+	},
+
+	/**
+	 * @name deepEqual
+	 * @function
+	 */
+	deepEqual: function( actual, expected, message ) {
+		this.push( QUnit.equiv( actual, expected ), actual, expected, message );
+	},
+
+	/**
+	 * @name notDeepEqual
+	 * @function
+	 */
+	notDeepEqual: function( actual, expected, message ) {
+		this.push( !QUnit.equiv( actual, expected ), actual, expected, message );
+	},
+
+	/**
+	 * @name strictEqual
+	 * @function
+	 */
+	strictEqual: function( actual, expected, message ) {
+		this.push( expected === actual, actual, expected, message );
+	},
+
+	/**
+	 * @name notStrictEqual
+	 * @function
+	 */
+	notStrictEqual: function( actual, expected, message ) {
+		this.push( expected !== actual, actual, expected, message );
+	},
+
+	"throws": function( block, expected, message ) {
+		var actual, expectedType,
+			expectedOutput = expected,
+			ok = false;
+
+		// 'expected' is optional unless doing string comparison
+		if ( message == null && typeof expected === "string" ) {
+			message = expected;
+			expected = null;
+		}
+
+		this.test.ignoreGlobalErrors = true;
+		try {
+			block.call( this.test.testEnvironment );
+		} catch (e) {
+			actual = e;
+		}
+		this.test.ignoreGlobalErrors = false;
+
+		if ( actual ) {
+			expectedType = QUnit.objectType( expected );
+
+			// we don't want to validate thrown error
+			if ( !expected ) {
+				ok = true;
+				expectedOutput = null;
+
+			// expected is a regexp
+			} else if ( expectedType === "regexp" ) {
+				ok = expected.test( errorString( actual ) );
+
+			// expected is a string
+			} else if ( expectedType === "string" ) {
+				ok = expected === errorString( actual );
+
+			// expected is a constructor, maybe an Error constructor
+			} else if ( expectedType === "function" && actual instanceof expected ) {
+				ok = true;
+
+			// expected is an Error object
+			} else if ( expectedType === "object" ) {
+				ok = actual instanceof expected.constructor &&
+					actual.name === expected.name &&
+					actual.message === expected.message;
+
+			// expected is a validation function which returns true if validation passed
+			} else if ( expectedType === "function" && expected.call( {}, actual ) === true ) {
+				expectedOutput = null;
+				ok = true;
+			}
+
+			this.push( ok, actual, expectedOutput, message );
+		} else {
+			this.test.pushFailure( message, null, "No exception was thrown." );
+		}
+	}
+};
+
+// Provide an alternative to assert.throws(), for enviroments that consider throws a reserved word
+// Known to us are: Closure Compiler, Narwhal
+(function() {
+	/*jshint sub:true */
+	Assert.prototype.raises = Assert.prototype[ "throws" ];
+}());
+
+// Test for equality any JavaScript type.
+// Author: Philippe Rathé <prathe@gmail.com>
+QUnit.equiv = (function() {
+
+	// Call the o related callback with the given arguments.
+	function bindCallbacks( o, callbacks, args ) {
+		var prop = QUnit.objectType( o );
+		if ( prop ) {
+			if ( QUnit.objectType( callbacks[ prop ] ) === "function" ) {
+				return callbacks[ prop ].apply( callbacks, args );
+			} else {
+				return callbacks[ prop ]; // or undefined
+			}
+		}
+	}
+
+	// the real equiv function
+	var innerEquiv,
+
+		// stack to decide between skip/abort functions
+		callers = [],
+
+		// stack to avoiding loops from circular referencing
+		parents = [],
+		parentsB = [],
+
+		getProto = Object.getPrototypeOf || function( obj ) {
+			/* jshint camelcase: false, proto: true */
+			return obj.__proto__;
+		},
+		callbacks = (function() {
+
+			// for string, boolean, number and null
+			function useStrictEquality( b, a ) {
+
+				/*jshint eqeqeq:false */
+				if ( b instanceof a.constructor || a instanceof b.constructor ) {
+
+					// to catch short annotation VS 'new' annotation of a
+					// declaration
+					// e.g. var i = 1;
+					// var j = new Number(1);
+					return a == b;
+				} else {
+					return a === b;
+				}
+			}
+
+			return {
+				"string": useStrictEquality,
+				"boolean": useStrictEquality,
+				"number": useStrictEquality,
+				"null": useStrictEquality,
+				"undefined": useStrictEquality,
+
+				"nan": function( b ) {
+					return isNaN( b );
+				},
+
+				"date": function( b, a ) {
+					return QUnit.objectType( b ) === "date" && a.valueOf() === b.valueOf();
+				},
+
+				"regexp": function( b, a ) {
+					return QUnit.objectType( b ) === "regexp" &&
+
+						// the regex itself
+						a.source === b.source &&
+
+						// and its modifiers
+						a.global === b.global &&
+
+						// (gmi) ...
+						a.ignoreCase === b.ignoreCase &&
+						a.multiline === b.multiline &&
+						a.sticky === b.sticky;
+				},
+
+				// - skip when the property is a method of an instance (OOP)
+				// - abort otherwise,
+				// initial === would have catch identical references anyway
+				"function": function() {
+					var caller = callers[ callers.length - 1 ];
+					return caller !== Object && typeof caller !== "undefined";
+				},
+
+				"array": function( b, a ) {
+					var i, j, len, loop, aCircular, bCircular;
+
+					// b could be an object literal here
+					if ( QUnit.objectType( b ) !== "array" ) {
+						return false;
+					}
+
+					len = a.length;
+					if ( len !== b.length ) {
+						// safe and faster
+						return false;
+					}
+
+					// track reference to avoid circular references
+					parents.push( a );
+					parentsB.push( b );
+					for ( i = 0; i < len; i++ ) {
+						loop = false;
+						for ( j = 0; j < parents.length; j++ ) {
+							aCircular = parents[ j ] === a[ i ];
+							bCircular = parentsB[ j ] === b[ i ];
+							if ( aCircular || bCircular ) {
+								if ( a[ i ] === b[ i ] || aCircular && bCircular ) {
+									loop = true;
+								} else {
+									parents.pop();
+									parentsB.pop();
+									return false;
+								}
+							}
+						}
+						if ( !loop && !innerEquiv( a[ i ], b[ i ] ) ) {
+							parents.pop();
+							parentsB.pop();
+							return false;
+						}
+					}
+					parents.pop();
+					parentsB.pop();
+					return true;
+				},
+
+				"object": function( b, a ) {
+
+					/*jshint forin:false */
+					var i, j, loop, aCircular, bCircular,
+						// Default to true
+						eq = true,
+						aProperties = [],
+						bProperties = [];
+
+					// comparing constructors is more strict than using
+					// instanceof
+					if ( a.constructor !== b.constructor ) {
+
+						// Allow objects with no prototype to be equivalent to
+						// objects with Object as their constructor.
+						if ( !( ( getProto( a ) === null && getProto( b ) === Object.prototype ) ||
+							( getProto( b ) === null && getProto( a ) === Object.prototype ) ) ) {
+							return false;
+						}
+					}
+
+					// stack constructor before traversing properties
+					callers.push( a.constructor );
+
+					// track reference to avoid circular references
+					parents.push( a );
+					parentsB.push( b );
+
+					// be strict: don't ensure hasOwnProperty and go deep
+					for ( i in a ) {
+						loop = false;
+						for ( j = 0; j < parents.length; j++ ) {
+							aCircular = parents[ j ] === a[ i ];
+							bCircular = parentsB[ j ] === b[ i ];
+							if ( aCircular || bCircular ) {
+								if ( a[ i ] === b[ i ] || aCircular && bCircular ) {
+									loop = true;
+								} else {
+									eq = false;
+									break;
+								}
+							}
+						}
+						aProperties.push( i );
+						if ( !loop && !innerEquiv( a[ i ], b[ i ] ) ) {
+							eq = false;
+							break;
+						}
+					}
+
+					parents.pop();
+					parentsB.pop();
+					callers.pop(); // unstack, we are done
+
+					for ( i in b ) {
+						bProperties.push( i ); // collect b's properties
+					}
+
+					// Ensures identical properties name
+					return eq && innerEquiv( aProperties.sort(), bProperties.sort() );
+				}
+			};
+		}());
+
+	innerEquiv = function() { // can take multiple arguments
+		var args = [].slice.apply( arguments );
+		if ( args.length < 2 ) {
+			return true; // end transition
+		}
+
+		return ( (function( a, b ) {
+			if ( a === b ) {
+				return true; // catch the most you can
+			} else if ( a === null || b === null || typeof a === "undefined" ||
+					typeof b === "undefined" ||
+					QUnit.objectType( a ) !== QUnit.objectType( b ) ) {
+
+				// don't lose time with error prone cases
+				return false;
+			} else {
+				return bindCallbacks( a, callbacks, [ b, a ] );
+			}
+
+			// apply transition with (1..n) arguments
+		}( args[ 0 ], args[ 1 ] ) ) &&
+			innerEquiv.apply( this, args.splice( 1, args.length - 1 ) ) );
+	};
+
+	return innerEquiv;
+}());
+
+// Based on jsDump by Ariel Flesler
+// http://flesler.blogspot.com/2008/05/jsdump-pretty-dump-of-any-javascript.html
+QUnit.dump = (function() {
+	function quote( str ) {
+		return "\"" + str.toString().replace( /"/g, "\\\"" ) + "\"";
+	}
+	function literal( o ) {
+		return o + "";
+	}
+	function join( pre, arr, post ) {
+		var s = dump.separator(),
+			base = dump.indent(),
+			inner = dump.indent( 1 );
+		if ( arr.join ) {
+			arr = arr.join( "," + s + inner );
+		}
+		if ( !arr ) {
+			return pre + post;
+		}
+		return [ pre, inner + arr, base + post ].join( s );
+	}
+	function array( arr, stack ) {
+		var i = arr.length,
+			ret = new Array( i );
+
+		if ( dump.maxDepth && dump.depth > dump.maxDepth ) {
+			return "[object Array]";
+		}
+
+		this.up();
+		while ( i-- ) {
+			ret[ i ] = this.parse( arr[ i ], undefined, stack );
+		}
+		this.down();
+		return join( "[", ret, "]" );
+	}
+
+	var reName = /^function (\w+)/,
+		dump = {
+
+			// objType is used mostly internally, you can fix a (custom) type in advance
+			parse: function( obj, objType, stack ) {
+				stack = stack || [];
+				var res, parser, parserType,
+					inStack = inArray( obj, stack );
+
+				if ( inStack !== -1 ) {
+					return "recursion(" + ( inStack - stack.length ) + ")";
+				}
+
+				objType = objType || this.typeOf( obj  );
+				parser = this.parsers[ objType ];
+				parserType = typeof parser;
+
+				if ( parserType === "function" ) {
+					stack.push( obj );
+					res = parser.call( this, obj, stack );
+					stack.pop();
+					return res;
+				}
+				return ( parserType === "string" ) ? parser : this.parsers.error;
+			},
+			typeOf: function( obj ) {
+				var type;
+				if ( obj === null ) {
+					type = "null";
+				} else if ( typeof obj === "undefined" ) {
+					type = "undefined";
+				} else if ( QUnit.is( "regexp", obj ) ) {
+					type = "regexp";
+				} else if ( QUnit.is( "date", obj ) ) {
+					type = "date";
+				} else if ( QUnit.is( "function", obj ) ) {
+					type = "function";
+				} else if ( obj.setInterval !== undefined &&
+						obj.document !== undefined &&
+						obj.nodeType === undefined ) {
+					type = "window";
+				} else if ( obj.nodeType === 9 ) {
+					type = "document";
+				} else if ( obj.nodeType ) {
+					type = "node";
+				} else if (
+
+					// native arrays
+					toString.call( obj ) === "[object Array]" ||
+
+					// NodeList objects
+					( typeof obj.length === "number" && obj.item !== undefined &&
+					( obj.length ? obj.item( 0 ) === obj[ 0 ] : ( obj.item( 0 ) === null &&
+					obj[ 0 ] === undefined ) ) )
+				) {
+					type = "array";
+				} else if ( obj.constructor === Error.prototype.constructor ) {
+					type = "error";
+				} else {
+					type = typeof obj;
+				}
+				return type;
+			},
+			separator: function() {
+				return this.multiline ? this.HTML ? "<br />" : "\n" : this.HTML ? "&#160;" : " ";
+			},
+			// extra can be a number, shortcut for increasing-calling-decreasing
+			indent: function( extra ) {
+				if ( !this.multiline ) {
+					return "";
+				}
+				var chr = this.indentChar;
+				if ( this.HTML ) {
+					chr = chr.replace( /\t/g, "   " ).replace( / /g, "&#160;" );
+				}
+				return new Array( this.depth + ( extra || 0 ) ).join( chr );
+			},
+			up: function( a ) {
+				this.depth += a || 1;
+			},
+			down: function( a ) {
+				this.depth -= a || 1;
+			},
+			setParser: function( name, parser ) {
+				this.parsers[ name ] = parser;
+			},
+			// The next 3 are exposed so you can use them
+			quote: quote,
+			literal: literal,
+			join: join,
+			//
+			depth: 1,
+			maxDepth: 5,
+
+			// This is the list of parsers, to modify them, use dump.setParser
+			parsers: {
+				window: "[Window]",
+				document: "[Document]",
+				error: function( error ) {
+					return "Error(\"" + error.message + "\")";
+				},
+				unknown: "[Unknown]",
+				"null": "null",
+				"undefined": "undefined",
+				"function": function( fn ) {
+					var ret = "function",
+
+						// functions never have name in IE
+						name = "name" in fn ? fn.name : ( reName.exec( fn ) || [] )[ 1 ];
+
+					if ( name ) {
+						ret += " " + name;
+					}
+					ret += "( ";
+
+					ret = [ ret, dump.parse( fn, "functionArgs" ), "){" ].join( "" );
+					return join( ret, dump.parse( fn, "functionCode" ), "}" );
+				},
+				array: array,
+				nodelist: array,
+				"arguments": array,
+				object: function( map, stack ) {
+					var keys, key, val, i, nonEnumerableProperties,
+						ret = [];
+
+					if ( dump.maxDepth && dump.depth > dump.maxDepth ) {
+						return "[object Object]";
+					}
+
+					dump.up();
+					keys = [];
+					for ( key in map ) {
+						keys.push( key );
+					}
+
+					// Some properties are not always enumerable on Error objects.
+					nonEnumerableProperties = [ "message", "name" ];
+					for ( i in nonEnumerableProperties ) {
+						key = nonEnumerableProperties[ i ];
+						if ( key in map && !( key in keys ) ) {
+							keys.push( key );
+						}
+					}
+					keys.sort();
+					for ( i = 0; i < keys.length; i++ ) {
+						key = keys[ i ];
+						val = map[ key ];
+						ret.push( dump.parse( key, "key" ) + ": " +
+							dump.parse( val, undefined, stack ) );
+					}
+					dump.down();
+					return join( "{", ret, "}" );
+				},
+				node: function( node ) {
+					var len, i, val,
+						open = dump.HTML ? "&lt;" : "<",
+						close = dump.HTML ? "&gt;" : ">",
+						tag = node.nodeName.toLowerCase(),
+						ret = open + tag,
+						attrs = node.attributes;
+
+					if ( attrs ) {
+						for ( i = 0, len = attrs.length; i < len; i++ ) {
+							val = attrs[ i ].nodeValue;
+
+							// IE6 includes all attributes in .attributes, even ones not explicitly
+							// set. Those have values like undefined, null, 0, false, "" or
+							// "inherit".
+							if ( val && val !== "inherit" ) {
+								ret += " " + attrs[ i ].nodeName + "=" +
+									dump.parse( val, "attribute" );
+							}
+						}
+					}
+					ret += close;
+
+					// Show content of TextNode or CDATASection
+					if ( node.nodeType === 3 || node.nodeType === 4 ) {
+						ret += node.nodeValue;
+					}
+
+					return ret + open + "/" + tag + close;
+				},
+
+				// function calls it internally, it's the arguments part of the function
+				functionArgs: function( fn ) {
+					var args,
+						l = fn.length;
+
+					if ( !l ) {
+						return "";
+					}
+
+					args = new Array( l );
+					while ( l-- ) {
+
+						// 97 is 'a'
+						args[ l ] = String.fromCharCode( 97 + l );
+					}
+					return " " + args.join( ", " ) + " ";
+				},
+				// object calls it internally, the key part of an item in a map
+				key: quote,
+				// function calls it internally, it's the content of the function
+				functionCode: "[code]",
+				// node calls it internally, it's an html attribute value
+				attribute: quote,
+				string: quote,
+				date: quote,
+				regexp: literal,
+				number: literal,
+				"boolean": literal
+			},
+			// if true, entities are escaped ( <, >, \t, space and \n )
+			HTML: false,
+			// indentation unit
+			indentChar: "  ",
+			// if true, items in a collection, are separated by a \n, else just a space.
+			multiline: true
+		};
+
+	return dump;
+}());
+
+// back compat
+QUnit.jsDump = QUnit.dump;
+
+// For browser, export only select globals
+if ( typeof window !== "undefined" ) {
+
+	// Deprecated
+	// Extend assert methods to QUnit and Global scope through Backwards compatibility
+	(function() {
+		var i,
+			assertions = Assert.prototype;
+
+		function applyCurrent( current ) {
+			return function() {
+				var assert = new Assert( QUnit.config.current );
+				current.apply( assert, arguments );
+			};
+		}
+
+		for ( i in assertions ) {
+			QUnit[ i ] = applyCurrent( assertions[ i ] );
+		}
+	})();
+
+	(function() {
+		var i, l,
+			keys = [
+				"test",
+				"module",
+				"expect",
+				"asyncTest",
+				"start",
+				"stop",
+				"ok",
+				"equal",
+				"notEqual",
+				"propEqual",
+				"notPropEqual",
+				"deepEqual",
+				"notDeepEqual",
+				"strictEqual",
+				"notStrictEqual",
+				"throws"
+			];
+
+		for ( i = 0, l = keys.length; i < l; i++ ) {
+			window[ keys[ i ] ] = QUnit[ keys[ i ] ];
+		}
+	})();
+
+	window.QUnit = QUnit;
+}
+
+// For nodejs
+if ( typeof module !== "undefined" && module && module.exports ) {
+	module.exports = QUnit;
+
+	// For consistency with CommonJS environments' exports
+	module.exports.QUnit = QUnit;
+}
+
+// For CommonJS with exports, but without module.exports, like Rhino
+if ( typeof exports !== "undefined" && exports ) {
+	exports.QUnit = QUnit;
+}
+
+// Get a reference to the global object, like window in browsers
+}( (function() {
+	return this;
+})() ));
+
+/*istanbul ignore next */
+// jscs:disable maximumLineLength
+/*
+ * Javascript Diff Algorithm
+ *  By John Resig (http://ejohn.org/)
+ *  Modified by Chu Alan "sprite"
+ *
+ * Released under the MIT license.
+ *
+ * More Info:
+ *  http://ejohn.org/projects/javascript-diff-algorithm/
+ *
+ * Usage: QUnit.diff(expected, actual)
+ *
+ * QUnit.diff( "the quick brown fox jumped over", "the quick fox jumps over" ) == "the  quick <del>brown </del> fox <del>jumped </del><ins>jumps </ins> over"
+ */
+QUnit.diff = (function() {
+	var hasOwn = Object.prototype.hasOwnProperty;
+
+	/*jshint eqeqeq:false, eqnull:true */
+	function diff( o, n ) {
+		var i,
+			ns = {},
+			os = {};
+
+		for ( i = 0; i < n.length; i++ ) {
+			if ( !hasOwn.call( ns, n[ i ] ) ) {
+				ns[ n[ i ] ] = {
+					rows: [],
+					o: null
+				};
+			}
+			ns[ n[ i ] ].rows.push( i );
+		}
+
+		for ( i = 0; i < o.length; i++ ) {
+			if ( !hasOwn.call( os, o[ i ] ) ) {
+				os[ o[ i ] ] = {
+					rows: [],
+					n: null
+				};
+			}
+			os[ o[ i ] ].rows.push( i );
+		}
+
+		for ( i in ns ) {
+			if ( hasOwn.call( ns, i ) ) {
+				if ( ns[ i ].rows.length === 1 && hasOwn.call( os, i ) && os[ i ].rows.length === 1 ) {
+					n[ ns[ i ].rows[ 0 ] ] = {
+						text: n[ ns[ i ].rows[ 0 ] ],
+						row: os[ i ].rows[ 0 ]
+					};
+					o[ os[ i ].rows[ 0 ] ] = {
+						text: o[ os[ i ].rows[ 0 ] ],
+						row: ns[ i ].rows[ 0 ]
+					};
+				}
+			}
+		}
+
+		for ( i = 0; i < n.length - 1; i++ ) {
+			if ( n[ i ].text != null && n[ i + 1 ].text == null && n[ i ].row + 1 < o.length && o[ n[ i ].row + 1 ].text == null &&
+				n[ i + 1 ] == o[ n[ i ].row + 1 ] ) {
+
+				n[ i + 1 ] = {
+					text: n[ i + 1 ],
+					row: n[ i ].row + 1
+				};
+				o[ n[ i ].row + 1 ] = {
+					text: o[ n[ i ].row + 1 ],
+					row: i + 1
+				};
+			}
+		}
+
+		for ( i = n.length - 1; i > 0; i-- ) {
+			if ( n[ i ].text != null && n[ i - 1 ].text == null && n[ i ].row > 0 && o[ n[ i ].row - 1 ].text == null &&
+				n[ i - 1 ] == o[ n[ i ].row - 1 ] ) {
+
+				n[ i - 1 ] = {
+					text: n[ i - 1 ],
+					row: n[ i ].row - 1
+				};
+				o[ n[ i ].row - 1 ] = {
+					text: o[ n[ i ].row - 1 ],
+					row: i - 1
+				};
+			}
+		}
+
+		return {
+			o: o,
+			n: n
+		};
+	}
+
+	return function( o, n ) {
+		o = o.replace( /\s+$/, "" );
+		n = n.replace( /\s+$/, "" );
+
+		var i, pre,
+			str = "",
+			out = diff( o === "" ? [] : o.split( /\s+/ ), n === "" ? [] : n.split( /\s+/ ) ),
+			oSpace = o.match( /\s+/g ),
+			nSpace = n.match( /\s+/g );
+
+		if ( oSpace == null ) {
+			oSpace = [ " " ];
+		} else {
+			oSpace.push( " " );
+		}
+
+		if ( nSpace == null ) {
+			nSpace = [ " " ];
+		} else {
+			nSpace.push( " " );
+		}
+
+		if ( out.n.length === 0 ) {
+			for ( i = 0; i < out.o.length; i++ ) {
+				str += "<del>" + out.o[ i ] + oSpace[ i ] + "</del>";
+			}
+		} else {
+			if ( out.n[ 0 ].text == null ) {
+				for ( n = 0; n < out.o.length && out.o[ n ].text == null; n++ ) {
+					str += "<del>" + out.o[ n ] + oSpace[ n ] + "</del>";
+				}
+			}
+
+			for ( i = 0; i < out.n.length; i++ ) {
+				if ( out.n[ i ].text == null ) {
+					str += "<ins>" + out.n[ i ] + nSpace[ i ] + "</ins>";
+				} else {
+
+					// `pre` initialized at top of scope
+					pre = "";
+
+					for ( n = out.n[ i ].row + 1; n < out.o.length && out.o[ n ].text == null; n++ ) {
+						pre += "<del>" + out.o[ n ] + oSpace[ n ] + "</del>";
+					}
+					str += " " + out.n[ i ].text + nSpace[ i ] + pre;
+				}
+			}
+		}
+
+		return str;
+	};
+}());
+// jscs:enable
+
+(function() {
+
+// Deprecated QUnit.init - Ref #530
+// Re-initialize the configuration options
+QUnit.init = function() {
+	var tests, banner, result, qunit,
+		config = QUnit.config;
+
+	config.stats = { all: 0, bad: 0 };
+	config.moduleStats = { all: 0, bad: 0 };
+	config.started = 0;
+	config.updateRate = 1000;
+	config.blocking = false;
+	config.autostart = true;
+	config.autorun = false;
+	config.filter = "";
+	config.queue = [];
+
+	// Return on non-browser environments
+	// This is necessary to not break on node tests
+	if ( typeof window === "undefined" ) {
+		return;
+	}
+
+	qunit = id( "qunit" );
+	if ( qunit ) {
+		qunit.innerHTML =
+			"<h1 id='qunit-header'>" + escapeText( document.title ) + "</h1>" +
+			"<h2 id='qunit-banner'></h2>" +
+			"<div id='qunit-testrunner-toolbar'></div>" +
+			"<h2 id='qunit-userAgent'></h2>" +
+			"<ol id='qunit-tests'></ol>";
+	}
+
+	tests = id( "qunit-tests" );
+	banner = id( "qunit-banner" );
+	result = id( "qunit-testresult" );
+
+	if ( tests ) {
+		tests.innerHTML = "";
+	}
+
+	if ( banner ) {
+		banner.className = "";
+	}
+
+	if ( result ) {
+		result.parentNode.removeChild( result );
+	}
+
+	if ( tests ) {
+		result = document.createElement( "p" );
+		result.id = "qunit-testresult";
+		result.className = "result";
+		tests.parentNode.insertBefore( result, tests );
+		result.innerHTML = "Running...<br />&#160;";
+	}
+};
+
+// Don't load the HTML Reporter on non-Browser environments
+if ( typeof window === "undefined" ) {
+	return;
+}
+
+var config = QUnit.config,
+	hasOwn = Object.prototype.hasOwnProperty,
+	defined = {
+		document: window.document !== undefined,
+		sessionStorage: (function() {
+			var x = "qunit-test-string";
+			try {
+				sessionStorage.setItem( x, x );
+				sessionStorage.removeItem( x );
+				return true;
+			} catch ( e ) {
+				return false;
+			}
+		}())
+	},
+	modulesList = [];
+
+/**
+* Escape text for attribute or text content.
+*/
+function escapeText( s ) {
+	if ( !s ) {
+		return "";
+	}
+	s = s + "";
+
+	// Both single quotes and double quotes (for attributes)
+	return s.replace( /['"<>&]/g, function( s ) {
+		switch ( s ) {
+		case "'":
+			return "&#039;";
+		case "\"":
+			return "&quot;";
+		case "<":
+			return "&lt;";
+		case ">":
+			return "&gt;";
+		case "&":
+			return "&amp;";
+		}
+	});
+}
+
+/**
+ * @param {HTMLElement} elem
+ * @param {string} type
+ * @param {Function} fn
+ */
+function addEvent( elem, type, fn ) {
+	if ( elem.addEventListener ) {
+
+		// Standards-based browsers
+		elem.addEventListener( type, fn, false );
+	} else if ( elem.attachEvent ) {
+
+		// support: IE <9
+		elem.attachEvent( "on" + type, fn );
+	}
+}
+
+/**
+ * @param {Array|NodeList} elems
+ * @param {string} type
+ * @param {Function} fn
+ */
+function addEvents( elems, type, fn ) {
+	var i = elems.length;
+	while ( i-- ) {
+		addEvent( elems[ i ], type, fn );
+	}
+}
+
+function hasClass( elem, name ) {
+	return ( " " + elem.className + " " ).indexOf( " " + name + " " ) >= 0;
+}
+
+function addClass( elem, name ) {
+	if ( !hasClass( elem, name ) ) {
+		elem.className += ( elem.className ? " " : "" ) + name;
+	}
+}
+
+function toggleClass( elem, name ) {
+	if ( hasClass( elem, name ) ) {
+		removeClass( elem, name );
+	} else {
+		addClass( elem, name );
+	}
+}
+
+function removeClass( elem, name ) {
+	var set = " " + elem.className + " ";
+
+	// Class name may appear multiple times
+	while ( set.indexOf( " " + name + " " ) >= 0 ) {
+		set = set.replace( " " + name + " ", " " );
+	}
+
+	// trim for prettiness
+	elem.className = typeof set.trim === "function" ? set.trim() : set.replace( /^\s+|\s+$/g, "" );
+}
+
+function id( name ) {
+	return defined.document && document.getElementById && document.getElementById( name );
+}
+
+function getUrlConfigHtml() {
+	var i, j, val,
+		escaped, escapedTooltip,
+		selection = false,
+		len = config.urlConfig.length,
+		urlConfigHtml = "";
+
+	for ( i = 0; i < len; i++ ) {
+		val = config.urlConfig[ i ];
+		if ( typeof val === "string" ) {
+			val = {
+				id: val,
+				label: val
+			};
+		}
+
+		escaped = escapeText( val.id );
+		escapedTooltip = escapeText( val.tooltip );
+
+		if ( config[ val.id ] === undefined ) {
+			config[ val.id ] = QUnit.urlParams[ val.id ];
+		}
+
+		if ( !val.value || typeof val.value === "string" ) {
+			urlConfigHtml += "<input id='qunit-urlconfig-" + escaped +
+				"' name='" + escaped + "' type='checkbox'" +
+				( val.value ? " value='" + escapeText( val.value ) + "'" : "" ) +
+				( config[ val.id ] ? " checked='checked'" : "" ) +
+				" title='" + escapedTooltip + "' /><label for='qunit-urlconfig-" + escaped +
+				"' title='" + escapedTooltip + "'>" + val.label + "</label>";
+		} else {
+			urlConfigHtml += "<label for='qunit-urlconfig-" + escaped +
+				"' title='" + escapedTooltip + "'>" + val.label +
+				": </label><select id='qunit-urlconfig-" + escaped +
+				"' name='" + escaped + "' title='" + escapedTooltip + "'><option></option>";
+
+			if ( QUnit.is( "array", val.value ) ) {
+				for ( j = 0; j < val.value.length; j++ ) {
+					escaped = escapeText( val.value[ j ] );
+					urlConfigHtml += "<option value='" + escaped + "'" +
+						( config[ val.id ] === val.value[ j ] ?
+							( selection = true ) && " selected='selected'" : "" ) +
+						">" + escaped + "</option>";
+				}
+			} else {
+				for ( j in val.value ) {
+					if ( hasOwn.call( val.value, j ) ) {
+						urlConfigHtml += "<option value='" + escapeText( j ) + "'" +
+							( config[ val.id ] === j ?
+								( selection = true ) && " selected='selected'" : "" ) +
+							">" + escapeText( val.value[ j ] ) + "</option>";
+					}
+				}
+			}
+			if ( config[ val.id ] && !selection ) {
+				escaped = escapeText( config[ val.id ] );
+				urlConfigHtml += "<option value='" + escaped +
+					"' selected='selected' disabled='disabled'>" + escaped + "</option>";
+			}
+			urlConfigHtml += "</select>";
+		}
+	}
+
+	return urlConfigHtml;
+}
+
+// Handle "click" events on toolbar checkboxes and "change" for select menus.
+// Updates the URL with the new state of `config.urlConfig` values.
+function toolbarChanged() {
+	var updatedUrl, value,
+		field = this,
+		params = {};
+
+	// Detect if field is a select menu or a checkbox
+	if ( "selectedIndex" in field ) {
+		value = field.options[ field.selectedIndex ].value || undefined;
+	} else {
+		value = field.checked ? ( field.defaultValue || true ) : undefined;
+	}
+
+	params[ field.name ] = value;
+	updatedUrl = setUrl( params );
+
+	if ( "hidepassed" === field.name && "replaceState" in window.history ) {
+		config[ field.name ] = value || false;
+		if ( value ) {
+			addClass( id( "qunit-tests" ), "hidepass" );
+		} else {
+			removeClass( id( "qunit-tests" ), "hidepass" );
+		}
+
+		// It is not necessary to refresh the whole page
+		window.history.replaceState( null, "", updatedUrl );
+	} else {
+		window.location = updatedUrl;
+	}
+}
+
+function setUrl( params ) {
+	var key,
+		querystring = "?";
+
+	params = QUnit.extend( QUnit.extend( {}, QUnit.urlParams ), params );
+
+	for ( key in params ) {
+		if ( hasOwn.call( params, key ) ) {
+			if ( params[ key ] === undefined ) {
+				continue;
+			}
+			querystring += encodeURIComponent( key );
+			if ( params[ key ] !== true ) {
+				querystring += "=" + encodeURIComponent( params[ key ] );
+			}
+			querystring += "&";
+		}
+	}
+	return location.protocol + "//" + location.host +
+		location.pathname + querystring.slice( 0, -1 );
+}
+
+function applyUrlParams() {
+	var selectBox = id( "qunit-modulefilter" ),
+		selection = decodeURIComponent( selectBox.options[ selectBox.selectedIndex ].value ),
+		filter = id( "qunit-filter-input" ).value;
+
+	window.location = setUrl({
+		module: ( selection === "" ) ? undefined : selection,
+		filter: ( filter === "" ) ? undefined : filter,
+
+		// Remove testId filter
+		testId: undefined
+	});
+}
+
+function toolbarUrlConfigContainer() {
+	var urlConfigContainer = document.createElement( "span" );
+
+	urlConfigContainer.innerHTML = getUrlConfigHtml();
+	addClass( urlConfigContainer, "qunit-url-config" );
+
+	// For oldIE support:
+	// * Add handlers to the individual elements instead of the container
+	// * Use "click" instead of "change" for checkboxes
+	addEvents( urlConfigContainer.getElementsByTagName( "input" ), "click", toolbarChanged );
+	addEvents( urlConfigContainer.getElementsByTagName( "select" ), "change", toolbarChanged );
+
+	return urlConfigContainer;
+}
+
+function toolbarLooseFilter() {
+	var filter = document.createElement( "form" ),
+		label = document.createElement( "label" ),
+		input = document.createElement( "input" ),
+		button = document.createElement( "button" );
+
+	addClass( filter, "qunit-filter" );
+
+	label.innerHTML = "Filter: ";
+
+	input.type = "text";
+	input.value = config.filter || "";
+	input.name = "filter";
+	input.id = "qunit-filter-input";
+
+	button.innerHTML = "Go";
+
+	label.appendChild( input );
+
+	filter.appendChild( label );
+	filter.appendChild( button );
+	addEvent( filter, "submit", function( ev ) {
+		applyUrlParams();
+
+		if ( ev && ev.preventDefault ) {
+			ev.preventDefault();
+		}
+
+		return false;
+	});
+
+	return filter;
+}
+
+function toolbarModuleFilterHtml() {
+	var i,
+		moduleFilterHtml = "";
+
+	if ( !modulesList.length ) {
+		return false;
+	}
+
+	modulesList.sort(function( a, b ) {
+		return a.localeCompare( b );
+	});
+
+	moduleFilterHtml += "<label for='qunit-modulefilter'>Module: </label>" +
+		"<select id='qunit-modulefilter' name='modulefilter'><option value='' " +
+		( QUnit.urlParams.module === undefined ? "selected='selected'" : "" ) +
+		">< All Modules ></option>";
+
+	for ( i = 0; i < modulesList.length; i++ ) {
+		moduleFilterHtml += "<option value='" +
+			escapeText( encodeURIComponent( modulesList[ i ] ) ) + "' " +
+			( QUnit.urlParams.module === modulesList[ i ] ? "selected='selected'" : "" ) +
+			">" + escapeText( modulesList[ i ] ) + "</option>";
+	}
+	moduleFilterHtml += "</select>";
+
+	return moduleFilterHtml;
+}
+
+function toolbarModuleFilter() {
+	var toolbar = id( "qunit-testrunner-toolbar" ),
+		moduleFilter = document.createElement( "span" ),
+		moduleFilterHtml = toolbarModuleFilterHtml();
+
+	if ( !toolbar || !moduleFilterHtml ) {
+		return false;
+	}
+
+	moduleFilter.setAttribute( "id", "qunit-modulefilter-container" );
+	moduleFilter.innerHTML = moduleFilterHtml;
+
+	addEvent( moduleFilter.lastChild, "change", applyUrlParams );
+
+	toolbar.appendChild( moduleFilter );
+}
+
+function appendToolbar() {
+	var toolbar = id( "qunit-testrunner-toolbar" );
+
+	if ( toolbar ) {
+		toolbar.appendChild( toolbarUrlConfigContainer() );
+		toolbar.appendChild( toolbarLooseFilter() );
+	}
+}
+
+function appendHeader() {
+	var header = id( "qunit-header" );
+
+	if ( header ) {
+		header.innerHTML = "<a href='" +
+			setUrl({ filter: undefined, module: undefined, testId: undefined }) +
+			"'>" + header.innerHTML + "</a> ";
+	}
+}
+
+function appendBanner() {
+	var banner = id( "qunit-banner" );
+
+	if ( banner ) {
+		banner.className = "";
+	}
+}
+
+function appendTestResults() {
+	var tests = id( "qunit-tests" ),
+		result = id( "qunit-testresult" );
+
+	if ( result ) {
+		result.parentNode.removeChild( result );
+	}
+
+	if ( tests ) {
+		tests.innerHTML = "";
+		result = document.createElement( "p" );
+		result.id = "qunit-testresult";
+		result.className = "result";
+		tests.parentNode.insertBefore( result, tests );
+		result.innerHTML = "Running...<br />&#160;";
+	}
+}
+
+function storeFixture() {
+	var fixture = id( "qunit-fixture" );
+	if ( fixture ) {
+		config.fixture = fixture.innerHTML;
+	}
+}
+
+function appendUserAgent() {
+	var userAgent = id( "qunit-userAgent" );
+	if ( userAgent ) {
+		userAgent.innerHTML = "";
+		userAgent.appendChild( document.createTextNode( navigator.userAgent ) );
+	}
+}
+
+function appendTestsList( modules ) {
+	var i, l, x, z, test, moduleObj;
+
+	for ( i = 0, l = modules.length; i < l; i++ ) {
+		moduleObj = modules[ i ];
+
+		if ( moduleObj.name ) {
+			modulesList.push( moduleObj.name );
+		}
+
+		for ( x = 0, z = moduleObj.tests.length; x < z; x++ ) {
+			test = moduleObj.tests[ x ];
+
+			appendTest( test.name, test.testId, moduleObj.name );
+		}
+	}
+}
+
+function appendTest( name, testId, moduleName ) {
+	var title, rerunTrigger, testBlock, assertList,
+		tests = id( "qunit-tests" );
+
+	if ( !tests ) {
+		return;
+	}
+
+	title = document.createElement( "strong" );
+	title.innerHTML = getNameHtml( name, moduleName );
+
+	rerunTrigger = document.createElement( "a" );
+	rerunTrigger.innerHTML = "Rerun";
+	rerunTrigger.href = setUrl({ testId: testId });
+
+	testBlock = document.createElement( "li" );
+	testBlock.appendChild( title );
+	testBlock.appendChild( rerunTrigger );
+	testBlock.id = "qunit-test-output-" + testId;
+
+	assertList = document.createElement( "ol" );
+	assertList.className = "qunit-assert-list";
+
+	testBlock.appendChild( assertList );
+
+	tests.appendChild( testBlock );
+}
+
+// HTML Reporter initialization and load
+QUnit.begin(function( details ) {
+	var qunit = id( "qunit" );
+
+	// Fixture is the only one necessary to run without the #qunit element
+	storeFixture();
+
+	if ( qunit ) {
+		qunit.innerHTML =
+			"<h1 id='qunit-header'>" + escapeText( document.title ) + "</h1>" +
+			"<h2 id='qunit-banner'></h2>" +
+			"<div id='qunit-testrunner-toolbar'></div>" +
+			"<h2 id='qunit-userAgent'></h2>" +
+			"<ol id='qunit-tests'></ol>";
+	}
+
+	appendHeader();
+	appendBanner();
+	appendTestResults();
+	appendUserAgent();
+	appendToolbar();
+	appendTestsList( details.modules );
+	toolbarModuleFilter();
+
+	if ( qunit && config.hidepassed ) {
+		addClass( qunit.lastChild, "hidepass" );
+	}
+});
+
+QUnit.done(function( details ) {
+	var i, key,
+		banner = id( "qunit-banner" ),
+		tests = id( "qunit-tests" ),
+		html = [
+			"Tests completed in ",
+			details.runtime,
+			" milliseconds.<br />",
+			"<span class='passed'>",
+			details.passed,
+			"</span> assertions of <span class='total'>",
+			details.total,
+			"</span> passed, <span class='failed'>",
+			details.failed,
+			"</span> failed."
+		].join( "" );
+
+	if ( banner ) {
+		banner.className = details.failed ? "qunit-fail" : "qunit-pass";
+	}
+
+	if ( tests ) {
+		id( "qunit-testresult" ).innerHTML = html;
+	}
+
+	if ( config.altertitle && defined.document && document.title ) {
+
+		// show ✖ for good, ✔ for bad suite result in title
+		// use escape sequences in case file gets loaded with non-utf-8-charset
+		document.title = [
+			( details.failed ? "\u2716" : "\u2714" ),
+			document.title.replace( /^[\u2714\u2716] /i, "" )
+		].join( " " );
+	}
+
+	// clear own sessionStorage items if all tests passed
+	if ( config.reorder && defined.sessionStorage && details.failed === 0 ) {
+		for ( i = 0; i < sessionStorage.length; i++ ) {
+			key = sessionStorage.key( i++ );
+			if ( key.indexOf( "qunit-test-" ) === 0 ) {
+				sessionStorage.removeItem( key );
+			}
+		}
+	}
+
+	// scroll back to top to show results
+	if ( config.scrolltop && window.scrollTo ) {
+		window.scrollTo( 0, 0 );
+	}
+});
+
+function getNameHtml( name, module ) {
+	var nameHtml = "";
+
+	if ( module ) {
+		nameHtml = "<span class='module-name'>" + escapeText( module ) + "</span>: ";
+	}
+
+	nameHtml += "<span class='test-name'>" + escapeText( name ) + "</span>";
+
+	return nameHtml;
+}
+
+QUnit.testStart(function( details ) {
+	var running, testBlock;
+
+	testBlock = id( "qunit-test-output-" + details.testId );
+	if ( testBlock ) {
+		testBlock.className = "running";
+	} else {
+
+		// Report later registered tests
+		appendTest( details.name, details.testId, details.module );
+	}
+
+	running = id( "qunit-testresult" );
+	if ( running ) {
+		running.innerHTML = "Running: <br />" + getNameHtml( details.name, details.module );
+	}
+
+});
+
+QUnit.log(function( details ) {
+	var assertList, assertLi,
+		message, expected, actual,
+		testItem = id( "qunit-test-output-" + details.testId );
+
+	if ( !testItem ) {
+		return;
+	}
+
+	message = escapeText( details.message ) || ( details.result ? "okay" : "failed" );
+	message = "<span class='test-message'>" + message + "</span>";
+	message += "<span class='runtime'>@ " + details.runtime + " ms</span>";
+
+	// pushFailure doesn't provide details.expected
+	// when it calls, it's implicit to also not show expected and diff stuff
+	// Also, we need to check details.expected existence, as it can exist and be undefined
+	if ( !details.result && hasOwn.call( details, "expected" ) ) {
+		expected = escapeText( QUnit.dump.parse( details.expected ) );
+		actual = escapeText( QUnit.dump.parse( details.actual ) );
+		message += "<table><tr class='test-expected'><th>Expected: </th><td><pre>" +
+			expected +
+			"</pre></td></tr>";
+
+		if ( actual !== expected ) {
+			message += "<tr class='test-actual'><th>Result: </th><td><pre>" +
+				actual + "</pre></td></tr>" +
+				"<tr class='test-diff'><th>Diff: </th><td><pre>" +
+				QUnit.diff( expected, actual ) + "</pre></td></tr>";
+		}
+
+		if ( details.source ) {
+			message += "<tr class='test-source'><th>Source: </th><td><pre>" +
+				escapeText( details.source ) + "</pre></td></tr>";
+		}
+
+		message += "</table>";
+
+	// this occours when pushFailure is set and we have an extracted stack trace
+	} else if ( !details.result && details.source ) {
+		message += "<table>" +
+			"<tr class='test-source'><th>Source: </th><td><pre>" +
+			escapeText( details.source ) + "</pre></td></tr>" +
+			"</table>";
+	}
+
+	assertList = testItem.getElementsByTagName( "ol" )[ 0 ];
+
+	assertLi = document.createElement( "li" );
+	assertLi.className = details.result ? "pass" : "fail";
+	assertLi.innerHTML = message;
+	assertList.appendChild( assertLi );
+});
+
+QUnit.testDone(function( details ) {
+	var testTitle, time, testItem, assertList,
+		good, bad, testCounts, skipped,
+		tests = id( "qunit-tests" );
+
+	if ( !tests ) {
+		return;
+	}
+
+	testItem = id( "qunit-test-output-" + details.testId );
+
+	assertList = testItem.getElementsByTagName( "ol" )[ 0 ];
+
+	good = details.passed;
+	bad = details.failed;
+
+	// store result when possible
+	if ( config.reorder && defined.sessionStorage ) {
+		if ( bad ) {
+			sessionStorage.setItem( "qunit-test-" + details.module + "-" + details.name, bad );
+		} else {
+			sessionStorage.removeItem( "qunit-test-" + details.module + "-" + details.name );
+		}
+	}
+
+	if ( bad === 0 ) {
+		addClass( assertList, "qunit-collapsed" );
+	}
+
+	// testItem.firstChild is the test name
+	testTitle = testItem.firstChild;
+
+	testCounts = bad ?
+		"<b class='failed'>" + bad + "</b>, " + "<b class='passed'>" + good + "</b>, " :
+		"";
+
+	testTitle.innerHTML += " <b class='counts'>(" + testCounts +
+		details.assertions.length + ")</b>";
+
+	if ( details.skipped ) {
+		testItem.className = "skipped";
+		skipped = document.createElement( "em" );
+		skipped.className = "qunit-skipped-label";
+		skipped.innerHTML = "skipped";
+		testItem.insertBefore( skipped, testTitle );
+	} else {
+		addEvent( testTitle, "click", function() {
+			toggleClass( assertList, "qunit-collapsed" );
+		});
+
+		testItem.className = bad ? "fail" : "pass";
+
+		time = document.createElement( "span" );
+		time.className = "runtime";
+		time.innerHTML = details.runtime + " ms";
+		testItem.insertBefore( time, assertList );
+	}
+});
+
+if ( !defined.document || document.readyState === "complete" ) {
+	config.pageLoaded = true;
+	config.autorun = true;
+}
+
+if ( defined.document ) {
+	addEvent( window, "load", QUnit.load );
+}
+
+})();
diff --git a/civicrm/bower_components/jquery/external/requirejs/require.js b/civicrm/bower_components/jquery/external/requirejs/require.js
new file mode 100644
index 0000000000000000000000000000000000000000..7f31fa20417d5e7f9bd26dde74d8678c34ff20af
--- /dev/null
+++ b/civicrm/bower_components/jquery/external/requirejs/require.js
@@ -0,0 +1,2076 @@
+/** vim: et:ts=4:sw=4:sts=4
+ * @license RequireJS 2.1.14 Copyright (c) 2010-2014, The Dojo Foundation All Rights Reserved.
+ * Available via the MIT or new BSD license.
+ * see: http://github.com/jrburke/requirejs for details
+ */
+//Not using strict: uneven strict support in browsers, #392, and causes
+//problems with requirejs.exec()/transpiler plugins that may not be strict.
+/*jslint regexp: true, nomen: true, sloppy: true */
+/*global window, navigator, document, importScripts, setTimeout, opera */
+
+var requirejs, require, define;
+(function (global) {
+    var req, s, head, baseElement, dataMain, src,
+        interactiveScript, currentlyAddingScript, mainScript, subPath,
+        version = '2.1.14',
+        commentRegExp = /(\/\*([\s\S]*?)\*\/|([^:]|^)\/\/(.*)$)/mg,
+        cjsRequireRegExp = /[^.]\s*require\s*\(\s*["']([^'"\s]+)["']\s*\)/g,
+        jsSuffixRegExp = /\.js$/,
+        currDirRegExp = /^\.\//,
+        op = Object.prototype,
+        ostring = op.toString,
+        hasOwn = op.hasOwnProperty,
+        ap = Array.prototype,
+        apsp = ap.splice,
+        isBrowser = !!(typeof window !== 'undefined' && typeof navigator !== 'undefined' && window.document),
+        isWebWorker = !isBrowser && typeof importScripts !== 'undefined',
+        //PS3 indicates loaded and complete, but need to wait for complete
+        //specifically. Sequence is 'loading', 'loaded', execution,
+        // then 'complete'. The UA check is unfortunate, but not sure how
+        //to feature test w/o causing perf issues.
+        readyRegExp = isBrowser && navigator.platform === 'PLAYSTATION 3' ?
+                      /^complete$/ : /^(complete|loaded)$/,
+        defContextName = '_',
+        //Oh the tragedy, detecting opera. See the usage of isOpera for reason.
+        isOpera = typeof opera !== 'undefined' && opera.toString() === '[object Opera]',
+        contexts = {},
+        cfg = {},
+        globalDefQueue = [],
+        useInteractive = false;
+
+    function isFunction(it) {
+        return ostring.call(it) === '[object Function]';
+    }
+
+    function isArray(it) {
+        return ostring.call(it) === '[object Array]';
+    }
+
+    /**
+     * Helper function for iterating over an array. If the func returns
+     * a true value, it will break out of the loop.
+     */
+    function each(ary, func) {
+        if (ary) {
+            var i;
+            for (i = 0; i < ary.length; i += 1) {
+                if (ary[i] && func(ary[i], i, ary)) {
+                    break;
+                }
+            }
+        }
+    }
+
+    /**
+     * Helper function for iterating over an array backwards. If the func
+     * returns a true value, it will break out of the loop.
+     */
+    function eachReverse(ary, func) {
+        if (ary) {
+            var i;
+            for (i = ary.length - 1; i > -1; i -= 1) {
+                if (ary[i] && func(ary[i], i, ary)) {
+                    break;
+                }
+            }
+        }
+    }
+
+    function hasProp(obj, prop) {
+        return hasOwn.call(obj, prop);
+    }
+
+    function getOwn(obj, prop) {
+        return hasProp(obj, prop) && obj[prop];
+    }
+
+    /**
+     * Cycles over properties in an object and calls a function for each
+     * property value. If the function returns a truthy value, then the
+     * iteration is stopped.
+     */
+    function eachProp(obj, func) {
+        var prop;
+        for (prop in obj) {
+            if (hasProp(obj, prop)) {
+                if (func(obj[prop], prop)) {
+                    break;
+                }
+            }
+        }
+    }
+
+    /**
+     * Simple function to mix in properties from source into target,
+     * but only if target does not already have a property of the same name.
+     */
+    function mixin(target, source, force, deepStringMixin) {
+        if (source) {
+            eachProp(source, function (value, prop) {
+                if (force || !hasProp(target, prop)) {
+                    if (deepStringMixin && typeof value === 'object' && value &&
+                        !isArray(value) && !isFunction(value) &&
+                        !(value instanceof RegExp)) {
+
+                        if (!target[prop]) {
+                            target[prop] = {};
+                        }
+                        mixin(target[prop], value, force, deepStringMixin);
+                    } else {
+                        target[prop] = value;
+                    }
+                }
+            });
+        }
+        return target;
+    }
+
+    //Similar to Function.prototype.bind, but the 'this' object is specified
+    //first, since it is easier to read/figure out what 'this' will be.
+    function bind(obj, fn) {
+        return function () {
+            return fn.apply(obj, arguments);
+        };
+    }
+
+    function scripts() {
+        return document.getElementsByTagName('script');
+    }
+
+    function defaultOnError(err) {
+        throw err;
+    }
+
+    //Allow getting a global that is expressed in
+    //dot notation, like 'a.b.c'.
+    function getGlobal(value) {
+        if (!value) {
+            return value;
+        }
+        var g = global;
+        each(value.split('.'), function (part) {
+            g = g[part];
+        });
+        return g;
+    }
+
+    /**
+     * Constructs an error with a pointer to an URL with more information.
+     * @param {String} id the error ID that maps to an ID on a web page.
+     * @param {String} message human readable error.
+     * @param {Error} [err] the original error, if there is one.
+     *
+     * @returns {Error}
+     */
+    function makeError(id, msg, err, requireModules) {
+        var e = new Error(msg + '\nhttp://requirejs.org/docs/errors.html#' + id);
+        e.requireType = id;
+        e.requireModules = requireModules;
+        if (err) {
+            e.originalError = err;
+        }
+        return e;
+    }
+
+    if (typeof define !== 'undefined') {
+        //If a define is already in play via another AMD loader,
+        //do not overwrite.
+        return;
+    }
+
+    if (typeof requirejs !== 'undefined') {
+        if (isFunction(requirejs)) {
+            //Do not overwrite an existing requirejs instance.
+            return;
+        }
+        cfg = requirejs;
+        requirejs = undefined;
+    }
+
+    //Allow for a require config object
+    if (typeof require !== 'undefined' && !isFunction(require)) {
+        //assume it is a config object.
+        cfg = require;
+        require = undefined;
+    }
+
+    function newContext(contextName) {
+        var inCheckLoaded, Module, context, handlers,
+            checkLoadedTimeoutId,
+            config = {
+                //Defaults. Do not set a default for map
+                //config to speed up normalize(), which
+                //will run faster if there is no default.
+                waitSeconds: 7,
+                baseUrl: './',
+                paths: {},
+                bundles: {},
+                pkgs: {},
+                shim: {},
+                config: {}
+            },
+            registry = {},
+            //registry of just enabled modules, to speed
+            //cycle breaking code when lots of modules
+            //are registered, but not activated.
+            enabledRegistry = {},
+            undefEvents = {},
+            defQueue = [],
+            defined = {},
+            urlFetched = {},
+            bundlesMap = {},
+            requireCounter = 1,
+            unnormalizedCounter = 1;
+
+        /**
+         * Trims the . and .. from an array of path segments.
+         * It will keep a leading path segment if a .. will become
+         * the first path segment, to help with module name lookups,
+         * which act like paths, but can be remapped. But the end result,
+         * all paths that use this function should look normalized.
+         * NOTE: this method MODIFIES the input array.
+         * @param {Array} ary the array of path segments.
+         */
+        function trimDots(ary) {
+            var i, part;
+            for (i = 0; i < ary.length; i++) {
+                part = ary[i];
+                if (part === '.') {
+                    ary.splice(i, 1);
+                    i -= 1;
+                } else if (part === '..') {
+                    // If at the start, or previous value is still ..,
+                    // keep them so that when converted to a path it may
+                    // still work when converted to a path, even though
+                    // as an ID it is less than ideal. In larger point
+                    // releases, may be better to just kick out an error.
+                    if (i === 0 || (i == 1 && ary[2] === '..') || ary[i - 1] === '..') {
+                        continue;
+                    } else if (i > 0) {
+                        ary.splice(i - 1, 2);
+                        i -= 2;
+                    }
+                }
+            }
+        }
+
+        /**
+         * Given a relative module name, like ./something, normalize it to
+         * a real name that can be mapped to a path.
+         * @param {String} name the relative name
+         * @param {String} baseName a real name that the name arg is relative
+         * to.
+         * @param {Boolean} applyMap apply the map config to the value. Should
+         * only be done if this normalization is for a dependency ID.
+         * @returns {String} normalized name
+         */
+        function normalize(name, baseName, applyMap) {
+            var pkgMain, mapValue, nameParts, i, j, nameSegment, lastIndex,
+                foundMap, foundI, foundStarMap, starI, normalizedBaseParts,
+                baseParts = (baseName && baseName.split('/')),
+                map = config.map,
+                starMap = map && map['*'];
+
+            //Adjust any relative paths.
+            if (name) {
+                name = name.split('/');
+                lastIndex = name.length - 1;
+
+                // If wanting node ID compatibility, strip .js from end
+                // of IDs. Have to do this here, and not in nameToUrl
+                // because node allows either .js or non .js to map
+                // to same file.
+                if (config.nodeIdCompat && jsSuffixRegExp.test(name[lastIndex])) {
+                    name[lastIndex] = name[lastIndex].replace(jsSuffixRegExp, '');
+                }
+
+                // Starts with a '.' so need the baseName
+                if (name[0].charAt(0) === '.' && baseParts) {
+                    //Convert baseName to array, and lop off the last part,
+                    //so that . matches that 'directory' and not name of the baseName's
+                    //module. For instance, baseName of 'one/two/three', maps to
+                    //'one/two/three.js', but we want the directory, 'one/two' for
+                    //this normalization.
+                    normalizedBaseParts = baseParts.slice(0, baseParts.length - 1);
+                    name = normalizedBaseParts.concat(name);
+                }
+
+                trimDots(name);
+                name = name.join('/');
+            }
+
+            //Apply map config if available.
+            if (applyMap && map && (baseParts || starMap)) {
+                nameParts = name.split('/');
+
+                outerLoop: for (i = nameParts.length; i > 0; i -= 1) {
+                    nameSegment = nameParts.slice(0, i).join('/');
+
+                    if (baseParts) {
+                        //Find the longest baseName segment match in the config.
+                        //So, do joins on the biggest to smallest lengths of baseParts.
+                        for (j = baseParts.length; j > 0; j -= 1) {
+                            mapValue = getOwn(map, baseParts.slice(0, j).join('/'));
+
+                            //baseName segment has config, find if it has one for
+                            //this name.
+                            if (mapValue) {
+                                mapValue = getOwn(mapValue, nameSegment);
+                                if (mapValue) {
+                                    //Match, update name to the new value.
+                                    foundMap = mapValue;
+                                    foundI = i;
+                                    break outerLoop;
+                                }
+                            }
+                        }
+                    }
+
+                    //Check for a star map match, but just hold on to it,
+                    //if there is a shorter segment match later in a matching
+                    //config, then favor over this star map.
+                    if (!foundStarMap && starMap && getOwn(starMap, nameSegment)) {
+                        foundStarMap = getOwn(starMap, nameSegment);
+                        starI = i;
+                    }
+                }
+
+                if (!foundMap && foundStarMap) {
+                    foundMap = foundStarMap;
+                    foundI = starI;
+                }
+
+                if (foundMap) {
+                    nameParts.splice(0, foundI, foundMap);
+                    name = nameParts.join('/');
+                }
+            }
+
+            // If the name points to a package's name, use
+            // the package main instead.
+            pkgMain = getOwn(config.pkgs, name);
+
+            return pkgMain ? pkgMain : name;
+        }
+
+        function removeScript(name) {
+            if (isBrowser) {
+                each(scripts(), function (scriptNode) {
+                    if (scriptNode.getAttribute('data-requiremodule') === name &&
+                            scriptNode.getAttribute('data-requirecontext') === context.contextName) {
+                        scriptNode.parentNode.removeChild(scriptNode);
+                        return true;
+                    }
+                });
+            }
+        }
+
+        function hasPathFallback(id) {
+            var pathConfig = getOwn(config.paths, id);
+            if (pathConfig && isArray(pathConfig) && pathConfig.length > 1) {
+                //Pop off the first array value, since it failed, and
+                //retry
+                pathConfig.shift();
+                context.require.undef(id);
+
+                //Custom require that does not do map translation, since
+                //ID is "absolute", already mapped/resolved.
+                context.makeRequire(null, {
+                    skipMap: true
+                })([id]);
+
+                return true;
+            }
+        }
+
+        //Turns a plugin!resource to [plugin, resource]
+        //with the plugin being undefined if the name
+        //did not have a plugin prefix.
+        function splitPrefix(name) {
+            var prefix,
+                index = name ? name.indexOf('!') : -1;
+            if (index > -1) {
+                prefix = name.substring(0, index);
+                name = name.substring(index + 1, name.length);
+            }
+            return [prefix, name];
+        }
+
+        /**
+         * Creates a module mapping that includes plugin prefix, module
+         * name, and path. If parentModuleMap is provided it will
+         * also normalize the name via require.normalize()
+         *
+         * @param {String} name the module name
+         * @param {String} [parentModuleMap] parent module map
+         * for the module name, used to resolve relative names.
+         * @param {Boolean} isNormalized: is the ID already normalized.
+         * This is true if this call is done for a define() module ID.
+         * @param {Boolean} applyMap: apply the map config to the ID.
+         * Should only be true if this map is for a dependency.
+         *
+         * @returns {Object}
+         */
+        function makeModuleMap(name, parentModuleMap, isNormalized, applyMap) {
+            var url, pluginModule, suffix, nameParts,
+                prefix = null,
+                parentName = parentModuleMap ? parentModuleMap.name : null,
+                originalName = name,
+                isDefine = true,
+                normalizedName = '';
+
+            //If no name, then it means it is a require call, generate an
+            //internal name.
+            if (!name) {
+                isDefine = false;
+                name = '_@r' + (requireCounter += 1);
+            }
+
+            nameParts = splitPrefix(name);
+            prefix = nameParts[0];
+            name = nameParts[1];
+
+            if (prefix) {
+                prefix = normalize(prefix, parentName, applyMap);
+                pluginModule = getOwn(defined, prefix);
+            }
+
+            //Account for relative paths if there is a base name.
+            if (name) {
+                if (prefix) {
+                    if (pluginModule && pluginModule.normalize) {
+                        //Plugin is loaded, use its normalize method.
+                        normalizedName = pluginModule.normalize(name, function (name) {
+                            return normalize(name, parentName, applyMap);
+                        });
+                    } else {
+                        // If nested plugin references, then do not try to
+                        // normalize, as it will not normalize correctly. This
+                        // places a restriction on resourceIds, and the longer
+                        // term solution is not to normalize until plugins are
+                        // loaded and all normalizations to allow for async
+                        // loading of a loader plugin. But for now, fixes the
+                        // common uses. Details in #1131
+                        normalizedName = name.indexOf('!') === -1 ?
+                                         normalize(name, parentName, applyMap) :
+                                         name;
+                    }
+                } else {
+                    //A regular module.
+                    normalizedName = normalize(name, parentName, applyMap);
+
+                    //Normalized name may be a plugin ID due to map config
+                    //application in normalize. The map config values must
+                    //already be normalized, so do not need to redo that part.
+                    nameParts = splitPrefix(normalizedName);
+                    prefix = nameParts[0];
+                    normalizedName = nameParts[1];
+                    isNormalized = true;
+
+                    url = context.nameToUrl(normalizedName);
+                }
+            }
+
+            //If the id is a plugin id that cannot be determined if it needs
+            //normalization, stamp it with a unique ID so two matching relative
+            //ids that may conflict can be separate.
+            suffix = prefix && !pluginModule && !isNormalized ?
+                     '_unnormalized' + (unnormalizedCounter += 1) :
+                     '';
+
+            return {
+                prefix: prefix,
+                name: normalizedName,
+                parentMap: parentModuleMap,
+                unnormalized: !!suffix,
+                url: url,
+                originalName: originalName,
+                isDefine: isDefine,
+                id: (prefix ?
+                        prefix + '!' + normalizedName :
+                        normalizedName) + suffix
+            };
+        }
+
+        function getModule(depMap) {
+            var id = depMap.id,
+                mod = getOwn(registry, id);
+
+            if (!mod) {
+                mod = registry[id] = new context.Module(depMap);
+            }
+
+            return mod;
+        }
+
+        function on(depMap, name, fn) {
+            var id = depMap.id,
+                mod = getOwn(registry, id);
+
+            if (hasProp(defined, id) &&
+                    (!mod || mod.defineEmitComplete)) {
+                if (name === 'defined') {
+                    fn(defined[id]);
+                }
+            } else {
+                mod = getModule(depMap);
+                if (mod.error && name === 'error') {
+                    fn(mod.error);
+                } else {
+                    mod.on(name, fn);
+                }
+            }
+        }
+
+        function onError(err, errback) {
+            var ids = err.requireModules,
+                notified = false;
+
+            if (errback) {
+                errback(err);
+            } else {
+                each(ids, function (id) {
+                    var mod = getOwn(registry, id);
+                    if (mod) {
+                        //Set error on module, so it skips timeout checks.
+                        mod.error = err;
+                        if (mod.events.error) {
+                            notified = true;
+                            mod.emit('error', err);
+                        }
+                    }
+                });
+
+                if (!notified) {
+                    req.onError(err);
+                }
+            }
+        }
+
+        /**
+         * Internal method to transfer globalQueue items to this context's
+         * defQueue.
+         */
+        function takeGlobalQueue() {
+            //Push all the globalDefQueue items into the context's defQueue
+            if (globalDefQueue.length) {
+                //Array splice in the values since the context code has a
+                //local var ref to defQueue, so cannot just reassign the one
+                //on context.
+                apsp.apply(defQueue,
+                           [defQueue.length, 0].concat(globalDefQueue));
+                globalDefQueue = [];
+            }
+        }
+
+        handlers = {
+            'require': function (mod) {
+                if (mod.require) {
+                    return mod.require;
+                } else {
+                    return (mod.require = context.makeRequire(mod.map));
+                }
+            },
+            'exports': function (mod) {
+                mod.usingExports = true;
+                if (mod.map.isDefine) {
+                    if (mod.exports) {
+                        return (defined[mod.map.id] = mod.exports);
+                    } else {
+                        return (mod.exports = defined[mod.map.id] = {});
+                    }
+                }
+            },
+            'module': function (mod) {
+                if (mod.module) {
+                    return mod.module;
+                } else {
+                    return (mod.module = {
+                        id: mod.map.id,
+                        uri: mod.map.url,
+                        config: function () {
+                            return  getOwn(config.config, mod.map.id) || {};
+                        },
+                        exports: mod.exports || (mod.exports = {})
+                    });
+                }
+            }
+        };
+
+        function cleanRegistry(id) {
+            //Clean up machinery used for waiting modules.
+            delete registry[id];
+            delete enabledRegistry[id];
+        }
+
+        function breakCycle(mod, traced, processed) {
+            var id = mod.map.id;
+
+            if (mod.error) {
+                mod.emit('error', mod.error);
+            } else {
+                traced[id] = true;
+                each(mod.depMaps, function (depMap, i) {
+                    var depId = depMap.id,
+                        dep = getOwn(registry, depId);
+
+                    //Only force things that have not completed
+                    //being defined, so still in the registry,
+                    //and only if it has not been matched up
+                    //in the module already.
+                    if (dep && !mod.depMatched[i] && !processed[depId]) {
+                        if (getOwn(traced, depId)) {
+                            mod.defineDep(i, defined[depId]);
+                            mod.check(); //pass false?
+                        } else {
+                            breakCycle(dep, traced, processed);
+                        }
+                    }
+                });
+                processed[id] = true;
+            }
+        }
+
+        function checkLoaded() {
+            var err, usingPathFallback,
+                waitInterval = config.waitSeconds * 1000,
+                //It is possible to disable the wait interval by using waitSeconds of 0.
+                expired = waitInterval && (context.startTime + waitInterval) < new Date().getTime(),
+                noLoads = [],
+                reqCalls = [],
+                stillLoading = false,
+                needCycleCheck = true;
+
+            //Do not bother if this call was a result of a cycle break.
+            if (inCheckLoaded) {
+                return;
+            }
+
+            inCheckLoaded = true;
+
+            //Figure out the state of all the modules.
+            eachProp(enabledRegistry, function (mod) {
+                var map = mod.map,
+                    modId = map.id;
+
+                //Skip things that are not enabled or in error state.
+                if (!mod.enabled) {
+                    return;
+                }
+
+                if (!map.isDefine) {
+                    reqCalls.push(mod);
+                }
+
+                if (!mod.error) {
+                    //If the module should be executed, and it has not
+                    //been inited and time is up, remember it.
+                    if (!mod.inited && expired) {
+                        if (hasPathFallback(modId)) {
+                            usingPathFallback = true;
+                            stillLoading = true;
+                        } else {
+                            noLoads.push(modId);
+                            removeScript(modId);
+                        }
+                    } else if (!mod.inited && mod.fetched && map.isDefine) {
+                        stillLoading = true;
+                        if (!map.prefix) {
+                            //No reason to keep looking for unfinished
+                            //loading. If the only stillLoading is a
+                            //plugin resource though, keep going,
+                            //because it may be that a plugin resource
+                            //is waiting on a non-plugin cycle.
+                            return (needCycleCheck = false);
+                        }
+                    }
+                }
+            });
+
+            if (expired && noLoads.length) {
+                //If wait time expired, throw error of unloaded modules.
+                err = makeError('timeout', 'Load timeout for modules: ' + noLoads, null, noLoads);
+                err.contextName = context.contextName;
+                return onError(err);
+            }
+
+            //Not expired, check for a cycle.
+            if (needCycleCheck) {
+                each(reqCalls, function (mod) {
+                    breakCycle(mod, {}, {});
+                });
+            }
+
+            //If still waiting on loads, and the waiting load is something
+            //other than a plugin resource, or there are still outstanding
+            //scripts, then just try back later.
+            if ((!expired || usingPathFallback) && stillLoading) {
+                //Something is still waiting to load. Wait for it, but only
+                //if a timeout is not already in effect.
+                if ((isBrowser || isWebWorker) && !checkLoadedTimeoutId) {
+                    checkLoadedTimeoutId = setTimeout(function () {
+                        checkLoadedTimeoutId = 0;
+                        checkLoaded();
+                    }, 50);
+                }
+            }
+
+            inCheckLoaded = false;
+        }
+
+        Module = function (map) {
+            this.events = getOwn(undefEvents, map.id) || {};
+            this.map = map;
+            this.shim = getOwn(config.shim, map.id);
+            this.depExports = [];
+            this.depMaps = [];
+            this.depMatched = [];
+            this.pluginMaps = {};
+            this.depCount = 0;
+
+            /* this.exports this.factory
+               this.depMaps = [],
+               this.enabled, this.fetched
+            */
+        };
+
+        Module.prototype = {
+            init: function (depMaps, factory, errback, options) {
+                options = options || {};
+
+                //Do not do more inits if already done. Can happen if there
+                //are multiple define calls for the same module. That is not
+                //a normal, common case, but it is also not unexpected.
+                if (this.inited) {
+                    return;
+                }
+
+                this.factory = factory;
+
+                if (errback) {
+                    //Register for errors on this module.
+                    this.on('error', errback);
+                } else if (this.events.error) {
+                    //If no errback already, but there are error listeners
+                    //on this module, set up an errback to pass to the deps.
+                    errback = bind(this, function (err) {
+                        this.emit('error', err);
+                    });
+                }
+
+                //Do a copy of the dependency array, so that
+                //source inputs are not modified. For example
+                //"shim" deps are passed in here directly, and
+                //doing a direct modification of the depMaps array
+                //would affect that config.
+                this.depMaps = depMaps && depMaps.slice(0);
+
+                this.errback = errback;
+
+                //Indicate this module has be initialized
+                this.inited = true;
+
+                this.ignore = options.ignore;
+
+                //Could have option to init this module in enabled mode,
+                //or could have been previously marked as enabled. However,
+                //the dependencies are not known until init is called. So
+                //if enabled previously, now trigger dependencies as enabled.
+                if (options.enabled || this.enabled) {
+                    //Enable this module and dependencies.
+                    //Will call this.check()
+                    this.enable();
+                } else {
+                    this.check();
+                }
+            },
+
+            defineDep: function (i, depExports) {
+                //Because of cycles, defined callback for a given
+                //export can be called more than once.
+                if (!this.depMatched[i]) {
+                    this.depMatched[i] = true;
+                    this.depCount -= 1;
+                    this.depExports[i] = depExports;
+                }
+            },
+
+            fetch: function () {
+                if (this.fetched) {
+                    return;
+                }
+                this.fetched = true;
+
+                context.startTime = (new Date()).getTime();
+
+                var map = this.map;
+
+                //If the manager is for a plugin managed resource,
+                //ask the plugin to load it now.
+                if (this.shim) {
+                    context.makeRequire(this.map, {
+                        enableBuildCallback: true
+                    })(this.shim.deps || [], bind(this, function () {
+                        return map.prefix ? this.callPlugin() : this.load();
+                    }));
+                } else {
+                    //Regular dependency.
+                    return map.prefix ? this.callPlugin() : this.load();
+                }
+            },
+
+            load: function () {
+                var url = this.map.url;
+
+                //Regular dependency.
+                if (!urlFetched[url]) {
+                    urlFetched[url] = true;
+                    context.load(this.map.id, url);
+                }
+            },
+
+            /**
+             * Checks if the module is ready to define itself, and if so,
+             * define it.
+             */
+            check: function () {
+                if (!this.enabled || this.enabling) {
+                    return;
+                }
+
+                var err, cjsModule,
+                    id = this.map.id,
+                    depExports = this.depExports,
+                    exports = this.exports,
+                    factory = this.factory;
+
+                if (!this.inited) {
+                    this.fetch();
+                } else if (this.error) {
+                    this.emit('error', this.error);
+                } else if (!this.defining) {
+                    //The factory could trigger another require call
+                    //that would result in checking this module to
+                    //define itself again. If already in the process
+                    //of doing that, skip this work.
+                    this.defining = true;
+
+                    if (this.depCount < 1 && !this.defined) {
+                        if (isFunction(factory)) {
+                            //If there is an error listener, favor passing
+                            //to that instead of throwing an error. However,
+                            //only do it for define()'d  modules. require
+                            //errbacks should not be called for failures in
+                            //their callbacks (#699). However if a global
+                            //onError is set, use that.
+                            if ((this.events.error && this.map.isDefine) ||
+                                req.onError !== defaultOnError) {
+                                try {
+                                    exports = context.execCb(id, factory, depExports, exports);
+                                } catch (e) {
+                                    err = e;
+                                }
+                            } else {
+                                exports = context.execCb(id, factory, depExports, exports);
+                            }
+
+                            // Favor return value over exports. If node/cjs in play,
+                            // then will not have a return value anyway. Favor
+                            // module.exports assignment over exports object.
+                            if (this.map.isDefine && exports === undefined) {
+                                cjsModule = this.module;
+                                if (cjsModule) {
+                                    exports = cjsModule.exports;
+                                } else if (this.usingExports) {
+                                    //exports already set the defined value.
+                                    exports = this.exports;
+                                }
+                            }
+
+                            if (err) {
+                                err.requireMap = this.map;
+                                err.requireModules = this.map.isDefine ? [this.map.id] : null;
+                                err.requireType = this.map.isDefine ? 'define' : 'require';
+                                return onError((this.error = err));
+                            }
+
+                        } else {
+                            //Just a literal value
+                            exports = factory;
+                        }
+
+                        this.exports = exports;
+
+                        if (this.map.isDefine && !this.ignore) {
+                            defined[id] = exports;
+
+                            if (req.onResourceLoad) {
+                                req.onResourceLoad(context, this.map, this.depMaps);
+                            }
+                        }
+
+                        //Clean up
+                        cleanRegistry(id);
+
+                        this.defined = true;
+                    }
+
+                    //Finished the define stage. Allow calling check again
+                    //to allow define notifications below in the case of a
+                    //cycle.
+                    this.defining = false;
+
+                    if (this.defined && !this.defineEmitted) {
+                        this.defineEmitted = true;
+                        this.emit('defined', this.exports);
+                        this.defineEmitComplete = true;
+                    }
+
+                }
+            },
+
+            callPlugin: function () {
+                var map = this.map,
+                    id = map.id,
+                    //Map already normalized the prefix.
+                    pluginMap = makeModuleMap(map.prefix);
+
+                //Mark this as a dependency for this plugin, so it
+                //can be traced for cycles.
+                this.depMaps.push(pluginMap);
+
+                on(pluginMap, 'defined', bind(this, function (plugin) {
+                    var load, normalizedMap, normalizedMod,
+                        bundleId = getOwn(bundlesMap, this.map.id),
+                        name = this.map.name,
+                        parentName = this.map.parentMap ? this.map.parentMap.name : null,
+                        localRequire = context.makeRequire(map.parentMap, {
+                            enableBuildCallback: true
+                        });
+
+                    //If current map is not normalized, wait for that
+                    //normalized name to load instead of continuing.
+                    if (this.map.unnormalized) {
+                        //Normalize the ID if the plugin allows it.
+                        if (plugin.normalize) {
+                            name = plugin.normalize(name, function (name) {
+                                return normalize(name, parentName, true);
+                            }) || '';
+                        }
+
+                        //prefix and name should already be normalized, no need
+                        //for applying map config again either.
+                        normalizedMap = makeModuleMap(map.prefix + '!' + name,
+                                                      this.map.parentMap);
+                        on(normalizedMap,
+                            'defined', bind(this, function (value) {
+                                this.init([], function () { return value; }, null, {
+                                    enabled: true,
+                                    ignore: true
+                                });
+                            }));
+
+                        normalizedMod = getOwn(registry, normalizedMap.id);
+                        if (normalizedMod) {
+                            //Mark this as a dependency for this plugin, so it
+                            //can be traced for cycles.
+                            this.depMaps.push(normalizedMap);
+
+                            if (this.events.error) {
+                                normalizedMod.on('error', bind(this, function (err) {
+                                    this.emit('error', err);
+                                }));
+                            }
+                            normalizedMod.enable();
+                        }
+
+                        return;
+                    }
+
+                    //If a paths config, then just load that file instead to
+                    //resolve the plugin, as it is built into that paths layer.
+                    if (bundleId) {
+                        this.map.url = context.nameToUrl(bundleId);
+                        this.load();
+                        return;
+                    }
+
+                    load = bind(this, function (value) {
+                        this.init([], function () { return value; }, null, {
+                            enabled: true
+                        });
+                    });
+
+                    load.error = bind(this, function (err) {
+                        this.inited = true;
+                        this.error = err;
+                        err.requireModules = [id];
+
+                        //Remove temp unnormalized modules for this module,
+                        //since they will never be resolved otherwise now.
+                        eachProp(registry, function (mod) {
+                            if (mod.map.id.indexOf(id + '_unnormalized') === 0) {
+                                cleanRegistry(mod.map.id);
+                            }
+                        });
+
+                        onError(err);
+                    });
+
+                    //Allow plugins to load other code without having to know the
+                    //context or how to 'complete' the load.
+                    load.fromText = bind(this, function (text, textAlt) {
+                        /*jslint evil: true */
+                        var moduleName = map.name,
+                            moduleMap = makeModuleMap(moduleName),
+                            hasInteractive = useInteractive;
+
+                        //As of 2.1.0, support just passing the text, to reinforce
+                        //fromText only being called once per resource. Still
+                        //support old style of passing moduleName but discard
+                        //that moduleName in favor of the internal ref.
+                        if (textAlt) {
+                            text = textAlt;
+                        }
+
+                        //Turn off interactive script matching for IE for any define
+                        //calls in the text, then turn it back on at the end.
+                        if (hasInteractive) {
+                            useInteractive = false;
+                        }
+
+                        //Prime the system by creating a module instance for
+                        //it.
+                        getModule(moduleMap);
+
+                        //Transfer any config to this other module.
+                        if (hasProp(config.config, id)) {
+                            config.config[moduleName] = config.config[id];
+                        }
+
+                        try {
+                            req.exec(text);
+                        } catch (e) {
+                            return onError(makeError('fromtexteval',
+                                             'fromText eval for ' + id +
+                                            ' failed: ' + e,
+                                             e,
+                                             [id]));
+                        }
+
+                        if (hasInteractive) {
+                            useInteractive = true;
+                        }
+
+                        //Mark this as a dependency for the plugin
+                        //resource
+                        this.depMaps.push(moduleMap);
+
+                        //Support anonymous modules.
+                        context.completeLoad(moduleName);
+
+                        //Bind the value of that module to the value for this
+                        //resource ID.
+                        localRequire([moduleName], load);
+                    });
+
+                    //Use parentName here since the plugin's name is not reliable,
+                    //could be some weird string with no path that actually wants to
+                    //reference the parentName's path.
+                    plugin.load(map.name, localRequire, load, config);
+                }));
+
+                context.enable(pluginMap, this);
+                this.pluginMaps[pluginMap.id] = pluginMap;
+            },
+
+            enable: function () {
+                enabledRegistry[this.map.id] = this;
+                this.enabled = true;
+
+                //Set flag mentioning that the module is enabling,
+                //so that immediate calls to the defined callbacks
+                //for dependencies do not trigger inadvertent load
+                //with the depCount still being zero.
+                this.enabling = true;
+
+                //Enable each dependency
+                each(this.depMaps, bind(this, function (depMap, i) {
+                    var id, mod, handler;
+
+                    if (typeof depMap === 'string') {
+                        //Dependency needs to be converted to a depMap
+                        //and wired up to this module.
+                        depMap = makeModuleMap(depMap,
+                                               (this.map.isDefine ? this.map : this.map.parentMap),
+                                               false,
+                                               !this.skipMap);
+                        this.depMaps[i] = depMap;
+
+                        handler = getOwn(handlers, depMap.id);
+
+                        if (handler) {
+                            this.depExports[i] = handler(this);
+                            return;
+                        }
+
+                        this.depCount += 1;
+
+                        on(depMap, 'defined', bind(this, function (depExports) {
+                            this.defineDep(i, depExports);
+                            this.check();
+                        }));
+
+                        if (this.errback) {
+                            on(depMap, 'error', bind(this, this.errback));
+                        }
+                    }
+
+                    id = depMap.id;
+                    mod = registry[id];
+
+                    //Skip special modules like 'require', 'exports', 'module'
+                    //Also, don't call enable if it is already enabled,
+                    //important in circular dependency cases.
+                    if (!hasProp(handlers, id) && mod && !mod.enabled) {
+                        context.enable(depMap, this);
+                    }
+                }));
+
+                //Enable each plugin that is used in
+                //a dependency
+                eachProp(this.pluginMaps, bind(this, function (pluginMap) {
+                    var mod = getOwn(registry, pluginMap.id);
+                    if (mod && !mod.enabled) {
+                        context.enable(pluginMap, this);
+                    }
+                }));
+
+                this.enabling = false;
+
+                this.check();
+            },
+
+            on: function (name, cb) {
+                var cbs = this.events[name];
+                if (!cbs) {
+                    cbs = this.events[name] = [];
+                }
+                cbs.push(cb);
+            },
+
+            emit: function (name, evt) {
+                each(this.events[name], function (cb) {
+                    cb(evt);
+                });
+                if (name === 'error') {
+                    //Now that the error handler was triggered, remove
+                    //the listeners, since this broken Module instance
+                    //can stay around for a while in the registry.
+                    delete this.events[name];
+                }
+            }
+        };
+
+        function callGetModule(args) {
+            //Skip modules already defined.
+            if (!hasProp(defined, args[0])) {
+                getModule(makeModuleMap(args[0], null, true)).init(args[1], args[2]);
+            }
+        }
+
+        function removeListener(node, func, name, ieName) {
+            //Favor detachEvent because of IE9
+            //issue, see attachEvent/addEventListener comment elsewhere
+            //in this file.
+            if (node.detachEvent && !isOpera) {
+                //Probably IE. If not it will throw an error, which will be
+                //useful to know.
+                if (ieName) {
+                    node.detachEvent(ieName, func);
+                }
+            } else {
+                node.removeEventListener(name, func, false);
+            }
+        }
+
+        /**
+         * Given an event from a script node, get the requirejs info from it,
+         * and then removes the event listeners on the node.
+         * @param {Event} evt
+         * @returns {Object}
+         */
+        function getScriptData(evt) {
+            //Using currentTarget instead of target for Firefox 2.0's sake. Not
+            //all old browsers will be supported, but this one was easy enough
+            //to support and still makes sense.
+            var node = evt.currentTarget || evt.srcElement;
+
+            //Remove the listeners once here.
+            removeListener(node, context.onScriptLoad, 'load', 'onreadystatechange');
+            removeListener(node, context.onScriptError, 'error');
+
+            return {
+                node: node,
+                id: node && node.getAttribute('data-requiremodule')
+            };
+        }
+
+        function intakeDefines() {
+            var args;
+
+            //Any defined modules in the global queue, intake them now.
+            takeGlobalQueue();
+
+            //Make sure any remaining defQueue items get properly processed.
+            while (defQueue.length) {
+                args = defQueue.shift();
+                if (args[0] === null) {
+                    return onError(makeError('mismatch', 'Mismatched anonymous define() module: ' + args[args.length - 1]));
+                } else {
+                    //args are id, deps, factory. Should be normalized by the
+                    //define() function.
+                    callGetModule(args);
+                }
+            }
+        }
+
+        context = {
+            config: config,
+            contextName: contextName,
+            registry: registry,
+            defined: defined,
+            urlFetched: urlFetched,
+            defQueue: defQueue,
+            Module: Module,
+            makeModuleMap: makeModuleMap,
+            nextTick: req.nextTick,
+            onError: onError,
+
+            /**
+             * Set a configuration for the context.
+             * @param {Object} cfg config object to integrate.
+             */
+            configure: function (cfg) {
+                //Make sure the baseUrl ends in a slash.
+                if (cfg.baseUrl) {
+                    if (cfg.baseUrl.charAt(cfg.baseUrl.length - 1) !== '/') {
+                        cfg.baseUrl += '/';
+                    }
+                }
+
+                //Save off the paths since they require special processing,
+                //they are additive.
+                var shim = config.shim,
+                    objs = {
+                        paths: true,
+                        bundles: true,
+                        config: true,
+                        map: true
+                    };
+
+                eachProp(cfg, function (value, prop) {
+                    if (objs[prop]) {
+                        if (!config[prop]) {
+                            config[prop] = {};
+                        }
+                        mixin(config[prop], value, true, true);
+                    } else {
+                        config[prop] = value;
+                    }
+                });
+
+                //Reverse map the bundles
+                if (cfg.bundles) {
+                    eachProp(cfg.bundles, function (value, prop) {
+                        each(value, function (v) {
+                            if (v !== prop) {
+                                bundlesMap[v] = prop;
+                            }
+                        });
+                    });
+                }
+
+                //Merge shim
+                if (cfg.shim) {
+                    eachProp(cfg.shim, function (value, id) {
+                        //Normalize the structure
+                        if (isArray(value)) {
+                            value = {
+                                deps: value
+                            };
+                        }
+                        if ((value.exports || value.init) && !value.exportsFn) {
+                            value.exportsFn = context.makeShimExports(value);
+                        }
+                        shim[id] = value;
+                    });
+                    config.shim = shim;
+                }
+
+                //Adjust packages if necessary.
+                if (cfg.packages) {
+                    each(cfg.packages, function (pkgObj) {
+                        var location, name;
+
+                        pkgObj = typeof pkgObj === 'string' ? { name: pkgObj } : pkgObj;
+
+                        name = pkgObj.name;
+                        location = pkgObj.location;
+                        if (location) {
+                            config.paths[name] = pkgObj.location;
+                        }
+
+                        //Save pointer to main module ID for pkg name.
+                        //Remove leading dot in main, so main paths are normalized,
+                        //and remove any trailing .js, since different package
+                        //envs have different conventions: some use a module name,
+                        //some use a file name.
+                        config.pkgs[name] = pkgObj.name + '/' + (pkgObj.main || 'main')
+                                     .replace(currDirRegExp, '')
+                                     .replace(jsSuffixRegExp, '');
+                    });
+                }
+
+                //If there are any "waiting to execute" modules in the registry,
+                //update the maps for them, since their info, like URLs to load,
+                //may have changed.
+                eachProp(registry, function (mod, id) {
+                    //If module already has init called, since it is too
+                    //late to modify them, and ignore unnormalized ones
+                    //since they are transient.
+                    if (!mod.inited && !mod.map.unnormalized) {
+                        mod.map = makeModuleMap(id);
+                    }
+                });
+
+                //If a deps array or a config callback is specified, then call
+                //require with those args. This is useful when require is defined as a
+                //config object before require.js is loaded.
+                if (cfg.deps || cfg.callback) {
+                    context.require(cfg.deps || [], cfg.callback);
+                }
+            },
+
+            makeShimExports: function (value) {
+                function fn() {
+                    var ret;
+                    if (value.init) {
+                        ret = value.init.apply(global, arguments);
+                    }
+                    return ret || (value.exports && getGlobal(value.exports));
+                }
+                return fn;
+            },
+
+            makeRequire: function (relMap, options) {
+                options = options || {};
+
+                function localRequire(deps, callback, errback) {
+                    var id, map, requireMod;
+
+                    if (options.enableBuildCallback && callback && isFunction(callback)) {
+                        callback.__requireJsBuild = true;
+                    }
+
+                    if (typeof deps === 'string') {
+                        if (isFunction(callback)) {
+                            //Invalid call
+                            return onError(makeError('requireargs', 'Invalid require call'), errback);
+                        }
+
+                        //If require|exports|module are requested, get the
+                        //value for them from the special handlers. Caveat:
+                        //this only works while module is being defined.
+                        if (relMap && hasProp(handlers, deps)) {
+                            return handlers[deps](registry[relMap.id]);
+                        }
+
+                        //Synchronous access to one module. If require.get is
+                        //available (as in the Node adapter), prefer that.
+                        if (req.get) {
+                            return req.get(context, deps, relMap, localRequire);
+                        }
+
+                        //Normalize module name, if it contains . or ..
+                        map = makeModuleMap(deps, relMap, false, true);
+                        id = map.id;
+
+                        if (!hasProp(defined, id)) {
+                            return onError(makeError('notloaded', 'Module name "' +
+                                        id +
+                                        '" has not been loaded yet for context: ' +
+                                        contextName +
+                                        (relMap ? '' : '. Use require([])')));
+                        }
+                        return defined[id];
+                    }
+
+                    //Grab defines waiting in the global queue.
+                    intakeDefines();
+
+                    //Mark all the dependencies as needing to be loaded.
+                    context.nextTick(function () {
+                        //Some defines could have been added since the
+                        //require call, collect them.
+                        intakeDefines();
+
+                        requireMod = getModule(makeModuleMap(null, relMap));
+
+                        //Store if map config should be applied to this require
+                        //call for dependencies.
+                        requireMod.skipMap = options.skipMap;
+
+                        requireMod.init(deps, callback, errback, {
+                            enabled: true
+                        });
+
+                        checkLoaded();
+                    });
+
+                    return localRequire;
+                }
+
+                mixin(localRequire, {
+                    isBrowser: isBrowser,
+
+                    /**
+                     * Converts a module name + .extension into an URL path.
+                     * *Requires* the use of a module name. It does not support using
+                     * plain URLs like nameToUrl.
+                     */
+                    toUrl: function (moduleNamePlusExt) {
+                        var ext,
+                            index = moduleNamePlusExt.lastIndexOf('.'),
+                            segment = moduleNamePlusExt.split('/')[0],
+                            isRelative = segment === '.' || segment === '..';
+
+                        //Have a file extension alias, and it is not the
+                        //dots from a relative path.
+                        if (index !== -1 && (!isRelative || index > 1)) {
+                            ext = moduleNamePlusExt.substring(index, moduleNamePlusExt.length);
+                            moduleNamePlusExt = moduleNamePlusExt.substring(0, index);
+                        }
+
+                        return context.nameToUrl(normalize(moduleNamePlusExt,
+                                                relMap && relMap.id, true), ext,  true);
+                    },
+
+                    defined: function (id) {
+                        return hasProp(defined, makeModuleMap(id, relMap, false, true).id);
+                    },
+
+                    specified: function (id) {
+                        id = makeModuleMap(id, relMap, false, true).id;
+                        return hasProp(defined, id) || hasProp(registry, id);
+                    }
+                });
+
+                //Only allow undef on top level require calls
+                if (!relMap) {
+                    localRequire.undef = function (id) {
+                        //Bind any waiting define() calls to this context,
+                        //fix for #408
+                        takeGlobalQueue();
+
+                        var map = makeModuleMap(id, relMap, true),
+                            mod = getOwn(registry, id);
+
+                        removeScript(id);
+
+                        delete defined[id];
+                        delete urlFetched[map.url];
+                        delete undefEvents[id];
+
+                        //Clean queued defines too. Go backwards
+                        //in array so that the splices do not
+                        //mess up the iteration.
+                        eachReverse(defQueue, function(args, i) {
+                            if(args[0] === id) {
+                                defQueue.splice(i, 1);
+                            }
+                        });
+
+                        if (mod) {
+                            //Hold on to listeners in case the
+                            //module will be attempted to be reloaded
+                            //using a different config.
+                            if (mod.events.defined) {
+                                undefEvents[id] = mod.events;
+                            }
+
+                            cleanRegistry(id);
+                        }
+                    };
+                }
+
+                return localRequire;
+            },
+
+            /**
+             * Called to enable a module if it is still in the registry
+             * awaiting enablement. A second arg, parent, the parent module,
+             * is passed in for context, when this method is overridden by
+             * the optimizer. Not shown here to keep code compact.
+             */
+            enable: function (depMap) {
+                var mod = getOwn(registry, depMap.id);
+                if (mod) {
+                    getModule(depMap).enable();
+                }
+            },
+
+            /**
+             * Internal method used by environment adapters to complete a load event.
+             * A load event could be a script load or just a load pass from a synchronous
+             * load call.
+             * @param {String} moduleName the name of the module to potentially complete.
+             */
+            completeLoad: function (moduleName) {
+                var found, args, mod,
+                    shim = getOwn(config.shim, moduleName) || {},
+                    shExports = shim.exports;
+
+                takeGlobalQueue();
+
+                while (defQueue.length) {
+                    args = defQueue.shift();
+                    if (args[0] === null) {
+                        args[0] = moduleName;
+                        //If already found an anonymous module and bound it
+                        //to this name, then this is some other anon module
+                        //waiting for its completeLoad to fire.
+                        if (found) {
+                            break;
+                        }
+                        found = true;
+                    } else if (args[0] === moduleName) {
+                        //Found matching define call for this script!
+                        found = true;
+                    }
+
+                    callGetModule(args);
+                }
+
+                //Do this after the cycle of callGetModule in case the result
+                //of those calls/init calls changes the registry.
+                mod = getOwn(registry, moduleName);
+
+                if (!found && !hasProp(defined, moduleName) && mod && !mod.inited) {
+                    if (config.enforceDefine && (!shExports || !getGlobal(shExports))) {
+                        if (hasPathFallback(moduleName)) {
+                            return;
+                        } else {
+                            return onError(makeError('nodefine',
+                                             'No define call for ' + moduleName,
+                                             null,
+                                             [moduleName]));
+                        }
+                    } else {
+                        //A script that does not call define(), so just simulate
+                        //the call for it.
+                        callGetModule([moduleName, (shim.deps || []), shim.exportsFn]);
+                    }
+                }
+
+                checkLoaded();
+            },
+
+            /**
+             * Converts a module name to a file path. Supports cases where
+             * moduleName may actually be just an URL.
+             * Note that it **does not** call normalize on the moduleName,
+             * it is assumed to have already been normalized. This is an
+             * internal API, not a public one. Use toUrl for the public API.
+             */
+            nameToUrl: function (moduleName, ext, skipExt) {
+                var paths, syms, i, parentModule, url,
+                    parentPath, bundleId,
+                    pkgMain = getOwn(config.pkgs, moduleName);
+
+                if (pkgMain) {
+                    moduleName = pkgMain;
+                }
+
+                bundleId = getOwn(bundlesMap, moduleName);
+
+                if (bundleId) {
+                    return context.nameToUrl(bundleId, ext, skipExt);
+                }
+
+                //If a colon is in the URL, it indicates a protocol is used and it is just
+                //an URL to a file, or if it starts with a slash, contains a query arg (i.e. ?)
+                //or ends with .js, then assume the user meant to use an url and not a module id.
+                //The slash is important for protocol-less URLs as well as full paths.
+                if (req.jsExtRegExp.test(moduleName)) {
+                    //Just a plain path, not module name lookup, so just return it.
+                    //Add extension if it is included. This is a bit wonky, only non-.js things pass
+                    //an extension, this method probably needs to be reworked.
+                    url = moduleName + (ext || '');
+                } else {
+                    //A module that needs to be converted to a path.
+                    paths = config.paths;
+
+                    syms = moduleName.split('/');
+                    //For each module name segment, see if there is a path
+                    //registered for it. Start with most specific name
+                    //and work up from it.
+                    for (i = syms.length; i > 0; i -= 1) {
+                        parentModule = syms.slice(0, i).join('/');
+
+                        parentPath = getOwn(paths, parentModule);
+                        if (parentPath) {
+                            //If an array, it means there are a few choices,
+                            //Choose the one that is desired
+                            if (isArray(parentPath)) {
+                                parentPath = parentPath[0];
+                            }
+                            syms.splice(0, i, parentPath);
+                            break;
+                        }
+                    }
+
+                    //Join the path parts together, then figure out if baseUrl is needed.
+                    url = syms.join('/');
+                    url += (ext || (/^data\:|\?/.test(url) || skipExt ? '' : '.js'));
+                    url = (url.charAt(0) === '/' || url.match(/^[\w\+\.\-]+:/) ? '' : config.baseUrl) + url;
+                }
+
+                return config.urlArgs ? url +
+                                        ((url.indexOf('?') === -1 ? '?' : '&') +
+                                         config.urlArgs) : url;
+            },
+
+            //Delegates to req.load. Broken out as a separate function to
+            //allow overriding in the optimizer.
+            load: function (id, url) {
+                req.load(context, id, url);
+            },
+
+            /**
+             * Executes a module callback function. Broken out as a separate function
+             * solely to allow the build system to sequence the files in the built
+             * layer in the right sequence.
+             *
+             * @private
+             */
+            execCb: function (name, callback, args, exports) {
+                return callback.apply(exports, args);
+            },
+
+            /**
+             * callback for script loads, used to check status of loading.
+             *
+             * @param {Event} evt the event from the browser for the script
+             * that was loaded.
+             */
+            onScriptLoad: function (evt) {
+                //Using currentTarget instead of target for Firefox 2.0's sake. Not
+                //all old browsers will be supported, but this one was easy enough
+                //to support and still makes sense.
+                if (evt.type === 'load' ||
+                        (readyRegExp.test((evt.currentTarget || evt.srcElement).readyState))) {
+                    //Reset interactive script so a script node is not held onto for
+                    //to long.
+                    interactiveScript = null;
+
+                    //Pull out the name of the module and the context.
+                    var data = getScriptData(evt);
+                    context.completeLoad(data.id);
+                }
+            },
+
+            /**
+             * Callback for script errors.
+             */
+            onScriptError: function (evt) {
+                var data = getScriptData(evt);
+                if (!hasPathFallback(data.id)) {
+                    return onError(makeError('scripterror', 'Script error for: ' + data.id, evt, [data.id]));
+                }
+            }
+        };
+
+        context.require = context.makeRequire();
+        return context;
+    }
+
+    /**
+     * Main entry point.
+     *
+     * If the only argument to require is a string, then the module that
+     * is represented by that string is fetched for the appropriate context.
+     *
+     * If the first argument is an array, then it will be treated as an array
+     * of dependency string names to fetch. An optional function callback can
+     * be specified to execute when all of those dependencies are available.
+     *
+     * Make a local req variable to help Caja compliance (it assumes things
+     * on a require that are not standardized), and to give a short
+     * name for minification/local scope use.
+     */
+    req = requirejs = function (deps, callback, errback, optional) {
+
+        //Find the right context, use default
+        var context, config,
+            contextName = defContextName;
+
+        // Determine if have config object in the call.
+        if (!isArray(deps) && typeof deps !== 'string') {
+            // deps is a config object
+            config = deps;
+            if (isArray(callback)) {
+                // Adjust args if there are dependencies
+                deps = callback;
+                callback = errback;
+                errback = optional;
+            } else {
+                deps = [];
+            }
+        }
+
+        if (config && config.context) {
+            contextName = config.context;
+        }
+
+        context = getOwn(contexts, contextName);
+        if (!context) {
+            context = contexts[contextName] = req.s.newContext(contextName);
+        }
+
+        if (config) {
+            context.configure(config);
+        }
+
+        return context.require(deps, callback, errback);
+    };
+
+    /**
+     * Support require.config() to make it easier to cooperate with other
+     * AMD loaders on globally agreed names.
+     */
+    req.config = function (config) {
+        return req(config);
+    };
+
+    /**
+     * Execute something after the current tick
+     * of the event loop. Override for other envs
+     * that have a better solution than setTimeout.
+     * @param  {Function} fn function to execute later.
+     */
+    req.nextTick = typeof setTimeout !== 'undefined' ? function (fn) {
+        setTimeout(fn, 4);
+    } : function (fn) { fn(); };
+
+    /**
+     * Export require as a global, but only if it does not already exist.
+     */
+    if (!require) {
+        require = req;
+    }
+
+    req.version = version;
+
+    //Used to filter out dependencies that are already paths.
+    req.jsExtRegExp = /^\/|:|\?|\.js$/;
+    req.isBrowser = isBrowser;
+    s = req.s = {
+        contexts: contexts,
+        newContext: newContext
+    };
+
+    //Create default context.
+    req({});
+
+    //Exports some context-sensitive methods on global require.
+    each([
+        'toUrl',
+        'undef',
+        'defined',
+        'specified'
+    ], function (prop) {
+        //Reference from contexts instead of early binding to default context,
+        //so that during builds, the latest instance of the default context
+        //with its config gets used.
+        req[prop] = function () {
+            var ctx = contexts[defContextName];
+            return ctx.require[prop].apply(ctx, arguments);
+        };
+    });
+
+    if (isBrowser) {
+        head = s.head = document.getElementsByTagName('head')[0];
+        //If BASE tag is in play, using appendChild is a problem for IE6.
+        //When that browser dies, this can be removed. Details in this jQuery bug:
+        //http://dev.jquery.com/ticket/2709
+        baseElement = document.getElementsByTagName('base')[0];
+        if (baseElement) {
+            head = s.head = baseElement.parentNode;
+        }
+    }
+
+    /**
+     * Any errors that require explicitly generates will be passed to this
+     * function. Intercept/override it if you want custom error handling.
+     * @param {Error} err the error object.
+     */
+    req.onError = defaultOnError;
+
+    /**
+     * Creates the node for the load command. Only used in browser envs.
+     */
+    req.createNode = function (config, moduleName, url) {
+        var node = config.xhtml ?
+                document.createElementNS('http://www.w3.org/1999/xhtml', 'html:script') :
+                document.createElement('script');
+        node.type = config.scriptType || 'text/javascript';
+        node.charset = 'utf-8';
+        node.async = true;
+        return node;
+    };
+
+    /**
+     * Does the request to load a module for the browser case.
+     * Make this a separate function to allow other environments
+     * to override it.
+     *
+     * @param {Object} context the require context to find state.
+     * @param {String} moduleName the name of the module.
+     * @param {Object} url the URL to the module.
+     */
+    req.load = function (context, moduleName, url) {
+        var config = (context && context.config) || {},
+            node;
+        if (isBrowser) {
+            //In the browser so use a script tag
+            node = req.createNode(config, moduleName, url);
+
+            node.setAttribute('data-requirecontext', context.contextName);
+            node.setAttribute('data-requiremodule', moduleName);
+
+            //Set up load listener. Test attachEvent first because IE9 has
+            //a subtle issue in its addEventListener and script onload firings
+            //that do not match the behavior of all other browsers with
+            //addEventListener support, which fire the onload event for a
+            //script right after the script execution. See:
+            //https://connect.microsoft.com/IE/feedback/details/648057/script-onload-event-is-not-fired-immediately-after-script-execution
+            //UNFORTUNATELY Opera implements attachEvent but does not follow the script
+            //script execution mode.
+            if (node.attachEvent &&
+                    //Check if node.attachEvent is artificially added by custom script or
+                    //natively supported by browser
+                    //read https://github.com/jrburke/requirejs/issues/187
+                    //if we can NOT find [native code] then it must NOT natively supported.
+                    //in IE8, node.attachEvent does not have toString()
+                    //Note the test for "[native code" with no closing brace, see:
+                    //https://github.com/jrburke/requirejs/issues/273
+                    !(node.attachEvent.toString && node.attachEvent.toString().indexOf('[native code') < 0) &&
+                    !isOpera) {
+                //Probably IE. IE (at least 6-8) do not fire
+                //script onload right after executing the script, so
+                //we cannot tie the anonymous define call to a name.
+                //However, IE reports the script as being in 'interactive'
+                //readyState at the time of the define call.
+                useInteractive = true;
+
+                node.attachEvent('onreadystatechange', context.onScriptLoad);
+                //It would be great to add an error handler here to catch
+                //404s in IE9+. However, onreadystatechange will fire before
+                //the error handler, so that does not help. If addEventListener
+                //is used, then IE will fire error before load, but we cannot
+                //use that pathway given the connect.microsoft.com issue
+                //mentioned above about not doing the 'script execute,
+                //then fire the script load event listener before execute
+                //next script' that other browsers do.
+                //Best hope: IE10 fixes the issues,
+                //and then destroys all installs of IE 6-9.
+                //node.attachEvent('onerror', context.onScriptError);
+            } else {
+                node.addEventListener('load', context.onScriptLoad, false);
+                node.addEventListener('error', context.onScriptError, false);
+            }
+            node.src = url;
+
+            //For some cache cases in IE 6-8, the script executes before the end
+            //of the appendChild execution, so to tie an anonymous define
+            //call to the module name (which is stored on the node), hold on
+            //to a reference to this node, but clear after the DOM insertion.
+            currentlyAddingScript = node;
+            if (baseElement) {
+                head.insertBefore(node, baseElement);
+            } else {
+                head.appendChild(node);
+            }
+            currentlyAddingScript = null;
+
+            return node;
+        } else if (isWebWorker) {
+            try {
+                //In a web worker, use importScripts. This is not a very
+                //efficient use of importScripts, importScripts will block until
+                //its script is downloaded and evaluated. However, if web workers
+                //are in play, the expectation that a build has been done so that
+                //only one script needs to be loaded anyway. This may need to be
+                //reevaluated if other use cases become common.
+                importScripts(url);
+
+                //Account for anonymous modules
+                context.completeLoad(moduleName);
+            } catch (e) {
+                context.onError(makeError('importscripts',
+                                'importScripts failed for ' +
+                                    moduleName + ' at ' + url,
+                                e,
+                                [moduleName]));
+            }
+        }
+    };
+
+    function getInteractiveScript() {
+        if (interactiveScript && interactiveScript.readyState === 'interactive') {
+            return interactiveScript;
+        }
+
+        eachReverse(scripts(), function (script) {
+            if (script.readyState === 'interactive') {
+                return (interactiveScript = script);
+            }
+        });
+        return interactiveScript;
+    }
+
+    //Look for a data-main script attribute, which could also adjust the baseUrl.
+    if (isBrowser && !cfg.skipDataMain) {
+        //Figure out baseUrl. Get it from the script tag with require.js in it.
+        eachReverse(scripts(), function (script) {
+            //Set the 'head' where we can append children by
+            //using the script's parent.
+            if (!head) {
+                head = script.parentNode;
+            }
+
+            //Look for a data-main attribute to set main script for the page
+            //to load. If it is there, the path to data main becomes the
+            //baseUrl, if it is not already set.
+            dataMain = script.getAttribute('data-main');
+            if (dataMain) {
+                //Preserve dataMain in case it is a path (i.e. contains '?')
+                mainScript = dataMain;
+
+                //Set final baseUrl if there is not already an explicit one.
+                if (!cfg.baseUrl) {
+                    //Pull off the directory of data-main for use as the
+                    //baseUrl.
+                    src = mainScript.split('/');
+                    mainScript = src.pop();
+                    subPath = src.length ? src.join('/')  + '/' : './';
+
+                    cfg.baseUrl = subPath;
+                }
+
+                //Strip off any trailing .js since mainScript is now
+                //like a module name.
+                mainScript = mainScript.replace(jsSuffixRegExp, '');
+
+                 //If mainScript is still a path, fall back to dataMain
+                if (req.jsExtRegExp.test(mainScript)) {
+                    mainScript = dataMain;
+                }
+
+                //Put the data-main script in the files to load.
+                cfg.deps = cfg.deps ? cfg.deps.concat(mainScript) : [mainScript];
+
+                return true;
+            }
+        });
+    }
+
+    /**
+     * The function that handles definitions of modules. Differs from
+     * require() in that a string for the module should be the first argument,
+     * and the function to execute after dependencies are loaded should
+     * return a value to define the module corresponding to the first argument's
+     * name.
+     */
+    define = function (name, deps, callback) {
+        var node, context;
+
+        //Allow for anonymous modules
+        if (typeof name !== 'string') {
+            //Adjust args appropriately
+            callback = deps;
+            deps = name;
+            name = null;
+        }
+
+        //This module may not have dependencies
+        if (!isArray(deps)) {
+            callback = deps;
+            deps = null;
+        }
+
+        //If no name, and callback is a function, then figure out if it a
+        //CommonJS thing with dependencies.
+        if (!deps && isFunction(callback)) {
+            deps = [];
+            //Remove comments from the callback string,
+            //look for require calls, and pull them into the dependencies,
+            //but only if there are function args.
+            if (callback.length) {
+                callback
+                    .toString()
+                    .replace(commentRegExp, '')
+                    .replace(cjsRequireRegExp, function (match, dep) {
+                        deps.push(dep);
+                    });
+
+                //May be a CommonJS thing even without require calls, but still
+                //could use exports, and module. Avoid doing exports and module
+                //work though if it just needs require.
+                //REQUIRES the function to expect the CommonJS variables in the
+                //order listed below.
+                deps = (callback.length === 1 ? ['require'] : ['require', 'exports', 'module']).concat(deps);
+            }
+        }
+
+        //If in IE 6-8 and hit an anonymous define() call, do the interactive
+        //work.
+        if (useInteractive) {
+            node = currentlyAddingScript || getInteractiveScript();
+            if (node) {
+                if (!name) {
+                    name = node.getAttribute('data-requiremodule');
+                }
+                context = contexts[node.getAttribute('data-requirecontext')];
+            }
+        }
+
+        //Always save off evaluating the def call until the script onload handler.
+        //This allows multiple modules to be in a file without prematurely
+        //tracing dependencies, and allows for anonymous module support,
+        //where the module name is not known until the script onload event
+        //occurs. If no context, use the global queue, and get it processed
+        //in the onscript load callback.
+        (context ? context.defQueue : globalDefQueue).push([name, deps, callback]);
+    };
+
+    define.amd = {
+        jQuery: true
+    };
+
+
+    /**
+     * Executes the text. Normally just uses eval, but can be modified
+     * to use a better, environment-specific call. Only used for transpiling
+     * loader plugins, not for plain JS modules.
+     * @param {String} text the text to execute/evaluate.
+     */
+    req.exec = function (text) {
+        /*jslint evil: true */
+        return eval(text);
+    };
+
+    //Set up with config info.
+    req(cfg);
+}(this));
diff --git a/civicrm/bower_components/jquery/external/sinon/sinon-1.14.1.js b/civicrm/bower_components/jquery/external/sinon/sinon-1.14.1.js
new file mode 100644
index 0000000000000000000000000000000000000000..dfbeae46a54cee6341fd7f37a1c52eac45629bc7
--- /dev/null
+++ b/civicrm/bower_components/jquery/external/sinon/sinon-1.14.1.js
@@ -0,0 +1,5931 @@
+/**
+ * Sinon.JS 1.14.1, 2015/03/16
+ *
+ * @author Christian Johansen (christian@cjohansen.no)
+ * @author Contributors: https://github.com/cjohansen/Sinon.JS/blob/master/AUTHORS
+ *
+ * (The BSD License)
+ *
+ * Copyright (c) 2010-2014, Christian Johansen, christian@cjohansen.no
+ * 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 Christian Johansen nor the names of his 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 HOLDER 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.
+ */
+
+(function (root, factory) {
+	if (typeof define === 'function' && define.amd) {
+		define('sinon', [], function () {
+			return (root.sinon = factory());
+		});
+	} else if (typeof exports === 'object') {
+		module.exports = factory();
+	} else {
+		root.sinon = factory();
+	}
+}(this, function () {
+	var samsam, formatio;
+	(function () {
+								function define(mod, deps, fn) {
+									if (mod == "samsam") {
+										samsam = deps();
+									} else if (typeof deps === "function" && mod.length === 0) {
+										lolex = deps();
+									} else if (typeof fn === "function") {
+										formatio = fn(samsam);
+									}
+								}
+		define.amd = {};
+((typeof define === "function" && define.amd && function (m) { define("samsam", m); }) ||
+ (typeof module === "object" &&
+			function (m) { module.exports = m(); }) || // Node
+ function (m) { this.samsam = m(); } // Browser globals
+)(function () {
+		var o = Object.prototype;
+		var div = typeof document !== "undefined" && document.createElement("div");
+
+		function isNaN(value) {
+				// Unlike global isNaN, this avoids type coercion
+				// typeof check avoids IE host object issues, hat tip to
+				// lodash
+				var val = value; // JsLint thinks value !== value is "weird"
+				return typeof value === "number" && value !== val;
+		}
+
+		function getClass(value) {
+				// Returns the internal [[Class]] by calling Object.prototype.toString
+				// with the provided value as this. Return value is a string, naming the
+				// internal class, e.g. "Array"
+				return o.toString.call(value).split(/[ \]]/)[1];
+		}
+
+		/**
+		 * @name samsam.isArguments
+		 * @param Object object
+		 *
+		 * Returns ``true`` if ``object`` is an ``arguments`` object,
+		 * ``false`` otherwise.
+		 */
+		function isArguments(object) {
+				if (getClass(object) === 'Arguments') { return true; }
+				if (typeof object !== "object" || typeof object.length !== "number" ||
+								getClass(object) === "Array") {
+						return false;
+				}
+				if (typeof object.callee == "function") { return true; }
+				try {
+						object[object.length] = 6;
+						delete object[object.length];
+				} catch (e) {
+						return true;
+				}
+				return false;
+		}
+
+		/**
+		 * @name samsam.isElement
+		 * @param Object object
+		 *
+		 * Returns ``true`` if ``object`` is a DOM element node. Unlike
+		 * Underscore.js/lodash, this function will return ``false`` if ``object``
+		 * is an *element-like* object, i.e. a regular object with a ``nodeType``
+		 * property that holds the value ``1``.
+		 */
+		function isElement(object) {
+				if (!object || object.nodeType !== 1 || !div) { return false; }
+				try {
+						object.appendChild(div);
+						object.removeChild(div);
+				} catch (e) {
+						return false;
+				}
+				return true;
+		}
+
+		/**
+		 * @name samsam.keys
+		 * @param Object object
+		 *
+		 * Return an array of own property names.
+		 */
+		function keys(object) {
+				var ks = [], prop;
+				for (prop in object) {
+						if (o.hasOwnProperty.call(object, prop)) { ks.push(prop); }
+				}
+				return ks;
+		}
+
+		/**
+		 * @name samsam.isDate
+		 * @param Object value
+		 *
+		 * Returns true if the object is a ``Date``, or *date-like*. Duck typing
+		 * of date objects work by checking that the object has a ``getTime``
+		 * function whose return value equals the return value from the object's
+		 * ``valueOf``.
+		 */
+		function isDate(value) {
+				return typeof value.getTime == "function" &&
+						value.getTime() == value.valueOf();
+		}
+
+		/**
+		 * @name samsam.isNegZero
+		 * @param Object value
+		 *
+		 * Returns ``true`` if ``value`` is ``-0``.
+		 */
+		function isNegZero(value) {
+				return value === 0 && 1 / value === -Infinity;
+		}
+
+		/**
+		 * @name samsam.equal
+		 * @param Object obj1
+		 * @param Object obj2
+		 *
+		 * Returns ``true`` if two objects are strictly equal. Compared to
+		 * ``===`` there are two exceptions:
+		 *
+		 *   - NaN is considered equal to NaN
+		 *   - -0 and +0 are not considered equal
+		 */
+		function identical(obj1, obj2) {
+				if (obj1 === obj2 || (isNaN(obj1) && isNaN(obj2))) {
+						return obj1 !== 0 || isNegZero(obj1) === isNegZero(obj2);
+				}
+		}
+
+
+		/**
+		 * @name samsam.deepEqual
+		 * @param Object obj1
+		 * @param Object obj2
+		 *
+		 * Deep equal comparison. Two values are "deep equal" if:
+		 *
+		 *   - They are equal, according to samsam.identical
+		 *   - They are both date objects representing the same time
+		 *   - They are both arrays containing elements that are all deepEqual
+		 *   - They are objects with the same set of properties, and each property
+		 *     in ``obj1`` is deepEqual to the corresponding property in ``obj2``
+		 *
+		 * Supports cyclic objects.
+		 */
+		function deepEqualCyclic(obj1, obj2) {
+
+				// used for cyclic comparison
+				// contain already visited objects
+				var objects1 = [],
+						objects2 = [],
+				// contain pathes (position in the object structure)
+				// of the already visited objects
+				// indexes same as in objects arrays
+						paths1 = [],
+						paths2 = [],
+				// contains combinations of already compared objects
+				// in the manner: { "$1['ref']$2['ref']": true }
+						compared = {};
+
+				/**
+				 * used to check, if the value of a property is an object
+				 * (cyclic logic is only needed for objects)
+				 * only needed for cyclic logic
+				 */
+				function isObject(value) {
+
+						if (typeof value === 'object' && value !== null &&
+										!(value instanceof Boolean) &&
+										!(value instanceof Date)    &&
+										!(value instanceof Number)  &&
+										!(value instanceof RegExp)  &&
+										!(value instanceof String)) {
+
+								return true;
+						}
+
+						return false;
+				}
+
+				/**
+				 * returns the index of the given object in the
+				 * given objects array, -1 if not contained
+				 * only needed for cyclic logic
+				 */
+				function getIndex(objects, obj) {
+
+						var i;
+						for (i = 0; i < objects.length; i++) {
+								if (objects[i] === obj) {
+										return i;
+								}
+						}
+
+						return -1;
+				}
+
+				// does the recursion for the deep equal check
+				return (function deepEqual(obj1, obj2, path1, path2) {
+						var type1 = typeof obj1;
+						var type2 = typeof obj2;
+
+						// == null also matches undefined
+						if (obj1 === obj2 ||
+										isNaN(obj1) || isNaN(obj2) ||
+										obj1 == null || obj2 == null ||
+										type1 !== "object" || type2 !== "object") {
+
+								return identical(obj1, obj2);
+						}
+
+						// Elements are only equal if identical(expected, actual)
+						if (isElement(obj1) || isElement(obj2)) { return false; }
+
+						var isDate1 = isDate(obj1), isDate2 = isDate(obj2);
+						if (isDate1 || isDate2) {
+								if (!isDate1 || !isDate2 || obj1.getTime() !== obj2.getTime()) {
+										return false;
+								}
+						}
+
+						if (obj1 instanceof RegExp && obj2 instanceof RegExp) {
+								if (obj1.toString() !== obj2.toString()) { return false; }
+						}
+
+						var class1 = getClass(obj1);
+						var class2 = getClass(obj2);
+						var keys1 = keys(obj1);
+						var keys2 = keys(obj2);
+
+						if (isArguments(obj1) || isArguments(obj2)) {
+								if (obj1.length !== obj2.length) { return false; }
+						} else {
+								if (type1 !== type2 || class1 !== class2 ||
+												keys1.length !== keys2.length) {
+										return false;
+								}
+						}
+
+						var key, i, l,
+								// following vars are used for the cyclic logic
+								value1, value2,
+								isObject1, isObject2,
+								index1, index2,
+								newPath1, newPath2;
+
+						for (i = 0, l = keys1.length; i < l; i++) {
+								key = keys1[i];
+								if (!o.hasOwnProperty.call(obj2, key)) {
+										return false;
+								}
+
+								// Start of the cyclic logic
+
+								value1 = obj1[key];
+								value2 = obj2[key];
+
+								isObject1 = isObject(value1);
+								isObject2 = isObject(value2);
+
+								// determine, if the objects were already visited
+								// (it's faster to check for isObject first, than to
+								// get -1 from getIndex for non objects)
+								index1 = isObject1 ? getIndex(objects1, value1) : -1;
+								index2 = isObject2 ? getIndex(objects2, value2) : -1;
+
+								// determine the new pathes of the objects
+								// - for non cyclic objects the current path will be extended
+								//   by current property name
+								// - for cyclic objects the stored path is taken
+								newPath1 = index1 !== -1
+										? paths1[index1]
+										: path1 + '[' + JSON.stringify(key) + ']';
+								newPath2 = index2 !== -1
+										? paths2[index2]
+										: path2 + '[' + JSON.stringify(key) + ']';
+
+								// stop recursion if current objects are already compared
+								if (compared[newPath1 + newPath2]) {
+										return true;
+								}
+
+								// remember the current objects and their pathes
+								if (index1 === -1 && isObject1) {
+										objects1.push(value1);
+										paths1.push(newPath1);
+								}
+								if (index2 === -1 && isObject2) {
+										objects2.push(value2);
+										paths2.push(newPath2);
+								}
+
+								// remember that the current objects are already compared
+								if (isObject1 && isObject2) {
+										compared[newPath1 + newPath2] = true;
+								}
+
+								// End of cyclic logic
+
+								// neither value1 nor value2 is a cycle
+								// continue with next level
+								if (!deepEqual(value1, value2, newPath1, newPath2)) {
+										return false;
+								}
+						}
+
+						return true;
+
+				}(obj1, obj2, '$1', '$2'));
+		}
+
+		var match;
+
+		function arrayContains(array, subset) {
+				if (subset.length === 0) { return true; }
+				var i, l, j, k;
+				for (i = 0, l = array.length; i < l; ++i) {
+						if (match(array[i], subset[0])) {
+								for (j = 0, k = subset.length; j < k; ++j) {
+										if (!match(array[i + j], subset[j])) { return false; }
+								}
+								return true;
+						}
+				}
+				return false;
+		}
+
+		/**
+		 * @name samsam.match
+		 * @param Object object
+		 * @param Object matcher
+		 *
+		 * Compare arbitrary value ``object`` with matcher.
+		 */
+		match = function match(object, matcher) {
+				if (matcher && typeof matcher.test === "function") {
+						return matcher.test(object);
+				}
+
+				if (typeof matcher === "function") {
+						return matcher(object) === true;
+				}
+
+				if (typeof matcher === "string") {
+						matcher = matcher.toLowerCase();
+						var notNull = typeof object === "string" || !!object;
+						return notNull &&
+								(String(object)).toLowerCase().indexOf(matcher) >= 0;
+				}
+
+				if (typeof matcher === "number") {
+						return matcher === object;
+				}
+
+				if (typeof matcher === "boolean") {
+						return matcher === object;
+				}
+
+				if (typeof(matcher) === "undefined") {
+						return typeof(object) === "undefined";
+				}
+
+				if (matcher === null) {
+						return object === null;
+				}
+
+				if (getClass(object) === "Array" && getClass(matcher) === "Array") {
+						return arrayContains(object, matcher);
+				}
+
+				if (matcher && typeof matcher === "object") {
+						if (matcher === object) {
+								return true;
+						}
+						var prop;
+						for (prop in matcher) {
+								var value = object[prop];
+								if (typeof value === "undefined" &&
+												typeof object.getAttribute === "function") {
+										value = object.getAttribute(prop);
+								}
+								if (matcher[prop] === null || typeof matcher[prop] === 'undefined') {
+										if (value !== matcher[prop]) {
+												return false;
+										}
+								} else if (typeof  value === "undefined" || !match(value, matcher[prop])) {
+										return false;
+								}
+						}
+						return true;
+				}
+
+				throw new Error("Matcher was not a string, a number, a " +
+												"function, a boolean or an object");
+		};
+
+		return {
+				isArguments: isArguments,
+				isElement: isElement,
+				isDate: isDate,
+				isNegZero: isNegZero,
+				identical: identical,
+				deepEqual: deepEqualCyclic,
+				match: match,
+				keys: keys
+		};
+});
+((typeof define === "function" && define.amd && function (m) {
+		define("formatio", ["samsam"], m);
+}) || (typeof module === "object" && function (m) {
+		module.exports = m(require("samsam"));
+}) || function (m) { this.formatio = m(this.samsam); }
+)(function (samsam) {
+
+		var formatio = {
+				excludeConstructors: ["Object", /^.$/],
+				quoteStrings: true,
+				limitChildrenCount: 0
+		};
+
+		var hasOwn = Object.prototype.hasOwnProperty;
+
+		var specialObjects = [];
+		if (typeof global !== "undefined") {
+				specialObjects.push({ object: global, value: "[object global]" });
+		}
+		if (typeof document !== "undefined") {
+				specialObjects.push({
+						object: document,
+						value: "[object HTMLDocument]"
+				});
+		}
+		if (typeof window !== "undefined") {
+				specialObjects.push({ object: window, value: "[object Window]" });
+		}
+
+		function functionName(func) {
+				if (!func) { return ""; }
+				if (func.displayName) { return func.displayName; }
+				if (func.name) { return func.name; }
+				var matches = func.toString().match(/function\s+([^\(]+)/m);
+				return (matches && matches[1]) || "";
+		}
+
+		function constructorName(f, object) {
+				var name = functionName(object && object.constructor);
+				var excludes = f.excludeConstructors ||
+								formatio.excludeConstructors || [];
+
+				var i, l;
+				for (i = 0, l = excludes.length; i < l; ++i) {
+						if (typeof excludes[i] === "string" && excludes[i] === name) {
+								return "";
+						} else if (excludes[i].test && excludes[i].test(name)) {
+								return "";
+						}
+				}
+
+				return name;
+		}
+
+		function isCircular(object, objects) {
+				if (typeof object !== "object") { return false; }
+				var i, l;
+				for (i = 0, l = objects.length; i < l; ++i) {
+						if (objects[i] === object) { return true; }
+				}
+				return false;
+		}
+
+		function ascii(f, object, processed, indent) {
+				if (typeof object === "string") {
+						var qs = f.quoteStrings;
+						var quote = typeof qs !== "boolean" || qs;
+						return processed || quote ? '"' + object + '"' : object;
+				}
+
+				if (typeof object === "function" && !(object instanceof RegExp)) {
+						return ascii.func(object);
+				}
+
+				processed = processed || [];
+
+				if (isCircular(object, processed)) { return "[Circular]"; }
+
+				if (Object.prototype.toString.call(object) === "[object Array]") {
+						return ascii.array.call(f, object, processed);
+				}
+
+				if (!object) { return String((1/object) === -Infinity ? "-0" : object); }
+				if (samsam.isElement(object)) { return ascii.element(object); }
+
+				if (typeof object.toString === "function" &&
+								object.toString !== Object.prototype.toString) {
+						return object.toString();
+				}
+
+				var i, l;
+				for (i = 0, l = specialObjects.length; i < l; i++) {
+						if (object === specialObjects[i].object) {
+								return specialObjects[i].value;
+						}
+				}
+
+				return ascii.object.call(f, object, processed, indent);
+		}
+
+		ascii.func = function (func) {
+				return "function " + functionName(func) + "() {}";
+		};
+
+		ascii.array = function (array, processed) {
+				processed = processed || [];
+				processed.push(array);
+				var pieces = [];
+				var i, l;
+				l = (this.limitChildrenCount > 0) ?
+						Math.min(this.limitChildrenCount, array.length) : array.length;
+
+				for (i = 0; i < l; ++i) {
+						pieces.push(ascii(this, array[i], processed));
+				}
+
+				if(l < array.length)
+						pieces.push("[... " + (array.length - l) + " more elements]");
+
+				return "[" + pieces.join(", ") + "]";
+		};
+
+		ascii.object = function (object, processed, indent) {
+				processed = processed || [];
+				processed.push(object);
+				indent = indent || 0;
+				var pieces = [], properties = samsam.keys(object).sort();
+				var length = 3;
+				var prop, str, obj, i, k, l;
+				l = (this.limitChildrenCount > 0) ?
+						Math.min(this.limitChildrenCount, properties.length) : properties.length;
+
+				for (i = 0; i < l; ++i) {
+						prop = properties[i];
+						obj = object[prop];
+
+						if (isCircular(obj, processed)) {
+								str = "[Circular]";
+						} else {
+								str = ascii(this, obj, processed, indent + 2);
+						}
+
+						str = (/\s/.test(prop) ? '"' + prop + '"' : prop) + ": " + str;
+						length += str.length;
+						pieces.push(str);
+				}
+
+				var cons = constructorName(this, object);
+				var prefix = cons ? "[" + cons + "] " : "";
+				var is = "";
+				for (i = 0, k = indent; i < k; ++i) { is += " "; }
+
+				if(l < properties.length)
+						pieces.push("[... " + (properties.length - l) + " more elements]");
+
+				if (length + indent > 80) {
+						return prefix + "{\n  " + is + pieces.join(",\n  " + is) + "\n" +
+								is + "}";
+				}
+				return prefix + "{ " + pieces.join(", ") + " }";
+		};
+
+		ascii.element = function (element) {
+				var tagName = element.tagName.toLowerCase();
+				var attrs = element.attributes, attr, pairs = [], attrName, i, l, val;
+
+				for (i = 0, l = attrs.length; i < l; ++i) {
+						attr = attrs.item(i);
+						attrName = attr.nodeName.toLowerCase().replace("html:", "");
+						val = attr.nodeValue;
+						if (attrName !== "contenteditable" || val !== "inherit") {
+								if (!!val) { pairs.push(attrName + "=\"" + val + "\""); }
+						}
+				}
+
+				var formatted = "<" + tagName + (pairs.length > 0 ? " " : "");
+				var content = element.innerHTML;
+
+				if (content.length > 20) {
+						content = content.substr(0, 20) + "[...]";
+				}
+
+				var res = formatted + pairs.join(" ") + ">" + content +
+								"</" + tagName + ">";
+
+				return res.replace(/ contentEditable="inherit"/, "");
+		};
+
+		function Formatio(options) {
+				for (var opt in options) {
+						this[opt] = options[opt];
+				}
+		}
+
+		Formatio.prototype = {
+				functionName: functionName,
+
+				configure: function (options) {
+						return new Formatio(options);
+				},
+
+				constructorName: function (object) {
+						return constructorName(this, object);
+				},
+
+				ascii: function (object, processed, indent) {
+						return ascii(this, object, processed, indent);
+				}
+		};
+
+		return Formatio.prototype;
+});
+!function(e){if("object"==typeof exports&&"undefined"!=typeof module)module.exports=e();else if("function"==typeof define&&define.amd)define([],e);else{var f;"undefined"!=typeof window?f=window:"undefined"!=typeof global?f=global:"undefined"!=typeof self&&(f=self),f.lolex=e()}}(function(){var define,module,exports;return (function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error("Cannot find module '"+o+"'");throw f.code="MODULE_NOT_FOUND",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o<r.length;o++)s(r[o]);return s})({1:[function(require,module,exports){
+(function (global){
+/*jslint eqeqeq: false, plusplus: false, evil: true, onevar: false, browser: true, forin: false*/
+/*global global*/
+/**
+ * @author Christian Johansen (christian@cjohansen.no) and contributors
+ * @license BSD
+ *
+ * Copyright (c) 2010-2014 Christian Johansen
+ */
+
+// node expects setTimeout/setInterval to return a fn object w/ .ref()/.unref()
+// browsers, a number.
+// see https://github.com/cjohansen/Sinon.JS/pull/436
+var timeoutResult = setTimeout(function() {}, 0);
+var addTimerReturnsObject = typeof timeoutResult === "object";
+clearTimeout(timeoutResult);
+
+var NativeDate = Date;
+var id = 1;
+
+/**
+ * Parse strings like "01:10:00" (meaning 1 hour, 10 minutes, 0 seconds) into
+ * number of milliseconds. This is used to support human-readable strings passed
+ * to clock.tick()
+ */
+function parseTime(str) {
+		if (!str) {
+				return 0;
+		}
+
+		var strings = str.split(":");
+		var l = strings.length, i = l;
+		var ms = 0, parsed;
+
+		if (l > 3 || !/^(\d\d:){0,2}\d\d?$/.test(str)) {
+				throw new Error("tick only understands numbers and 'h:m:s'");
+		}
+
+		while (i--) {
+				parsed = parseInt(strings[i], 10);
+
+				if (parsed >= 60) {
+						throw new Error("Invalid time " + str);
+				}
+
+				ms += parsed * Math.pow(60, (l - i - 1));
+		}
+
+		return ms * 1000;
+}
+
+/**
+ * Used to grok the `now` parameter to createClock.
+ */
+function getEpoch(epoch) {
+		if (!epoch) { return 0; }
+		if (typeof epoch.getTime === "function") { return epoch.getTime(); }
+		if (typeof epoch === "number") { return epoch; }
+		throw new TypeError("now should be milliseconds since UNIX epoch");
+}
+
+function inRange(from, to, timer) {
+		return timer && timer.callAt >= from && timer.callAt <= to;
+}
+
+function mirrorDateProperties(target, source) {
+		if (source.now) {
+				target.now = function now() {
+						return target.clock.now;
+				};
+		} else {
+				delete target.now;
+		}
+
+		if (source.toSource) {
+				target.toSource = function toSource() {
+						return source.toSource();
+				};
+		} else {
+				delete target.toSource;
+		}
+
+		target.toString = function toString() {
+				return source.toString();
+		};
+
+		target.prototype = source.prototype;
+		target.parse = source.parse;
+		target.UTC = source.UTC;
+		target.prototype.toUTCString = source.prototype.toUTCString;
+
+		for (var prop in source) {
+				if (source.hasOwnProperty(prop)) {
+						target[prop] = source[prop];
+				}
+		}
+
+		return target;
+}
+
+function createDate() {
+		function ClockDate(year, month, date, hour, minute, second, ms) {
+				// Defensive and verbose to avoid potential harm in passing
+				// explicit undefined when user does not pass argument
+				switch (arguments.length) {
+				case 0:
+						return new NativeDate(ClockDate.clock.now);
+				case 1:
+						return new NativeDate(year);
+				case 2:
+						return new NativeDate(year, month);
+				case 3:
+						return new NativeDate(year, month, date);
+				case 4:
+						return new NativeDate(year, month, date, hour);
+				case 5:
+						return new NativeDate(year, month, date, hour, minute);
+				case 6:
+						return new NativeDate(year, month, date, hour, minute, second);
+				default:
+						return new NativeDate(year, month, date, hour, minute, second, ms);
+				}
+		}
+
+		return mirrorDateProperties(ClockDate, NativeDate);
+}
+
+function addTimer(clock, timer) {
+		if (typeof timer.func === "undefined") {
+				throw new Error("Callback must be provided to timer calls");
+		}
+
+		if (!clock.timers) {
+				clock.timers = {};
+		}
+
+		timer.id = id++;
+		timer.createdAt = clock.now;
+		timer.callAt = clock.now + (timer.delay || 0);
+
+		clock.timers[timer.id] = timer;
+
+		if (addTimerReturnsObject) {
+				return {
+						id: timer.id,
+						ref: function() {},
+						unref: function() {}
+				};
+		}
+		else {
+				return timer.id;
+		}
+}
+
+function firstTimerInRange(clock, from, to) {
+		var timers = clock.timers, timer = null;
+
+		for (var id in timers) {
+				if (!inRange(from, to, timers[id])) {
+						continue;
+				}
+
+				if (!timer || ~compareTimers(timer, timers[id])) {
+						timer = timers[id];
+				}
+		}
+
+		return timer;
+}
+
+function compareTimers(a, b) {
+		// Sort first by absolute timing
+		if (a.callAt < b.callAt) {
+				return -1;
+		}
+		if (a.callAt > b.callAt) {
+				return 1;
+		}
+
+		// Sort next by immediate, immediate timers take precedence
+		if (a.immediate && !b.immediate) {
+				return -1;
+		}
+		if (!a.immediate && b.immediate) {
+				return 1;
+		}
+
+		// Sort next by creation time, earlier-created timers take precedence
+		if (a.createdAt < b.createdAt) {
+				return -1;
+		}
+		if (a.createdAt > b.createdAt) {
+				return 1;
+		}
+
+		// Sort next by id, lower-id timers take precedence
+		if (a.id < b.id) {
+				return -1;
+		}
+		if (a.id > b.id) {
+				return 1;
+		}
+
+		// As timer ids are unique, no fallback `0` is necessary
+}
+
+function callTimer(clock, timer) {
+		if (typeof timer.interval == "number") {
+				clock.timers[timer.id].callAt += timer.interval;
+		} else {
+				delete clock.timers[timer.id];
+		}
+
+		try {
+				if (typeof timer.func == "function") {
+						timer.func.apply(null, timer.args);
+				} else {
+						eval(timer.func);
+				}
+		} catch (e) {
+				var exception = e;
+		}
+
+		if (!clock.timers[timer.id]) {
+				if (exception) {
+						throw exception;
+				}
+				return;
+		}
+
+		if (exception) {
+				throw exception;
+		}
+}
+
+function uninstall(clock, target) {
+		var method;
+
+		for (var i = 0, l = clock.methods.length; i < l; i++) {
+				method = clock.methods[i];
+
+				if (target[method].hadOwnProperty) {
+						target[method] = clock["_" + method];
+				} else {
+						try {
+								delete target[method];
+						} catch (e) {}
+				}
+		}
+
+		// Prevent multiple executions which will completely remove these props
+		clock.methods = [];
+}
+
+function hijackMethod(target, method, clock) {
+		clock[method].hadOwnProperty = Object.prototype.hasOwnProperty.call(target, method);
+		clock["_" + method] = target[method];
+
+		if (method == "Date") {
+				var date = mirrorDateProperties(clock[method], target[method]);
+				target[method] = date;
+		} else {
+				target[method] = function () {
+						return clock[method].apply(clock, arguments);
+				};
+
+				for (var prop in clock[method]) {
+						if (clock[method].hasOwnProperty(prop)) {
+								target[method][prop] = clock[method][prop];
+						}
+				}
+		}
+
+		target[method].clock = clock;
+}
+
+var timers = {
+		setTimeout: setTimeout,
+		clearTimeout: clearTimeout,
+		setImmediate: (typeof setImmediate !== "undefined" ? setImmediate : undefined),
+		clearImmediate: (typeof clearImmediate !== "undefined" ? clearImmediate: undefined),
+		setInterval: setInterval,
+		clearInterval: clearInterval,
+		Date: Date
+};
+
+var keys = Object.keys || function (obj) {
+		var ks = [];
+		for (var key in obj) {
+				ks.push(key);
+		}
+		return ks;
+};
+
+exports.timers = timers;
+
+var createClock = exports.createClock = function (now) {
+		var clock = {
+				now: getEpoch(now),
+				timeouts: {},
+				Date: createDate()
+		};
+
+		clock.Date.clock = clock;
+
+		clock.setTimeout = function setTimeout(func, timeout) {
+				return addTimer(clock, {
+						func: func,
+						args: Array.prototype.slice.call(arguments, 2),
+						delay: timeout
+				});
+		};
+
+		clock.clearTimeout = function clearTimeout(timerId) {
+				if (!timerId) {
+						// null appears to be allowed in most browsers, and appears to be
+						// relied upon by some libraries, like Bootstrap carousel
+						return;
+				}
+				if (!clock.timers) {
+						clock.timers = [];
+				}
+				// in Node, timerId is an object with .ref()/.unref(), and
+				// its .id field is the actual timer id.
+				if (typeof timerId === "object") {
+						timerId = timerId.id
+				}
+				if (timerId in clock.timers) {
+						delete clock.timers[timerId];
+				}
+		};
+
+		clock.setInterval = function setInterval(func, timeout) {
+				return addTimer(clock, {
+						func: func,
+						args: Array.prototype.slice.call(arguments, 2),
+						delay: timeout,
+						interval: timeout
+				});
+		};
+
+		clock.clearInterval = function clearInterval(timerId) {
+				clock.clearTimeout(timerId);
+		};
+
+		clock.setImmediate = function setImmediate(func) {
+				return addTimer(clock, {
+						func: func,
+						args: Array.prototype.slice.call(arguments, 1),
+						immediate: true
+				});
+		};
+
+		clock.clearImmediate = function clearImmediate(timerId) {
+				clock.clearTimeout(timerId);
+		};
+
+		clock.tick = function tick(ms) {
+				ms = typeof ms == "number" ? ms : parseTime(ms);
+				var tickFrom = clock.now, tickTo = clock.now + ms, previous = clock.now;
+				var timer = firstTimerInRange(clock, tickFrom, tickTo);
+
+				var firstException;
+				while (timer && tickFrom <= tickTo) {
+						if (clock.timers[timer.id]) {
+								tickFrom = clock.now = timer.callAt;
+								try {
+										callTimer(clock, timer);
+								} catch (e) {
+										firstException = firstException || e;
+								}
+						}
+
+						timer = firstTimerInRange(clock, previous, tickTo);
+						previous = tickFrom;
+				}
+
+				clock.now = tickTo;
+
+				if (firstException) {
+						throw firstException;
+				}
+
+				return clock.now;
+		};
+
+		clock.reset = function reset() {
+				clock.timers = {};
+		};
+
+		return clock;
+};
+
+exports.install = function install(target, now, toFake) {
+		if (typeof target === "number") {
+				toFake = now;
+				now = target;
+				target = null;
+		}
+
+		if (!target) {
+				target = global;
+		}
+
+		var clock = createClock(now);
+
+		clock.uninstall = function () {
+				uninstall(clock, target);
+		};
+
+		clock.methods = toFake || [];
+
+		if (clock.methods.length === 0) {
+				clock.methods = keys(timers);
+		}
+
+		for (var i = 0, l = clock.methods.length; i < l; i++) {
+				hijackMethod(target, clock.methods[i], clock);
+		}
+
+		return clock;
+};
+
+}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
+},{}]},{},[1])(1)
+});
+	})();
+	var define;
+/**
+ * Sinon core utilities. For internal use only.
+ *
+ * @author Christian Johansen (christian@cjohansen.no)
+ * @license BSD
+ *
+ * Copyright (c) 2010-2013 Christian Johansen
+ */
+
+var sinon = (function () {
+"use strict";
+
+		var sinon;
+		var isNode = typeof module !== "undefined" && module.exports && typeof require === "function";
+		var isAMD = typeof define === "function" && typeof define.amd === "object" && define.amd;
+
+		function loadDependencies(require, exports, module) {
+				sinon = module.exports = require("./sinon/util/core");
+				require("./sinon/extend");
+				require("./sinon/typeOf");
+				require("./sinon/times_in_words");
+				require("./sinon/spy");
+				require("./sinon/call");
+				require("./sinon/behavior");
+				require("./sinon/stub");
+				require("./sinon/mock");
+				require("./sinon/collection");
+				require("./sinon/assert");
+				require("./sinon/sandbox");
+				require("./sinon/test");
+				require("./sinon/test_case");
+				require("./sinon/match");
+				require("./sinon/format");
+				require("./sinon/log_error");
+		}
+
+		if (isAMD) {
+				define(loadDependencies);
+		} else if (isNode) {
+				loadDependencies(require, module.exports, module);
+				sinon = module.exports;
+		} else {
+				sinon = {};
+		}
+
+		return sinon;
+}());
+
+/**
+ * @depend ../../sinon.js
+ */
+/**
+ * Sinon core utilities. For internal use only.
+ *
+ * @author Christian Johansen (christian@cjohansen.no)
+ * @license BSD
+ *
+ * Copyright (c) 2010-2013 Christian Johansen
+ */
+
+(function (sinon) {
+		var div = typeof document != "undefined" && document.createElement("div");
+		var hasOwn = Object.prototype.hasOwnProperty;
+
+		function isDOMNode(obj) {
+				var success = false;
+
+				try {
+						obj.appendChild(div);
+						success = div.parentNode == obj;
+				} catch (e) {
+						return false;
+				} finally {
+						try {
+								obj.removeChild(div);
+						} catch (e) {
+								// Remove failed, not much we can do about that
+						}
+				}
+
+				return success;
+		}
+
+		function isElement(obj) {
+				return div && obj && obj.nodeType === 1 && isDOMNode(obj);
+		}
+
+		function isFunction(obj) {
+				return typeof obj === "function" || !!(obj && obj.constructor && obj.call && obj.apply);
+		}
+
+		function isReallyNaN(val) {
+				return typeof val === "number" && isNaN(val);
+		}
+
+		function mirrorProperties(target, source) {
+				for (var prop in source) {
+						if (!hasOwn.call(target, prop)) {
+								target[prop] = source[prop];
+						}
+				}
+		}
+
+		function isRestorable(obj) {
+				return typeof obj === "function" && typeof obj.restore === "function" && obj.restore.sinon;
+		}
+
+		// Cheap way to detect if we have ES5 support.
+		var hasES5Support = "keys" in Object;
+
+		function makeApi(sinon) {
+				sinon.wrapMethod = function wrapMethod(object, property, method) {
+						if (!object) {
+								throw new TypeError("Should wrap property of object");
+						}
+
+						if (typeof method != "function" && typeof method != "object") {
+								throw new TypeError("Method wrapper should be a function or a property descriptor");
+						}
+
+						function checkWrappedMethod(wrappedMethod) {
+								if (!isFunction(wrappedMethod)) {
+										error = new TypeError("Attempted to wrap " + (typeof wrappedMethod) + " property " +
+																				property + " as function");
+								} else if (wrappedMethod.restore && wrappedMethod.restore.sinon) {
+										error = new TypeError("Attempted to wrap " + property + " which is already wrapped");
+								} else if (wrappedMethod.calledBefore) {
+										var verb = !!wrappedMethod.returns ? "stubbed" : "spied on";
+										error = new TypeError("Attempted to wrap " + property + " which is already " + verb);
+								}
+
+								if (error) {
+										if (wrappedMethod && wrappedMethod.stackTrace) {
+												error.stack += "\n--------------\n" + wrappedMethod.stackTrace;
+										}
+										throw error;
+								}
+						}
+
+						var error, wrappedMethod;
+
+						// IE 8 does not support hasOwnProperty on the window object and Firefox has a problem
+						// when using hasOwn.call on objects from other frames.
+						var owned = object.hasOwnProperty ? object.hasOwnProperty(property) : hasOwn.call(object, property);
+
+						if (hasES5Support) {
+								var methodDesc = (typeof method == "function") ? {value: method} : method,
+										wrappedMethodDesc = sinon.getPropertyDescriptor(object, property),
+										i;
+
+								if (!wrappedMethodDesc) {
+										error = new TypeError("Attempted to wrap " + (typeof wrappedMethod) + " property " +
+																				property + " as function");
+								} else if (wrappedMethodDesc.restore && wrappedMethodDesc.restore.sinon) {
+										error = new TypeError("Attempted to wrap " + property + " which is already wrapped");
+								}
+								if (error) {
+										if (wrappedMethodDesc && wrappedMethodDesc.stackTrace) {
+												error.stack += "\n--------------\n" + wrappedMethodDesc.stackTrace;
+										}
+										throw error;
+								}
+
+								var types = sinon.objectKeys(methodDesc);
+								for (i = 0; i < types.length; i++) {
+										wrappedMethod = wrappedMethodDesc[types[i]];
+										checkWrappedMethod(wrappedMethod);
+								}
+
+								mirrorProperties(methodDesc, wrappedMethodDesc);
+								for (i = 0; i < types.length; i++) {
+										mirrorProperties(methodDesc[types[i]], wrappedMethodDesc[types[i]]);
+								}
+								Object.defineProperty(object, property, methodDesc);
+						} else {
+								wrappedMethod = object[property];
+								checkWrappedMethod(wrappedMethod);
+								object[property] = method;
+								method.displayName = property;
+						}
+
+						method.displayName = property;
+
+						// Set up a stack trace which can be used later to find what line of
+						// code the original method was created on.
+						method.stackTrace = (new Error("Stack Trace for original")).stack;
+
+						method.restore = function () {
+								// For prototype properties try to reset by delete first.
+								// If this fails (ex: localStorage on mobile safari) then force a reset
+								// via direct assignment.
+								if (!owned) {
+										try {
+												delete object[property];
+										} catch (e) {}
+										// For native code functions `delete` fails without throwing an error
+										// on Chrome < 43, PhantomJS, etc.
+										// Use strict equality comparison to check failures then force a reset
+										// via direct assignment.
+										if (object[property] === method) {
+												object[property] = wrappedMethod;
+										}
+								} else if (hasES5Support) {
+										Object.defineProperty(object, property, wrappedMethodDesc);
+								}
+
+								if (!hasES5Support && object[property] === method) {
+										object[property] = wrappedMethod;
+								}
+						};
+
+						method.restore.sinon = true;
+
+						if (!hasES5Support) {
+								mirrorProperties(method, wrappedMethod);
+						}
+
+						return method;
+				};
+
+				sinon.create = function create(proto) {
+						var F = function () {};
+						F.prototype = proto;
+						return new F();
+				};
+
+				sinon.deepEqual = function deepEqual(a, b) {
+						if (sinon.match && sinon.match.isMatcher(a)) {
+								return a.test(b);
+						}
+
+						if (typeof a != "object" || typeof b != "object") {
+								if (isReallyNaN(a) && isReallyNaN(b)) {
+										return true;
+								} else {
+										return a === b;
+								}
+						}
+
+						if (isElement(a) || isElement(b)) {
+								return a === b;
+						}
+
+						if (a === b) {
+								return true;
+						}
+
+						if ((a === null && b !== null) || (a !== null && b === null)) {
+								return false;
+						}
+
+						if (a instanceof RegExp && b instanceof RegExp) {
+								return (a.source === b.source) && (a.global === b.global) &&
+										(a.ignoreCase === b.ignoreCase) && (a.multiline === b.multiline);
+						}
+
+						var aString = Object.prototype.toString.call(a);
+						if (aString != Object.prototype.toString.call(b)) {
+								return false;
+						}
+
+						if (aString == "[object Date]") {
+								return a.valueOf() === b.valueOf();
+						}
+
+						var prop, aLength = 0, bLength = 0;
+
+						if (aString == "[object Array]" && a.length !== b.length) {
+								return false;
+						}
+
+						for (prop in a) {
+								aLength += 1;
+
+								if (!(prop in b)) {
+										return false;
+								}
+
+								if (!deepEqual(a[prop], b[prop])) {
+										return false;
+								}
+						}
+
+						for (prop in b) {
+								bLength += 1;
+						}
+
+						return aLength == bLength;
+				};
+
+				sinon.functionName = function functionName(func) {
+						var name = func.displayName || func.name;
+
+						// Use function decomposition as a last resort to get function
+						// name. Does not rely on function decomposition to work - if it
+						// doesn't debugging will be slightly less informative
+						// (i.e. toString will say 'spy' rather than 'myFunc').
+						if (!name) {
+								var matches = func.toString().match(/function ([^\s\(]+)/);
+								name = matches && matches[1];
+						}
+
+						return name;
+				};
+
+				sinon.functionToString = function toString() {
+						if (this.getCall && this.callCount) {
+								var thisValue, prop, i = this.callCount;
+
+								while (i--) {
+										thisValue = this.getCall(i).thisValue;
+
+										for (prop in thisValue) {
+												if (thisValue[prop] === this) {
+														return prop;
+												}
+										}
+								}
+						}
+
+						return this.displayName || "sinon fake";
+				};
+
+				sinon.objectKeys = function objectKeys(obj) {
+						if (obj !== Object(obj)) {
+								throw new TypeError("sinon.objectKeys called on a non-object");
+						}
+
+						var keys = [];
+						var key;
+						for (key in obj) {
+								if (hasOwn.call(obj, key)) {
+										keys.push(key);
+								}
+						}
+
+						return keys;
+				};
+
+				sinon.getPropertyDescriptor = function getPropertyDescriptor(object, property) {
+						var proto = object, descriptor;
+						while (proto && !(descriptor = Object.getOwnPropertyDescriptor(proto, property))) {
+								proto = Object.getPrototypeOf(proto);
+						}
+						return descriptor;
+				}
+
+				sinon.getConfig = function (custom) {
+						var config = {};
+						custom = custom || {};
+						var defaults = sinon.defaultConfig;
+
+						for (var prop in defaults) {
+								if (defaults.hasOwnProperty(prop)) {
+										config[prop] = custom.hasOwnProperty(prop) ? custom[prop] : defaults[prop];
+								}
+						}
+
+						return config;
+				};
+
+				sinon.defaultConfig = {
+						injectIntoThis: true,
+						injectInto: null,
+						properties: ["spy", "stub", "mock", "clock", "server", "requests"],
+						useFakeTimers: true,
+						useFakeServer: true
+				};
+
+				sinon.timesInWords = function timesInWords(count) {
+						return count == 1 && "once" ||
+								count == 2 && "twice" ||
+								count == 3 && "thrice" ||
+								(count || 0) + " times";
+				};
+
+				sinon.calledInOrder = function (spies) {
+						for (var i = 1, l = spies.length; i < l; i++) {
+								if (!spies[i - 1].calledBefore(spies[i]) || !spies[i].called) {
+										return false;
+								}
+						}
+
+						return true;
+				};
+
+				sinon.orderByFirstCall = function (spies) {
+						return spies.sort(function (a, b) {
+								// uuid, won't ever be equal
+								var aCall = a.getCall(0);
+								var bCall = b.getCall(0);
+								var aId = aCall && aCall.callId || -1;
+								var bId = bCall && bCall.callId || -1;
+
+								return aId < bId ? -1 : 1;
+						});
+				};
+
+				sinon.createStubInstance = function (constructor) {
+						if (typeof constructor !== "function") {
+								throw new TypeError("The constructor should be a function.");
+						}
+						return sinon.stub(sinon.create(constructor.prototype));
+				};
+
+				sinon.restore = function (object) {
+						if (object !== null && typeof object === "object") {
+								for (var prop in object) {
+										if (isRestorable(object[prop])) {
+												object[prop].restore();
+										}
+								}
+						} else if (isRestorable(object)) {
+								object.restore();
+						}
+				};
+
+				return sinon;
+		}
+
+		var isNode = typeof module !== "undefined" && module.exports && typeof require == "function";
+		var isAMD = typeof define === "function" && typeof define.amd === "object" && define.amd;
+
+		function loadDependencies(require, exports) {
+				makeApi(exports);
+		}
+
+		if (isAMD) {
+				define(loadDependencies);
+		} else if (isNode) {
+				loadDependencies(require, module.exports);
+		} else if (!sinon) {
+				return;
+		} else {
+				makeApi(sinon);
+		}
+}(typeof sinon == "object" && sinon || null));
+
+/**
+ * @depend util/core.js
+ */
+
+(function (sinon) {
+		function makeApi(sinon) {
+
+				// Adapted from https://developer.mozilla.org/en/docs/ECMAScript_DontEnum_attribute#JScript_DontEnum_Bug
+				var hasDontEnumBug = (function () {
+						var obj = {
+								constructor: function () {
+										return "0";
+								},
+								toString: function () {
+										return "1";
+								},
+								valueOf: function () {
+										return "2";
+								},
+								toLocaleString: function () {
+										return "3";
+								},
+								prototype: function () {
+										return "4";
+								},
+								isPrototypeOf: function () {
+										return "5";
+								},
+								propertyIsEnumerable: function () {
+										return "6";
+								},
+								hasOwnProperty: function () {
+										return "7";
+								},
+								length: function () {
+										return "8";
+								},
+								unique: function () {
+										return "9"
+								}
+						};
+
+						var result = [];
+						for (var prop in obj) {
+								result.push(obj[prop]());
+						}
+						return result.join("") !== "0123456789";
+				})();
+
+				/* Public: Extend target in place with all (own) properties from sources in-order. Thus, last source will
+				 *         override properties in previous sources.
+				 *
+				 * target - The Object to extend
+				 * sources - Objects to copy properties from.
+				 *
+				 * Returns the extended target
+				 */
+				function extend(target /*, sources */) {
+						var sources = Array.prototype.slice.call(arguments, 1),
+								source, i, prop;
+
+						for (i = 0; i < sources.length; i++) {
+								source = sources[i];
+
+								for (prop in source) {
+										if (source.hasOwnProperty(prop)) {
+												target[prop] = source[prop];
+										}
+								}
+
+								// Make sure we copy (own) toString method even when in JScript with DontEnum bug
+								// See https://developer.mozilla.org/en/docs/ECMAScript_DontEnum_attribute#JScript_DontEnum_Bug
+								if (hasDontEnumBug && source.hasOwnProperty("toString") && source.toString !== target.toString) {
+										target.toString = source.toString;
+								}
+						}
+
+						return target;
+				};
+
+				sinon.extend = extend;
+				return sinon.extend;
+		}
+
+		function loadDependencies(require, exports, module) {
+				var sinon = require("./util/core");
+				module.exports = makeApi(sinon);
+		}
+
+		var isNode = typeof module !== "undefined" && module.exports && typeof require == "function";
+		var isAMD = typeof define === "function" && typeof define.amd === "object" && define.amd;
+
+		if (isAMD) {
+				define(loadDependencies);
+		} else if (isNode) {
+				loadDependencies(require, module.exports, module);
+		} else if (!sinon) {
+				return;
+		} else {
+				makeApi(sinon);
+		}
+}(typeof sinon == "object" && sinon || null));
+
+/**
+ * @depend util/core.js
+ */
+
+(function (sinon) {
+		function makeApi(sinon) {
+
+				function timesInWords(count) {
+						switch (count) {
+								case 1:
+										return "once";
+								case 2:
+										return "twice";
+								case 3:
+										return "thrice";
+								default:
+										return (count || 0) + " times";
+						}
+				}
+
+				sinon.timesInWords = timesInWords;
+				return sinon.timesInWords;
+		}
+
+		function loadDependencies(require, exports, module) {
+				var sinon = require("./util/core");
+				module.exports = makeApi(sinon);
+		}
+
+		var isNode = typeof module !== "undefined" && module.exports && typeof require == "function";
+		var isAMD = typeof define === "function" && typeof define.amd === "object" && define.amd;
+
+		if (isAMD) {
+				define(loadDependencies);
+		} else if (isNode) {
+				loadDependencies(require, module.exports, module);
+		} else if (!sinon) {
+				return;
+		} else {
+				makeApi(sinon);
+		}
+}(typeof sinon == "object" && sinon || null));
+
+/**
+ * @depend util/core.js
+ */
+/**
+ * Format functions
+ *
+ * @author Christian Johansen (christian@cjohansen.no)
+ * @license BSD
+ *
+ * Copyright (c) 2010-2014 Christian Johansen
+ */
+
+(function (sinon, formatio) {
+		function makeApi(sinon) {
+				function typeOf(value) {
+						if (value === null) {
+								return "null";
+						} else if (value === undefined) {
+								return "undefined";
+						}
+						var string = Object.prototype.toString.call(value);
+						return string.substring(8, string.length - 1).toLowerCase();
+				};
+
+				sinon.typeOf = typeOf;
+				return sinon.typeOf;
+		}
+
+		function loadDependencies(require, exports, module) {
+				var sinon = require("./util/core");
+				module.exports = makeApi(sinon);
+		}
+
+		var isNode = typeof module !== "undefined" && module.exports && typeof require == "function";
+		var isAMD = typeof define === "function" && typeof define.amd === "object" && define.amd;
+
+		if (isAMD) {
+				define(loadDependencies);
+		} else if (isNode) {
+				loadDependencies(require, module.exports, module);
+		} else if (!sinon) {
+				return;
+		} else {
+				makeApi(sinon);
+		}
+}(
+		(typeof sinon == "object" && sinon || null),
+		(typeof formatio == "object" && formatio)
+));
+
+/**
+ * @depend util/core.js
+ * @depend typeOf.js
+ */
+/*jslint eqeqeq: false, onevar: false, plusplus: false*/
+/*global module, require, sinon*/
+/**
+ * Match functions
+ *
+ * @author Maximilian Antoni (mail@maxantoni.de)
+ * @license BSD
+ *
+ * Copyright (c) 2012 Maximilian Antoni
+ */
+
+(function (sinon) {
+		function makeApi(sinon) {
+				function assertType(value, type, name) {
+						var actual = sinon.typeOf(value);
+						if (actual !== type) {
+								throw new TypeError("Expected type of " + name + " to be " +
+										type + ", but was " + actual);
+						}
+				}
+
+				var matcher = {
+						toString: function () {
+								return this.message;
+						}
+				};
+
+				function isMatcher(object) {
+						return matcher.isPrototypeOf(object);
+				}
+
+				function matchObject(expectation, actual) {
+						if (actual === null || actual === undefined) {
+								return false;
+						}
+						for (var key in expectation) {
+								if (expectation.hasOwnProperty(key)) {
+										var exp = expectation[key];
+										var act = actual[key];
+										if (match.isMatcher(exp)) {
+												if (!exp.test(act)) {
+														return false;
+												}
+										} else if (sinon.typeOf(exp) === "object") {
+												if (!matchObject(exp, act)) {
+														return false;
+												}
+										} else if (!sinon.deepEqual(exp, act)) {
+												return false;
+										}
+								}
+						}
+						return true;
+				}
+
+				matcher.or = function (m2) {
+						if (!arguments.length) {
+								throw new TypeError("Matcher expected");
+						} else if (!isMatcher(m2)) {
+								m2 = match(m2);
+						}
+						var m1 = this;
+						var or = sinon.create(matcher);
+						or.test = function (actual) {
+								return m1.test(actual) || m2.test(actual);
+						};
+						or.message = m1.message + ".or(" + m2.message + ")";
+						return or;
+				};
+
+				matcher.and = function (m2) {
+						if (!arguments.length) {
+								throw new TypeError("Matcher expected");
+						} else if (!isMatcher(m2)) {
+								m2 = match(m2);
+						}
+						var m1 = this;
+						var and = sinon.create(matcher);
+						and.test = function (actual) {
+								return m1.test(actual) && m2.test(actual);
+						};
+						and.message = m1.message + ".and(" + m2.message + ")";
+						return and;
+				};
+
+				var match = function (expectation, message) {
+						var m = sinon.create(matcher);
+						var type = sinon.typeOf(expectation);
+						switch (type) {
+						case "object":
+								if (typeof expectation.test === "function") {
+										m.test = function (actual) {
+												return expectation.test(actual) === true;
+										};
+										m.message = "match(" + sinon.functionName(expectation.test) + ")";
+										return m;
+								}
+								var str = [];
+								for (var key in expectation) {
+										if (expectation.hasOwnProperty(key)) {
+												str.push(key + ": " + expectation[key]);
+										}
+								}
+								m.test = function (actual) {
+										return matchObject(expectation, actual);
+								};
+								m.message = "match(" + str.join(", ") + ")";
+								break;
+						case "number":
+								m.test = function (actual) {
+										return expectation == actual;
+								};
+								break;
+						case "string":
+								m.test = function (actual) {
+										if (typeof actual !== "string") {
+												return false;
+										}
+										return actual.indexOf(expectation) !== -1;
+								};
+								m.message = "match(\"" + expectation + "\")";
+								break;
+						case "regexp":
+								m.test = function (actual) {
+										if (typeof actual !== "string") {
+												return false;
+										}
+										return expectation.test(actual);
+								};
+								break;
+						case "function":
+								m.test = expectation;
+								if (message) {
+										m.message = message;
+								} else {
+										m.message = "match(" + sinon.functionName(expectation) + ")";
+								}
+								break;
+						default:
+								m.test = function (actual) {
+										return sinon.deepEqual(expectation, actual);
+								};
+						}
+						if (!m.message) {
+								m.message = "match(" + expectation + ")";
+						}
+						return m;
+				};
+
+				match.isMatcher = isMatcher;
+
+				match.any = match(function () {
+						return true;
+				}, "any");
+
+				match.defined = match(function (actual) {
+						return actual !== null && actual !== undefined;
+				}, "defined");
+
+				match.truthy = match(function (actual) {
+						return !!actual;
+				}, "truthy");
+
+				match.falsy = match(function (actual) {
+						return !actual;
+				}, "falsy");
+
+				match.same = function (expectation) {
+						return match(function (actual) {
+								return expectation === actual;
+						}, "same(" + expectation + ")");
+				};
+
+				match.typeOf = function (type) {
+						assertType(type, "string", "type");
+						return match(function (actual) {
+								return sinon.typeOf(actual) === type;
+						}, "typeOf(\"" + type + "\")");
+				};
+
+				match.instanceOf = function (type) {
+						assertType(type, "function", "type");
+						return match(function (actual) {
+								return actual instanceof type;
+						}, "instanceOf(" + sinon.functionName(type) + ")");
+				};
+
+				function createPropertyMatcher(propertyTest, messagePrefix) {
+						return function (property, value) {
+								assertType(property, "string", "property");
+								var onlyProperty = arguments.length === 1;
+								var message = messagePrefix + "(\"" + property + "\"";
+								if (!onlyProperty) {
+										message += ", " + value;
+								}
+								message += ")";
+								return match(function (actual) {
+										if (actual === undefined || actual === null ||
+														!propertyTest(actual, property)) {
+												return false;
+										}
+										return onlyProperty || sinon.deepEqual(value, actual[property]);
+								}, message);
+						};
+				}
+
+				match.has = createPropertyMatcher(function (actual, property) {
+						if (typeof actual === "object") {
+								return property in actual;
+						}
+						return actual[property] !== undefined;
+				}, "has");
+
+				match.hasOwn = createPropertyMatcher(function (actual, property) {
+						return actual.hasOwnProperty(property);
+				}, "hasOwn");
+
+				match.bool = match.typeOf("boolean");
+				match.number = match.typeOf("number");
+				match.string = match.typeOf("string");
+				match.object = match.typeOf("object");
+				match.func = match.typeOf("function");
+				match.array = match.typeOf("array");
+				match.regexp = match.typeOf("regexp");
+				match.date = match.typeOf("date");
+
+				sinon.match = match;
+				return match;
+		}
+
+		var isNode = typeof module !== "undefined" && module.exports && typeof require == "function";
+		var isAMD = typeof define === "function" && typeof define.amd === "object" && define.amd;
+
+		function loadDependencies(require, exports, module) {
+				var sinon = require("./util/core");
+				require("./typeOf");
+				module.exports = makeApi(sinon);
+		}
+
+		if (isAMD) {
+				define(loadDependencies);
+		} else if (isNode) {
+				loadDependencies(require, module.exports, module);
+		} else if (!sinon) {
+				return;
+		} else {
+				makeApi(sinon);
+		}
+}(typeof sinon == "object" && sinon || null));
+
+/**
+ * @depend util/core.js
+ */
+/**
+ * Format functions
+ *
+ * @author Christian Johansen (christian@cjohansen.no)
+ * @license BSD
+ *
+ * Copyright (c) 2010-2014 Christian Johansen
+ */
+
+(function (sinon, formatio) {
+		function makeApi(sinon) {
+				function valueFormatter(value) {
+						return "" + value;
+				}
+
+				function getFormatioFormatter() {
+						var formatter = formatio.configure({
+										quoteStrings: false,
+										limitChildrenCount: 250
+								});
+
+						function format() {
+								return formatter.ascii.apply(formatter, arguments);
+						};
+
+						return format;
+				}
+
+				function getNodeFormatter(value) {
+						function format(value) {
+								return typeof value == "object" && value.toString === Object.prototype.toString ? util.inspect(value) : value;
+						};
+
+						try {
+								var util = require("util");
+						} catch (e) {
+								/* Node, but no util module - would be very old, but better safe than sorry */
+						}
+
+						return util ? format : valueFormatter;
+				}
+
+				var isNode = typeof module !== "undefined" && module.exports && typeof require == "function",
+						formatter;
+
+				if (isNode) {
+						try {
+								formatio = require("formatio");
+						} catch (e) {}
+				}
+
+				if (formatio) {
+						formatter = getFormatioFormatter()
+				} else if (isNode) {
+						formatter = getNodeFormatter();
+				} else {
+						formatter = valueFormatter;
+				}
+
+				sinon.format = formatter;
+				return sinon.format;
+		}
+
+		function loadDependencies(require, exports, module) {
+				var sinon = require("./util/core");
+				module.exports = makeApi(sinon);
+		}
+
+		var isNode = typeof module !== "undefined" && module.exports && typeof require == "function";
+		var isAMD = typeof define === "function" && typeof define.amd === "object" && define.amd;
+
+		if (isAMD) {
+				define(loadDependencies);
+		} else if (isNode) {
+				loadDependencies(require, module.exports, module);
+		} else if (!sinon) {
+				return;
+		} else {
+				makeApi(sinon);
+		}
+}(
+		(typeof sinon == "object" && sinon || null),
+		(typeof formatio == "object" && formatio)
+));
+
+/**
+	* @depend util/core.js
+	* @depend match.js
+	* @depend format.js
+	*/
+/**
+	* Spy calls
+	*
+	* @author Christian Johansen (christian@cjohansen.no)
+	* @author Maximilian Antoni (mail@maxantoni.de)
+	* @license BSD
+	*
+	* Copyright (c) 2010-2013 Christian Johansen
+	* Copyright (c) 2013 Maximilian Antoni
+	*/
+
+(function (sinon) {
+		function makeApi(sinon) {
+				function throwYieldError(proxy, text, args) {
+						var msg = sinon.functionName(proxy) + text;
+						if (args.length) {
+								msg += " Received [" + slice.call(args).join(", ") + "]";
+						}
+						throw new Error(msg);
+				}
+
+				var slice = Array.prototype.slice;
+
+				var callProto = {
+						calledOn: function calledOn(thisValue) {
+								if (sinon.match && sinon.match.isMatcher(thisValue)) {
+										return thisValue.test(this.thisValue);
+								}
+								return this.thisValue === thisValue;
+						},
+
+						calledWith: function calledWith() {
+								var l = arguments.length;
+								if (l > this.args.length) {
+										return false;
+								}
+								for (var i = 0; i < l; i += 1) {
+										if (!sinon.deepEqual(arguments[i], this.args[i])) {
+												return false;
+										}
+								}
+
+								return true;
+						},
+
+						calledWithMatch: function calledWithMatch() {
+								var l = arguments.length;
+								if (l > this.args.length) {
+										return false;
+								}
+								for (var i = 0; i < l; i += 1) {
+										var actual = this.args[i];
+										var expectation = arguments[i];
+										if (!sinon.match || !sinon.match(expectation).test(actual)) {
+												return false;
+										}
+								}
+								return true;
+						},
+
+						calledWithExactly: function calledWithExactly() {
+								return arguments.length == this.args.length &&
+										this.calledWith.apply(this, arguments);
+						},
+
+						notCalledWith: function notCalledWith() {
+								return !this.calledWith.apply(this, arguments);
+						},
+
+						notCalledWithMatch: function notCalledWithMatch() {
+								return !this.calledWithMatch.apply(this, arguments);
+						},
+
+						returned: function returned(value) {
+								return sinon.deepEqual(value, this.returnValue);
+						},
+
+						threw: function threw(error) {
+								if (typeof error === "undefined" || !this.exception) {
+										return !!this.exception;
+								}
+
+								return this.exception === error || this.exception.name === error;
+						},
+
+						calledWithNew: function calledWithNew() {
+								return this.proxy.prototype && this.thisValue instanceof this.proxy;
+						},
+
+						calledBefore: function (other) {
+								return this.callId < other.callId;
+						},
+
+						calledAfter: function (other) {
+								return this.callId > other.callId;
+						},
+
+						callArg: function (pos) {
+								this.args[pos]();
+						},
+
+						callArgOn: function (pos, thisValue) {
+								this.args[pos].apply(thisValue);
+						},
+
+						callArgWith: function (pos) {
+								this.callArgOnWith.apply(this, [pos, null].concat(slice.call(arguments, 1)));
+						},
+
+						callArgOnWith: function (pos, thisValue) {
+								var args = slice.call(arguments, 2);
+								this.args[pos].apply(thisValue, args);
+						},
+
+						yield: function () {
+								this.yieldOn.apply(this, [null].concat(slice.call(arguments, 0)));
+						},
+
+						yieldOn: function (thisValue) {
+								var args = this.args;
+								for (var i = 0, l = args.length; i < l; ++i) {
+										if (typeof args[i] === "function") {
+												args[i].apply(thisValue, slice.call(arguments, 1));
+												return;
+										}
+								}
+								throwYieldError(this.proxy, " cannot yield since no callback was passed.", args);
+						},
+
+						yieldTo: function (prop) {
+								this.yieldToOn.apply(this, [prop, null].concat(slice.call(arguments, 1)));
+						},
+
+						yieldToOn: function (prop, thisValue) {
+								var args = this.args;
+								for (var i = 0, l = args.length; i < l; ++i) {
+										if (args[i] && typeof args[i][prop] === "function") {
+												args[i][prop].apply(thisValue, slice.call(arguments, 2));
+												return;
+										}
+								}
+								throwYieldError(this.proxy, " cannot yield to '" + prop +
+										"' since no callback was passed.", args);
+						},
+
+						toString: function () {
+								var callStr = this.proxy.toString() + "(";
+								var args = [];
+
+								for (var i = 0, l = this.args.length; i < l; ++i) {
+										args.push(sinon.format(this.args[i]));
+								}
+
+								callStr = callStr + args.join(", ") + ")";
+
+								if (typeof this.returnValue != "undefined") {
+										callStr += " => " + sinon.format(this.returnValue);
+								}
+
+								if (this.exception) {
+										callStr += " !" + this.exception.name;
+
+										if (this.exception.message) {
+												callStr += "(" + this.exception.message + ")";
+										}
+								}
+
+								return callStr;
+						}
+				};
+
+				callProto.invokeCallback = callProto.yield;
+
+				function createSpyCall(spy, thisValue, args, returnValue, exception, id) {
+						if (typeof id !== "number") {
+								throw new TypeError("Call id is not a number");
+						}
+						var proxyCall = sinon.create(callProto);
+						proxyCall.proxy = spy;
+						proxyCall.thisValue = thisValue;
+						proxyCall.args = args;
+						proxyCall.returnValue = returnValue;
+						proxyCall.exception = exception;
+						proxyCall.callId = id;
+
+						return proxyCall;
+				}
+				createSpyCall.toString = callProto.toString; // used by mocks
+
+				sinon.spyCall = createSpyCall;
+				return createSpyCall;
+		}
+
+		var isNode = typeof module !== "undefined" && module.exports && typeof require == "function";
+		var isAMD = typeof define === "function" && typeof define.amd === "object" && define.amd;
+
+		function loadDependencies(require, exports, module) {
+				var sinon = require("./util/core");
+				require("./match");
+				require("./format");
+				module.exports = makeApi(sinon);
+		}
+
+		if (isAMD) {
+				define(loadDependencies);
+		} else if (isNode) {
+				loadDependencies(require, module.exports, module);
+		} else if (!sinon) {
+				return;
+		} else {
+				makeApi(sinon);
+		}
+}(typeof sinon == "object" && sinon || null));
+
+/**
+	* @depend times_in_words.js
+	* @depend util/core.js
+	* @depend extend.js
+	* @depend call.js
+	* @depend format.js
+	*/
+/**
+	* Spy functions
+	*
+	* @author Christian Johansen (christian@cjohansen.no)
+	* @license BSD
+	*
+	* Copyright (c) 2010-2013 Christian Johansen
+	*/
+
+(function (sinon) {
+
+		function makeApi(sinon) {
+				var push = Array.prototype.push;
+				var slice = Array.prototype.slice;
+				var callId = 0;
+
+				function spy(object, property, types) {
+						if (!property && typeof object == "function") {
+								return spy.create(object);
+						}
+
+						if (!object && !property) {
+								return spy.create(function () { });
+						}
+
+						if (types) {
+								var methodDesc = sinon.getPropertyDescriptor(object, property);
+								for (var i = 0; i < types.length; i++) {
+										methodDesc[types[i]] = spy.create(methodDesc[types[i]]);
+								}
+								return sinon.wrapMethod(object, property, methodDesc);
+						} else {
+								var method = object[property];
+								return sinon.wrapMethod(object, property, spy.create(method));
+						}
+				}
+
+				function matchingFake(fakes, args, strict) {
+						if (!fakes) {
+								return;
+						}
+
+						for (var i = 0, l = fakes.length; i < l; i++) {
+								if (fakes[i].matches(args, strict)) {
+										return fakes[i];
+								}
+						}
+				}
+
+				function incrementCallCount() {
+						this.called = true;
+						this.callCount += 1;
+						this.notCalled = false;
+						this.calledOnce = this.callCount == 1;
+						this.calledTwice = this.callCount == 2;
+						this.calledThrice = this.callCount == 3;
+				}
+
+				function createCallProperties() {
+						this.firstCall = this.getCall(0);
+						this.secondCall = this.getCall(1);
+						this.thirdCall = this.getCall(2);
+						this.lastCall = this.getCall(this.callCount - 1);
+				}
+
+				var vars = "a,b,c,d,e,f,g,h,i,j,k,l";
+				function createProxy(func, proxyLength) {
+						// Retain the function length:
+						var p;
+						if (proxyLength) {
+								eval("p = (function proxy(" + vars.substring(0, proxyLength * 2 - 1) +
+										") { return p.invoke(func, this, slice.call(arguments)); });");
+						} else {
+								p = function proxy() {
+										return p.invoke(func, this, slice.call(arguments));
+								};
+						}
+						return p;
+				}
+
+				var uuid = 0;
+
+				// Public API
+				var spyApi = {
+						reset: function () {
+								if (this.invoking) {
+										var err = new Error("Cannot reset Sinon function while invoking it. " +
+																				"Move the call to .reset outside of the callback.");
+										err.name = "InvalidResetException";
+										throw err;
+								}
+
+								this.called = false;
+								this.notCalled = true;
+								this.calledOnce = false;
+								this.calledTwice = false;
+								this.calledThrice = false;
+								this.callCount = 0;
+								this.firstCall = null;
+								this.secondCall = null;
+								this.thirdCall = null;
+								this.lastCall = null;
+								this.args = [];
+								this.returnValues = [];
+								this.thisValues = [];
+								this.exceptions = [];
+								this.callIds = [];
+								if (this.fakes) {
+										for (var i = 0; i < this.fakes.length; i++) {
+												this.fakes[i].reset();
+										}
+								}
+
+								return this;
+						},
+
+						create: function create(func, spyLength) {
+								var name;
+
+								if (typeof func != "function") {
+										func = function () { };
+								} else {
+										name = sinon.functionName(func);
+								}
+
+								if (!spyLength) {
+										spyLength = func.length;
+								}
+
+								var proxy = createProxy(func, spyLength);
+
+								sinon.extend(proxy, spy);
+								delete proxy.create;
+								sinon.extend(proxy, func);
+
+								proxy.reset();
+								proxy.prototype = func.prototype;
+								proxy.displayName = name || "spy";
+								proxy.toString = sinon.functionToString;
+								proxy.instantiateFake = sinon.spy.create;
+								proxy.id = "spy#" + uuid++;
+
+								return proxy;
+						},
+
+						invoke: function invoke(func, thisValue, args) {
+								var matching = matchingFake(this.fakes, args);
+								var exception, returnValue;
+
+								incrementCallCount.call(this);
+								push.call(this.thisValues, thisValue);
+								push.call(this.args, args);
+								push.call(this.callIds, callId++);
+
+								// Make call properties available from within the spied function:
+								createCallProperties.call(this);
+
+								try {
+										this.invoking = true;
+
+										if (matching) {
+												returnValue = matching.invoke(func, thisValue, args);
+										} else {
+												returnValue = (this.func || func).apply(thisValue, args);
+										}
+
+										var thisCall = this.getCall(this.callCount - 1);
+										if (thisCall.calledWithNew() && typeof returnValue !== "object") {
+												returnValue = thisValue;
+										}
+								} catch (e) {
+										exception = e;
+								} finally {
+										delete this.invoking;
+								}
+
+								push.call(this.exceptions, exception);
+								push.call(this.returnValues, returnValue);
+
+								// Make return value and exception available in the calls:
+								createCallProperties.call(this);
+
+								if (exception !== undefined) {
+										throw exception;
+								}
+
+								return returnValue;
+						},
+
+						named: function named(name) {
+								this.displayName = name;
+								return this;
+						},
+
+						getCall: function getCall(i) {
+								if (i < 0 || i >= this.callCount) {
+										return null;
+								}
+
+								return sinon.spyCall(this, this.thisValues[i], this.args[i],
+																				this.returnValues[i], this.exceptions[i],
+																				this.callIds[i]);
+						},
+
+						getCalls: function () {
+								var calls = [];
+								var i;
+
+								for (i = 0; i < this.callCount; i++) {
+										calls.push(this.getCall(i));
+								}
+
+								return calls;
+						},
+
+						calledBefore: function calledBefore(spyFn) {
+								if (!this.called) {
+										return false;
+								}
+
+								if (!spyFn.called) {
+										return true;
+								}
+
+								return this.callIds[0] < spyFn.callIds[spyFn.callIds.length - 1];
+						},
+
+						calledAfter: function calledAfter(spyFn) {
+								if (!this.called || !spyFn.called) {
+										return false;
+								}
+
+								return this.callIds[this.callCount - 1] > spyFn.callIds[spyFn.callCount - 1];
+						},
+
+						withArgs: function () {
+								var args = slice.call(arguments);
+
+								if (this.fakes) {
+										var match = matchingFake(this.fakes, args, true);
+
+										if (match) {
+												return match;
+										}
+								} else {
+										this.fakes = [];
+								}
+
+								var original = this;
+								var fake = this.instantiateFake();
+								fake.matchingAguments = args;
+								fake.parent = this;
+								push.call(this.fakes, fake);
+
+								fake.withArgs = function () {
+										return original.withArgs.apply(original, arguments);
+								};
+
+								for (var i = 0; i < this.args.length; i++) {
+										if (fake.matches(this.args[i])) {
+												incrementCallCount.call(fake);
+												push.call(fake.thisValues, this.thisValues[i]);
+												push.call(fake.args, this.args[i]);
+												push.call(fake.returnValues, this.returnValues[i]);
+												push.call(fake.exceptions, this.exceptions[i]);
+												push.call(fake.callIds, this.callIds[i]);
+										}
+								}
+								createCallProperties.call(fake);
+
+								return fake;
+						},
+
+						matches: function (args, strict) {
+								var margs = this.matchingAguments;
+
+								if (margs.length <= args.length &&
+										sinon.deepEqual(margs, args.slice(0, margs.length))) {
+										return !strict || margs.length == args.length;
+								}
+						},
+
+						printf: function (format) {
+								var spy = this;
+								var args = slice.call(arguments, 1);
+								var formatter;
+
+								return (format || "").replace(/%(.)/g, function (match, specifyer) {
+										formatter = spyApi.formatters[specifyer];
+
+										if (typeof formatter == "function") {
+												return formatter.call(null, spy, args);
+										} else if (!isNaN(parseInt(specifyer, 10))) {
+												return sinon.format(args[specifyer - 1]);
+										}
+
+										return "%" + specifyer;
+								});
+						}
+				};
+
+				function delegateToCalls(method, matchAny, actual, notCalled) {
+						spyApi[method] = function () {
+								if (!this.called) {
+										if (notCalled) {
+												return notCalled.apply(this, arguments);
+										}
+										return false;
+								}
+
+								var currentCall;
+								var matches = 0;
+
+								for (var i = 0, l = this.callCount; i < l; i += 1) {
+										currentCall = this.getCall(i);
+
+										if (currentCall[actual || method].apply(currentCall, arguments)) {
+												matches += 1;
+
+												if (matchAny) {
+														return true;
+												}
+										}
+								}
+
+								return matches === this.callCount;
+						};
+				}
+
+				delegateToCalls("calledOn", true);
+				delegateToCalls("alwaysCalledOn", false, "calledOn");
+				delegateToCalls("calledWith", true);
+				delegateToCalls("calledWithMatch", true);
+				delegateToCalls("alwaysCalledWith", false, "calledWith");
+				delegateToCalls("alwaysCalledWithMatch", false, "calledWithMatch");
+				delegateToCalls("calledWithExactly", true);
+				delegateToCalls("alwaysCalledWithExactly", false, "calledWithExactly");
+				delegateToCalls("neverCalledWith", false, "notCalledWith",
+						function () { return true; });
+				delegateToCalls("neverCalledWithMatch", false, "notCalledWithMatch",
+						function () { return true; });
+				delegateToCalls("threw", true);
+				delegateToCalls("alwaysThrew", false, "threw");
+				delegateToCalls("returned", true);
+				delegateToCalls("alwaysReturned", false, "returned");
+				delegateToCalls("calledWithNew", true);
+				delegateToCalls("alwaysCalledWithNew", false, "calledWithNew");
+				delegateToCalls("callArg", false, "callArgWith", function () {
+						throw new Error(this.toString() + " cannot call arg since it was not yet invoked.");
+				});
+				spyApi.callArgWith = spyApi.callArg;
+				delegateToCalls("callArgOn", false, "callArgOnWith", function () {
+						throw new Error(this.toString() + " cannot call arg since it was not yet invoked.");
+				});
+				spyApi.callArgOnWith = spyApi.callArgOn;
+				delegateToCalls("yield", false, "yield", function () {
+						throw new Error(this.toString() + " cannot yield since it was not yet invoked.");
+				});
+				// "invokeCallback" is an alias for "yield" since "yield" is invalid in strict mode.
+				spyApi.invokeCallback = spyApi.yield;
+				delegateToCalls("yieldOn", false, "yieldOn", function () {
+						throw new Error(this.toString() + " cannot yield since it was not yet invoked.");
+				});
+				delegateToCalls("yieldTo", false, "yieldTo", function (property) {
+						throw new Error(this.toString() + " cannot yield to '" + property +
+								"' since it was not yet invoked.");
+				});
+				delegateToCalls("yieldToOn", false, "yieldToOn", function (property) {
+						throw new Error(this.toString() + " cannot yield to '" + property +
+								"' since it was not yet invoked.");
+				});
+
+				spyApi.formatters = {
+						c: function (spy) {
+								return sinon.timesInWords(spy.callCount);
+						},
+
+						n: function (spy) {
+								return spy.toString();
+						},
+
+						C: function (spy) {
+								var calls = [];
+
+								for (var i = 0, l = spy.callCount; i < l; ++i) {
+										var stringifiedCall = "    " + spy.getCall(i).toString();
+										if (/\n/.test(calls[i - 1])) {
+												stringifiedCall = "\n" + stringifiedCall;
+										}
+										push.call(calls, stringifiedCall);
+								}
+
+								return calls.length > 0 ? "\n" + calls.join("\n") : "";
+						},
+
+						t: function (spy) {
+								var objects = [];
+
+								for (var i = 0, l = spy.callCount; i < l; ++i) {
+										push.call(objects, sinon.format(spy.thisValues[i]));
+								}
+
+								return objects.join(", ");
+						},
+
+						"*": function (spy, args) {
+								var formatted = [];
+
+								for (var i = 0, l = args.length; i < l; ++i) {
+										push.call(formatted, sinon.format(args[i]));
+								}
+
+								return formatted.join(", ");
+						}
+				};
+
+				sinon.extend(spy, spyApi);
+
+				spy.spyCall = sinon.spyCall;
+				sinon.spy = spy;
+
+				return spy;
+		}
+
+		var isNode = typeof module !== "undefined" && module.exports && typeof require == "function";
+		var isAMD = typeof define === "function" && typeof define.amd === "object" && define.amd;
+
+		function loadDependencies(require, exports, module) {
+				var sinon = require("./util/core");
+				require("./call");
+				require("./extend");
+				require("./times_in_words");
+				require("./format");
+				module.exports = makeApi(sinon);
+		}
+
+		if (isAMD) {
+				define(loadDependencies);
+		} else if (isNode) {
+				loadDependencies(require, module.exports, module);
+		} else if (!sinon) {
+				return;
+		} else {
+				makeApi(sinon);
+		}
+}(typeof sinon == "object" && sinon || null));
+
+/**
+ * @depend util/core.js
+ * @depend extend.js
+ */
+/**
+ * Stub behavior
+ *
+ * @author Christian Johansen (christian@cjohansen.no)
+ * @author Tim Fischbach (mail@timfischbach.de)
+ * @license BSD
+ *
+ * Copyright (c) 2010-2013 Christian Johansen
+ */
+
+(function (sinon) {
+		var slice = Array.prototype.slice;
+		var join = Array.prototype.join;
+		var useLeftMostCallback = -1;
+		var useRightMostCallback = -2;
+
+		var nextTick = (function () {
+				if (typeof process === "object" && typeof process.nextTick === "function") {
+						return process.nextTick;
+				} else if (typeof setImmediate === "function") {
+						return setImmediate;
+				} else {
+						return function (callback) {
+								setTimeout(callback, 0);
+						};
+				}
+		})();
+
+		function throwsException(error, message) {
+				if (typeof error == "string") {
+						this.exception = new Error(message || "");
+						this.exception.name = error;
+				} else if (!error) {
+						this.exception = new Error("Error");
+				} else {
+						this.exception = error;
+				}
+
+				return this;
+		}
+
+		function getCallback(behavior, args) {
+				var callArgAt = behavior.callArgAt;
+
+				if (callArgAt >= 0) {
+						return args[callArgAt];
+				}
+
+				var argumentList;
+
+				if (callArgAt === useLeftMostCallback) {
+						argumentList = args;
+				}
+
+				if (callArgAt === useRightMostCallback) {
+						argumentList = slice.call(args).reverse();
+				}
+
+				var callArgProp = behavior.callArgProp;
+
+				for (var i = 0, l = argumentList.length; i < l; ++i) {
+						if (!callArgProp && typeof argumentList[i] == "function") {
+								return argumentList[i];
+						}
+
+						if (callArgProp && argumentList[i] &&
+								typeof argumentList[i][callArgProp] == "function") {
+								return argumentList[i][callArgProp];
+						}
+				}
+
+				return null;
+		}
+
+		function makeApi(sinon) {
+				function getCallbackError(behavior, func, args) {
+						if (behavior.callArgAt < 0) {
+								var msg;
+
+								if (behavior.callArgProp) {
+										msg = sinon.functionName(behavior.stub) +
+												" expected to yield to '" + behavior.callArgProp +
+												"', but no object with such a property was passed.";
+								} else {
+										msg = sinon.functionName(behavior.stub) +
+												" expected to yield, but no callback was passed.";
+								}
+
+								if (args.length > 0) {
+										msg += " Received [" + join.call(args, ", ") + "]";
+								}
+
+								return msg;
+						}
+
+						return "argument at index " + behavior.callArgAt + " is not a function: " + func;
+				}
+
+				function callCallback(behavior, args) {
+						if (typeof behavior.callArgAt == "number") {
+								var func = getCallback(behavior, args);
+
+								if (typeof func != "function") {
+										throw new TypeError(getCallbackError(behavior, func, args));
+								}
+
+								if (behavior.callbackAsync) {
+										nextTick(function () {
+												func.apply(behavior.callbackContext, behavior.callbackArguments);
+										});
+								} else {
+										func.apply(behavior.callbackContext, behavior.callbackArguments);
+								}
+						}
+				}
+
+				var proto = {
+						create: function create(stub) {
+								var behavior = sinon.extend({}, sinon.behavior);
+								delete behavior.create;
+								behavior.stub = stub;
+
+								return behavior;
+						},
+
+						isPresent: function isPresent() {
+								return (typeof this.callArgAt == "number" ||
+												this.exception ||
+												typeof this.returnArgAt == "number" ||
+												this.returnThis ||
+												this.returnValueDefined);
+						},
+
+						invoke: function invoke(context, args) {
+								callCallback(this, args);
+
+								if (this.exception) {
+										throw this.exception;
+								} else if (typeof this.returnArgAt == "number") {
+										return args[this.returnArgAt];
+								} else if (this.returnThis) {
+										return context;
+								}
+
+								return this.returnValue;
+						},
+
+						onCall: function onCall(index) {
+								return this.stub.onCall(index);
+						},
+
+						onFirstCall: function onFirstCall() {
+								return this.stub.onFirstCall();
+						},
+
+						onSecondCall: function onSecondCall() {
+								return this.stub.onSecondCall();
+						},
+
+						onThirdCall: function onThirdCall() {
+								return this.stub.onThirdCall();
+						},
+
+						withArgs: function withArgs(/* arguments */) {
+								throw new Error("Defining a stub by invoking \"stub.onCall(...).withArgs(...)\" is not supported. " +
+																"Use \"stub.withArgs(...).onCall(...)\" to define sequential behavior for calls with certain arguments.");
+						},
+
+						callsArg: function callsArg(pos) {
+								if (typeof pos != "number") {
+										throw new TypeError("argument index is not number");
+								}
+
+								this.callArgAt = pos;
+								this.callbackArguments = [];
+								this.callbackContext = undefined;
+								this.callArgProp = undefined;
+								this.callbackAsync = false;
+
+								return this;
+						},
+
+						callsArgOn: function callsArgOn(pos, context) {
+								if (typeof pos != "number") {
+										throw new TypeError("argument index is not number");
+								}
+								if (typeof context != "object") {
+										throw new TypeError("argument context is not an object");
+								}
+
+								this.callArgAt = pos;
+								this.callbackArguments = [];
+								this.callbackContext = context;
+								this.callArgProp = undefined;
+								this.callbackAsync = false;
+
+								return this;
+						},
+
+						callsArgWith: function callsArgWith(pos) {
+								if (typeof pos != "number") {
+										throw new TypeError("argument index is not number");
+								}
+
+								this.callArgAt = pos;
+								this.callbackArguments = slice.call(arguments, 1);
+								this.callbackContext = undefined;
+								this.callArgProp = undefined;
+								this.callbackAsync = false;
+
+								return this;
+						},
+
+						callsArgOnWith: function callsArgWith(pos, context) {
+								if (typeof pos != "number") {
+										throw new TypeError("argument index is not number");
+								}
+								if (typeof context != "object") {
+										throw new TypeError("argument context is not an object");
+								}
+
+								this.callArgAt = pos;
+								this.callbackArguments = slice.call(arguments, 2);
+								this.callbackContext = context;
+								this.callArgProp = undefined;
+								this.callbackAsync = false;
+
+								return this;
+						},
+
+						yields: function () {
+								this.callArgAt = useLeftMostCallback;
+								this.callbackArguments = slice.call(arguments, 0);
+								this.callbackContext = undefined;
+								this.callArgProp = undefined;
+								this.callbackAsync = false;
+
+								return this;
+						},
+
+						yieldsRight: function () {
+								this.callArgAt = useRightMostCallback;
+								this.callbackArguments = slice.call(arguments, 0);
+								this.callbackContext = undefined;
+								this.callArgProp = undefined;
+								this.callbackAsync = false;
+
+								return this;
+						},
+
+						yieldsOn: function (context) {
+								if (typeof context != "object") {
+										throw new TypeError("argument context is not an object");
+								}
+
+								this.callArgAt = useLeftMostCallback;
+								this.callbackArguments = slice.call(arguments, 1);
+								this.callbackContext = context;
+								this.callArgProp = undefined;
+								this.callbackAsync = false;
+
+								return this;
+						},
+
+						yieldsTo: function (prop) {
+								this.callArgAt = useLeftMostCallback;
+								this.callbackArguments = slice.call(arguments, 1);
+								this.callbackContext = undefined;
+								this.callArgProp = prop;
+								this.callbackAsync = false;
+
+								return this;
+						},
+
+						yieldsToOn: function (prop, context) {
+								if (typeof context != "object") {
+										throw new TypeError("argument context is not an object");
+								}
+
+								this.callArgAt = useLeftMostCallback;
+								this.callbackArguments = slice.call(arguments, 2);
+								this.callbackContext = context;
+								this.callArgProp = prop;
+								this.callbackAsync = false;
+
+								return this;
+						},
+
+						throws: throwsException,
+						throwsException: throwsException,
+
+						returns: function returns(value) {
+								this.returnValue = value;
+								this.returnValueDefined = true;
+
+								return this;
+						},
+
+						returnsArg: function returnsArg(pos) {
+								if (typeof pos != "number") {
+										throw new TypeError("argument index is not number");
+								}
+
+								this.returnArgAt = pos;
+
+								return this;
+						},
+
+						returnsThis: function returnsThis() {
+								this.returnThis = true;
+
+								return this;
+						}
+				};
+
+				// create asynchronous versions of callsArg* and yields* methods
+				for (var method in proto) {
+						// need to avoid creating anotherasync versions of the newly added async methods
+						if (proto.hasOwnProperty(method) &&
+								method.match(/^(callsArg|yields)/) &&
+								!method.match(/Async/)) {
+								proto[method + "Async"] = (function (syncFnName) {
+										return function () {
+												var result = this[syncFnName].apply(this, arguments);
+												this.callbackAsync = true;
+												return result;
+										};
+								})(method);
+						}
+				}
+
+				sinon.behavior = proto;
+				return proto;
+		}
+
+		var isNode = typeof module !== "undefined" && module.exports && typeof require == "function";
+		var isAMD = typeof define === "function" && typeof define.amd === "object" && define.amd;
+
+		function loadDependencies(require, exports, module) {
+				var sinon = require("./util/core");
+				require("./extend");
+				module.exports = makeApi(sinon);
+		}
+
+		if (isAMD) {
+				define(loadDependencies);
+		} else if (isNode) {
+				loadDependencies(require, module.exports, module);
+		} else if (!sinon) {
+				return;
+		} else {
+				makeApi(sinon);
+		}
+}(typeof sinon == "object" && sinon || null));
+
+/**
+ * @depend util/core.js
+ * @depend extend.js
+ * @depend spy.js
+ * @depend behavior.js
+ */
+/**
+ * Stub functions
+ *
+ * @author Christian Johansen (christian@cjohansen.no)
+ * @license BSD
+ *
+ * Copyright (c) 2010-2013 Christian Johansen
+ */
+
+(function (sinon) {
+		function makeApi(sinon) {
+				function stub(object, property, func) {
+						if (!!func && typeof func != "function" && typeof func != "object") {
+								throw new TypeError("Custom stub should be a function or a property descriptor");
+						}
+
+						var wrapper;
+
+						if (func) {
+								if (typeof func == "function") {
+										wrapper = sinon.spy && sinon.spy.create ? sinon.spy.create(func) : func;
+								} else {
+										wrapper = func;
+										if (sinon.spy && sinon.spy.create) {
+												var types = sinon.objectKeys(wrapper);
+												for (var i = 0; i < types.length; i++) {
+														wrapper[types[i]] = sinon.spy.create(wrapper[types[i]]);
+												}
+										}
+								}
+						} else {
+								var stubLength = 0;
+								if (typeof object == "object" && typeof object[property] == "function") {
+										stubLength = object[property].length;
+								}
+								wrapper = stub.create(stubLength);
+						}
+
+						if (!object && typeof property === "undefined") {
+								return sinon.stub.create();
+						}
+
+						if (typeof property === "undefined" && typeof object == "object") {
+								for (var prop in object) {
+										if (typeof object[prop] === "function") {
+												stub(object, prop);
+										}
+								}
+
+								return object;
+						}
+
+						return sinon.wrapMethod(object, property, wrapper);
+				}
+
+				function getDefaultBehavior(stub) {
+						return stub.defaultBehavior || getParentBehaviour(stub) || sinon.behavior.create(stub);
+				}
+
+				function getParentBehaviour(stub) {
+						return (stub.parent && getCurrentBehavior(stub.parent));
+				}
+
+				function getCurrentBehavior(stub) {
+						var behavior = stub.behaviors[stub.callCount - 1];
+						return behavior && behavior.isPresent() ? behavior : getDefaultBehavior(stub);
+				}
+
+				var uuid = 0;
+
+				var proto = {
+						create: function create(stubLength) {
+								var functionStub = function () {
+										return getCurrentBehavior(functionStub).invoke(this, arguments);
+								};
+
+								functionStub.id = "stub#" + uuid++;
+								var orig = functionStub;
+								functionStub = sinon.spy.create(functionStub, stubLength);
+								functionStub.func = orig;
+
+								sinon.extend(functionStub, stub);
+								functionStub.instantiateFake = sinon.stub.create;
+								functionStub.displayName = "stub";
+								functionStub.toString = sinon.functionToString;
+
+								functionStub.defaultBehavior = null;
+								functionStub.behaviors = [];
+
+								return functionStub;
+						},
+
+						resetBehavior: function () {
+								var i;
+
+								this.defaultBehavior = null;
+								this.behaviors = [];
+
+								delete this.returnValue;
+								delete this.returnArgAt;
+								this.returnThis = false;
+
+								if (this.fakes) {
+										for (i = 0; i < this.fakes.length; i++) {
+												this.fakes[i].resetBehavior();
+										}
+								}
+						},
+
+						onCall: function onCall(index) {
+								if (!this.behaviors[index]) {
+										this.behaviors[index] = sinon.behavior.create(this);
+								}
+
+								return this.behaviors[index];
+						},
+
+						onFirstCall: function onFirstCall() {
+								return this.onCall(0);
+						},
+
+						onSecondCall: function onSecondCall() {
+								return this.onCall(1);
+						},
+
+						onThirdCall: function onThirdCall() {
+								return this.onCall(2);
+						}
+				};
+
+				for (var method in sinon.behavior) {
+						if (sinon.behavior.hasOwnProperty(method) &&
+								!proto.hasOwnProperty(method) &&
+								method != "create" &&
+								method != "withArgs" &&
+								method != "invoke") {
+								proto[method] = (function (behaviorMethod) {
+										return function () {
+												this.defaultBehavior = this.defaultBehavior || sinon.behavior.create(this);
+												this.defaultBehavior[behaviorMethod].apply(this.defaultBehavior, arguments);
+												return this;
+										};
+								}(method));
+						}
+				}
+
+				sinon.extend(stub, proto);
+				sinon.stub = stub;
+
+				return stub;
+		}
+
+		var isNode = typeof module !== "undefined" && module.exports && typeof require == "function";
+		var isAMD = typeof define === "function" && typeof define.amd === "object" && define.amd;
+
+		function loadDependencies(require, exports, module) {
+				var sinon = require("./util/core");
+				require("./behavior");
+				require("./spy");
+				require("./extend");
+				module.exports = makeApi(sinon);
+		}
+
+		if (isAMD) {
+				define(loadDependencies);
+		} else if (isNode) {
+				loadDependencies(require, module.exports, module);
+		} else if (!sinon) {
+				return;
+		} else {
+				makeApi(sinon);
+		}
+}(typeof sinon == "object" && sinon || null));
+
+/**
+ * @depend times_in_words.js
+ * @depend util/core.js
+ * @depend call.js
+ * @depend extend.js
+ * @depend match.js
+ * @depend spy.js
+ * @depend stub.js
+ * @depend format.js
+ */
+/**
+ * Mock functions.
+ *
+ * @author Christian Johansen (christian@cjohansen.no)
+ * @license BSD
+ *
+ * Copyright (c) 2010-2013 Christian Johansen
+ */
+
+(function (sinon) {
+		function makeApi(sinon) {
+				var push = [].push;
+				var match = sinon.match;
+
+				function mock(object) {
+						if (!object) {
+								return sinon.expectation.create("Anonymous mock");
+						}
+
+						return mock.create(object);
+				}
+
+				function each(collection, callback) {
+						if (!collection) {
+								return;
+						}
+
+						for (var i = 0, l = collection.length; i < l; i += 1) {
+								callback(collection[i]);
+						}
+				}
+
+				sinon.extend(mock, {
+						create: function create(object) {
+								if (!object) {
+										throw new TypeError("object is null");
+								}
+
+								var mockObject = sinon.extend({}, mock);
+								mockObject.object = object;
+								delete mockObject.create;
+
+								return mockObject;
+						},
+
+						expects: function expects(method) {
+								if (!method) {
+										throw new TypeError("method is falsy");
+								}
+
+								if (!this.expectations) {
+										this.expectations = {};
+										this.proxies = [];
+								}
+
+								if (!this.expectations[method]) {
+										this.expectations[method] = [];
+										var mockObject = this;
+
+										sinon.wrapMethod(this.object, method, function () {
+												return mockObject.invokeMethod(method, this, arguments);
+										});
+
+										push.call(this.proxies, method);
+								}
+
+								var expectation = sinon.expectation.create(method);
+								push.call(this.expectations[method], expectation);
+
+								return expectation;
+						},
+
+						restore: function restore() {
+								var object = this.object;
+
+								each(this.proxies, function (proxy) {
+										if (typeof object[proxy].restore == "function") {
+												object[proxy].restore();
+										}
+								});
+						},
+
+						verify: function verify() {
+								var expectations = this.expectations || {};
+								var messages = [], met = [];
+
+								each(this.proxies, function (proxy) {
+										each(expectations[proxy], function (expectation) {
+												if (!expectation.met()) {
+														push.call(messages, expectation.toString());
+												} else {
+														push.call(met, expectation.toString());
+												}
+										});
+								});
+
+								this.restore();
+
+								if (messages.length > 0) {
+										sinon.expectation.fail(messages.concat(met).join("\n"));
+								} else if (met.length > 0) {
+										sinon.expectation.pass(messages.concat(met).join("\n"));
+								}
+
+								return true;
+						},
+
+						invokeMethod: function invokeMethod(method, thisValue, args) {
+								var expectations = this.expectations && this.expectations[method];
+								var length = expectations && expectations.length || 0, i;
+
+								for (i = 0; i < length; i += 1) {
+										if (!expectations[i].met() &&
+												expectations[i].allowsCall(thisValue, args)) {
+												return expectations[i].apply(thisValue, args);
+										}
+								}
+
+								var messages = [], available, exhausted = 0;
+
+								for (i = 0; i < length; i += 1) {
+										if (expectations[i].allowsCall(thisValue, args)) {
+												available = available || expectations[i];
+										} else {
+												exhausted += 1;
+										}
+										push.call(messages, "    " + expectations[i].toString());
+								}
+
+								if (exhausted === 0) {
+										return available.apply(thisValue, args);
+								}
+
+								messages.unshift("Unexpected call: " + sinon.spyCall.toString.call({
+										proxy: method,
+										args: args
+								}));
+
+								sinon.expectation.fail(messages.join("\n"));
+						}
+				});
+
+				var times = sinon.timesInWords;
+				var slice = Array.prototype.slice;
+
+				function callCountInWords(callCount) {
+						if (callCount == 0) {
+								return "never called";
+						} else {
+								return "called " + times(callCount);
+						}
+				}
+
+				function expectedCallCountInWords(expectation) {
+						var min = expectation.minCalls;
+						var max = expectation.maxCalls;
+
+						if (typeof min == "number" && typeof max == "number") {
+								var str = times(min);
+
+								if (min != max) {
+										str = "at least " + str + " and at most " + times(max);
+								}
+
+								return str;
+						}
+
+						if (typeof min == "number") {
+								return "at least " + times(min);
+						}
+
+						return "at most " + times(max);
+				}
+
+				function receivedMinCalls(expectation) {
+						var hasMinLimit = typeof expectation.minCalls == "number";
+						return !hasMinLimit || expectation.callCount >= expectation.minCalls;
+				}
+
+				function receivedMaxCalls(expectation) {
+						if (typeof expectation.maxCalls != "number") {
+								return false;
+						}
+
+						return expectation.callCount == expectation.maxCalls;
+				}
+
+				function verifyMatcher(possibleMatcher, arg) {
+						if (match && match.isMatcher(possibleMatcher)) {
+								return possibleMatcher.test(arg);
+						} else {
+								return true;
+						}
+				}
+
+				sinon.expectation = {
+						minCalls: 1,
+						maxCalls: 1,
+
+						create: function create(methodName) {
+								var expectation = sinon.extend(sinon.stub.create(), sinon.expectation);
+								delete expectation.create;
+								expectation.method = methodName;
+
+								return expectation;
+						},
+
+						invoke: function invoke(func, thisValue, args) {
+								this.verifyCallAllowed(thisValue, args);
+
+								return sinon.spy.invoke.apply(this, arguments);
+						},
+
+						atLeast: function atLeast(num) {
+								if (typeof num != "number") {
+										throw new TypeError("'" + num + "' is not number");
+								}
+
+								if (!this.limitsSet) {
+										this.maxCalls = null;
+										this.limitsSet = true;
+								}
+
+								this.minCalls = num;
+
+								return this;
+						},
+
+						atMost: function atMost(num) {
+								if (typeof num != "number") {
+										throw new TypeError("'" + num + "' is not number");
+								}
+
+								if (!this.limitsSet) {
+										this.minCalls = null;
+										this.limitsSet = true;
+								}
+
+								this.maxCalls = num;
+
+								return this;
+						},
+
+						never: function never() {
+								return this.exactly(0);
+						},
+
+						once: function once() {
+								return this.exactly(1);
+						},
+
+						twice: function twice() {
+								return this.exactly(2);
+						},
+
+						thrice: function thrice() {
+								return this.exactly(3);
+						},
+
+						exactly: function exactly(num) {
+								if (typeof num != "number") {
+										throw new TypeError("'" + num + "' is not a number");
+								}
+
+								this.atLeast(num);
+								return this.atMost(num);
+						},
+
+						met: function met() {
+								return !this.failed && receivedMinCalls(this);
+						},
+
+						verifyCallAllowed: function verifyCallAllowed(thisValue, args) {
+								if (receivedMaxCalls(this)) {
+										this.failed = true;
+										sinon.expectation.fail(this.method + " already called " + times(this.maxCalls));
+								}
+
+								if ("expectedThis" in this && this.expectedThis !== thisValue) {
+										sinon.expectation.fail(this.method + " called with " + thisValue + " as thisValue, expected " +
+												this.expectedThis);
+								}
+
+								if (!("expectedArguments" in this)) {
+										return;
+								}
+
+								if (!args) {
+										sinon.expectation.fail(this.method + " received no arguments, expected " +
+												sinon.format(this.expectedArguments));
+								}
+
+								if (args.length < this.expectedArguments.length) {
+										sinon.expectation.fail(this.method + " received too few arguments (" + sinon.format(args) +
+												"), expected " + sinon.format(this.expectedArguments));
+								}
+
+								if (this.expectsExactArgCount &&
+										args.length != this.expectedArguments.length) {
+										sinon.expectation.fail(this.method + " received too many arguments (" + sinon.format(args) +
+												"), expected " + sinon.format(this.expectedArguments));
+								}
+
+								for (var i = 0, l = this.expectedArguments.length; i < l; i += 1) {
+
+										if (!verifyMatcher(this.expectedArguments[i], args[i])) {
+												sinon.expectation.fail(this.method + " received wrong arguments " + sinon.format(args) +
+														", didn't match " + this.expectedArguments.toString());
+										}
+
+										if (!sinon.deepEqual(this.expectedArguments[i], args[i])) {
+												sinon.expectation.fail(this.method + " received wrong arguments " + sinon.format(args) +
+														", expected " + sinon.format(this.expectedArguments));
+										}
+								}
+						},
+
+						allowsCall: function allowsCall(thisValue, args) {
+								if (this.met() && receivedMaxCalls(this)) {
+										return false;
+								}
+
+								if ("expectedThis" in this && this.expectedThis !== thisValue) {
+										return false;
+								}
+
+								if (!("expectedArguments" in this)) {
+										return true;
+								}
+
+								args = args || [];
+
+								if (args.length < this.expectedArguments.length) {
+										return false;
+								}
+
+								if (this.expectsExactArgCount &&
+										args.length != this.expectedArguments.length) {
+										return false;
+								}
+
+								for (var i = 0, l = this.expectedArguments.length; i < l; i += 1) {
+										if (!verifyMatcher(this.expectedArguments[i], args[i])) {
+												return false;
+										}
+
+										if (!sinon.deepEqual(this.expectedArguments[i], args[i])) {
+												return false;
+										}
+								}
+
+								return true;
+						},
+
+						withArgs: function withArgs() {
+								this.expectedArguments = slice.call(arguments);
+								return this;
+						},
+
+						withExactArgs: function withExactArgs() {
+								this.withArgs.apply(this, arguments);
+								this.expectsExactArgCount = true;
+								return this;
+						},
+
+						on: function on(thisValue) {
+								this.expectedThis = thisValue;
+								return this;
+						},
+
+						toString: function () {
+								var args = (this.expectedArguments || []).slice();
+
+								if (!this.expectsExactArgCount) {
+										push.call(args, "[...]");
+								}
+
+								var callStr = sinon.spyCall.toString.call({
+										proxy: this.method || "anonymous mock expectation",
+										args: args
+								});
+
+								var message = callStr.replace(", [...", "[, ...") + " " +
+										expectedCallCountInWords(this);
+
+								if (this.met()) {
+										return "Expectation met: " + message;
+								}
+
+								return "Expected " + message + " (" +
+										callCountInWords(this.callCount) + ")";
+						},
+
+						verify: function verify() {
+								if (!this.met()) {
+										sinon.expectation.fail(this.toString());
+								} else {
+										sinon.expectation.pass(this.toString());
+								}
+
+								return true;
+						},
+
+						pass: function pass(message) {
+								sinon.assert.pass(message);
+						},
+
+						fail: function fail(message) {
+								var exception = new Error(message);
+								exception.name = "ExpectationError";
+
+								throw exception;
+						}
+				};
+
+				sinon.mock = mock;
+				return mock;
+		}
+
+		var isNode = typeof module !== "undefined" && module.exports && typeof require == "function";
+		var isAMD = typeof define === "function" && typeof define.amd === "object" && define.amd;
+
+		function loadDependencies(require, exports, module) {
+				var sinon = require("./util/core");
+				require("./times_in_words");
+				require("./call");
+				require("./extend");
+				require("./match");
+				require("./spy");
+				require("./stub");
+				require("./format");
+
+				module.exports = makeApi(sinon);
+		}
+
+		if (isAMD) {
+				define(loadDependencies);
+		} else if (isNode) {
+				loadDependencies(require, module.exports, module);
+		} else if (!sinon) {
+				return;
+		} else {
+				makeApi(sinon);
+		}
+}(typeof sinon == "object" && sinon || null));
+
+/**
+ * @depend util/core.js
+ * @depend spy.js
+ * @depend stub.js
+ * @depend mock.js
+ */
+/**
+ * Collections of stubs, spies and mocks.
+ *
+ * @author Christian Johansen (christian@cjohansen.no)
+ * @license BSD
+ *
+ * Copyright (c) 2010-2013 Christian Johansen
+ */
+
+(function (sinon) {
+		var push = [].push;
+		var hasOwnProperty = Object.prototype.hasOwnProperty;
+
+		function getFakes(fakeCollection) {
+				if (!fakeCollection.fakes) {
+						fakeCollection.fakes = [];
+				}
+
+				return fakeCollection.fakes;
+		}
+
+		function each(fakeCollection, method) {
+				var fakes = getFakes(fakeCollection);
+
+				for (var i = 0, l = fakes.length; i < l; i += 1) {
+						if (typeof fakes[i][method] == "function") {
+								fakes[i][method]();
+						}
+				}
+		}
+
+		function compact(fakeCollection) {
+				var fakes = getFakes(fakeCollection);
+				var i = 0;
+				while (i < fakes.length) {
+						fakes.splice(i, 1);
+				}
+		}
+
+		function makeApi(sinon) {
+				var collection = {
+						verify: function resolve() {
+								each(this, "verify");
+						},
+
+						restore: function restore() {
+								each(this, "restore");
+								compact(this);
+						},
+
+						reset: function restore() {
+								each(this, "reset");
+						},
+
+						verifyAndRestore: function verifyAndRestore() {
+								var exception;
+
+								try {
+										this.verify();
+								} catch (e) {
+										exception = e;
+								}
+
+								this.restore();
+
+								if (exception) {
+										throw exception;
+								}
+						},
+
+						add: function add(fake) {
+								push.call(getFakes(this), fake);
+								return fake;
+						},
+
+						spy: function spy() {
+								return this.add(sinon.spy.apply(sinon, arguments));
+						},
+
+						stub: function stub(object, property, value) {
+								if (property) {
+										var original = object[property];
+
+										if (typeof original != "function") {
+												if (!hasOwnProperty.call(object, property)) {
+														throw new TypeError("Cannot stub non-existent own property " + property);
+												}
+
+												object[property] = value;
+
+												return this.add({
+														restore: function () {
+																object[property] = original;
+														}
+												});
+										}
+								}
+								if (!property && !!object && typeof object == "object") {
+										var stubbedObj = sinon.stub.apply(sinon, arguments);
+
+										for (var prop in stubbedObj) {
+												if (typeof stubbedObj[prop] === "function") {
+														this.add(stubbedObj[prop]);
+												}
+										}
+
+										return stubbedObj;
+								}
+
+								return this.add(sinon.stub.apply(sinon, arguments));
+						},
+
+						mock: function mock() {
+								return this.add(sinon.mock.apply(sinon, arguments));
+						},
+
+						inject: function inject(obj) {
+								var col = this;
+
+								obj.spy = function () {
+										return col.spy.apply(col, arguments);
+								};
+
+								obj.stub = function () {
+										return col.stub.apply(col, arguments);
+								};
+
+								obj.mock = function () {
+										return col.mock.apply(col, arguments);
+								};
+
+								return obj;
+						}
+				};
+
+				sinon.collection = collection;
+				return collection;
+		}
+
+		var isNode = typeof module !== "undefined" && module.exports && typeof require == "function";
+		var isAMD = typeof define === "function" && typeof define.amd === "object" && define.amd;
+
+		function loadDependencies(require, exports, module) {
+				var sinon = require("./util/core");
+				require("./mock");
+				require("./spy");
+				require("./stub");
+				module.exports = makeApi(sinon);
+		}
+
+		if (isAMD) {
+				define(loadDependencies);
+		} else if (isNode) {
+				loadDependencies(require, module.exports, module);
+		} else if (!sinon) {
+				return;
+		} else {
+				makeApi(sinon);
+		}
+}(typeof sinon == "object" && sinon || null));
+
+/*global lolex */
+
+/**
+ * Fake timer API
+ * setTimeout
+ * setInterval
+ * clearTimeout
+ * clearInterval
+ * tick
+ * reset
+ * Date
+ *
+ * Inspired by jsUnitMockTimeOut from JsUnit
+ *
+ * @author Christian Johansen (christian@cjohansen.no)
+ * @license BSD
+ *
+ * Copyright (c) 2010-2013 Christian Johansen
+ */
+
+if (typeof sinon == "undefined") {
+		var sinon = {};
+}
+
+(function (global) {
+		function makeApi(sinon, lol) {
+				var llx = typeof lolex !== "undefined" ? lolex : lol;
+
+				sinon.useFakeTimers = function () {
+						var now, methods = Array.prototype.slice.call(arguments);
+
+						if (typeof methods[0] === "string") {
+								now = 0;
+						} else {
+								now = methods.shift();
+						}
+
+						var clock = llx.install(now || 0, methods);
+						clock.restore = clock.uninstall;
+						return clock;
+				};
+
+				sinon.clock = {
+						create: function (now) {
+								return llx.createClock(now);
+						}
+				};
+
+				sinon.timers = {
+						setTimeout: setTimeout,
+						clearTimeout: clearTimeout,
+						setImmediate: (typeof setImmediate !== "undefined" ? setImmediate : undefined),
+						clearImmediate: (typeof clearImmediate !== "undefined" ? clearImmediate : undefined),
+						setInterval: setInterval,
+						clearInterval: clearInterval,
+						Date: Date
+				};
+		}
+
+		var isNode = typeof module !== "undefined" && module.exports && typeof require == "function";
+		var isAMD = typeof define === "function" && typeof define.amd === "object" && define.amd;
+
+		function loadDependencies(require, epxorts, module, lolex) {
+				var sinon = require("./core");
+				makeApi(sinon, lolex);
+				module.exports = sinon;
+		}
+
+		if (isAMD) {
+				define(loadDependencies);
+		} else if (isNode) {
+				loadDependencies(require, module.exports, module, require("lolex"));
+		} else {
+				makeApi(sinon);
+		}
+}(typeof global != "undefined" && typeof global !== "function" ? global : this));
+
+/**
+ * Minimal Event interface implementation
+ *
+ * Original implementation by Sven Fuchs: https://gist.github.com/995028
+ * Modifications and tests by Christian Johansen.
+ *
+ * @author Sven Fuchs (svenfuchs@artweb-design.de)
+ * @author Christian Johansen (christian@cjohansen.no)
+ * @license BSD
+ *
+ * Copyright (c) 2011 Sven Fuchs, Christian Johansen
+ */
+
+if (typeof sinon == "undefined") {
+		this.sinon = {};
+}
+
+(function () {
+		var push = [].push;
+
+		function makeApi(sinon) {
+				sinon.Event = function Event(type, bubbles, cancelable, target) {
+						this.initEvent(type, bubbles, cancelable, target);
+				};
+
+				sinon.Event.prototype = {
+						initEvent: function (type, bubbles, cancelable, target) {
+								this.type = type;
+								this.bubbles = bubbles;
+								this.cancelable = cancelable;
+								this.target = target;
+						},
+
+						stopPropagation: function () {},
+
+						preventDefault: function () {
+								this.defaultPrevented = true;
+						}
+				};
+
+				sinon.ProgressEvent = function ProgressEvent(type, progressEventRaw, target) {
+						this.initEvent(type, false, false, target);
+						this.loaded = progressEventRaw.loaded || null;
+						this.total = progressEventRaw.total || null;
+						this.lengthComputable = !!progressEventRaw.total;
+				};
+
+				sinon.ProgressEvent.prototype = new sinon.Event();
+
+				sinon.ProgressEvent.prototype.constructor =  sinon.ProgressEvent;
+
+				sinon.CustomEvent = function CustomEvent(type, customData, target) {
+						this.initEvent(type, false, false, target);
+						this.detail = customData.detail || null;
+				};
+
+				sinon.CustomEvent.prototype = new sinon.Event();
+
+				sinon.CustomEvent.prototype.constructor =  sinon.CustomEvent;
+
+				sinon.EventTarget = {
+						addEventListener: function addEventListener(event, listener) {
+								this.eventListeners = this.eventListeners || {};
+								this.eventListeners[event] = this.eventListeners[event] || [];
+								push.call(this.eventListeners[event], listener);
+						},
+
+						removeEventListener: function removeEventListener(event, listener) {
+								var listeners = this.eventListeners && this.eventListeners[event] || [];
+
+								for (var i = 0, l = listeners.length; i < l; ++i) {
+										if (listeners[i] == listener) {
+												return listeners.splice(i, 1);
+										}
+								}
+						},
+
+						dispatchEvent: function dispatchEvent(event) {
+								var type = event.type;
+								var listeners = this.eventListeners && this.eventListeners[type] || [];
+
+								for (var i = 0; i < listeners.length; i++) {
+										if (typeof listeners[i] == "function") {
+												listeners[i].call(this, event);
+										} else {
+												listeners[i].handleEvent(event);
+										}
+								}
+
+								return !!event.defaultPrevented;
+						}
+				};
+		}
+
+		var isNode = typeof module !== "undefined" && module.exports && typeof require == "function";
+		var isAMD = typeof define === "function" && typeof define.amd === "object" && define.amd;
+
+		function loadDependencies(require) {
+				var sinon = require("./core");
+				makeApi(sinon);
+		}
+
+		if (isAMD) {
+				define(loadDependencies);
+		} else if (isNode) {
+				loadDependencies(require);
+		} else {
+				makeApi(sinon);
+		}
+}());
+
+/**
+ * @depend util/core.js
+ */
+/**
+ * Logs errors
+ *
+ * @author Christian Johansen (christian@cjohansen.no)
+ * @license BSD
+ *
+ * Copyright (c) 2010-2014 Christian Johansen
+ */
+
+(function (sinon) {
+		// cache a reference to setTimeout, so that our reference won't be stubbed out
+		// when using fake timers and errors will still get logged
+		// https://github.com/cjohansen/Sinon.JS/issues/381
+		var realSetTimeout = setTimeout;
+
+		function makeApi(sinon) {
+
+				function log() {}
+
+				function logError(label, err) {
+						var msg = label + " threw exception: ";
+
+						sinon.log(msg + "[" + err.name + "] " + err.message);
+
+						if (err.stack) {
+								sinon.log(err.stack);
+						}
+
+						logError.setTimeout(function () {
+								err.message = msg + err.message;
+								throw err;
+						}, 0);
+				};
+
+				// wrap realSetTimeout with something we can stub in tests
+				logError.setTimeout = function (func, timeout) {
+						realSetTimeout(func, timeout);
+				}
+
+				var exports = {};
+				exports.log = sinon.log = log;
+				exports.logError = sinon.logError = logError;
+
+				return exports;
+		}
+
+		function loadDependencies(require, exports, module) {
+				var sinon = require("./util/core");
+				module.exports = makeApi(sinon);
+		}
+
+		var isNode = typeof module !== "undefined" && module.exports && typeof require == "function";
+		var isAMD = typeof define === "function" && typeof define.amd === "object" && define.amd;
+
+		if (isAMD) {
+				define(loadDependencies);
+		} else if (isNode) {
+				loadDependencies(require, module.exports, module);
+		} else if (!sinon) {
+				return;
+		} else {
+				makeApi(sinon);
+		}
+}(typeof sinon == "object" && sinon || null));
+
+/**
+ * @depend core.js
+ * @depend ../extend.js
+ * @depend event.js
+ * @depend ../log_error.js
+ */
+/**
+ * Fake XDomainRequest object
+ */
+
+if (typeof sinon == "undefined") {
+		this.sinon = {};
+}
+
+// wrapper for global
+(function (global) {
+		var xdr = { XDomainRequest: global.XDomainRequest };
+		xdr.GlobalXDomainRequest = global.XDomainRequest;
+		xdr.supportsXDR = typeof xdr.GlobalXDomainRequest != "undefined";
+		xdr.workingXDR = xdr.supportsXDR ? xdr.GlobalXDomainRequest :  false;
+
+		function makeApi(sinon) {
+				sinon.xdr = xdr;
+
+				function FakeXDomainRequest() {
+						this.readyState = FakeXDomainRequest.UNSENT;
+						this.requestBody = null;
+						this.requestHeaders = {};
+						this.status = 0;
+						this.timeout = null;
+
+						if (typeof FakeXDomainRequest.onCreate == "function") {
+								FakeXDomainRequest.onCreate(this);
+						}
+				}
+
+				function verifyState(xdr) {
+						if (xdr.readyState !== FakeXDomainRequest.OPENED) {
+								throw new Error("INVALID_STATE_ERR");
+						}
+
+						if (xdr.sendFlag) {
+								throw new Error("INVALID_STATE_ERR");
+						}
+				}
+
+				function verifyRequestSent(xdr) {
+						if (xdr.readyState == FakeXDomainRequest.UNSENT) {
+								throw new Error("Request not sent");
+						}
+						if (xdr.readyState == FakeXDomainRequest.DONE) {
+								throw new Error("Request done");
+						}
+				}
+
+				function verifyResponseBodyType(body) {
+						if (typeof body != "string") {
+								var error = new Error("Attempted to respond to fake XDomainRequest with " +
+																		body + ", which is not a string.");
+								error.name = "InvalidBodyException";
+								throw error;
+						}
+				}
+
+				sinon.extend(FakeXDomainRequest.prototype, sinon.EventTarget, {
+						open: function open(method, url) {
+								this.method = method;
+								this.url = url;
+
+								this.responseText = null;
+								this.sendFlag = false;
+
+								this.readyStateChange(FakeXDomainRequest.OPENED);
+						},
+
+						readyStateChange: function readyStateChange(state) {
+								this.readyState = state;
+								var eventName = "";
+								switch (this.readyState) {
+								case FakeXDomainRequest.UNSENT:
+										break;
+								case FakeXDomainRequest.OPENED:
+										break;
+								case FakeXDomainRequest.LOADING:
+										if (this.sendFlag) {
+												//raise the progress event
+												eventName = "onprogress";
+										}
+										break;
+								case FakeXDomainRequest.DONE:
+										if (this.isTimeout) {
+												eventName = "ontimeout"
+										} else if (this.errorFlag || (this.status < 200 || this.status > 299)) {
+												eventName = "onerror";
+										} else {
+												eventName = "onload"
+										}
+										break;
+								}
+
+								// raising event (if defined)
+								if (eventName) {
+										if (typeof this[eventName] == "function") {
+												try {
+														this[eventName]();
+												} catch (e) {
+														sinon.logError("Fake XHR " + eventName + " handler", e);
+												}
+										}
+								}
+						},
+
+						send: function send(data) {
+								verifyState(this);
+
+								if (!/^(get|head)$/i.test(this.method)) {
+										this.requestBody = data;
+								}
+								this.requestHeaders["Content-Type"] = "text/plain;charset=utf-8";
+
+								this.errorFlag = false;
+								this.sendFlag = true;
+								this.readyStateChange(FakeXDomainRequest.OPENED);
+
+								if (typeof this.onSend == "function") {
+										this.onSend(this);
+								}
+						},
+
+						abort: function abort() {
+								this.aborted = true;
+								this.responseText = null;
+								this.errorFlag = true;
+
+								if (this.readyState > sinon.FakeXDomainRequest.UNSENT && this.sendFlag) {
+										this.readyStateChange(sinon.FakeXDomainRequest.DONE);
+										this.sendFlag = false;
+								}
+						},
+
+						setResponseBody: function setResponseBody(body) {
+								verifyRequestSent(this);
+								verifyResponseBodyType(body);
+
+								var chunkSize = this.chunkSize || 10;
+								var index = 0;
+								this.responseText = "";
+
+								do {
+										this.readyStateChange(FakeXDomainRequest.LOADING);
+										this.responseText += body.substring(index, index + chunkSize);
+										index += chunkSize;
+								} while (index < body.length);
+
+								this.readyStateChange(FakeXDomainRequest.DONE);
+						},
+
+						respond: function respond(status, contentType, body) {
+								// content-type ignored, since XDomainRequest does not carry this
+								// we keep the same syntax for respond(...) as for FakeXMLHttpRequest to ease
+								// test integration across browsers
+								this.status = typeof status == "number" ? status : 200;
+								this.setResponseBody(body || "");
+						},
+
+						simulatetimeout: function simulatetimeout() {
+								this.status = 0;
+								this.isTimeout = true;
+								// Access to this should actually throw an error
+								this.responseText = undefined;
+								this.readyStateChange(FakeXDomainRequest.DONE);
+						}
+				});
+
+				sinon.extend(FakeXDomainRequest, {
+						UNSENT: 0,
+						OPENED: 1,
+						LOADING: 3,
+						DONE: 4
+				});
+
+				sinon.useFakeXDomainRequest = function useFakeXDomainRequest() {
+						sinon.FakeXDomainRequest.restore = function restore(keepOnCreate) {
+								if (xdr.supportsXDR) {
+										global.XDomainRequest = xdr.GlobalXDomainRequest;
+								}
+
+								delete sinon.FakeXDomainRequest.restore;
+
+								if (keepOnCreate !== true) {
+										delete sinon.FakeXDomainRequest.onCreate;
+								}
+						};
+						if (xdr.supportsXDR) {
+								global.XDomainRequest = sinon.FakeXDomainRequest;
+						}
+						return sinon.FakeXDomainRequest;
+				};
+
+				sinon.FakeXDomainRequest = FakeXDomainRequest;
+		}
+
+		var isNode = typeof module !== "undefined" && module.exports && typeof require == "function";
+		var isAMD = typeof define === "function" && typeof define.amd === "object" && define.amd;
+
+		function loadDependencies(require, exports, module) {
+				var sinon = require("./core");
+				require("../extend");
+				require("./event");
+				require("../log_error");
+				makeApi(sinon);
+				module.exports = sinon;
+		}
+
+		if (isAMD) {
+				define(loadDependencies);
+		} else if (isNode) {
+				loadDependencies(require, module.exports, module);
+		} else {
+				makeApi(sinon);
+		}
+})(this);
+
+/**
+ * @depend core.js
+ * @depend ../extend.js
+ * @depend event.js
+ * @depend ../log_error.js
+ */
+/**
+ * Fake XMLHttpRequest object
+ *
+ * @author Christian Johansen (christian@cjohansen.no)
+ * @license BSD
+ *
+ * Copyright (c) 2010-2013 Christian Johansen
+ */
+
+(function (global) {
+
+		var supportsProgress = typeof ProgressEvent !== "undefined";
+		var supportsCustomEvent = typeof CustomEvent !== "undefined";
+		var sinonXhr = { XMLHttpRequest: global.XMLHttpRequest };
+		sinonXhr.GlobalXMLHttpRequest = global.XMLHttpRequest;
+		sinonXhr.GlobalActiveXObject = global.ActiveXObject;
+		sinonXhr.supportsActiveX = typeof sinonXhr.GlobalActiveXObject != "undefined";
+		sinonXhr.supportsXHR = typeof sinonXhr.GlobalXMLHttpRequest != "undefined";
+		sinonXhr.workingXHR = sinonXhr.supportsXHR ? sinonXhr.GlobalXMLHttpRequest : sinonXhr.supportsActiveX
+																		 ? function () { return new sinonXhr.GlobalActiveXObject("MSXML2.XMLHTTP.3.0") } : false;
+		sinonXhr.supportsCORS = sinonXhr.supportsXHR && "withCredentials" in (new sinonXhr.GlobalXMLHttpRequest());
+
+		/*jsl:ignore*/
+		var unsafeHeaders = {
+				"Accept-Charset": true,
+				"Accept-Encoding": true,
+				Connection: true,
+				"Content-Length": true,
+				Cookie: true,
+				Cookie2: true,
+				"Content-Transfer-Encoding": true,
+				Date: true,
+				Expect: true,
+				Host: true,
+				"Keep-Alive": true,
+				Referer: true,
+				TE: true,
+				Trailer: true,
+				"Transfer-Encoding": true,
+				Upgrade: true,
+				"User-Agent": true,
+				Via: true
+		};
+		/*jsl:end*/
+
+		function FakeXMLHttpRequest() {
+				this.readyState = FakeXMLHttpRequest.UNSENT;
+				this.requestHeaders = {};
+				this.requestBody = null;
+				this.status = 0;
+				this.statusText = "";
+				this.upload = new UploadProgress();
+				if (sinonXhr.supportsCORS) {
+						this.withCredentials = false;
+				}
+
+				var xhr = this;
+				var events = ["loadstart", "load", "abort", "loadend"];
+
+				function addEventListener(eventName) {
+						xhr.addEventListener(eventName, function (event) {
+								var listener = xhr["on" + eventName];
+
+								if (listener && typeof listener == "function") {
+										listener.call(this, event);
+								}
+						});
+				}
+
+				for (var i = events.length - 1; i >= 0; i--) {
+						addEventListener(events[i]);
+				}
+
+				if (typeof FakeXMLHttpRequest.onCreate == "function") {
+						FakeXMLHttpRequest.onCreate(this);
+				}
+		}
+
+		// An upload object is created for each
+		// FakeXMLHttpRequest and allows upload
+		// events to be simulated using uploadProgress
+		// and uploadError.
+		function UploadProgress() {
+				this.eventListeners = {
+						progress: [],
+						load: [],
+						abort: [],
+						error: []
+				}
+		}
+
+		UploadProgress.prototype.addEventListener = function addEventListener(event, listener) {
+				this.eventListeners[event].push(listener);
+		};
+
+		UploadProgress.prototype.removeEventListener = function removeEventListener(event, listener) {
+				var listeners = this.eventListeners[event] || [];
+
+				for (var i = 0, l = listeners.length; i < l; ++i) {
+						if (listeners[i] == listener) {
+								return listeners.splice(i, 1);
+						}
+				}
+		};
+
+		UploadProgress.prototype.dispatchEvent = function dispatchEvent(event) {
+				var listeners = this.eventListeners[event.type] || [];
+
+				for (var i = 0, listener; (listener = listeners[i]) != null; i++) {
+						listener(event);
+				}
+		};
+
+		function verifyState(xhr) {
+				if (xhr.readyState !== FakeXMLHttpRequest.OPENED) {
+						throw new Error("INVALID_STATE_ERR");
+				}
+
+				if (xhr.sendFlag) {
+						throw new Error("INVALID_STATE_ERR");
+				}
+		}
+
+		function getHeader(headers, header) {
+				header = header.toLowerCase();
+
+				for (var h in headers) {
+						if (h.toLowerCase() == header) {
+								return h;
+						}
+				}
+
+				return null;
+		}
+
+		// filtering to enable a white-list version of Sinon FakeXhr,
+		// where whitelisted requests are passed through to real XHR
+		function each(collection, callback) {
+				if (!collection) {
+						return;
+				}
+
+				for (var i = 0, l = collection.length; i < l; i += 1) {
+						callback(collection[i]);
+				}
+		}
+		function some(collection, callback) {
+				for (var index = 0; index < collection.length; index++) {
+						if (callback(collection[index]) === true) {
+								return true;
+						}
+				}
+				return false;
+		}
+		// largest arity in XHR is 5 - XHR#open
+		var apply = function (obj, method, args) {
+				switch (args.length) {
+				case 0: return obj[method]();
+				case 1: return obj[method](args[0]);
+				case 2: return obj[method](args[0], args[1]);
+				case 3: return obj[method](args[0], args[1], args[2]);
+				case 4: return obj[method](args[0], args[1], args[2], args[3]);
+				case 5: return obj[method](args[0], args[1], args[2], args[3], args[4]);
+				}
+		};
+
+		FakeXMLHttpRequest.filters = [];
+		FakeXMLHttpRequest.addFilter = function addFilter(fn) {
+				this.filters.push(fn)
+		};
+		var IE6Re = /MSIE 6/;
+		FakeXMLHttpRequest.defake = function defake(fakeXhr, xhrArgs) {
+				var xhr = new sinonXhr.workingXHR();
+				each([
+						"open",
+						"setRequestHeader",
+						"send",
+						"abort",
+						"getResponseHeader",
+						"getAllResponseHeaders",
+						"addEventListener",
+						"overrideMimeType",
+						"removeEventListener"
+				], function (method) {
+						fakeXhr[method] = function () {
+								return apply(xhr, method, arguments);
+						};
+				});
+
+				var copyAttrs = function (args) {
+						each(args, function (attr) {
+								try {
+										fakeXhr[attr] = xhr[attr]
+								} catch (e) {
+										if (!IE6Re.test(navigator.userAgent)) {
+												throw e;
+										}
+								}
+						});
+				};
+
+				var stateChange = function stateChange() {
+						fakeXhr.readyState = xhr.readyState;
+						if (xhr.readyState >= FakeXMLHttpRequest.HEADERS_RECEIVED) {
+								copyAttrs(["status", "statusText"]);
+						}
+						if (xhr.readyState >= FakeXMLHttpRequest.LOADING) {
+								copyAttrs(["responseText", "response"]);
+						}
+						if (xhr.readyState === FakeXMLHttpRequest.DONE) {
+								copyAttrs(["responseXML"]);
+						}
+						if (fakeXhr.onreadystatechange) {
+								fakeXhr.onreadystatechange.call(fakeXhr, { target: fakeXhr });
+						}
+				};
+
+				if (xhr.addEventListener) {
+						for (var event in fakeXhr.eventListeners) {
+								if (fakeXhr.eventListeners.hasOwnProperty(event)) {
+										each(fakeXhr.eventListeners[event], function (handler) {
+												xhr.addEventListener(event, handler);
+										});
+								}
+						}
+						xhr.addEventListener("readystatechange", stateChange);
+				} else {
+						xhr.onreadystatechange = stateChange;
+				}
+				apply(xhr, "open", xhrArgs);
+		};
+		FakeXMLHttpRequest.useFilters = false;
+
+		function verifyRequestOpened(xhr) {
+				if (xhr.readyState != FakeXMLHttpRequest.OPENED) {
+						throw new Error("INVALID_STATE_ERR - " + xhr.readyState);
+				}
+		}
+
+		function verifyRequestSent(xhr) {
+				if (xhr.readyState == FakeXMLHttpRequest.DONE) {
+						throw new Error("Request done");
+				}
+		}
+
+		function verifyHeadersReceived(xhr) {
+				if (xhr.async && xhr.readyState != FakeXMLHttpRequest.HEADERS_RECEIVED) {
+						throw new Error("No headers received");
+				}
+		}
+
+		function verifyResponseBodyType(body) {
+				if (typeof body != "string") {
+						var error = new Error("Attempted to respond to fake XMLHttpRequest with " +
+																 body + ", which is not a string.");
+						error.name = "InvalidBodyException";
+						throw error;
+				}
+		}
+
+		FakeXMLHttpRequest.parseXML = function parseXML(text) {
+				var xmlDoc;
+
+				if (typeof DOMParser != "undefined") {
+						var parser = new DOMParser();
+						xmlDoc = parser.parseFromString(text, "text/xml");
+				} else {
+						xmlDoc = new ActiveXObject("Microsoft.XMLDOM");
+						xmlDoc.async = "false";
+						xmlDoc.loadXML(text);
+				}
+
+				return xmlDoc;
+		};
+
+		FakeXMLHttpRequest.statusCodes = {
+				100: "Continue",
+				101: "Switching Protocols",
+				200: "OK",
+				201: "Created",
+				202: "Accepted",
+				203: "Non-Authoritative Information",
+				204: "No Content",
+				205: "Reset Content",
+				206: "Partial Content",
+				207: "Multi-Status",
+				300: "Multiple Choice",
+				301: "Moved Permanently",
+				302: "Found",
+				303: "See Other",
+				304: "Not Modified",
+				305: "Use Proxy",
+				307: "Temporary Redirect",
+				400: "Bad Request",
+				401: "Unauthorized",
+				402: "Payment Required",
+				403: "Forbidden",
+				404: "Not Found",
+				405: "Method Not Allowed",
+				406: "Not Acceptable",
+				407: "Proxy Authentication Required",
+				408: "Request Timeout",
+				409: "Conflict",
+				410: "Gone",
+				411: "Length Required",
+				412: "Precondition Failed",
+				413: "Request Entity Too Large",
+				414: "Request-URI Too Long",
+				415: "Unsupported Media Type",
+				416: "Requested Range Not Satisfiable",
+				417: "Expectation Failed",
+				422: "Unprocessable Entity",
+				500: "Internal Server Error",
+				501: "Not Implemented",
+				502: "Bad Gateway",
+				503: "Service Unavailable",
+				504: "Gateway Timeout",
+				505: "HTTP Version Not Supported"
+		};
+
+		function makeApi(sinon) {
+				sinon.xhr = sinonXhr;
+
+				sinon.extend(FakeXMLHttpRequest.prototype, sinon.EventTarget, {
+						async: true,
+
+						open: function open(method, url, async, username, password) {
+								this.method = method;
+								this.url = url;
+								this.async = typeof async == "boolean" ? async : true;
+								this.username = username;
+								this.password = password;
+								this.responseText = null;
+								this.responseXML = null;
+								this.requestHeaders = {};
+								this.sendFlag = false;
+
+								if (FakeXMLHttpRequest.useFilters === true) {
+										var xhrArgs = arguments;
+										var defake = some(FakeXMLHttpRequest.filters, function (filter) {
+												return filter.apply(this, xhrArgs)
+										});
+										if (defake) {
+												return FakeXMLHttpRequest.defake(this, arguments);
+										}
+								}
+								this.readyStateChange(FakeXMLHttpRequest.OPENED);
+						},
+
+						readyStateChange: function readyStateChange(state) {
+								this.readyState = state;
+
+								if (typeof this.onreadystatechange == "function") {
+										try {
+												this.onreadystatechange();
+										} catch (e) {
+												sinon.logError("Fake XHR onreadystatechange handler", e);
+										}
+								}
+
+								this.dispatchEvent(new sinon.Event("readystatechange"));
+
+								switch (this.readyState) {
+										case FakeXMLHttpRequest.DONE:
+												this.dispatchEvent(new sinon.Event("load", false, false, this));
+												this.dispatchEvent(new sinon.Event("loadend", false, false, this));
+												this.upload.dispatchEvent(new sinon.Event("load", false, false, this));
+												if (supportsProgress) {
+														this.upload.dispatchEvent(new sinon.ProgressEvent("progress", {loaded: 100, total: 100}));
+														this.dispatchEvent(new sinon.ProgressEvent("progress", {loaded: 100, total: 100}));
+												}
+												break;
+								}
+						},
+
+						setRequestHeader: function setRequestHeader(header, value) {
+								verifyState(this);
+
+								if (unsafeHeaders[header] || /^(Sec-|Proxy-)/.test(header)) {
+										throw new Error("Refused to set unsafe header \"" + header + "\"");
+								}
+
+								if (this.requestHeaders[header]) {
+										this.requestHeaders[header] += "," + value;
+								} else {
+										this.requestHeaders[header] = value;
+								}
+						},
+
+						// Helps testing
+						setResponseHeaders: function setResponseHeaders(headers) {
+								verifyRequestOpened(this);
+								this.responseHeaders = {};
+
+								for (var header in headers) {
+										if (headers.hasOwnProperty(header)) {
+												this.responseHeaders[header] = headers[header];
+										}
+								}
+
+								if (this.async) {
+										this.readyStateChange(FakeXMLHttpRequest.HEADERS_RECEIVED);
+								} else {
+										this.readyState = FakeXMLHttpRequest.HEADERS_RECEIVED;
+								}
+						},
+
+						// Currently treats ALL data as a DOMString (i.e. no Document)
+						send: function send(data) {
+								verifyState(this);
+
+								if (!/^(get|head)$/i.test(this.method)) {
+										var contentType = getHeader(this.requestHeaders, "Content-Type");
+										if (this.requestHeaders[contentType]) {
+												var value = this.requestHeaders[contentType].split(";");
+												this.requestHeaders[contentType] = value[0] + ";charset=utf-8";
+										} else if (!(data instanceof FormData)) {
+												this.requestHeaders["Content-Type"] = "text/plain;charset=utf-8";
+										}
+
+										this.requestBody = data;
+								}
+
+								this.errorFlag = false;
+								this.sendFlag = this.async;
+								this.readyStateChange(FakeXMLHttpRequest.OPENED);
+
+								if (typeof this.onSend == "function") {
+										this.onSend(this);
+								}
+
+								this.dispatchEvent(new sinon.Event("loadstart", false, false, this));
+						},
+
+						abort: function abort() {
+								this.aborted = true;
+								this.responseText = null;
+								this.errorFlag = true;
+								this.requestHeaders = {};
+
+								if (this.readyState > FakeXMLHttpRequest.UNSENT && this.sendFlag) {
+										this.readyStateChange(FakeXMLHttpRequest.DONE);
+										this.sendFlag = false;
+								}
+
+								this.readyState = FakeXMLHttpRequest.UNSENT;
+
+								this.dispatchEvent(new sinon.Event("abort", false, false, this));
+
+								this.upload.dispatchEvent(new sinon.Event("abort", false, false, this));
+
+								if (typeof this.onerror === "function") {
+										this.onerror();
+								}
+						},
+
+						getResponseHeader: function getResponseHeader(header) {
+								if (this.readyState < FakeXMLHttpRequest.HEADERS_RECEIVED) {
+										return null;
+								}
+
+								if (/^Set-Cookie2?$/i.test(header)) {
+										return null;
+								}
+
+								header = getHeader(this.responseHeaders, header);
+
+								return this.responseHeaders[header] || null;
+						},
+
+						getAllResponseHeaders: function getAllResponseHeaders() {
+								if (this.readyState < FakeXMLHttpRequest.HEADERS_RECEIVED) {
+										return "";
+								}
+
+								var headers = "";
+
+								for (var header in this.responseHeaders) {
+										if (this.responseHeaders.hasOwnProperty(header) &&
+												!/^Set-Cookie2?$/i.test(header)) {
+												headers += header + ": " + this.responseHeaders[header] + "\r\n";
+										}
+								}
+
+								return headers;
+						},
+
+						setResponseBody: function setResponseBody(body) {
+								verifyRequestSent(this);
+								verifyHeadersReceived(this);
+								verifyResponseBodyType(body);
+
+								var chunkSize = this.chunkSize || 10;
+								var index = 0;
+								this.responseText = "";
+
+								do {
+										if (this.async) {
+												this.readyStateChange(FakeXMLHttpRequest.LOADING);
+										}
+
+										this.responseText += body.substring(index, index + chunkSize);
+										index += chunkSize;
+								} while (index < body.length);
+
+								var type = this.getResponseHeader("Content-Type");
+
+								if (this.responseText &&
+										(!type || /(text\/xml)|(application\/xml)|(\+xml)/.test(type))) {
+										try {
+												this.responseXML = FakeXMLHttpRequest.parseXML(this.responseText);
+										} catch (e) {
+												// Unable to parse XML - no biggie
+										}
+								}
+
+								this.readyStateChange(FakeXMLHttpRequest.DONE);
+						},
+
+						respond: function respond(status, headers, body) {
+								this.status = typeof status == "number" ? status : 200;
+								this.statusText = FakeXMLHttpRequest.statusCodes[this.status];
+								this.setResponseHeaders(headers || {});
+								this.setResponseBody(body || "");
+						},
+
+						uploadProgress: function uploadProgress(progressEventRaw) {
+								if (supportsProgress) {
+										this.upload.dispatchEvent(new sinon.ProgressEvent("progress", progressEventRaw));
+								}
+						},
+
+						downloadProgress: function downloadProgress(progressEventRaw) {
+								if (supportsProgress) {
+										this.dispatchEvent(new sinon.ProgressEvent("progress", progressEventRaw));
+								}
+						},
+
+						uploadError: function uploadError(error) {
+								if (supportsCustomEvent) {
+										this.upload.dispatchEvent(new sinon.CustomEvent("error", {detail: error}));
+								}
+						}
+				});
+
+				sinon.extend(FakeXMLHttpRequest, {
+						UNSENT: 0,
+						OPENED: 1,
+						HEADERS_RECEIVED: 2,
+						LOADING: 3,
+						DONE: 4
+				});
+
+				sinon.useFakeXMLHttpRequest = function () {
+						FakeXMLHttpRequest.restore = function restore(keepOnCreate) {
+								if (sinonXhr.supportsXHR) {
+										global.XMLHttpRequest = sinonXhr.GlobalXMLHttpRequest;
+								}
+
+								if (sinonXhr.supportsActiveX) {
+										global.ActiveXObject = sinonXhr.GlobalActiveXObject;
+								}
+
+								delete FakeXMLHttpRequest.restore;
+
+								if (keepOnCreate !== true) {
+										delete FakeXMLHttpRequest.onCreate;
+								}
+						};
+						if (sinonXhr.supportsXHR) {
+								global.XMLHttpRequest = FakeXMLHttpRequest;
+						}
+
+						if (sinonXhr.supportsActiveX) {
+								global.ActiveXObject = function ActiveXObject(objId) {
+										if (objId == "Microsoft.XMLHTTP" || /^Msxml2\.XMLHTTP/i.test(objId)) {
+
+												return new FakeXMLHttpRequest();
+										}
+
+										return new sinonXhr.GlobalActiveXObject(objId);
+								};
+						}
+
+						return FakeXMLHttpRequest;
+				};
+
+				sinon.FakeXMLHttpRequest = FakeXMLHttpRequest;
+		}
+
+		var isNode = typeof module !== "undefined" && module.exports && typeof require == "function";
+		var isAMD = typeof define === "function" && typeof define.amd === "object" && define.amd;
+
+		function loadDependencies(require, exports, module) {
+				var sinon = require("./core");
+				require("../extend");
+				require("./event");
+				require("../log_error");
+				makeApi(sinon);
+				module.exports = sinon;
+		}
+
+		if (isAMD) {
+				define(loadDependencies);
+		} else if (isNode) {
+				loadDependencies(require, module.exports, module);
+		} else if (typeof sinon === "undefined") {
+				return;
+		} else {
+				makeApi(sinon);
+		}
+
+})(typeof global !== "undefined" ? global : this);
+
+/**
+ * @depend fake_xdomain_request.js
+ * @depend fake_xml_http_request.js
+ * @depend ../format.js
+ * @depend ../log_error.js
+ */
+/**
+ * The Sinon "server" mimics a web server that receives requests from
+ * sinon.FakeXMLHttpRequest and provides an API to respond to those requests,
+ * both synchronously and asynchronously. To respond synchronuously, canned
+ * answers have to be provided upfront.
+ *
+ * @author Christian Johansen (christian@cjohansen.no)
+ * @license BSD
+ *
+ * Copyright (c) 2010-2013 Christian Johansen
+ */
+
+if (typeof sinon == "undefined") {
+		var sinon = {};
+}
+
+(function () {
+		var push = [].push;
+		function F() {}
+
+		function create(proto) {
+				F.prototype = proto;
+				return new F();
+		}
+
+		function responseArray(handler) {
+				var response = handler;
+
+				if (Object.prototype.toString.call(handler) != "[object Array]") {
+						response = [200, {}, handler];
+				}
+
+				if (typeof response[2] != "string") {
+						throw new TypeError("Fake server response body should be string, but was " +
+																typeof response[2]);
+				}
+
+				return response;
+		}
+
+		var wloc = typeof window !== "undefined" ? window.location : {};
+		var rCurrLoc = new RegExp("^" + wloc.protocol + "//" + wloc.host);
+
+		function matchOne(response, reqMethod, reqUrl) {
+				var rmeth = response.method;
+				var matchMethod = !rmeth || rmeth.toLowerCase() == reqMethod.toLowerCase();
+				var url = response.url;
+				var matchUrl = !url || url == reqUrl || (typeof url.test == "function" && url.test(reqUrl));
+
+				return matchMethod && matchUrl;
+		}
+
+		function match(response, request) {
+				var requestUrl = request.url;
+
+				if (!/^https?:\/\//.test(requestUrl) || rCurrLoc.test(requestUrl)) {
+						requestUrl = requestUrl.replace(rCurrLoc, "");
+				}
+
+				if (matchOne(response, this.getHTTPMethod(request), requestUrl)) {
+						if (typeof response.response == "function") {
+								var ru = response.url;
+								var args = [request].concat(ru && typeof ru.exec == "function" ? ru.exec(requestUrl).slice(1) : []);
+								return response.response.apply(response, args);
+						}
+
+						return true;
+				}
+
+				return false;
+		}
+
+		function makeApi(sinon) {
+				sinon.fakeServer = {
+						create: function () {
+								var server = create(this);
+								if (!sinon.xhr.supportsCORS) {
+										this.xhr = sinon.useFakeXDomainRequest();
+								} else {
+										this.xhr = sinon.useFakeXMLHttpRequest();
+								}
+								server.requests = [];
+
+								this.xhr.onCreate = function (xhrObj) {
+										server.addRequest(xhrObj);
+								};
+
+								return server;
+						},
+
+						addRequest: function addRequest(xhrObj) {
+								var server = this;
+								push.call(this.requests, xhrObj);
+
+								xhrObj.onSend = function () {
+										server.handleRequest(this);
+
+										if (server.respondImmediately) {
+												server.respond();
+										} else if (server.autoRespond && !server.responding) {
+												setTimeout(function () {
+														server.responding = false;
+														server.respond();
+												}, server.autoRespondAfter || 10);
+
+												server.responding = true;
+										}
+								};
+						},
+
+						getHTTPMethod: function getHTTPMethod(request) {
+								if (this.fakeHTTPMethods && /post/i.test(request.method)) {
+										var matches = (request.requestBody || "").match(/_method=([^\b;]+)/);
+										return !!matches ? matches[1] : request.method;
+								}
+
+								return request.method;
+						},
+
+						handleRequest: function handleRequest(xhr) {
+								if (xhr.async) {
+										if (!this.queue) {
+												this.queue = [];
+										}
+
+										push.call(this.queue, xhr);
+								} else {
+										this.processRequest(xhr);
+								}
+						},
+
+						log: function log(response, request) {
+								var str;
+
+								str =  "Request:\n"  + sinon.format(request)  + "\n\n";
+								str += "Response:\n" + sinon.format(response) + "\n\n";
+
+								sinon.log(str);
+						},
+
+						respondWith: function respondWith(method, url, body) {
+								if (arguments.length == 1 && typeof method != "function") {
+										this.response = responseArray(method);
+										return;
+								}
+
+								if (!this.responses) { this.responses = []; }
+
+								if (arguments.length == 1) {
+										body = method;
+										url = method = null;
+								}
+
+								if (arguments.length == 2) {
+										body = url;
+										url = method;
+										method = null;
+								}
+
+								push.call(this.responses, {
+										method: method,
+										url: url,
+										response: typeof body == "function" ? body : responseArray(body)
+								});
+						},
+
+						respond: function respond() {
+								if (arguments.length > 0) {
+										this.respondWith.apply(this, arguments);
+								}
+
+								var queue = this.queue || [];
+								var requests = queue.splice(0, queue.length);
+								var request;
+
+								while (request = requests.shift()) {
+										this.processRequest(request);
+								}
+						},
+
+						processRequest: function processRequest(request) {
+								try {
+										if (request.aborted) {
+												return;
+										}
+
+										var response = this.response || [404, {}, ""];
+
+										if (this.responses) {
+												for (var l = this.responses.length, i = l - 1; i >= 0; i--) {
+														if (match.call(this, this.responses[i], request)) {
+																response = this.responses[i].response;
+																break;
+														}
+												}
+										}
+
+										if (request.readyState != 4) {
+												this.log(response, request);
+
+												request.respond(response[0], response[1], response[2]);
+										}
+								} catch (e) {
+										sinon.logError("Fake server request processing", e);
+								}
+						},
+
+						restore: function restore() {
+								return this.xhr.restore && this.xhr.restore.apply(this.xhr, arguments);
+						}
+				};
+		}
+
+		var isNode = typeof module !== "undefined" && module.exports && typeof require == "function";
+		var isAMD = typeof define === "function" && typeof define.amd === "object" && define.amd;
+
+		function loadDependencies(require, exports, module) {
+				var sinon = require("./core");
+				require("./fake_xdomain_request");
+				require("./fake_xml_http_request");
+				require("../format");
+				makeApi(sinon);
+				module.exports = sinon;
+		}
+
+		if (isAMD) {
+				define(loadDependencies);
+		} else if (isNode) {
+				loadDependencies(require, module.exports, module);
+		} else {
+				makeApi(sinon);
+		}
+}());
+
+/**
+ * @depend fake_server.js
+ * @depend fake_timers.js
+ */
+/**
+ * Add-on for sinon.fakeServer that automatically handles a fake timer along with
+ * the FakeXMLHttpRequest. The direct inspiration for this add-on is jQuery
+ * 1.3.x, which does not use xhr object's onreadystatehandler at all - instead,
+ * it polls the object for completion with setInterval. Dispite the direct
+ * motivation, there is nothing jQuery-specific in this file, so it can be used
+ * in any environment where the ajax implementation depends on setInterval or
+ * setTimeout.
+ *
+ * @author Christian Johansen (christian@cjohansen.no)
+ * @license BSD
+ *
+ * Copyright (c) 2010-2013 Christian Johansen
+ */
+
+(function () {
+		function makeApi(sinon) {
+				function Server() {}
+				Server.prototype = sinon.fakeServer;
+
+				sinon.fakeServerWithClock = new Server();
+
+				sinon.fakeServerWithClock.addRequest = function addRequest(xhr) {
+						if (xhr.async) {
+								if (typeof setTimeout.clock == "object") {
+										this.clock = setTimeout.clock;
+								} else {
+										this.clock = sinon.useFakeTimers();
+										this.resetClock = true;
+								}
+
+								if (!this.longestTimeout) {
+										var clockSetTimeout = this.clock.setTimeout;
+										var clockSetInterval = this.clock.setInterval;
+										var server = this;
+
+										this.clock.setTimeout = function (fn, timeout) {
+												server.longestTimeout = Math.max(timeout, server.longestTimeout || 0);
+
+												return clockSetTimeout.apply(this, arguments);
+										};
+
+										this.clock.setInterval = function (fn, timeout) {
+												server.longestTimeout = Math.max(timeout, server.longestTimeout || 0);
+
+												return clockSetInterval.apply(this, arguments);
+										};
+								}
+						}
+
+						return sinon.fakeServer.addRequest.call(this, xhr);
+				};
+
+				sinon.fakeServerWithClock.respond = function respond() {
+						var returnVal = sinon.fakeServer.respond.apply(this, arguments);
+
+						if (this.clock) {
+								this.clock.tick(this.longestTimeout || 0);
+								this.longestTimeout = 0;
+
+								if (this.resetClock) {
+										this.clock.restore();
+										this.resetClock = false;
+								}
+						}
+
+						return returnVal;
+				};
+
+				sinon.fakeServerWithClock.restore = function restore() {
+						if (this.clock) {
+								this.clock.restore();
+						}
+
+						return sinon.fakeServer.restore.apply(this, arguments);
+				};
+		}
+
+		var isNode = typeof module !== "undefined" && module.exports && typeof require == "function";
+		var isAMD = typeof define === "function" && typeof define.amd === "object" && define.amd;
+
+		function loadDependencies(require) {
+				var sinon = require("./core");
+				require("./fake_server");
+				require("./fake_timers");
+				makeApi(sinon);
+		}
+
+		if (isAMD) {
+				define(loadDependencies);
+		} else if (isNode) {
+				loadDependencies(require);
+		} else {
+				makeApi(sinon);
+		}
+}());
+
+/**
+ * @depend util/core.js
+ * @depend extend.js
+ * @depend collection.js
+ * @depend util/fake_timers.js
+ * @depend util/fake_server_with_clock.js
+ */
+/**
+ * Manages fake collections as well as fake utilities such as Sinon's
+ * timers and fake XHR implementation in one convenient object.
+ *
+ * @author Christian Johansen (christian@cjohansen.no)
+ * @license BSD
+ *
+ * Copyright (c) 2010-2013 Christian Johansen
+ */
+
+(function () {
+		function makeApi(sinon) {
+				var push = [].push;
+
+				function exposeValue(sandbox, config, key, value) {
+						if (!value) {
+								return;
+						}
+
+						if (config.injectInto && !(key in config.injectInto)) {
+								config.injectInto[key] = value;
+								sandbox.injectedKeys.push(key);
+						} else {
+								push.call(sandbox.args, value);
+						}
+				}
+
+				function prepareSandboxFromConfig(config) {
+						var sandbox = sinon.create(sinon.sandbox);
+
+						if (config.useFakeServer) {
+								if (typeof config.useFakeServer == "object") {
+										sandbox.serverPrototype = config.useFakeServer;
+								}
+
+								sandbox.useFakeServer();
+						}
+
+						if (config.useFakeTimers) {
+								if (typeof config.useFakeTimers == "object") {
+										sandbox.useFakeTimers.apply(sandbox, config.useFakeTimers);
+								} else {
+										sandbox.useFakeTimers();
+								}
+						}
+
+						return sandbox;
+				}
+
+				sinon.sandbox = sinon.extend(sinon.create(sinon.collection), {
+						useFakeTimers: function useFakeTimers() {
+								this.clock = sinon.useFakeTimers.apply(sinon, arguments);
+
+								return this.add(this.clock);
+						},
+
+						serverPrototype: sinon.fakeServer,
+
+						useFakeServer: function useFakeServer() {
+								var proto = this.serverPrototype || sinon.fakeServer;
+
+								if (!proto || !proto.create) {
+										return null;
+								}
+
+								this.server = proto.create();
+								return this.add(this.server);
+						},
+
+						inject: function (obj) {
+								sinon.collection.inject.call(this, obj);
+
+								if (this.clock) {
+										obj.clock = this.clock;
+								}
+
+								if (this.server) {
+										obj.server = this.server;
+										obj.requests = this.server.requests;
+								}
+
+								obj.match = sinon.match;
+
+								return obj;
+						},
+
+						restore: function () {
+								sinon.collection.restore.apply(this, arguments);
+								this.restoreContext();
+						},
+
+						restoreContext: function () {
+								if (this.injectedKeys) {
+										for (var i = 0, j = this.injectedKeys.length; i < j; i++) {
+												delete this.injectInto[this.injectedKeys[i]];
+										}
+										this.injectedKeys = [];
+								}
+						},
+
+						create: function (config) {
+								if (!config) {
+										return sinon.create(sinon.sandbox);
+								}
+
+								var sandbox = prepareSandboxFromConfig(config);
+								sandbox.args = sandbox.args || [];
+								sandbox.injectedKeys = [];
+								sandbox.injectInto = config.injectInto;
+								var prop, value, exposed = sandbox.inject({});
+
+								if (config.properties) {
+										for (var i = 0, l = config.properties.length; i < l; i++) {
+												prop = config.properties[i];
+												value = exposed[prop] || prop == "sandbox" && sandbox;
+												exposeValue(sandbox, config, prop, value);
+										}
+								} else {
+										exposeValue(sandbox, config, "sandbox", value);
+								}
+
+								return sandbox;
+						},
+
+						match: sinon.match
+				});
+
+				sinon.sandbox.useFakeXMLHttpRequest = sinon.sandbox.useFakeServer;
+
+				return sinon.sandbox;
+		}
+
+		var isNode = typeof module !== "undefined" && module.exports && typeof require == "function";
+		var isAMD = typeof define === "function" && typeof define.amd === "object" && define.amd;
+
+		function loadDependencies(require, exports, module) {
+				var sinon = require("./util/core");
+				require("./extend");
+				require("./util/fake_server_with_clock");
+				require("./util/fake_timers");
+				require("./collection");
+				module.exports = makeApi(sinon);
+		}
+
+		if (isAMD) {
+				define(loadDependencies);
+		} else if (isNode) {
+				loadDependencies(require, module.exports, module);
+		} else if (!sinon) {
+				return;
+		} else {
+				makeApi(sinon);
+		}
+}());
+
+/**
+ * @depend util/core.js
+ * @depend sandbox.js
+ */
+/**
+ * Test function, sandboxes fakes
+ *
+ * @author Christian Johansen (christian@cjohansen.no)
+ * @license BSD
+ *
+ * Copyright (c) 2010-2013 Christian Johansen
+ */
+
+(function (sinon) {
+		function makeApi(sinon) {
+				var slice = Array.prototype.slice;
+
+				function test(callback) {
+						var type = typeof callback;
+
+						if (type != "function") {
+								throw new TypeError("sinon.test needs to wrap a test function, got " + type);
+						}
+
+						function sinonSandboxedTest() {
+								var config = sinon.getConfig(sinon.config);
+								config.injectInto = config.injectIntoThis && this || config.injectInto;
+								var sandbox = sinon.sandbox.create(config);
+								var args = slice.call(arguments);
+								var oldDone = args.length && args[args.length - 1];
+								var exception, result;
+
+								if (typeof oldDone == "function") {
+										args[args.length - 1] = function sinonDone(result) {
+												if (result) {
+														sandbox.restore();
+														throw exception;
+												} else {
+														sandbox.verifyAndRestore();
+												}
+												oldDone(result);
+										};
+								}
+
+								try {
+										result = callback.apply(this, args.concat(sandbox.args));
+								} catch (e) {
+										exception = e;
+								}
+
+								if (typeof oldDone != "function") {
+										if (typeof exception !== "undefined") {
+												sandbox.restore();
+												throw exception;
+										} else {
+												sandbox.verifyAndRestore();
+										}
+								}
+
+								return result;
+						}
+
+						if (callback.length) {
+								return function sinonAsyncSandboxedTest(callback) {
+										return sinonSandboxedTest.apply(this, arguments);
+								};
+						}
+
+						return sinonSandboxedTest;
+				}
+
+				test.config = {
+						injectIntoThis: true,
+						injectInto: null,
+						properties: ["spy", "stub", "mock", "clock", "server", "requests"],
+						useFakeTimers: true,
+						useFakeServer: true
+				};
+
+				sinon.test = test;
+				return test;
+		}
+
+		var isNode = typeof module !== "undefined" && module.exports && typeof require == "function";
+		var isAMD = typeof define === "function" && typeof define.amd === "object" && define.amd;
+
+		function loadDependencies(require, exports, module) {
+				var sinon = require("./util/core");
+				require("./sandbox");
+				module.exports = makeApi(sinon);
+		}
+
+		if (isAMD) {
+				define(loadDependencies);
+		} else if (isNode) {
+				loadDependencies(require, module.exports, module);
+		} else if (sinon) {
+				makeApi(sinon);
+		}
+}(typeof sinon == "object" && sinon || null));
+
+/**
+ * @depend util/core.js
+ * @depend test.js
+ */
+/**
+ * Test case, sandboxes all test functions
+ *
+ * @author Christian Johansen (christian@cjohansen.no)
+ * @license BSD
+ *
+ * Copyright (c) 2010-2013 Christian Johansen
+ */
+
+(function (sinon) {
+		function createTest(property, setUp, tearDown) {
+				return function () {
+						if (setUp) {
+								setUp.apply(this, arguments);
+						}
+
+						var exception, result;
+
+						try {
+								result = property.apply(this, arguments);
+						} catch (e) {
+								exception = e;
+						}
+
+						if (tearDown) {
+								tearDown.apply(this, arguments);
+						}
+
+						if (exception) {
+								throw exception;
+						}
+
+						return result;
+				};
+		}
+
+		function makeApi(sinon) {
+				function testCase(tests, prefix) {
+						/*jsl:ignore*/
+						if (!tests || typeof tests != "object") {
+								throw new TypeError("sinon.testCase needs an object with test functions");
+						}
+						/*jsl:end*/
+
+						prefix = prefix || "test";
+						var rPrefix = new RegExp("^" + prefix);
+						var methods = {}, testName, property, method;
+						var setUp = tests.setUp;
+						var tearDown = tests.tearDown;
+
+						for (testName in tests) {
+								if (tests.hasOwnProperty(testName)) {
+										property = tests[testName];
+
+										if (/^(setUp|tearDown)$/.test(testName)) {
+												continue;
+										}
+
+										if (typeof property == "function" && rPrefix.test(testName)) {
+												method = property;
+
+												if (setUp || tearDown) {
+														method = createTest(property, setUp, tearDown);
+												}
+
+												methods[testName] = sinon.test(method);
+										} else {
+												methods[testName] = tests[testName];
+										}
+								}
+						}
+
+						return methods;
+				}
+
+				sinon.testCase = testCase;
+				return testCase;
+		}
+
+		var isNode = typeof module !== "undefined" && module.exports && typeof require == "function";
+		var isAMD = typeof define === "function" && typeof define.amd === "object" && define.amd;
+
+		function loadDependencies(require, exports, module) {
+				var sinon = require("./util/core");
+				require("./test");
+				module.exports = makeApi(sinon);
+		}
+
+		if (isAMD) {
+				define(loadDependencies);
+		} else if (isNode) {
+				loadDependencies(require, module.exports, module);
+		} else if (!sinon) {
+				return;
+		} else {
+				makeApi(sinon);
+		}
+}(typeof sinon == "object" && sinon || null));
+
+/**
+ * @depend times_in_words.js
+ * @depend util/core.js
+ * @depend match.js
+ * @depend format.js
+ */
+/**
+ * Assertions matching the test spy retrieval interface.
+ *
+ * @author Christian Johansen (christian@cjohansen.no)
+ * @license BSD
+ *
+ * Copyright (c) 2010-2013 Christian Johansen
+ */
+
+(function (sinon, global) {
+		var slice = Array.prototype.slice;
+
+		function makeApi(sinon) {
+				var assert;
+
+				function verifyIsStub() {
+						var method;
+
+						for (var i = 0, l = arguments.length; i < l; ++i) {
+								method = arguments[i];
+
+								if (!method) {
+										assert.fail("fake is not a spy");
+								}
+
+								if (method.proxy) {
+										verifyIsStub(method.proxy);
+								} else {
+										if (typeof method != "function") {
+												assert.fail(method + " is not a function");
+										}
+
+										if (typeof method.getCall != "function") {
+												assert.fail(method + " is not stubbed");
+										}
+								}
+
+						}
+				}
+
+				function failAssertion(object, msg) {
+						object = object || global;
+						var failMethod = object.fail || assert.fail;
+						failMethod.call(object, msg);
+				}
+
+				function mirrorPropAsAssertion(name, method, message) {
+						if (arguments.length == 2) {
+								message = method;
+								method = name;
+						}
+
+						assert[name] = function (fake) {
+								verifyIsStub(fake);
+
+								var args = slice.call(arguments, 1);
+								var failed = false;
+
+								if (typeof method == "function") {
+										failed = !method(fake);
+								} else {
+										failed = typeof fake[method] == "function" ?
+												!fake[method].apply(fake, args) : !fake[method];
+								}
+
+								if (failed) {
+										failAssertion(this, (fake.printf || fake.proxy.printf).apply(fake, [message].concat(args)));
+								} else {
+										assert.pass(name);
+								}
+						};
+				}
+
+				function exposedName(prefix, prop) {
+						return !prefix || /^fail/.test(prop) ? prop :
+								prefix + prop.slice(0, 1).toUpperCase() + prop.slice(1);
+				}
+
+				assert = {
+						failException: "AssertError",
+
+						fail: function fail(message) {
+								var error = new Error(message);
+								error.name = this.failException || assert.failException;
+
+								throw error;
+						},
+
+						pass: function pass(assertion) {},
+
+						callOrder: function assertCallOrder() {
+								verifyIsStub.apply(null, arguments);
+								var expected = "", actual = "";
+
+								if (!sinon.calledInOrder(arguments)) {
+										try {
+												expected = [].join.call(arguments, ", ");
+												var calls = slice.call(arguments);
+												var i = calls.length;
+												while (i) {
+														if (!calls[--i].called) {
+																calls.splice(i, 1);
+														}
+												}
+												actual = sinon.orderByFirstCall(calls).join(", ");
+										} catch (e) {
+												// If this fails, we'll just fall back to the blank string
+										}
+
+										failAssertion(this, "expected " + expected + " to be " +
+																"called in order but were called as " + actual);
+								} else {
+										assert.pass("callOrder");
+								}
+						},
+
+						callCount: function assertCallCount(method, count) {
+								verifyIsStub(method);
+
+								if (method.callCount != count) {
+										var msg = "expected %n to be called " + sinon.timesInWords(count) +
+												" but was called %c%C";
+										failAssertion(this, method.printf(msg));
+								} else {
+										assert.pass("callCount");
+								}
+						},
+
+						expose: function expose(target, options) {
+								if (!target) {
+										throw new TypeError("target is null or undefined");
+								}
+
+								var o = options || {};
+								var prefix = typeof o.prefix == "undefined" && "assert" || o.prefix;
+								var includeFail = typeof o.includeFail == "undefined" || !!o.includeFail;
+
+								for (var method in this) {
+										if (method != "expose" && (includeFail || !/^(fail)/.test(method))) {
+												target[exposedName(prefix, method)] = this[method];
+										}
+								}
+
+								return target;
+						},
+
+						match: function match(actual, expectation) {
+								var matcher = sinon.match(expectation);
+								if (matcher.test(actual)) {
+										assert.pass("match");
+								} else {
+										var formatted = [
+												"expected value to match",
+												"    expected = " + sinon.format(expectation),
+												"    actual = " + sinon.format(actual)
+										]
+										failAssertion(this, formatted.join("\n"));
+								}
+						}
+				};
+
+				mirrorPropAsAssertion("called", "expected %n to have been called at least once but was never called");
+				mirrorPropAsAssertion("notCalled", function (spy) { return !spy.called; },
+														"expected %n to not have been called but was called %c%C");
+				mirrorPropAsAssertion("calledOnce", "expected %n to be called once but was called %c%C");
+				mirrorPropAsAssertion("calledTwice", "expected %n to be called twice but was called %c%C");
+				mirrorPropAsAssertion("calledThrice", "expected %n to be called thrice but was called %c%C");
+				mirrorPropAsAssertion("calledOn", "expected %n to be called with %1 as this but was called with %t");
+				mirrorPropAsAssertion("alwaysCalledOn", "expected %n to always be called with %1 as this but was called with %t");
+				mirrorPropAsAssertion("calledWithNew", "expected %n to be called with new");
+				mirrorPropAsAssertion("alwaysCalledWithNew", "expected %n to always be called with new");
+				mirrorPropAsAssertion("calledWith", "expected %n to be called with arguments %*%C");
+				mirrorPropAsAssertion("calledWithMatch", "expected %n to be called with match %*%C");
+				mirrorPropAsAssertion("alwaysCalledWith", "expected %n to always be called with arguments %*%C");
+				mirrorPropAsAssertion("alwaysCalledWithMatch", "expected %n to always be called with match %*%C");
+				mirrorPropAsAssertion("calledWithExactly", "expected %n to be called with exact arguments %*%C");
+				mirrorPropAsAssertion("alwaysCalledWithExactly", "expected %n to always be called with exact arguments %*%C");
+				mirrorPropAsAssertion("neverCalledWith", "expected %n to never be called with arguments %*%C");
+				mirrorPropAsAssertion("neverCalledWithMatch", "expected %n to never be called with match %*%C");
+				mirrorPropAsAssertion("threw", "%n did not throw exception%C");
+				mirrorPropAsAssertion("alwaysThrew", "%n did not always throw exception%C");
+
+				sinon.assert = assert;
+				return assert;
+		}
+
+		var isNode = typeof module !== "undefined" && module.exports && typeof require == "function";
+		var isAMD = typeof define === "function" && typeof define.amd === "object" && define.amd;
+
+		function loadDependencies(require, exports, module) {
+				var sinon = require("./util/core");
+				require("./match");
+				require("./format");
+				module.exports = makeApi(sinon);
+		}
+
+		if (isAMD) {
+				define(loadDependencies);
+		} else if (isNode) {
+				loadDependencies(require, module.exports, module);
+		} else if (!sinon) {
+				return;
+		} else {
+				makeApi(sinon);
+		}
+
+}(typeof sinon == "object" && sinon || null, typeof window != "undefined" ? window : (typeof self != "undefined") ? self : global));
+
+	return sinon;
+}));
diff --git a/civicrm/bower_components/jquery/external/sinon/timers_ie.js b/civicrm/bower_components/jquery/external/sinon/timers_ie.js
new file mode 100644
index 0000000000000000000000000000000000000000..fe8f399c6a73bc0651c5ee7046889afa6ebb186f
--- /dev/null
+++ b/civicrm/bower_components/jquery/external/sinon/timers_ie.js
@@ -0,0 +1,31 @@
+/*global sinon, setTimeout, setInterval, clearTimeout, clearInterval, Date*/
+/**
+ * Helps IE run the fake timers. By defining global functions, IE allows
+ * them to be overwritten at a later point. If these are not defined like
+ * this, overwriting them will result in anything from an exception to browser
+ * crash.
+ *
+ * If you don't require fake timers to work in IE, don't include this file.
+ *
+ * @author Christian Johansen (christian@cjohansen.no)
+ * @license BSD
+ *
+ * Copyright (c) 2010-2013 Christian Johansen
+ */
+function setTimeout() {}
+function clearTimeout() {}
+function setImmediate() {}
+function clearImmediate() {}
+function setInterval() {}
+function clearInterval() {}
+function Date() {}
+
+// Reassign the original functions. Now their writable attribute
+// should be true. Hackish, I know, but it works.
+setTimeout = sinon.timers.setTimeout;
+clearTimeout = sinon.timers.clearTimeout;
+setImmediate = sinon.timers.setImmediate;
+clearImmediate = sinon.timers.clearImmediate;
+setInterval = sinon.timers.setInterval;
+clearInterval = sinon.timers.clearInterval;
+Date = sinon.timers.Date;
diff --git a/civicrm/bower_components/jquery/package.json b/civicrm/bower_components/jquery/package.json
new file mode 100644
index 0000000000000000000000000000000000000000..33fae2cfc02cf061f77fc462b5393786a85f1ec3
--- /dev/null
+++ b/civicrm/bower_components/jquery/package.json
@@ -0,0 +1,85 @@
+{
+  "name": "jquery",
+  "title": "jQuery",
+  "description": "JavaScript library for DOM operations",
+  "version": "1.12.4",
+  "main": "dist/jquery.js",
+  "homepage": "http://jquery.com",
+  "author": {
+    "name": "jQuery Foundation and other contributors",
+    "url": "https://github.com/jquery/jquery/blob/1.12-stable/AUTHORS.txt"
+  },
+  "repository": {
+    "type": "git",
+    "url": "https://github.com/jquery/jquery.git"
+  },
+  "keywords": [
+    "jquery",
+    "javascript",
+    "browser",
+    "library"
+  ],
+  "bugs": {
+    "url": "https://github.com/jquery/jquery/issues"
+  },
+  "license": "MIT",
+  "dependencies": {},
+  "devDependencies": {
+    "commitplease": "2.0.0",
+    "core-js": "0.9.17",
+    "grunt": "0.4.5",
+    "grunt-babel": "5.0.1",
+    "grunt-cli": "0.1.13",
+    "grunt-compare-size": "0.4.0",
+    "grunt-contrib-jshint": "0.11.2",
+    "grunt-contrib-uglify": "0.9.2",
+    "grunt-contrib-watch": "0.6.1",
+    "grunt-git-authors": "2.0.1",
+    "grunt-jscs": "2.1.0",
+    "grunt-jsonlint": "1.0.4",
+    "grunt-npmcopy": "0.1.0",
+    "gzip-js": "0.3.2",
+    "jsdom": "5.6.1",
+    "load-grunt-tasks": "1.0.0",
+    "npm": "2.1.12",
+    "qunitjs": "1.17.1",
+    "qunit-assert-step": "1.0.3",
+    "requirejs": "2.1.17",
+    "sinon": "1.12.2",
+    "sizzle": "2.2.1",
+    "strip-json-comments": "1.0.3",
+    "testswarm": "1.1.0",
+    "win-spawn": "2.0.0"
+  },
+  "scripts": {
+    "build": "npm install && grunt",
+    "start": "grunt watch",
+    "test": "grunt && grunt test"
+  },
+  "commitplease": {
+    "components": [
+      "Docs",
+      "Tests",
+      "Build",
+      "Release",
+      "Core",
+      "Ajax",
+      "Attributes",
+      "Callbacks",
+      "CSS",
+      "Data",
+      "Deferred",
+      "Deprecated",
+      "Dimensions",
+      "Effects",
+      "Event",
+      "Manipulation",
+      "Offset",
+      "Queue",
+      "Selector",
+      "Serialize",
+      "Traversing",
+      "Wrap"
+    ]
+  }
+}
diff --git a/civicrm/bower_components/jquery/src/core.js b/civicrm/bower_components/jquery/src/core.js
index cdbc1971ced06c639916edbbcc51a56c25d3b4b2..6e9b22418c5755eba5b381302fddb1404888b6fe 100644
--- a/civicrm/bower_components/jquery/src/core.js
+++ b/civicrm/bower_components/jquery/src/core.js
@@ -157,8 +157,9 @@ jQuery.extend = jQuery.fn.extend = function() {
 				src = target[ name ];
 				copy = options[ name ];
 
+				// Prevent Object.prototype pollution
 				// Prevent never-ending loop
-				if ( target === copy ) {
+				if ( name === "__proto__" || target === copy ) {
 					continue;
 				}
 
diff --git a/civicrm/civicrm-version.php b/civicrm/civicrm-version.php
index d29ecc277a3286e2475a338d7ead035b5f7e245e..37feaee8f66e0dd01a0c82e15a064a70c71d6efa 100644
--- a/civicrm/civicrm-version.php
+++ b/civicrm/civicrm-version.php
@@ -1,7 +1,7 @@
 <?php
 /** @deprecated */
 function civicrmVersion( ) {
-  return array( 'version'  => '5.13.3',
+  return array( 'version'  => '5.13.4',
                 'cms'      => 'Wordpress',
                 'revision' => '' );
 }
diff --git a/civicrm/composer.json b/civicrm/composer.json
index fb0a9154945ff3c3c0388a21c8235ce3b9b5dede..bdbf553c4a607c5dc91284cdd18305cf9087f75b 100644
--- a/civicrm/composer.json
+++ b/civicrm/composer.json
@@ -61,7 +61,8 @@
     "psr/simple-cache": "~1.0.1",
     "cweagans/composer-patches": "~1.0",
     "pear/log": "1.13.1",
-    "ezyang/htmlpurifier": "4.10"
+    "ezyang/htmlpurifier": "4.10",
+    "katzien/php-mime-type": "2.1.0"
   },
   "scripts": {
     "post-install-cmd": [
diff --git a/civicrm/composer.lock b/civicrm/composer.lock
index 4e2fd42aa8fef4683b1ede4a4b3d0acbefb22ff2..b0f5e5e881cfd82c6579e431b0efff75f577ec01 100644
--- a/civicrm/composer.lock
+++ b/civicrm/composer.lock
@@ -4,7 +4,7 @@
         "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
         "This file is @generated automatically"
     ],
-    "content-hash": "93a9f686f7eb00fb9d766d262eedb09b",
+    "content-hash": "2a06373b9174ae3aa2bfb820e2e5a35e",
     "packages": [
         {
             "name": "civicrm/civicrm-cxn-rpc",
@@ -454,6 +454,50 @@
             ],
             "time": "2017-03-20T17:10:46+00:00"
         },
+        {
+            "name": "katzien/php-mime-type",
+            "version": "2.1.0",
+            "source": {
+                "type": "git",
+                "url": "https://github.com/katzien/PhpMimeType.git",
+                "reference": "159dfbdcd5906442f3dad89951127f0b9dfa3b78"
+            },
+            "dist": {
+                "type": "zip",
+                "url": "https://api.github.com/repos/katzien/PhpMimeType/zipball/159dfbdcd5906442f3dad89951127f0b9dfa3b78",
+                "reference": "159dfbdcd5906442f3dad89951127f0b9dfa3b78",
+                "shasum": ""
+            },
+            "require": {
+                "php": ">=5.6"
+            },
+            "require-dev": {
+                "phpunit/phpunit": "5.*",
+                "satooshi/php-coveralls": "1.*"
+            },
+            "type": "library",
+            "autoload": {
+                "psr-4": {
+                    "MimeType\\": "src/"
+                }
+            },
+            "notification-url": "https://packagist.org/downloads/",
+            "license": [
+                "MIT"
+            ],
+            "authors": [
+                {
+                    "name": "Kat Zien"
+                }
+            ],
+            "description": "A PHP library to detect the mime type of files.",
+            "homepage": "https://github.com/katzien/PhpMimeType",
+            "keywords": [
+                "mimetype",
+                "php"
+            ],
+            "time": "2017-03-23T02:05:33+00:00"
+        },
         {
             "name": "marcj/topsort",
             "version": "1.1.0",
@@ -1980,16 +2024,16 @@
         },
         {
             "name": "tecnickcom/tcpdf",
-            "version": "6.2.13",
+            "version": "6.2.26",
             "source": {
                 "type": "git",
                 "url": "https://github.com/tecnickcom/TCPDF.git",
-                "reference": "95c5938aafe4b20df1454dbddb3e5005c0b26f64"
+                "reference": "367241059ca166e3a76490f4448c284e0a161f15"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/tecnickcom/TCPDF/zipball/95c5938aafe4b20df1454dbddb3e5005c0b26f64",
-                "reference": "95c5938aafe4b20df1454dbddb3e5005c0b26f64",
+                "url": "https://api.github.com/repos/tecnickcom/TCPDF/zipball/367241059ca166e3a76490f4448c284e0a161f15",
+                "reference": "367241059ca166e3a76490f4448c284e0a161f15",
                 "shasum": ""
             },
             "require": {
@@ -2018,13 +2062,13 @@
             },
             "notification-url": "https://packagist.org/downloads/",
             "license": [
-                "LGPLv3"
+                "LGPL-3.0"
             ],
             "authors": [
                 {
                     "name": "Nicola Asuni",
                     "email": "info@tecnick.com",
-                    "homepage": "http://nicolaasuni.tecnick.com"
+                    "role": "lead"
                 }
             ],
             "description": "TCPDF is a PHP class for generating PDF documents and barcodes.",
@@ -2038,7 +2082,7 @@
                 "pdf417",
                 "qrcode"
             ],
-            "time": "2017-04-26T08:14:48+00:00"
+            "time": "2018-10-16T17:24:05+00:00"
         },
         {
             "name": "totten/ca-config",
diff --git a/civicrm/install/index.php b/civicrm/install/index.php
index c6cd5c63ba15c28607f5dbd5ad346e69d914e93a..6eaf8a50302199acda493b587ebfe779ff650ca4 100644
--- a/civicrm/install/index.php
+++ b/civicrm/install/index.php
@@ -63,14 +63,16 @@ global $installURLPath;
 // Set the install type
 // this is sent as a query string when the page is first loaded
 // and subsequently posted to the page as a hidden field
-if (isset($_POST['civicrm_install_type'])) {
+// only permit acceptable installation types to prevent issues;
+$acceptableInstallTypes = ['drupal', 'wordpress', 'backdrop'];
+if (isset($_POST['civicrm_install_type']) && in_array($_POST['civicrm_install_type'], $acceptableInstallTypes)) {
   $installType = $_POST['civicrm_install_type'];
 }
-elseif (isset($_GET['civicrm_install_type'])) {
+elseif (isset($_GET['civicrm_install_type']) && in_array(strtolower($_GET['civicrm_install_type']), $acceptableInstallTypes)) {
   $installType = strtolower($_GET['civicrm_install_type']);
 }
 else {
-  // default value if not set
+  // default value if not set and not an acceptable install type.
   $installType = "drupal";
 }
 
diff --git a/civicrm/release-notes.md b/civicrm/release-notes.md
index 6bdcf86a8ca62fcc1cfa0895e6bbd2aae453fcb3..2150d478e4e422f4c9483ffe75578e5481dcad0f 100644
--- a/civicrm/release-notes.md
+++ b/civicrm/release-notes.md
@@ -14,9 +14,15 @@ Other resources for identifying changes are:
     * https://github.com/civicrm/civicrm-joomla
     * https://github.com/civicrm/civicrm-wordpress
 
+## CiviCRM 5.13.4
+
+Released May 15, 2019
+
+- **[Security advisories](release-notes/5.3.4.md#security)**
+
 ## CiviCRM 5.13.3
 
-Released May 13, 2019
+Released May 14, 2019
 
 - **[Synopsis](release-notes/5.13.3.md#synopsis)**
 - **[Features](release-notes/5.13.3.md#features)**
diff --git a/civicrm/release-notes/5.13.3.md b/civicrm/release-notes/5.13.3.md
index f5b361fa3b33ed58b7254506134ecd8f26692e54..c9e516212d2d9714a76818c2d9f10194f3d49f1e 100644
--- a/civicrm/release-notes/5.13.3.md
+++ b/civicrm/release-notes/5.13.3.md
@@ -1,6 +1,6 @@
 # CiviCRM 5.13.3
 
-Released May 13, 2019
+Released May 14, 2019
 
 - **[Synopsis](#synopsis)**
 - **[Bugs resolved](#bugs)**
diff --git a/civicrm/release-notes/5.13.4.md b/civicrm/release-notes/5.13.4.md
new file mode 100644
index 0000000000000000000000000000000000000000..bc5c34d113d8dcf4f63bd1342b07dac3b2773aa3
--- /dev/null
+++ b/civicrm/release-notes/5.13.4.md
@@ -0,0 +1,23 @@
+# CiviCRM 5.13.4
+
+Released May 15, 2019
+
+- **[Security advisories](#security)**
+- **[Features](#features)**
+- **[Bugs resolved](#bugs)**
+- **[Miscellany](#misc)**
+- **[Credits](#credits)**
+
+## <a name="security"></a>Security advisories
+
+- **[CIVI-SA-2019-09](https://civicrm.org/advisory/civi-sa-2019-09-xxe-in-phpword)**: XXE in PHPWord
+- **[CIVI-SA-2019-10](https://civicrm.org/advisory/civi-sa-2019-10-tcpdf-xss-and-rce-vulerabilities)**: TCPDF XSS and RCE vulnerabilities
+- **[CIVI-SA-2019-11](https://civicrm.org/advisory/civi-sa-2019-11-jquery-objectprototype-pollution)**: jQuery Object.prototype pollution
+- **[CIVI-SA-2019-12](https://civicrm.org/advisory/civi-sa-2019-12-sqli-in-country-et-al)**: SQLI in "Country", et al
+- **[CIVI-SA-2019-13](https://civicrm.org/advisory/civi-sa-2019-13-harden-against-unserialize-vulnerabilities)**: Harden against unserialize vulnerabilities
+- **[CIVI-SA-2019-14](https://civicrm.org/advisory/civi-sa-2019-14-sqli-in-apiv3-getoptions)**: SQLI in APIv3 GetOptions
+- **[CIVI-SA-2019-15](https://civicrm.org/advisory/civi-sa-2019-15-xss-via-forged-mime-type)**: XSS via forged MIME type
+- **[CIVI-SA-2019-16](https://civicrm.org/advisory/civi-sa-2019-16-sqli-in-certain-checkboxes)**: SQLI in certain checkboxes
+- **[CIVI-SA-2019-17](https://civicrm.org/advisory/civi-sa-2019-17-sqli-in-manage-events)**: SQLI in "Manage Events"
+- **[CIVI-SA-2019-18](https://civicrm.org/advisory/civi-sa-2019-18-xss-in-civicrm-installer)**: XSS in CiviCRM installer
+- **[CIVIEXT-SA-2019-01](https://civicrm.org/advisory/civiext-sa-2019-01-multiple-security-issues-in-apiv4)**: Multiple security issues in APIv4
diff --git a/civicrm/settings/Core.setting.php b/civicrm/settings/Core.setting.php
index 27af8a8f5b4f1618f3c17f03248827ad6c64ecfa..cc69e3f982d74b048f47882b5170dfc3efda1522 100644
--- a/civicrm/settings/Core.setting.php
+++ b/civicrm/settings/Core.setting.php
@@ -1052,4 +1052,18 @@ return [
     'help_text' => NULL,
     'validate_callback' => 'CRM_Utils_Rule::color',
   ],
+  'requestableMimeTypes' => [
+    'group_name' => 'CiviCRM Preferences',
+    'group' => 'core',
+    'name' => 'requestableMimeTypes',
+    'type' => 'String',
+    'html_type' => 'Text',
+    'default' => 'image/jpeg,image/pjpeg,image/gif,image/x-png,image/png,image/jpg,text/html,application/pdf',
+    'add' => '5.13',
+    'title' => ts('Mime Types that can be passed as URL params'),
+    'is_domain' => 1,
+    'is_contact' => 0,
+    'description' => ts('Acceptable Mime Types that can be used as part of file urls'),
+    'help_text' => NULL,
+  ],
 ];
diff --git a/civicrm/sql/civicrm_data.mysql b/civicrm/sql/civicrm_data.mysql
index f559d0b8347e919be558142f0b9036168565b71c..209f0479ebcbad886e3e02bd8b78527e1f62a526 100644
--- a/civicrm/sql/civicrm_data.mysql
+++ b/civicrm/sql/civicrm_data.mysql
@@ -24035,4 +24035,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.13.3';
+UPDATE civicrm_domain SET version = '5.13.4';
diff --git a/civicrm/sql/civicrm_generated.mysql b/civicrm/sql/civicrm_generated.mysql
index 3be7ded828bce639cac6d5cb2d532becb671f4c4..5f8d056e734f15923b7d306ad1253c5cb4839247 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.13.3',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.13.4',1,NULL,'a:1:{s:5:\"en_US\";a:0:{}}');
 /*!40000 ALTER TABLE `civicrm_domain` ENABLE KEYS */;
 UNLOCK TABLES;
 
diff --git a/civicrm/vendor/autoload.php b/civicrm/vendor/autoload.php
index 3fb56162265e5b68f1955b6521fef96a18fbf07a..9272d5e74596ff7d129a2b72da3c224b4c32b92e 100644
--- a/civicrm/vendor/autoload.php
+++ b/civicrm/vendor/autoload.php
@@ -4,4 +4,4 @@
 
 require_once __DIR__ . '/composer/autoload_real.php';
 
-return ComposerAutoloaderInit744d6860e21bf6592928b795556791fb::getLoader();
+return ComposerAutoloaderInit87ee1b297ddac2c843864f7c2d4f758f::getLoader();
diff --git a/civicrm/vendor/composer/autoload_psr4.php b/civicrm/vendor/composer/autoload_psr4.php
index e620c757ff15c102d803c9a5f0f472b73c37b4d6..6c720f44870e5bcb58b179f4aed4772c4dc00ce0 100644
--- a/civicrm/vendor/composer/autoload_psr4.php
+++ b/civicrm/vendor/composer/autoload_psr4.php
@@ -23,6 +23,7 @@ return array(
     'Psr\\Http\\Message\\' => array($vendorDir . '/psr/http-message/src'),
     'PhpOffice\\PhpWord\\' => array($vendorDir . '/phpoffice/phpword/src/PhpWord'),
     'PhpOffice\\Common\\' => array($vendorDir . '/phpoffice/common/src/Common'),
+    'MimeType\\' => array($vendorDir . '/katzien/php-mime-type/src'),
     'MJS\\TopSort\\Tests\\' => array($vendorDir . '/marcj/topsort/tests/Tests'),
     'MJS\\TopSort\\' => array($vendorDir . '/marcj/topsort/src'),
     'GuzzleHttp\\Psr7\\' => array($vendorDir . '/guzzlehttp/psr7/src'),
diff --git a/civicrm/vendor/composer/autoload_real.php b/civicrm/vendor/composer/autoload_real.php
index 7696c205caaad87369ec4a74b701a83c8ae172fb..72b7af0c26ce4269a4ba4acc7f554ad2e2e645e8 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 ComposerAutoloaderInit744d6860e21bf6592928b795556791fb
+class ComposerAutoloaderInit87ee1b297ddac2c843864f7c2d4f758f
 {
     private static $loader;
 
@@ -19,9 +19,9 @@ class ComposerAutoloaderInit744d6860e21bf6592928b795556791fb
             return self::$loader;
         }
 
-        spl_autoload_register(array('ComposerAutoloaderInit744d6860e21bf6592928b795556791fb', 'loadClassLoader'), true, true);
+        spl_autoload_register(array('ComposerAutoloaderInit87ee1b297ddac2c843864f7c2d4f758f', 'loadClassLoader'), true, true);
         self::$loader = $loader = new \Composer\Autoload\ClassLoader();
-        spl_autoload_unregister(array('ComposerAutoloaderInit744d6860e21bf6592928b795556791fb', 'loadClassLoader'));
+        spl_autoload_unregister(array('ComposerAutoloaderInit87ee1b297ddac2c843864f7c2d4f758f', 'loadClassLoader'));
 
         $includePaths = require __DIR__ . '/include_paths.php';
         $includePaths[] = get_include_path();
@@ -31,7 +31,7 @@ class ComposerAutoloaderInit744d6860e21bf6592928b795556791fb
         if ($useStaticLoader) {
             require_once __DIR__ . '/autoload_static.php';
 
-            call_user_func(\Composer\Autoload\ComposerStaticInit744d6860e21bf6592928b795556791fb::getInitializer($loader));
+            call_user_func(\Composer\Autoload\ComposerStaticInit87ee1b297ddac2c843864f7c2d4f758f::getInitializer($loader));
         } else {
             $map = require __DIR__ . '/autoload_namespaces.php';
             foreach ($map as $namespace => $path) {
@@ -52,19 +52,19 @@ class ComposerAutoloaderInit744d6860e21bf6592928b795556791fb
         $loader->register(true);
 
         if ($useStaticLoader) {
-            $includeFiles = Composer\Autoload\ComposerStaticInit744d6860e21bf6592928b795556791fb::$files;
+            $includeFiles = Composer\Autoload\ComposerStaticInit87ee1b297ddac2c843864f7c2d4f758f::$files;
         } else {
             $includeFiles = require __DIR__ . '/autoload_files.php';
         }
         foreach ($includeFiles as $fileIdentifier => $file) {
-            composerRequire744d6860e21bf6592928b795556791fb($fileIdentifier, $file);
+            composerRequire87ee1b297ddac2c843864f7c2d4f758f($fileIdentifier, $file);
         }
 
         return $loader;
     }
 }
 
-function composerRequire744d6860e21bf6592928b795556791fb($fileIdentifier, $file)
+function composerRequire87ee1b297ddac2c843864f7c2d4f758f($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 d90e78db72d4ff45e9a91b7ddb2acf6e5b2a9eec..8545152057db8eca45298f270b309d87dfcdfcb4 100644
--- a/civicrm/vendor/composer/autoload_static.php
+++ b/civicrm/vendor/composer/autoload_static.php
@@ -4,7 +4,7 @@
 
 namespace Composer\Autoload;
 
-class ComposerStaticInit744d6860e21bf6592928b795556791fb
+class ComposerStaticInit87ee1b297ddac2c843864f7c2d4f758f
 {
     public static $files = array (
         '320cde22f66dd4f5d3fd621d3e88b98f' => __DIR__ . '/..' . '/symfony/polyfill-ctype/bootstrap.php',
@@ -50,6 +50,7 @@ class ComposerStaticInit744d6860e21bf6592928b795556791fb
         ),
         'M' => 
         array (
+            'MimeType\\' => 9,
             'MJS\\TopSort\\Tests\\' => 18,
             'MJS\\TopSort\\' => 12,
         ),
@@ -142,6 +143,10 @@ class ComposerStaticInit744d6860e21bf6592928b795556791fb
         array (
             0 => __DIR__ . '/..' . '/phpoffice/common/src/Common',
         ),
+        'MimeType\\' => 
+        array (
+            0 => __DIR__ . '/..' . '/katzien/php-mime-type/src',
+        ),
         'MJS\\TopSort\\Tests\\' => 
         array (
             0 => __DIR__ . '/..' . '/marcj/topsort/tests/Tests',
@@ -435,11 +440,11 @@ class ComposerStaticInit744d6860e21bf6592928b795556791fb
     public static function getInitializer(ClassLoader $loader)
     {
         return \Closure::bind(function () use ($loader) {
-            $loader->prefixLengthsPsr4 = ComposerStaticInit744d6860e21bf6592928b795556791fb::$prefixLengthsPsr4;
-            $loader->prefixDirsPsr4 = ComposerStaticInit744d6860e21bf6592928b795556791fb::$prefixDirsPsr4;
-            $loader->prefixesPsr0 = ComposerStaticInit744d6860e21bf6592928b795556791fb::$prefixesPsr0;
-            $loader->fallbackDirsPsr0 = ComposerStaticInit744d6860e21bf6592928b795556791fb::$fallbackDirsPsr0;
-            $loader->classMap = ComposerStaticInit744d6860e21bf6592928b795556791fb::$classMap;
+            $loader->prefixLengthsPsr4 = ComposerStaticInit87ee1b297ddac2c843864f7c2d4f758f::$prefixLengthsPsr4;
+            $loader->prefixDirsPsr4 = ComposerStaticInit87ee1b297ddac2c843864f7c2d4f758f::$prefixDirsPsr4;
+            $loader->prefixesPsr0 = ComposerStaticInit87ee1b297ddac2c843864f7c2d4f758f::$prefixesPsr0;
+            $loader->fallbackDirsPsr0 = ComposerStaticInit87ee1b297ddac2c843864f7c2d4f758f::$fallbackDirsPsr0;
+            $loader->classMap = ComposerStaticInit87ee1b297ddac2c843864f7c2d4f758f::$classMap;
 
         }, null, ClassLoader::class);
     }
diff --git a/civicrm/vendor/composer/installed.json b/civicrm/vendor/composer/installed.json
index da4a2bf14f68a49e1e0d7ee920cb19394c894a37..eafbc0c7976c2e3dcc7132864187110e0852cee1 100644
--- a/civicrm/vendor/composer/installed.json
+++ b/civicrm/vendor/composer/installed.json
@@ -465,6 +465,52 @@
             "url"
         ]
     },
+    {
+        "name": "katzien/php-mime-type",
+        "version": "2.1.0",
+        "version_normalized": "2.1.0.0",
+        "source": {
+            "type": "git",
+            "url": "https://github.com/katzien/PhpMimeType.git",
+            "reference": "159dfbdcd5906442f3dad89951127f0b9dfa3b78"
+        },
+        "dist": {
+            "type": "zip",
+            "url": "https://api.github.com/repos/katzien/PhpMimeType/zipball/159dfbdcd5906442f3dad89951127f0b9dfa3b78",
+            "reference": "159dfbdcd5906442f3dad89951127f0b9dfa3b78",
+            "shasum": ""
+        },
+        "require": {
+            "php": ">=5.6"
+        },
+        "require-dev": {
+            "phpunit/phpunit": "5.*",
+            "satooshi/php-coveralls": "1.*"
+        },
+        "time": "2017-03-23T02:05:33+00:00",
+        "type": "library",
+        "installation-source": "dist",
+        "autoload": {
+            "psr-4": {
+                "MimeType\\": "src/"
+            }
+        },
+        "notification-url": "https://packagist.org/downloads/",
+        "license": [
+            "MIT"
+        ],
+        "authors": [
+            {
+                "name": "Kat Zien"
+            }
+        ],
+        "description": "A PHP library to detect the mime type of files.",
+        "homepage": "https://github.com/katzien/PhpMimeType",
+        "keywords": [
+            "mimetype",
+            "php"
+        ]
+    },
     {
         "name": "marcj/topsort",
         "version": "1.1.0",
@@ -2047,23 +2093,23 @@
     },
     {
         "name": "tecnickcom/tcpdf",
-        "version": "6.2.13",
-        "version_normalized": "6.2.13.0",
+        "version": "6.2.26",
+        "version_normalized": "6.2.26.0",
         "source": {
             "type": "git",
             "url": "https://github.com/tecnickcom/TCPDF.git",
-            "reference": "95c5938aafe4b20df1454dbddb3e5005c0b26f64"
+            "reference": "367241059ca166e3a76490f4448c284e0a161f15"
         },
         "dist": {
             "type": "zip",
-            "url": "https://api.github.com/repos/tecnickcom/TCPDF/zipball/95c5938aafe4b20df1454dbddb3e5005c0b26f64",
-            "reference": "95c5938aafe4b20df1454dbddb3e5005c0b26f64",
+            "url": "https://api.github.com/repos/tecnickcom/TCPDF/zipball/367241059ca166e3a76490f4448c284e0a161f15",
+            "reference": "367241059ca166e3a76490f4448c284e0a161f15",
             "shasum": ""
         },
         "require": {
             "php": ">=5.3.0"
         },
-        "time": "2017-04-26T08:14:48+00:00",
+        "time": "2018-10-16T17:24:05+00:00",
         "type": "library",
         "installation-source": "dist",
         "autoload": {
@@ -2088,13 +2134,13 @@
         },
         "notification-url": "https://packagist.org/downloads/",
         "license": [
-            "LGPLv3"
+            "LGPL-3.0"
         ],
         "authors": [
             {
                 "name": "Nicola Asuni",
                 "email": "info@tecnick.com",
-                "homepage": "http://nicolaasuni.tecnick.com"
+                "role": "lead"
             }
         ],
         "description": "TCPDF is a PHP class for generating PDF documents and barcodes.",
diff --git a/civicrm/vendor/katzien/php-mime-type/.gitignore b/civicrm/vendor/katzien/php-mime-type/.gitignore
new file mode 100644
index 0000000000000000000000000000000000000000..99d88f1536ebab02af29e325efbad479c61886db
--- /dev/null
+++ b/civicrm/vendor/katzien/php-mime-type/.gitignore
@@ -0,0 +1,4 @@
+.idea
+vendor
+test/coverage
+composer.lock
\ No newline at end of file
diff --git a/civicrm/vendor/katzien/php-mime-type/.travis.yml b/civicrm/vendor/katzien/php-mime-type/.travis.yml
new file mode 100644
index 0000000000000000000000000000000000000000..48301ffa4ab65495354d317856f82b7b9590f0a9
--- /dev/null
+++ b/civicrm/vendor/katzien/php-mime-type/.travis.yml
@@ -0,0 +1,18 @@
+language: php
+
+php:
+  - '5.6'
+  - '7.0'
+  - '7.1'
+  - hhvm
+
+before_script:
+   - wget http://getcomposer.org/composer.phar
+   - php composer.phar install --dev --no-interaction
+
+script:
+  - mkdir -p build/logs
+  - vendor/bin/phpunit -c phpunit.xml --coverage-clover build/logs/clover.xml
+
+after_script:
+  - php vendor/bin/coveralls -v
diff --git a/civicrm/vendor/katzien/php-mime-type/LICENSE b/civicrm/vendor/katzien/php-mime-type/LICENSE
new file mode 100644
index 0000000000000000000000000000000000000000..880ba47e229efc7bcb2e8976193ed6a89ec4f58a
--- /dev/null
+++ b/civicrm/vendor/katzien/php-mime-type/LICENSE
@@ -0,0 +1,22 @@
+The MIT License (MIT)
+
+Copyright (c) 2015, Kat Zien
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
+
diff --git a/civicrm/vendor/katzien/php-mime-type/README.md b/civicrm/vendor/katzien/php-mime-type/README.md
new file mode 100644
index 0000000000000000000000000000000000000000..18cf1d86da7e486e7f3c307cdd3ecef462814821
--- /dev/null
+++ b/civicrm/vendor/katzien/php-mime-type/README.md
@@ -0,0 +1,45 @@
+# PhpMimeType
+A PHP library to detect the mime type of a file.
+
+[![Build Status](https://travis-ci.org/katzien/PhpMimeType.svg?branch=master)](https://travis-ci.org/katzien/PhpMimeType)
+[![Coverage Status](https://coveralls.io/repos/katzien/PhpMimeType/badge.svg)](https://coveralls.io/r/katzien/PhpMimeType)
+
+[![Latest Stable Version](https://poser.pugx.org/katzien/php-mime-type/v/stable.svg)](https://packagist.org/packages/katzien/php-mime-type)
+[![Total Downloads](https://poser.pugx.org/katzien/php-mime-type/downloads.svg)](https://packagist.org/packages/katzien/php-mime-type)
+
+[![License](https://poser.pugx.org/katzien/php-mime-type/license.svg)](https://packagist.org/packages/katzien/php-mime-type)
+
+## Not invented here
+
+This is a modernised version of [Jason Sheets's mimetype class](http://www.phpclasses.org/browse/file/2743.html).
+
+## Installation
+
+To add the PhpMimeType library to your project run
+
+```sh
+composer require katzien/php-mime-type
+```
+
+from the directory where your composer.json file is.
+
+See [Packagist](https://packagist.org/packages/katzien/php-mime-type) for more details.
+
+## Version Guidance
+
+| Version | Status               | PHP version required |
+|---------|----------------------|----------------------|
+| 1.x     | Maintained           | min. 5.3             |
+| 2.x     | Latest (recommended) | min. 5.6             |
+
+If you're using PHP 5.6 or higher, you should use the latest 2.x version. There is no difference in usage between 1.x and 2.x, so the upgrade should not require any code changes.
+
+Differences between 1.x and 2.x:
+- syntax
+- versions of composer dependencies
+
+## Usage
+
+```php
+$type = \MimeType\MimeType::getType('my-file.pdf'); // returns "application/pdf"
+```
diff --git a/civicrm/vendor/katzien/php-mime-type/composer.json b/civicrm/vendor/katzien/php-mime-type/composer.json
new file mode 100644
index 0000000000000000000000000000000000000000..58b11364ef13b18a5cbb65d33d8e71f620bfe15f
--- /dev/null
+++ b/civicrm/vendor/katzien/php-mime-type/composer.json
@@ -0,0 +1,28 @@
+{
+    "name": "katzien/php-mime-type",
+    "type": "library",
+    "description": "A PHP library to detect the mime type of files.",
+    "keywords": [
+        "php",
+        "mimetype"
+    ],
+    "homepage": "https://github.com/katzien/PhpMimeType",
+    "license": "MIT",
+    "authors": [
+        {
+            "name": "Kat Zien"
+        }
+    ],
+    "require": {
+        "php": ">=5.6"
+    },
+    "require-dev": {
+        "phpunit/phpunit": "5.*",
+        "satooshi/php-coveralls": "1.*"
+    },
+    "autoload": {
+        "psr-4": {
+            "MimeType\\": "src/"
+        }
+    }
+}
diff --git a/civicrm/vendor/katzien/php-mime-type/phpunit.sh b/civicrm/vendor/katzien/php-mime-type/phpunit.sh
new file mode 100755
index 0000000000000000000000000000000000000000..ac80e5b7c0d79f48dd03628b549406f381c79701
--- /dev/null
+++ b/civicrm/vendor/katzien/php-mime-type/phpunit.sh
@@ -0,0 +1,3 @@
+#!/bin/bash
+
+vendor/phpunit/phpunit/phpunit -c phpunit.xml --coverage-clover build/logs/clover.xml
\ No newline at end of file
diff --git a/civicrm/vendor/katzien/php-mime-type/phpunit.xml b/civicrm/vendor/katzien/php-mime-type/phpunit.xml
new file mode 100644
index 0000000000000000000000000000000000000000..5336eda17c61e9d9b012f3d75aa2eac1d067d0da
--- /dev/null
+++ b/civicrm/vendor/katzien/php-mime-type/phpunit.xml
@@ -0,0 +1,18 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<phpunit backupGlobals="false"
+         backupStaticAttributes="false"
+         bootstrap="vendor/autoload.php"
+         colors="true"
+         convertErrorsToExceptions="true"
+         convertNoticesToExceptions="true"
+         convertWarningsToExceptions="true"
+         processIsolation="false"
+         stopOnFailure="true"
+         syntaxCheck="true"
+        >
+    <testsuites>
+        <testsuite name="PhpMimeType Test Suite">
+            <directory>./test/</directory>
+        </testsuite>
+    </testsuites>
+</phpunit>
\ No newline at end of file
diff --git a/civicrm/vendor/katzien/php-mime-type/src/Mapping.php b/civicrm/vendor/katzien/php-mime-type/src/Mapping.php
new file mode 100644
index 0000000000000000000000000000000000000000..034bbd12f8e6081ddecb7aa4f7bc5c68628f8030
--- /dev/null
+++ b/civicrm/vendor/katzien/php-mime-type/src/Mapping.php
@@ -0,0 +1,985 @@
+<?php
+
+namespace MimeType;
+
+class Mapping
+{
+    /**
+     * source: https://svn.apache.org/repos/asf/httpd/httpd/trunk/docs/conf/mime.types
+     */
+    public static $types = [
+        'ez'          => 'application/andrew-inset',
+        'aw'          => 'application/applixware',
+        'atom'        => 'application/atom+xml',
+        'atomcat'     => 'application/atomcat+xml',
+        'atomsvc'     => 'application/atomsvc+xml',
+        'ccxml'       => 'application/ccxml+xml',
+        'cdmia'       => 'application/cdmi-capability',
+        'cdmic'       => 'application/cdmi-container',
+        'cdmid'       => 'application/cdmi-domain',
+        'cdmio'       => 'application/cdmi-object',
+        'cdmiq'       => 'application/cdmi-queue',
+        'cu'          => 'application/cu-seeme',
+        'davmount'    => 'application/davmount+xml',
+        'dbk'         => 'application/docbook+xml',
+        'dssc'        => 'application/dssc+der',
+        'xdssc'       => 'application/dssc+xml',
+        'ecma'        => 'application/ecmascript',
+        'emma'        => 'application/emma+xml',
+        'epub'        => 'application/epub+zip',
+        'exi'         => 'application/exi',
+        'pfr'         => 'application/font-tdpfr',
+        'woff'        => 'application/font-woff',
+        'gml'         => 'application/gml+xml',
+        'gpx'         => 'application/gpx+xml',
+        'gxf'         => 'application/gxf',
+        'stk'         => 'application/hyperstudio',
+        'ink'         => 'application/inkml+xml',
+        'inkml'       => 'application/inkml+xml',
+        'ipfix'       => 'application/ipfix',
+        'jar'         => 'application/java-archive',
+        'ser'         => 'application/java-serialized-object',
+        'class'       => 'application/java-vm',
+        'js'          => 'application/javascript',
+        'json'        => 'application/json',
+        'jsonml'      => 'application/jsonml+json',
+        'lostxml'     => 'application/lost+xml',
+        'hqx'         => 'application/mac-binhex40',
+        'cpt'         => 'application/mac-compactpro',
+        'mads'        => 'application/mads+xml',
+        'mrc'         => 'application/marc',
+        'mrcx'        => 'application/marcxml+xml',
+        'ma'          => 'application/mathematica',
+        'nb'          => 'application/mathematica',
+        'mb'          => 'application/mathematica',
+        'mathml'      => 'application/mathml+xml',
+        'mbox'        => 'application/mbox',
+        'mscml'       => 'application/mediaservercontrol+xml',
+        'metalink'    => 'application/metalink+xml',
+        'meta4'       => 'application/metalink4+xml',
+        'mets'        => 'application/mets+xml',
+        'mods'        => 'application/mods+xml',
+        'm21'         => 'application/mp21',
+        'mp21'        => 'application/mp21',
+        'mp4s'        => 'application/mp4',
+        'doc'         => 'application/msword',
+        'dot'         => 'application/msword',
+        'mxf'         => 'application/mxf',
+        'bin'         => 'application/octet-stream',
+        'dms'         => 'application/octet-stream',
+        'lrf'         => 'application/octet-stream',
+        'mar'         => 'application/octet-stream',
+        'so'          => 'application/octet-stream',
+        'dist'        => 'application/octet-stream',
+        'distz'       => 'application/octet-stream',
+        'pkg'         => 'application/octet-stream',
+        'bpk'         => 'application/octet-stream',
+        'dump'        => 'application/octet-stream',
+        'elc'         => 'application/octet-stream',
+        'deploy'      => 'application/octet-stream',
+        'oda'         => 'application/oda',
+        'opf'         => 'application/oebps-package+xml',
+        'ogx'         => 'application/ogg',
+        'omdoc'       => 'application/omdoc+xml',
+        'onetoc'      => 'application/onenote',
+        'onetoc2'     => 'application/onenote',
+        'onetmp '     => 'application/onenote',
+        'onepkg'      => 'application/onenote',
+        'oxps'        => 'application/oxps',
+        'xer'         => 'application/patch-ops-error+xml',
+        'pdf'         => 'application/pdf',
+        'pgp'         => 'application/pgp-encrypted',
+        'asc'         => 'application/pgp-signature',
+        'sig'         => 'application/pgp-signature',
+        'prf'         => 'application/pics-rules',
+        'p10'         => 'application/pkcs10',
+        'p7m'         => 'application/pkcs7-mime',
+        'p7c'         => 'application/pkcs7-mime',
+        'p7s'         => 'application/pkcs7-signature',
+        'p8'          => 'application/pkcs8',
+        'ac'          => 'application/pkix-attr-cert',
+        'cer'         => 'application/pkix-cert',
+        'crl'         => 'application/pkix-crl',
+        'pkipath'     => 'application/pkix-pkipath',
+        'pki'         => 'application/pkixcmp',
+        'pls'         => 'application/pls+xml',
+        'ai'          => 'application/postscript',
+        'eps'         => 'application/postscript',
+        'ps'          => 'application/postscript',
+        'cww'         => 'application/prs.cww',
+        'pskcxml'     => 'application/pskc+xml',
+        'rdf'         => 'application/rdf+xml',
+        'rif'         => 'application/reginfo+xml',
+        'rnc'         => 'application/relax-ng-compact-syntax',
+        'rl'          => 'application/resource-lists+xml',
+        'rld'         => 'application/resource-lists-diff+xml',
+        'rs'          => 'application/rls-services+xml',
+        'gbr'         => 'application/rpki-ghostbusters',
+        'mft'         => 'application/rpki-manifest',
+        'roa'         => 'application/rpki-roa',
+        'rsd'         => 'application/rsd+xml',
+        'rss'         => 'application/rss+xml',
+        'rtf'         => 'application/rtf',
+        'sbml'        => 'application/sbml+xml',
+        'scq'         => 'application/scvp-cv-request',
+        'scs'         => 'application/scvp-cv-response',
+        'spq'         => 'application/scvp-vp-request',
+        'spp'         => 'application/scvp-vp-response',
+        'sdp'         => 'application/sdp',
+        'setpay'      => 'application/set-payment-initiation',
+        'setreg'      => 'application/set-registration-initiation',
+        'shf'         => 'application/shf+xml',
+        'smi'         => 'application/smil+xml',
+        'smil'        => 'application/smil+xml',
+        'rq'          => 'application/sparql-query',
+        'srx'         => 'application/sparql-results+xml',
+        'gram'        => 'application/srgs',
+        'grxml'       => 'application/srgs+xml',
+        'sru'         => 'application/sru+xml',
+        'ssdl'        => 'application/ssdl+xml',
+        'ssml'        => 'application/ssml+xml',
+        'tei'         => 'application/tei+xml',
+        'teicorpus'   => 'application/tei+xml',
+        'tfi'         => 'application/thraud+xml',
+        'tsd'         => 'application/timestamped-data',
+        'plb'         => 'application/vnd.3gpp.pic-bw-large',
+        'psb'         => 'application/vnd.3gpp.pic-bw-small',
+        'pvb'         => 'application/vnd.3gpp.pic-bw-var',
+        'tcap'        => 'application/vnd.3gpp2.tcap',
+        'pwn'         => 'application/vnd.3m.post-it-notes',
+        'aso'         => 'application/vnd.accpac.simply.aso',
+        'imp'         => 'application/vnd.accpac.simply.imp',
+        'acu'         => 'application/vnd.acucobol',
+        'atc'         => 'application/vnd.acucorp',
+        'acutc'       => 'application/vnd.acucorp',
+        'air'         => 'application/vnd.adobe.air-application-installer-package+zip',
+        'fcdt'        => 'application/vnd.adobe.formscentral.fcdt',
+        'fxp'         => 'application/vnd.adobe.fxp',
+        'fxpl'        => 'application/vnd.adobe.fxp',
+        'xdp'         => 'application/vnd.adobe.xdp+xml',
+        'xfdf'        => 'application/vnd.adobe.xfdf',
+        'ahead'       => 'application/vnd.ahead.space',
+        'azf'         => 'application/vnd.airzip.filesecure.azf',
+        'azs'         => 'application/vnd.airzip.filesecure.azs',
+        'azw'         => 'application/vnd.amazon.ebook',
+        'acc'         => 'application/vnd.americandynamics.acc',
+        'ami'         => 'application/vnd.amiga.ami',
+        'apk'         => 'application/vnd.android.package-archive',
+        'cii'         => 'application/vnd.anser-web-certificate-issue-initiation',
+        'fti'         => 'application/vnd.anser-web-funds-transfer-initiation',
+        'atx'         => 'application/vnd.antix.game-component',
+        'mpkg'        => 'application/vnd.apple.installer+xml',
+        'm3u8'        => 'application/vnd.apple.mpegurl',
+        'swi'         => 'application/vnd.aristanetworks.swi',
+        'iota'        => 'application/vnd.astraea-software.iota',
+        'aep'         => 'application/vnd.audiograph',
+        'mpm'         => 'application/vnd.blueice.multipass',
+        'bmi'         => 'application/vnd.bmi',
+        'rep'         => 'application/vnd.businessobjects',
+        'cdxml'       => 'application/vnd.chemdraw+xml',
+        'mmd'         => 'application/vnd.chipnuts.karaoke-mmd',
+        'cdy'         => 'application/vnd.cinderella',
+        'cla'         => 'application/vnd.claymore',
+        'rp9'         => 'application/vnd.cloanto.rp9',
+        'c4g'         => 'application/vnd.clonk.c4group',
+        'c4d'         => 'application/vnd.clonk.c4group',
+        'c4f'         => 'application/vnd.clonk.c4group',
+        'c4p'         => 'application/vnd.clonk.c4group',
+        'c4u'         => 'application/vnd.clonk.c4group',
+        'c11amc'      => 'application/vnd.cluetrust.cartomobile-config',
+        'c11amz'      => 'application/vnd.cluetrust.cartomobile-config-pkg',
+        'csp'         => 'application/vnd.commonspace',
+        'cdbcmsg'     => 'application/vnd.contact.cmsg',
+        'cmc'         => 'application/vnd.cosmocaller',
+        'clkx'        => 'application/vnd.crick.clicker',
+        'clkk'        => 'application/vnd.crick.clicker.keyboard',
+        'clkp'        => 'application/vnd.crick.clicker.palette',
+        'clkt'        => 'application/vnd.crick.clicker.template',
+        'clkw'        => 'application/vnd.crick.clicker.wordbank',
+        'wbs'         => 'application/vnd.criticaltools.wbs+xml',
+        'pml'         => 'application/vnd.ctc-posml',
+        'ppd'         => 'application/vnd.cups-ppd',
+        'car'         => 'application/vnd.curl.car',
+        'pcurl'       => 'application/vnd.curl.pcurl',
+        'dart'        => 'application/vnd.dart',
+        'rdz'         => 'application/vnd.data-vision.rdz',
+        'uvf'         => 'application/vnd.dece.data',
+        'uvvf'        => 'application/vnd.dece.data',
+        'uvd'         => 'application/vnd.dece.data',
+        'uvvd'        => 'application/vnd.dece.data',
+        'uvt'         => 'application/vnd.dece.ttml+xml',
+        'uvvt'        => 'application/vnd.dece.ttml+xml',
+        'uvx'         => 'application/vnd.dece.unspecified',
+        'uvvx'        => 'application/vnd.dece.unspecified',
+        'uvz'         => 'application/vnd.dece.zip',
+        'uvvz'        => 'application/vnd.dece.zip',
+        'fe_launch'   => 'application/vnd.denovo.fcselayout-link',
+        'dna'         => 'application/vnd.dna',
+        'mlp'         => 'application/vnd.dolby.mlp',
+        'dpg'         => 'application/vnd.dpgraph',
+        'dfac'        => 'application/vnd.dreamfactory',
+        'kpxx'        => 'application/vnd.ds-keypoint',
+        'ait'         => 'application/vnd.dvb.ait',
+        'svc'         => 'application/vnd.dvb.service',
+        'geo'         => 'application/vnd.dynageo',
+        'mag'         => 'application/vnd.ecowin.chart',
+        'nml'         => 'application/vnd.enliven',
+        'esf'         => 'application/vnd.epson.esf',
+        'msf'         => 'application/vnd.epson.msf',
+        'qam'         => 'application/vnd.epson.quickanime',
+        'slt'         => 'application/vnd.epson.salt',
+        'ssf'         => 'application/vnd.epson.ssf',
+        'es3'         => 'application/vnd.eszigno3+xml',
+        'et3'         => 'application/vnd.eszigno3+xml',
+        'ez2'         => 'application/vnd.ezpix-album',
+        'ez3'         => 'application/vnd.ezpix-package',
+        'fdf'         => 'application/vnd.fdf',
+        'mseed'       => 'application/vnd.fdsn.mseed',
+        'seed'        => 'application/vnd.fdsn.seed',
+        'dataless'    => 'application/vnd.fdsn.seed',
+        'gph'         => 'application/vnd.flographit',
+        'ftc'         => 'application/vnd.fluxtime.clip',
+        'fm'          => 'application/vnd.framemaker',
+        'frame'       => 'application/vnd.framemaker',
+        'maker'       => 'application/vnd.framemaker',
+        'book'        => 'application/vnd.framemaker',
+        'fnc'         => 'application/vnd.frogans.fnc',
+        'ltf'         => 'application/vnd.frogans.ltf',
+        'fsc'         => 'application/vnd.fsc.weblaunch',
+        'oas'         => 'application/vnd.fujitsu.oasys',
+        'oa2'         => 'application/vnd.fujitsu.oasys2',
+        'oa3'         => 'application/vnd.fujitsu.oasys3',
+        'fg5'         => 'application/vnd.fujitsu.oasysgp',
+        'bh2'         => 'application/vnd.fujitsu.oasysprs',
+        'ddd'         => 'application/vnd.fujixerox.ddd',
+        'xdw'         => 'application/vnd.fujixerox.docuworks',
+        'xbd'         => 'application/vnd.fujixerox.docuworks.binder',
+        'fzs'         => 'application/vnd.fuzzysheet',
+        'txd'         => 'application/vnd.genomatix.tuxedo',
+        'ggb'         => 'application/vnd.geogebra.file',
+        'ggt'         => 'application/vnd.geogebra.tool',
+        'gex'         => 'application/vnd.geometry-explorer',
+        'gre'         => 'application/vnd.geometry-explorer',
+        'gxt'         => 'application/vnd.geonext',
+        'g2w'         => 'application/vnd.geoplan',
+        'g3w'         => 'application/vnd.geospace',
+        'gmx'         => 'application/vnd.gmx',
+        'kml'         => 'application/vnd.google-earth.kml+xml',
+        'kmz'         => 'application/vnd.google-earth.kmz',
+        'gqf'         => 'application/vnd.grafeq',
+        'gqs'         => 'application/vnd.grafeq',
+        'gac'         => 'application/vnd.groove-account',
+        'ghf'         => 'application/vnd.groove-help',
+        'gim'         => 'application/vnd.groove-identity-message',
+        'grv'         => 'application/vnd.groove-injector',
+        'gtm'         => 'application/vnd.groove-tool-message',
+        'tpl'         => 'application/vnd.groove-tool-template',
+        'vcg'         => 'application/vnd.groove-vcard',
+        'hal'         => 'application/vnd.hal+xml',
+        'zmm'         => 'application/vnd.handheld-entertainment+xml',
+        'hbci'        => 'application/vnd.hbci',
+        'les'         => 'application/vnd.hhe.lesson-player',
+        'hpgl'        => 'application/vnd.hp-hpgl',
+        'hpid'        => 'application/vnd.hp-hpid',
+        'hps'         => 'application/vnd.hp-hps',
+        'jlt'         => 'application/vnd.hp-jlyt',
+        'pcl'         => 'application/vnd.hp-pcl',
+        'pclxl'       => 'application/vnd.hp-pclxl',
+        'sfd-hdstx'   => 'application/vnd.hydrostatix.sof-data',
+        'mpy'         => 'application/vnd.ibm.minipay',
+        'afp'         => 'application/vnd.ibm.modcap',
+        'listafp'     => 'application/vnd.ibm.modcap',
+        'list3820'    => 'application/vnd.ibm.modcap',
+        'irm'         => 'application/vnd.ibm.rights-management',
+        'sc'          => 'application/vnd.ibm.secure-container',
+        'icc'         => 'application/vnd.iccprofile',
+        'icm'         => 'application/vnd.iccprofile',
+        'igl'         => 'application/vnd.igloader',
+        'ivp'         => 'application/vnd.immervision-ivp',
+        'ivu'         => 'application/vnd.immervision-ivu',
+        'igm'         => 'application/vnd.insors.igm',
+        'xpw'         => 'application/vnd.intercon.formnet',
+        'xpx'         => 'application/vnd.intercon.formnet',
+        'i2g'         => 'application/vnd.intergeo',
+        'qbo'         => 'application/vnd.intu.qbo',
+        'qfx'         => 'application/vnd.intu.qfx',
+        'rcprofile'   => 'application/vnd.ipunplugged.rcprofile',
+        'irp'         => 'application/vnd.irepository.package+xml',
+        'xpr'         => 'application/vnd.is-xpr',
+        'fcs'         => 'application/vnd.isac.fcs',
+        'jam'         => 'application/vnd.jam',
+        'rms'         => 'application/vnd.jcp.javame.midlet-rms',
+        'jisp'        => 'application/vnd.jisp',
+        'joda'        => 'application/vnd.joost.joda-archive',
+        'ktz'         => 'application/vnd.kahootz',
+        'ktr'         => 'application/vnd.kahootz',
+        'karbon'      => 'application/vnd.kde.karbon',
+        'chrt'        => 'application/vnd.kde.kchart',
+        'kfo'         => 'application/vnd.kde.kformula',
+        'flw'         => 'application/vnd.kde.kivio',
+        'kon'         => 'application/vnd.kde.kontour',
+        'kpr'         => 'application/vnd.kde.kpresenter',
+        'kpt'         => 'application/vnd.kde.kpresenter',
+        'ksp'         => 'application/vnd.kde.kspread',
+        'kwd'         => 'application/vnd.kde.kword',
+        'kwt'         => 'application/vnd.kde.kword',
+        'htke'        => 'application/vnd.kenameaapp',
+        'kia'         => 'application/vnd.kidspiration',
+        'kne'         => 'application/vnd.kinar',
+        'knp'         => 'application/vnd.kinar',
+        'skp'         => 'application/vnd.koan',
+        'skd'         => 'application/vnd.koan',
+        'skt'         => 'application/vnd.koan',
+        'skm'         => 'application/vnd.koan',
+        'sse'         => 'application/vnd.kodak-descriptor',
+        'lasxml'      => 'application/vnd.las.las+xml',
+        'lbd'         => 'application/vnd.llamagraphics.life-balance.desktop',
+        'lbe'         => 'application/vnd.llamagraphics.life-balance.exchange+xml',
+        '123'         => 'application/vnd.lotus-1-2-3',
+        'apr'         => 'application/vnd.lotus-approach',
+        'pre'         => 'application/vnd.lotus-freelance',
+        'nsf'         => 'application/vnd.lotus-notes',
+        'org'         => 'application/vnd.lotus-organizer',
+        'scm'         => 'application/vnd.lotus-screencam',
+        'lwp'         => 'application/vnd.lotus-wordpro',
+        'portpkg'     => 'application/vnd.macports.portpkg',
+        'mcd'         => 'application/vnd.mcd',
+        'mc1'         => 'application/vnd.medcalcdata',
+        'cdkey'       => 'application/vnd.mediastation.cdkey',
+        'mwf'         => 'application/vnd.mfer',
+        'mfm'         => 'application/vnd.mfmp',
+        'flo'         => 'application/vnd.micrografx.flo',
+        'igx'         => 'application/vnd.micrografx.igx',
+        'mif'         => 'application/vnd.mif',
+        'daf'         => 'application/vnd.mobius.daf',
+        'dis'         => 'application/vnd.mobius.dis',
+        'mbk'         => 'application/vnd.mobius.mbk',
+        'mqy'         => 'application/vnd.mobius.mqy',
+        'msl'         => 'application/vnd.mobius.msl',
+        'plc'         => 'application/vnd.mobius.plc',
+        'txf'         => 'application/vnd.mobius.txf',
+        'mpn'         => 'application/vnd.mophun.application',
+        'mpc'         => 'application/vnd.mophun.certificate',
+        'xul'         => 'application/vnd.mozilla.xul+xml',
+        'cil'         => 'application/vnd.ms-artgalry',
+        'cab'         => 'application/vnd.ms-cab-compressed',
+        'xls'         => 'application/vnd.ms-excel',
+        'xlm'         => 'application/vnd.ms-excel',
+        'xla'         => 'application/vnd.ms-excel',
+        'xlc'         => 'application/vnd.ms-excel',
+        'xlt'         => 'application/vnd.ms-excel',
+        'xlw'         => 'application/vnd.ms-excel',
+        'xlam'        => 'application/vnd.ms-excel.addin.macroenabled.12',
+        'xlsb'        => 'application/vnd.ms-excel.sheet.binary.macroenabled.12',
+        'xlsm'        => 'application/vnd.ms-excel.sheet.macroenabled.12',
+        'xltm'        => 'application/vnd.ms-excel.template.macroenabled.12',
+        'eot'         => 'application/vnd.ms-fontobject',
+        'chm'         => 'application/vnd.ms-htmlhelp',
+        'ims'         => 'application/vnd.ms-ims',
+        'lrm'         => 'application/vnd.ms-lrm',
+        'thmx'        => 'application/vnd.ms-officetheme',
+        'cat'         => 'application/vnd.ms-pki.seccat',
+        'stl'         => 'application/vnd.ms-pki.stl',
+        'ppt'         => 'application/vnd.ms-powerpoint',
+        'pps'         => 'application/vnd.ms-powerpoint',
+        'pot'         => 'application/vnd.ms-powerpoint',
+        'ppam'        => 'application/vnd.ms-powerpoint.addin.macroenabled.12',
+        'pptm'        => 'application/vnd.ms-powerpoint.presentation.macroenabled.12',
+        'sldm'        => 'application/vnd.ms-powerpoint.slide.macroenabled.12',
+        'ppsm'        => 'application/vnd.ms-powerpoint.slideshow.macroenabled.12',
+        'potm'        => 'application/vnd.ms-powerpoint.template.macroenabled.12',
+        'mpp'         => 'application/vnd.ms-project',
+        'mpt'         => 'application/vnd.ms-project',
+        'docm'        => 'application/vnd.ms-word.document.macroenabled.12',
+        'dotm'        => 'application/vnd.ms-word.template.macroenabled.12',
+        'wps'         => 'application/vnd.ms-works',
+        'wks'         => 'application/vnd.ms-works',
+        'wcm'         => 'application/vnd.ms-works',
+        'wdb'         => 'application/vnd.ms-works',
+        'wpl'         => 'application/vnd.ms-wpl',
+        'xps'         => 'application/vnd.ms-xpsdocument',
+        'mseq'        => 'application/vnd.mseq',
+        'mus'         => 'application/vnd.musician',
+        'msty'        => 'application/vnd.muvee.style',
+        'taglet'      => 'application/vnd.mynfc',
+        'nlu'         => 'application/vnd.neurolanguage.nlu',
+        'ntf'         => 'application/vnd.nitf',
+        'nitf'        => 'application/vnd.nitf',
+        'nnd'         => 'application/vnd.noblenet-directory',
+        'nns'         => 'application/vnd.noblenet-sealer',
+        'nnw'         => 'application/vnd.noblenet-web',
+        'ngdat'       => 'application/vnd.nokia.n-gage.data',
+        'n-gage'      => 'application/vnd.nokia.n-gage.symbian.install',
+        'rpst'        => 'application/vnd.nokia.radio-preset',
+        'rpss'        => 'application/vnd.nokia.radio-presets',
+        'edm'         => 'application/vnd.novadigm.edm',
+        'edx'         => 'application/vnd.novadigm.edx',
+        'ext'         => 'application/vnd.novadigm.ext',
+        'odc'         => 'application/vnd.oasis.opendocument.chart',
+        'otc'         => 'application/vnd.oasis.opendocument.chart-template',
+        'odb'         => 'application/vnd.oasis.opendocument.database',
+        'odf'         => 'application/vnd.oasis.opendocument.formula',
+        'odft'        => 'application/vnd.oasis.opendocument.formula-template',
+        'odg'         => 'application/vnd.oasis.opendocument.graphics',
+        'otg'         => 'application/vnd.oasis.opendocument.graphics-template',
+        'odi'         => 'application/vnd.oasis.opendocument.image',
+        'oti'         => 'application/vnd.oasis.opendocument.image-template',
+        'odp'         => 'application/vnd.oasis.opendocument.presentation',
+        'otp'         => 'application/vnd.oasis.opendocument.presentation-template',
+        'ods'         => 'application/vnd.oasis.opendocument.spreadsheet',
+        'ots'         => 'application/vnd.oasis.opendocument.spreadsheet-template',
+        'odt'         => 'application/vnd.oasis.opendocument.text',
+        'odm'         => 'application/vnd.oasis.opendocument.text-master',
+        'ott'         => 'application/vnd.oasis.opendocument.text-template',
+        'oth'         => 'application/vnd.oasis.opendocument.text-web',
+        'xo'          => 'application/vnd.olpc-sugar',
+        'dd2'         => 'application/vnd.oma.dd2+xml',
+        'oxt'         => 'application/vnd.openofficeorg.extension',
+        'pptx'        => 'application/vnd.openxmlformats-officedocument.presentationml.presentation',
+        'sldx'        => 'application/vnd.openxmlformats-officedocument.presentationml.slide',
+        'ppsx'        => 'application/vnd.openxmlformats-officedocument.presentationml.slideshow',
+        'potx'        => 'application/vnd.openxmlformats-officedocument.presentationml.template',
+        'xlsx'        => 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet',
+        'xltx'        => 'application/vnd.openxmlformats-officedocument.spreadsheetml.template',
+        'docx'        => 'application/vnd.openxmlformats-officedocument.wordprocessingml.document',
+        'dotx'        => 'application/vnd.openxmlformats-officedocument.wordprocessingml.template',
+        'mgp'         => 'application/vnd.osgeo.mapguide.package',
+        'dp'          => 'application/vnd.osgi.dp',
+        'esa'         => 'application/vnd.osgi.subsystem',
+        'pdb'         => 'application/vnd.palm',
+        'pqa'         => 'application/vnd.palm',
+        'oprc'        => 'application/vnd.palm',
+        'paw'         => 'application/vnd.pawaafile',
+        'str'         => 'application/vnd.pg.format',
+        'ei6'         => 'application/vnd.pg.osasli',
+        'efif'        => 'application/vnd.picsel',
+        'wg'          => 'application/vnd.pmi.widget',
+        'plf'         => 'application/vnd.pocketlearn',
+        'pbd'         => 'application/vnd.powerbuilder6',
+        'box'         => 'application/vnd.previewsystems.box',
+        'mgz'         => 'application/vnd.proteus.magazine',
+        'qps'         => 'application/vnd.publishare-delta-tree',
+        'ptid'        => 'application/vnd.pvi.ptid1',
+        'qxd'         => 'application/vnd.quark.quarkxpress',
+        'qxt'         => 'application/vnd.quark.quarkxpress',
+        'qwd'         => 'application/vnd.quark.quarkxpress',
+        'qwt'         => 'application/vnd.quark.quarkxpress',
+        'qxl'         => 'application/vnd.quark.quarkxpress',
+        'qxb'         => 'application/vnd.quark.quarkxpress',
+        'bed'         => 'application/vnd.realvnc.bed',
+        'mxl'         => 'application/vnd.recordare.musicxml',
+        'musicxml'    => 'application/vnd.recordare.musicxml+xml',
+        'cryptonote'  => 'application/vnd.rig.cryptonote',
+        'cod'         => 'application/vnd.rim.cod',
+        'rm'          => 'application/vnd.rn-realmedia',
+        'rmvb'        => 'application/vnd.rn-realmedia-vbr',
+        'link66'      => 'application/vnd.route66.link66+xml',
+        'st'          => 'application/vnd.sailingtracker.track',
+        'see'         => 'application/vnd.seemail',
+        'sema'        => 'application/vnd.sema',
+        'semd'        => 'application/vnd.semd',
+        'semf'        => 'application/vnd.semf',
+        'ifm'         => 'application/vnd.shana.informed.formdata',
+        'itp'         => 'application/vnd.shana.informed.formtemplate',
+        'iif'         => 'application/vnd.shana.informed.interchange',
+        'ipk'         => 'application/vnd.shana.informed.package',
+        'twd'         => 'application/vnd.simtech-mindmapper',
+        'twds'        => 'application/vnd.simtech-mindmapper',
+        'mmf'         => 'application/vnd.smaf',
+        'teacher'     => 'application/vnd.smart.teacher',
+        'sdkm'        => 'application/vnd.solent.sdkm+xml',
+        'sdkd'        => 'application/vnd.solent.sdkm+xml',
+        'dxp'         => 'application/vnd.spotfire.dxp',
+        'sfs'         => 'application/vnd.spotfire.sfs',
+        'sdc'         => 'application/vnd.stardivision.calc',
+        'sda'         => 'application/vnd.stardivision.draw',
+        'sdd'         => 'application/vnd.stardivision.impress',
+        'smf'         => 'application/vnd.stardivision.math',
+        'sdw'         => 'application/vnd.stardivision.writer',
+        'vor'         => 'application/vnd.stardivision.writer',
+        'sgl'         => 'application/vnd.stardivision.writer-global',
+        'smzip'       => 'application/vnd.stepmania.package',
+        'sm'          => 'application/vnd.stepmania.stepchart',
+        'sxc'         => 'application/vnd.sun.xml.calc',
+        'stc'         => 'application/vnd.sun.xml.calc.template',
+        'sxd'         => 'application/vnd.sun.xml.draw',
+        'std'         => 'application/vnd.sun.xml.draw.template',
+        'sxi'         => 'application/vnd.sun.xml.impress',
+        'sti'         => 'application/vnd.sun.xml.impress.template',
+        'sxm'         => 'application/vnd.sun.xml.math',
+        'sxw'         => 'application/vnd.sun.xml.writer',
+        'sxg'         => 'application/vnd.sun.xml.writer.global',
+        'stw'         => 'application/vnd.sun.xml.writer.template',
+        'sus'         => 'application/vnd.sus-calendar',
+        'susp'        => 'application/vnd.sus-calendar',
+        'svd'         => 'application/vnd.svd',
+        'sis'         => 'application/vnd.symbian.install',
+        'sisx'        => 'application/vnd.symbian.install',
+        'xsm'         => 'application/vnd.syncml+xml',
+        'bdm'         => 'application/vnd.syncml.dm+wbxml',
+        'xdm'         => 'application/vnd.syncml.dm+xml',
+        'tao'         => 'application/vnd.tao.intent-module-archive',
+        'pcap'        => 'application/vnd.tcpdump.pcap',
+        'cap'         => 'application/vnd.tcpdump.pcap',
+        'dmp'         => 'application/vnd.tcpdump.pcap',
+        'tmo'         => 'application/vnd.tmobile-livetv',
+        'tpt'         => 'application/vnd.trid.tpt',
+        'mxs'         => 'application/vnd.triscape.mxs',
+        'tra'         => 'application/vnd.trueapp',
+        'ufd'         => 'application/vnd.ufdl',
+        'ufdl'        => 'application/vnd.ufdl',
+        'utz'         => 'application/vnd.uiq.theme',
+        'umj'         => 'application/vnd.umajin',
+        'unityweb'    => 'application/vnd.unity',
+        'uoml'        => 'application/vnd.uoml+xml',
+        'vcx'         => 'application/vnd.vcx',
+        'vsd'         => 'application/vnd.visio',
+        'vst'         => 'application/vnd.visio',
+        'vss'         => 'application/vnd.visio',
+        'vsw'         => 'application/vnd.visio',
+        'vis'         => 'application/vnd.visionary',
+        'vsf'         => 'application/vnd.vsf',
+        'wbxml'       => 'application/vnd.wap.wbxml',
+        'wmlc'        => 'application/vnd.wap.wmlc',
+        'wmlsc'       => 'application/vnd.wap.wmlscriptc',
+        'wtb'         => 'application/vnd.webturbo',
+        'nbp'         => 'application/vnd.wolfram.player',
+        'wpd'         => 'application/vnd.wordperfect',
+        'wqd'         => 'application/vnd.wqd',
+        'stf'         => 'application/vnd.wt.stf',
+        'xar'         => 'application/vnd.xara',
+        'xfdl'        => 'application/vnd.xfdl',
+        'hvd'         => 'application/vnd.yamaha.hv-dic',
+        'hvs'         => 'application/vnd.yamaha.hv-script',
+        'hvp'         => 'application/vnd.yamaha.hv-voice',
+        'osf'         => 'application/vnd.yamaha.openscoreformat',
+        'osfpvg'      => 'application/vnd.yamaha.openscoreformat.osfpvg+xml',
+        'saf'         => 'application/vnd.yamaha.smaf-audio',
+        'spf'         => 'application/vnd.yamaha.smaf-phrase',
+        'cmp'         => 'application/vnd.yellowriver-custom-menu',
+        'zir'         => 'application/vnd.zul',
+        'zirz'        => 'application/vnd.zul',
+        'zaz'         => 'application/vnd.zzazz.deck+xml',
+        'vxml'        => 'application/voicexml+xml',
+        'wgt'         => 'application/widget',
+        'hlp'         => 'application/winhlp',
+        'wsdl'        => 'application/wsdl+xml',
+        'wspolicy'    => 'application/wspolicy+xml',
+        '7z'          => 'application/x-7z-compressed',
+        'abw'         => 'application/x-abiword',
+        'ace'         => 'application/x-ace-compressed',
+        'dmg'         => 'application/x-apple-diskimage',
+        'aab'         => 'application/x-authorware-bin',
+        'x32'         => 'application/x-authorware-bin',
+        'u32'         => 'application/x-authorware-bin',
+        'vox'         => 'application/x-authorware-bin',
+        'aam'         => 'application/x-authorware-map',
+        'aas'         => 'application/x-authorware-seg',
+        'bcpio'       => 'application/x-bcpio',
+        'torrent'     => 'application/x-bittorrent',
+        'blb'         => 'application/x-blorb',
+        'blorb'       => 'application/x-blorb',
+        'bz'          => 'application/x-bzip',
+        'bz2'         => 'application/x-bzip2',
+        'boz'         => 'application/x-bzip2',
+        'cbr'         => 'application/x-cbr',
+        'cba'         => 'application/x-cbr',
+        'cbt'         => 'application/x-cbr',
+        'cbz'         => 'application/x-cbr',
+        'cb7'         => 'application/x-cbr',
+        'vcd'         => 'application/x-cdlink',
+        'cfs'         => 'application/x-cfs-compressed',
+        'chat'        => 'application/x-chat',
+        'pgn'         => 'application/x-chess-pgn',
+        'nsc'         => 'application/x-conference',
+        'cpio'        => 'application/x-cpio',
+        'csh'         => 'application/x-csh',
+        'deb'         => 'application/x-debian-package',
+        'udeb'        => 'application/x-debian-package',
+        'dgc'         => 'application/x-dgc-compressed',
+        'dir'         => 'application/x-director',
+        'dcr'         => 'application/x-director',
+        'dxr'         => 'application/x-director',
+        'cst'         => 'application/x-director',
+        'cct'         => 'application/x-director',
+        'cxt'         => 'application/x-director',
+        'w3d'         => 'application/x-director',
+        'fgd'         => 'application/x-director',
+        'swa'         => 'application/x-director',
+        'wad'         => 'application/x-doom',
+        'ncx'         => 'application/x-dtbncx+xml',
+        'dtb'         => 'application/x-dtbook+xml',
+        'res'         => 'application/x-dtbresource+xml',
+        'dvi'         => 'application/x-dvi',
+        'evy'         => 'application/x-envoy',
+        'eva'         => 'application/x-eva',
+        'bdf'         => 'application/x-font-bdf',
+        'gsf'         => 'application/x-font-ghostscript',
+        'psf'         => 'application/x-font-linux-psf',
+        'otf'         => 'application/x-font-otf',
+        'pcf'         => 'application/x-font-pcf',
+        'snf'         => 'application/x-font-snf',
+        'ttf'         => 'application/x-font-ttf',
+        'ttc'         => 'application/x-font-ttf',
+        'pfa'         => 'application/x-font-type1',
+        'pfb'         => 'application/x-font-type1',
+        'pfm'         => 'application/x-font-type1',
+        'afm'         => 'application/x-font-type1',
+        'arc'         => 'application/x-freearc',
+        'spl'         => 'application/x-futuresplash',
+        'gca'         => 'application/x-gca-compressed',
+        'ulx'         => 'application/x-glulx',
+        'gnumeric'    => 'application/x-gnumeric',
+        'gramps'      => 'application/x-gramps-xml',
+        'gtar'        => 'application/x-gtar',
+        'hdf'         => 'application/x-hdf',
+        'install'     => 'application/x-install-instructions',
+        'iso'         => 'application/x-iso9660-image',
+        'jnlp'        => 'application/x-java-jnlp-file',
+        'latex'       => 'application/x-latex',
+        'lzh'         => 'application/x-lzh-compressed',
+        'lha'         => 'application/x-lzh-compressed',
+        'mie'         => 'application/x-mie',
+        'prc'         => 'application/x-mobipocket-ebook',
+        'mobi'        => 'application/x-mobipocket-ebook',
+        'application' => 'application/x-ms-application',
+        'lnk'         => 'application/x-ms-shortcut',
+        'wmd'         => 'application/x-ms-wmd',
+        'wmz'         => 'application/x-ms-wmz',
+        'xbap'        => 'application/x-ms-xbap',
+        'mdb'         => 'application/x-msaccess',
+        'obd'         => 'application/x-msbinder',
+        'crd'         => 'application/x-mscardfile',
+        'clp'         => 'application/x-msclip',
+        'exe'         => 'application/x-msdownload',
+        'dll'         => 'application/x-msdownload',
+        'com'         => 'application/x-msdownload',
+        'bat'         => 'application/x-msdownload',
+        'msi'         => 'application/x-msdownload',
+        'mvb'         => 'application/x-msmediaview',
+        'm13'         => 'application/x-msmediaview',
+        'm14'         => 'application/x-msmediaview',
+        'wmf'         => 'application/x-msmetafile',
+        'emf'         => 'application/x-msmetafile',
+        'emz'         => 'application/x-msmetafile',
+        'mny'         => 'application/x-msmoney',
+        'pub'         => 'application/x-mspublisher',
+        'scd'         => 'application/x-msschedule',
+        'trm'         => 'application/x-msterminal',
+        'wri'         => 'application/x-mswrite',
+        'nc'          => 'application/x-netcdf',
+        'cdf'         => 'application/x-netcdf',
+        'nzb'         => 'application/x-nzb',
+        'p12'         => 'application/x-pkcs12',
+        'pfx'         => 'application/x-pkcs12',
+        'p7b'         => 'application/x-pkcs7-certificates',
+        'spc'         => 'application/x-pkcs7-certificates',
+        'p7r'         => 'application/x-pkcs7-certreqresp',
+        'rar'         => 'application/x-rar-compressed',
+        'ris'         => 'application/x-research-info-systems',
+        'sh'          => 'application/x-sh',
+        'shar'        => 'application/x-shar',
+        'swf'         => 'application/x-shockwave-flash',
+        'xap'         => 'application/x-silverlight-app',
+        'sql'         => 'application/x-sql',
+        'sit'         => 'application/x-stuffit',
+        'sitx'        => 'application/x-stuffitx',
+        'srt'         => 'application/x-subrip',
+        'sv4cpio'     => 'application/x-sv4cpio',
+        'sv4crc'      => 'application/x-sv4crc',
+        't3'          => 'application/x-t3vm-image',
+        'gam'         => 'application/x-tads',
+        'tar'         => 'application/x-tar',
+        'tcl'         => 'application/x-tcl',
+        'tex'         => 'application/x-tex',
+        'tfm'         => 'application/x-tex-tfm',
+        'texinfo'     => 'application/x-texinfo',
+        'texi'        => 'application/x-texinfo',
+        'obj'         => 'application/x-tgif',
+        'ustar'       => 'application/x-ustar',
+        'src'         => 'application/x-wais-source',
+        'der'         => 'application/x-x509-ca-cert',
+        'crt'         => 'application/x-x509-ca-cert',
+        'fig'         => 'application/x-xfig',
+        'xlf'         => 'application/x-xliff+xml',
+        'xpi'         => 'application/x-xpinstall',
+        'xz'          => 'application/x-xz',
+        'z1'          => 'application/x-zmachine',
+        'z2'          => 'application/x-zmachine',
+        'z3'          => 'application/x-zmachine',
+        'z4'          => 'application/x-zmachine',
+        'z5'          => 'application/x-zmachine',
+        'z6'          => 'application/x-zmachine',
+        'z7'          => 'application/x-zmachine',
+        'z8'          => 'application/x-zmachine',
+        'xaml'        => 'application/xaml+xml',
+        'xdf'         => 'application/xcap-diff+xml',
+        'xenc'        => 'application/xenc+xml',
+        'xhtml'       => 'application/xhtml+xml',
+        'xht'         => 'application/xhtml+xml',
+        'xml'         => 'application/xml',
+        'xsl'         => 'application/xml',
+        'dtd'         => 'application/xml-dtd',
+        'xop'         => 'application/xop+xml',
+        'xpl'         => 'application/xproc+xml',
+        'xslt'        => 'application/xslt+xml',
+        'xspf'        => 'application/xspf+xml',
+        'mxml'        => 'application/xv+xml',
+        'xhvml'       => 'application/xv+xml',
+        'xvml'        => 'application/xv+xml',
+        'xvm'         => 'application/xv+xml',
+        'yang'        => 'application/yang',
+        'yin'         => 'application/yin+xml',
+        'zip'         => 'application/zip',
+        'adp'         => 'audio/adpcm',
+        'au'          => 'audio/basic',
+        'snd'         => 'audio/basic',
+        'mid'         => 'audio/midi',
+        'midi'        => 'audio/midi',
+        'kar'         => 'audio/midi',
+        'rmi'         => 'audio/midi',
+        'm4a'         => 'audio/mp4',
+        'mp4a'        => 'audio/mp4',
+        'mpga'        => 'audio/mpeg',
+        'mp2'         => 'audio/mpeg',
+        'mp2a'        => 'audio/mpeg',
+        'mp3'         => 'audio/mpeg',
+        'm2a'         => 'audio/mpeg',
+        'm3a'         => 'audio/mpeg',
+        'oga'         => 'audio/ogg',
+        'ogg'         => 'audio/ogg',
+        'spx'         => 'audio/ogg',
+        's3m'         => 'audio/s3m',
+        'sil'         => 'audio/silk',
+        'eol'         => 'audio/vnd.digital-winds',
+        'dra'         => 'audio/vnd.dra',
+        'dts'         => 'audio/vnd.dts',
+        'dtshd'       => 'audio/vnd.dts.hd',
+        'lvp'         => 'audio/vnd.lucent.voice',
+        'pya'         => 'audio/vnd.ms-playready.media.pya',
+        'ecelp4800'   => 'audio/vnd.nuera.ecelp4800',
+        'ecelp7470'   => 'audio/vnd.nuera.ecelp7470',
+        'ecelp9600'   => 'audio/vnd.nuera.ecelp9600',
+        'rip'         => 'audio/vnd.rip',
+        'weba'        => 'audio/webm',
+        'aac'         => 'audio/x-aac',
+        'aif'         => 'audio/x-aiff',
+        'aiff'        => 'audio/x-aiff',
+        'aifc'        => 'audio/x-aiff',
+        'caf'         => 'audio/x-caf',
+        'flac'        => 'audio/x-flac',
+        'mka'         => 'audio/x-matroska',
+        'm3u'         => 'audio/x-mpegurl',
+        'wax'         => 'audio/x-ms-wax',
+        'wma'         => 'audio/x-ms-wma',
+        'ram'         => 'audio/x-pn-realaudio',
+        'ra'          => 'audio/x-pn-realaudio',
+        'rmp'         => 'audio/x-pn-realaudio-plugin',
+        'wav'         => 'audio/x-wav',
+        'xm'          => 'audio/xm',
+        'cdx'         => 'chemical/x-cdx',
+        'cif'         => 'chemical/x-cif',
+        'cmdf'        => 'chemical/x-cmdf',
+        'cml'         => 'chemical/x-cml',
+        'csml'        => 'chemical/x-csml',
+        'xyz'         => 'chemical/x-xyz',
+        'bmp'         => 'image/bmp',
+        'cgm'         => 'image/cgm',
+        'g3'          => 'image/g3fax',
+        'gif'         => 'image/gif',
+        'ief'         => 'image/ief',
+        'jpeg'        => 'image/jpeg',
+        'jpg'         => 'image/jpeg',
+        'jpe'         => 'image/jpeg',
+        'ktx'         => 'image/ktx',
+        'png'         => 'image/png',
+        'btif'        => 'image/prs.btif',
+        'sgi'         => 'image/sgi',
+        'svg'         => 'image/svg+xml',
+        'svgz'        => 'image/svg+xml',
+        'tiff'        => 'image/tiff',
+        'tif'         => 'image/tiff',
+        'psd'         => 'image/vnd.adobe.photoshop',
+        'uvi'         => 'image/vnd.dece.graphic',
+        'uvvi'        => 'image/vnd.dece.graphic',
+        'uvg'         => 'image/vnd.dece.graphic',
+        'uvvg'        => 'image/vnd.dece.graphic',
+        'djvu'        => 'image/vnd.djvu',
+        'djv'         => 'image/vnd.djvu',
+        'sub'         => 'image/vnd.dvb.subtitle',
+        'dwg'         => 'image/vnd.dwg',
+        'dxf'         => 'image/vnd.dxf',
+        'fbs'         => 'image/vnd.fastbidsheet',
+        'fpx'         => 'image/vnd.fpx',
+        'fst'         => 'image/vnd.fst',
+        'mmr'         => 'image/vnd.fujixerox.edmics-mmr',
+        'rlc'         => 'image/vnd.fujixerox.edmics-rlc',
+        'mdi'         => 'image/vnd.ms-modi',
+        'wdp'         => 'image/vnd.ms-photo',
+        'npx'         => 'image/vnd.net-fpx',
+        'wbmp'        => 'image/vnd.wap.wbmp',
+        'xif'         => 'image/vnd.xiff',
+        'webp'        => 'image/webp',
+        '3ds'         => 'image/x-3ds',
+        'ras'         => 'image/x-cmu-raster',
+        'cmx'         => 'image/x-cmx',
+        'fh'          => 'image/x-freehand',
+        'fhc'         => 'image/x-freehand',
+        'fh4'         => 'image/x-freehand',
+        'fh5'         => 'image/x-freehand',
+        'fh7'         => 'image/x-freehand',
+        'ico'         => 'image/x-icon',
+        'sid'         => 'image/x-mrsid-image',
+        'pcx'         => 'image/x-pcx',
+        'pic'         => 'image/x-pict',
+        'pct'         => 'image/x-pict',
+        'pnm'         => 'image/x-portable-anymap',
+        'pbm'         => 'image/x-portable-bitmap',
+        'pgm'         => 'image/x-portable-graymap',
+        'ppm'         => 'image/x-portable-pixmap',
+        'rgb'         => 'image/x-rgb',
+        'tga'         => 'image/x-tga',
+        'xbm'         => 'image/x-xbitmap',
+        'xpm'         => 'image/x-xpixmap',
+        'xwd'         => 'image/x-xwindowdump',
+        'eml'         => 'message/rfc822',
+        'mime'        => 'message/rfc822',
+        'igs'         => 'model/iges',
+        'iges'        => 'model/iges',
+        'msh'         => 'model/mesh',
+        'mesh'        => 'model/mesh',
+        'silo'        => 'model/mesh',
+        'dae'         => 'model/vnd.collada+xml',
+        'dwf'         => 'model/vnd.dwf',
+        'gdl'         => 'model/vnd.gdl',
+        'gtw'         => 'model/vnd.gtw',
+        'mts'         => 'model/vnd.mts',
+        'vtu'         => 'model/vnd.vtu',
+        'wrl'         => 'model/vrml',
+        'vrml'        => 'model/vrml',
+        'x3db'        => 'model/x3d+binary',
+        'x3dbz'       => 'model/x3d+binary',
+        'x3dv'        => 'model/x3d+vrml',
+        'x3dvz'       => 'model/x3d+vrml',
+        'x3d'         => 'model/x3d+xml',
+        'x3dz'        => 'model/x3d+xml',
+        'appcache'    => 'text/cache-manifest',
+        'ics'         => 'text/calendar',
+        'ifb'         => 'text/calendar',
+        'css'         => 'text/css',
+        'csv'         => 'text/csv',
+        'html'        => 'text/html',
+        'htm'         => 'text/html',
+        'n3'          => 'text/n3',
+        'txt'         => 'text/plain',
+        'text'        => 'text/plain',
+        'conf'        => 'text/plain',
+        'def'         => 'text/plain',
+        'list'        => 'text/plain',
+        'log'         => 'text/plain',
+        'in'          => 'text/plain',
+        'dsc'         => 'text/prs.lines.tag',
+        'rtx'         => 'text/richtext',
+        'sgml'        => 'text/sgml',
+        'sgm'         => 'text/sgml',
+        'tsv'         => 'text/tab-separated-values',
+        't'           => 'text/troff',
+        'tr'          => 'text/troff',
+        'roff'        => 'text/troff',
+        'man'         => 'text/troff',
+        'me'          => 'text/troff',
+        'ms'          => 'text/troff',
+        'ttl'         => 'text/turtle',
+        'uri'         => 'text/uri-list',
+        'uris'        => 'text/uri-list',
+        'urls'        => 'text/uri-list',
+        'vcard'       => 'text/vcard',
+        'curl'        => 'text/vnd.curl',
+        'dcurl'       => 'text/vnd.curl.dcurl',
+        'mcurl'       => 'text/vnd.curl.mcurl',
+        'scurl'       => 'text/vnd.curl.scurl',
+        'fly'         => 'text/vnd.fly',
+        'flx'         => 'text/vnd.fmi.flexstor',
+        'gv'          => 'text/vnd.graphviz',
+        '3dml'        => 'text/vnd.in3d.3dml',
+        'spot'        => 'text/vnd.in3d.spot',
+        'jad'         => 'text/vnd.sun.j2me.app-descriptor',
+        'wml'         => 'text/vnd.wap.wml',
+        'wmls'        => 'text/vnd.wap.wmlscript',
+        's'           => 'text/x-asm',
+        'asm'         => 'text/x-asm',
+        'c'           => 'text/x-c',
+        'ccxx'        => 'text/x-c',
+        'cpp'         => 'text/x-c',
+        'h'           => 'text/x-c',
+        'hh'          => 'text/x-c',
+        'dic'         => 'text/x-c',
+        'f'           => 'text/x-fortran',
+        'for'         => 'text/x-fortran',
+        'f77'         => 'text/x-fortran',
+        'f90'         => 'text/x-fortran',
+        'java'        => 'text/x-java-source',
+        'nfo'         => 'text/x-nfo',
+        'opml'        => 'text/x-opml',
+        'p'           => 'text/x-pascal',
+        'pas'         => 'text/x-pascal',
+        'etx'         => 'text/x-setext',
+        'sfv'         => 'text/x-sfv',
+        'uu'          => 'text/x-uuencode',
+        'vcs'         => 'text/x-vcalendar',
+        'vcf'         => 'text/x-vcard',
+        '3gp'         => 'video/3gpp',
+        '3g2'         => 'video/3gpp2',
+        'h261'        => 'video/h261',
+        'h263'        => 'video/h263',
+        'h264'        => 'video/h264',
+        'jpgv'        => 'video/jpeg',
+        'jpm'         => 'video/jpm',
+        'jpgm'        => 'video/jpm',
+        'mj2'         => 'video/mj2',
+        'mjp2'        => 'video/mj2',
+        'mp4'         => 'video/mp4',
+        'mp4v'        => 'video/mp4',
+        'mpg4'        => 'video/mp4',
+        'mpeg'        => 'video/mpeg',
+        'mpg'         => 'video/mpeg',
+        'mpe'         => 'video/mpeg',
+        'm1v'         => 'video/mpeg',
+        'm2v'         => 'video/mpeg',
+        'ogv'         => 'video/ogg',
+        'uvh'         => 'video/vnd.dece.hd',
+        'uvvh'        => 'video/vnd.dece.hd',
+        'uvm'         => 'video/vnd.dece.mobile',
+        'uvvm'        => 'video/vnd.dece.mobile',
+        'uvp'         => 'video/vnd.dece.pd',
+        'uvvp'        => 'video/vnd.dece.pd',
+        'uvs'         => 'video/vnd.dece.sd',
+        'uvvs'        => 'video/vnd.dece.sd',
+        'dvb'         => 'video/vnd.dvb.file',
+        'mxu'         => 'video/vnd.mpegurl',
+        'm4u'         => 'video/vnd.mpegurl',
+        'uvu'         => 'video/vnd.uvvu.mp4',
+        'uvvu'        => 'video/vnd.uvvu.mp4',
+        'viv'         => 'video/vnd.vivo',
+        'webm'        => 'video/webm',
+        'f4v'         => 'video/x-f4v',
+        'fli'         => 'video/x-fli',
+        'flv'         => 'video/x-flv',
+        'm4v'         => 'video/x-m4v',
+        'mkv'         => 'video/x-matroska',
+        'mk3d'        => 'video/x-matroska',
+        'mks'         => 'video/x-matroska',
+        'mng'         => 'video/x-mng',
+        'asf'         => 'video/x-ms-asf',
+        'asx'         => 'video/x-ms-asf',
+        'vob'         => 'video/x-ms-vob',
+        'wm'          => 'video/x-ms-wm',
+        'wmv'         => 'video/x-ms-wmv',
+        'wmx'         => 'video/x-ms-wmx',
+        'wvx'         => 'video/x-ms-wvx',
+        'avi'         => 'video/x-msvideo',
+        'movie'       => 'video/x-sgi-movie',
+        'smv'         => 'video/x-smv',
+        'ice'         => 'x-conference/x-cooltalk',
+    ];
+}
\ No newline at end of file
diff --git a/civicrm/vendor/katzien/php-mime-type/src/MimeType.php b/civicrm/vendor/katzien/php-mime-type/src/MimeType.php
new file mode 100644
index 0000000000000000000000000000000000000000..67be540f637818a466a3d93df25259ae93e78bea
--- /dev/null
+++ b/civicrm/vendor/katzien/php-mime-type/src/MimeType.php
@@ -0,0 +1,51 @@
+<?php
+
+namespace MimeType;
+
+class MimeType
+{
+    const DEFAULT_MIME_TYPE = 'application/octet-stream';
+
+    /**
+     * @param $filename
+     * @return string
+     * @throws \Exception
+     */
+    public static function getType($filename)
+    {
+        self::validateFilename($filename);
+
+        $pathInfo = pathinfo($filename);
+
+        $extension = isset($pathInfo['extension']) ? strtolower($pathInfo['extension']) : '';
+
+        return self::findType($extension);
+    }
+
+    /**
+     * @param $filename
+     * @throws \Exception
+     */
+    private static function validateFilename($filename)
+    {
+        if (!is_string($filename)) {
+            throw new \Exception('Filename not a string');
+        }
+
+        if ($filename == '') {
+            throw new \Exception('No filename given');
+        }
+    }
+
+    /**
+     * @param $extension
+     * @return string
+     */
+    private static function findType($extension)
+    {
+        return isset(Mapping::$types[$extension]) ? Mapping::$types[$extension] : self::DEFAULT_MIME_TYPE;
+    }
+
+
+}
+
diff --git a/civicrm/vendor/tecnickcom/tcpdf/CHANGELOG.TXT b/civicrm/vendor/tecnickcom/tcpdf/CHANGELOG.TXT
index 64c3d47adcc9a9c9de8c6006557a9f3b8a11226a..3bdae3e2450c604e1ad4bc8bd82af16ab0068f6a 100644
--- a/civicrm/vendor/tecnickcom/tcpdf/CHANGELOG.TXT
+++ b/civicrm/vendor/tecnickcom/tcpdf/CHANGELOG.TXT
@@ -1,3 +1,18 @@
+6.2.25
+	- Fix support for image URLs.
+
+6.2.24
+	- Support remote urls when checking if file exists.
+
+6.2.23
+	- Simplify file_exists function.
+
+6.2.22
+	- Fix for security vulnerability: Using the phar:// wrapper it was possible to trigger the unserialization of user provided data.
+
+6.2.19
+	- Merge various fixes for PHP 7.3 compatibility and security.
+
 6.2.13 (2016-06-10)
 	- IMPORTANT: A new version of this library is under development at https://github.com/tecnickcom/tc-lib-pdf and as a consequence this version will not receive any additional development or support. This version should be considered obsolete, new projects should use the new version as soon it will become stable.
 
diff --git a/civicrm/vendor/tecnickcom/tcpdf/README.md b/civicrm/vendor/tecnickcom/tcpdf/README.md
index 86db02ebe5728dfc046473c9190c58200a24c988..baa518137cb47b37aab9c44cdcba1d2842eee3ec 100644
--- a/civicrm/vendor/tecnickcom/tcpdf/README.md
+++ b/civicrm/vendor/tecnickcom/tcpdf/README.md
@@ -6,7 +6,7 @@
 
 * **category**    Library
 * **author**      Nicola Asuni <info@tecnick.com>
-* **copyright**   2002-2016 Nicola Asuni - Tecnick.com LTD
+* **copyright**   2002-2018 Nicola Asuni - Tecnick.com LTD
 * **license**     http://www.gnu.org/copyleft/lesser.html GNU-LGPL v3 (see LICENSE.TXT)
 * **link**        http://www.tcpdf.org
 * **source**      https://github.com/tecnickcom/TCPDF
diff --git a/civicrm/vendor/tecnickcom/tcpdf/composer.json b/civicrm/vendor/tecnickcom/tcpdf/composer.json
index e734f13963b300d111683fe60785e22c7eb964ee..1f19dfd86412e341a3ed189c6c44462b6bfab3b8 100644
--- a/civicrm/vendor/tecnickcom/tcpdf/composer.json
+++ b/civicrm/vendor/tecnickcom/tcpdf/composer.json
@@ -1,39 +1,47 @@
 {
-	"name": "tecnickcom/tcpdf",
-	"version": "6.2.13",
-	"homepage": "http://www.tcpdf.org/",
-	"type": "library",
-	"description": "TCPDF is a PHP class for generating PDF documents and barcodes.",
-	"keywords": ["PDF","tcpdf","PDFD32000-2008","qrcode","datamatrix","pdf417","barcodes"],
-	"license": "LGPLv3",
-	"authors": [
-	{
-		"name": "Nicola Asuni",
-		"email": "info@tecnick.com",
-		"homepage": "http://nicolaasuni.tecnick.com"
-	}
-	],
-	"require": {
-		"php": ">=5.3.0"
-	},
-	"autoload": {
-		"classmap": [
-		"config",
-		"include",
-		"tcpdf.php",
-		"tcpdf_parser.php",
-		"tcpdf_import.php",
-		"tcpdf_barcodes_1d.php",
-		"tcpdf_barcodes_2d.php",
-		"include/tcpdf_colors.php",
-		"include/tcpdf_filters.php",
-		"include/tcpdf_font_data.php",
-		"include/tcpdf_fonts.php",
-		"include/tcpdf_images.php",
-		"include/tcpdf_static.php",
-		"include/barcodes/datamatrix.php",
-		"include/barcodes/pdf417.php",
-		"include/barcodes/qrcode.php"
-		]
-	}
+  "name": "tecnickcom/tcpdf",
+  "version": "6.2.26",
+  "homepage": "http://www.tcpdf.org/",
+  "type": "library",
+  "description": "TCPDF is a PHP class for generating PDF documents and barcodes.",
+  "keywords": [
+    "PDF",
+    "tcpdf",
+    "PDFD32000-2008",
+    "qrcode",
+    "datamatrix",
+    "pdf417",
+    "barcodes"
+  ],
+  "license": "LGPL-3.0",
+  "authors": [
+    {
+      "name": "Nicola Asuni",
+      "email": "info@tecnick.com",
+      "role": "lead"
+    }
+  ],
+  "require": {
+    "php": ">=5.3.0"
+  },
+  "autoload": {
+    "classmap": [
+      "config",
+      "include",
+      "tcpdf.php",
+      "tcpdf_parser.php",
+      "tcpdf_import.php",
+      "tcpdf_barcodes_1d.php",
+      "tcpdf_barcodes_2d.php",
+      "include/tcpdf_colors.php",
+      "include/tcpdf_filters.php",
+      "include/tcpdf_font_data.php",
+      "include/tcpdf_fonts.php",
+      "include/tcpdf_images.php",
+      "include/tcpdf_static.php",
+      "include/barcodes/datamatrix.php",
+      "include/barcodes/pdf417.php",
+      "include/barcodes/qrcode.php"
+    ]
+  }
 }
diff --git a/civicrm/vendor/tecnickcom/tcpdf/include/barcodes/pdf417.php b/civicrm/vendor/tecnickcom/tcpdf/include/barcodes/pdf417.php
index 4fbe6522c9231702c66cbd6af2917381f434135c..3b1774eaae46dbbac869ae16e2d944b9be33eb24 100644
--- a/civicrm/vendor/tecnickcom/tcpdf/include/barcodes/pdf417.php
+++ b/civicrm/vendor/tecnickcom/tcpdf/include/barcodes/pdf417.php
@@ -740,16 +740,6 @@ class PDF417 {
 	 * @protected
 	 */
 	protected function getErrorCorrectionLevel($ecl, $numcw) {
-		// get maximum correction level
-		$maxecl = 8; // starting error level
-		$maxerrsize = (928 - $numcw); // available codewords for error
-		while ($maxecl > 0) {
-			$errsize = (2 << $ecl);
-			if ($maxerrsize >= $errsize) {
-				break;
-			}
-			--$maxecl;
-		}
 		// check for automatic levels
 		if (($ecl < 0) OR ($ecl > 8)) {
 			if ($numcw < 41) {
@@ -764,6 +754,16 @@ class PDF417 {
 				$ecl = $maxecl;
 			}
 		}
+		// get maximum correction level
+		$maxecl = 8; // starting error level
+		$maxerrsize = (928 - $numcw); // available codewords for error
+		while ($maxecl > 0) {
+			$errsize = (2 << $ecl);
+			if ($maxerrsize >= $errsize) {
+				break;
+			}
+			--$maxecl;
+		}
 		if ($ecl > $maxecl) {
 			$ecl = $maxecl;
 		}
diff --git a/civicrm/vendor/tecnickcom/tcpdf/include/sRGB.icc b/civicrm/vendor/tecnickcom/tcpdf/include/sRGB.icc
index 71e33830223c4c05c61002462e13df02bb30ae02..1d8f7419c3bf2c6a3dd78f2c679fdefbda1776a3 100644
Binary files a/civicrm/vendor/tecnickcom/tcpdf/include/sRGB.icc and b/civicrm/vendor/tecnickcom/tcpdf/include/sRGB.icc differ
diff --git a/civicrm/vendor/tecnickcom/tcpdf/include/tcpdf_fonts.php b/civicrm/vendor/tecnickcom/tcpdf/include/tcpdf_fonts.php
index 70ca89393d92611d924f3558e92a2eee6ff662bf..9242ca4bfdb5290c47f0a10f8694bbd4673e51df 100644
--- a/civicrm/vendor/tecnickcom/tcpdf/include/tcpdf_fonts.php
+++ b/civicrm/vendor/tecnickcom/tcpdf/include/tcpdf_fonts.php
@@ -70,7 +70,7 @@ class TCPDF_FONTS {
 	 * @public static
 	 */
 	public static function addTTFfont($fontfile, $fonttype='', $enc='', $flags=32, $outpath='', $platid=3, $encid=1, $addcbbox=false, $link=false) {
-		if (!file_exists($fontfile)) {
+		if (!TCPDF_STATIC::file_exists($fontfile)) {
 			// Could not find file
 			return false;
 		}
@@ -95,7 +95,7 @@ class TCPDF_FONTS {
 			$outpath = self::_getfontpath();
 		}
 		// check if this font already exist
-		if (@file_exists($outpath.$font_name.'.php')) {
+		if (@TCPDF_STATIC::file_exists($outpath.$font_name.'.php')) {
 			// this font already exist (delete it from fonts folder to rebuild it)
 			return $font_name;
 		}
@@ -665,7 +665,7 @@ class TCPDF_FONTS {
 								$glyphIdArray[$k] = TCPDF_STATIC::_getUSHORT($font, $offset);
 								$offset += 2;
 							}
-							for ($k = 0; $k < $segCount; ++$k) {
+							for ($k = 0; $k < $segCount - 1; ++$k) {
 								for ($c = $startCount[$k]; $c <= $endCount[$k]; ++$c) {
 									if ($idRangeOffset[$k] == 0) {
 										$g = ($idDelta[$k] + $c) % 65536;
@@ -1543,11 +1543,11 @@ class TCPDF_FONTS {
 	public static function getFontFullPath($file, $fontdir=false) {
 		$fontfile = '';
 		// search files on various directories
-		if (($fontdir !== false) AND @file_exists($fontdir.$file)) {
+		if (($fontdir !== false) AND @TCPDF_STATIC::file_exists($fontdir.$file)) {
 			$fontfile = $fontdir.$file;
-		} elseif (@file_exists(self::_getfontpath().$file)) {
+		} elseif (@TCPDF_STATIC::file_exists(self::_getfontpath().$file)) {
 			$fontfile = self::_getfontpath().$file;
-		} elseif (@file_exists($file)) {
+		} elseif (@TCPDF_STATIC::file_exists($file)) {
 			$fontfile = $file;
 		}
 		return $fontfile;
@@ -2003,7 +2003,11 @@ class TCPDF_FONTS {
 			$chars = str_split($str);
 			$carr = array_map('ord', $chars);
 		}
-		$currentfont['subsetchars'] += array_fill_keys($carr, true);
+		if (is_array($currentfont['subsetchars']) && is_array($carr)) {
+			$currentfont['subsetchars'] += array_fill_keys($carr, true);
+		} else {
+			$currentfont['subsetchars'] = array_merge($currentfont['subsetchars'], $carr);
+		}
 		return $carr;
 	}
 
diff --git a/civicrm/vendor/tecnickcom/tcpdf/include/tcpdf_images.php b/civicrm/vendor/tecnickcom/tcpdf/include/tcpdf_images.php
index c2e3c36f9305814184940f7adc689dcf32c74d77..86b3c20dbd8b55321c12fffb04f39b8923a248ca 100644
--- a/civicrm/vendor/tecnickcom/tcpdf/include/tcpdf_images.php
+++ b/civicrm/vendor/tecnickcom/tcpdf/include/tcpdf_images.php
@@ -161,12 +161,8 @@ class TCPDF_IMAGES {
 	 */
 	public static function _parsejpeg($file) {
 		// check if is a local file
-		if (!@file_exists($file)) {
-			// try to encode spaces on filename
-			$tfile = str_replace(' ', '%20', $file);
-			if (@file_exists($tfile)) {
-				$file = $tfile;
-			}
+		if (!@TCPDF_STATIC::file_exists($file)) {
+			return false;
 		}
 		$a = getimagesize($file);
 		if (empty($a)) {
diff --git a/civicrm/vendor/tecnickcom/tcpdf/include/tcpdf_static.php b/civicrm/vendor/tecnickcom/tcpdf/include/tcpdf_static.php
index 16353e006850928e2a8d006e31cd57576f1b8c75..df1b28e1ef87467a9f3bee38b58556802d488fc6 100644
--- a/civicrm/vendor/tecnickcom/tcpdf/include/tcpdf_static.php
+++ b/civicrm/vendor/tecnickcom/tcpdf/include/tcpdf_static.php
@@ -55,7 +55,7 @@ class TCPDF_STATIC {
 	 * Current TCPDF version.
 	 * @private static
 	 */
-	private static $tcpdf_version = '6.2.13';
+	private static $tcpdf_version = '6.2.26';
 
 	/**
 	 * String alias for total number of pages.
@@ -1774,39 +1774,6 @@ class TCPDF_STATIC {
 		return $angle;
 	}
 
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-// ====================================================================================================================
-// REIMPLEMENTED
-// ====================================================================================================================
-
-
-
-
-
-
-
-
-
-
-
-
-
-
 	/**
 	 * Split string by a regular expression.
 	 * This is a wrapper for the preg_split function to avoid the bug: https://bugs.php.net/bug.php?id=45850
@@ -1854,6 +1821,49 @@ class TCPDF_STATIC {
 		return fopen($filename, $mode);
 	}
 
+	/**
+	 * Check if the URL exist.
+	 * @param url (string) URL to check.
+	 * @return Returns TRUE if the URL exists; FALSE otherwise.
+	 * @public static
+	 */
+	public static function url_exists($url) {
+		$crs = curl_init();
+		curl_setopt($crs, CURLOPT_URL, $url);
+		curl_setopt($crs, CURLOPT_NOBODY, true);
+		curl_setopt($crs, CURLOPT_FAILONERROR, true);
+		if ((ini_get('open_basedir') == '') && (!ini_get('safe_mode'))) {
+			curl_setopt($crs, CURLOPT_FOLLOWLOCATION, true);
+		}
+		curl_setopt($crs, CURLOPT_CONNECTTIMEOUT, 5);
+		curl_setopt($crs, CURLOPT_TIMEOUT, 30);
+		curl_setopt($crs, CURLOPT_SSL_VERIFYPEER, false);
+		curl_setopt($crs, CURLOPT_SSL_VERIFYHOST, false);
+		curl_setopt($crs, CURLOPT_USERAGENT, 'tc-lib-file');
+		curl_exec($crs);
+		$code = curl_getinfo($crs, CURLINFO_HTTP_CODE);
+		curl_close($crs);
+		return ($code == 200);
+	}
+
+	/**
+	 * Wrapper for file_exists.
+	 * Checks whether a file or directory exists.
+	 * Only allows some protocols and local files.
+	 * @param filename (string) Path to the file or directory. 
+	 * @return Returns TRUE if the file or directory specified by filename exists; FALSE otherwise.  
+	 * @public static
+	 */
+	public static function file_exists($filename) {
+		if (preg_match('|^https?://|', $filename) == 1) {
+			return self::url_exists($filename);
+		}
+		if (strpos($filename, '://')) {
+			return false; // only support http and https wrappers for security reasons
+		}
+		return @file_exists($filename);
+	}
+
 	/**
 	 * Reads entire file into a string.
 	 * The file can be also an URL.
@@ -1910,12 +1920,14 @@ class TCPDF_STATIC {
 		    && !preg_match('%^//%', $file)
 		) {
 		    $urldata = @parse_url($_SERVER['SCRIPT_URI']);
-		    return $urldata['scheme'].'://'.$urldata['host'].(($file[0] == '/') ? '' : '/').$file;
+		    $alt[] = $urldata['scheme'].'://'.$urldata['host'].(($file[0] == '/') ? '' : '/').$file;
 		}
 		//
 		$alt = array_unique($alt);
-		//var_dump($alt);exit;//DEBUG
 		foreach ($alt as $path) {
+			if (!self::file_exists($path)) {
+				return false;
+			}
 			$ret = @file_get_contents($path);
 			if ($ret !== false) {
 			    return $ret;
@@ -1949,8 +1961,6 @@ class TCPDF_STATIC {
 		return false;
 	}
 
-    
-
 	/**
 	 * Get ULONG from string (Big Endian 32-bit unsigned integer).
 	 * @param $str (string) string from where to extract value
diff --git a/civicrm/vendor/tecnickcom/tcpdf/tcpdf.php b/civicrm/vendor/tecnickcom/tcpdf/tcpdf.php
index 65196e74de1f9af0c6d01f14837a43b48d0c8328..24ef434ab8a58523e06289e1a46b3647f69c2ac8 100644
--- a/civicrm/vendor/tecnickcom/tcpdf/tcpdf.php
+++ b/civicrm/vendor/tecnickcom/tcpdf/tcpdf.php
@@ -1,13 +1,13 @@
 <?php
 //============================================================+
 // File name   : tcpdf.php
-// Version     : 6.2.13
+// Version     : 6.2.26
 // Begin       : 2002-08-03
-// Last Update : 2015-06-18
+// Last Update : 2018-09-14
 // Author      : Nicola Asuni - Tecnick.com LTD - www.tecnick.com - info@tecnick.com
 // License     : GNU-LGPL v3 (http://www.gnu.org/copyleft/lesser.html)
 // -------------------------------------------------------------------
-// Copyright (C) 2002-2015 Nicola Asuni - Tecnick.com LTD
+// Copyright (C) 2002-2018 Nicola Asuni - Tecnick.com LTD
 //
 // This file is part of TCPDF software library.
 //
@@ -104,7 +104,7 @@
  * Tools to encode your unicode fonts are on fonts/utils directory.</p>
  * @package com.tecnick.tcpdf
  * @author Nicola Asuni
- * @version 6.2.8
+ * @version 6.2.26
  */
 
 // TCPDF configuration
@@ -128,8 +128,11 @@ require_once(dirname(__FILE__).'/include/tcpdf_static.php');
  * TCPDF project (http://www.tcpdf.org) has been originally derived in 2002 from the Public Domain FPDF class by Olivier Plathey (http://www.fpdf.org), but now is almost entirely rewritten.<br>
  * @package com.tecnick.tcpdf
  * @brief PHP class for generating PDF documents without requiring external extensions.
- * @version 6.2.8
+ * @version 6.2.26
  * @author Nicola Asuni - info@tecnick.com
+ * @IgnoreAnnotation("protected")
+ * @IgnoreAnnotation("public")
+ * @IgnoreAnnotation("pre")
  */
 class TCPDF {
 
@@ -1994,10 +1997,6 @@ class TCPDF {
 	 * @since 1.53.0.TC016
 	 */
 	public function __destruct() {
-		// restore internal encoding
-		if (isset($this->internal_encoding) AND !empty($this->internal_encoding)) {
-			mb_internal_encoding($this->internal_encoding);
-		}
 		// cleanup
 		$this->_destroy(true);
 	}
@@ -4257,7 +4256,7 @@ class TCPDF {
 		// true when the font style variation is missing
 		$missing_style = false;
 		// search and include font file
-		if (TCPDF_STATIC::empty_string($fontfile) OR (!@file_exists($fontfile))) {
+		if (TCPDF_STATIC::empty_string($fontfile) OR (!@TCPDF_STATIC::file_exists($fontfile))) {
 			// build a standard filenames for specified font
 			$tmp_fontfile = str_replace(' ', '', $family).strtolower($style).'.php';
 			$fontfile = TCPDF_FONTS::getFontFullPath($tmp_fontfile, $fontdir);
@@ -4269,7 +4268,7 @@ class TCPDF {
 			}
 		}
 		// include font file
-		if (!TCPDF_STATIC::empty_string($fontfile) AND (@file_exists($fontfile))) {
+		if (!TCPDF_STATIC::empty_string($fontfile) AND (@TCPDF_STATIC::file_exists($fontfile))) {
 			include($fontfile);
 		} else {
 			$this->Error('Could not include font definition file: '.$family.'');
@@ -4453,6 +4452,7 @@ class TCPDF {
 	 * @see SetFont()
 	 */
 	public function SetFontSize($size, $out=true) {
+		$size = (float)$size;
 		// font size in points
 		$this->FontSizePt = $size;
 		// font size in user units
@@ -4809,19 +4809,19 @@ class TCPDF {
 		$this->PageAnnots[$page][] = array('n' => ++$this->n, 'x' => $x, 'y' => $y, 'w' => $w, 'h' => $h, 'txt' => $text, 'opt' => $opt, 'numspaces' => $spaces);
 		if (!$this->pdfa_mode) {
 			if ((($opt['Subtype'] == 'FileAttachment') OR ($opt['Subtype'] == 'Sound')) AND (!TCPDF_STATIC::empty_string($opt['FS']))
-				AND (@file_exists($opt['FS']) OR TCPDF_STATIC::isValidURL($opt['FS']))
+				AND (@TCPDF_STATIC::file_exists($opt['FS']) OR TCPDF_STATIC::isValidURL($opt['FS']))
 				AND (!isset($this->embeddedfiles[basename($opt['FS'])]))) {
 				$this->embeddedfiles[basename($opt['FS'])] = array('f' => ++$this->n, 'n' => ++$this->n, 'file' => $opt['FS']);
 			}
 		}
 		// Add widgets annotation's icons
-		if (isset($opt['mk']['i']) AND @file_exists($opt['mk']['i'])) {
+		if (isset($opt['mk']['i']) AND @TCPDF_STATIC::file_exists($opt['mk']['i'])) {
 			$this->Image($opt['mk']['i'], '', '', 10, 10, '', '', '', false, 300, '', false, false, 0, false, true);
 		}
-		if (isset($opt['mk']['ri']) AND @file_exists($opt['mk']['ri'])) {
+		if (isset($opt['mk']['ri']) AND @TCPDF_STATIC::file_exists($opt['mk']['ri'])) {
 			$this->Image($opt['mk']['ri'], '', '', 0, 0, '', '', '', false, 300, '', false, false, 0, false, true);
 		}
-		if (isset($opt['mk']['ix']) AND @file_exists($opt['mk']['ix'])) {
+		if (isset($opt['mk']['ix']) AND @TCPDF_STATIC::file_exists($opt['mk']['ix'])) {
 			$this->Image($opt['mk']['ix'], '', '', 0, 0, '', '', '', false, 300, '', false, false, 0, false, true);
 		}
 	}
@@ -5769,10 +5769,9 @@ class TCPDF {
 			$this->resetLastH();
 		}
 		if (!TCPDF_STATIC::empty_string($y)) {
-			$this->SetY($y);
-		} else {
-			$y = $this->GetY();
+			$this->SetY($y); // set y in order to convert negative y values to positive ones
 		}
+		$y = $this->GetY();
 		$resth = 0;
 		if (($h > 0) AND $this->inPageBody() AND (($y + $h + $mc_margin['T'] + $mc_margin['B']) > $this->PageBreakTrigger)) {
 			// spit cell in more pages/columns
@@ -6845,13 +6844,9 @@ class TCPDF {
 				$file = substr($file, 1);
 				$exurl = $file;
 			}
-			// check if is a local file
-			if (!@file_exists($file)) {
-				// try to encode spaces on filename
-				$tfile = str_replace(' ', '%20', $file);
-				if (@file_exists($tfile)) {
-					$file = $tfile;
-				}
+			// check if file exist and it is valid
+			if (!@TCPDF_STATIC::file_exists($file)) {
+				return false;
 			}
 			if (($imsize = @getimagesize($file)) === FALSE) {
 				if (in_array($file, $this->imagekeys)) {
@@ -7750,6 +7745,10 @@ class TCPDF {
 	 * @since 4.5.016 (2009-02-24)
 	 */
 	public function _destroy($destroyall=false, $preserve_objcopy=false) {
+		// restore internal encoding
+		if (isset($this->internal_encoding) AND !empty($this->internal_encoding)) {
+			mb_internal_encoding($this->internal_encoding);
+		}
 		if ($destroyall AND !$preserve_objcopy) {
 			// remove all temporary files
 			$tmpfiles = glob(K_PATH_CACHE.'__tcpdf_'.$this->file_id.'_*');
@@ -8157,7 +8156,9 @@ class TCPDF {
 						$annots .= ' /FT /'.$pl['opt']['ft'];
 						$formfield = true;
 					}
-					$annots .= ' /Contents '.$this->_textstring($pl['txt'], $annot_obj_id);
+					if ($pl['opt']['subtype'] !== 'Link') {
+						$annots .= ' /Contents '.$this->_textstring($pl['txt'], $annot_obj_id);
+					}
 					$annots .= ' /P '.$this->page_obj_id[$n].' 0 R';
 					$annots .= ' /NM '.$this->_datastring(sprintf('%04u-%04u', $n, $key), $annot_obj_id);
 					$annots .= ' /M '.$this->_datestring($annot_obj_id, $this->doc_modification_timestamp);
@@ -9646,7 +9647,7 @@ class TCPDF {
 	protected function _putcatalog() {
 		// put XMP
 		$xmpobj = $this->_putXMP();
-		// if required, add standard sRGB_IEC61966-2.1 blackscaled ICC colour profile
+		// if required, add standard sRGB ICC colour profile
 		if ($this->pdfa_mode OR $this->force_srgb) {
 			$iccobj = $this->_newobj();
 			$icc = file_get_contents(dirname(__FILE__).'/include/sRGB.icc');
@@ -12582,7 +12583,7 @@ class TCPDF {
 		$k = $this->k;
 		$this->javascript .= sprintf("f".$name."=this.addField('%s','%s',%u,[%F,%F,%F,%F]);", $name, $type, $this->PageNo()-1, $x*$k, ($this->h-$y)*$k+1, ($x+$w)*$k, ($this->h-$y-$h)*$k+1)."\n";
 		$this->javascript .= 'f'.$name.'.textSize='.$this->FontSizePt.";\n";
-		while (list($key, $val) = each($prop)) {
+		foreach($prop as $key => $val) {
 			if (strcmp(substr($key, -5), 'Color') == 0) {
 				$val = TCPDF_COLORS::_JScolor($val);
 			} else {
@@ -15190,7 +15191,7 @@ class TCPDF {
 	 * @since 3.1.000 (2008-06-09)
 	 * @public
 	 */
-	public function write1DBarcode($code, $type, $x='', $y='', $w='', $h='', $xres='', $style='', $align='') {
+	public function write1DBarcode($code, $type, $x='', $y='', $w='', $h='', $xres='', $style=array(), $align='') {
 		if (TCPDF_STATIC::empty_string(trim($code))) {
 			return;
 		}
@@ -15509,7 +15510,7 @@ class TCPDF {
 	 * @since 4.5.037 (2009-04-07)
 	 * @public
 	 */
-	public function write2DBarcode($code, $type, $x='', $y='', $w='', $h='', $style='', $align='', $distort=false) {
+	public function write2DBarcode($code, $type, $x='', $y='', $w='', $h='', $style=array(), $align='', $distort=false) {
 		if (TCPDF_STATIC::empty_string(trim($code))) {
 			return;
 		}
@@ -16545,9 +16546,9 @@ class TCPDF {
 					// get attributes
 					preg_match_all('/([^=\s]*)[\s]*=[\s]*"([^"]*)"/', $element, $attr_array, PREG_PATTERN_ORDER);
 					$dom[$key]['attribute'] = array(); // reset attribute array
-					while (list($id, $name) = each($attr_array[1])) {
-						$dom[$key]['attribute'][strtolower($name)] = $attr_array[2][$id];
-					}
+                    foreach($attr_array[1] as $id => $name) {
+                        $dom[$key]['attribute'][strtolower($name)] = $attr_array[2][$id];
+                    }
 					if (!empty($css)) {
 						// merge CSS style to current style
 						list($dom[$key]['csssel'], $dom[$key]['cssdata']) = TCPDF_STATIC::getCSSdataArray($dom, $key, $css);
@@ -16558,10 +16559,10 @@ class TCPDF {
 						// get style attributes
 						preg_match_all('/([^;:\s]*):([^;]*)/', $dom[$key]['attribute']['style'], $style_array, PREG_PATTERN_ORDER);
 						$dom[$key]['style'] = array(); // reset style attribute array
-						while (list($id, $name) = each($style_array[1])) {
-							// in case of duplicate attribute the last replace the previous
-							$dom[$key]['style'][strtolower($name)] = trim($style_array[2][$id]);
-						}
+                        foreach($style_array[1] as $id => $name) {
+                            // in case of duplicate attribute the last replace the previous
+                            $dom[$key]['style'][strtolower($name)] = trim($style_array[2][$id]);
+                        }
 						// --- get some style attributes ---
 						// text direction
 						if (isset($dom[$key]['style']['direction'])) {
@@ -17176,10 +17177,10 @@ Putting 1 is equivalent to putting 0 and calling Ln() just after. Default value:
 		if ($cell) {
 			if ($this->rtl) {
 				$this->x -= $this->cell_padding['R'];
-				$this->lMargin += $this->cell_padding['R'];
+				$this->lMargin += $this->cell_padding['L'];
 			} else {
 				$this->x += $this->cell_padding['L'];
-				$this->rMargin += $this->cell_padding['L'];
+				$this->rMargin += $this->cell_padding['R'];
 			}
 		}
 		if ($this->customlistindent >= 0) {
@@ -17781,7 +17782,7 @@ Putting 1 is equivalent to putting 0 and calling Ln() just after. Default value:
 											// justify block
 											if (!TCPDF_STATIC::empty_string($this->lispacer)) {
 												$this->lispacer = '';
-												continue;
+												break;
 											}
 											preg_match('/([0-9\.\+\-]*)[\s]([0-9\.\+\-]*)[\s]([0-9\.\+\-]*)[\s]('.$strpiece[1][0].')[\s](re)([\s]*)/x', $pmid, $xmatches);
 											if (!isset($xmatches[1])) {
@@ -18316,7 +18317,8 @@ Putting 1 is equivalent to putting 0 and calling Ln() just after. Default value:
 				}
 				// text
 				$this->htmlvspace = 0;
-				if ((!$this->premode) AND $this->isRTLTextDir()) {
+				$isRTLString = preg_match(TCPDF_FONT_DATA::$uni_RE_PATTERN_RTL, $dom[$key]['value']) || preg_match(TCPDF_FONT_DATA::$uni_RE_PATTERN_ARABIC, $dom[$key]['value']);
+				if ((!$this->premode) AND $this->isRTLTextDir() AND !$isRTLString) {
 					// reverse spaces order
 					$lsp = ''; // left spaces
 					$rsp = ''; // right spaces
@@ -18331,7 +18333,7 @@ Putting 1 is equivalent to putting 0 and calling Ln() just after. Default value:
 				if ($newline) {
 					if (!$this->premode) {
 						$prelen = strlen($dom[$key]['value']);
-						if ($this->isRTLTextDir()) {
+						if ($this->isRTLTextDir() AND !$isRTLString) {
 							// right trim except non-breaking space
 							$dom[$key]['value'] = $this->stringRightTrim($dom[$key]['value']);
 						} else {
@@ -18815,100 +18817,122 @@ Putting 1 is equivalent to putting 0 and calling Ln() just after. Default value:
 				break;
 			}
 			case 'img': {
-				if (!empty($tag['attribute']['src'])) {
-					if ($tag['attribute']['src'][0] === '@') {
-						// data stream
-						$tag['attribute']['src'] = '@'.base64_decode(substr($tag['attribute']['src'], 1));
-						$type = '';
-					} else {
-						// get image type
-						$type = TCPDF_IMAGES::getImageFileType($tag['attribute']['src']);
-					}
-					if (!isset($tag['width'])) {
-						$tag['width'] = 0;
-					}
-					if (!isset($tag['height'])) {
-						$tag['height'] = 0;
-					}
-					//if (!isset($tag['attribute']['align'])) {
-						// the only alignment supported is "bottom"
-						// further development is required for other modes.
-						$tag['attribute']['align'] = 'bottom';
-					//}
-					switch($tag['attribute']['align']) {
-						case 'top': {
-							$align = 'T';
-							break;
-						}
-						case 'middle': {
-							$align = 'M';
-							break;
-						}
-						case 'bottom': {
-							$align = 'B';
-							break;
+				if (empty($tag['attribute']['src'])) {
+					break;
+				}
+				$imgsrc = $tag['attribute']['src'];
+				if ($imgsrc[0] === '@') {
+					// data stream
+					$imgsrc = '@'.base64_decode(substr($imgsrc, 1));
+					$type = '';
+				} else {
+					if (($imgsrc[0] === '/') AND !empty($_SERVER['DOCUMENT_ROOT']) AND ($_SERVER['DOCUMENT_ROOT'] != '/')) {
+						// fix image path
+						$findroot = strpos($imgsrc, $_SERVER['DOCUMENT_ROOT']);
+						if (($findroot === false) OR ($findroot > 1)) {
+							if (substr($_SERVER['DOCUMENT_ROOT'], -1) == '/') {
+								$imgsrc = substr($_SERVER['DOCUMENT_ROOT'], 0, -1).$imgsrc;
+							} else {
+								$imgsrc = $_SERVER['DOCUMENT_ROOT'].$imgsrc;
+							}
 						}
-						default: {
-							$align = 'B';
-							break;
+						$imgsrc = urldecode($imgsrc);
+						$testscrtype = @parse_url($imgsrc);
+						if (empty($testscrtype['query'])) {
+							// convert URL to server path
+							$imgsrc = str_replace(K_PATH_URL, K_PATH_MAIN, $imgsrc);
+						} elseif (preg_match('|^https?://|', $imgsrc) !== 1) {
+							// convert URL to server path
+							$imgsrc = str_replace(K_PATH_MAIN, K_PATH_URL, $imgsrc);
 						}
 					}
-					$prevy = $this->y;
-					$xpos = $this->x;
-					$imglink = '';
-					if (isset($this->HREF['url']) AND !TCPDF_STATIC::empty_string($this->HREF['url'])) {
-						$imglink = $this->HREF['url'];
-						if ($imglink[0] == '#') {
-							// convert url to internal link
-							$lnkdata = explode(',', $imglink);
-							if (isset($lnkdata[0])) {
-								$page = intval(substr($lnkdata[0], 1));
-								if (empty($page) OR ($page <= 0)) {
-									$page = $this->page;
-								}
-								if (isset($lnkdata[1]) AND (strlen($lnkdata[1]) > 0)) {
-									$lnky = floatval($lnkdata[1]);
-								} else {
-									$lnky = 0;
-								}
-								$imglink = $this->AddLink();
-								$this->SetLink($imglink, $lnky, $page);
+					// get image type
+					$type = TCPDF_IMAGES::getImageFileType($imgsrc);
+				}
+				if (!isset($tag['width'])) {
+					$tag['width'] = 0;
+				}
+				if (!isset($tag['height'])) {
+					$tag['height'] = 0;
+				}
+				//if (!isset($tag['attribute']['align'])) {
+					// the only alignment supported is "bottom"
+					// further development is required for other modes.
+					$tag['attribute']['align'] = 'bottom';
+				//}
+				switch($tag['attribute']['align']) {
+					case 'top': {
+						$align = 'T';
+						break;
+					}
+					case 'middle': {
+						$align = 'M';
+						break;
+					}
+					case 'bottom': {
+						$align = 'B';
+						break;
+					}
+					default: {
+						$align = 'B';
+						break;
+					}
+				}
+				$prevy = $this->y;
+				$xpos = $this->x;
+				$imglink = '';
+				if (isset($this->HREF['url']) AND !TCPDF_STATIC::empty_string($this->HREF['url'])) {
+					$imglink = $this->HREF['url'];
+					if ($imglink[0] == '#') {
+						// convert url to internal link
+						$lnkdata = explode(',', $imglink);
+						if (isset($lnkdata[0])) {
+							$page = intval(substr($lnkdata[0], 1));
+							if (empty($page) OR ($page <= 0)) {
+								$page = $this->page;
+							}
+							if (isset($lnkdata[1]) AND (strlen($lnkdata[1]) > 0)) {
+								$lnky = floatval($lnkdata[1]);
+							} else {
+								$lnky = 0;
 							}
+							$imglink = $this->AddLink();
+							$this->SetLink($imglink, $lnky, $page);
 						}
 					}
-					$border = 0;
-					if (isset($tag['border']) AND !empty($tag['border'])) {
-						// currently only support 1 (frame) or a combination of 'LTRB'
-						$border = $tag['border'];
-					}
-					$iw = '';
-					if (isset($tag['width'])) {
-						$iw = $this->getHTMLUnitToUnits($tag['width'], ($tag['fontsize'] / $this->k), 'px', false);
-					}
-					$ih = '';
-					if (isset($tag['height'])) {
-						$ih = $this->getHTMLUnitToUnits($tag['height'], ($tag['fontsize'] / $this->k), 'px', false);
-					}
-					if (($type == 'eps') OR ($type == 'ai')) {
-						$this->ImageEps($tag['attribute']['src'], $xpos, $this->y, $iw, $ih, $imglink, true, $align, '', $border, true);
-					} elseif ($type == 'svg') {
-						$this->ImageSVG($tag['attribute']['src'], $xpos, $this->y, $iw, $ih, $imglink, $align, '', $border, true);
-					} else {
-						$this->Image($tag['attribute']['src'], $xpos, $this->y, $iw, $ih, '', $imglink, $align, false, 300, '', false, false, $border, false, false, true);
+				}
+				$border = 0;
+				if (isset($tag['border']) AND !empty($tag['border'])) {
+					// currently only support 1 (frame) or a combination of 'LTRB'
+					$border = $tag['border'];
+				}
+				$iw = '';
+				if (isset($tag['width'])) {
+					$iw = $this->getHTMLUnitToUnits($tag['width'], ($tag['fontsize'] / $this->k), 'px', false);
+				}
+				$ih = '';
+				if (isset($tag['height'])) {
+					$ih = $this->getHTMLUnitToUnits($tag['height'], ($tag['fontsize'] / $this->k), 'px', false);
+				}
+				if (($type == 'eps') OR ($type == 'ai')) {
+					$this->ImageEps($imgsrc, $xpos, $this->y, $iw, $ih, $imglink, true, $align, '', $border, true);
+				} elseif ($type == 'svg') {
+					$this->ImageSVG($imgsrc, $xpos, $this->y, $iw, $ih, $imglink, $align, '', $border, true);
+				} else {
+					$this->Image($imgsrc, $xpos, $this->y, $iw, $ih, '', $imglink, $align, false, 300, '', false, false, $border, false, false, true);
+				}
+				switch($align) {
+					case 'T': {
+						$this->y = $prevy;
+						break;
 					}
-					switch($align) {
-						case 'T': {
-							$this->y = $prevy;
-							break;
-						}
-						case 'M': {
-							$this->y = (($this->img_rb_y + $prevy - ($this->getCellHeight($tag['fontsize'] / $this->k))) / 2);
-							break;
-						}
-						case 'B': {
-							$this->y = $this->img_rb_y - ($this->getCellHeight($tag['fontsize'] / $this->k) - ($this->getFontDescent($tag['fontname'], $tag['fontstyle'], $tag['fontsize']) * $this->cell_height_ratio));
-							break;
-						}
+					case 'M': {
+						$this->y = (($this->img_rb_y + $prevy - ($this->getCellHeight($tag['fontsize'] / $this->k))) / 2);
+						break;
+					}
+					case 'B': {
+						$this->y = $this->img_rb_y - ($this->getCellHeight($tag['fontsize'] / $this->k) - ($this->getFontDescent($tag['fontname'], $tag['fontstyle'], $tag['fontsize']) * $this->cell_height_ratio));
+						break;
 					}
 				}
 				break;
@@ -21511,7 +21535,7 @@ Putting 1 is equivalent to putting 0 and calling Ln() just after. Default value:
 			} else {
 				// placemark to be replaced with the correct number
 				$pagenum = '{#'.($outline['p']).'}';
-				if ($templates['F'.$outline['l']]) {
+				if (isset($templates['F'.$outline['l']]) && $templates['F'.$outline['l']]) {
 					$pagenum = '{'.$pagenum.'}';
 				}
 				$maxpage = max($maxpage, $outline['p']);
@@ -24204,9 +24228,12 @@ Putting 1 is equivalent to putting 0 and calling Ln() just after. Default value:
 						}
 						$img = urldecode($img);
 						$testscrtype = @parse_url($img);
-						if (!isset($testscrtype['query']) OR empty($testscrtype['query'])) {
+						if (empty($testscrtype['query'])) {
 							// convert URL to server path
 							$img = str_replace(K_PATH_URL, K_PATH_MAIN, $img);
+						} elseif (preg_match('|^https?://|', $img) !== 1) {
+							// convert server path to URL
+							$img = str_replace(K_PATH_MAIN, K_PATH_URL, $img);
 						}
 					}
 					// get image type
diff --git a/civicrm/xml/version.xml b/civicrm/xml/version.xml
index cdc26c377d065dae5ce7d2859b569f3d389a8bb1..48899400e88cec5b25bc2cd0f6609a0ee09038b5 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.13.3</version_no>
+  <version_no>5.13.4</version_no>
 </version>