From 588d7e23df6faed0f844f483460be48ca6eead07 Mon Sep 17 00:00:00 2001
From: baigner <benedikt.aigner@rwth-aachen.de>
Date: Tue, 30 May 2017 12:50:05 +0200
Subject: [PATCH] UPDATE for Visualization Package: The three views (XDSM, Edge
 Bundles and Sankey Diagram) work with all right click options.

Former-commit-id: 01b5cbe3b94d03a1cada65b028006d59849c3d5c
---
 MANIFEST.in                                   |     3 +-
 .../KADMOS_VisPack.html                       |   845 +
 .../supportFiles/circleLayout.html            |   189 +
 .../supportFiles/circleLayout.js              |  2464 ++
 .../supportFiles/edgeBundles.html             |   224 +
 .../supportFiles/edgeBundles.js               |  2810 +++
 .../supportFiles/include/AGILE_Background.png |   Bin 0 -> 21140 bytes
 .../supportFiles/include/AGILE_Icon.png       |   Bin 0 -> 24690 bytes
 .../include/KADMOS_VisualizationPack_Icon.png |   Bin 0 -> 14199 bytes
 .../include/KADMOS_VisualizationPack_Logo.png |   Bin 0 -> 87879 bytes
 .../supportFiles/include/RWTH_Logo.png        |   Bin 0 -> 52099 bytes
 .../supportFiles/include/TUDelft_Logo.png     |   Bin 0 -> 4545 bytes
 .../include/acknowledgements.html             |    54 +
 .../supportFiles/json/empty_file              |     1 +
 .../supportFiles/sankeyDiagram.html           |   230 +
 .../supportFiles/sankeyDiagram.js             |  3528 +++
 .../supportFiles/xdsm.html                    |   379 +
 .../supportFiles/xdsm.js                      | 19906 ++++++++++++++++
 18 files changed, 30631 insertions(+), 2 deletions(-)
 create mode 100644 kadmos/external/D3_vispack/KADMOS_VisualizationPackage_170530/KADMOS_VisPack.html
 create mode 100644 kadmos/external/D3_vispack/KADMOS_VisualizationPackage_170530/supportFiles/circleLayout.html
 create mode 100644 kadmos/external/D3_vispack/KADMOS_VisualizationPackage_170530/supportFiles/circleLayout.js
 create mode 100644 kadmos/external/D3_vispack/KADMOS_VisualizationPackage_170530/supportFiles/edgeBundles.html
 create mode 100644 kadmos/external/D3_vispack/KADMOS_VisualizationPackage_170530/supportFiles/edgeBundles.js
 create mode 100644 kadmos/external/D3_vispack/KADMOS_VisualizationPackage_170530/supportFiles/include/AGILE_Background.png
 create mode 100644 kadmos/external/D3_vispack/KADMOS_VisualizationPackage_170530/supportFiles/include/AGILE_Icon.png
 create mode 100644 kadmos/external/D3_vispack/KADMOS_VisualizationPackage_170530/supportFiles/include/KADMOS_VisualizationPack_Icon.png
 create mode 100644 kadmos/external/D3_vispack/KADMOS_VisualizationPackage_170530/supportFiles/include/KADMOS_VisualizationPack_Logo.png
 create mode 100644 kadmos/external/D3_vispack/KADMOS_VisualizationPackage_170530/supportFiles/include/RWTH_Logo.png
 create mode 100644 kadmos/external/D3_vispack/KADMOS_VisualizationPackage_170530/supportFiles/include/TUDelft_Logo.png
 create mode 100644 kadmos/external/D3_vispack/KADMOS_VisualizationPackage_170530/supportFiles/include/acknowledgements.html
 create mode 100644 kadmos/external/D3_vispack/KADMOS_VisualizationPackage_170530/supportFiles/json/empty_file
 create mode 100644 kadmos/external/D3_vispack/KADMOS_VisualizationPackage_170530/supportFiles/sankeyDiagram.html
 create mode 100644 kadmos/external/D3_vispack/KADMOS_VisualizationPackage_170530/supportFiles/sankeyDiagram.js
 create mode 100644 kadmos/external/D3_vispack/KADMOS_VisualizationPackage_170530/supportFiles/xdsm.html
 create mode 100644 kadmos/external/D3_vispack/KADMOS_VisualizationPackage_170530/supportFiles/xdsm.js

diff --git a/MANIFEST.in b/MANIFEST.in
index 15c6e7aa6..f138e6b31 100644
--- a/MANIFEST.in
+++ b/MANIFEST.in
@@ -10,10 +10,9 @@ graft kadmos/interface/templates
 graft kadmos/utilities/cmdows
 
 # Include current vispack templates
-graft kadmos/external/D3_vispack/KADMOS_VisualizationPackage_170403_Arial
-graft kadmos/external/D3_vispack/KADMOS_VisualizationPackage_170403_TrebuchetMS
 graft kadmos/external/D3_vispack/KADMOS_VisualizationPackage_170419
 graft kadmos/external/D3_vispack/KADMOS_VisualizationPackage_170523
+graft kadmos/external/D3_vispack/KADMOS_VisualizationPackage_170530
 
 # Include XDSM templates
 include kadmos/external/XDSM_writer/*.tex
diff --git a/kadmos/external/D3_vispack/KADMOS_VisualizationPackage_170530/KADMOS_VisPack.html b/kadmos/external/D3_vispack/KADMOS_VisualizationPackage_170530/KADMOS_VisPack.html
new file mode 100644
index 000000000..467ebf538
--- /dev/null
+++ b/kadmos/external/D3_vispack/KADMOS_VisualizationPackage_170530/KADMOS_VisPack.html
@@ -0,0 +1,845 @@
+<!DOCTYPE html>
+<meta charset="utf-8">
+<style>
+
+.ackn {
+fill: #666666;
+stroke: #666666;
+stroke-width: 2.0;
+}
+
+.acknGroup:hover .ackn{
+fill: #3399FF;
+stroke: #3399FF;
+}
+
+.newDiv {
+	position:relative;
+	top: -100px;
+	left: 220px;
+	background-color: none;
+}
+.newDiv a {
+    text-decoration: none;
+    color: white;
+    font-family: Arial;
+    font-size: 20pt;
+    padding-top: 12px;
+    padding-right: 12px;
+    padding-bottom: 12px;
+    padding-left: 6px;
+    display:inline-block;
+}
+ul {
+  display:  inline-block;;
+  margin: 0;
+  padding: 0;
+  background-color: #666666;
+}
+ul li {display: inline-block;}
+ul li:hover {background: #888;}
+ul li:hover ul {display: block;}
+ul li ul {
+  position: absolute;
+  min-width: 200px;
+  display: none;
+}
+ul li ul li { 
+  background: #555; 
+  display: block;
+}
+ul li ul li a {
+	display:block !important
+} 
+ul li ul li:hover {background: #3399FF;}
+
+.acknText {
+font-family: Arial;
+font-size: 12pt;
+fill: #666666;
+}
+
+</style>
+<head>
+	<title>KADMOS Visualization Package</title>
+	<script>
+	
+	/*!
+	 * Bowser - a browser detector
+	 * https://github.com/ded/bowser
+	 * MIT License | (c) Dustin Diaz 2015
+	 */
+
+	!function (root, name, definition) {
+	  if (typeof module != 'undefined' && module.exports) module.exports = definition()
+	  else if (typeof define == 'function' && define.amd) define(name, definition)
+	  else root[name] = definition()
+	}(this, 'bowser', function () {
+	  /**
+		* See useragents.js for examples of navigator.userAgent
+		*/
+
+	  var t = true
+
+	  function detect(ua) {
+
+		function getFirstMatch(regex) {
+		  var match = ua.match(regex);
+		  return (match && match.length > 1 && match[1]) || '';
+		}
+
+		function getSecondMatch(regex) {
+		  var match = ua.match(regex);
+		  return (match && match.length > 1 && match[2]) || '';
+		}
+
+		var iosdevice = getFirstMatch(/(ipod|iphone|ipad)/i).toLowerCase()
+		  , likeAndroid = /like android/i.test(ua)
+		  , android = !likeAndroid && /android/i.test(ua)
+		  , nexusMobile = /nexus\s*[0-6]\s*/i.test(ua)
+		  , nexusTablet = !nexusMobile && /nexus\s*[0-9]+/i.test(ua)
+		  , chromeos = /CrOS/.test(ua)
+		  , silk = /silk/i.test(ua)
+		  , sailfish = /sailfish/i.test(ua)
+		  , tizen = /tizen/i.test(ua)
+		  , webos = /(web|hpw)os/i.test(ua)
+		  , windowsphone = /windows phone/i.test(ua)
+		  , samsungBrowser = /SamsungBrowser/i.test(ua)
+		  , windows = !windowsphone && /windows/i.test(ua)
+		  , mac = !iosdevice && !silk && /macintosh/i.test(ua)
+		  , linux = !android && !sailfish && !tizen && !webos && /linux/i.test(ua)
+		  , edgeVersion = getFirstMatch(/edge\/(\d+(\.\d+)?)/i)
+		  , versionIdentifier = getFirstMatch(/version\/(\d+(\.\d+)?)/i)
+		  , tablet = /tablet/i.test(ua)
+		  , mobile = !tablet && /[^-]mobi/i.test(ua)
+		  , xbox = /xbox/i.test(ua)
+		  , result
+
+		if (/opera/i.test(ua)) {
+		  //  an old Opera
+		  result = {
+			name: 'Opera'
+		  , opera: t
+		  , version: versionIdentifier || getFirstMatch(/(?:opera|opr|opios)[\s\/](\d+(\.\d+)?)/i)
+		  }
+		} else if (/opr|opios/i.test(ua)) {
+		  // a new Opera
+		  result = {
+			name: 'Opera'
+			, opera: t
+			, version: getFirstMatch(/(?:opr|opios)[\s\/](\d+(\.\d+)?)/i) || versionIdentifier
+		  }
+		}
+		else if (/SamsungBrowser/i.test(ua)) {
+		  result = {
+			name: 'Samsung Internet for Android'
+			, samsungBrowser: t
+			, version: versionIdentifier || getFirstMatch(/(?:SamsungBrowser)[\s\/](\d+(\.\d+)?)/i)
+		  }
+		}
+		else if (/coast/i.test(ua)) {
+		  result = {
+			name: 'Opera Coast'
+			, coast: t
+			, version: versionIdentifier || getFirstMatch(/(?:coast)[\s\/](\d+(\.\d+)?)/i)
+		  }
+		}
+		else if (/yabrowser/i.test(ua)) {
+		  result = {
+			name: 'Yandex Browser'
+		  , yandexbrowser: t
+		  , version: versionIdentifier || getFirstMatch(/(?:yabrowser)[\s\/](\d+(\.\d+)?)/i)
+		  }
+		}
+		else if (/ucbrowser/i.test(ua)) {
+		  result = {
+			  name: 'UC Browser'
+			, ucbrowser: t
+			, version: getFirstMatch(/(?:ucbrowser)[\s\/](\d+(?:\.\d+)+)/i)
+		  }
+		}
+		else if (/mxios/i.test(ua)) {
+		  result = {
+			name: 'Maxthon'
+			, maxthon: t
+			, version: getFirstMatch(/(?:mxios)[\s\/](\d+(?:\.\d+)+)/i)
+		  }
+		}
+		else if (/epiphany/i.test(ua)) {
+		  result = {
+			name: 'Epiphany'
+			, epiphany: t
+			, version: getFirstMatch(/(?:epiphany)[\s\/](\d+(?:\.\d+)+)/i)
+		  }
+		}
+		else if (/puffin/i.test(ua)) {
+		  result = {
+			name: 'Puffin'
+			, puffin: t
+			, version: getFirstMatch(/(?:puffin)[\s\/](\d+(?:\.\d+)?)/i)
+		  }
+		}
+		else if (/sleipnir/i.test(ua)) {
+		  result = {
+			name: 'Sleipnir'
+			, sleipnir: t
+			, version: getFirstMatch(/(?:sleipnir)[\s\/](\d+(?:\.\d+)+)/i)
+		  }
+		}
+		else if (/k-meleon/i.test(ua)) {
+		  result = {
+			name: 'K-Meleon'
+			, kMeleon: t
+			, version: getFirstMatch(/(?:k-meleon)[\s\/](\d+(?:\.\d+)+)/i)
+		  }
+		}
+		else if (windowsphone) {
+		  result = {
+			name: 'Windows Phone'
+		  , windowsphone: t
+		  }
+		  if (edgeVersion) {
+			result.msedge = t
+			result.version = edgeVersion
+		  }
+		  else {
+			result.msie = t
+			result.version = getFirstMatch(/iemobile\/(\d+(\.\d+)?)/i)
+		  }
+		}
+		else if (/msie|trident/i.test(ua)) {
+		  result = {
+			name: 'Internet Explorer'
+		  , msie: t
+		  , version: getFirstMatch(/(?:msie |rv:)(\d+(\.\d+)?)/i)
+		  }
+		} else if (chromeos) {
+		  result = {
+			name: 'Chrome'
+		  , chromeos: t
+		  , chromeBook: t
+		  , chrome: t
+		  , version: getFirstMatch(/(?:chrome|crios|crmo)\/(\d+(\.\d+)?)/i)
+		  }
+		} else if (/chrome.+? edge/i.test(ua)) {
+		  result = {
+			name: 'Microsoft Edge'
+		  , msedge: t
+		  , version: edgeVersion
+		  }
+		}
+		else if (/vivaldi/i.test(ua)) {
+		  result = {
+			name: 'Vivaldi'
+			, vivaldi: t
+			, version: getFirstMatch(/vivaldi\/(\d+(\.\d+)?)/i) || versionIdentifier
+		  }
+		}
+		else if (sailfish) {
+		  result = {
+			name: 'Sailfish'
+		  , sailfish: t
+		  , version: getFirstMatch(/sailfish\s?browser\/(\d+(\.\d+)?)/i)
+		  }
+		}
+		else if (/seamonkey\//i.test(ua)) {
+		  result = {
+			name: 'SeaMonkey'
+		  , seamonkey: t
+		  , version: getFirstMatch(/seamonkey\/(\d+(\.\d+)?)/i)
+		  }
+		}
+		else if (/firefox|iceweasel|fxios/i.test(ua)) {
+		  result = {
+			name: 'Firefox'
+		  , firefox: t
+		  , version: getFirstMatch(/(?:firefox|iceweasel|fxios)[ \/](\d+(\.\d+)?)/i)
+		  }
+		  if (/\((mobile|tablet);[^\)]*rv:[\d\.]+\)/i.test(ua)) {
+			result.firefoxos = t
+		  }
+		}
+		else if (silk) {
+		  result =  {
+			name: 'Amazon Silk'
+		  , silk: t
+		  , version : getFirstMatch(/silk\/(\d+(\.\d+)?)/i)
+		  }
+		}
+		else if (/phantom/i.test(ua)) {
+		  result = {
+			name: 'PhantomJS'
+		  , phantom: t
+		  , version: getFirstMatch(/phantomjs\/(\d+(\.\d+)?)/i)
+		  }
+		}
+		else if (/slimerjs/i.test(ua)) {
+		  result = {
+			name: 'SlimerJS'
+			, slimer: t
+			, version: getFirstMatch(/slimerjs\/(\d+(\.\d+)?)/i)
+		  }
+		}
+		else if (/blackberry|\bbb\d+/i.test(ua) || /rim\stablet/i.test(ua)) {
+		  result = {
+			name: 'BlackBerry'
+		  , blackberry: t
+		  , version: versionIdentifier || getFirstMatch(/blackberry[\d]+\/(\d+(\.\d+)?)/i)
+		  }
+		}
+		else if (webos) {
+		  result = {
+			name: 'WebOS'
+		  , webos: t
+		  , version: versionIdentifier || getFirstMatch(/w(?:eb)?osbrowser\/(\d+(\.\d+)?)/i)
+		  };
+		  /touchpad\//i.test(ua) && (result.touchpad = t)
+		}
+		else if (/bada/i.test(ua)) {
+		  result = {
+			name: 'Bada'
+		  , bada: t
+		  , version: getFirstMatch(/dolfin\/(\d+(\.\d+)?)/i)
+		  };
+		}
+		else if (tizen) {
+		  result = {
+			name: 'Tizen'
+		  , tizen: t
+		  , version: getFirstMatch(/(?:tizen\s?)?browser\/(\d+(\.\d+)?)/i) || versionIdentifier
+		  };
+		}
+		else if (/qupzilla/i.test(ua)) {
+		  result = {
+			name: 'QupZilla'
+			, qupzilla: t
+			, version: getFirstMatch(/(?:qupzilla)[\s\/](\d+(?:\.\d+)+)/i) || versionIdentifier
+		  }
+		}
+		else if (/chromium/i.test(ua)) {
+		  result = {
+			name: 'Chromium'
+			, chromium: t
+			, version: getFirstMatch(/(?:chromium)[\s\/](\d+(?:\.\d+)?)/i) || versionIdentifier
+		  }
+		}
+		else if (/chrome|crios|crmo/i.test(ua)) {
+		  result = {
+			name: 'Chrome'
+			, chrome: t
+			, version: getFirstMatch(/(?:chrome|crios|crmo)\/(\d+(\.\d+)?)/i)
+		  }
+		}
+		else if (android) {
+		  result = {
+			name: 'Android'
+			, version: versionIdentifier
+		  }
+		}
+		else if (/safari|applewebkit/i.test(ua)) {
+		  result = {
+			name: 'Safari'
+		  , safari: t
+		  }
+		  if (versionIdentifier) {
+			result.version = versionIdentifier
+		  }
+		}
+		else if (iosdevice) {
+		  result = {
+			name : iosdevice == 'iphone' ? 'iPhone' : iosdevice == 'ipad' ? 'iPad' : 'iPod'
+		  }
+		  // WTF: version is not part of user agent in web apps
+		  if (versionIdentifier) {
+			result.version = versionIdentifier
+		  }
+		}
+		else if(/googlebot/i.test(ua)) {
+		  result = {
+			name: 'Googlebot'
+		  , googlebot: t
+		  , version: getFirstMatch(/googlebot\/(\d+(\.\d+))/i) || versionIdentifier
+		  }
+		}
+		else {
+		  result = {
+			name: getFirstMatch(/^(.*)\/(.*) /),
+			version: getSecondMatch(/^(.*)\/(.*) /)
+		 };
+	   }
+
+		// set webkit or gecko flag for browsers based on these engines
+		if (!result.msedge && /(apple)?webkit/i.test(ua)) {
+		  if (/(apple)?webkit\/537\.36/i.test(ua)) {
+			result.name = result.name || "Blink"
+			result.blink = t
+		  } else {
+			result.name = result.name || "Webkit"
+			result.webkit = t
+		  }
+		  if (!result.version && versionIdentifier) {
+			result.version = versionIdentifier
+		  }
+		} else if (!result.opera && /gecko\//i.test(ua)) {
+		  result.name = result.name || "Gecko"
+		  result.gecko = t
+		  result.version = result.version || getFirstMatch(/gecko\/(\d+(\.\d+)?)/i)
+		}
+
+		// set OS flags for platforms that have multiple browsers
+		if (!result.windowsphone && !result.msedge && (android || result.silk)) {
+		  result.android = t
+		} else if (!result.windowsphone && !result.msedge && iosdevice) {
+		  result[iosdevice] = t
+		  result.ios = t
+		} else if (mac) {
+		  result.mac = t
+		} else if (xbox) {
+		  result.xbox = t
+		} else if (windows) {
+		  result.windows = t
+		} else if (linux) {
+		  result.linux = t
+		}
+
+		function getWindowsVersion (s) {
+		  switch (s) {
+			case 'NT': return 'NT'
+			case 'XP': return 'XP'
+			case 'NT 5.0': return '2000'
+			case 'NT 5.1': return 'XP'
+			case 'NT 5.2': return '2003'
+			case 'NT 6.0': return 'Vista'
+			case 'NT 6.1': return '7'
+			case 'NT 6.2': return '8'
+			case 'NT 6.3': return '8.1'
+			case 'NT 10.0': return '10'
+			default: return undefined
+		  }
+		}
+		
+		// OS version extraction
+		var osVersion = '';
+		if (result.windows) {
+		  osVersion = getWindowsVersion(getFirstMatch(/Windows ((NT|XP)( \d\d?.\d)?)/i))
+		} else if (result.windowsphone) {
+		  osVersion = getFirstMatch(/windows phone (?:os)?\s?(\d+(\.\d+)*)/i);
+		} else if (result.mac) {
+		  osVersion = getFirstMatch(/Mac OS X (\d+([_\.\s]\d+)*)/i);
+		  osVersion = osVersion.replace(/[_\s]/g, '.');
+		} else if (iosdevice) {
+		  osVersion = getFirstMatch(/os (\d+([_\s]\d+)*) like mac os x/i);
+		  osVersion = osVersion.replace(/[_\s]/g, '.');
+		} else if (android) {
+		  osVersion = getFirstMatch(/android[ \/-](\d+(\.\d+)*)/i);
+		} else if (result.webos) {
+		  osVersion = getFirstMatch(/(?:web|hpw)os\/(\d+(\.\d+)*)/i);
+		} else if (result.blackberry) {
+		  osVersion = getFirstMatch(/rim\stablet\sos\s(\d+(\.\d+)*)/i);
+		} else if (result.bada) {
+		  osVersion = getFirstMatch(/bada\/(\d+(\.\d+)*)/i);
+		} else if (result.tizen) {
+		  osVersion = getFirstMatch(/tizen[\/\s](\d+(\.\d+)*)/i);
+		}
+		if (osVersion) {
+		  result.osversion = osVersion;
+		}
+
+		// device type extraction
+		var osMajorVersion = !result.windows && osVersion.split('.')[0];
+		if (
+			 tablet
+		  || nexusTablet
+		  || iosdevice == 'ipad'
+		  || (android && (osMajorVersion == 3 || (osMajorVersion >= 4 && !mobile)))
+		  || result.silk
+		) {
+		  result.tablet = t
+		} else if (
+			 mobile
+		  || iosdevice == 'iphone'
+		  || iosdevice == 'ipod'
+		  || android
+		  || nexusMobile
+		  || result.blackberry
+		  || result.webos
+		  || result.bada
+		) {
+		  result.mobile = t
+		}
+
+		// Graded Browser Support
+		// http://developer.yahoo.com/yui/articles/gbs
+		if (result.msedge ||
+			(result.msie && result.version >= 10) ||
+			(result.yandexbrowser && result.version >= 15) ||
+				(result.vivaldi && result.version >= 1.0) ||
+			(result.chrome && result.version >= 20) ||
+			(result.samsungBrowser && result.version >= 4) ||
+			(result.firefox && result.version >= 20.0) ||
+			(result.safari && result.version >= 6) ||
+			(result.opera && result.version >= 10.0) ||
+			(result.ios && result.osversion && result.osversion.split(".")[0] >= 6) ||
+			(result.blackberry && result.version >= 10.1)
+			|| (result.chromium && result.version >= 20)
+			) {
+		  result.a = t;
+		}
+		else if ((result.msie && result.version < 10) ||
+			(result.chrome && result.version < 20) ||
+			(result.firefox && result.version < 20.0) ||
+			(result.safari && result.version < 6) ||
+			(result.opera && result.version < 10.0) ||
+			(result.ios && result.osversion && result.osversion.split(".")[0] < 6)
+			|| (result.chromium && result.version < 20)
+			) {
+		  result.c = t
+		} else result.x = t
+
+		return result
+	  }
+
+	  var bowser = detect(typeof navigator !== 'undefined' ? navigator.userAgent || '' : '')
+
+	  bowser.test = function (browserList) {
+		for (var i = 0; i < browserList.length; ++i) {
+		  var browserItem = browserList[i];
+		  if (typeof browserItem=== 'string') {
+			if (browserItem in bowser) {
+			  return true;
+			}
+		  }
+		}
+		return false;
+	  }
+
+	  /**
+	   * Get version precisions count
+	   *
+	   * @example
+	   *   getVersionPrecision("1.10.3") // 3
+	   *
+	   * @param  {string} version
+	   * @return {number}
+	   */
+	  function getVersionPrecision(version) {
+		return version.split(".").length;
+	  }
+
+	  /**
+	   * Array::map polyfill
+	   *
+	   * @param  {Array} arr
+	   * @param  {Function} iterator
+	   * @return {Array}
+	   */
+	  function map(arr, iterator) {
+		var result = [], i;
+		if (Array.prototype.map) {
+		  return Array.prototype.map.call(arr, iterator);
+		}
+		for (i = 0; i < arr.length; i++) {
+		  result.push(iterator(arr[i]));
+		}
+		return result;
+	  }
+
+	  /**
+	   * Calculate browser version weight
+	   *
+	   * @example
+	   *   compareVersions(['1.10.2.1',  '1.8.2.1.90'])    // 1
+	   *   compareVersions(['1.010.2.1', '1.09.2.1.90']);  // 1
+	   *   compareVersions(['1.10.2.1',  '1.10.2.1']);     // 0
+	   *   compareVersions(['1.10.2.1',  '1.0800.2']);     // -1
+	   *
+	   * @param  {Array<String>} versions versions to compare
+	   * @return {Number} comparison result
+	   */
+	  function compareVersions(versions) {
+		// 1) get common precision for both versions, for example for "10.0" and "9" it should be 2
+		var precision = Math.max(getVersionPrecision(versions[0]), getVersionPrecision(versions[1]));
+		var chunks = map(versions, function (version) {
+		  var delta = precision - getVersionPrecision(version);
+
+		  // 2) "9" -> "9.0" (for precision = 2)
+		  version = version + new Array(delta + 1).join(".0");
+
+		  // 3) "9.0" -> ["000000000"", "000000009"]
+		  return map(version.split("."), function (chunk) {
+			return new Array(20 - chunk.length).join("0") + chunk;
+		  }).reverse();
+		});
+
+		// iterate in reverse order by reversed chunks array
+		while (--precision >= 0) {
+		  // 4) compare: "000000009" > "000000010" = false (but "9" > "10" = true)
+		  if (chunks[0][precision] > chunks[1][precision]) {
+			return 1;
+		  }
+		  else if (chunks[0][precision] === chunks[1][precision]) {
+			if (precision === 0) {
+			  // all version chunks are same
+			  return 0;
+			}
+		  }
+		  else {
+			return -1;
+		  }
+		}
+	  }
+
+	  /**
+	   * Check if browser is unsupported
+	   *
+	   * @example
+	   *   bowser.isUnsupportedBrowser({
+	   *     msie: "10",
+	   *     firefox: "23",
+	   *     chrome: "29",
+	   *     safari: "5.1",
+	   *     opera: "16",
+	   *     phantom: "534"
+	   *   });
+	   *
+	   * @param  {Object}  minVersions map of minimal version to browser
+	   * @param  {Boolean} [strictMode = false] flag to return false if browser wasn't found in map
+	   * @param  {String}  [ua] user agent string
+	   * @return {Boolean}
+	   */
+	  function isUnsupportedBrowser(minVersions, strictMode, ua) {
+		var _bowser = bowser;
+
+		// make strictMode param optional with ua param usage
+		if (typeof strictMode === 'string') {
+		  ua = strictMode;
+		  strictMode = void(0);
+		}
+
+		if (strictMode === void(0)) {
+		  strictMode = false;
+		}
+		if (ua) {
+		  _bowser = detect(ua);
+		}
+
+		var version = "" + _bowser.version;
+		for (var browser in minVersions) {
+		  if (minVersions.hasOwnProperty(browser)) {
+			if (_bowser[browser]) {
+			  if (typeof minVersions[browser] !== 'string') {
+				throw new Error('Browser version in the minVersion map should be a string: ' + browser + ': ' + String(minVersions));
+			  }
+
+			  // browser version and min supported version.
+			  return compareVersions([version, minVersions[browser]]) < 0;
+			}
+		  }
+		}
+
+		return strictMode; // not found
+	  }
+
+	  /**
+	   * Check if browser is supported
+	   *
+	   * @param  {Object} minVersions map of minimal version to browser
+	   * @param  {Boolean} [strictMode = false] flag to return false if browser wasn't found in map
+	   * @param  {String}  [ua] user agent string
+	   * @return {Boolean}
+	   */
+	  function check(minVersions, strictMode, ua) {
+		return !isUnsupportedBrowser(minVersions, strictMode, ua);
+	  }
+
+	  bowser.isUnsupportedBrowser = isUnsupportedBrowser;
+	  bowser.compareVersions = compareVersions;
+	  bowser.check = check;
+
+	  /*
+	   * Set our detect method to the main bowser object so we can
+	   * reuse it to test other user agents.
+	   * This is needed to implement future tests.
+	   */
+	  bowser._detect = detect;
+
+	  return bowser
+	});
+	
+	if (bowser.name!="Firefox"&&bowser.name!="Safari")
+	{
+	alert("OOPS! The KADMOS Visualization Package unfortunately does not work on " + bowser.name + ". Please use Firefox or Safari to see its awesome visualization features!")
+	}
+	
+	!function(){function n(n){return n&&(n.ownerDocument||n.document||n).documentElement}function t(n){return n&&(n.ownerDocument&&n.ownerDocument.defaultView||n.document&&n||n.defaultView)}function e(n,t){return t>n?-1:n>t?1:n>=t?0:NaN}function r(n){return null===n?NaN:+n}function i(n){return!isNaN(n)}function u(n){return{left:function(t,e,r,i){for(arguments.length<3&&(r=0),arguments.length<4&&(i=t.length);i>r;){var u=r+i>>>1;n(t[u],e)<0?r=u+1:i=u}return r},right:function(t,e,r,i){for(arguments.length<3&&(r=0),arguments.length<4&&(i=t.length);i>r;){var u=r+i>>>1;n(t[u],e)>0?i=u:r=u+1}return r}}}function o(n){return n.length}function a(n){for(var t=1;n*t%1;)t*=10;return t}function l(n,t){for(var e in t)Object.defineProperty(n.prototype,e,{value:t[e],enumerable:!1})}function c(){this._=Object.create(null)}function f(n){return(n+="")===bo||n[0]===_o?_o+n:n}function s(n){return(n+="")[0]===_o?n.slice(1):n}function h(n){return f(n)in this._}function p(n){return(n=f(n))in this._&&delete this._[n]}function g(){var n=[];for(var t in this._)n.push(s(t));return n}function v(){var n=0;for(var t in this._)++n;return n}function d(){for(var n in this._)return!1;return!0}function y(){this._=Object.create(null)}function m(n){return n}function M(n,t,e){return function(){var r=e.apply(t,arguments);return r===t?n:r}}function x(n,t){if(t in n)return t;t=t.charAt(0).toUpperCase()+t.slice(1);for(var e=0,r=wo.length;r>e;++e){var i=wo[e]+t;if(i in n)return i}}function b(){}function _(){}function w(n){function t(){for(var t,r=e,i=-1,u=r.length;++i<u;)(t=r[i].on)&&t.apply(this,arguments);return n}var e=[],r=new c;return t.on=function(t,i){var u,o=r.get(t);return arguments.length<2?o&&o.on:(o&&(o.on=null,e=e.slice(0,u=e.indexOf(o)).concat(e.slice(u+1)),r.remove(t)),i&&e.push(r.set(t,{on:i})),n)},t}function S(){ao.event.preventDefault()}function k(){for(var n,t=ao.event;n=t.sourceEvent;)t=n;return t}function N(n){for(var t=new _,e=0,r=arguments.length;++e<r;)t[arguments[e]]=w(t);return t.of=function(e,r){return function(i){try{var u=i.sourceEvent=ao.event;i.target=n,ao.event=i,t[i.type].apply(e,r)}finally{ao.event=u}}},t}function E(n){return ko(n,Co),n}function A(n){return"function"==typeof n?n:function(){return No(n,this)}}function C(n){return"function"==typeof n?n:function(){return Eo(n,this)}}function z(n,t){function e(){this.removeAttribute(n)}function r(){this.removeAttributeNS(n.space,n.local)}function i(){this.setAttribute(n,t)}function u(){this.setAttributeNS(n.space,n.local,t)}function o(){var e=t.apply(this,arguments);null==e?this.removeAttribute(n):this.setAttribute(n,e)}function a(){var e=t.apply(this,arguments);null==e?this.removeAttributeNS(n.space,n.local):this.setAttributeNS(n.space,n.local,e)}return n=ao.ns.qualify(n),null==t?n.local?r:e:"function"==typeof t?n.local?a:o:n.local?u:i}function L(n){return n.trim().replace(/\s+/g," ")}function q(n){return new RegExp("(?:^|\\s+)"+ao.requote(n)+"(?:\\s+|$)","g")}function T(n){return(n+"").trim().split(/^|\s+/)}function R(n,t){function e(){for(var e=-1;++e<i;)n[e](this,t)}function r(){for(var e=-1,r=t.apply(this,arguments);++e<i;)n[e](this,r)}n=T(n).map(D);var i=n.length;return"function"==typeof t?r:e}function D(n){var t=q(n);return function(e,r){if(i=e.classList)return r?i.add(n):i.remove(n);var i=e.getAttribute("class")||"";r?(t.lastIndex=0,t.test(i)||e.setAttribute("class",L(i+" "+n))):e.setAttribute("class",L(i.replace(t," ")))}}function P(n,t,e){function r(){this.style.removeProperty(n)}function i(){this.style.setProperty(n,t,e)}function u(){var r=t.apply(this,arguments);null==r?this.style.removeProperty(n):this.style.setProperty(n,r,e)}return null==t?r:"function"==typeof t?u:i}function U(n,t){function e(){delete this[n]}function r(){this[n]=t}function i(){var e=t.apply(this,arguments);null==e?delete this[n]:this[n]=e}return null==t?e:"function"==typeof t?i:r}function j(n){function t(){var t=this.ownerDocument,e=this.namespaceURI;return e===zo&&t.documentElement.namespaceURI===zo?t.createElement(n):t.createElementNS(e,n)}function e(){return this.ownerDocument.createElementNS(n.space,n.local)}return"function"==typeof n?n:(n=ao.ns.qualify(n)).local?e:t}function F(){var n=this.parentNode;n&&n.removeChild(this)}function H(n){return{__data__:n}}function O(n){return function(){return Ao(this,n)}}function I(n){return arguments.length||(n=e),function(t,e){return t&&e?n(t.__data__,e.__data__):!t-!e}}function Y(n,t){for(var e=0,r=n.length;r>e;e++)for(var i,u=n[e],o=0,a=u.length;a>o;o++)(i=u[o])&&t(i,o,e);return n}function Z(n){return ko(n,qo),n}function V(n){var t,e;return function(r,i,u){var o,a=n[u].update,l=a.length;for(u!=e&&(e=u,t=0),i>=t&&(t=i+1);!(o=a[t])&&++t<l;);return o}}function X(n,t,e){function r(){var t=this[o];t&&(this.removeEventListener(n,t,t.$),delete this[o])}function i(){var i=l(t,co(arguments));r.call(this),this.addEventListener(n,this[o]=i,i.$=e),i._=t}function u(){var t,e=new RegExp("^__on([^.]+)"+ao.requote(n)+"$");for(var r in this)if(t=r.match(e)){var i=this[r];this.removeEventListener(t[1],i,i.$),delete this[r]}}var o="__on"+n,a=n.indexOf("."),l=$;a>0&&(n=n.slice(0,a));var c=To.get(n);return c&&(n=c,l=B),a?t?i:r:t?b:u}function $(n,t){return function(e){var r=ao.event;ao.event=e,t[0]=this.__data__;try{n.apply(this,t)}finally{ao.event=r}}}function B(n,t){var e=$(n,t);return function(n){var t=this,r=n.relatedTarget;r&&(r===t||8&r.compareDocumentPosition(t))||e.call(t,n)}}function W(e){var r=".dragsuppress-"+ ++Do,i="click"+r,u=ao.select(t(e)).on("touchmove"+r,S).on("dragstart"+r,S).on("selectstart"+r,S);if(null==Ro&&(Ro="onselectstart"in e?!1:x(e.style,"userSelect")),Ro){var o=n(e).style,a=o[Ro];o[Ro]="none"}return function(n){if(u.on(r,null),Ro&&(o[Ro]=a),n){var t=function(){u.on(i,null)};u.on(i,function(){S(),t()},!0),setTimeout(t,0)}}}function J(n,e){e.changedTouches&&(e=e.changedTouches[0]);var r=n.ownerSVGElement||n;if(r.createSVGPoint){var i=r.createSVGPoint();if(0>Po){var u=t(n);if(u.scrollX||u.scrollY){r=ao.select("body").append("svg").style({position:"absolute",top:0,left:0,margin:0,padding:0,border:"none"},"important");var o=r[0][0].getScreenCTM();Po=!(o.f||o.e),r.remove()}}return Po?(i.x=e.pageX,i.y=e.pageY):(i.x=e.clientX,i.y=e.clientY),i=i.matrixTransform(n.getScreenCTM().inverse()),[i.x,i.y]}var a=n.getBoundingClientRect();return[e.clientX-a.left-n.clientLeft,e.clientY-a.top-n.clientTop]}function G(){return ao.event.changedTouches[0].identifier}function K(n){return n>0?1:0>n?-1:0}function Q(n,t,e){return(t[0]-n[0])*(e[1]-n[1])-(t[1]-n[1])*(e[0]-n[0])}function nn(n){return n>1?0:-1>n?Fo:Math.acos(n)}function tn(n){return n>1?Io:-1>n?-Io:Math.asin(n)}function en(n){return((n=Math.exp(n))-1/n)/2}function rn(n){return((n=Math.exp(n))+1/n)/2}function un(n){return((n=Math.exp(2*n))-1)/(n+1)}function on(n){return(n=Math.sin(n/2))*n}function an(){}function ln(n,t,e){return this instanceof ln?(this.h=+n,this.s=+t,void(this.l=+e)):arguments.length<2?n instanceof ln?new ln(n.h,n.s,n.l):_n(""+n,wn,ln):new ln(n,t,e)}function cn(n,t,e){function r(n){return n>360?n-=360:0>n&&(n+=360),60>n?u+(o-u)*n/60:180>n?o:240>n?u+(o-u)*(240-n)/60:u}function i(n){return Math.round(255*r(n))}var u,o;return n=isNaN(n)?0:(n%=360)<0?n+360:n,t=isNaN(t)?0:0>t?0:t>1?1:t,e=0>e?0:e>1?1:e,o=.5>=e?e*(1+t):e+t-e*t,u=2*e-o,new mn(i(n+120),i(n),i(n-120))}function fn(n,t,e){return this instanceof fn?(this.h=+n,this.c=+t,void(this.l=+e)):arguments.length<2?n instanceof fn?new fn(n.h,n.c,n.l):n instanceof hn?gn(n.l,n.a,n.b):gn((n=Sn((n=ao.rgb(n)).r,n.g,n.b)).l,n.a,n.b):new fn(n,t,e)}function sn(n,t,e){return isNaN(n)&&(n=0),isNaN(t)&&(t=0),new hn(e,Math.cos(n*=Yo)*t,Math.sin(n)*t)}function hn(n,t,e){return this instanceof hn?(this.l=+n,this.a=+t,void(this.b=+e)):arguments.length<2?n instanceof hn?new hn(n.l,n.a,n.b):n instanceof fn?sn(n.h,n.c,n.l):Sn((n=mn(n)).r,n.g,n.b):new hn(n,t,e)}function pn(n,t,e){var r=(n+16)/116,i=r+t/500,u=r-e/200;return i=vn(i)*na,r=vn(r)*ta,u=vn(u)*ea,new mn(yn(3.2404542*i-1.5371385*r-.4985314*u),yn(-.969266*i+1.8760108*r+.041556*u),yn(.0556434*i-.2040259*r+1.0572252*u))}function gn(n,t,e){return n>0?new fn(Math.atan2(e,t)*Zo,Math.sqrt(t*t+e*e),n):new fn(NaN,NaN,n)}function vn(n){return n>.206893034?n*n*n:(n-4/29)/7.787037}function dn(n){return n>.008856?Math.pow(n,1/3):7.787037*n+4/29}function yn(n){return Math.round(255*(.00304>=n?12.92*n:1.055*Math.pow(n,1/2.4)-.055))}function mn(n,t,e){return this instanceof mn?(this.r=~~n,this.g=~~t,void(this.b=~~e)):arguments.length<2?n instanceof mn?new mn(n.r,n.g,n.b):_n(""+n,mn,cn):new mn(n,t,e)}function Mn(n){return new mn(n>>16,n>>8&255,255&n)}function xn(n){return Mn(n)+""}function bn(n){return 16>n?"0"+Math.max(0,n).toString(16):Math.min(255,n).toString(16)}function _n(n,t,e){var r,i,u,o=0,a=0,l=0;if(r=/([a-z]+)\((.*)\)/.exec(n=n.toLowerCase()))switch(i=r[2].split(","),r[1]){case"hsl":return e(parseFloat(i[0]),parseFloat(i[1])/100,parseFloat(i[2])/100);case"rgb":return t(Nn(i[0]),Nn(i[1]),Nn(i[2]))}return(u=ua.get(n))?t(u.r,u.g,u.b):(null==n||"#"!==n.charAt(0)||isNaN(u=parseInt(n.slice(1),16))||(4===n.length?(o=(3840&u)>>4,o=o>>4|o,a=240&u,a=a>>4|a,l=15&u,l=l<<4|l):7===n.length&&(o=(16711680&u)>>16,a=(65280&u)>>8,l=255&u)),t(o,a,l))}function wn(n,t,e){var r,i,u=Math.min(n/=255,t/=255,e/=255),o=Math.max(n,t,e),a=o-u,l=(o+u)/2;return a?(i=.5>l?a/(o+u):a/(2-o-u),r=n==o?(t-e)/a+(e>t?6:0):t==o?(e-n)/a+2:(n-t)/a+4,r*=60):(r=NaN,i=l>0&&1>l?0:r),new ln(r,i,l)}function Sn(n,t,e){n=kn(n),t=kn(t),e=kn(e);var r=dn((.4124564*n+.3575761*t+.1804375*e)/na),i=dn((.2126729*n+.7151522*t+.072175*e)/ta),u=dn((.0193339*n+.119192*t+.9503041*e)/ea);return hn(116*i-16,500*(r-i),200*(i-u))}function kn(n){return(n/=255)<=.04045?n/12.92:Math.pow((n+.055)/1.055,2.4)}function Nn(n){var t=parseFloat(n);return"%"===n.charAt(n.length-1)?Math.round(2.55*t):t}function En(n){return"function"==typeof n?n:function(){return n}}function An(n){return function(t,e,r){return 2===arguments.length&&"function"==typeof e&&(r=e,e=null),Cn(t,e,n,r)}}function Cn(n,t,e,r){function i(){var n,t=l.status;if(!t&&Ln(l)||t>=200&&300>t||304===t){try{n=e.call(u,l)}catch(r){return void o.error.call(u,r)}o.load.call(u,n)}else o.error.call(u,l)}var u={},o=ao.dispatch("beforesend","progress","load","error"),a={},l=new XMLHttpRequest,c=null;return!this.XDomainRequest||"withCredentials"in l||!/^(http(s)?:)?\/\//.test(n)||(l=new XDomainRequest),"onload"in l?l.onload=l.onerror=i:l.onreadystatechange=function(){l.readyState>3&&i()},l.onprogress=function(n){var t=ao.event;ao.event=n;try{o.progress.call(u,l)}finally{ao.event=t}},u.header=function(n,t){return n=(n+"").toLowerCase(),arguments.length<2?a[n]:(null==t?delete a[n]:a[n]=t+"",u)},u.mimeType=function(n){return arguments.length?(t=null==n?null:n+"",u):t},u.responseType=function(n){return arguments.length?(c=n,u):c},u.response=function(n){return e=n,u},["get","post"].forEach(function(n){u[n]=function(){return u.send.apply(u,[n].concat(co(arguments)))}}),u.send=function(e,r,i){if(2===arguments.length&&"function"==typeof r&&(i=r,r=null),l.open(e,n,!0),null==t||"accept"in a||(a.accept=t+",*/*"),l.setRequestHeader)for(var f in a)l.setRequestHeader(f,a[f]);return null!=t&&l.overrideMimeType&&l.overrideMimeType(t),null!=c&&(l.responseType=c),null!=i&&u.on("error",i).on("load",function(n){i(null,n)}),o.beforesend.call(u,l),l.send(null==r?null:r),u},u.abort=function(){return l.abort(),u},ao.rebind(u,o,"on"),null==r?u:u.get(zn(r))}function zn(n){return 1===n.length?function(t,e){n(null==t?e:null)}:n}function Ln(n){var t=n.responseType;return t&&"text"!==t?n.response:n.responseText}function qn(n,t,e){var r=arguments.length;2>r&&(t=0),3>r&&(e=Date.now());var i=e+t,u={c:n,t:i,n:null};return aa?aa.n=u:oa=u,aa=u,la||(ca=clearTimeout(ca),la=1,fa(Tn)),u}function Tn(){var n=Rn(),t=Dn()-n;t>24?(isFinite(t)&&(clearTimeout(ca),ca=setTimeout(Tn,t)),la=0):(la=1,fa(Tn))}function Rn(){for(var n=Date.now(),t=oa;t;)n>=t.t&&t.c(n-t.t)&&(t.c=null),t=t.n;return n}function Dn(){for(var n,t=oa,e=1/0;t;)t.c?(t.t<e&&(e=t.t),t=(n=t).n):t=n?n.n=t.n:oa=t.n;return aa=n,e}function Pn(n,t){return t-(n?Math.ceil(Math.log(n)/Math.LN10):1)}function Un(n,t){var e=Math.pow(10,3*xo(8-t));return{scale:t>8?function(n){return n/e}:function(n){return n*e},symbol:n}}function jn(n){var t=n.decimal,e=n.thousands,r=n.grouping,i=n.currency,u=r&&e?function(n,t){for(var i=n.length,u=[],o=0,a=r[0],l=0;i>0&&a>0&&(l+a+1>t&&(a=Math.max(1,t-l)),u.push(n.substring(i-=a,i+a)),!((l+=a+1)>t));)a=r[o=(o+1)%r.length];return u.reverse().join(e)}:m;return function(n){var e=ha.exec(n),r=e[1]||" ",o=e[2]||">",a=e[3]||"-",l=e[4]||"",c=e[5],f=+e[6],s=e[7],h=e[8],p=e[9],g=1,v="",d="",y=!1,m=!0;switch(h&&(h=+h.substring(1)),(c||"0"===r&&"="===o)&&(c=r="0",o="="),p){case"n":s=!0,p="g";break;case"%":g=100,d="%",p="f";break;case"p":g=100,d="%",p="r";break;case"b":case"o":case"x":case"X":"#"===l&&(v="0"+p.toLowerCase());case"c":m=!1;case"d":y=!0,h=0;break;case"s":g=-1,p="r"}"$"===l&&(v=i[0],d=i[1]),"r"!=p||h||(p="g"),null!=h&&("g"==p?h=Math.max(1,Math.min(21,h)):"e"!=p&&"f"!=p||(h=Math.max(0,Math.min(20,h)))),p=pa.get(p)||Fn;var M=c&&s;return function(n){var e=d;if(y&&n%1)return"";var i=0>n||0===n&&0>1/n?(n=-n,"-"):"-"===a?"":a;if(0>g){var l=ao.formatPrefix(n,h);n=l.scale(n),e=l.symbol+d}else n*=g;n=p(n,h);var x,b,_=n.lastIndexOf(".");if(0>_){var w=m?n.lastIndexOf("e"):-1;0>w?(x=n,b=""):(x=n.substring(0,w),b=n.substring(w))}else x=n.substring(0,_),b=t+n.substring(_+1);!c&&s&&(x=u(x,1/0));var S=v.length+x.length+b.length+(M?0:i.length),k=f>S?new Array(S=f-S+1).join(r):"";return M&&(x=u(k+x,k.length?f-b.length:1/0)),i+=v,n=x+b,("<"===o?i+n+k:">"===o?k+i+n:"^"===o?k.substring(0,S>>=1)+i+n+k.substring(S):i+(M?n:k+n))+e}}}function Fn(n){return n+""}function Hn(){this._=new Date(arguments.length>1?Date.UTC.apply(this,arguments):arguments[0])}function On(n,t,e){function r(t){var e=n(t),r=u(e,1);return r-t>t-e?e:r}function i(e){return t(e=n(new va(e-1)),1),e}function u(n,e){return t(n=new va(+n),e),n}function o(n,r,u){var o=i(n),a=[];if(u>1)for(;r>o;)e(o)%u||a.push(new Date(+o)),t(o,1);else for(;r>o;)a.push(new Date(+o)),t(o,1);return a}function a(n,t,e){try{va=Hn;var r=new Hn;return r._=n,o(r,t,e)}finally{va=Date}}n.floor=n,n.round=r,n.ceil=i,n.offset=u,n.range=o;var l=n.utc=In(n);return l.floor=l,l.round=In(r),l.ceil=In(i),l.offset=In(u),l.range=a,n}function In(n){return function(t,e){try{va=Hn;var r=new Hn;return r._=t,n(r,e)._}finally{va=Date}}}function Yn(n){function t(n){function t(t){for(var e,i,u,o=[],a=-1,l=0;++a<r;)37===n.charCodeAt(a)&&(o.push(n.slice(l,a)),null!=(i=ya[e=n.charAt(++a)])&&(e=n.charAt(++a)),(u=A[e])&&(e=u(t,null==i?"e"===e?" ":"0":i)),o.push(e),l=a+1);return o.push(n.slice(l,a)),o.join("")}var r=n.length;return t.parse=function(t){var r={y:1900,m:0,d:1,H:0,M:0,S:0,L:0,Z:null},i=e(r,n,t,0);if(i!=t.length)return null;"p"in r&&(r.H=r.H%12+12*r.p);var u=null!=r.Z&&va!==Hn,o=new(u?Hn:va);return"j"in r?o.setFullYear(r.y,0,r.j):"W"in r||"U"in r?("w"in r||(r.w="W"in r?1:0),o.setFullYear(r.y,0,1),o.setFullYear(r.y,0,"W"in r?(r.w+6)%7+7*r.W-(o.getDay()+5)%7:r.w+7*r.U-(o.getDay()+6)%7)):o.setFullYear(r.y,r.m,r.d),o.setHours(r.H+(r.Z/100|0),r.M+r.Z%100,r.S,r.L),u?o._:o},t.toString=function(){return n},t}function e(n,t,e,r){for(var i,u,o,a=0,l=t.length,c=e.length;l>a;){if(r>=c)return-1;if(i=t.charCodeAt(a++),37===i){if(o=t.charAt(a++),u=C[o in ya?t.charAt(a++):o],!u||(r=u(n,e,r))<0)return-1}else if(i!=e.charCodeAt(r++))return-1}return r}function r(n,t,e){_.lastIndex=0;var r=_.exec(t.slice(e));return r?(n.w=w.get(r[0].toLowerCase()),e+r[0].length):-1}function i(n,t,e){x.lastIndex=0;var r=x.exec(t.slice(e));return r?(n.w=b.get(r[0].toLowerCase()),e+r[0].length):-1}function u(n,t,e){N.lastIndex=0;var r=N.exec(t.slice(e));return r?(n.m=E.get(r[0].toLowerCase()),e+r[0].length):-1}function o(n,t,e){S.lastIndex=0;var r=S.exec(t.slice(e));return r?(n.m=k.get(r[0].toLowerCase()),e+r[0].length):-1}function a(n,t,r){return e(n,A.c.toString(),t,r)}function l(n,t,r){return e(n,A.x.toString(),t,r)}function c(n,t,r){return e(n,A.X.toString(),t,r)}function f(n,t,e){var r=M.get(t.slice(e,e+=2).toLowerCase());return null==r?-1:(n.p=r,e)}var s=n.dateTime,h=n.date,p=n.time,g=n.periods,v=n.days,d=n.shortDays,y=n.months,m=n.shortMonths;t.utc=function(n){function e(n){try{va=Hn;var t=new va;return t._=n,r(t)}finally{va=Date}}var r=t(n);return e.parse=function(n){try{va=Hn;var t=r.parse(n);return t&&t._}finally{va=Date}},e.toString=r.toString,e},t.multi=t.utc.multi=ct;var M=ao.map(),x=Vn(v),b=Xn(v),_=Vn(d),w=Xn(d),S=Vn(y),k=Xn(y),N=Vn(m),E=Xn(m);g.forEach(function(n,t){M.set(n.toLowerCase(),t)});var A={a:function(n){return d[n.getDay()]},A:function(n){return v[n.getDay()]},b:function(n){return m[n.getMonth()]},B:function(n){return y[n.getMonth()]},c:t(s),d:function(n,t){return Zn(n.getDate(),t,2)},e:function(n,t){return Zn(n.getDate(),t,2)},H:function(n,t){return Zn(n.getHours(),t,2)},I:function(n,t){return Zn(n.getHours()%12||12,t,2)},j:function(n,t){return Zn(1+ga.dayOfYear(n),t,3)},L:function(n,t){return Zn(n.getMilliseconds(),t,3)},m:function(n,t){return Zn(n.getMonth()+1,t,2)},M:function(n,t){return Zn(n.getMinutes(),t,2)},p:function(n){return g[+(n.getHours()>=12)]},S:function(n,t){return Zn(n.getSeconds(),t,2)},U:function(n,t){return Zn(ga.sundayOfYear(n),t,2)},w:function(n){return n.getDay()},W:function(n,t){return Zn(ga.mondayOfYear(n),t,2)},x:t(h),X:t(p),y:function(n,t){return Zn(n.getFullYear()%100,t,2)},Y:function(n,t){return Zn(n.getFullYear()%1e4,t,4)},Z:at,"%":function(){return"%"}},C={a:r,A:i,b:u,B:o,c:a,d:tt,e:tt,H:rt,I:rt,j:et,L:ot,m:nt,M:it,p:f,S:ut,U:Bn,w:$n,W:Wn,x:l,X:c,y:Gn,Y:Jn,Z:Kn,"%":lt};return t}function Zn(n,t,e){var r=0>n?"-":"",i=(r?-n:n)+"",u=i.length;return r+(e>u?new Array(e-u+1).join(t)+i:i)}function Vn(n){return new RegExp("^(?:"+n.map(ao.requote).join("|")+")","i")}function Xn(n){for(var t=new c,e=-1,r=n.length;++e<r;)t.set(n[e].toLowerCase(),e);return t}function $n(n,t,e){ma.lastIndex=0;var r=ma.exec(t.slice(e,e+1));return r?(n.w=+r[0],e+r[0].length):-1}function Bn(n,t,e){ma.lastIndex=0;var r=ma.exec(t.slice(e));return r?(n.U=+r[0],e+r[0].length):-1}function Wn(n,t,e){ma.lastIndex=0;var r=ma.exec(t.slice(e));return r?(n.W=+r[0],e+r[0].length):-1}function Jn(n,t,e){ma.lastIndex=0;var r=ma.exec(t.slice(e,e+4));return r?(n.y=+r[0],e+r[0].length):-1}function Gn(n,t,e){ma.lastIndex=0;var r=ma.exec(t.slice(e,e+2));return r?(n.y=Qn(+r[0]),e+r[0].length):-1}function Kn(n,t,e){return/^[+-]\d{4}$/.test(t=t.slice(e,e+5))?(n.Z=-t,e+5):-1}function Qn(n){return n+(n>68?1900:2e3)}function nt(n,t,e){ma.lastIndex=0;var r=ma.exec(t.slice(e,e+2));return r?(n.m=r[0]-1,e+r[0].length):-1}function tt(n,t,e){ma.lastIndex=0;var r=ma.exec(t.slice(e,e+2));return r?(n.d=+r[0],e+r[0].length):-1}function et(n,t,e){ma.lastIndex=0;var r=ma.exec(t.slice(e,e+3));return r?(n.j=+r[0],e+r[0].length):-1}function rt(n,t,e){ma.lastIndex=0;var r=ma.exec(t.slice(e,e+2));return r?(n.H=+r[0],e+r[0].length):-1}function it(n,t,e){ma.lastIndex=0;var r=ma.exec(t.slice(e,e+2));return r?(n.M=+r[0],e+r[0].length):-1}function ut(n,t,e){ma.lastIndex=0;var r=ma.exec(t.slice(e,e+2));return r?(n.S=+r[0],e+r[0].length):-1}function ot(n,t,e){ma.lastIndex=0;var r=ma.exec(t.slice(e,e+3));return r?(n.L=+r[0],e+r[0].length):-1}function at(n){var t=n.getTimezoneOffset(),e=t>0?"-":"+",r=xo(t)/60|0,i=xo(t)%60;return e+Zn(r,"0",2)+Zn(i,"0",2)}function lt(n,t,e){Ma.lastIndex=0;var r=Ma.exec(t.slice(e,e+1));return r?e+r[0].length:-1}function ct(n){for(var t=n.length,e=-1;++e<t;)n[e][0]=this(n[e][0]);return function(t){for(var e=0,r=n[e];!r[1](t);)r=n[++e];return r[0](t)}}function ft(){}function st(n,t,e){var r=e.s=n+t,i=r-n,u=r-i;e.t=n-u+(t-i)}function ht(n,t){n&&wa.hasOwnProperty(n.type)&&wa[n.type](n,t)}function pt(n,t,e){var r,i=-1,u=n.length-e;for(t.lineStart();++i<u;)r=n[i],t.point(r[0],r[1],r[2]);t.lineEnd()}function gt(n,t){var e=-1,r=n.length;for(t.polygonStart();++e<r;)pt(n[e],t,1);t.polygonEnd()}function vt(){function n(n,t){n*=Yo,t=t*Yo/2+Fo/4;var e=n-r,o=e>=0?1:-1,a=o*e,l=Math.cos(t),c=Math.sin(t),f=u*c,s=i*l+f*Math.cos(a),h=f*o*Math.sin(a);ka.add(Math.atan2(h,s)),r=n,i=l,u=c}var t,e,r,i,u;Na.point=function(o,a){Na.point=n,r=(t=o)*Yo,i=Math.cos(a=(e=a)*Yo/2+Fo/4),u=Math.sin(a)},Na.lineEnd=function(){n(t,e)}}function dt(n){var t=n[0],e=n[1],r=Math.cos(e);return[r*Math.cos(t),r*Math.sin(t),Math.sin(e)]}function yt(n,t){return n[0]*t[0]+n[1]*t[1]+n[2]*t[2]}function mt(n,t){return[n[1]*t[2]-n[2]*t[1],n[2]*t[0]-n[0]*t[2],n[0]*t[1]-n[1]*t[0]]}function Mt(n,t){n[0]+=t[0],n[1]+=t[1],n[2]+=t[2]}function xt(n,t){return[n[0]*t,n[1]*t,n[2]*t]}function bt(n){var t=Math.sqrt(n[0]*n[0]+n[1]*n[1]+n[2]*n[2]);n[0]/=t,n[1]/=t,n[2]/=t}function _t(n){return[Math.atan2(n[1],n[0]),tn(n[2])]}function wt(n,t){return xo(n[0]-t[0])<Uo&&xo(n[1]-t[1])<Uo}function St(n,t){n*=Yo;var e=Math.cos(t*=Yo);kt(e*Math.cos(n),e*Math.sin(n),Math.sin(t))}function kt(n,t,e){++Ea,Ca+=(n-Ca)/Ea,za+=(t-za)/Ea,La+=(e-La)/Ea}function Nt(){function n(n,i){n*=Yo;var u=Math.cos(i*=Yo),o=u*Math.cos(n),a=u*Math.sin(n),l=Math.sin(i),c=Math.atan2(Math.sqrt((c=e*l-r*a)*c+(c=r*o-t*l)*c+(c=t*a-e*o)*c),t*o+e*a+r*l);Aa+=c,qa+=c*(t+(t=o)),Ta+=c*(e+(e=a)),Ra+=c*(r+(r=l)),kt(t,e,r)}var t,e,r;ja.point=function(i,u){i*=Yo;var o=Math.cos(u*=Yo);t=o*Math.cos(i),e=o*Math.sin(i),r=Math.sin(u),ja.point=n,kt(t,e,r)}}function Et(){ja.point=St}function At(){function n(n,t){n*=Yo;var e=Math.cos(t*=Yo),o=e*Math.cos(n),a=e*Math.sin(n),l=Math.sin(t),c=i*l-u*a,f=u*o-r*l,s=r*a-i*o,h=Math.sqrt(c*c+f*f+s*s),p=r*o+i*a+u*l,g=h&&-nn(p)/h,v=Math.atan2(h,p);Da+=g*c,Pa+=g*f,Ua+=g*s,Aa+=v,qa+=v*(r+(r=o)),Ta+=v*(i+(i=a)),Ra+=v*(u+(u=l)),kt(r,i,u)}var t,e,r,i,u;ja.point=function(o,a){t=o,e=a,ja.point=n,o*=Yo;var l=Math.cos(a*=Yo);r=l*Math.cos(o),i=l*Math.sin(o),u=Math.sin(a),kt(r,i,u)},ja.lineEnd=function(){n(t,e),ja.lineEnd=Et,ja.point=St}}function Ct(n,t){function e(e,r){return e=n(e,r),t(e[0],e[1])}return n.invert&&t.invert&&(e.invert=function(e,r){return e=t.invert(e,r),e&&n.invert(e[0],e[1])}),e}function zt(){return!0}function Lt(n,t,e,r,i){var u=[],o=[];if(n.forEach(function(n){if(!((t=n.length-1)<=0)){var t,e=n[0],r=n[t];if(wt(e,r)){i.lineStart();for(var a=0;t>a;++a)i.point((e=n[a])[0],e[1]);return void i.lineEnd()}var l=new Tt(e,n,null,!0),c=new Tt(e,null,l,!1);l.o=c,u.push(l),o.push(c),l=new Tt(r,n,null,!1),c=new Tt(r,null,l,!0),l.o=c,u.push(l),o.push(c)}}),o.sort(t),qt(u),qt(o),u.length){for(var a=0,l=e,c=o.length;c>a;++a)o[a].e=l=!l;for(var f,s,h=u[0];;){for(var p=h,g=!0;p.v;)if((p=p.n)===h)return;f=p.z,i.lineStart();do{if(p.v=p.o.v=!0,p.e){if(g)for(var a=0,c=f.length;c>a;++a)i.point((s=f[a])[0],s[1]);else r(p.x,p.n.x,1,i);p=p.n}else{if(g){f=p.p.z;for(var a=f.length-1;a>=0;--a)i.point((s=f[a])[0],s[1])}else r(p.x,p.p.x,-1,i);p=p.p}p=p.o,f=p.z,g=!g}while(!p.v);i.lineEnd()}}}function qt(n){if(t=n.length){for(var t,e,r=0,i=n[0];++r<t;)i.n=e=n[r],e.p=i,i=e;i.n=e=n[0],e.p=i}}function Tt(n,t,e,r){this.x=n,this.z=t,this.o=e,this.e=r,this.v=!1,this.n=this.p=null}function Rt(n,t,e,r){return function(i,u){function o(t,e){var r=i(t,e);n(t=r[0],e=r[1])&&u.point(t,e)}function a(n,t){var e=i(n,t);d.point(e[0],e[1])}function l(){m.point=a,d.lineStart()}function c(){m.point=o,d.lineEnd()}function f(n,t){v.push([n,t]);var e=i(n,t);x.point(e[0],e[1])}function s(){x.lineStart(),v=[]}function h(){f(v[0][0],v[0][1]),x.lineEnd();var n,t=x.clean(),e=M.buffer(),r=e.length;if(v.pop(),g.push(v),v=null,r)if(1&t){n=e[0];var i,r=n.length-1,o=-1;if(r>0){for(b||(u.polygonStart(),b=!0),u.lineStart();++o<r;)u.point((i=n[o])[0],i[1]);u.lineEnd()}}else r>1&&2&t&&e.push(e.pop().concat(e.shift())),p.push(e.filter(Dt))}var p,g,v,d=t(u),y=i.invert(r[0],r[1]),m={point:o,lineStart:l,lineEnd:c,polygonStart:function(){m.point=f,m.lineStart=s,m.lineEnd=h,p=[],g=[]},polygonEnd:function(){m.point=o,m.lineStart=l,m.lineEnd=c,p=ao.merge(p);var n=Ot(y,g);p.length?(b||(u.polygonStart(),b=!0),Lt(p,Ut,n,e,u)):n&&(b||(u.polygonStart(),b=!0),u.lineStart(),e(null,null,1,u),u.lineEnd()),b&&(u.polygonEnd(),b=!1),p=g=null},sphere:function(){u.polygonStart(),u.lineStart(),e(null,null,1,u),u.lineEnd(),u.polygonEnd()}},M=Pt(),x=t(M),b=!1;return m}}function Dt(n){return n.length>1}function Pt(){var n,t=[];return{lineStart:function(){t.push(n=[])},point:function(t,e){n.push([t,e])},lineEnd:b,buffer:function(){var e=t;return t=[],n=null,e},rejoin:function(){t.length>1&&t.push(t.pop().concat(t.shift()))}}}function Ut(n,t){return((n=n.x)[0]<0?n[1]-Io-Uo:Io-n[1])-((t=t.x)[0]<0?t[1]-Io-Uo:Io-t[1])}function jt(n){var t,e=NaN,r=NaN,i=NaN;return{lineStart:function(){n.lineStart(),t=1},point:function(u,o){var a=u>0?Fo:-Fo,l=xo(u-e);xo(l-Fo)<Uo?(n.point(e,r=(r+o)/2>0?Io:-Io),n.point(i,r),n.lineEnd(),n.lineStart(),n.point(a,r),n.point(u,r),t=0):i!==a&&l>=Fo&&(xo(e-i)<Uo&&(e-=i*Uo),xo(u-a)<Uo&&(u-=a*Uo),r=Ft(e,r,u,o),n.point(i,r),n.lineEnd(),n.lineStart(),n.point(a,r),t=0),n.point(e=u,r=o),i=a},lineEnd:function(){n.lineEnd(),e=r=NaN},clean:function(){return 2-t}}}function Ft(n,t,e,r){var i,u,o=Math.sin(n-e);return xo(o)>Uo?Math.atan((Math.sin(t)*(u=Math.cos(r))*Math.sin(e)-Math.sin(r)*(i=Math.cos(t))*Math.sin(n))/(i*u*o)):(t+r)/2}function Ht(n,t,e,r){var i;if(null==n)i=e*Io,r.point(-Fo,i),r.point(0,i),r.point(Fo,i),r.point(Fo,0),r.point(Fo,-i),r.point(0,-i),r.point(-Fo,-i),r.point(-Fo,0),r.point(-Fo,i);else if(xo(n[0]-t[0])>Uo){var u=n[0]<t[0]?Fo:-Fo;i=e*u/2,r.point(-u,i),r.point(0,i),r.point(u,i)}else r.point(t[0],t[1])}function Ot(n,t){var e=n[0],r=n[1],i=[Math.sin(e),-Math.cos(e),0],u=0,o=0;ka.reset();for(var a=0,l=t.length;l>a;++a){var c=t[a],f=c.length;if(f)for(var s=c[0],h=s[0],p=s[1]/2+Fo/4,g=Math.sin(p),v=Math.cos(p),d=1;;){d===f&&(d=0),n=c[d];var y=n[0],m=n[1]/2+Fo/4,M=Math.sin(m),x=Math.cos(m),b=y-h,_=b>=0?1:-1,w=_*b,S=w>Fo,k=g*M;if(ka.add(Math.atan2(k*_*Math.sin(w),v*x+k*Math.cos(w))),u+=S?b+_*Ho:b,S^h>=e^y>=e){var N=mt(dt(s),dt(n));bt(N);var E=mt(i,N);bt(E);var A=(S^b>=0?-1:1)*tn(E[2]);(r>A||r===A&&(N[0]||N[1]))&&(o+=S^b>=0?1:-1)}if(!d++)break;h=y,g=M,v=x,s=n}}return(-Uo>u||Uo>u&&-Uo>ka)^1&o}function It(n){function t(n,t){return Math.cos(n)*Math.cos(t)>u}function e(n){var e,u,l,c,f;return{lineStart:function(){c=l=!1,f=1},point:function(s,h){var p,g=[s,h],v=t(s,h),d=o?v?0:i(s,h):v?i(s+(0>s?Fo:-Fo),h):0;if(!e&&(c=l=v)&&n.lineStart(),v!==l&&(p=r(e,g),(wt(e,p)||wt(g,p))&&(g[0]+=Uo,g[1]+=Uo,v=t(g[0],g[1]))),v!==l)f=0,v?(n.lineStart(),p=r(g,e),n.point(p[0],p[1])):(p=r(e,g),n.point(p[0],p[1]),n.lineEnd()),e=p;else if(a&&e&&o^v){var y;d&u||!(y=r(g,e,!0))||(f=0,o?(n.lineStart(),n.point(y[0][0],y[0][1]),n.point(y[1][0],y[1][1]),n.lineEnd()):(n.point(y[1][0],y[1][1]),n.lineEnd(),n.lineStart(),n.point(y[0][0],y[0][1])))}!v||e&&wt(e,g)||n.point(g[0],g[1]),e=g,l=v,u=d},lineEnd:function(){l&&n.lineEnd(),e=null},clean:function(){return f|(c&&l)<<1}}}function r(n,t,e){var r=dt(n),i=dt(t),o=[1,0,0],a=mt(r,i),l=yt(a,a),c=a[0],f=l-c*c;if(!f)return!e&&n;var s=u*l/f,h=-u*c/f,p=mt(o,a),g=xt(o,s),v=xt(a,h);Mt(g,v);var d=p,y=yt(g,d),m=yt(d,d),M=y*y-m*(yt(g,g)-1);if(!(0>M)){var x=Math.sqrt(M),b=xt(d,(-y-x)/m);if(Mt(b,g),b=_t(b),!e)return b;var _,w=n[0],S=t[0],k=n[1],N=t[1];w>S&&(_=w,w=S,S=_);var E=S-w,A=xo(E-Fo)<Uo,C=A||Uo>E;if(!A&&k>N&&(_=k,k=N,N=_),C?A?k+N>0^b[1]<(xo(b[0]-w)<Uo?k:N):k<=b[1]&&b[1]<=N:E>Fo^(w<=b[0]&&b[0]<=S)){var z=xt(d,(-y+x)/m);return Mt(z,g),[b,_t(z)]}}}function i(t,e){var r=o?n:Fo-n,i=0;return-r>t?i|=1:t>r&&(i|=2),-r>e?i|=4:e>r&&(i|=8),i}var u=Math.cos(n),o=u>0,a=xo(u)>Uo,l=ve(n,6*Yo);return Rt(t,e,l,o?[0,-n]:[-Fo,n-Fo])}function Yt(n,t,e,r){return function(i){var u,o=i.a,a=i.b,l=o.x,c=o.y,f=a.x,s=a.y,h=0,p=1,g=f-l,v=s-c;if(u=n-l,g||!(u>0)){if(u/=g,0>g){if(h>u)return;p>u&&(p=u)}else if(g>0){if(u>p)return;u>h&&(h=u)}if(u=e-l,g||!(0>u)){if(u/=g,0>g){if(u>p)return;u>h&&(h=u)}else if(g>0){if(h>u)return;p>u&&(p=u)}if(u=t-c,v||!(u>0)){if(u/=v,0>v){if(h>u)return;p>u&&(p=u)}else if(v>0){if(u>p)return;u>h&&(h=u)}if(u=r-c,v||!(0>u)){if(u/=v,0>v){if(u>p)return;u>h&&(h=u)}else if(v>0){if(h>u)return;p>u&&(p=u)}return h>0&&(i.a={x:l+h*g,y:c+h*v}),1>p&&(i.b={x:l+p*g,y:c+p*v}),i}}}}}}function Zt(n,t,e,r){function i(r,i){return xo(r[0]-n)<Uo?i>0?0:3:xo(r[0]-e)<Uo?i>0?2:1:xo(r[1]-t)<Uo?i>0?1:0:i>0?3:2}function u(n,t){return o(n.x,t.x)}function o(n,t){var e=i(n,1),r=i(t,1);return e!==r?e-r:0===e?t[1]-n[1]:1===e?n[0]-t[0]:2===e?n[1]-t[1]:t[0]-n[0]}return function(a){function l(n){for(var t=0,e=d.length,r=n[1],i=0;e>i;++i)for(var u,o=1,a=d[i],l=a.length,c=a[0];l>o;++o)u=a[o],c[1]<=r?u[1]>r&&Q(c,u,n)>0&&++t:u[1]<=r&&Q(c,u,n)<0&&--t,c=u;return 0!==t}function c(u,a,l,c){var f=0,s=0;if(null==u||(f=i(u,l))!==(s=i(a,l))||o(u,a)<0^l>0){do c.point(0===f||3===f?n:e,f>1?r:t);while((f=(f+l+4)%4)!==s)}else c.point(a[0],a[1])}function f(i,u){return i>=n&&e>=i&&u>=t&&r>=u}function s(n,t){f(n,t)&&a.point(n,t)}function h(){C.point=g,d&&d.push(y=[]),S=!0,w=!1,b=_=NaN}function p(){v&&(g(m,M),x&&w&&E.rejoin(),v.push(E.buffer())),C.point=s,w&&a.lineEnd()}function g(n,t){n=Math.max(-Ha,Math.min(Ha,n)),t=Math.max(-Ha,Math.min(Ha,t));var e=f(n,t);if(d&&y.push([n,t]),S)m=n,M=t,x=e,S=!1,e&&(a.lineStart(),a.point(n,t));else if(e&&w)a.point(n,t);else{var r={a:{x:b,y:_},b:{x:n,y:t}};A(r)?(w||(a.lineStart(),a.point(r.a.x,r.a.y)),a.point(r.b.x,r.b.y),e||a.lineEnd(),k=!1):e&&(a.lineStart(),a.point(n,t),k=!1)}b=n,_=t,w=e}var v,d,y,m,M,x,b,_,w,S,k,N=a,E=Pt(),A=Yt(n,t,e,r),C={point:s,lineStart:h,lineEnd:p,polygonStart:function(){a=E,v=[],d=[],k=!0},polygonEnd:function(){a=N,v=ao.merge(v);var t=l([n,r]),e=k&&t,i=v.length;(e||i)&&(a.polygonStart(),e&&(a.lineStart(),c(null,null,1,a),a.lineEnd()),i&&Lt(v,u,t,c,a),a.polygonEnd()),v=d=y=null}};return C}}function Vt(n){var t=0,e=Fo/3,r=ae(n),i=r(t,e);return i.parallels=function(n){return arguments.length?r(t=n[0]*Fo/180,e=n[1]*Fo/180):[t/Fo*180,e/Fo*180]},i}function Xt(n,t){function e(n,t){var e=Math.sqrt(u-2*i*Math.sin(t))/i;return[e*Math.sin(n*=i),o-e*Math.cos(n)]}var r=Math.sin(n),i=(r+Math.sin(t))/2,u=1+r*(2*i-r),o=Math.sqrt(u)/i;return e.invert=function(n,t){var e=o-t;return[Math.atan2(n,e)/i,tn((u-(n*n+e*e)*i*i)/(2*i))]},e}function $t(){function n(n,t){Ia+=i*n-r*t,r=n,i=t}var t,e,r,i;$a.point=function(u,o){$a.point=n,t=r=u,e=i=o},$a.lineEnd=function(){n(t,e)}}function Bt(n,t){Ya>n&&(Ya=n),n>Va&&(Va=n),Za>t&&(Za=t),t>Xa&&(Xa=t)}function Wt(){function n(n,t){o.push("M",n,",",t,u)}function t(n,t){o.push("M",n,",",t),a.point=e}function e(n,t){o.push("L",n,",",t)}function r(){a.point=n}function i(){o.push("Z")}var u=Jt(4.5),o=[],a={point:n,lineStart:function(){a.point=t},lineEnd:r,polygonStart:function(){a.lineEnd=i},polygonEnd:function(){a.lineEnd=r,a.point=n},pointRadius:function(n){return u=Jt(n),a},result:function(){if(o.length){var n=o.join("");return o=[],n}}};return a}function Jt(n){return"m0,"+n+"a"+n+","+n+" 0 1,1 0,"+-2*n+"a"+n+","+n+" 0 1,1 0,"+2*n+"z"}function Gt(n,t){Ca+=n,za+=t,++La}function Kt(){function n(n,r){var i=n-t,u=r-e,o=Math.sqrt(i*i+u*u);qa+=o*(t+n)/2,Ta+=o*(e+r)/2,Ra+=o,Gt(t=n,e=r)}var t,e;Wa.point=function(r,i){Wa.point=n,Gt(t=r,e=i)}}function Qt(){Wa.point=Gt}function ne(){function n(n,t){var e=n-r,u=t-i,o=Math.sqrt(e*e+u*u);qa+=o*(r+n)/2,Ta+=o*(i+t)/2,Ra+=o,o=i*n-r*t,Da+=o*(r+n),Pa+=o*(i+t),Ua+=3*o,Gt(r=n,i=t)}var t,e,r,i;Wa.point=function(u,o){Wa.point=n,Gt(t=r=u,e=i=o)},Wa.lineEnd=function(){n(t,e)}}function te(n){function t(t,e){n.moveTo(t+o,e),n.arc(t,e,o,0,Ho)}function e(t,e){n.moveTo(t,e),a.point=r}function r(t,e){n.lineTo(t,e)}function i(){a.point=t}function u(){n.closePath()}var o=4.5,a={point:t,lineStart:function(){a.point=e},lineEnd:i,polygonStart:function(){a.lineEnd=u},polygonEnd:function(){a.lineEnd=i,a.point=t},pointRadius:function(n){return o=n,a},result:b};return a}function ee(n){function t(n){return(a?r:e)(n)}function e(t){return ue(t,function(e,r){e=n(e,r),t.point(e[0],e[1])})}function r(t){function e(e,r){e=n(e,r),t.point(e[0],e[1])}function r(){M=NaN,S.point=u,t.lineStart()}function u(e,r){var u=dt([e,r]),o=n(e,r);i(M,x,m,b,_,w,M=o[0],x=o[1],m=e,b=u[0],_=u[1],w=u[2],a,t),t.point(M,x)}function o(){S.point=e,t.lineEnd()}function l(){
+	r(),S.point=c,S.lineEnd=f}function c(n,t){u(s=n,h=t),p=M,g=x,v=b,d=_,y=w,S.point=u}function f(){i(M,x,m,b,_,w,p,g,s,v,d,y,a,t),S.lineEnd=o,o()}var s,h,p,g,v,d,y,m,M,x,b,_,w,S={point:e,lineStart:r,lineEnd:o,polygonStart:function(){t.polygonStart(),S.lineStart=l},polygonEnd:function(){t.polygonEnd(),S.lineStart=r}};return S}function i(t,e,r,a,l,c,f,s,h,p,g,v,d,y){var m=f-t,M=s-e,x=m*m+M*M;if(x>4*u&&d--){var b=a+p,_=l+g,w=c+v,S=Math.sqrt(b*b+_*_+w*w),k=Math.asin(w/=S),N=xo(xo(w)-1)<Uo||xo(r-h)<Uo?(r+h)/2:Math.atan2(_,b),E=n(N,k),A=E[0],C=E[1],z=A-t,L=C-e,q=M*z-m*L;(q*q/x>u||xo((m*z+M*L)/x-.5)>.3||o>a*p+l*g+c*v)&&(i(t,e,r,a,l,c,A,C,N,b/=S,_/=S,w,d,y),y.point(A,C),i(A,C,N,b,_,w,f,s,h,p,g,v,d,y))}}var u=.5,o=Math.cos(30*Yo),a=16;return t.precision=function(n){return arguments.length?(a=(u=n*n)>0&&16,t):Math.sqrt(u)},t}function re(n){var t=ee(function(t,e){return n([t*Zo,e*Zo])});return function(n){return le(t(n))}}function ie(n){this.stream=n}function ue(n,t){return{point:t,sphere:function(){n.sphere()},lineStart:function(){n.lineStart()},lineEnd:function(){n.lineEnd()},polygonStart:function(){n.polygonStart()},polygonEnd:function(){n.polygonEnd()}}}function oe(n){return ae(function(){return n})()}function ae(n){function t(n){return n=a(n[0]*Yo,n[1]*Yo),[n[0]*h+l,c-n[1]*h]}function e(n){return n=a.invert((n[0]-l)/h,(c-n[1])/h),n&&[n[0]*Zo,n[1]*Zo]}function r(){a=Ct(o=se(y,M,x),u);var n=u(v,d);return l=p-n[0]*h,c=g+n[1]*h,i()}function i(){return f&&(f.valid=!1,f=null),t}var u,o,a,l,c,f,s=ee(function(n,t){return n=u(n,t),[n[0]*h+l,c-n[1]*h]}),h=150,p=480,g=250,v=0,d=0,y=0,M=0,x=0,b=Fa,_=m,w=null,S=null;return t.stream=function(n){return f&&(f.valid=!1),f=le(b(o,s(_(n)))),f.valid=!0,f},t.clipAngle=function(n){return arguments.length?(b=null==n?(w=n,Fa):It((w=+n)*Yo),i()):w},t.clipExtent=function(n){return arguments.length?(S=n,_=n?Zt(n[0][0],n[0][1],n[1][0],n[1][1]):m,i()):S},t.scale=function(n){return arguments.length?(h=+n,r()):h},t.translate=function(n){return arguments.length?(p=+n[0],g=+n[1],r()):[p,g]},t.center=function(n){return arguments.length?(v=n[0]%360*Yo,d=n[1]%360*Yo,r()):[v*Zo,d*Zo]},t.rotate=function(n){return arguments.length?(y=n[0]%360*Yo,M=n[1]%360*Yo,x=n.length>2?n[2]%360*Yo:0,r()):[y*Zo,M*Zo,x*Zo]},ao.rebind(t,s,"precision"),function(){return u=n.apply(this,arguments),t.invert=u.invert&&e,r()}}function le(n){return ue(n,function(t,e){n.point(t*Yo,e*Yo)})}function ce(n,t){return[n,t]}function fe(n,t){return[n>Fo?n-Ho:-Fo>n?n+Ho:n,t]}function se(n,t,e){return n?t||e?Ct(pe(n),ge(t,e)):pe(n):t||e?ge(t,e):fe}function he(n){return function(t,e){return t+=n,[t>Fo?t-Ho:-Fo>t?t+Ho:t,e]}}function pe(n){var t=he(n);return t.invert=he(-n),t}function ge(n,t){function e(n,t){var e=Math.cos(t),a=Math.cos(n)*e,l=Math.sin(n)*e,c=Math.sin(t),f=c*r+a*i;return[Math.atan2(l*u-f*o,a*r-c*i),tn(f*u+l*o)]}var r=Math.cos(n),i=Math.sin(n),u=Math.cos(t),o=Math.sin(t);return e.invert=function(n,t){var e=Math.cos(t),a=Math.cos(n)*e,l=Math.sin(n)*e,c=Math.sin(t),f=c*u-l*o;return[Math.atan2(l*u+c*o,a*r+f*i),tn(f*r-a*i)]},e}function ve(n,t){var e=Math.cos(n),r=Math.sin(n);return function(i,u,o,a){var l=o*t;null!=i?(i=de(e,i),u=de(e,u),(o>0?u>i:i>u)&&(i+=o*Ho)):(i=n+o*Ho,u=n-.5*l);for(var c,f=i;o>0?f>u:u>f;f-=l)a.point((c=_t([e,-r*Math.cos(f),-r*Math.sin(f)]))[0],c[1])}}function de(n,t){var e=dt(t);e[0]-=n,bt(e);var r=nn(-e[1]);return((-e[2]<0?-r:r)+2*Math.PI-Uo)%(2*Math.PI)}function ye(n,t,e){var r=ao.range(n,t-Uo,e).concat(t);return function(n){return r.map(function(t){return[n,t]})}}function me(n,t,e){var r=ao.range(n,t-Uo,e).concat(t);return function(n){return r.map(function(t){return[t,n]})}}function Me(n){return n.source}function xe(n){return n.target}function be(n,t,e,r){var i=Math.cos(t),u=Math.sin(t),o=Math.cos(r),a=Math.sin(r),l=i*Math.cos(n),c=i*Math.sin(n),f=o*Math.cos(e),s=o*Math.sin(e),h=2*Math.asin(Math.sqrt(on(r-t)+i*o*on(e-n))),p=1/Math.sin(h),g=h?function(n){var t=Math.sin(n*=h)*p,e=Math.sin(h-n)*p,r=e*l+t*f,i=e*c+t*s,o=e*u+t*a;return[Math.atan2(i,r)*Zo,Math.atan2(o,Math.sqrt(r*r+i*i))*Zo]}:function(){return[n*Zo,t*Zo]};return g.distance=h,g}function _e(){function n(n,i){var u=Math.sin(i*=Yo),o=Math.cos(i),a=xo((n*=Yo)-t),l=Math.cos(a);Ja+=Math.atan2(Math.sqrt((a=o*Math.sin(a))*a+(a=r*u-e*o*l)*a),e*u+r*o*l),t=n,e=u,r=o}var t,e,r;Ga.point=function(i,u){t=i*Yo,e=Math.sin(u*=Yo),r=Math.cos(u),Ga.point=n},Ga.lineEnd=function(){Ga.point=Ga.lineEnd=b}}function we(n,t){function e(t,e){var r=Math.cos(t),i=Math.cos(e),u=n(r*i);return[u*i*Math.sin(t),u*Math.sin(e)]}return e.invert=function(n,e){var r=Math.sqrt(n*n+e*e),i=t(r),u=Math.sin(i),o=Math.cos(i);return[Math.atan2(n*u,r*o),Math.asin(r&&e*u/r)]},e}function Se(n,t){function e(n,t){o>0?-Io+Uo>t&&(t=-Io+Uo):t>Io-Uo&&(t=Io-Uo);var e=o/Math.pow(i(t),u);return[e*Math.sin(u*n),o-e*Math.cos(u*n)]}var r=Math.cos(n),i=function(n){return Math.tan(Fo/4+n/2)},u=n===t?Math.sin(n):Math.log(r/Math.cos(t))/Math.log(i(t)/i(n)),o=r*Math.pow(i(n),u)/u;return u?(e.invert=function(n,t){var e=o-t,r=K(u)*Math.sqrt(n*n+e*e);return[Math.atan2(n,e)/u,2*Math.atan(Math.pow(o/r,1/u))-Io]},e):Ne}function ke(n,t){function e(n,t){var e=u-t;return[e*Math.sin(i*n),u-e*Math.cos(i*n)]}var r=Math.cos(n),i=n===t?Math.sin(n):(r-Math.cos(t))/(t-n),u=r/i+n;return xo(i)<Uo?ce:(e.invert=function(n,t){var e=u-t;return[Math.atan2(n,e)/i,u-K(i)*Math.sqrt(n*n+e*e)]},e)}function Ne(n,t){return[n,Math.log(Math.tan(Fo/4+t/2))]}function Ee(n){var t,e=oe(n),r=e.scale,i=e.translate,u=e.clipExtent;return e.scale=function(){var n=r.apply(e,arguments);return n===e?t?e.clipExtent(null):e:n},e.translate=function(){var n=i.apply(e,arguments);return n===e?t?e.clipExtent(null):e:n},e.clipExtent=function(n){var o=u.apply(e,arguments);if(o===e){if(t=null==n){var a=Fo*r(),l=i();u([[l[0]-a,l[1]-a],[l[0]+a,l[1]+a]])}}else t&&(o=null);return o},e.clipExtent(null)}function Ae(n,t){return[Math.log(Math.tan(Fo/4+t/2)),-n]}function Ce(n){return n[0]}function ze(n){return n[1]}function Le(n){for(var t=n.length,e=[0,1],r=2,i=2;t>i;i++){for(;r>1&&Q(n[e[r-2]],n[e[r-1]],n[i])<=0;)--r;e[r++]=i}return e.slice(0,r)}function qe(n,t){return n[0]-t[0]||n[1]-t[1]}function Te(n,t,e){return(e[0]-t[0])*(n[1]-t[1])<(e[1]-t[1])*(n[0]-t[0])}function Re(n,t,e,r){var i=n[0],u=e[0],o=t[0]-i,a=r[0]-u,l=n[1],c=e[1],f=t[1]-l,s=r[1]-c,h=(a*(l-c)-s*(i-u))/(s*o-a*f);return[i+h*o,l+h*f]}function De(n){var t=n[0],e=n[n.length-1];return!(t[0]-e[0]||t[1]-e[1])}function Pe(){rr(this),this.edge=this.site=this.circle=null}function Ue(n){var t=cl.pop()||new Pe;return t.site=n,t}function je(n){Be(n),ol.remove(n),cl.push(n),rr(n)}function Fe(n){var t=n.circle,e=t.x,r=t.cy,i={x:e,y:r},u=n.P,o=n.N,a=[n];je(n);for(var l=u;l.circle&&xo(e-l.circle.x)<Uo&&xo(r-l.circle.cy)<Uo;)u=l.P,a.unshift(l),je(l),l=u;a.unshift(l),Be(l);for(var c=o;c.circle&&xo(e-c.circle.x)<Uo&&xo(r-c.circle.cy)<Uo;)o=c.N,a.push(c),je(c),c=o;a.push(c),Be(c);var f,s=a.length;for(f=1;s>f;++f)c=a[f],l=a[f-1],nr(c.edge,l.site,c.site,i);l=a[0],c=a[s-1],c.edge=Ke(l.site,c.site,null,i),$e(l),$e(c)}function He(n){for(var t,e,r,i,u=n.x,o=n.y,a=ol._;a;)if(r=Oe(a,o)-u,r>Uo)a=a.L;else{if(i=u-Ie(a,o),!(i>Uo)){r>-Uo?(t=a.P,e=a):i>-Uo?(t=a,e=a.N):t=e=a;break}if(!a.R){t=a;break}a=a.R}var l=Ue(n);if(ol.insert(t,l),t||e){if(t===e)return Be(t),e=Ue(t.site),ol.insert(l,e),l.edge=e.edge=Ke(t.site,l.site),$e(t),void $e(e);if(!e)return void(l.edge=Ke(t.site,l.site));Be(t),Be(e);var c=t.site,f=c.x,s=c.y,h=n.x-f,p=n.y-s,g=e.site,v=g.x-f,d=g.y-s,y=2*(h*d-p*v),m=h*h+p*p,M=v*v+d*d,x={x:(d*m-p*M)/y+f,y:(h*M-v*m)/y+s};nr(e.edge,c,g,x),l.edge=Ke(c,n,null,x),e.edge=Ke(n,g,null,x),$e(t),$e(e)}}function Oe(n,t){var e=n.site,r=e.x,i=e.y,u=i-t;if(!u)return r;var o=n.P;if(!o)return-(1/0);e=o.site;var a=e.x,l=e.y,c=l-t;if(!c)return a;var f=a-r,s=1/u-1/c,h=f/c;return s?(-h+Math.sqrt(h*h-2*s*(f*f/(-2*c)-l+c/2+i-u/2)))/s+r:(r+a)/2}function Ie(n,t){var e=n.N;if(e)return Oe(e,t);var r=n.site;return r.y===t?r.x:1/0}function Ye(n){this.site=n,this.edges=[]}function Ze(n){for(var t,e,r,i,u,o,a,l,c,f,s=n[0][0],h=n[1][0],p=n[0][1],g=n[1][1],v=ul,d=v.length;d--;)if(u=v[d],u&&u.prepare())for(a=u.edges,l=a.length,o=0;l>o;)f=a[o].end(),r=f.x,i=f.y,c=a[++o%l].start(),t=c.x,e=c.y,(xo(r-t)>Uo||xo(i-e)>Uo)&&(a.splice(o,0,new tr(Qe(u.site,f,xo(r-s)<Uo&&g-i>Uo?{x:s,y:xo(t-s)<Uo?e:g}:xo(i-g)<Uo&&h-r>Uo?{x:xo(e-g)<Uo?t:h,y:g}:xo(r-h)<Uo&&i-p>Uo?{x:h,y:xo(t-h)<Uo?e:p}:xo(i-p)<Uo&&r-s>Uo?{x:xo(e-p)<Uo?t:s,y:p}:null),u.site,null)),++l)}function Ve(n,t){return t.angle-n.angle}function Xe(){rr(this),this.x=this.y=this.arc=this.site=this.cy=null}function $e(n){var t=n.P,e=n.N;if(t&&e){var r=t.site,i=n.site,u=e.site;if(r!==u){var o=i.x,a=i.y,l=r.x-o,c=r.y-a,f=u.x-o,s=u.y-a,h=2*(l*s-c*f);if(!(h>=-jo)){var p=l*l+c*c,g=f*f+s*s,v=(s*p-c*g)/h,d=(l*g-f*p)/h,s=d+a,y=fl.pop()||new Xe;y.arc=n,y.site=i,y.x=v+o,y.y=s+Math.sqrt(v*v+d*d),y.cy=s,n.circle=y;for(var m=null,M=ll._;M;)if(y.y<M.y||y.y===M.y&&y.x<=M.x){if(!M.L){m=M.P;break}M=M.L}else{if(!M.R){m=M;break}M=M.R}ll.insert(m,y),m||(al=y)}}}}function Be(n){var t=n.circle;t&&(t.P||(al=t.N),ll.remove(t),fl.push(t),rr(t),n.circle=null)}function We(n){for(var t,e=il,r=Yt(n[0][0],n[0][1],n[1][0],n[1][1]),i=e.length;i--;)t=e[i],(!Je(t,n)||!r(t)||xo(t.a.x-t.b.x)<Uo&&xo(t.a.y-t.b.y)<Uo)&&(t.a=t.b=null,e.splice(i,1))}function Je(n,t){var e=n.b;if(e)return!0;var r,i,u=n.a,o=t[0][0],a=t[1][0],l=t[0][1],c=t[1][1],f=n.l,s=n.r,h=f.x,p=f.y,g=s.x,v=s.y,d=(h+g)/2,y=(p+v)/2;if(v===p){if(o>d||d>=a)return;if(h>g){if(u){if(u.y>=c)return}else u={x:d,y:l};e={x:d,y:c}}else{if(u){if(u.y<l)return}else u={x:d,y:c};e={x:d,y:l}}}else if(r=(h-g)/(v-p),i=y-r*d,-1>r||r>1)if(h>g){if(u){if(u.y>=c)return}else u={x:(l-i)/r,y:l};e={x:(c-i)/r,y:c}}else{if(u){if(u.y<l)return}else u={x:(c-i)/r,y:c};e={x:(l-i)/r,y:l}}else if(v>p){if(u){if(u.x>=a)return}else u={x:o,y:r*o+i};e={x:a,y:r*a+i}}else{if(u){if(u.x<o)return}else u={x:a,y:r*a+i};e={x:o,y:r*o+i}}return n.a=u,n.b=e,!0}function Ge(n,t){this.l=n,this.r=t,this.a=this.b=null}function Ke(n,t,e,r){var i=new Ge(n,t);return il.push(i),e&&nr(i,n,t,e),r&&nr(i,t,n,r),ul[n.i].edges.push(new tr(i,n,t)),ul[t.i].edges.push(new tr(i,t,n)),i}function Qe(n,t,e){var r=new Ge(n,null);return r.a=t,r.b=e,il.push(r),r}function nr(n,t,e,r){n.a||n.b?n.l===e?n.b=r:n.a=r:(n.a=r,n.l=t,n.r=e)}function tr(n,t,e){var r=n.a,i=n.b;this.edge=n,this.site=t,this.angle=e?Math.atan2(e.y-t.y,e.x-t.x):n.l===t?Math.atan2(i.x-r.x,r.y-i.y):Math.atan2(r.x-i.x,i.y-r.y)}function er(){this._=null}function rr(n){n.U=n.C=n.L=n.R=n.P=n.N=null}function ir(n,t){var e=t,r=t.R,i=e.U;i?i.L===e?i.L=r:i.R=r:n._=r,r.U=i,e.U=r,e.R=r.L,e.R&&(e.R.U=e),r.L=e}function ur(n,t){var e=t,r=t.L,i=e.U;i?i.L===e?i.L=r:i.R=r:n._=r,r.U=i,e.U=r,e.L=r.R,e.L&&(e.L.U=e),r.R=e}function or(n){for(;n.L;)n=n.L;return n}function ar(n,t){var e,r,i,u=n.sort(lr).pop();for(il=[],ul=new Array(n.length),ol=new er,ll=new er;;)if(i=al,u&&(!i||u.y<i.y||u.y===i.y&&u.x<i.x))u.x===e&&u.y===r||(ul[u.i]=new Ye(u),He(u),e=u.x,r=u.y),u=n.pop();else{if(!i)break;Fe(i.arc)}t&&(We(t),Ze(t));var o={cells:ul,edges:il};return ol=ll=il=ul=null,o}function lr(n,t){return t.y-n.y||t.x-n.x}function cr(n,t,e){return(n.x-e.x)*(t.y-n.y)-(n.x-t.x)*(e.y-n.y)}function fr(n){return n.x}function sr(n){return n.y}function hr(){return{leaf:!0,nodes:[],point:null,x:null,y:null}}function pr(n,t,e,r,i,u){if(!n(t,e,r,i,u)){var o=.5*(e+i),a=.5*(r+u),l=t.nodes;l[0]&&pr(n,l[0],e,r,o,a),l[1]&&pr(n,l[1],o,r,i,a),l[2]&&pr(n,l[2],e,a,o,u),l[3]&&pr(n,l[3],o,a,i,u)}}function gr(n,t,e,r,i,u,o){var a,l=1/0;return function c(n,f,s,h,p){if(!(f>u||s>o||r>h||i>p)){if(g=n.point){var g,v=t-n.x,d=e-n.y,y=v*v+d*d;if(l>y){var m=Math.sqrt(l=y);r=t-m,i=e-m,u=t+m,o=e+m,a=g}}for(var M=n.nodes,x=.5*(f+h),b=.5*(s+p),_=t>=x,w=e>=b,S=w<<1|_,k=S+4;k>S;++S)if(n=M[3&S])switch(3&S){case 0:c(n,f,s,x,b);break;case 1:c(n,x,s,h,b);break;case 2:c(n,f,b,x,p);break;case 3:c(n,x,b,h,p)}}}(n,r,i,u,o),a}function vr(n,t){n=ao.rgb(n),t=ao.rgb(t);var e=n.r,r=n.g,i=n.b,u=t.r-e,o=t.g-r,a=t.b-i;return function(n){return"#"+bn(Math.round(e+u*n))+bn(Math.round(r+o*n))+bn(Math.round(i+a*n))}}function dr(n,t){var e,r={},i={};for(e in n)e in t?r[e]=Mr(n[e],t[e]):i[e]=n[e];for(e in t)e in n||(i[e]=t[e]);return function(n){for(e in r)i[e]=r[e](n);return i}}function yr(n,t){return n=+n,t=+t,function(e){return n*(1-e)+t*e}}function mr(n,t){var e,r,i,u=hl.lastIndex=pl.lastIndex=0,o=-1,a=[],l=[];for(n+="",t+="";(e=hl.exec(n))&&(r=pl.exec(t));)(i=r.index)>u&&(i=t.slice(u,i),a[o]?a[o]+=i:a[++o]=i),(e=e[0])===(r=r[0])?a[o]?a[o]+=r:a[++o]=r:(a[++o]=null,l.push({i:o,x:yr(e,r)})),u=pl.lastIndex;return u<t.length&&(i=t.slice(u),a[o]?a[o]+=i:a[++o]=i),a.length<2?l[0]?(t=l[0].x,function(n){return t(n)+""}):function(){return t}:(t=l.length,function(n){for(var e,r=0;t>r;++r)a[(e=l[r]).i]=e.x(n);return a.join("")})}function Mr(n,t){for(var e,r=ao.interpolators.length;--r>=0&&!(e=ao.interpolators[r](n,t)););return e}function xr(n,t){var e,r=[],i=[],u=n.length,o=t.length,a=Math.min(n.length,t.length);for(e=0;a>e;++e)r.push(Mr(n[e],t[e]));for(;u>e;++e)i[e]=n[e];for(;o>e;++e)i[e]=t[e];return function(n){for(e=0;a>e;++e)i[e]=r[e](n);return i}}function br(n){return function(t){return 0>=t?0:t>=1?1:n(t)}}function _r(n){return function(t){return 1-n(1-t)}}function wr(n){return function(t){return.5*(.5>t?n(2*t):2-n(2-2*t))}}function Sr(n){return n*n}function kr(n){return n*n*n}function Nr(n){if(0>=n)return 0;if(n>=1)return 1;var t=n*n,e=t*n;return 4*(.5>n?e:3*(n-t)+e-.75)}function Er(n){return function(t){return Math.pow(t,n)}}function Ar(n){return 1-Math.cos(n*Io)}function Cr(n){return Math.pow(2,10*(n-1))}function zr(n){return 1-Math.sqrt(1-n*n)}function Lr(n,t){var e;return arguments.length<2&&(t=.45),arguments.length?e=t/Ho*Math.asin(1/n):(n=1,e=t/4),function(r){return 1+n*Math.pow(2,-10*r)*Math.sin((r-e)*Ho/t)}}function qr(n){return n||(n=1.70158),function(t){return t*t*((n+1)*t-n)}}function Tr(n){return 1/2.75>n?7.5625*n*n:2/2.75>n?7.5625*(n-=1.5/2.75)*n+.75:2.5/2.75>n?7.5625*(n-=2.25/2.75)*n+.9375:7.5625*(n-=2.625/2.75)*n+.984375}function Rr(n,t){n=ao.hcl(n),t=ao.hcl(t);var e=n.h,r=n.c,i=n.l,u=t.h-e,o=t.c-r,a=t.l-i;return isNaN(o)&&(o=0,r=isNaN(r)?t.c:r),isNaN(u)?(u=0,e=isNaN(e)?t.h:e):u>180?u-=360:-180>u&&(u+=360),function(n){return sn(e+u*n,r+o*n,i+a*n)+""}}function Dr(n,t){n=ao.hsl(n),t=ao.hsl(t);var e=n.h,r=n.s,i=n.l,u=t.h-e,o=t.s-r,a=t.l-i;return isNaN(o)&&(o=0,r=isNaN(r)?t.s:r),isNaN(u)?(u=0,e=isNaN(e)?t.h:e):u>180?u-=360:-180>u&&(u+=360),function(n){return cn(e+u*n,r+o*n,i+a*n)+""}}function Pr(n,t){n=ao.lab(n),t=ao.lab(t);var e=n.l,r=n.a,i=n.b,u=t.l-e,o=t.a-r,a=t.b-i;return function(n){return pn(e+u*n,r+o*n,i+a*n)+""}}function Ur(n,t){return t-=n,function(e){return Math.round(n+t*e)}}function jr(n){var t=[n.a,n.b],e=[n.c,n.d],r=Hr(t),i=Fr(t,e),u=Hr(Or(e,t,-i))||0;t[0]*e[1]<e[0]*t[1]&&(t[0]*=-1,t[1]*=-1,r*=-1,i*=-1),this.rotate=(r?Math.atan2(t[1],t[0]):Math.atan2(-e[0],e[1]))*Zo,this.translate=[n.e,n.f],this.scale=[r,u],this.skew=u?Math.atan2(i,u)*Zo:0}function Fr(n,t){return n[0]*t[0]+n[1]*t[1]}function Hr(n){var t=Math.sqrt(Fr(n,n));return t&&(n[0]/=t,n[1]/=t),t}function Or(n,t,e){return n[0]+=e*t[0],n[1]+=e*t[1],n}function Ir(n){return n.length?n.pop()+",":""}function Yr(n,t,e,r){if(n[0]!==t[0]||n[1]!==t[1]){var i=e.push("translate(",null,",",null,")");r.push({i:i-4,x:yr(n[0],t[0])},{i:i-2,x:yr(n[1],t[1])})}else(t[0]||t[1])&&e.push("translate("+t+")")}function Zr(n,t,e,r){n!==t?(n-t>180?t+=360:t-n>180&&(n+=360),r.push({i:e.push(Ir(e)+"rotate(",null,")")-2,x:yr(n,t)})):t&&e.push(Ir(e)+"rotate("+t+")")}function Vr(n,t,e,r){n!==t?r.push({i:e.push(Ir(e)+"skewX(",null,")")-2,x:yr(n,t)}):t&&e.push(Ir(e)+"skewX("+t+")")}function Xr(n,t,e,r){if(n[0]!==t[0]||n[1]!==t[1]){var i=e.push(Ir(e)+"scale(",null,",",null,")");r.push({i:i-4,x:yr(n[0],t[0])},{i:i-2,x:yr(n[1],t[1])})}else 1===t[0]&&1===t[1]||e.push(Ir(e)+"scale("+t+")")}function $r(n,t){var e=[],r=[];return n=ao.transform(n),t=ao.transform(t),Yr(n.translate,t.translate,e,r),Zr(n.rotate,t.rotate,e,r),Vr(n.skew,t.skew,e,r),Xr(n.scale,t.scale,e,r),n=t=null,function(n){for(var t,i=-1,u=r.length;++i<u;)e[(t=r[i]).i]=t.x(n);return e.join("")}}function Br(n,t){return t=(t-=n=+n)||1/t,function(e){return(e-n)/t}}function Wr(n,t){return t=(t-=n=+n)||1/t,function(e){return Math.max(0,Math.min(1,(e-n)/t))}}function Jr(n){for(var t=n.source,e=n.target,r=Kr(t,e),i=[t];t!==r;)t=t.parent,i.push(t);for(var u=i.length;e!==r;)i.splice(u,0,e),e=e.parent;return i}function Gr(n){for(var t=[],e=n.parent;null!=e;)t.push(n),n=e,e=e.parent;return t.push(n),t}function Kr(n,t){if(n===t)return n;for(var e=Gr(n),r=Gr(t),i=e.pop(),u=r.pop(),o=null;i===u;)o=i,i=e.pop(),u=r.pop();return o}function Qr(n){n.fixed|=2}function ni(n){n.fixed&=-7}function ti(n){n.fixed|=4,n.px=n.x,n.py=n.y}function ei(n){n.fixed&=-5}function ri(n,t,e){var r=0,i=0;if(n.charge=0,!n.leaf)for(var u,o=n.nodes,a=o.length,l=-1;++l<a;)u=o[l],null!=u&&(ri(u,t,e),n.charge+=u.charge,r+=u.charge*u.cx,i+=u.charge*u.cy);if(n.point){n.leaf||(n.point.x+=Math.random()-.5,n.point.y+=Math.random()-.5);var c=t*e[n.point.index];n.charge+=n.pointCharge=c,r+=c*n.point.x,i+=c*n.point.y}n.cx=r/n.charge,n.cy=i/n.charge}function ii(n,t){return ao.rebind(n,t,"sort","children","value"),n.nodes=n,n.links=fi,n}function ui(n,t){for(var e=[n];null!=(n=e.pop());)if(t(n),(i=n.children)&&(r=i.length))for(var r,i;--r>=0;)e.push(i[r])}function oi(n,t){for(var e=[n],r=[];null!=(n=e.pop());)if(r.push(n),(u=n.children)&&(i=u.length))for(var i,u,o=-1;++o<i;)e.push(u[o]);for(;null!=(n=r.pop());)t(n)}function ai(n){return n.children}function li(n){return n.value}function ci(n,t){return t.value-n.value}function fi(n){return ao.merge(n.map(function(n){return(n.children||[]).map(function(t){return{source:n,target:t}})}))}function si(n){return n.x}function hi(n){return n.y}function pi(n,t,e){n.y0=t,n.y=e}function gi(n){return ao.range(n.length)}function vi(n){for(var t=-1,e=n[0].length,r=[];++t<e;)r[t]=0;return r}function di(n){for(var t,e=1,r=0,i=n[0][1],u=n.length;u>e;++e)(t=n[e][1])>i&&(r=e,i=t);return r}function yi(n){return n.reduce(mi,0)}function mi(n,t){return n+t[1]}function Mi(n,t){return xi(n,Math.ceil(Math.log(t.length)/Math.LN2+1))}function xi(n,t){for(var e=-1,r=+n[0],i=(n[1]-r)/t,u=[];++e<=t;)u[e]=i*e+r;return u}function bi(n){return[ao.min(n),ao.max(n)]}function _i(n,t){return n.value-t.value}function wi(n,t){var e=n._pack_next;n._pack_next=t,t._pack_prev=n,t._pack_next=e,e._pack_prev=t}function Si(n,t){n._pack_next=t,t._pack_prev=n}function ki(n,t){var e=t.x-n.x,r=t.y-n.y,i=n.r+t.r;return.999*i*i>e*e+r*r}function Ni(n){function t(n){f=Math.min(n.x-n.r,f),s=Math.max(n.x+n.r,s),h=Math.min(n.y-n.r,h),p=Math.max(n.y+n.r,p)}if((e=n.children)&&(c=e.length)){var e,r,i,u,o,a,l,c,f=1/0,s=-(1/0),h=1/0,p=-(1/0);if(e.forEach(Ei),r=e[0],r.x=-r.r,r.y=0,t(r),c>1&&(i=e[1],i.x=i.r,i.y=0,t(i),c>2))for(u=e[2],zi(r,i,u),t(u),wi(r,u),r._pack_prev=u,wi(u,i),i=r._pack_next,o=3;c>o;o++){zi(r,i,u=e[o]);var g=0,v=1,d=1;for(a=i._pack_next;a!==i;a=a._pack_next,v++)if(ki(a,u)){g=1;break}if(1==g)for(l=r._pack_prev;l!==a._pack_prev&&!ki(l,u);l=l._pack_prev,d++);g?(d>v||v==d&&i.r<r.r?Si(r,i=a):Si(r=l,i),o--):(wi(r,u),i=u,t(u))}var y=(f+s)/2,m=(h+p)/2,M=0;for(o=0;c>o;o++)u=e[o],u.x-=y,u.y-=m,M=Math.max(M,u.r+Math.sqrt(u.x*u.x+u.y*u.y));n.r=M,e.forEach(Ai)}}function Ei(n){n._pack_next=n._pack_prev=n}function Ai(n){delete n._pack_next,delete n._pack_prev}function Ci(n,t,e,r){var i=n.children;if(n.x=t+=r*n.x,n.y=e+=r*n.y,n.r*=r,i)for(var u=-1,o=i.length;++u<o;)Ci(i[u],t,e,r)}function zi(n,t,e){var r=n.r+e.r,i=t.x-n.x,u=t.y-n.y;if(r&&(i||u)){var o=t.r+e.r,a=i*i+u*u;o*=o,r*=r;var l=.5+(r-o)/(2*a),c=Math.sqrt(Math.max(0,2*o*(r+a)-(r-=a)*r-o*o))/(2*a);e.x=n.x+l*i+c*u,e.y=n.y+l*u-c*i}else e.x=n.x+r,e.y=n.y}function Li(n,t){return n.parent==t.parent?1:2}function qi(n){var t=n.children;return t.length?t[0]:n.t}function Ti(n){var t,e=n.children;return(t=e.length)?e[t-1]:n.t}function Ri(n,t,e){var r=e/(t.i-n.i);t.c-=r,t.s+=e,n.c+=r,t.z+=e,t.m+=e}function Di(n){for(var t,e=0,r=0,i=n.children,u=i.length;--u>=0;)t=i[u],t.z+=e,t.m+=e,e+=t.s+(r+=t.c)}function Pi(n,t,e){return n.a.parent===t.parent?n.a:e}function Ui(n){return 1+ao.max(n,function(n){return n.y})}function ji(n){return n.reduce(function(n,t){return n+t.x},0)/n.length}function Fi(n){var t=n.children;return t&&t.length?Fi(t[0]):n}function Hi(n){var t,e=n.children;return e&&(t=e.length)?Hi(e[t-1]):n}function Oi(n){return{x:n.x,y:n.y,dx:n.dx,dy:n.dy}}function Ii(n,t){var e=n.x+t[3],r=n.y+t[0],i=n.dx-t[1]-t[3],u=n.dy-t[0]-t[2];return 0>i&&(e+=i/2,i=0),0>u&&(r+=u/2,u=0),{x:e,y:r,dx:i,dy:u}}function Yi(n){var t=n[0],e=n[n.length-1];return e>t?[t,e]:[e,t]}function Zi(n){return n.rangeExtent?n.rangeExtent():Yi(n.range())}function Vi(n,t,e,r){var i=e(n[0],n[1]),u=r(t[0],t[1]);return function(n){return u(i(n))}}function Xi(n,t){var e,r=0,i=n.length-1,u=n[r],o=n[i];return u>o&&(e=r,r=i,i=e,e=u,u=o,o=e),n[r]=t.floor(u),n[i]=t.ceil(o),n}function $i(n){return n?{floor:function(t){return Math.floor(t/n)*n},ceil:function(t){return Math.ceil(t/n)*n}}:Sl}function Bi(n,t,e,r){var i=[],u=[],o=0,a=Math.min(n.length,t.length)-1;for(n[a]<n[0]&&(n=n.slice().reverse(),t=t.slice().reverse());++o<=a;)i.push(e(n[o-1],n[o])),u.push(r(t[o-1],t[o]));return function(t){var e=ao.bisect(n,t,1,a)-1;return u[e](i[e](t))}}function Wi(n,t,e,r){function i(){var i=Math.min(n.length,t.length)>2?Bi:Vi,l=r?Wr:Br;return o=i(n,t,l,e),a=i(t,n,l,Mr),u}function u(n){return o(n)}var o,a;return u.invert=function(n){return a(n)},u.domain=function(t){return arguments.length?(n=t.map(Number),i()):n},u.range=function(n){return arguments.length?(t=n,i()):t},u.rangeRound=function(n){return u.range(n).interpolate(Ur)},u.clamp=function(n){return arguments.length?(r=n,i()):r},u.interpolate=function(n){return arguments.length?(e=n,i()):e},u.ticks=function(t){return Qi(n,t)},u.tickFormat=function(t,e){return nu(n,t,e)},u.nice=function(t){return Gi(n,t),i()},u.copy=function(){return Wi(n,t,e,r)},i()}function Ji(n,t){return ao.rebind(n,t,"range","rangeRound","interpolate","clamp")}function Gi(n,t){return Xi(n,$i(Ki(n,t)[2])),Xi(n,$i(Ki(n,t)[2])),n}function Ki(n,t){null==t&&(t=10);var e=Yi(n),r=e[1]-e[0],i=Math.pow(10,Math.floor(Math.log(r/t)/Math.LN10)),u=t/r*i;return.15>=u?i*=10:.35>=u?i*=5:.75>=u&&(i*=2),e[0]=Math.ceil(e[0]/i)*i,e[1]=Math.floor(e[1]/i)*i+.5*i,e[2]=i,e}function Qi(n,t){return ao.range.apply(ao,Ki(n,t))}function nu(n,t,e){var r=Ki(n,t);if(e){var i=ha.exec(e);if(i.shift(),"s"===i[8]){var u=ao.formatPrefix(Math.max(xo(r[0]),xo(r[1])));return i[7]||(i[7]="."+tu(u.scale(r[2]))),i[8]="f",e=ao.format(i.join("")),function(n){return e(u.scale(n))+u.symbol}}i[7]||(i[7]="."+eu(i[8],r)),e=i.join("")}else e=",."+tu(r[2])+"f";return ao.format(e)}function tu(n){return-Math.floor(Math.log(n)/Math.LN10+.01)}function eu(n,t){var e=tu(t[2]);return n in kl?Math.abs(e-tu(Math.max(xo(t[0]),xo(t[1]))))+ +("e"!==n):e-2*("%"===n)}function ru(n,t,e,r){function i(n){return(e?Math.log(0>n?0:n):-Math.log(n>0?0:-n))/Math.log(t)}function u(n){return e?Math.pow(t,n):-Math.pow(t,-n)}function o(t){return n(i(t))}return o.invert=function(t){return u(n.invert(t))},o.domain=function(t){return arguments.length?(e=t[0]>=0,n.domain((r=t.map(Number)).map(i)),o):r},o.base=function(e){return arguments.length?(t=+e,n.domain(r.map(i)),o):t},o.nice=function(){var t=Xi(r.map(i),e?Math:El);return n.domain(t),r=t.map(u),o},o.ticks=function(){var n=Yi(r),o=[],a=n[0],l=n[1],c=Math.floor(i(a)),f=Math.ceil(i(l)),s=t%1?2:t;if(isFinite(f-c)){if(e){for(;f>c;c++)for(var h=1;s>h;h++)o.push(u(c)*h);o.push(u(c))}else for(o.push(u(c));c++<f;)for(var h=s-1;h>0;h--)o.push(u(c)*h);for(c=0;o[c]<a;c++);for(f=o.length;o[f-1]>l;f--);o=o.slice(c,f)}return o},o.tickFormat=function(n,e){if(!arguments.length)return Nl;arguments.length<2?e=Nl:"function"!=typeof e&&(e=ao.format(e));var r=Math.max(1,t*n/o.ticks().length);return function(n){var o=n/u(Math.round(i(n)));return t-.5>o*t&&(o*=t),r>=o?e(n):""}},o.copy=function(){return ru(n.copy(),t,e,r)},Ji(o,n)}function iu(n,t,e){function r(t){return n(i(t))}var i=uu(t),u=uu(1/t);return r.invert=function(t){return u(n.invert(t))},r.domain=function(t){return arguments.length?(n.domain((e=t.map(Number)).map(i)),r):e},r.ticks=function(n){return Qi(e,n)},r.tickFormat=function(n,t){return nu(e,n,t)},r.nice=function(n){return r.domain(Gi(e,n))},r.exponent=function(o){return arguments.length?(i=uu(t=o),u=uu(1/t),n.domain(e.map(i)),r):t},r.copy=function(){return iu(n.copy(),t,e)},Ji(r,n)}function uu(n){return function(t){return 0>t?-Math.pow(-t,n):Math.pow(t,n)}}function ou(n,t){function e(e){return u[((i.get(e)||("range"===t.t?i.set(e,n.push(e)):NaN))-1)%u.length]}function r(t,e){return ao.range(n.length).map(function(n){return t+e*n})}var i,u,o;return e.domain=function(r){if(!arguments.length)return n;n=[],i=new c;for(var u,o=-1,a=r.length;++o<a;)i.has(u=r[o])||i.set(u,n.push(u));return e[t.t].apply(e,t.a)},e.range=function(n){return arguments.length?(u=n,o=0,t={t:"range",a:arguments},e):u},e.rangePoints=function(i,a){arguments.length<2&&(a=0);var l=i[0],c=i[1],f=n.length<2?(l=(l+c)/2,0):(c-l)/(n.length-1+a);return u=r(l+f*a/2,f),o=0,t={t:"rangePoints",a:arguments},e},e.rangeRoundPoints=function(i,a){arguments.length<2&&(a=0);var l=i[0],c=i[1],f=n.length<2?(l=c=Math.round((l+c)/2),0):(c-l)/(n.length-1+a)|0;return u=r(l+Math.round(f*a/2+(c-l-(n.length-1+a)*f)/2),f),o=0,t={t:"rangeRoundPoints",a:arguments},e},e.rangeBands=function(i,a,l){arguments.length<2&&(a=0),arguments.length<3&&(l=a);var c=i[1]<i[0],f=i[c-0],s=i[1-c],h=(s-f)/(n.length-a+2*l);return u=r(f+h*l,h),c&&u.reverse(),o=h*(1-a),t={t:"rangeBands",a:arguments},e},e.rangeRoundBands=function(i,a,l){arguments.length<2&&(a=0),arguments.length<3&&(l=a);var c=i[1]<i[0],f=i[c-0],s=i[1-c],h=Math.floor((s-f)/(n.length-a+2*l));return u=r(f+Math.round((s-f-(n.length-a)*h)/2),h),c&&u.reverse(),o=Math.round(h*(1-a)),t={t:"rangeRoundBands",a:arguments},e},e.rangeBand=function(){return o},e.rangeExtent=function(){return Yi(t.a[0])},e.copy=function(){return ou(n,t)},e.domain(n)}function au(n,t){function u(){var e=0,r=t.length;for(a=[];++e<r;)a[e-1]=ao.quantile(n,e/r);return o}function o(n){return isNaN(n=+n)?void 0:t[ao.bisect(a,n)]}var a;return o.domain=function(t){return arguments.length?(n=t.map(r).filter(i).sort(e),u()):n},o.range=function(n){return arguments.length?(t=n,u()):t},o.quantiles=function(){return a},o.invertExtent=function(e){return e=t.indexOf(e),0>e?[NaN,NaN]:[e>0?a[e-1]:n[0],e<a.length?a[e]:n[n.length-1]]},o.copy=function(){return au(n,t)},u()}function lu(n,t,e){function r(t){return e[Math.max(0,Math.min(o,Math.floor(u*(t-n))))]}function i(){return u=e.length/(t-n),o=e.length-1,r}var u,o;return r.domain=function(e){return arguments.length?(n=+e[0],t=+e[e.length-1],i()):[n,t]},r.range=function(n){return arguments.length?(e=n,i()):e},r.invertExtent=function(t){return t=e.indexOf(t),t=0>t?NaN:t/u+n,[t,t+1/u]},r.copy=function(){return lu(n,t,e)},i()}function cu(n,t){function e(e){return e>=e?t[ao.bisect(n,e)]:void 0}return e.domain=function(t){return arguments.length?(n=t,e):n},e.range=function(n){return arguments.length?(t=n,e):t},e.invertExtent=function(e){return e=t.indexOf(e),[n[e-1],n[e]]},e.copy=function(){return cu(n,t)},e}function fu(n){function t(n){return+n}return t.invert=t,t.domain=t.range=function(e){return arguments.length?(n=e.map(t),t):n},t.ticks=function(t){return Qi(n,t)},t.tickFormat=function(t,e){return nu(n,t,e)},t.copy=function(){return fu(n)},t}function su(){return 0}function hu(n){return n.innerRadius}function pu(n){return n.outerRadius}function gu(n){return n.startAngle}function vu(n){return n.endAngle}function du(n){return n&&n.padAngle}function yu(n,t,e,r){return(n-e)*t-(t-r)*n>0?0:1}function mu(n,t,e,r,i){var u=n[0]-t[0],o=n[1]-t[1],a=(i?r:-r)/Math.sqrt(u*u+o*o),l=a*o,c=-a*u,f=n[0]+l,s=n[1]+c,h=t[0]+l,p=t[1]+c,g=(f+h)/2,v=(s+p)/2,d=h-f,y=p-s,m=d*d+y*y,M=e-r,x=f*p-h*s,b=(0>y?-1:1)*Math.sqrt(Math.max(0,M*M*m-x*x)),_=(x*y-d*b)/m,w=(-x*d-y*b)/m,S=(x*y+d*b)/m,k=(-x*d+y*b)/m,N=_-g,E=w-v,A=S-g,C=k-v;return N*N+E*E>A*A+C*C&&(_=S,w=k),[[_-l,w-c],[_*e/M,w*e/M]]}function Mu(n){function t(t){function o(){c.push("M",u(n(f),a))}for(var l,c=[],f=[],s=-1,h=t.length,p=En(e),g=En(r);++s<h;)i.call(this,l=t[s],s)?f.push([+p.call(this,l,s),+g.call(this,l,s)]):f.length&&(o(),f=[]);return f.length&&o(),c.length?c.join(""):null}var e=Ce,r=ze,i=zt,u=xu,o=u.key,a=.7;return t.x=function(n){return arguments.length?(e=n,t):e},t.y=function(n){return arguments.length?(r=n,t):r},t.defined=function(n){return arguments.length?(i=n,t):i},t.interpolate=function(n){return arguments.length?(o="function"==typeof n?u=n:(u=Tl.get(n)||xu).key,t):o},t.tension=function(n){return arguments.length?(a=n,t):a},t}function xu(n){return n.length>1?n.join("L"):n+"Z"}function bu(n){return n.join("L")+"Z"}function _u(n){for(var t=0,e=n.length,r=n[0],i=[r[0],",",r[1]];++t<e;)i.push("H",(r[0]+(r=n[t])[0])/2,"V",r[1]);return e>1&&i.push("H",r[0]),i.join("")}function wu(n){for(var t=0,e=n.length,r=n[0],i=[r[0],",",r[1]];++t<e;)i.push("V",(r=n[t])[1],"H",r[0]);return i.join("")}function Su(n){for(var t=0,e=n.length,r=n[0],i=[r[0],",",r[1]];++t<e;)i.push("H",(r=n[t])[0],"V",r[1]);return i.join("")}function ku(n,t){return n.length<4?xu(n):n[1]+Au(n.slice(1,-1),Cu(n,t))}function Nu(n,t){return n.length<3?bu(n):n[0]+Au((n.push(n[0]),n),Cu([n[n.length-2]].concat(n,[n[1]]),t))}function Eu(n,t){return n.length<3?xu(n):n[0]+Au(n,Cu(n,t))}function Au(n,t){if(t.length<1||n.length!=t.length&&n.length!=t.length+2)return xu(n);var e=n.length!=t.length,r="",i=n[0],u=n[1],o=t[0],a=o,l=1;if(e&&(r+="Q"+(u[0]-2*o[0]/3)+","+(u[1]-2*o[1]/3)+","+u[0]+","+u[1],i=n[1],l=2),t.length>1){a=t[1],u=n[l],l++,r+="C"+(i[0]+o[0])+","+(i[1]+o[1])+","+(u[0]-a[0])+","+(u[1]-a[1])+","+u[0]+","+u[1];for(var c=2;c<t.length;c++,l++)u=n[l],a=t[c],r+="S"+(u[0]-a[0])+","+(u[1]-a[1])+","+u[0]+","+u[1]}if(e){var f=n[l];r+="Q"+(u[0]+2*a[0]/3)+","+(u[1]+2*a[1]/3)+","+f[0]+","+f[1]}return r}function Cu(n,t){for(var e,r=[],i=(1-t)/2,u=n[0],o=n[1],a=1,l=n.length;++a<l;)e=u,u=o,o=n[a],r.push([i*(o[0]-e[0]),i*(o[1]-e[1])]);return r}function zu(n){if(n.length<3)return xu(n);var t=1,e=n.length,r=n[0],i=r[0],u=r[1],o=[i,i,i,(r=n[1])[0]],a=[u,u,u,r[1]],l=[i,",",u,"L",Ru(Pl,o),",",Ru(Pl,a)];for(n.push(n[e-1]);++t<=e;)r=n[t],o.shift(),o.push(r[0]),a.shift(),a.push(r[1]),Du(l,o,a);return n.pop(),l.push("L",r),l.join("")}function Lu(n){if(n.length<4)return xu(n);for(var t,e=[],r=-1,i=n.length,u=[0],o=[0];++r<3;)t=n[r],u.push(t[0]),o.push(t[1]);for(e.push(Ru(Pl,u)+","+Ru(Pl,o)),--r;++r<i;)t=n[r],u.shift(),u.push(t[0]),o.shift(),o.push(t[1]),Du(e,u,o);return e.join("")}function qu(n){for(var t,e,r=-1,i=n.length,u=i+4,o=[],a=[];++r<4;)e=n[r%i],o.push(e[0]),a.push(e[1]);for(t=[Ru(Pl,o),",",Ru(Pl,a)],--r;++r<u;)e=n[r%i],o.shift(),o.push(e[0]),a.shift(),a.push(e[1]),Du(t,o,a);return t.join("")}function Tu(n,t){var e=n.length-1;if(e)for(var r,i,u=n[0][0],o=n[0][1],a=n[e][0]-u,l=n[e][1]-o,c=-1;++c<=e;)r=n[c],i=c/e,r[0]=t*r[0]+(1-t)*(u+i*a),r[1]=t*r[1]+(1-t)*(o+i*l);return zu(n)}function Ru(n,t){return n[0]*t[0]+n[1]*t[1]+n[2]*t[2]+n[3]*t[3]}function Du(n,t,e){n.push("C",Ru(Rl,t),",",Ru(Rl,e),",",Ru(Dl,t),",",Ru(Dl,e),",",Ru(Pl,t),",",Ru(Pl,e))}function Pu(n,t){return(t[1]-n[1])/(t[0]-n[0])}function Uu(n){for(var t=0,e=n.length-1,r=[],i=n[0],u=n[1],o=r[0]=Pu(i,u);++t<e;)r[t]=(o+(o=Pu(i=u,u=n[t+1])))/2;return r[t]=o,r}function ju(n){for(var t,e,r,i,u=[],o=Uu(n),a=-1,l=n.length-1;++a<l;)t=Pu(n[a],n[a+1]),xo(t)<Uo?o[a]=o[a+1]=0:(e=o[a]/t,r=o[a+1]/t,i=e*e+r*r,i>9&&(i=3*t/Math.sqrt(i),o[a]=i*e,o[a+1]=i*r));for(a=-1;++a<=l;)i=(n[Math.min(l,a+1)][0]-n[Math.max(0,a-1)][0])/(6*(1+o[a]*o[a])),u.push([i||0,o[a]*i||0]);return u}function Fu(n){return n.length<3?xu(n):n[0]+Au(n,ju(n))}function Hu(n){for(var t,e,r,i=-1,u=n.length;++i<u;)t=n[i],e=t[0],r=t[1]-Io,t[0]=e*Math.cos(r),t[1]=e*Math.sin(r);return n}function Ou(n){function t(t){function l(){v.push("M",a(n(y),s),f,c(n(d.reverse()),s),"Z")}for(var h,p,g,v=[],d=[],y=[],m=-1,M=t.length,x=En(e),b=En(i),_=e===r?function(){
+	return p}:En(r),w=i===u?function(){return g}:En(u);++m<M;)o.call(this,h=t[m],m)?(d.push([p=+x.call(this,h,m),g=+b.call(this,h,m)]),y.push([+_.call(this,h,m),+w.call(this,h,m)])):d.length&&(l(),d=[],y=[]);return d.length&&l(),v.length?v.join(""):null}var e=Ce,r=Ce,i=0,u=ze,o=zt,a=xu,l=a.key,c=a,f="L",s=.7;return t.x=function(n){return arguments.length?(e=r=n,t):r},t.x0=function(n){return arguments.length?(e=n,t):e},t.x1=function(n){return arguments.length?(r=n,t):r},t.y=function(n){return arguments.length?(i=u=n,t):u},t.y0=function(n){return arguments.length?(i=n,t):i},t.y1=function(n){return arguments.length?(u=n,t):u},t.defined=function(n){return arguments.length?(o=n,t):o},t.interpolate=function(n){return arguments.length?(l="function"==typeof n?a=n:(a=Tl.get(n)||xu).key,c=a.reverse||a,f=a.closed?"M":"L",t):l},t.tension=function(n){return arguments.length?(s=n,t):s},t}function Iu(n){return n.radius}function Yu(n){return[n.x,n.y]}function Zu(n){return function(){var t=n.apply(this,arguments),e=t[0],r=t[1]-Io;return[e*Math.cos(r),e*Math.sin(r)]}}function Vu(){return 64}function Xu(){return"circle"}function $u(n){var t=Math.sqrt(n/Fo);return"M0,"+t+"A"+t+","+t+" 0 1,1 0,"+-t+"A"+t+","+t+" 0 1,1 0,"+t+"Z"}function Bu(n){return function(){var t,e,r;(t=this[n])&&(r=t[e=t.active])&&(r.timer.c=null,r.timer.t=NaN,--t.count?delete t[e]:delete this[n],t.active+=.5,r.event&&r.event.interrupt.call(this,this.__data__,r.index))}}function Wu(n,t,e){return ko(n,Yl),n.namespace=t,n.id=e,n}function Ju(n,t,e,r){var i=n.id,u=n.namespace;return Y(n,"function"==typeof e?function(n,o,a){n[u][i].tween.set(t,r(e.call(n,n.__data__,o,a)))}:(e=r(e),function(n){n[u][i].tween.set(t,e)}))}function Gu(n){return null==n&&(n=""),function(){this.textContent=n}}function Ku(n){return null==n?"__transition__":"__transition_"+n+"__"}function Qu(n,t,e,r,i){function u(n){var t=v.delay;return f.t=t+l,n>=t?o(n-t):void(f.c=o)}function o(e){var i=g.active,u=g[i];u&&(u.timer.c=null,u.timer.t=NaN,--g.count,delete g[i],u.event&&u.event.interrupt.call(n,n.__data__,u.index));for(var o in g)if(r>+o){var c=g[o];c.timer.c=null,c.timer.t=NaN,--g.count,delete g[o]}f.c=a,qn(function(){return f.c&&a(e||1)&&(f.c=null,f.t=NaN),1},0,l),g.active=r,v.event&&v.event.start.call(n,n.__data__,t),p=[],v.tween.forEach(function(e,r){(r=r.call(n,n.__data__,t))&&p.push(r)}),h=v.ease,s=v.duration}function a(i){for(var u=i/s,o=h(u),a=p.length;a>0;)p[--a].call(n,o);return u>=1?(v.event&&v.event.end.call(n,n.__data__,t),--g.count?delete g[r]:delete n[e],1):void 0}var l,f,s,h,p,g=n[e]||(n[e]={active:0,count:0}),v=g[r];v||(l=i.time,f=qn(u,0,l),v=g[r]={tween:new c,time:l,timer:f,delay:i.delay,duration:i.duration,ease:i.ease,index:t},i=null,++g.count)}function no(n,t,e){n.attr("transform",function(n){var r=t(n);return"translate("+(isFinite(r)?r:e(n))+",0)"})}function to(n,t,e){n.attr("transform",function(n){var r=t(n);return"translate(0,"+(isFinite(r)?r:e(n))+")"})}function eo(n){return n.toISOString()}function ro(n,t,e){function r(t){return n(t)}function i(n,e){var r=n[1]-n[0],i=r/e,u=ao.bisect(Kl,i);return u==Kl.length?[t.year,Ki(n.map(function(n){return n/31536e6}),e)[2]]:u?t[i/Kl[u-1]<Kl[u]/i?u-1:u]:[tc,Ki(n,e)[2]]}return r.invert=function(t){return io(n.invert(t))},r.domain=function(t){return arguments.length?(n.domain(t),r):n.domain().map(io)},r.nice=function(n,t){function e(e){return!isNaN(e)&&!n.range(e,io(+e+1),t).length}var u=r.domain(),o=Yi(u),a=null==n?i(o,10):"number"==typeof n&&i(o,n);return a&&(n=a[0],t=a[1]),r.domain(Xi(u,t>1?{floor:function(t){for(;e(t=n.floor(t));)t=io(t-1);return t},ceil:function(t){for(;e(t=n.ceil(t));)t=io(+t+1);return t}}:n))},r.ticks=function(n,t){var e=Yi(r.domain()),u=null==n?i(e,10):"number"==typeof n?i(e,n):!n.range&&[{range:n},t];return u&&(n=u[0],t=u[1]),n.range(e[0],io(+e[1]+1),1>t?1:t)},r.tickFormat=function(){return e},r.copy=function(){return ro(n.copy(),t,e)},Ji(r,n)}function io(n){return new Date(n)}function uo(n){return JSON.parse(n.responseText)}function oo(n){var t=fo.createRange();return t.selectNode(fo.body),t.createContextualFragment(n.responseText)}var ao={version:"3.5.17"},lo=[].slice,co=function(n){return lo.call(n)},fo=this.document;if(fo)try{co(fo.documentElement.childNodes)[0].nodeType}catch(so){co=function(n){for(var t=n.length,e=new Array(t);t--;)e[t]=n[t];return e}}if(Date.now||(Date.now=function(){return+new Date}),fo)try{fo.createElement("DIV").style.setProperty("opacity",0,"")}catch(ho){var po=this.Element.prototype,go=po.setAttribute,vo=po.setAttributeNS,yo=this.CSSStyleDeclaration.prototype,mo=yo.setProperty;po.setAttribute=function(n,t){go.call(this,n,t+"")},po.setAttributeNS=function(n,t,e){vo.call(this,n,t,e+"")},yo.setProperty=function(n,t,e){mo.call(this,n,t+"",e)}}ao.ascending=e,ao.descending=function(n,t){return n>t?-1:t>n?1:t>=n?0:NaN},ao.min=function(n,t){var e,r,i=-1,u=n.length;if(1===arguments.length){for(;++i<u;)if(null!=(r=n[i])&&r>=r){e=r;break}for(;++i<u;)null!=(r=n[i])&&e>r&&(e=r)}else{for(;++i<u;)if(null!=(r=t.call(n,n[i],i))&&r>=r){e=r;break}for(;++i<u;)null!=(r=t.call(n,n[i],i))&&e>r&&(e=r)}return e},ao.max=function(n,t){var e,r,i=-1,u=n.length;if(1===arguments.length){for(;++i<u;)if(null!=(r=n[i])&&r>=r){e=r;break}for(;++i<u;)null!=(r=n[i])&&r>e&&(e=r)}else{for(;++i<u;)if(null!=(r=t.call(n,n[i],i))&&r>=r){e=r;break}for(;++i<u;)null!=(r=t.call(n,n[i],i))&&r>e&&(e=r)}return e},ao.extent=function(n,t){var e,r,i,u=-1,o=n.length;if(1===arguments.length){for(;++u<o;)if(null!=(r=n[u])&&r>=r){e=i=r;break}for(;++u<o;)null!=(r=n[u])&&(e>r&&(e=r),r>i&&(i=r))}else{for(;++u<o;)if(null!=(r=t.call(n,n[u],u))&&r>=r){e=i=r;break}for(;++u<o;)null!=(r=t.call(n,n[u],u))&&(e>r&&(e=r),r>i&&(i=r))}return[e,i]},ao.sum=function(n,t){var e,r=0,u=n.length,o=-1;if(1===arguments.length)for(;++o<u;)i(e=+n[o])&&(r+=e);else for(;++o<u;)i(e=+t.call(n,n[o],o))&&(r+=e);return r},ao.mean=function(n,t){var e,u=0,o=n.length,a=-1,l=o;if(1===arguments.length)for(;++a<o;)i(e=r(n[a]))?u+=e:--l;else for(;++a<o;)i(e=r(t.call(n,n[a],a)))?u+=e:--l;return l?u/l:void 0},ao.quantile=function(n,t){var e=(n.length-1)*t+1,r=Math.floor(e),i=+n[r-1],u=e-r;return u?i+u*(n[r]-i):i},ao.median=function(n,t){var u,o=[],a=n.length,l=-1;if(1===arguments.length)for(;++l<a;)i(u=r(n[l]))&&o.push(u);else for(;++l<a;)i(u=r(t.call(n,n[l],l)))&&o.push(u);return o.length?ao.quantile(o.sort(e),.5):void 0},ao.variance=function(n,t){var e,u,o=n.length,a=0,l=0,c=-1,f=0;if(1===arguments.length)for(;++c<o;)i(e=r(n[c]))&&(u=e-a,a+=u/++f,l+=u*(e-a));else for(;++c<o;)i(e=r(t.call(n,n[c],c)))&&(u=e-a,a+=u/++f,l+=u*(e-a));return f>1?l/(f-1):void 0},ao.deviation=function(){var n=ao.variance.apply(this,arguments);return n?Math.sqrt(n):n};var Mo=u(e);ao.bisectLeft=Mo.left,ao.bisect=ao.bisectRight=Mo.right,ao.bisector=function(n){return u(1===n.length?function(t,r){return e(n(t),r)}:n)},ao.shuffle=function(n,t,e){(u=arguments.length)<3&&(e=n.length,2>u&&(t=0));for(var r,i,u=e-t;u;)i=Math.random()*u--|0,r=n[u+t],n[u+t]=n[i+t],n[i+t]=r;return n},ao.permute=function(n,t){for(var e=t.length,r=new Array(e);e--;)r[e]=n[t[e]];return r},ao.pairs=function(n){for(var t,e=0,r=n.length-1,i=n[0],u=new Array(0>r?0:r);r>e;)u[e]=[t=i,i=n[++e]];return u},ao.transpose=function(n){if(!(i=n.length))return[];for(var t=-1,e=ao.min(n,o),r=new Array(e);++t<e;)for(var i,u=-1,a=r[t]=new Array(i);++u<i;)a[u]=n[u][t];return r},ao.zip=function(){return ao.transpose(arguments)},ao.keys=function(n){var t=[];for(var e in n)t.push(e);return t},ao.values=function(n){var t=[];for(var e in n)t.push(n[e]);return t},ao.entries=function(n){var t=[];for(var e in n)t.push({key:e,value:n[e]});return t},ao.merge=function(n){for(var t,e,r,i=n.length,u=-1,o=0;++u<i;)o+=n[u].length;for(e=new Array(o);--i>=0;)for(r=n[i],t=r.length;--t>=0;)e[--o]=r[t];return e};var xo=Math.abs;ao.range=function(n,t,e){if(arguments.length<3&&(e=1,arguments.length<2&&(t=n,n=0)),(t-n)/e===1/0)throw new Error("infinite range");var r,i=[],u=a(xo(e)),o=-1;if(n*=u,t*=u,e*=u,0>e)for(;(r=n+e*++o)>t;)i.push(r/u);else for(;(r=n+e*++o)<t;)i.push(r/u);return i},ao.map=function(n,t){var e=new c;if(n instanceof c)n.forEach(function(n,t){e.set(n,t)});else if(Array.isArray(n)){var r,i=-1,u=n.length;if(1===arguments.length)for(;++i<u;)e.set(i,n[i]);else for(;++i<u;)e.set(t.call(n,r=n[i],i),r)}else for(var o in n)e.set(o,n[o]);return e};var bo="__proto__",_o="\x00";l(c,{has:h,get:function(n){return this._[f(n)]},set:function(n,t){return this._[f(n)]=t},remove:p,keys:g,values:function(){var n=[];for(var t in this._)n.push(this._[t]);return n},entries:function(){var n=[];for(var t in this._)n.push({key:s(t),value:this._[t]});return n},size:v,empty:d,forEach:function(n){for(var t in this._)n.call(this,s(t),this._[t])}}),ao.nest=function(){function n(t,o,a){if(a>=u.length)return r?r.call(i,o):e?o.sort(e):o;for(var l,f,s,h,p=-1,g=o.length,v=u[a++],d=new c;++p<g;)(h=d.get(l=v(f=o[p])))?h.push(f):d.set(l,[f]);return t?(f=t(),s=function(e,r){f.set(e,n(t,r,a))}):(f={},s=function(e,r){f[e]=n(t,r,a)}),d.forEach(s),f}function t(n,e){if(e>=u.length)return n;var r=[],i=o[e++];return n.forEach(function(n,i){r.push({key:n,values:t(i,e)})}),i?r.sort(function(n,t){return i(n.key,t.key)}):r}var e,r,i={},u=[],o=[];return i.map=function(t,e){return n(e,t,0)},i.entries=function(e){return t(n(ao.map,e,0),0)},i.key=function(n){return u.push(n),i},i.sortKeys=function(n){return o[u.length-1]=n,i},i.sortValues=function(n){return e=n,i},i.rollup=function(n){return r=n,i},i},ao.set=function(n){var t=new y;if(n)for(var e=0,r=n.length;r>e;++e)t.add(n[e]);return t},l(y,{has:h,add:function(n){return this._[f(n+="")]=!0,n},remove:p,values:g,size:v,empty:d,forEach:function(n){for(var t in this._)n.call(this,s(t))}}),ao.behavior={},ao.rebind=function(n,t){for(var e,r=1,i=arguments.length;++r<i;)n[e=arguments[r]]=M(n,t,t[e]);return n};var wo=["webkit","ms","moz","Moz","o","O"];ao.dispatch=function(){for(var n=new _,t=-1,e=arguments.length;++t<e;)n[arguments[t]]=w(n);return n},_.prototype.on=function(n,t){var e=n.indexOf("."),r="";if(e>=0&&(r=n.slice(e+1),n=n.slice(0,e)),n)return arguments.length<2?this[n].on(r):this[n].on(r,t);if(2===arguments.length){if(null==t)for(n in this)this.hasOwnProperty(n)&&this[n].on(r,null);return this}},ao.event=null,ao.requote=function(n){return n.replace(So,"\\$&")};var So=/[\\\^\$\*\+\?\|\[\]\(\)\.\{\}]/g,ko={}.__proto__?function(n,t){n.__proto__=t}:function(n,t){for(var e in t)n[e]=t[e]},No=function(n,t){return t.querySelector(n)},Eo=function(n,t){return t.querySelectorAll(n)},Ao=function(n,t){var e=n.matches||n[x(n,"matchesSelector")];return(Ao=function(n,t){return e.call(n,t)})(n,t)};"function"==typeof Sizzle&&(No=function(n,t){return Sizzle(n,t)[0]||null},Eo=Sizzle,Ao=Sizzle.matchesSelector),ao.selection=function(){return ao.select(fo.documentElement)};var Co=ao.selection.prototype=[];Co.select=function(n){var t,e,r,i,u=[];n=A(n);for(var o=-1,a=this.length;++o<a;){u.push(t=[]),t.parentNode=(r=this[o]).parentNode;for(var l=-1,c=r.length;++l<c;)(i=r[l])?(t.push(e=n.call(i,i.__data__,l,o)),e&&"__data__"in i&&(e.__data__=i.__data__)):t.push(null)}return E(u)},Co.selectAll=function(n){var t,e,r=[];n=C(n);for(var i=-1,u=this.length;++i<u;)for(var o=this[i],a=-1,l=o.length;++a<l;)(e=o[a])&&(r.push(t=co(n.call(e,e.__data__,a,i))),t.parentNode=e);return E(r)};var zo="http://www.w3.org/1999/xhtml",Lo={svg:"http://www.w3.org/2000/svg",xhtml:zo,xlink:"http://www.w3.org/1999/xlink",xml:"http://www.w3.org/XML/1998/namespace",xmlns:"http://www.w3.org/2000/xmlns/"};ao.ns={prefix:Lo,qualify:function(n){var t=n.indexOf(":"),e=n;return t>=0&&"xmlns"!==(e=n.slice(0,t))&&(n=n.slice(t+1)),Lo.hasOwnProperty(e)?{space:Lo[e],local:n}:n}},Co.attr=function(n,t){if(arguments.length<2){if("string"==typeof n){var e=this.node();return n=ao.ns.qualify(n),n.local?e.getAttributeNS(n.space,n.local):e.getAttribute(n)}for(t in n)this.each(z(t,n[t]));return this}return this.each(z(n,t))},Co.classed=function(n,t){if(arguments.length<2){if("string"==typeof n){var e=this.node(),r=(n=T(n)).length,i=-1;if(t=e.classList){for(;++i<r;)if(!t.contains(n[i]))return!1}else for(t=e.getAttribute("class");++i<r;)if(!q(n[i]).test(t))return!1;return!0}for(t in n)this.each(R(t,n[t]));return this}return this.each(R(n,t))},Co.style=function(n,e,r){var i=arguments.length;if(3>i){if("string"!=typeof n){2>i&&(e="");for(r in n)this.each(P(r,n[r],e));return this}if(2>i){var u=this.node();return t(u).getComputedStyle(u,null).getPropertyValue(n)}r=""}return this.each(P(n,e,r))},Co.property=function(n,t){if(arguments.length<2){if("string"==typeof n)return this.node()[n];for(t in n)this.each(U(t,n[t]));return this}return this.each(U(n,t))},Co.text=function(n){return arguments.length?this.each("function"==typeof n?function(){var t=n.apply(this,arguments);this.textContent=null==t?"":t}:null==n?function(){this.textContent=""}:function(){this.textContent=n}):this.node().textContent},Co.html=function(n){return arguments.length?this.each("function"==typeof n?function(){var t=n.apply(this,arguments);this.innerHTML=null==t?"":t}:null==n?function(){this.innerHTML=""}:function(){this.innerHTML=n}):this.node().innerHTML},Co.append=function(n){return n=j(n),this.select(function(){return this.appendChild(n.apply(this,arguments))})},Co.insert=function(n,t){return n=j(n),t=A(t),this.select(function(){return this.insertBefore(n.apply(this,arguments),t.apply(this,arguments)||null)})},Co.remove=function(){return this.each(F)},Co.data=function(n,t){function e(n,e){var r,i,u,o=n.length,s=e.length,h=Math.min(o,s),p=new Array(s),g=new Array(s),v=new Array(o);if(t){var d,y=new c,m=new Array(o);for(r=-1;++r<o;)(i=n[r])&&(y.has(d=t.call(i,i.__data__,r))?v[r]=i:y.set(d,i),m[r]=d);for(r=-1;++r<s;)(i=y.get(d=t.call(e,u=e[r],r)))?i!==!0&&(p[r]=i,i.__data__=u):g[r]=H(u),y.set(d,!0);for(r=-1;++r<o;)r in m&&y.get(m[r])!==!0&&(v[r]=n[r])}else{for(r=-1;++r<h;)i=n[r],u=e[r],i?(i.__data__=u,p[r]=i):g[r]=H(u);for(;s>r;++r)g[r]=H(e[r]);for(;o>r;++r)v[r]=n[r]}g.update=p,g.parentNode=p.parentNode=v.parentNode=n.parentNode,a.push(g),l.push(p),f.push(v)}var r,i,u=-1,o=this.length;if(!arguments.length){for(n=new Array(o=(r=this[0]).length);++u<o;)(i=r[u])&&(n[u]=i.__data__);return n}var a=Z([]),l=E([]),f=E([]);if("function"==typeof n)for(;++u<o;)e(r=this[u],n.call(r,r.parentNode.__data__,u));else for(;++u<o;)e(r=this[u],n);return l.enter=function(){return a},l.exit=function(){return f},l},Co.datum=function(n){return arguments.length?this.property("__data__",n):this.property("__data__")},Co.filter=function(n){var t,e,r,i=[];"function"!=typeof n&&(n=O(n));for(var u=0,o=this.length;o>u;u++){i.push(t=[]),t.parentNode=(e=this[u]).parentNode;for(var a=0,l=e.length;l>a;a++)(r=e[a])&&n.call(r,r.__data__,a,u)&&t.push(r)}return E(i)},Co.order=function(){for(var n=-1,t=this.length;++n<t;)for(var e,r=this[n],i=r.length-1,u=r[i];--i>=0;)(e=r[i])&&(u&&u!==e.nextSibling&&u.parentNode.insertBefore(e,u),u=e);return this},Co.sort=function(n){n=I.apply(this,arguments);for(var t=-1,e=this.length;++t<e;)this[t].sort(n);return this.order()},Co.each=function(n){return Y(this,function(t,e,r){n.call(t,t.__data__,e,r)})},Co.call=function(n){var t=co(arguments);return n.apply(t[0]=this,t),this},Co.empty=function(){return!this.node()},Co.node=function(){for(var n=0,t=this.length;t>n;n++)for(var e=this[n],r=0,i=e.length;i>r;r++){var u=e[r];if(u)return u}return null},Co.size=function(){var n=0;return Y(this,function(){++n}),n};var qo=[];ao.selection.enter=Z,ao.selection.enter.prototype=qo,qo.append=Co.append,qo.empty=Co.empty,qo.node=Co.node,qo.call=Co.call,qo.size=Co.size,qo.select=function(n){for(var t,e,r,i,u,o=[],a=-1,l=this.length;++a<l;){r=(i=this[a]).update,o.push(t=[]),t.parentNode=i.parentNode;for(var c=-1,f=i.length;++c<f;)(u=i[c])?(t.push(r[c]=e=n.call(i.parentNode,u.__data__,c,a)),e.__data__=u.__data__):t.push(null)}return E(o)},qo.insert=function(n,t){return arguments.length<2&&(t=V(this)),Co.insert.call(this,n,t)},ao.select=function(t){var e;return"string"==typeof t?(e=[No(t,fo)],e.parentNode=fo.documentElement):(e=[t],e.parentNode=n(t)),E([e])},ao.selectAll=function(n){var t;return"string"==typeof n?(t=co(Eo(n,fo)),t.parentNode=fo.documentElement):(t=co(n),t.parentNode=null),E([t])},Co.on=function(n,t,e){var r=arguments.length;if(3>r){if("string"!=typeof n){2>r&&(t=!1);for(e in n)this.each(X(e,n[e],t));return this}if(2>r)return(r=this.node()["__on"+n])&&r._;e=!1}return this.each(X(n,t,e))};var To=ao.map({mouseenter:"mouseover",mouseleave:"mouseout"});fo&&To.forEach(function(n){"on"+n in fo&&To.remove(n)});var Ro,Do=0;ao.mouse=function(n){return J(n,k())};var Po=this.navigator&&/WebKit/.test(this.navigator.userAgent)?-1:0;ao.touch=function(n,t,e){if(arguments.length<3&&(e=t,t=k().changedTouches),t)for(var r,i=0,u=t.length;u>i;++i)if((r=t[i]).identifier===e)return J(n,r)},ao.behavior.drag=function(){function n(){this.on("mousedown.drag",u).on("touchstart.drag",o)}function e(n,t,e,u,o){return function(){function a(){var n,e,r=t(h,v);r&&(n=r[0]-M[0],e=r[1]-M[1],g|=n|e,M=r,p({type:"drag",x:r[0]+c[0],y:r[1]+c[1],dx:n,dy:e}))}function l(){t(h,v)&&(y.on(u+d,null).on(o+d,null),m(g),p({type:"dragend"}))}var c,f=this,s=ao.event.target.correspondingElement||ao.event.target,h=f.parentNode,p=r.of(f,arguments),g=0,v=n(),d=".drag"+(null==v?"":"-"+v),y=ao.select(e(s)).on(u+d,a).on(o+d,l),m=W(s),M=t(h,v);i?(c=i.apply(f,arguments),c=[c.x-M[0],c.y-M[1]]):c=[0,0],p({type:"dragstart"})}}var r=N(n,"drag","dragstart","dragend"),i=null,u=e(b,ao.mouse,t,"mousemove","mouseup"),o=e(G,ao.touch,m,"touchmove","touchend");return n.origin=function(t){return arguments.length?(i=t,n):i},ao.rebind(n,r,"on")},ao.touches=function(n,t){return arguments.length<2&&(t=k().touches),t?co(t).map(function(t){var e=J(n,t);return e.identifier=t.identifier,e}):[]};var Uo=1e-6,jo=Uo*Uo,Fo=Math.PI,Ho=2*Fo,Oo=Ho-Uo,Io=Fo/2,Yo=Fo/180,Zo=180/Fo,Vo=Math.SQRT2,Xo=2,$o=4;ao.interpolateZoom=function(n,t){var e,r,i=n[0],u=n[1],o=n[2],a=t[0],l=t[1],c=t[2],f=a-i,s=l-u,h=f*f+s*s;if(jo>h)r=Math.log(c/o)/Vo,e=function(n){return[i+n*f,u+n*s,o*Math.exp(Vo*n*r)]};else{var p=Math.sqrt(h),g=(c*c-o*o+$o*h)/(2*o*Xo*p),v=(c*c-o*o-$o*h)/(2*c*Xo*p),d=Math.log(Math.sqrt(g*g+1)-g),y=Math.log(Math.sqrt(v*v+1)-v);r=(y-d)/Vo,e=function(n){var t=n*r,e=rn(d),a=o/(Xo*p)*(e*un(Vo*t+d)-en(d));return[i+a*f,u+a*s,o*e/rn(Vo*t+d)]}}return e.duration=1e3*r,e},ao.behavior.zoom=function(){function n(n){n.on(L,s).on(Wo+".zoom",p).on("dblclick.zoom",g).on(R,h)}function e(n){return[(n[0]-k.x)/k.k,(n[1]-k.y)/k.k]}function r(n){return[n[0]*k.k+k.x,n[1]*k.k+k.y]}function i(n){k.k=Math.max(A[0],Math.min(A[1],n))}function u(n,t){t=r(t),k.x+=n[0]-t[0],k.y+=n[1]-t[1]}function o(t,e,r,o){t.__chart__={x:k.x,y:k.y,k:k.k},i(Math.pow(2,o)),u(d=e,r),t=ao.select(t),C>0&&(t=t.transition().duration(C)),t.call(n.event)}function a(){b&&b.domain(x.range().map(function(n){return(n-k.x)/k.k}).map(x.invert)),w&&w.domain(_.range().map(function(n){return(n-k.y)/k.k}).map(_.invert))}function l(n){z++||n({type:"zoomstart"})}function c(n){a(),n({type:"zoom",scale:k.k,translate:[k.x,k.y]})}function f(n){--z||(n({type:"zoomend"}),d=null)}function s(){function n(){a=1,u(ao.mouse(i),h),c(o)}function r(){s.on(q,null).on(T,null),p(a),f(o)}var i=this,o=D.of(i,arguments),a=0,s=ao.select(t(i)).on(q,n).on(T,r),h=e(ao.mouse(i)),p=W(i);Il.call(i),l(o)}function h(){function n(){var n=ao.touches(g);return p=k.k,n.forEach(function(n){n.identifier in d&&(d[n.identifier]=e(n))}),n}function t(){var t=ao.event.target;ao.select(t).on(x,r).on(b,a),_.push(t);for(var e=ao.event.changedTouches,i=0,u=e.length;u>i;++i)d[e[i].identifier]=null;var l=n(),c=Date.now();if(1===l.length){if(500>c-M){var f=l[0];o(g,f,d[f.identifier],Math.floor(Math.log(k.k)/Math.LN2)+1),S()}M=c}else if(l.length>1){var f=l[0],s=l[1],h=f[0]-s[0],p=f[1]-s[1];y=h*h+p*p}}function r(){var n,t,e,r,o=ao.touches(g);Il.call(g);for(var a=0,l=o.length;l>a;++a,r=null)if(e=o[a],r=d[e.identifier]){if(t)break;n=e,t=r}if(r){var f=(f=e[0]-n[0])*f+(f=e[1]-n[1])*f,s=y&&Math.sqrt(f/y);n=[(n[0]+e[0])/2,(n[1]+e[1])/2],t=[(t[0]+r[0])/2,(t[1]+r[1])/2],i(s*p)}M=null,u(n,t),c(v)}function a(){if(ao.event.touches.length){for(var t=ao.event.changedTouches,e=0,r=t.length;r>e;++e)delete d[t[e].identifier];for(var i in d)return void n()}ao.selectAll(_).on(m,null),w.on(L,s).on(R,h),N(),f(v)}var p,g=this,v=D.of(g,arguments),d={},y=0,m=".zoom-"+ao.event.changedTouches[0].identifier,x="touchmove"+m,b="touchend"+m,_=[],w=ao.select(g),N=W(g);t(),l(v),w.on(L,null).on(R,t)}function p(){var n=D.of(this,arguments);m?clearTimeout(m):(Il.call(this),v=e(d=y||ao.mouse(this)),l(n)),m=setTimeout(function(){m=null,f(n)},50),S(),i(Math.pow(2,.002*Bo())*k.k),u(d,v),c(n)}function g(){var n=ao.mouse(this),t=Math.log(k.k)/Math.LN2;o(this,n,e(n),ao.event.shiftKey?Math.ceil(t)-1:Math.floor(t)+1)}var v,d,y,m,M,x,b,_,w,k={x:0,y:0,k:1},E=[960,500],A=Jo,C=250,z=0,L="mousedown.zoom",q="mousemove.zoom",T="mouseup.zoom",R="touchstart.zoom",D=N(n,"zoomstart","zoom","zoomend");return Wo||(Wo="onwheel"in fo?(Bo=function(){return-ao.event.deltaY*(ao.event.deltaMode?120:1)},"wheel"):"onmousewheel"in fo?(Bo=function(){return ao.event.wheelDelta},"mousewheel"):(Bo=function(){return-ao.event.detail},"MozMousePixelScroll")),n.event=function(n){n.each(function(){var n=D.of(this,arguments),t=k;Hl?ao.select(this).transition().each("start.zoom",function(){k=this.__chart__||{x:0,y:0,k:1},l(n)}).tween("zoom:zoom",function(){var e=E[0],r=E[1],i=d?d[0]:e/2,u=d?d[1]:r/2,o=ao.interpolateZoom([(i-k.x)/k.k,(u-k.y)/k.k,e/k.k],[(i-t.x)/t.k,(u-t.y)/t.k,e/t.k]);return function(t){var r=o(t),a=e/r[2];this.__chart__=k={x:i-r[0]*a,y:u-r[1]*a,k:a},c(n)}}).each("interrupt.zoom",function(){f(n)}).each("end.zoom",function(){f(n)}):(this.__chart__=k,l(n),c(n),f(n))})},n.translate=function(t){return arguments.length?(k={x:+t[0],y:+t[1],k:k.k},a(),n):[k.x,k.y]},n.scale=function(t){return arguments.length?(k={x:k.x,y:k.y,k:null},i(+t),a(),n):k.k},n.scaleExtent=function(t){return arguments.length?(A=null==t?Jo:[+t[0],+t[1]],n):A},n.center=function(t){return arguments.length?(y=t&&[+t[0],+t[1]],n):y},n.size=function(t){return arguments.length?(E=t&&[+t[0],+t[1]],n):E},n.duration=function(t){return arguments.length?(C=+t,n):C},n.x=function(t){return arguments.length?(b=t,x=t.copy(),k={x:0,y:0,k:1},n):b},n.y=function(t){return arguments.length?(w=t,_=t.copy(),k={x:0,y:0,k:1},n):w},ao.rebind(n,D,"on")};var Bo,Wo,Jo=[0,1/0];ao.color=an,an.prototype.toString=function(){return this.rgb()+""},ao.hsl=ln;var Go=ln.prototype=new an;Go.brighter=function(n){return n=Math.pow(.7,arguments.length?n:1),new ln(this.h,this.s,this.l/n)},Go.darker=function(n){return n=Math.pow(.7,arguments.length?n:1),new ln(this.h,this.s,n*this.l)},Go.rgb=function(){return cn(this.h,this.s,this.l)},ao.hcl=fn;var Ko=fn.prototype=new an;Ko.brighter=function(n){return new fn(this.h,this.c,Math.min(100,this.l+Qo*(arguments.length?n:1)))},Ko.darker=function(n){return new fn(this.h,this.c,Math.max(0,this.l-Qo*(arguments.length?n:1)))},Ko.rgb=function(){return sn(this.h,this.c,this.l).rgb()},ao.lab=hn;var Qo=18,na=.95047,ta=1,ea=1.08883,ra=hn.prototype=new an;ra.brighter=function(n){return new hn(Math.min(100,this.l+Qo*(arguments.length?n:1)),this.a,this.b)},ra.darker=function(n){return new hn(Math.max(0,this.l-Qo*(arguments.length?n:1)),this.a,this.b)},ra.rgb=function(){return pn(this.l,this.a,this.b)},ao.rgb=mn;var ia=mn.prototype=new an;ia.brighter=function(n){n=Math.pow(.7,arguments.length?n:1);var t=this.r,e=this.g,r=this.b,i=30;return t||e||r?(t&&i>t&&(t=i),e&&i>e&&(e=i),r&&i>r&&(r=i),new mn(Math.min(255,t/n),Math.min(255,e/n),Math.min(255,r/n))):new mn(i,i,i)},ia.darker=function(n){return n=Math.pow(.7,arguments.length?n:1),new mn(n*this.r,n*this.g,n*this.b)},ia.hsl=function(){return wn(this.r,this.g,this.b)},ia.toString=function(){return"#"+bn(this.r)+bn(this.g)+bn(this.b)};var ua=ao.map({aliceblue:15792383,antiquewhite:16444375,aqua:65535,aquamarine:8388564,azure:15794175,beige:16119260,bisque:16770244,black:0,blanchedalmond:16772045,blue:255,blueviolet:9055202,brown:10824234,burlywood:14596231,cadetblue:6266528,chartreuse:8388352,chocolate:13789470,coral:16744272,cornflowerblue:6591981,cornsilk:16775388,crimson:14423100,cyan:65535,darkblue:139,darkcyan:35723,darkgoldenrod:12092939,darkgray:11119017,darkgreen:25600,darkgrey:11119017,darkkhaki:12433259,darkmagenta:9109643,darkolivegreen:5597999,darkorange:16747520,darkorchid:10040012,darkred:9109504,darksalmon:15308410,darkseagreen:9419919,darkslateblue:4734347,darkslategray:3100495,darkslategrey:3100495,darkturquoise:52945,darkviolet:9699539,deeppink:16716947,deepskyblue:49151,dimgray:6908265,dimgrey:6908265,dodgerblue:2003199,firebrick:11674146,floralwhite:16775920,forestgreen:2263842,fuchsia:16711935,gainsboro:14474460,ghostwhite:16316671,gold:16766720,goldenrod:14329120,gray:8421504,green:32768,greenyellow:11403055,grey:8421504,honeydew:15794160,hotpink:16738740,indianred:13458524,indigo:4915330,ivory:16777200,khaki:15787660,lavender:15132410,lavenderblush:16773365,lawngreen:8190976,lemonchiffon:16775885,lightblue:11393254,lightcoral:15761536,lightcyan:14745599,lightgoldenrodyellow:16448210,lightgray:13882323,lightgreen:9498256,lightgrey:13882323,lightpink:16758465,lightsalmon:16752762,lightseagreen:2142890,lightskyblue:8900346,lightslategray:7833753,lightslategrey:7833753,lightsteelblue:11584734,lightyellow:16777184,lime:65280,limegreen:3329330,linen:16445670,magenta:16711935,maroon:8388608,mediumaquamarine:6737322,mediumblue:205,mediumorchid:12211667,mediumpurple:9662683,mediumseagreen:3978097,mediumslateblue:8087790,mediumspringgreen:64154,mediumturquoise:4772300,mediumvioletred:13047173,midnightblue:1644912,mintcream:16121850,mistyrose:16770273,moccasin:16770229,navajowhite:16768685,navy:128,oldlace:16643558,olive:8421376,olivedrab:7048739,orange:16753920,orangered:16729344,orchid:14315734,palegoldenrod:15657130,palegreen:10025880,paleturquoise:11529966,palevioletred:14381203,papayawhip:16773077,peachpuff:16767673,peru:13468991,pink:16761035,plum:14524637,powderblue:11591910,purple:8388736,rebeccapurple:6697881,red:16711680,rosybrown:12357519,royalblue:4286945,saddlebrown:9127187,salmon:16416882,sandybrown:16032864,seagreen:3050327,seashell:16774638,sienna:10506797,silver:12632256,skyblue:8900331,slateblue:6970061,slategray:7372944,slategrey:7372944,snow:16775930,springgreen:65407,steelblue:4620980,tan:13808780,teal:32896,thistle:14204888,tomato:16737095,turquoise:4251856,violet:15631086,wheat:16113331,white:16777215,whitesmoke:16119285,yellow:16776960,yellowgreen:10145074});ua.forEach(function(n,t){ua.set(n,Mn(t))}),ao.functor=En,ao.xhr=An(m),ao.dsv=function(n,t){function e(n,e,u){arguments.length<3&&(u=e,e=null);var o=Cn(n,t,null==e?r:i(e),u);return o.row=function(n){return arguments.length?o.response(null==(e=n)?r:i(n)):e},o}function r(n){return e.parse(n.responseText)}function i(n){return function(t){return e.parse(t.responseText,n)}}function u(t){return t.map(o).join(n)}function o(n){return a.test(n)?'"'+n.replace(/\"/g,'""')+'"':n}var a=new RegExp('["'+n+"\n]"),l=n.charCodeAt(0);return e.parse=function(n,t){var r;return e.parseRows(n,function(n,e){if(r)return r(n,e-1);var i=new Function("d","return {"+n.map(function(n,t){return JSON.stringify(n)+": d["+t+"]"}).join(",")+"}");r=t?function(n,e){return t(i(n),e)}:i})},e.parseRows=function(n,t){function e(){if(f>=c)return o;if(i)return i=!1,u;var t=f;if(34===n.charCodeAt(t)){for(var e=t;e++<c;)if(34===n.charCodeAt(e)){if(34!==n.charCodeAt(e+1))break;++e}f=e+2;var r=n.charCodeAt(e+1);return 13===r?(i=!0,10===n.charCodeAt(e+2)&&++f):10===r&&(i=!0),n.slice(t+1,e).replace(/""/g,'"')}for(;c>f;){var r=n.charCodeAt(f++),a=1;if(10===r)i=!0;else if(13===r)i=!0,10===n.charCodeAt(f)&&(++f,++a);else if(r!==l)continue;return n.slice(t,f-a)}return n.slice(t)}for(var r,i,u={},o={},a=[],c=n.length,f=0,s=0;(r=e())!==o;){for(var h=[];r!==u&&r!==o;)h.push(r),r=e();t&&null==(h=t(h,s++))||a.push(h)}return a},e.format=function(t){if(Array.isArray(t[0]))return e.formatRows(t);var r=new y,i=[];return t.forEach(function(n){for(var t in n)r.has(t)||i.push(r.add(t))}),[i.map(o).join(n)].concat(t.map(function(t){return i.map(function(n){return o(t[n])}).join(n)})).join("\n")},e.formatRows=function(n){return n.map(u).join("\n")},e},ao.csv=ao.dsv(",","text/csv"),ao.tsv=ao.dsv("	","text/tab-separated-values");var oa,aa,la,ca,fa=this[x(this,"requestAnimationFrame")]||function(n){setTimeout(n,17)};ao.timer=function(){qn.apply(this,arguments)},ao.timer.flush=function(){Rn(),Dn()},ao.round=function(n,t){return t?Math.round(n*(t=Math.pow(10,t)))/t:Math.round(n)};var sa=["y","z","a","f","p","n","\xb5","m","","k","M","G","T","P","E","Z","Y"].map(Un);ao.formatPrefix=function(n,t){var e=0;return(n=+n)&&(0>n&&(n*=-1),t&&(n=ao.round(n,Pn(n,t))),e=1+Math.floor(1e-12+Math.log(n)/Math.LN10),e=Math.max(-24,Math.min(24,3*Math.floor((e-1)/3)))),sa[8+e/3]};var ha=/(?:([^{])?([<>=^]))?([+\- ])?([$#])?(0)?(\d+)?(,)?(\.-?\d+)?([a-z%])?/i,pa=ao.map({b:function(n){return n.toString(2)},c:function(n){return String.fromCharCode(n)},o:function(n){return n.toString(8)},x:function(n){return n.toString(16)},X:function(n){return n.toString(16).toUpperCase()},g:function(n,t){return n.toPrecision(t)},e:function(n,t){return n.toExponential(t)},f:function(n,t){return n.toFixed(t)},r:function(n,t){return(n=ao.round(n,Pn(n,t))).toFixed(Math.max(0,Math.min(20,Pn(n*(1+1e-15),t))))}}),ga=ao.time={},va=Date;Hn.prototype={getDate:function(){return this._.getUTCDate()},getDay:function(){return this._.getUTCDay()},getFullYear:function(){return this._.getUTCFullYear()},getHours:function(){return this._.getUTCHours()},getMilliseconds:function(){return this._.getUTCMilliseconds()},getMinutes:function(){return this._.getUTCMinutes()},getMonth:function(){return this._.getUTCMonth()},getSeconds:function(){return this._.getUTCSeconds()},getTime:function(){return this._.getTime()},getTimezoneOffset:function(){return 0},valueOf:function(){return this._.valueOf()},setDate:function(){da.setUTCDate.apply(this._,arguments)},setDay:function(){da.setUTCDay.apply(this._,arguments)},setFullYear:function(){da.setUTCFullYear.apply(this._,arguments)},setHours:function(){da.setUTCHours.apply(this._,arguments)},setMilliseconds:function(){da.setUTCMilliseconds.apply(this._,arguments)},setMinutes:function(){da.setUTCMinutes.apply(this._,arguments)},setMonth:function(){da.setUTCMonth.apply(this._,arguments)},setSeconds:function(){da.setUTCSeconds.apply(this._,arguments)},setTime:function(){da.setTime.apply(this._,arguments)}};var da=Date.prototype;ga.year=On(function(n){return n=ga.day(n),n.setMonth(0,1),n},function(n,t){n.setFullYear(n.getFullYear()+t)},function(n){return n.getFullYear()}),ga.years=ga.year.range,ga.years.utc=ga.year.utc.range,ga.day=On(function(n){var t=new va(2e3,0);return t.setFullYear(n.getFullYear(),n.getMonth(),n.getDate()),t},function(n,t){n.setDate(n.getDate()+t)},function(n){return n.getDate()-1}),ga.days=ga.day.range,ga.days.utc=ga.day.utc.range,ga.dayOfYear=function(n){var t=ga.year(n);return Math.floor((n-t-6e4*(n.getTimezoneOffset()-t.getTimezoneOffset()))/864e5)},["sunday","monday","tuesday","wednesday","thursday","friday","saturday"].forEach(function(n,t){t=7-t;var e=ga[n]=On(function(n){return(n=ga.day(n)).setDate(n.getDate()-(n.getDay()+t)%7),n},function(n,t){n.setDate(n.getDate()+7*Math.floor(t))},function(n){var e=ga.year(n).getDay();return Math.floor((ga.dayOfYear(n)+(e+t)%7)/7)-(e!==t)});ga[n+"s"]=e.range,ga[n+"s"].utc=e.utc.range,ga[n+"OfYear"]=function(n){var e=ga.year(n).getDay();return Math.floor((ga.dayOfYear(n)+(e+t)%7)/7)}}),ga.week=ga.sunday,ga.weeks=ga.sunday.range,ga.weeks.utc=ga.sunday.utc.range,ga.weekOfYear=ga.sundayOfYear;var ya={"-":"",_:" ",0:"0"},ma=/^\s*\d+/,Ma=/^%/;ao.locale=function(n){return{numberFormat:jn(n),timeFormat:Yn(n)}};var xa=ao.locale({decimal:".",thousands:",",grouping:[3],currency:["$",""],dateTime:"%a %b %e %X %Y",date:"%m/%d/%Y",time:"%H:%M:%S",periods:["AM","PM"],days:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],
+	shortDays:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],months:["January","February","March","April","May","June","July","August","September","October","November","December"],shortMonths:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"]});ao.format=xa.numberFormat,ao.geo={},ft.prototype={s:0,t:0,add:function(n){st(n,this.t,ba),st(ba.s,this.s,this),this.s?this.t+=ba.t:this.s=ba.t},reset:function(){this.s=this.t=0},valueOf:function(){return this.s}};var ba=new ft;ao.geo.stream=function(n,t){n&&_a.hasOwnProperty(n.type)?_a[n.type](n,t):ht(n,t)};var _a={Feature:function(n,t){ht(n.geometry,t)},FeatureCollection:function(n,t){for(var e=n.features,r=-1,i=e.length;++r<i;)ht(e[r].geometry,t)}},wa={Sphere:function(n,t){t.sphere()},Point:function(n,t){n=n.coordinates,t.point(n[0],n[1],n[2])},MultiPoint:function(n,t){for(var e=n.coordinates,r=-1,i=e.length;++r<i;)n=e[r],t.point(n[0],n[1],n[2])},LineString:function(n,t){pt(n.coordinates,t,0)},MultiLineString:function(n,t){for(var e=n.coordinates,r=-1,i=e.length;++r<i;)pt(e[r],t,0)},Polygon:function(n,t){gt(n.coordinates,t)},MultiPolygon:function(n,t){for(var e=n.coordinates,r=-1,i=e.length;++r<i;)gt(e[r],t)},GeometryCollection:function(n,t){for(var e=n.geometries,r=-1,i=e.length;++r<i;)ht(e[r],t)}};ao.geo.area=function(n){return Sa=0,ao.geo.stream(n,Na),Sa};var Sa,ka=new ft,Na={sphere:function(){Sa+=4*Fo},point:b,lineStart:b,lineEnd:b,polygonStart:function(){ka.reset(),Na.lineStart=vt},polygonEnd:function(){var n=2*ka;Sa+=0>n?4*Fo+n:n,Na.lineStart=Na.lineEnd=Na.point=b}};ao.geo.bounds=function(){function n(n,t){M.push(x=[f=n,h=n]),s>t&&(s=t),t>p&&(p=t)}function t(t,e){var r=dt([t*Yo,e*Yo]);if(y){var i=mt(y,r),u=[i[1],-i[0],0],o=mt(u,i);bt(o),o=_t(o);var l=t-g,c=l>0?1:-1,v=o[0]*Zo*c,d=xo(l)>180;if(d^(v>c*g&&c*t>v)){var m=o[1]*Zo;m>p&&(p=m)}else if(v=(v+360)%360-180,d^(v>c*g&&c*t>v)){var m=-o[1]*Zo;s>m&&(s=m)}else s>e&&(s=e),e>p&&(p=e);d?g>t?a(f,t)>a(f,h)&&(h=t):a(t,h)>a(f,h)&&(f=t):h>=f?(f>t&&(f=t),t>h&&(h=t)):t>g?a(f,t)>a(f,h)&&(h=t):a(t,h)>a(f,h)&&(f=t)}else n(t,e);y=r,g=t}function e(){b.point=t}function r(){x[0]=f,x[1]=h,b.point=n,y=null}function i(n,e){if(y){var r=n-g;m+=xo(r)>180?r+(r>0?360:-360):r}else v=n,d=e;Na.point(n,e),t(n,e)}function u(){Na.lineStart()}function o(){i(v,d),Na.lineEnd(),xo(m)>Uo&&(f=-(h=180)),x[0]=f,x[1]=h,y=null}function a(n,t){return(t-=n)<0?t+360:t}function l(n,t){return n[0]-t[0]}function c(n,t){return t[0]<=t[1]?t[0]<=n&&n<=t[1]:n<t[0]||t[1]<n}var f,s,h,p,g,v,d,y,m,M,x,b={point:n,lineStart:e,lineEnd:r,polygonStart:function(){b.point=i,b.lineStart=u,b.lineEnd=o,m=0,Na.polygonStart()},polygonEnd:function(){Na.polygonEnd(),b.point=n,b.lineStart=e,b.lineEnd=r,0>ka?(f=-(h=180),s=-(p=90)):m>Uo?p=90:-Uo>m&&(s=-90),x[0]=f,x[1]=h}};return function(n){p=h=-(f=s=1/0),M=[],ao.geo.stream(n,b);var t=M.length;if(t){M.sort(l);for(var e,r=1,i=M[0],u=[i];t>r;++r)e=M[r],c(e[0],i)||c(e[1],i)?(a(i[0],e[1])>a(i[0],i[1])&&(i[1]=e[1]),a(e[0],i[1])>a(i[0],i[1])&&(i[0]=e[0])):u.push(i=e);for(var o,e,g=-(1/0),t=u.length-1,r=0,i=u[t];t>=r;i=e,++r)e=u[r],(o=a(i[1],e[0]))>g&&(g=o,f=e[0],h=i[1])}return M=x=null,f===1/0||s===1/0?[[NaN,NaN],[NaN,NaN]]:[[f,s],[h,p]]}}(),ao.geo.centroid=function(n){Ea=Aa=Ca=za=La=qa=Ta=Ra=Da=Pa=Ua=0,ao.geo.stream(n,ja);var t=Da,e=Pa,r=Ua,i=t*t+e*e+r*r;return jo>i&&(t=qa,e=Ta,r=Ra,Uo>Aa&&(t=Ca,e=za,r=La),i=t*t+e*e+r*r,jo>i)?[NaN,NaN]:[Math.atan2(e,t)*Zo,tn(r/Math.sqrt(i))*Zo]};var Ea,Aa,Ca,za,La,qa,Ta,Ra,Da,Pa,Ua,ja={sphere:b,point:St,lineStart:Nt,lineEnd:Et,polygonStart:function(){ja.lineStart=At},polygonEnd:function(){ja.lineStart=Nt}},Fa=Rt(zt,jt,Ht,[-Fo,-Fo/2]),Ha=1e9;ao.geo.clipExtent=function(){var n,t,e,r,i,u,o={stream:function(n){return i&&(i.valid=!1),i=u(n),i.valid=!0,i},extent:function(a){return arguments.length?(u=Zt(n=+a[0][0],t=+a[0][1],e=+a[1][0],r=+a[1][1]),i&&(i.valid=!1,i=null),o):[[n,t],[e,r]]}};return o.extent([[0,0],[960,500]])},(ao.geo.conicEqualArea=function(){return Vt(Xt)}).raw=Xt,ao.geo.albers=function(){return ao.geo.conicEqualArea().rotate([96,0]).center([-.6,38.7]).parallels([29.5,45.5]).scale(1070)},ao.geo.albersUsa=function(){function n(n){var u=n[0],o=n[1];return t=null,e(u,o),t||(r(u,o),t)||i(u,o),t}var t,e,r,i,u=ao.geo.albers(),o=ao.geo.conicEqualArea().rotate([154,0]).center([-2,58.5]).parallels([55,65]),a=ao.geo.conicEqualArea().rotate([157,0]).center([-3,19.9]).parallels([8,18]),l={point:function(n,e){t=[n,e]}};return n.invert=function(n){var t=u.scale(),e=u.translate(),r=(n[0]-e[0])/t,i=(n[1]-e[1])/t;return(i>=.12&&.234>i&&r>=-.425&&-.214>r?o:i>=.166&&.234>i&&r>=-.214&&-.115>r?a:u).invert(n)},n.stream=function(n){var t=u.stream(n),e=o.stream(n),r=a.stream(n);return{point:function(n,i){t.point(n,i),e.point(n,i),r.point(n,i)},sphere:function(){t.sphere(),e.sphere(),r.sphere()},lineStart:function(){t.lineStart(),e.lineStart(),r.lineStart()},lineEnd:function(){t.lineEnd(),e.lineEnd(),r.lineEnd()},polygonStart:function(){t.polygonStart(),e.polygonStart(),r.polygonStart()},polygonEnd:function(){t.polygonEnd(),e.polygonEnd(),r.polygonEnd()}}},n.precision=function(t){return arguments.length?(u.precision(t),o.precision(t),a.precision(t),n):u.precision()},n.scale=function(t){return arguments.length?(u.scale(t),o.scale(.35*t),a.scale(t),n.translate(u.translate())):u.scale()},n.translate=function(t){if(!arguments.length)return u.translate();var c=u.scale(),f=+t[0],s=+t[1];return e=u.translate(t).clipExtent([[f-.455*c,s-.238*c],[f+.455*c,s+.238*c]]).stream(l).point,r=o.translate([f-.307*c,s+.201*c]).clipExtent([[f-.425*c+Uo,s+.12*c+Uo],[f-.214*c-Uo,s+.234*c-Uo]]).stream(l).point,i=a.translate([f-.205*c,s+.212*c]).clipExtent([[f-.214*c+Uo,s+.166*c+Uo],[f-.115*c-Uo,s+.234*c-Uo]]).stream(l).point,n},n.scale(1070)};var Oa,Ia,Ya,Za,Va,Xa,$a={point:b,lineStart:b,lineEnd:b,polygonStart:function(){Ia=0,$a.lineStart=$t},polygonEnd:function(){$a.lineStart=$a.lineEnd=$a.point=b,Oa+=xo(Ia/2)}},Ba={point:Bt,lineStart:b,lineEnd:b,polygonStart:b,polygonEnd:b},Wa={point:Gt,lineStart:Kt,lineEnd:Qt,polygonStart:function(){Wa.lineStart=ne},polygonEnd:function(){Wa.point=Gt,Wa.lineStart=Kt,Wa.lineEnd=Qt}};ao.geo.path=function(){function n(n){return n&&("function"==typeof a&&u.pointRadius(+a.apply(this,arguments)),o&&o.valid||(o=i(u)),ao.geo.stream(n,o)),u.result()}function t(){return o=null,n}var e,r,i,u,o,a=4.5;return n.area=function(n){return Oa=0,ao.geo.stream(n,i($a)),Oa},n.centroid=function(n){return Ca=za=La=qa=Ta=Ra=Da=Pa=Ua=0,ao.geo.stream(n,i(Wa)),Ua?[Da/Ua,Pa/Ua]:Ra?[qa/Ra,Ta/Ra]:La?[Ca/La,za/La]:[NaN,NaN]},n.bounds=function(n){return Va=Xa=-(Ya=Za=1/0),ao.geo.stream(n,i(Ba)),[[Ya,Za],[Va,Xa]]},n.projection=function(n){return arguments.length?(i=(e=n)?n.stream||re(n):m,t()):e},n.context=function(n){return arguments.length?(u=null==(r=n)?new Wt:new te(n),"function"!=typeof a&&u.pointRadius(a),t()):r},n.pointRadius=function(t){return arguments.length?(a="function"==typeof t?t:(u.pointRadius(+t),+t),n):a},n.projection(ao.geo.albersUsa()).context(null)},ao.geo.transform=function(n){return{stream:function(t){var e=new ie(t);for(var r in n)e[r]=n[r];return e}}},ie.prototype={point:function(n,t){this.stream.point(n,t)},sphere:function(){this.stream.sphere()},lineStart:function(){this.stream.lineStart()},lineEnd:function(){this.stream.lineEnd()},polygonStart:function(){this.stream.polygonStart()},polygonEnd:function(){this.stream.polygonEnd()}},ao.geo.projection=oe,ao.geo.projectionMutator=ae,(ao.geo.equirectangular=function(){return oe(ce)}).raw=ce.invert=ce,ao.geo.rotation=function(n){function t(t){return t=n(t[0]*Yo,t[1]*Yo),t[0]*=Zo,t[1]*=Zo,t}return n=se(n[0]%360*Yo,n[1]*Yo,n.length>2?n[2]*Yo:0),t.invert=function(t){return t=n.invert(t[0]*Yo,t[1]*Yo),t[0]*=Zo,t[1]*=Zo,t},t},fe.invert=ce,ao.geo.circle=function(){function n(){var n="function"==typeof r?r.apply(this,arguments):r,t=se(-n[0]*Yo,-n[1]*Yo,0).invert,i=[];return e(null,null,1,{point:function(n,e){i.push(n=t(n,e)),n[0]*=Zo,n[1]*=Zo}}),{type:"Polygon",coordinates:[i]}}var t,e,r=[0,0],i=6;return n.origin=function(t){return arguments.length?(r=t,n):r},n.angle=function(r){return arguments.length?(e=ve((t=+r)*Yo,i*Yo),n):t},n.precision=function(r){return arguments.length?(e=ve(t*Yo,(i=+r)*Yo),n):i},n.angle(90)},ao.geo.distance=function(n,t){var e,r=(t[0]-n[0])*Yo,i=n[1]*Yo,u=t[1]*Yo,o=Math.sin(r),a=Math.cos(r),l=Math.sin(i),c=Math.cos(i),f=Math.sin(u),s=Math.cos(u);return Math.atan2(Math.sqrt((e=s*o)*e+(e=c*f-l*s*a)*e),l*f+c*s*a)},ao.geo.graticule=function(){function n(){return{type:"MultiLineString",coordinates:t()}}function t(){return ao.range(Math.ceil(u/d)*d,i,d).map(h).concat(ao.range(Math.ceil(c/y)*y,l,y).map(p)).concat(ao.range(Math.ceil(r/g)*g,e,g).filter(function(n){return xo(n%d)>Uo}).map(f)).concat(ao.range(Math.ceil(a/v)*v,o,v).filter(function(n){return xo(n%y)>Uo}).map(s))}var e,r,i,u,o,a,l,c,f,s,h,p,g=10,v=g,d=90,y=360,m=2.5;return n.lines=function(){return t().map(function(n){return{type:"LineString",coordinates:n}})},n.outline=function(){return{type:"Polygon",coordinates:[h(u).concat(p(l).slice(1),h(i).reverse().slice(1),p(c).reverse().slice(1))]}},n.extent=function(t){return arguments.length?n.majorExtent(t).minorExtent(t):n.minorExtent()},n.majorExtent=function(t){return arguments.length?(u=+t[0][0],i=+t[1][0],c=+t[0][1],l=+t[1][1],u>i&&(t=u,u=i,i=t),c>l&&(t=c,c=l,l=t),n.precision(m)):[[u,c],[i,l]]},n.minorExtent=function(t){return arguments.length?(r=+t[0][0],e=+t[1][0],a=+t[0][1],o=+t[1][1],r>e&&(t=r,r=e,e=t),a>o&&(t=a,a=o,o=t),n.precision(m)):[[r,a],[e,o]]},n.step=function(t){return arguments.length?n.majorStep(t).minorStep(t):n.minorStep()},n.majorStep=function(t){return arguments.length?(d=+t[0],y=+t[1],n):[d,y]},n.minorStep=function(t){return arguments.length?(g=+t[0],v=+t[1],n):[g,v]},n.precision=function(t){return arguments.length?(m=+t,f=ye(a,o,90),s=me(r,e,m),h=ye(c,l,90),p=me(u,i,m),n):m},n.majorExtent([[-180,-90+Uo],[180,90-Uo]]).minorExtent([[-180,-80-Uo],[180,80+Uo]])},ao.geo.greatArc=function(){function n(){return{type:"LineString",coordinates:[t||r.apply(this,arguments),e||i.apply(this,arguments)]}}var t,e,r=Me,i=xe;return n.distance=function(){return ao.geo.distance(t||r.apply(this,arguments),e||i.apply(this,arguments))},n.source=function(e){return arguments.length?(r=e,t="function"==typeof e?null:e,n):r},n.target=function(t){return arguments.length?(i=t,e="function"==typeof t?null:t,n):i},n.precision=function(){return arguments.length?n:0},n},ao.geo.interpolate=function(n,t){return be(n[0]*Yo,n[1]*Yo,t[0]*Yo,t[1]*Yo)},ao.geo.length=function(n){return Ja=0,ao.geo.stream(n,Ga),Ja};var Ja,Ga={sphere:b,point:b,lineStart:_e,lineEnd:b,polygonStart:b,polygonEnd:b},Ka=we(function(n){return Math.sqrt(2/(1+n))},function(n){return 2*Math.asin(n/2)});(ao.geo.azimuthalEqualArea=function(){return oe(Ka)}).raw=Ka;var Qa=we(function(n){var t=Math.acos(n);return t&&t/Math.sin(t)},m);(ao.geo.azimuthalEquidistant=function(){return oe(Qa)}).raw=Qa,(ao.geo.conicConformal=function(){return Vt(Se)}).raw=Se,(ao.geo.conicEquidistant=function(){return Vt(ke)}).raw=ke;var nl=we(function(n){return 1/n},Math.atan);(ao.geo.gnomonic=function(){return oe(nl)}).raw=nl,Ne.invert=function(n,t){return[n,2*Math.atan(Math.exp(t))-Io]},(ao.geo.mercator=function(){return Ee(Ne)}).raw=Ne;var tl=we(function(){return 1},Math.asin);(ao.geo.orthographic=function(){return oe(tl)}).raw=tl;var el=we(function(n){return 1/(1+n)},function(n){return 2*Math.atan(n)});(ao.geo.stereographic=function(){return oe(el)}).raw=el,Ae.invert=function(n,t){return[-t,2*Math.atan(Math.exp(n))-Io]},(ao.geo.transverseMercator=function(){var n=Ee(Ae),t=n.center,e=n.rotate;return n.center=function(n){return n?t([-n[1],n[0]]):(n=t(),[n[1],-n[0]])},n.rotate=function(n){return n?e([n[0],n[1],n.length>2?n[2]+90:90]):(n=e(),[n[0],n[1],n[2]-90])},e([0,0,90])}).raw=Ae,ao.geom={},ao.geom.hull=function(n){function t(n){if(n.length<3)return[];var t,i=En(e),u=En(r),o=n.length,a=[],l=[];for(t=0;o>t;t++)a.push([+i.call(this,n[t],t),+u.call(this,n[t],t),t]);for(a.sort(qe),t=0;o>t;t++)l.push([a[t][0],-a[t][1]]);var c=Le(a),f=Le(l),s=f[0]===c[0],h=f[f.length-1]===c[c.length-1],p=[];for(t=c.length-1;t>=0;--t)p.push(n[a[c[t]][2]]);for(t=+s;t<f.length-h;++t)p.push(n[a[f[t]][2]]);return p}var e=Ce,r=ze;return arguments.length?t(n):(t.x=function(n){return arguments.length?(e=n,t):e},t.y=function(n){return arguments.length?(r=n,t):r},t)},ao.geom.polygon=function(n){return ko(n,rl),n};var rl=ao.geom.polygon.prototype=[];rl.area=function(){for(var n,t=-1,e=this.length,r=this[e-1],i=0;++t<e;)n=r,r=this[t],i+=n[1]*r[0]-n[0]*r[1];return.5*i},rl.centroid=function(n){var t,e,r=-1,i=this.length,u=0,o=0,a=this[i-1];for(arguments.length||(n=-1/(6*this.area()));++r<i;)t=a,a=this[r],e=t[0]*a[1]-a[0]*t[1],u+=(t[0]+a[0])*e,o+=(t[1]+a[1])*e;return[u*n,o*n]},rl.clip=function(n){for(var t,e,r,i,u,o,a=De(n),l=-1,c=this.length-De(this),f=this[c-1];++l<c;){for(t=n.slice(),n.length=0,i=this[l],u=t[(r=t.length-a)-1],e=-1;++e<r;)o=t[e],Te(o,f,i)?(Te(u,f,i)||n.push(Re(u,o,f,i)),n.push(o)):Te(u,f,i)&&n.push(Re(u,o,f,i)),u=o;a&&n.push(n[0]),f=i}return n};var il,ul,ol,al,ll,cl=[],fl=[];Ye.prototype.prepare=function(){for(var n,t=this.edges,e=t.length;e--;)n=t[e].edge,n.b&&n.a||t.splice(e,1);return t.sort(Ve),t.length},tr.prototype={start:function(){return this.edge.l===this.site?this.edge.a:this.edge.b},end:function(){return this.edge.l===this.site?this.edge.b:this.edge.a}},er.prototype={insert:function(n,t){var e,r,i;if(n){if(t.P=n,t.N=n.N,n.N&&(n.N.P=t),n.N=t,n.R){for(n=n.R;n.L;)n=n.L;n.L=t}else n.R=t;e=n}else this._?(n=or(this._),t.P=null,t.N=n,n.P=n.L=t,e=n):(t.P=t.N=null,this._=t,e=null);for(t.L=t.R=null,t.U=e,t.C=!0,n=t;e&&e.C;)r=e.U,e===r.L?(i=r.R,i&&i.C?(e.C=i.C=!1,r.C=!0,n=r):(n===e.R&&(ir(this,e),n=e,e=n.U),e.C=!1,r.C=!0,ur(this,r))):(i=r.L,i&&i.C?(e.C=i.C=!1,r.C=!0,n=r):(n===e.L&&(ur(this,e),n=e,e=n.U),e.C=!1,r.C=!0,ir(this,r))),e=n.U;this._.C=!1},remove:function(n){n.N&&(n.N.P=n.P),n.P&&(n.P.N=n.N),n.N=n.P=null;var t,e,r,i=n.U,u=n.L,o=n.R;if(e=u?o?or(o):u:o,i?i.L===n?i.L=e:i.R=e:this._=e,u&&o?(r=e.C,e.C=n.C,e.L=u,u.U=e,e!==o?(i=e.U,e.U=n.U,n=e.R,i.L=n,e.R=o,o.U=e):(e.U=i,i=e,n=e.R)):(r=n.C,n=e),n&&(n.U=i),!r){if(n&&n.C)return void(n.C=!1);do{if(n===this._)break;if(n===i.L){if(t=i.R,t.C&&(t.C=!1,i.C=!0,ir(this,i),t=i.R),t.L&&t.L.C||t.R&&t.R.C){t.R&&t.R.C||(t.L.C=!1,t.C=!0,ur(this,t),t=i.R),t.C=i.C,i.C=t.R.C=!1,ir(this,i),n=this._;break}}else if(t=i.L,t.C&&(t.C=!1,i.C=!0,ur(this,i),t=i.L),t.L&&t.L.C||t.R&&t.R.C){t.L&&t.L.C||(t.R.C=!1,t.C=!0,ir(this,t),t=i.L),t.C=i.C,i.C=t.L.C=!1,ur(this,i),n=this._;break}t.C=!0,n=i,i=i.U}while(!n.C);n&&(n.C=!1)}}},ao.geom.voronoi=function(n){function t(n){var t=new Array(n.length),r=a[0][0],i=a[0][1],u=a[1][0],o=a[1][1];return ar(e(n),a).cells.forEach(function(e,a){var l=e.edges,c=e.site,f=t[a]=l.length?l.map(function(n){var t=n.start();return[t.x,t.y]}):c.x>=r&&c.x<=u&&c.y>=i&&c.y<=o?[[r,o],[u,o],[u,i],[r,i]]:[];f.point=n[a]}),t}function e(n){return n.map(function(n,t){return{x:Math.round(u(n,t)/Uo)*Uo,y:Math.round(o(n,t)/Uo)*Uo,i:t}})}var r=Ce,i=ze,u=r,o=i,a=sl;return n?t(n):(t.links=function(n){return ar(e(n)).edges.filter(function(n){return n.l&&n.r}).map(function(t){return{source:n[t.l.i],target:n[t.r.i]}})},t.triangles=function(n){var t=[];return ar(e(n)).cells.forEach(function(e,r){for(var i,u,o=e.site,a=e.edges.sort(Ve),l=-1,c=a.length,f=a[c-1].edge,s=f.l===o?f.r:f.l;++l<c;)i=f,u=s,f=a[l].edge,s=f.l===o?f.r:f.l,r<u.i&&r<s.i&&cr(o,u,s)<0&&t.push([n[r],n[u.i],n[s.i]])}),t},t.x=function(n){return arguments.length?(u=En(r=n),t):r},t.y=function(n){return arguments.length?(o=En(i=n),t):i},t.clipExtent=function(n){return arguments.length?(a=null==n?sl:n,t):a===sl?null:a},t.size=function(n){return arguments.length?t.clipExtent(n&&[[0,0],n]):a===sl?null:a&&a[1]},t)};var sl=[[-1e6,-1e6],[1e6,1e6]];ao.geom.delaunay=function(n){return ao.geom.voronoi().triangles(n)},ao.geom.quadtree=function(n,t,e,r,i){function u(n){function u(n,t,e,r,i,u,o,a){if(!isNaN(e)&&!isNaN(r))if(n.leaf){var l=n.x,f=n.y;if(null!=l)if(xo(l-e)+xo(f-r)<.01)c(n,t,e,r,i,u,o,a);else{var s=n.point;n.x=n.y=n.point=null,c(n,s,l,f,i,u,o,a),c(n,t,e,r,i,u,o,a)}else n.x=e,n.y=r,n.point=t}else c(n,t,e,r,i,u,o,a)}function c(n,t,e,r,i,o,a,l){var c=.5*(i+a),f=.5*(o+l),s=e>=c,h=r>=f,p=h<<1|s;n.leaf=!1,n=n.nodes[p]||(n.nodes[p]=hr()),s?i=c:a=c,h?o=f:l=f,u(n,t,e,r,i,o,a,l)}var f,s,h,p,g,v,d,y,m,M=En(a),x=En(l);if(null!=t)v=t,d=e,y=r,m=i;else if(y=m=-(v=d=1/0),s=[],h=[],g=n.length,o)for(p=0;g>p;++p)f=n[p],f.x<v&&(v=f.x),f.y<d&&(d=f.y),f.x>y&&(y=f.x),f.y>m&&(m=f.y),s.push(f.x),h.push(f.y);else for(p=0;g>p;++p){var b=+M(f=n[p],p),_=+x(f,p);v>b&&(v=b),d>_&&(d=_),b>y&&(y=b),_>m&&(m=_),s.push(b),h.push(_)}var w=y-v,S=m-d;w>S?m=d+w:y=v+S;var k=hr();if(k.add=function(n){u(k,n,+M(n,++p),+x(n,p),v,d,y,m)},k.visit=function(n){pr(n,k,v,d,y,m)},k.find=function(n){return gr(k,n[0],n[1],v,d,y,m)},p=-1,null==t){for(;++p<g;)u(k,n[p],s[p],h[p],v,d,y,m);--p}else n.forEach(k.add);return s=h=n=f=null,k}var o,a=Ce,l=ze;return(o=arguments.length)?(a=fr,l=sr,3===o&&(i=e,r=t,e=t=0),u(n)):(u.x=function(n){return arguments.length?(a=n,u):a},u.y=function(n){return arguments.length?(l=n,u):l},u.extent=function(n){return arguments.length?(null==n?t=e=r=i=null:(t=+n[0][0],e=+n[0][1],r=+n[1][0],i=+n[1][1]),u):null==t?null:[[t,e],[r,i]]},u.size=function(n){return arguments.length?(null==n?t=e=r=i=null:(t=e=0,r=+n[0],i=+n[1]),u):null==t?null:[r-t,i-e]},u)},ao.interpolateRgb=vr,ao.interpolateObject=dr,ao.interpolateNumber=yr,ao.interpolateString=mr;var hl=/[-+]?(?:\d+\.?\d*|\.?\d+)(?:[eE][-+]?\d+)?/g,pl=new RegExp(hl.source,"g");ao.interpolate=Mr,ao.interpolators=[function(n,t){var e=typeof t;return("string"===e?ua.has(t.toLowerCase())||/^(#|rgb\(|hsl\()/i.test(t)?vr:mr:t instanceof an?vr:Array.isArray(t)?xr:"object"===e&&isNaN(t)?dr:yr)(n,t)}],ao.interpolateArray=xr;var gl=function(){return m},vl=ao.map({linear:gl,poly:Er,quad:function(){return Sr},cubic:function(){return kr},sin:function(){return Ar},exp:function(){return Cr},circle:function(){return zr},elastic:Lr,back:qr,bounce:function(){return Tr}}),dl=ao.map({"in":m,out:_r,"in-out":wr,"out-in":function(n){return wr(_r(n))}});ao.ease=function(n){var t=n.indexOf("-"),e=t>=0?n.slice(0,t):n,r=t>=0?n.slice(t+1):"in";return e=vl.get(e)||gl,r=dl.get(r)||m,br(r(e.apply(null,lo.call(arguments,1))))},ao.interpolateHcl=Rr,ao.interpolateHsl=Dr,ao.interpolateLab=Pr,ao.interpolateRound=Ur,ao.transform=function(n){var t=fo.createElementNS(ao.ns.prefix.svg,"g");return(ao.transform=function(n){if(null!=n){t.setAttribute("transform",n);var e=t.transform.baseVal.consolidate()}return new jr(e?e.matrix:yl)})(n)},jr.prototype.toString=function(){return"translate("+this.translate+")rotate("+this.rotate+")skewX("+this.skew+")scale("+this.scale+")"};var yl={a:1,b:0,c:0,d:1,e:0,f:0};ao.interpolateTransform=$r,ao.layout={},ao.layout.bundle=function(){return function(n){for(var t=[],e=-1,r=n.length;++e<r;)t.push(Jr(n[e]));return t}},ao.layout.chord=function(){function n(){var n,c,s,h,p,g={},v=[],d=ao.range(u),y=[];for(e=[],r=[],n=0,h=-1;++h<u;){for(c=0,p=-1;++p<u;)c+=i[h][p];v.push(c),y.push(ao.range(u)),n+=c}for(o&&d.sort(function(n,t){return o(v[n],v[t])}),a&&y.forEach(function(n,t){n.sort(function(n,e){return a(i[t][n],i[t][e])})}),n=(Ho-f*u)/n,c=0,h=-1;++h<u;){for(s=c,p=-1;++p<u;){var m=d[h],M=y[m][p],x=i[m][M],b=c,_=c+=x*n;g[m+"-"+M]={index:m,subindex:M,startAngle:b,endAngle:_,value:x}}r[m]={index:m,startAngle:s,endAngle:c,value:v[m]},c+=f}for(h=-1;++h<u;)for(p=h-1;++p<u;){var w=g[h+"-"+p],S=g[p+"-"+h];(w.value||S.value)&&e.push(w.value<S.value?{source:S,target:w}:{source:w,target:S})}l&&t()}function t(){e.sort(function(n,t){return l((n.source.value+n.target.value)/2,(t.source.value+t.target.value)/2)})}var e,r,i,u,o,a,l,c={},f=0;return c.matrix=function(n){return arguments.length?(u=(i=n)&&i.length,e=r=null,c):i},c.padding=function(n){return arguments.length?(f=n,e=r=null,c):f},c.sortGroups=function(n){return arguments.length?(o=n,e=r=null,c):o},c.sortSubgroups=function(n){return arguments.length?(a=n,e=null,c):a},c.sortChords=function(n){return arguments.length?(l=n,e&&t(),c):l},c.chords=function(){return e||n(),e},c.groups=function(){return r||n(),r},c},ao.layout.force=function(){function n(n){return function(t,e,r,i){if(t.point!==n){var u=t.cx-n.x,o=t.cy-n.y,a=i-e,l=u*u+o*o;if(l>a*a/y){if(v>l){var c=t.charge/l;n.px-=u*c,n.py-=o*c}return!0}if(t.point&&l&&v>l){var c=t.pointCharge/l;n.px-=u*c,n.py-=o*c}}return!t.charge}}function t(n){n.px=ao.event.x,n.py=ao.event.y,l.resume()}var e,r,i,u,o,a,l={},c=ao.dispatch("start","tick","end"),f=[1,1],s=.9,h=ml,p=Ml,g=-30,v=xl,d=.1,y=.64,M=[],x=[];return l.tick=function(){if((i*=.99)<.005)return e=null,c.end({type:"end",alpha:i=0}),!0;var t,r,l,h,p,v,y,m,b,_=M.length,w=x.length;for(r=0;w>r;++r)l=x[r],h=l.source,p=l.target,m=p.x-h.x,b=p.y-h.y,(v=m*m+b*b)&&(v=i*o[r]*((v=Math.sqrt(v))-u[r])/v,m*=v,b*=v,p.x-=m*(y=h.weight+p.weight?h.weight/(h.weight+p.weight):.5),p.y-=b*y,h.x+=m*(y=1-y),h.y+=b*y);if((y=i*d)&&(m=f[0]/2,b=f[1]/2,r=-1,y))for(;++r<_;)l=M[r],l.x+=(m-l.x)*y,l.y+=(b-l.y)*y;if(g)for(ri(t=ao.geom.quadtree(M),i,a),r=-1;++r<_;)(l=M[r]).fixed||t.visit(n(l));for(r=-1;++r<_;)l=M[r],l.fixed?(l.x=l.px,l.y=l.py):(l.x-=(l.px-(l.px=l.x))*s,l.y-=(l.py-(l.py=l.y))*s);c.tick({type:"tick",alpha:i})},l.nodes=function(n){return arguments.length?(M=n,l):M},l.links=function(n){return arguments.length?(x=n,l):x},l.size=function(n){return arguments.length?(f=n,l):f},l.linkDistance=function(n){return arguments.length?(h="function"==typeof n?n:+n,l):h},l.distance=l.linkDistance,l.linkStrength=function(n){return arguments.length?(p="function"==typeof n?n:+n,l):p},l.friction=function(n){return arguments.length?(s=+n,l):s},l.charge=function(n){return arguments.length?(g="function"==typeof n?n:+n,l):g},l.chargeDistance=function(n){return arguments.length?(v=n*n,l):Math.sqrt(v)},l.gravity=function(n){return arguments.length?(d=+n,l):d},l.theta=function(n){return arguments.length?(y=n*n,l):Math.sqrt(y)},l.alpha=function(n){return arguments.length?(n=+n,i?n>0?i=n:(e.c=null,e.t=NaN,e=null,c.end({type:"end",alpha:i=0})):n>0&&(c.start({type:"start",alpha:i=n}),e=qn(l.tick)),l):i},l.start=function(){function n(n,r){if(!e){for(e=new Array(i),l=0;i>l;++l)e[l]=[];for(l=0;c>l;++l){var u=x[l];e[u.source.index].push(u.target),e[u.target.index].push(u.source)}}for(var o,a=e[t],l=-1,f=a.length;++l<f;)if(!isNaN(o=a[l][n]))return o;return Math.random()*r}var t,e,r,i=M.length,c=x.length,s=f[0],v=f[1];for(t=0;i>t;++t)(r=M[t]).index=t,r.weight=0;for(t=0;c>t;++t)r=x[t],"number"==typeof r.source&&(r.source=M[r.source]),"number"==typeof r.target&&(r.target=M[r.target]),++r.source.weight,++r.target.weight;for(t=0;i>t;++t)r=M[t],isNaN(r.x)&&(r.x=n("x",s)),isNaN(r.y)&&(r.y=n("y",v)),isNaN(r.px)&&(r.px=r.x),isNaN(r.py)&&(r.py=r.y);if(u=[],"function"==typeof h)for(t=0;c>t;++t)u[t]=+h.call(this,x[t],t);else for(t=0;c>t;++t)u[t]=h;if(o=[],"function"==typeof p)for(t=0;c>t;++t)o[t]=+p.call(this,x[t],t);else for(t=0;c>t;++t)o[t]=p;if(a=[],"function"==typeof g)for(t=0;i>t;++t)a[t]=+g.call(this,M[t],t);else for(t=0;i>t;++t)a[t]=g;return l.resume()},l.resume=function(){return l.alpha(.1)},l.stop=function(){return l.alpha(0)},l.drag=function(){return r||(r=ao.behavior.drag().origin(m).on("dragstart.force",Qr).on("drag.force",t).on("dragend.force",ni)),arguments.length?void this.on("mouseover.force",ti).on("mouseout.force",ei).call(r):r},ao.rebind(l,c,"on")};var ml=20,Ml=1,xl=1/0;ao.layout.hierarchy=function(){function n(i){var u,o=[i],a=[];for(i.depth=0;null!=(u=o.pop());)if(a.push(u),(c=e.call(n,u,u.depth))&&(l=c.length)){for(var l,c,f;--l>=0;)o.push(f=c[l]),f.parent=u,f.depth=u.depth+1;r&&(u.value=0),u.children=c}else r&&(u.value=+r.call(n,u,u.depth)||0),delete u.children;return oi(i,function(n){var e,i;t&&(e=n.children)&&e.sort(t),r&&(i=n.parent)&&(i.value+=n.value)}),a}var t=ci,e=ai,r=li;return n.sort=function(e){return arguments.length?(t=e,n):t},n.children=function(t){return arguments.length?(e=t,n):e},n.value=function(t){return arguments.length?(r=t,n):r},n.revalue=function(t){return r&&(ui(t,function(n){n.children&&(n.value=0)}),oi(t,function(t){var e;t.children||(t.value=+r.call(n,t,t.depth)||0),(e=t.parent)&&(e.value+=t.value)})),t},n},ao.layout.partition=function(){function n(t,e,r,i){var u=t.children;if(t.x=e,t.y=t.depth*i,t.dx=r,t.dy=i,u&&(o=u.length)){var o,a,l,c=-1;for(r=t.value?r/t.value:0;++c<o;)n(a=u[c],e,l=a.value*r,i),e+=l}}function t(n){var e=n.children,r=0;if(e&&(i=e.length))for(var i,u=-1;++u<i;)r=Math.max(r,t(e[u]));return 1+r}function e(e,u){var o=r.call(this,e,u);return n(o[0],0,i[0],i[1]/t(o[0])),o}var r=ao.layout.hierarchy(),i=[1,1];return e.size=function(n){return arguments.length?(i=n,e):i},ii(e,r)},ao.layout.pie=function(){function n(o){var a,l=o.length,c=o.map(function(e,r){return+t.call(n,e,r)}),f=+("function"==typeof r?r.apply(this,arguments):r),s=("function"==typeof i?i.apply(this,arguments):i)-f,h=Math.min(Math.abs(s)/l,+("function"==typeof u?u.apply(this,arguments):u)),p=h*(0>s?-1:1),g=ao.sum(c),v=g?(s-l*p)/g:0,d=ao.range(l),y=[];return null!=e&&d.sort(e===bl?function(n,t){return c[t]-c[n]}:function(n,t){return e(o[n],o[t])}),d.forEach(function(n){y[n]={data:o[n],value:a=c[n],startAngle:f,endAngle:f+=a*v+p,padAngle:h}}),y}var t=Number,e=bl,r=0,i=Ho,u=0;return n.value=function(e){return arguments.length?(t=e,n):t},n.sort=function(t){return arguments.length?(e=t,n):e},n.startAngle=function(t){return arguments.length?(r=t,n):r},n.endAngle=function(t){return arguments.length?(i=t,n):i},n.padAngle=function(t){return arguments.length?(u=t,n):u},n};var bl={};ao.layout.stack=function(){function n(a,l){if(!(h=a.length))return a;var c=a.map(function(e,r){return t.call(n,e,r)}),f=c.map(function(t){return t.map(function(t,e){return[u.call(n,t,e),o.call(n,t,e)]})}),s=e.call(n,f,l);c=ao.permute(c,s),f=ao.permute(f,s);var h,p,g,v,d=r.call(n,f,l),y=c[0].length;for(g=0;y>g;++g)for(i.call(n,c[0][g],v=d[g],f[0][g][1]),p=1;h>p;++p)i.call(n,c[p][g],v+=f[p-1][g][1],f[p][g][1]);return a}var t=m,e=gi,r=vi,i=pi,u=si,o=hi;return n.values=function(e){return arguments.length?(t=e,n):t},n.order=function(t){return arguments.length?(e="function"==typeof t?t:_l.get(t)||gi,n):e},n.offset=function(t){return arguments.length?(r="function"==typeof t?t:wl.get(t)||vi,n):r},n.x=function(t){return arguments.length?(u=t,n):u},n.y=function(t){return arguments.length?(o=t,n):o},n.out=function(t){return arguments.length?(i=t,n):i},n};var _l=ao.map({"inside-out":function(n){var t,e,r=n.length,i=n.map(di),u=n.map(yi),o=ao.range(r).sort(function(n,t){return i[n]-i[t]}),a=0,l=0,c=[],f=[];for(t=0;r>t;++t)e=o[t],l>a?(a+=u[e],c.push(e)):(l+=u[e],f.push(e));return f.reverse().concat(c)},reverse:function(n){return ao.range(n.length).reverse()},"default":gi}),wl=ao.map({silhouette:function(n){var t,e,r,i=n.length,u=n[0].length,o=[],a=0,l=[];for(e=0;u>e;++e){for(t=0,r=0;i>t;t++)r+=n[t][e][1];r>a&&(a=r),o.push(r)}for(e=0;u>e;++e)l[e]=(a-o[e])/2;return l},wiggle:function(n){var t,e,r,i,u,o,a,l,c,f=n.length,s=n[0],h=s.length,p=[];for(p[0]=l=c=0,e=1;h>e;++e){for(t=0,i=0;f>t;++t)i+=n[t][e][1];for(t=0,u=0,a=s[e][0]-s[e-1][0];f>t;++t){for(r=0,o=(n[t][e][1]-n[t][e-1][1])/(2*a);t>r;++r)o+=(n[r][e][1]-n[r][e-1][1])/a;u+=o*n[t][e][1]}p[e]=l-=i?u/i*a:0,c>l&&(c=l)}for(e=0;h>e;++e)p[e]-=c;return p},expand:function(n){var t,e,r,i=n.length,u=n[0].length,o=1/i,a=[];for(e=0;u>e;++e){for(t=0,r=0;i>t;t++)r+=n[t][e][1];if(r)for(t=0;i>t;t++)n[t][e][1]/=r;else for(t=0;i>t;t++)n[t][e][1]=o}for(e=0;u>e;++e)a[e]=0;return a},zero:vi});ao.layout.histogram=function(){function n(n,u){for(var o,a,l=[],c=n.map(e,this),f=r.call(this,c,u),s=i.call(this,f,c,u),u=-1,h=c.length,p=s.length-1,g=t?1:1/h;++u<p;)o=l[u]=[],o.dx=s[u+1]-(o.x=s[u]),o.y=0;if(p>0)for(u=-1;++u<h;)a=c[u],a>=f[0]&&a<=f[1]&&(o=l[ao.bisect(s,a,1,p)-1],o.y+=g,o.push(n[u]));return l}var t=!0,e=Number,r=bi,i=Mi;return n.value=function(t){return arguments.length?(e=t,n):e},n.range=function(t){return arguments.length?(r=En(t),n):r},n.bins=function(t){return arguments.length?(i="number"==typeof t?function(n){return xi(n,t)}:En(t),n):i},n.frequency=function(e){return arguments.length?(t=!!e,n):t},n},ao.layout.pack=function(){function n(n,u){var o=e.call(this,n,u),a=o[0],l=i[0],c=i[1],f=null==t?Math.sqrt:"function"==typeof t?t:function(){return t};if(a.x=a.y=0,oi(a,function(n){n.r=+f(n.value)}),oi(a,Ni),r){var s=r*(t?1:Math.max(2*a.r/l,2*a.r/c))/2;oi(a,function(n){n.r+=s}),oi(a,Ni),oi(a,function(n){n.r-=s})}return Ci(a,l/2,c/2,t?1:1/Math.max(2*a.r/l,2*a.r/c)),o}var t,e=ao.layout.hierarchy().sort(_i),r=0,i=[1,1];return n.size=function(t){return arguments.length?(i=t,n):i},n.radius=function(e){return arguments.length?(t=null==e||"function"==typeof e?e:+e,n):t},n.padding=function(t){return arguments.length?(r=+t,n):r},ii(n,e)},ao.layout.tree=function(){function n(n,i){var f=o.call(this,n,i),s=f[0],h=t(s);if(oi(h,e),h.parent.m=-h.z,ui(h,r),c)ui(s,u);else{var p=s,g=s,v=s;ui(s,function(n){n.x<p.x&&(p=n),n.x>g.x&&(g=n),n.depth>v.depth&&(v=n)});var d=a(p,g)/2-p.x,y=l[0]/(g.x+a(g,p)/2+d),m=l[1]/(v.depth||1);ui(s,function(n){n.x=(n.x+d)*y,n.y=n.depth*m})}return f}function t(n){for(var t,e={A:null,children:[n]},r=[e];null!=(t=r.pop());)for(var i,u=t.children,o=0,a=u.length;a>o;++o)r.push((u[o]=i={_:u[o],parent:t,children:(i=u[o].children)&&i.slice()||[],A:null,a:null,z:0,m:0,c:0,s:0,t:null,i:o}).a=i);return e.children[0]}function e(n){var t=n.children,e=n.parent.children,r=n.i?e[n.i-1]:null;if(t.length){Di(n);var u=(t[0].z+t[t.length-1].z)/2;r?(n.z=r.z+a(n._,r._),n.m=n.z-u):n.z=u}else r&&(n.z=r.z+a(n._,r._));n.parent.A=i(n,r,n.parent.A||e[0])}function r(n){n._.x=n.z+n.parent.m,n.m+=n.parent.m}function i(n,t,e){if(t){for(var r,i=n,u=n,o=t,l=i.parent.children[0],c=i.m,f=u.m,s=o.m,h=l.m;o=Ti(o),i=qi(i),o&&i;)l=qi(l),u=Ti(u),u.a=n,r=o.z+s-i.z-c+a(o._,i._),r>0&&(Ri(Pi(o,n,e),n,r),c+=r,f+=r),s+=o.m,c+=i.m,h+=l.m,f+=u.m;o&&!Ti(u)&&(u.t=o,u.m+=s-f),i&&!qi(l)&&(l.t=i,l.m+=c-h,e=n)}return e}function u(n){n.x*=l[0],n.y=n.depth*l[1]}var o=ao.layout.hierarchy().sort(null).value(null),a=Li,l=[1,1],c=null;return n.separation=function(t){return arguments.length?(a=t,n):a},n.size=function(t){return arguments.length?(c=null==(l=t)?u:null,n):c?null:l},n.nodeSize=function(t){return arguments.length?(c=null==(l=t)?null:u,n):c?l:null},ii(n,o)},ao.layout.cluster=function(){function n(n,u){var o,a=t.call(this,n,u),l=a[0],c=0;oi(l,function(n){var t=n.children;t&&t.length?(n.x=ji(t),n.y=Ui(t)):(n.x=o?c+=e(n,o):0,n.y=0,o=n)});var f=Fi(l),s=Hi(l),h=f.x-e(f,s)/2,p=s.x+e(s,f)/2;return oi(l,i?function(n){n.x=(n.x-l.x)*r[0],n.y=(l.y-n.y)*r[1]}:function(n){n.x=(n.x-h)/(p-h)*r[0],n.y=(1-(l.y?n.y/l.y:1))*r[1]}),a}var t=ao.layout.hierarchy().sort(null).value(null),e=Li,r=[1,1],i=!1;return n.separation=function(t){return arguments.length?(e=t,n):e},n.size=function(t){return arguments.length?(i=null==(r=t),n):i?null:r},n.nodeSize=function(t){return arguments.length?(i=null!=(r=t),n):i?r:null},ii(n,t)},ao.layout.treemap=function(){function n(n,t){for(var e,r,i=-1,u=n.length;++i<u;)r=(e=n[i]).value*(0>t?0:t),e.area=isNaN(r)||0>=r?0:r}function t(e){var u=e.children;if(u&&u.length){var o,a,l,c=s(e),f=[],h=u.slice(),g=1/0,v="slice"===p?c.dx:"dice"===p?c.dy:"slice-dice"===p?1&e.depth?c.dy:c.dx:Math.min(c.dx,c.dy);for(n(h,c.dx*c.dy/e.value),f.area=0;(l=h.length)>0;)f.push(o=h[l-1]),f.area+=o.area,"squarify"!==p||(a=r(f,v))<=g?(h.pop(),g=a):(f.area-=f.pop().area,i(f,v,c,!1),v=Math.min(c.dx,c.dy),f.length=f.area=0,g=1/0);f.length&&(i(f,v,c,!0),f.length=f.area=0),u.forEach(t)}}function e(t){var r=t.children;if(r&&r.length){var u,o=s(t),a=r.slice(),l=[];for(n(a,o.dx*o.dy/t.value),l.area=0;u=a.pop();)l.push(u),l.area+=u.area,null!=u.z&&(i(l,u.z?o.dx:o.dy,o,!a.length),l.length=l.area=0);r.forEach(e)}}function r(n,t){for(var e,r=n.area,i=0,u=1/0,o=-1,a=n.length;++o<a;)(e=n[o].area)&&(u>e&&(u=e),e>i&&(i=e));return r*=r,t*=t,r?Math.max(t*i*g/r,r/(t*u*g)):1/0}function i(n,t,e,r){var i,u=-1,o=n.length,a=e.x,c=e.y,f=t?l(n.area/t):0;
+	if(t==e.dx){for((r||f>e.dy)&&(f=e.dy);++u<o;)i=n[u],i.x=a,i.y=c,i.dy=f,a+=i.dx=Math.min(e.x+e.dx-a,f?l(i.area/f):0);i.z=!0,i.dx+=e.x+e.dx-a,e.y+=f,e.dy-=f}else{for((r||f>e.dx)&&(f=e.dx);++u<o;)i=n[u],i.x=a,i.y=c,i.dx=f,c+=i.dy=Math.min(e.y+e.dy-c,f?l(i.area/f):0);i.z=!1,i.dy+=e.y+e.dy-c,e.x+=f,e.dx-=f}}function u(r){var i=o||a(r),u=i[0];return u.x=u.y=0,u.value?(u.dx=c[0],u.dy=c[1]):u.dx=u.dy=0,o&&a.revalue(u),n([u],u.dx*u.dy/u.value),(o?e:t)(u),h&&(o=i),i}var o,a=ao.layout.hierarchy(),l=Math.round,c=[1,1],f=null,s=Oi,h=!1,p="squarify",g=.5*(1+Math.sqrt(5));return u.size=function(n){return arguments.length?(c=n,u):c},u.padding=function(n){function t(t){var e=n.call(u,t,t.depth);return null==e?Oi(t):Ii(t,"number"==typeof e?[e,e,e,e]:e)}function e(t){return Ii(t,n)}if(!arguments.length)return f;var r;return s=null==(f=n)?Oi:"function"==(r=typeof n)?t:"number"===r?(n=[n,n,n,n],e):e,u},u.round=function(n){return arguments.length?(l=n?Math.round:Number,u):l!=Number},u.sticky=function(n){return arguments.length?(h=n,o=null,u):h},u.ratio=function(n){return arguments.length?(g=n,u):g},u.mode=function(n){return arguments.length?(p=n+"",u):p},ii(u,a)},ao.random={normal:function(n,t){var e=arguments.length;return 2>e&&(t=1),1>e&&(n=0),function(){var e,r,i;do e=2*Math.random()-1,r=2*Math.random()-1,i=e*e+r*r;while(!i||i>1);return n+t*e*Math.sqrt(-2*Math.log(i)/i)}},logNormal:function(){var n=ao.random.normal.apply(ao,arguments);return function(){return Math.exp(n())}},bates:function(n){var t=ao.random.irwinHall(n);return function(){return t()/n}},irwinHall:function(n){return function(){for(var t=0,e=0;n>e;e++)t+=Math.random();return t}}},ao.scale={};var Sl={floor:m,ceil:m};ao.scale.linear=function(){return Wi([0,1],[0,1],Mr,!1)};var kl={s:1,g:1,p:1,r:1,e:1};ao.scale.log=function(){return ru(ao.scale.linear().domain([0,1]),10,!0,[1,10])};var Nl=ao.format(".0e"),El={floor:function(n){return-Math.ceil(-n)},ceil:function(n){return-Math.floor(-n)}};ao.scale.pow=function(){return iu(ao.scale.linear(),1,[0,1])},ao.scale.sqrt=function(){return ao.scale.pow().exponent(.5)},ao.scale.ordinal=function(){return ou([],{t:"range",a:[[]]})},ao.scale.category10=function(){return ao.scale.ordinal().range(Al)},ao.scale.category20=function(){return ao.scale.ordinal().range(Cl)},ao.scale.category20b=function(){return ao.scale.ordinal().range(zl)},ao.scale.category20c=function(){return ao.scale.ordinal().range(Ll)};var Al=[2062260,16744206,2924588,14034728,9725885,9197131,14907330,8355711,12369186,1556175].map(xn),Cl=[2062260,11454440,16744206,16759672,2924588,10018698,14034728,16750742,9725885,12955861,9197131,12885140,14907330,16234194,8355711,13092807,12369186,14408589,1556175,10410725].map(xn),zl=[3750777,5395619,7040719,10264286,6519097,9216594,11915115,13556636,9202993,12426809,15186514,15190932,8666169,11356490,14049643,15177372,8077683,10834324,13528509,14589654].map(xn),Ll=[3244733,7057110,10406625,13032431,15095053,16616764,16625259,16634018,3253076,7652470,10607003,13101504,7695281,10394312,12369372,14342891,6513507,9868950,12434877,14277081].map(xn);ao.scale.quantile=function(){return au([],[])},ao.scale.quantize=function(){return lu(0,1,[0,1])},ao.scale.threshold=function(){return cu([.5],[0,1])},ao.scale.identity=function(){return fu([0,1])},ao.svg={},ao.svg.arc=function(){function n(){var n=Math.max(0,+e.apply(this,arguments)),c=Math.max(0,+r.apply(this,arguments)),f=o.apply(this,arguments)-Io,s=a.apply(this,arguments)-Io,h=Math.abs(s-f),p=f>s?0:1;if(n>c&&(g=c,c=n,n=g),h>=Oo)return t(c,p)+(n?t(n,1-p):"")+"Z";var g,v,d,y,m,M,x,b,_,w,S,k,N=0,E=0,A=[];if((y=(+l.apply(this,arguments)||0)/2)&&(d=u===ql?Math.sqrt(n*n+c*c):+u.apply(this,arguments),p||(E*=-1),c&&(E=tn(d/c*Math.sin(y))),n&&(N=tn(d/n*Math.sin(y)))),c){m=c*Math.cos(f+E),M=c*Math.sin(f+E),x=c*Math.cos(s-E),b=c*Math.sin(s-E);var C=Math.abs(s-f-2*E)<=Fo?0:1;if(E&&yu(m,M,x,b)===p^C){var z=(f+s)/2;m=c*Math.cos(z),M=c*Math.sin(z),x=b=null}}else m=M=0;if(n){_=n*Math.cos(s-N),w=n*Math.sin(s-N),S=n*Math.cos(f+N),k=n*Math.sin(f+N);var L=Math.abs(f-s+2*N)<=Fo?0:1;if(N&&yu(_,w,S,k)===1-p^L){var q=(f+s)/2;_=n*Math.cos(q),w=n*Math.sin(q),S=k=null}}else _=w=0;if(h>Uo&&(g=Math.min(Math.abs(c-n)/2,+i.apply(this,arguments)))>.001){v=c>n^p?0:1;var T=g,R=g;if(Fo>h){var D=null==S?[_,w]:null==x?[m,M]:Re([m,M],[S,k],[x,b],[_,w]),P=m-D[0],U=M-D[1],j=x-D[0],F=b-D[1],H=1/Math.sin(Math.acos((P*j+U*F)/(Math.sqrt(P*P+U*U)*Math.sqrt(j*j+F*F)))/2),O=Math.sqrt(D[0]*D[0]+D[1]*D[1]);R=Math.min(g,(n-O)/(H-1)),T=Math.min(g,(c-O)/(H+1))}if(null!=x){var I=mu(null==S?[_,w]:[S,k],[m,M],c,T,p),Y=mu([x,b],[_,w],c,T,p);g===T?A.push("M",I[0],"A",T,",",T," 0 0,",v," ",I[1],"A",c,",",c," 0 ",1-p^yu(I[1][0],I[1][1],Y[1][0],Y[1][1]),",",p," ",Y[1],"A",T,",",T," 0 0,",v," ",Y[0]):A.push("M",I[0],"A",T,",",T," 0 1,",v," ",Y[0])}else A.push("M",m,",",M);if(null!=S){var Z=mu([m,M],[S,k],n,-R,p),V=mu([_,w],null==x?[m,M]:[x,b],n,-R,p);g===R?A.push("L",V[0],"A",R,",",R," 0 0,",v," ",V[1],"A",n,",",n," 0 ",p^yu(V[1][0],V[1][1],Z[1][0],Z[1][1]),",",1-p," ",Z[1],"A",R,",",R," 0 0,",v," ",Z[0]):A.push("L",V[0],"A",R,",",R," 0 0,",v," ",Z[0])}else A.push("L",_,",",w)}else A.push("M",m,",",M),null!=x&&A.push("A",c,",",c," 0 ",C,",",p," ",x,",",b),A.push("L",_,",",w),null!=S&&A.push("A",n,",",n," 0 ",L,",",1-p," ",S,",",k);return A.push("Z"),A.join("")}function t(n,t){return"M0,"+n+"A"+n+","+n+" 0 1,"+t+" 0,"+-n+"A"+n+","+n+" 0 1,"+t+" 0,"+n}var e=hu,r=pu,i=su,u=ql,o=gu,a=vu,l=du;return n.innerRadius=function(t){return arguments.length?(e=En(t),n):e},n.outerRadius=function(t){return arguments.length?(r=En(t),n):r},n.cornerRadius=function(t){return arguments.length?(i=En(t),n):i},n.padRadius=function(t){return arguments.length?(u=t==ql?ql:En(t),n):u},n.startAngle=function(t){return arguments.length?(o=En(t),n):o},n.endAngle=function(t){return arguments.length?(a=En(t),n):a},n.padAngle=function(t){return arguments.length?(l=En(t),n):l},n.centroid=function(){var n=(+e.apply(this,arguments)+ +r.apply(this,arguments))/2,t=(+o.apply(this,arguments)+ +a.apply(this,arguments))/2-Io;return[Math.cos(t)*n,Math.sin(t)*n]},n};var ql="auto";ao.svg.line=function(){return Mu(m)};var Tl=ao.map({linear:xu,"linear-closed":bu,step:_u,"step-before":wu,"step-after":Su,basis:zu,"basis-open":Lu,"basis-closed":qu,bundle:Tu,cardinal:Eu,"cardinal-open":ku,"cardinal-closed":Nu,monotone:Fu});Tl.forEach(function(n,t){t.key=n,t.closed=/-closed$/.test(n)});var Rl=[0,2/3,1/3,0],Dl=[0,1/3,2/3,0],Pl=[0,1/6,2/3,1/6];ao.svg.line.radial=function(){var n=Mu(Hu);return n.radius=n.x,delete n.x,n.angle=n.y,delete n.y,n},wu.reverse=Su,Su.reverse=wu,ao.svg.area=function(){return Ou(m)},ao.svg.area.radial=function(){var n=Ou(Hu);return n.radius=n.x,delete n.x,n.innerRadius=n.x0,delete n.x0,n.outerRadius=n.x1,delete n.x1,n.angle=n.y,delete n.y,n.startAngle=n.y0,delete n.y0,n.endAngle=n.y1,delete n.y1,n},ao.svg.chord=function(){function n(n,a){var l=t(this,u,n,a),c=t(this,o,n,a);return"M"+l.p0+r(l.r,l.p1,l.a1-l.a0)+(e(l,c)?i(l.r,l.p1,l.r,l.p0):i(l.r,l.p1,c.r,c.p0)+r(c.r,c.p1,c.a1-c.a0)+i(c.r,c.p1,l.r,l.p0))+"Z"}function t(n,t,e,r){var i=t.call(n,e,r),u=a.call(n,i,r),o=l.call(n,i,r)-Io,f=c.call(n,i,r)-Io;return{r:u,a0:o,a1:f,p0:[u*Math.cos(o),u*Math.sin(o)],p1:[u*Math.cos(f),u*Math.sin(f)]}}function e(n,t){return n.a0==t.a0&&n.a1==t.a1}function r(n,t,e){return"A"+n+","+n+" 0 "+ +(e>Fo)+",1 "+t}function i(n,t,e,r){return"Q 0,0 "+r}var u=Me,o=xe,a=Iu,l=gu,c=vu;return n.radius=function(t){return arguments.length?(a=En(t),n):a},n.source=function(t){return arguments.length?(u=En(t),n):u},n.target=function(t){return arguments.length?(o=En(t),n):o},n.startAngle=function(t){return arguments.length?(l=En(t),n):l},n.endAngle=function(t){return arguments.length?(c=En(t),n):c},n},ao.svg.diagonal=function(){function n(n,i){var u=t.call(this,n,i),o=e.call(this,n,i),a=(u.y+o.y)/2,l=[u,{x:u.x,y:a},{x:o.x,y:a},o];return l=l.map(r),"M"+l[0]+"C"+l[1]+" "+l[2]+" "+l[3]}var t=Me,e=xe,r=Yu;return n.source=function(e){return arguments.length?(t=En(e),n):t},n.target=function(t){return arguments.length?(e=En(t),n):e},n.projection=function(t){return arguments.length?(r=t,n):r},n},ao.svg.diagonal.radial=function(){var n=ao.svg.diagonal(),t=Yu,e=n.projection;return n.projection=function(n){return arguments.length?e(Zu(t=n)):t},n},ao.svg.symbol=function(){function n(n,r){return(Ul.get(t.call(this,n,r))||$u)(e.call(this,n,r))}var t=Xu,e=Vu;return n.type=function(e){return arguments.length?(t=En(e),n):t},n.size=function(t){return arguments.length?(e=En(t),n):e},n};var Ul=ao.map({circle:$u,cross:function(n){var t=Math.sqrt(n/5)/2;return"M"+-3*t+","+-t+"H"+-t+"V"+-3*t+"H"+t+"V"+-t+"H"+3*t+"V"+t+"H"+t+"V"+3*t+"H"+-t+"V"+t+"H"+-3*t+"Z"},diamond:function(n){var t=Math.sqrt(n/(2*Fl)),e=t*Fl;return"M0,"+-t+"L"+e+",0 0,"+t+" "+-e+",0Z"},square:function(n){var t=Math.sqrt(n)/2;return"M"+-t+","+-t+"L"+t+","+-t+" "+t+","+t+" "+-t+","+t+"Z"},"triangle-down":function(n){var t=Math.sqrt(n/jl),e=t*jl/2;return"M0,"+e+"L"+t+","+-e+" "+-t+","+-e+"Z"},"triangle-up":function(n){var t=Math.sqrt(n/jl),e=t*jl/2;return"M0,"+-e+"L"+t+","+e+" "+-t+","+e+"Z"}});ao.svg.symbolTypes=Ul.keys();var jl=Math.sqrt(3),Fl=Math.tan(30*Yo);Co.transition=function(n){for(var t,e,r=Hl||++Zl,i=Ku(n),u=[],o=Ol||{time:Date.now(),ease:Nr,delay:0,duration:250},a=-1,l=this.length;++a<l;){u.push(t=[]);for(var c=this[a],f=-1,s=c.length;++f<s;)(e=c[f])&&Qu(e,f,i,r,o),t.push(e)}return Wu(u,i,r)},Co.interrupt=function(n){return this.each(null==n?Il:Bu(Ku(n)))};var Hl,Ol,Il=Bu(Ku()),Yl=[],Zl=0;Yl.call=Co.call,Yl.empty=Co.empty,Yl.node=Co.node,Yl.size=Co.size,ao.transition=function(n,t){return n&&n.transition?Hl?n.transition(t):n:ao.selection().transition(n)},ao.transition.prototype=Yl,Yl.select=function(n){var t,e,r,i=this.id,u=this.namespace,o=[];n=A(n);for(var a=-1,l=this.length;++a<l;){o.push(t=[]);for(var c=this[a],f=-1,s=c.length;++f<s;)(r=c[f])&&(e=n.call(r,r.__data__,f,a))?("__data__"in r&&(e.__data__=r.__data__),Qu(e,f,u,i,r[u][i]),t.push(e)):t.push(null)}return Wu(o,u,i)},Yl.selectAll=function(n){var t,e,r,i,u,o=this.id,a=this.namespace,l=[];n=C(n);for(var c=-1,f=this.length;++c<f;)for(var s=this[c],h=-1,p=s.length;++h<p;)if(r=s[h]){u=r[a][o],e=n.call(r,r.__data__,h,c),l.push(t=[]);for(var g=-1,v=e.length;++g<v;)(i=e[g])&&Qu(i,g,a,o,u),t.push(i)}return Wu(l,a,o)},Yl.filter=function(n){var t,e,r,i=[];"function"!=typeof n&&(n=O(n));for(var u=0,o=this.length;o>u;u++){i.push(t=[]);for(var e=this[u],a=0,l=e.length;l>a;a++)(r=e[a])&&n.call(r,r.__data__,a,u)&&t.push(r)}return Wu(i,this.namespace,this.id)},Yl.tween=function(n,t){var e=this.id,r=this.namespace;return arguments.length<2?this.node()[r][e].tween.get(n):Y(this,null==t?function(t){t[r][e].tween.remove(n)}:function(i){i[r][e].tween.set(n,t)})},Yl.attr=function(n,t){function e(){this.removeAttribute(a)}function r(){this.removeAttributeNS(a.space,a.local)}function i(n){return null==n?e:(n+="",function(){var t,e=this.getAttribute(a);return e!==n&&(t=o(e,n),function(n){this.setAttribute(a,t(n))})})}function u(n){return null==n?r:(n+="",function(){var t,e=this.getAttributeNS(a.space,a.local);return e!==n&&(t=o(e,n),function(n){this.setAttributeNS(a.space,a.local,t(n))})})}if(arguments.length<2){for(t in n)this.attr(t,n[t]);return this}var o="transform"==n?$r:Mr,a=ao.ns.qualify(n);return Ju(this,"attr."+n,t,a.local?u:i)},Yl.attrTween=function(n,t){function e(n,e){var r=t.call(this,n,e,this.getAttribute(i));return r&&function(n){this.setAttribute(i,r(n))}}function r(n,e){var r=t.call(this,n,e,this.getAttributeNS(i.space,i.local));return r&&function(n){this.setAttributeNS(i.space,i.local,r(n))}}var i=ao.ns.qualify(n);return this.tween("attr."+n,i.local?r:e)},Yl.style=function(n,e,r){function i(){this.style.removeProperty(n)}function u(e){return null==e?i:(e+="",function(){var i,u=t(this).getComputedStyle(this,null).getPropertyValue(n);return u!==e&&(i=Mr(u,e),function(t){this.style.setProperty(n,i(t),r)})})}var o=arguments.length;if(3>o){if("string"!=typeof n){2>o&&(e="");for(r in n)this.style(r,n[r],e);return this}r=""}return Ju(this,"style."+n,e,u)},Yl.styleTween=function(n,e,r){function i(i,u){var o=e.call(this,i,u,t(this).getComputedStyle(this,null).getPropertyValue(n));return o&&function(t){this.style.setProperty(n,o(t),r)}}return arguments.length<3&&(r=""),this.tween("style."+n,i)},Yl.text=function(n){return Ju(this,"text",n,Gu)},Yl.remove=function(){var n=this.namespace;return this.each("end.transition",function(){var t;this[n].count<2&&(t=this.parentNode)&&t.removeChild(this)})},Yl.ease=function(n){var t=this.id,e=this.namespace;return arguments.length<1?this.node()[e][t].ease:("function"!=typeof n&&(n=ao.ease.apply(ao,arguments)),Y(this,function(r){r[e][t].ease=n}))},Yl.delay=function(n){var t=this.id,e=this.namespace;return arguments.length<1?this.node()[e][t].delay:Y(this,"function"==typeof n?function(r,i,u){r[e][t].delay=+n.call(r,r.__data__,i,u)}:(n=+n,function(r){r[e][t].delay=n}))},Yl.duration=function(n){var t=this.id,e=this.namespace;return arguments.length<1?this.node()[e][t].duration:Y(this,"function"==typeof n?function(r,i,u){r[e][t].duration=Math.max(1,n.call(r,r.__data__,i,u))}:(n=Math.max(1,n),function(r){r[e][t].duration=n}))},Yl.each=function(n,t){var e=this.id,r=this.namespace;if(arguments.length<2){var i=Ol,u=Hl;try{Hl=e,Y(this,function(t,i,u){Ol=t[r][e],n.call(t,t.__data__,i,u)})}finally{Ol=i,Hl=u}}else Y(this,function(i){var u=i[r][e];(u.event||(u.event=ao.dispatch("start","end","interrupt"))).on(n,t)});return this},Yl.transition=function(){for(var n,t,e,r,i=this.id,u=++Zl,o=this.namespace,a=[],l=0,c=this.length;c>l;l++){a.push(n=[]);for(var t=this[l],f=0,s=t.length;s>f;f++)(e=t[f])&&(r=e[o][i],Qu(e,f,o,u,{time:r.time,ease:r.ease,delay:r.delay+r.duration,duration:r.duration})),n.push(e)}return Wu(a,o,u)},ao.svg.axis=function(){function n(n){n.each(function(){var n,c=ao.select(this),f=this.__chart__||e,s=this.__chart__=e.copy(),h=null==l?s.ticks?s.ticks.apply(s,a):s.domain():l,p=null==t?s.tickFormat?s.tickFormat.apply(s,a):m:t,g=c.selectAll(".tick").data(h,s),v=g.enter().insert("g",".domain").attr("class","tick").style("opacity",Uo),d=ao.transition(g.exit()).style("opacity",Uo).remove(),y=ao.transition(g.order()).style("opacity",1),M=Math.max(i,0)+o,x=Zi(s),b=c.selectAll(".domain").data([0]),_=(b.enter().append("path").attr("class","domain"),ao.transition(b));v.append("line"),v.append("text");var w,S,k,N,E=v.select("line"),A=y.select("line"),C=g.select("text").text(p),z=v.select("text"),L=y.select("text"),q="top"===r||"left"===r?-1:1;if("bottom"===r||"top"===r?(n=no,w="x",k="y",S="x2",N="y2",C.attr("dy",0>q?"0em":".71em").style("text-anchor","middle"),_.attr("d","M"+x[0]+","+q*u+"V0H"+x[1]+"V"+q*u)):(n=to,w="y",k="x",S="y2",N="x2",C.attr("dy",".32em").style("text-anchor",0>q?"end":"start"),_.attr("d","M"+q*u+","+x[0]+"H0V"+x[1]+"H"+q*u)),E.attr(N,q*i),z.attr(k,q*M),A.attr(S,0).attr(N,q*i),L.attr(w,0).attr(k,q*M),s.rangeBand){var T=s,R=T.rangeBand()/2;f=s=function(n){return T(n)+R}}else f.rangeBand?f=s:d.call(n,s,f);v.call(n,f,s),y.call(n,s,s)})}var t,e=ao.scale.linear(),r=Vl,i=6,u=6,o=3,a=[10],l=null;return n.scale=function(t){return arguments.length?(e=t,n):e},n.orient=function(t){return arguments.length?(r=t in Xl?t+"":Vl,n):r},n.ticks=function(){return arguments.length?(a=co(arguments),n):a},n.tickValues=function(t){return arguments.length?(l=t,n):l},n.tickFormat=function(e){return arguments.length?(t=e,n):t},n.tickSize=function(t){var e=arguments.length;return e?(i=+t,u=+arguments[e-1],n):i},n.innerTickSize=function(t){return arguments.length?(i=+t,n):i},n.outerTickSize=function(t){return arguments.length?(u=+t,n):u},n.tickPadding=function(t){return arguments.length?(o=+t,n):o},n.tickSubdivide=function(){return arguments.length&&n},n};var Vl="bottom",Xl={top:1,right:1,bottom:1,left:1};ao.svg.brush=function(){function n(t){t.each(function(){var t=ao.select(this).style("pointer-events","all").style("-webkit-tap-highlight-color","rgba(0,0,0,0)").on("mousedown.brush",u).on("touchstart.brush",u),o=t.selectAll(".background").data([0]);o.enter().append("rect").attr("class","background").style("visibility","hidden").style("cursor","crosshair"),t.selectAll(".extent").data([0]).enter().append("rect").attr("class","extent").style("cursor","move");var a=t.selectAll(".resize").data(v,m);a.exit().remove(),a.enter().append("g").attr("class",function(n){return"resize "+n}).style("cursor",function(n){return $l[n]}).append("rect").attr("x",function(n){return/[ew]$/.test(n)?-3:null}).attr("y",function(n){return/^[ns]/.test(n)?-3:null}).attr("width",6).attr("height",6).style("visibility","hidden"),a.style("display",n.empty()?"none":null);var l,s=ao.transition(t),h=ao.transition(o);c&&(l=Zi(c),h.attr("x",l[0]).attr("width",l[1]-l[0]),r(s)),f&&(l=Zi(f),h.attr("y",l[0]).attr("height",l[1]-l[0]),i(s)),e(s)})}function e(n){n.selectAll(".resize").attr("transform",function(n){return"translate("+s[+/e$/.test(n)]+","+h[+/^s/.test(n)]+")"})}function r(n){n.select(".extent").attr("x",s[0]),n.selectAll(".extent,.n>rect,.s>rect").attr("width",s[1]-s[0])}function i(n){n.select(".extent").attr("y",h[0]),n.selectAll(".extent,.e>rect,.w>rect").attr("height",h[1]-h[0])}function u(){function u(){32==ao.event.keyCode&&(C||(M=null,L[0]-=s[1],L[1]-=h[1],C=2),S())}function v(){32==ao.event.keyCode&&2==C&&(L[0]+=s[1],L[1]+=h[1],C=0,S())}function d(){var n=ao.mouse(b),t=!1;x&&(n[0]+=x[0],n[1]+=x[1]),C||(ao.event.altKey?(M||(M=[(s[0]+s[1])/2,(h[0]+h[1])/2]),L[0]=s[+(n[0]<M[0])],L[1]=h[+(n[1]<M[1])]):M=null),E&&y(n,c,0)&&(r(k),t=!0),A&&y(n,f,1)&&(i(k),t=!0),t&&(e(k),w({type:"brush",mode:C?"move":"resize"}))}function y(n,t,e){var r,i,u=Zi(t),l=u[0],c=u[1],f=L[e],v=e?h:s,d=v[1]-v[0];return C&&(l-=f,c-=d+f),r=(e?g:p)?Math.max(l,Math.min(c,n[e])):n[e],C?i=(r+=f)+d:(M&&(f=Math.max(l,Math.min(c,2*M[e]-r))),r>f?(i=r,r=f):i=f),v[0]!=r||v[1]!=i?(e?a=null:o=null,v[0]=r,v[1]=i,!0):void 0}function m(){d(),k.style("pointer-events","all").selectAll(".resize").style("display",n.empty()?"none":null),ao.select("body").style("cursor",null),q.on("mousemove.brush",null).on("mouseup.brush",null).on("touchmove.brush",null).on("touchend.brush",null).on("keydown.brush",null).on("keyup.brush",null),z(),w({type:"brushend"})}var M,x,b=this,_=ao.select(ao.event.target),w=l.of(b,arguments),k=ao.select(b),N=_.datum(),E=!/^(n|s)$/.test(N)&&c,A=!/^(e|w)$/.test(N)&&f,C=_.classed("extent"),z=W(b),L=ao.mouse(b),q=ao.select(t(b)).on("keydown.brush",u).on("keyup.brush",v);if(ao.event.changedTouches?q.on("touchmove.brush",d).on("touchend.brush",m):q.on("mousemove.brush",d).on("mouseup.brush",m),k.interrupt().selectAll("*").interrupt(),C)L[0]=s[0]-L[0],L[1]=h[0]-L[1];else if(N){var T=+/w$/.test(N),R=+/^n/.test(N);x=[s[1-T]-L[0],h[1-R]-L[1]],L[0]=s[T],L[1]=h[R]}else ao.event.altKey&&(M=L.slice());k.style("pointer-events","none").selectAll(".resize").style("display",null),ao.select("body").style("cursor",_.style("cursor")),w({type:"brushstart"}),d()}var o,a,l=N(n,"brushstart","brush","brushend"),c=null,f=null,s=[0,0],h=[0,0],p=!0,g=!0,v=Bl[0];return n.event=function(n){n.each(function(){var n=l.of(this,arguments),t={x:s,y:h,i:o,j:a},e=this.__chart__||t;this.__chart__=t,Hl?ao.select(this).transition().each("start.brush",function(){o=e.i,a=e.j,s=e.x,h=e.y,n({type:"brushstart"})}).tween("brush:brush",function(){var e=xr(s,t.x),r=xr(h,t.y);return o=a=null,function(i){s=t.x=e(i),h=t.y=r(i),n({type:"brush",mode:"resize"})}}).each("end.brush",function(){o=t.i,a=t.j,n({type:"brush",mode:"resize"}),n({type:"brushend"})}):(n({type:"brushstart"}),n({type:"brush",mode:"resize"}),n({type:"brushend"}))})},n.x=function(t){return arguments.length?(c=t,v=Bl[!c<<1|!f],n):c},n.y=function(t){return arguments.length?(f=t,v=Bl[!c<<1|!f],n):f},n.clamp=function(t){return arguments.length?(c&&f?(p=!!t[0],g=!!t[1]):c?p=!!t:f&&(g=!!t),n):c&&f?[p,g]:c?p:f?g:null},n.extent=function(t){var e,r,i,u,l;return arguments.length?(c&&(e=t[0],r=t[1],f&&(e=e[0],r=r[0]),o=[e,r],c.invert&&(e=c(e),r=c(r)),e>r&&(l=e,e=r,r=l),e==s[0]&&r==s[1]||(s=[e,r])),f&&(i=t[0],u=t[1],c&&(i=i[1],u=u[1]),a=[i,u],f.invert&&(i=f(i),u=f(u)),i>u&&(l=i,i=u,u=l),i==h[0]&&u==h[1]||(h=[i,u])),n):(c&&(o?(e=o[0],r=o[1]):(e=s[0],r=s[1],c.invert&&(e=c.invert(e),r=c.invert(r)),e>r&&(l=e,e=r,r=l))),f&&(a?(i=a[0],u=a[1]):(i=h[0],u=h[1],f.invert&&(i=f.invert(i),u=f.invert(u)),i>u&&(l=i,i=u,u=l))),c&&f?[[e,i],[r,u]]:c?[e,r]:f&&[i,u])},n.clear=function(){return n.empty()||(s=[0,0],h=[0,0],o=a=null),n},n.empty=function(){return!!c&&s[0]==s[1]||!!f&&h[0]==h[1]},ao.rebind(n,l,"on")};var $l={n:"ns-resize",e:"ew-resize",s:"ns-resize",w:"ew-resize",nw:"nwse-resize",ne:"nesw-resize",se:"nwse-resize",sw:"nesw-resize"},Bl=[["n","e","s","w","nw","ne","se","sw"],["e","w"],["n","s"],[]],Wl=ga.format=xa.timeFormat,Jl=Wl.utc,Gl=Jl("%Y-%m-%dT%H:%M:%S.%LZ");Wl.iso=Date.prototype.toISOString&&+new Date("2000-01-01T00:00:00.000Z")?eo:Gl,eo.parse=function(n){var t=new Date(n);return isNaN(t)?null:t},eo.toString=Gl.toString,ga.second=On(function(n){return new va(1e3*Math.floor(n/1e3))},function(n,t){n.setTime(n.getTime()+1e3*Math.floor(t))},function(n){return n.getSeconds()}),ga.seconds=ga.second.range,ga.seconds.utc=ga.second.utc.range,ga.minute=On(function(n){return new va(6e4*Math.floor(n/6e4))},function(n,t){n.setTime(n.getTime()+6e4*Math.floor(t))},function(n){return n.getMinutes()}),ga.minutes=ga.minute.range,ga.minutes.utc=ga.minute.utc.range,ga.hour=On(function(n){var t=n.getTimezoneOffset()/60;return new va(36e5*(Math.floor(n/36e5-t)+t))},function(n,t){n.setTime(n.getTime()+36e5*Math.floor(t))},function(n){return n.getHours()}),ga.hours=ga.hour.range,ga.hours.utc=ga.hour.utc.range,ga.month=On(function(n){return n=ga.day(n),n.setDate(1),n},function(n,t){n.setMonth(n.getMonth()+t)},function(n){return n.getMonth()}),ga.months=ga.month.range,ga.months.utc=ga.month.utc.range;var Kl=[1e3,5e3,15e3,3e4,6e4,3e5,9e5,18e5,36e5,108e5,216e5,432e5,864e5,1728e5,6048e5,2592e6,7776e6,31536e6],Ql=[[ga.second,1],[ga.second,5],[ga.second,15],[ga.second,30],[ga.minute,1],[ga.minute,5],[ga.minute,15],[ga.minute,30],[ga.hour,1],[ga.hour,3],[ga.hour,6],[ga.hour,12],[ga.day,1],[ga.day,2],[ga.week,1],[ga.month,1],[ga.month,3],[ga.year,1]],nc=Wl.multi([[".%L",function(n){return n.getMilliseconds()}],[":%S",function(n){return n.getSeconds()}],["%I:%M",function(n){return n.getMinutes()}],["%I %p",function(n){return n.getHours()}],["%a %d",function(n){return n.getDay()&&1!=n.getDate()}],["%b %d",function(n){return 1!=n.getDate()}],["%B",function(n){return n.getMonth()}],["%Y",zt]]),tc={range:function(n,t,e){return ao.range(Math.ceil(n/e)*e,+t,e).map(io)},floor:m,ceil:m};Ql.year=ga.year,ga.scale=function(){return ro(ao.scale.linear(),Ql,nc)};var ec=Ql.map(function(n){return[n[0].utc,n[1]]}),rc=Jl.multi([[".%L",function(n){return n.getUTCMilliseconds()}],[":%S",function(n){return n.getUTCSeconds()}],["%I:%M",function(n){return n.getUTCMinutes()}],["%I %p",function(n){return n.getUTCHours()}],["%a %d",function(n){return n.getUTCDay()&&1!=n.getUTCDate()}],["%b %d",function(n){return 1!=n.getUTCDate()}],["%B",function(n){return n.getUTCMonth()}],["%Y",zt]]);ec.year=ga.year.utc,ga.scale.utc=function(){return ro(ao.scale.linear(),ec,rc)},ao.text=An(function(n){return n.responseText}),ao.json=function(n,t){return Cn(n,"application/json",uo,t)},ao.html=function(n,t){return Cn(n,"text/html",oo,t)},ao.xml=An(function(n){return n.responseXML}),"function"==typeof define&&define.amd?(this.d3=ao,define(ao)):"object"==typeof module&&module.exports?module.exports=ao:this.d3=ao}();
+	</script>
+</head>
+<body>
+
+<script>
+
+
+
+function makeKadmosMenu(theGraphs)
+{
+	var imageWidth = 200;
+	var imageHeight = 150;
+	var padding = 10;
+	var rectHeight = 70;
+	var imgSize = 40;
+	var visPackDiv = d3.select("body").append("div").attr("class","vispackDiv");
+	var visPackSvg = visPackDiv.append("svg")
+		.attr("class","visPackSvg")
+		.attr("width",imageWidth*5+40)
+		.attr("height",imageHeight+40)
+		.attr("transform", "translate("
+		  + String(10) + "," + String(10) + ")")			  
+	
+	
+	var defs = visPackSvg.append("defs");
+	var filter = defs.append("filter")
+		.attr("id", "drop-shadow")
+		.attr("height", "130%")
+	filter.append("feColorMatrix")
+		.attr("values", "0.2 0 0 0 0 0 0.2 0 0 0 0 0 0.2 0 0 0 0 0 1 0")
+		.attr("result", "matrixOut")
+	filter.append("feGaussianBlur")
+		.attr("in", "matrixOut")
+		.attr("stdDeviation", 5)
+		.attr("result", "blur")
+	filter.append("feOffset")
+		.attr("in", "blur")
+		.attr("dx", 5)
+		.attr("dy", 5)
+		.attr("result", "offsetBlur")
+	var feMerge = filter.append("feMerge");
+	feMerge.append("feMergeNode")
+		.attr("in", "offsetBlur")
+	feMerge.append("feMergeNode")
+		.attr("in", "SourceGraphic");
+	
+	var visPackFrame = visPackSvg.append("rect")
+		.attr("width",imageWidth*5+12)
+		.attr("height",imageHeight)
+		.attr("fill", "white")
+		.style("filter", "url(#drop-shadow)")
+	
+	var imgs = visPackSvg.selectAll("image").data([0]);
+		imgs.enter()
+		.append("svg:image")
+		.attr("x",5)
+		.attr("xlink:href", "file:supportFiles/include/KADMOS_VisualizationPack_Icon.png")
+		.attr("width", imageWidth)
+		.attr("height", imageHeight)
+		.attr("position", "relative")
+		
+	
+	var offset_tmp = 860;
+	visPackSvg.append("text")
+		.attr("transform", "translate("
+		  + String(210) + "," + String(35) + ")")
+		.attr("font-family","Arial")
+		.attr("font-size","32pt")
+		.attr("fill","#666666")
+		.text("KADMOS Visualization Package")
+	
+	
+	var acknGroup = visPackSvg.append("g").attr("class","acknGroup").classed("acknGroup",true)
+	var acknRect = acknGroup.append("rect").classed("ackn",true)
+		.attr("height", 30)
+		.attr("transform", "translate("
+		  + String(offset_tmp) + "," + String(2) + ")")
+	acknGroup.append("text")
+		.attr("transform", "translate("
+		  + String(offset_tmp+padding/2) + "," + String(20) + ")")
+		.attr("text-anchor", "front")
+		.attr("font-family","Arial")
+		.attr("font-size","12pt")
+		.attr("fill","white")
+		.text("Acknowledgements")
+	acknRect = acknRect.attr("width", function(d) {return this.parentNode.getBBox().width+padding;})
+	acknRect = acknRect.classed("VisPackMenu",true)
+	acknGroup = acknGroup.on("mouseover", function(){d3.select(this).style("cursor", "pointer")})
+	.on("click",function(){window.open("supportFiles/include/acknowledgements.html", '_blank');})
+
+	var acknGroup2 = visPackSvg.append("g").attr("class","acknGroup2")
+		.attr("transform", "translate("
+		  + String(offset_tmp) + "," + String(40+padding) + ")")
+    acknGroup2.append("text")
+		.classed("acknText",true)
+		.attr("dy", "0em")
+		.text("Copyright:")
+	acknGroup2.append("text")
+		.classed("acknText",true)
+		.attr("dy", "1.5em")
+		.text("B. Aigner")
+	var imgs = visPackSvg.selectAll("img").data([0]);
+		imgs.enter()
+		.append("svg:image")
+		.attr("xlink:href", "file:supportFiles/include/RWTH_Logo.png")
+		.attr("x", String(offset_tmp+85))
+		.attr("y", "3em")
+		.attr("width", "60")
+		.attr("height", "40");
+	acknGroup2.append("text")
+		.classed("acknText",true)
+		.attr("dy", "3.2em")
+		.text("I. van Gent")
+	var imgs = visPackSvg.selectAll("img").data([0]);
+		imgs.enter()
+		.append("svg:image")
+		.attr("xlink:href", "file:supportFiles/include/TUDelft_Logo.png")
+		.attr("x", String(offset_tmp+85))
+		.attr("y", "4.7em")
+		.attr("width", "60")
+		.attr("height", "40");
+
+	
+	var ul = d3.select("body").append("div").attr("class","newDiv").append("ul")
+	function makeViewButtons(graphs_tmp,name, visFile)
+	{
+		var dropdown1 = ul.append("li").on("mouseover", function(){d3.select(this).style("cursor", "default")})
+		dropdown1.append("a").text(name)
+		dropdown1.append("img").attr("src","supportFiles/include/AGILE_Icon.png")
+			.attr("align","left")
+			.style("margin-left","6px")
+			.style("margin-right","0px")
+			.style("margin-top","6px")
+			.style("margin-bottom","6px")
+			.attr("height","42")
+			.attr("width","42")
+		var links = dropdown1.append("ul");
+		for (var i=0; i < graphs_tmp.length; i++)
+		{
+			makeDropDown(graphs_tmp[i],visFile,links)
+		}
+	}
+	function makeDropDown(theData,file,theLinks)
+	{
+		var link = theLinks.append("li").append("a")
+			 .text(theData.description)
+			 .on("mouseover", function(){d3.select(this).style("cursor", "pointer")})
+			 .on("click", function(){
+				window.location.replace("supportFiles/"+file, '_blank');
+				window.localStorage.setItem("graphID", theData.id);})
+	}
+	makeViewButtons(theGraphs,"XDSM","xdsm.html");
+	makeViewButtons(theGraphs,"Edge Bundles","edgeBundles.html");
+	makeViewButtons(theGraphs,"Sankey Diagram","sankeyDiagram.html");
+}
+//#####################################################################//
+
+
+d3.json("supportFiles/json/graphs.json", function(graphInfo) 
+{	
+	var graphs = graphInfo.graphs;
+	var categories = graphInfo.categories;
+	makeKadmosMenu(graphs);
+})
+
+	
+</script>
diff --git a/kadmos/external/D3_vispack/KADMOS_VisualizationPackage_170530/supportFiles/circleLayout.html b/kadmos/external/D3_vispack/KADMOS_VisualizationPackage_170530/supportFiles/circleLayout.html
new file mode 100644
index 000000000..e35687857
--- /dev/null
+++ b/kadmos/external/D3_vispack/KADMOS_VisualizationPackage_170530/supportFiles/circleLayout.html
@@ -0,0 +1,189 @@
+<!doctype html>
+<html class="js" lang="">
+<style>
+.node {
+  fill: #aaa;
+}
+
+.node:hover {
+  fill: #666666;
+}
+
+.link {
+  stroke: #3399FF;
+  stroke-opacity: .4;
+  stroke-width: 2px;
+  fill: none;
+  
+}
+
+.invisibleLink {
+  stroke: #000;
+  stroke-opacity: 0;
+  stroke-width: 15px;
+  fill: none;
+}
+.invisibleLink:hover {
+  stroke: #3399FF;
+  stroke-opacity: 0.4;
+  stroke-width: 5px;
+  fill: none;
+}
+
+.node:hover,
+.node--source,
+.node--target {
+  font-weight: 700;
+}
+
+.node--source {
+  fill: #99CC00;
+}
+
+.node--target {
+  fill: #CC0000;
+}
+
+.link--target,
+.link--source{
+  stroke-opacity: .8;
+  stroke-width: 2px;
+}
+
+.link--source {
+  stroke: #CC0000;
+}
+
+.link--target {
+  stroke: #99CC00;
+}
+
+
+.treeNode {
+cursor: pointer;
+}
+
+.overlay{
+  background-color:#FFF;
+}
+
+.treeNode circle {
+fill: #fff;
+stroke: #3399FF;
+stroke-width: 1.5px;
+}
+
+.treeNode text {
+font-size:16px; 
+font-family:Arial;
+}
+
+.treeLink {
+fill: none;
+stroke: #ccc;
+stroke-width: 1.5px;
+}
+
+.d3-context-menu {
+	position: absolute;
+	display: none;
+	background-color: #f2f2f2;
+	border-radius: 4px;
+	font-family: Arial;
+	font-size: 16pt;
+	min-width: 300px;
+	border: 1px solid #d4d4d4;
+	z-index:1200;
+}
+.d3-context-menu ul {
+	list-style-type: none;
+	margin: 4px 0px;
+	padding: 0px;
+	cursor: default;
+}
+.d3-context-menu ul li {
+	padding: 4px 16px;
+}
+.d3-context-menu ul li:hover {
+	background-color: #4677f8;
+}
+.d3-context-menu ul li > ul {
+    position: absolute; 
+    background-color: #f2f2f2; 
+    top: 0;
+	min-width: 350px;
+    left: 300px; 
+    z-index: -1; 
+} 
+
+.d3-context-menu ul li > ul li:hover 
+{ 
+    background-color: #4677f8;
+	color: #fefefe;
+}
+
+.ackn {
+fill: #666666;
+stroke: #666666;
+stroke-width: 2.0;
+}
+
+.acknGroup:hover .ackn{
+fill: #3399FF;
+stroke: #3399FF;
+}
+
+.newDiv {
+	position:relative;
+	top: -100px;
+	left: 220px;
+	background-color: none;
+}
+.newDiv a {
+    text-decoration: none;
+    color: white;
+    font-family: Arial;
+    font-size: 20pt;
+    padding-top: 12px;
+    padding-right: 12px;
+    padding-bottom: 12px;
+    padding-left: 6px;
+    display:inline-block;
+}
+.newDiv ul {
+  display:  inline-block;;
+  margin: 0;
+  padding: 0;
+  background-color: #666666;
+}
+.newDiv ul li {display: inline-block;}
+.newDiv ul li:hover {background: #888;}
+.newDiv ul li:hover ul {display: block;}
+.newDiv ul li ul {
+  position: absolute;
+  min-width: 200px;
+  display: none;
+}
+.newDiv ul li ul li { 
+  background: #555; 
+  display: block;
+}
+.newDiv ul li ul li a {
+	display:block !important
+} 
+.newDiv ul li ul li:hover {background: #3399FF;}
+
+.acknText {
+font-family: Arial;
+font-size: 12pt;
+fill: #666666;
+}
+</style>
+    <head>
+		<meta charset="utf-8">
+		<title>KADMOS Edge Bundles</title>
+    </head>
+    <body>
+		<script src="circleLayout.js"></script>
+    </body>
+</html>
\ No newline at end of file
diff --git a/kadmos/external/D3_vispack/KADMOS_VisualizationPackage_170530/supportFiles/circleLayout.js b/kadmos/external/D3_vispack/KADMOS_VisualizationPackage_170530/supportFiles/circleLayout.js
new file mode 100644
index 000000000..178d5a4b4
--- /dev/null
+++ b/kadmos/external/D3_vispack/KADMOS_VisualizationPackage_170530/supportFiles/circleLayout.js
@@ -0,0 +1,2464 @@
+(function() {
+/*! jQuery v3.2.0 | (c) JS Foundation and other contributors | jquery.org/license */
+!function(a,b){"use strict";"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){"use strict";var c=[],d=a.document,e=Object.getPrototypeOf,f=c.slice,g=c.concat,h=c.push,i=c.indexOf,j={},k=j.toString,l=j.hasOwnProperty,m=l.toString,n=m.call(Object),o={};function p(a,b){b=b||d;var c=b.createElement("script");c.text=a,b.head.appendChild(c).parentNode.removeChild(c)}var q="3.2.0",r=function(a,b){return new r.fn.init(a,b)},s=/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,t=/^-ms-/,u=/-([a-z])/g,v=function(a,b){return b.toUpperCase()};r.fn=r.prototype={jquery:q,constructor:r,length:0,toArray:function(){return f.call(this)},get:function(a){return null==a?f.call(this):a<0?this[a+this.length]:this[a]},pushStack:function(a){var b=r.merge(this.constructor(),a);return b.prevObject=this,b},each:function(a){return r.each(this,a)},map:function(a){return this.pushStack(r.map(this,function(b,c){return a.call(b,c,b)}))},slice:function(){return this.pushStack(f.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:h,sort:c.sort,splice:c.splice},r.extend=r.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||r.isFunction(g)||(g={}),h===i&&(g=this,h--);h<i;h++)if(null!=(a=arguments[h]))for(b in a)c=g[b],d=a[b],g!==d&&(j&&d&&(r.isPlainObject(d)||(e=Array.isArray(d)))?(e?(e=!1,f=c&&Array.isArray(c)?c:[]):f=c&&r.isPlainObject(c)?c:{},g[b]=r.extend(j,f,d)):void 0!==d&&(g[b]=d));return g},r.extend({expando:"jQuery"+(q+Math.random()).replace(/\D/g,""),isReady:!0,error:function(a){throw new Error(a)},noop:function(){},isFunction:function(a){return"function"===r.type(a)},isWindow:function(a){return null!=a&&a===a.window},isNumeric:function(a){var b=r.type(a);return("number"===b||"string"===b)&&!isNaN(a-parseFloat(a))},isPlainObject:function(a){var b,c;return!(!a||"[object Object]"!==k.call(a))&&(!(b=e(a))||(c=l.call(b,"constructor")&&b.constructor,"function"==typeof c&&m.call(c)===n))},isEmptyObject:function(a){var b;for(b in a)return!1;return!0},type:function(a){return null==a?a+"":"object"==typeof a||"function"==typeof a?j[k.call(a)]||"object":typeof a},globalEval:function(a){p(a)},camelCase:function(a){return a.replace(t,"ms-").replace(u,v)},each:function(a,b){var c,d=0;if(w(a)){for(c=a.length;d<c;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(s,"")},makeArray:function(a,b){var c=b||[];return null!=a&&(w(Object(a))?r.merge(c,"string"==typeof a?[a]:a):h.call(c,a)),c},inArray:function(a,b,c){return null==b?-1:i.call(b,a,c)},merge:function(a,b){for(var c=+b.length,d=0,e=a.length;d<c;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),d!==h&&e.push(a[f]);return e},map:function(a,b,c){var d,e,f=0,h=[];if(w(a))for(d=a.length;f<d;f++)e=b(a[f],f,c),null!=e&&h.push(e);else for(f in a)e=b(a[f],f,c),null!=e&&h.push(e);return g.apply([],h)},guid:1,proxy:function(a,b){var c,d,e;if("string"==typeof b&&(c=a[b],b=a,a=c),r.isFunction(a))return d=f.call(arguments,2),e=function(){return a.apply(b||this,d.concat(f.call(arguments)))},e.guid=a.guid=a.guid||r.guid++,e},now:Date.now,support:o}),"function"==typeof Symbol&&(r.fn[Symbol.iterator]=c[Symbol.iterator]),r.each("Boolean Number String Function Array Date RegExp Object Error Symbol".split(" "),function(a,b){j["[object "+b+"]"]=b.toLowerCase()});function w(a){var b=!!a&&"length"in a&&a.length,c=r.type(a);return"function"!==c&&!r.isWindow(a)&&("array"===c||0===b||"number"==typeof b&&b>0&&b-1 in a)}var x=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=ha(),z=ha(),A=ha(),B=function(a,b){return a===b&&(l=!0),0},C={}.hasOwnProperty,D=[],E=D.pop,F=D.push,G=D.push,H=D.slice,I=function(a,b){for(var c=0,d=a.length;c<d;c++)if(a[c]===b)return c;return-1},J="checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped",K="[\\x20\\t\\r\\n\\f]",L="(?:\\\\.|[\\w-]|[^\0-\\xa0])+",M="\\["+K+"*("+L+")(?:"+K+"*([*^$|!~]?=)"+K+"*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|("+L+"))|)"+K+"*\\]",N=":("+L+")(?:\\((('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|((?:\\\\.|[^\\\\()[\\]]|"+M+")*)|.*)\\)|)",O=new RegExp(K+"+","g"),P=new RegExp("^"+K+"+|((?:^|[^\\\\])(?:\\\\.)*)"+K+"+$","g"),Q=new RegExp("^"+K+"*,"+K+"*"),R=new RegExp("^"+K+"*([>+~]|"+K+")"+K+"*"),S=new RegExp("="+K+"*([^\\]'\"]*?)"+K+"*\\]","g"),T=new RegExp(N),U=new RegExp("^"+L+"$"),V={ID:new RegExp("^#("+L+")"),CLASS:new RegExp("^\\.("+L+")"),TAG:new RegExp("^("+L+"|[*])"),ATTR:new RegExp("^"+M),PSEUDO:new RegExp("^"+N),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+K+"*(even|odd|(([+-]|)(\\d*)n|)"+K+"*(?:([+-]|)"+K+"*(\\d+)|))"+K+"*\\)|)","i"),bool:new RegExp("^(?:"+J+")$","i"),needsContext:new RegExp("^"+K+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+K+"*((?:-\\d)?\\d*)"+K+"*\\)|)(?=[^-]|$)","i")},W=/^(?:input|select|textarea|button)$/i,X=/^h\d$/i,Y=/^[^{]+\{\s*\[native \w/,Z=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,$=/[+~]/,_=new RegExp("\\\\([\\da-f]{1,6}"+K+"?|("+K+")|.)","ig"),aa=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)},ba=/([\0-\x1f\x7f]|^-?\d)|^-$|[^\0-\x1f\x7f-\uFFFF\w-]/g,ca=function(a,b){return b?"\0"===a?"\ufffd":a.slice(0,-1)+"\\"+a.charCodeAt(a.length-1).toString(16)+" ":"\\"+a},da=function(){m()},ea=ta(function(a){return a.disabled===!0&&("form"in a||"label"in a)},{dir:"parentNode",next:"legend"});try{G.apply(D=H.call(v.childNodes),v.childNodes),D[v.childNodes.length].nodeType}catch(fa){G={apply:D.length?function(a,b){F.apply(a,H.call(b))}:function(a,b){var c=a.length,d=0;while(a[c++]=b[d++]);a.length=c-1}}}function ga(a,b,d,e){var f,h,j,k,l,o,r,s=b&&b.ownerDocument,w=b?b.nodeType:9;if(d=d||[],"string"!=typeof a||!a||1!==w&&9!==w&&11!==w)return d;if(!e&&((b?b.ownerDocument||b:v)!==n&&m(b),b=b||n,p)){if(11!==w&&(l=Z.exec(a)))if(f=l[1]){if(9===w){if(!(j=b.getElementById(f)))return d;if(j.id===f)return d.push(j),d}else if(s&&(j=s.getElementById(f))&&t(b,j)&&j.id===f)return d.push(j),d}else{if(l[2])return G.apply(d,b.getElementsByTagName(a)),d;if((f=l[3])&&c.getElementsByClassName&&b.getElementsByClassName)return G.apply(d,b.getElementsByClassName(f)),d}if(c.qsa&&!A[a+" "]&&(!q||!q.test(a))){if(1!==w)s=b,r=a;else if("object"!==b.nodeName.toLowerCase()){(k=b.getAttribute("id"))?k=k.replace(ba,ca):b.setAttribute("id",k=u),o=g(a),h=o.length;while(h--)o[h]="#"+k+" "+sa(o[h]);r=o.join(","),s=$.test(a)&&qa(b.parentNode)||b}if(r)try{return G.apply(d,s.querySelectorAll(r)),d}catch(x){}finally{k===u&&b.removeAttribute("id")}}}return i(a.replace(P,"$1"),b,d,e)}function ha(){var a=[];function b(c,e){return a.push(c+" ")>d.cacheLength&&delete b[a.shift()],b[c+" "]=e}return b}function ia(a){return a[u]=!0,a}function ja(a){var b=n.createElement("fieldset");try{return!!a(b)}catch(c){return!1}finally{b.parentNode&&b.parentNode.removeChild(b),b=null}}function ka(a,b){var c=a.split("|"),e=c.length;while(e--)d.attrHandle[c[e]]=b}function la(a,b){var c=b&&a,d=c&&1===a.nodeType&&1===b.nodeType&&a.sourceIndex-b.sourceIndex;if(d)return d;if(c)while(c=c.nextSibling)if(c===b)return-1;return a?1:-1}function ma(a){return function(b){var c=b.nodeName.toLowerCase();return"input"===c&&b.type===a}}function na(a){return function(b){var c=b.nodeName.toLowerCase();return("input"===c||"button"===c)&&b.type===a}}function oa(a){return function(b){return"form"in b?b.parentNode&&b.disabled===!1?"label"in b?"label"in b.parentNode?b.parentNode.disabled===a:b.disabled===a:b.isDisabled===a||b.isDisabled!==!a&&ea(b)===a:b.disabled===a:"label"in b&&b.disabled===a}}function pa(a){return ia(function(b){return b=+b,ia(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 qa(a){return a&&"undefined"!=typeof a.getElementsByTagName&&a}c=ga.support={},f=ga.isXML=function(a){var b=a&&(a.ownerDocument||a).documentElement;return!!b&&"HTML"!==b.nodeName},m=ga.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),v!==n&&(e=n.defaultView)&&e.top!==e&&(e.addEventListener?e.addEventListener("unload",da,!1):e.attachEvent&&e.attachEvent("onunload",da)),c.attributes=ja(function(a){return a.className="i",!a.getAttribute("className")}),c.getElementsByTagName=ja(function(a){return a.appendChild(n.createComment("")),!a.getElementsByTagName("*").length}),c.getElementsByClassName=Y.test(n.getElementsByClassName),c.getById=ja(function(a){return o.appendChild(a).id=u,!n.getElementsByName||!n.getElementsByName(u).length}),c.getById?(d.filter.ID=function(a){var b=a.replace(_,aa);return function(a){return a.getAttribute("id")===b}},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(_,aa);return function(a){var c="undefined"!=typeof a.getAttributeNode&&a.getAttributeNode("id");return c&&c.value===b}},d.find.ID=function(a,b){if("undefined"!=typeof b.getElementById&&p){var c,d,e,f=b.getElementById(a);if(f){if(c=f.getAttributeNode("id"),c&&c.value===a)return[f];e=b.getElementsByName(a),d=0;while(f=e[d++])if(c=f.getAttributeNode("id"),c&&c.value===a)return[f]}return[]}}),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){if("undefined"!=typeof b.getElementsByClassName&&p)return b.getElementsByClassName(a)},r=[],q=[],(c.qsa=Y.test(n.querySelectorAll))&&(ja(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("[*^$]="+K+"*(?:''|\"\")"),a.querySelectorAll("[selected]").length||q.push("\\["+K+"*(?:value|"+J+")"),a.querySelectorAll("[id~="+u+"-]").length||q.push("~="),a.querySelectorAll(":checked").length||q.push(":checked"),a.querySelectorAll("a#"+u+"+*").length||q.push(".#.+[+~]")}),ja(function(a){a.innerHTML="<a href='' disabled='disabled'></a><select disabled='disabled'><option/></select>";var b=n.createElement("input");b.setAttribute("type","hidden"),a.appendChild(b).setAttribute("name","D"),a.querySelectorAll("[name=d]").length&&q.push("name"+K+"*[*^$|!~]?="),2!==a.querySelectorAll(":enabled").length&&q.push(":enabled",":disabled"),o.appendChild(a).disabled=!0,2!==a.querySelectorAll(":disabled").length&&q.push(":enabled",":disabled"),a.querySelectorAll("*,:x"),q.push(",.*:")})),(c.matchesSelector=Y.test(s=o.matches||o.webkitMatchesSelector||o.mozMatchesSelector||o.oMatchesSelector||o.msMatchesSelector))&&ja(function(a){c.disconnectedMatch=s.call(a,"*"),s.call(a,"[s!='']:x"),r.push("!=",N)}),q=q.length&&new RegExp(q.join("|")),r=r.length&&new RegExp(r.join("|")),b=Y.test(o.compareDocumentPosition),t=b||Y.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?I(k,a)-I(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?I(k,a)-I(k,b):0;if(e===f)return la(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?la(g[d],h[d]):g[d]===v?-1:h[d]===v?1:0},n):n},ga.matches=function(a,b){return ga(a,null,null,b)},ga.matchesSelector=function(a,b){if((a.ownerDocument||a)!==n&&m(a),b=b.replace(S,"='$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 ga(b,n,null,[a]).length>0},ga.contains=function(a,b){return(a.ownerDocument||a)!==n&&m(a),t(a,b)},ga.attr=function(a,b){(a.ownerDocument||a)!==n&&m(a);var e=d.attrHandle[b.toLowerCase()],f=e&&C.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},ga.escape=function(a){return(a+"").replace(ba,ca)},ga.error=function(a){throw new Error("Syntax error, unrecognized expression: "+a)},ga.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=ga.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=ga.selectors={cacheLength:50,createPseudo:ia,match:V,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(_,aa),a[3]=(a[3]||a[4]||a[5]||"").replace(_,aa),"~="===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]||ga.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]&&ga.error(a[0]),a},PSEUDO:function(a){var b,c=!a[6]&&a[2];return V.CHILD.test(a[0])?null:(a[3]?a[2]=a[4]||a[5]||"":c&&T.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(_,aa).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("(^|"+K+")"+a+"("+K+"|$)"))&&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=ga.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(O," ")+" ").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),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()]||ga.error("unsupported pseudo: "+a);return e[u]?e(b):e.length>1?(c=[a,a,"",b],d.setFilters.hasOwnProperty(a.toLowerCase())?ia(function(a,c){var d,f=e(a,b),g=f.length;while(g--)d=I(a,f[g]),a[d]=!(c[d]=f[g])}):function(a){return e(a,0,c)}):e}},pseudos:{not:ia(function(a){var b=[],c=[],d=h(a.replace(P,"$1"));return d[u]?ia(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:ia(function(a){return function(b){return ga(a,b).length>0}}),contains:ia(function(a){return a=a.replace(_,aa),function(b){return(b.textContent||b.innerText||e(b)).indexOf(a)>-1}}),lang:ia(function(a){return U.test(a||"")||ga.error("unsupported lang: "+a),a=a.replace(_,aa).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:oa(!1),disabled:oa(!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 X.test(a.nodeName)},input:function(a){return W.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:pa(function(){return[0]}),last:pa(function(a,b){return[b-1]}),eq:pa(function(a,b,c){return[c<0?c+b:c]}),even:pa(function(a,b){for(var c=0;c<b;c+=2)a.push(c);return a}),odd:pa(function(a,b){for(var c=1;c<b;c+=2)a.push(c);return a}),lt:pa(function(a,b,c){for(var d=c<0?c+b:c;--d>=0;)a.push(d);return a}),gt:pa(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]=ma(b);for(b in{submit:!0,reset:!0})d.pseudos[b]=na(b);function ra(){}ra.prototype=d.filters=d.pseudos,d.setFilters=new ra,g=ga.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=Q.exec(h))||(e&&(h=h.slice(e[0].length)||h),i.push(f=[])),c=!1,(e=R.exec(h))&&(c=e.shift(),f.push({value:c,type:e[0].replace(P," ")}),h=h.slice(c.length));for(g in d.filter)!(e=V[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?ga.error(a):z(a,i).slice(0)};function sa(a){for(var b=0,c=a.length,d="";b<c;b++)d+=a[b].value;return d}function ta(a,b,c){var d=b.dir,e=b.next,f=e||d,g=c&&"parentNode"===f,h=x++;return b.first?function(b,c,e){while(b=b[d])if(1===b.nodeType||g)return a(b,c,e);return!1}:function(b,c,i){var j,k,l,m=[w,h];if(i){while(b=b[d])if((1===b.nodeType||g)&&a(b,c,i))return!0}else while(b=b[d])if(1===b.nodeType||g)if(l=b[u]||(b[u]={}),k=l[b.uniqueID]||(l[b.uniqueID]={}),e&&e===b.nodeName.toLowerCase())b=b[d]||b;else{if((j=k[f])&&j[0]===w&&j[1]===h)return m[2]=j[2];if(k[f]=m,m[2]=a(b,c,i))return!0}return!1}}function ua(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 va(a,b,c){for(var d=0,e=b.length;d<e;d++)ga(a,b[d],c);return c}function wa(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 xa(a,b,c,d,e,f){return d&&!d[u]&&(d=xa(d)),e&&!e[u]&&(e=xa(e,f)),ia(function(f,g,h,i){var j,k,l,m=[],n=[],o=g.length,p=f||va(b||"*",h.nodeType?[h]:h,[]),q=!a||!f&&b?p:wa(p,m,a,h,i),r=c?e||(f?a:o||d)?[]:g:q;if(c&&c(q,r,h,i),d){j=wa(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?I(f,l):m[k])>-1&&(f[j]=!(g[j]=l))}}else r=wa(r===g?r.splice(o,r.length):r),e?e(null,g,r,i):G.apply(g,r)})}function ya(a){for(var b,c,e,f=a.length,g=d.relative[a[0].type],h=g||d.relative[" "],i=g?1:0,k=ta(function(a){return a===b},h,!0),l=ta(function(a){return I(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=[ta(ua(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 xa(i>1&&ua(m),i>1&&sa(a.slice(0,i-1).concat({value:" "===a[i-2].type?"*":""})).replace(P,"$1"),c,i<e&&ya(a.slice(i,e)),e<f&&ya(a=a.slice(e)),e<f&&sa(a))}m.push(c)}return ua(m)}function za(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]=E.call(i));u=wa(u)}G.apply(i,u),k&&!f&&u.length>0&&r+b.length>1&&ga.uniqueSort(i)}return k&&(w=y,j=v),t};return c?ia(f):f}return h=ga.compile=function(a,b){var c,d=[],e=[],f=A[a+" "];if(!f){b||(b=g(a)),c=b.length;while(c--)f=ya(b[c]),f[u]?d.push(f):e.push(f);f=A(a,za(e,d)),f.selector=a}return f},i=ga.select=function(a,b,c,e){var f,i,j,k,l,m="function"==typeof a&&a,n=!e&&g(a=m.selector||a);if(c=c||[],1===n.length){if(i=n[0]=n[0].slice(0),i.length>2&&"ID"===(j=i[0]).type&&9===b.nodeType&&p&&d.relative[i[1].type]){if(b=(d.find.ID(j.matches[0].replace(_,aa),b)||[])[0],!b)return c;m&&(b=b.parentNode),a=a.slice(i.shift().value.length)}f=V.needsContext.test(a)?0:i.length;while(f--){if(j=i[f],d.relative[k=j.type])break;if((l=d.find[k])&&(e=l(j.matches[0].replace(_,aa),$.test(i[0].type)&&qa(b.parentNode)||b))){if(i.splice(f,1),a=e.length&&sa(i),!a)return G.apply(c,e),c;break}}}return(m||h(a,n))(e,b,!p,c,!b||$.test(a)&&qa(b.parentNode)||b),c},c.sortStable=u.split("").sort(B).join("")===u,c.detectDuplicates=!!l,m(),c.sortDetached=ja(function(a){return 1&a.compareDocumentPosition(n.createElement("fieldset"))}),ja(function(a){return a.innerHTML="<a href='#'></a>","#"===a.firstChild.getAttribute("href")})||ka("type|href|height|width",function(a,b,c){if(!c)return a.getAttribute(b,"type"===b.toLowerCase()?1:2)}),c.attributes&&ja(function(a){return a.innerHTML="<input/>",a.firstChild.setAttribute("value",""),""===a.firstChild.getAttribute("value")})||ka("value",function(a,b,c){if(!c&&"input"===a.nodeName.toLowerCase())return a.defaultValue}),ja(function(a){return null==a.getAttribute("disabled")})||ka(J,function(a,b,c){var d;if(!c)return a[b]===!0?b.toLowerCase():(d=a.getAttributeNode(b))&&d.specified?d.value:null}),ga}(a);r.find=x,r.expr=x.selectors,r.expr[":"]=r.expr.pseudos,r.uniqueSort=r.unique=x.uniqueSort,r.text=x.getText,r.isXMLDoc=x.isXML,r.contains=x.contains,r.escapeSelector=x.escape;var y=function(a,b,c){var d=[],e=void 0!==c;while((a=a[b])&&9!==a.nodeType)if(1===a.nodeType){if(e&&r(a).is(c))break;d.push(a)}return d},z=function(a,b){for(var c=[];a;a=a.nextSibling)1===a.nodeType&&a!==b&&c.push(a);return c},A=r.expr.match.needsContext;function B(a,b){return a.nodeName&&a.nodeName.toLowerCase()===b.toLowerCase()}var C=/^<([a-z][^\/\0>:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i,D=/^.[^:#\[\.,]*$/;function E(a,b,c){return r.isFunction(b)?r.grep(a,function(a,d){return!!b.call(a,d,a)!==c}):b.nodeType?r.grep(a,function(a){return a===b!==c}):"string"!=typeof b?r.grep(a,function(a){return i.call(b,a)>-1!==c}):D.test(b)?r.filter(b,a,c):(b=r.filter(b,a),r.grep(a,function(a){return i.call(b,a)>-1!==c&&1===a.nodeType}))}r.filter=function(a,b,c){var d=b[0];return c&&(a=":not("+a+")"),1===b.length&&1===d.nodeType?r.find.matchesSelector(d,a)?[d]:[]:r.find.matches(a,r.grep(b,function(a){return 1===a.nodeType}))},r.fn.extend({find:function(a){var b,c,d=this.length,e=this;if("string"!=typeof a)return this.pushStack(r(a).filter(function(){for(b=0;b<d;b++)if(r.contains(e[b],this))return!0}));for(c=this.pushStack([]),b=0;b<d;b++)r.find(a,e[b],c);return d>1?r.uniqueSort(c):c},filter:function(a){return this.pushStack(E(this,a||[],!1))},not:function(a){return this.pushStack(E(this,a||[],!0))},is:function(a){return!!E(this,"string"==typeof a&&A.test(a)?r(a):a||[],!1).length}});var F,G=/^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]+))$/,H=r.fn.init=function(a,b,c){var e,f;if(!a)return this;if(c=c||F,"string"==typeof a){if(e="<"===a[0]&&">"===a[a.length-1]&&a.length>=3?[null,a,null]:G.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 r?b[0]:b,r.merge(this,r.parseHTML(e[1],b&&b.nodeType?b.ownerDocument||b:d,!0)),C.test(e[1])&&r.isPlainObject(b))for(e in b)r.isFunction(this[e])?this[e](b[e]):this.attr(e,b[e]);return this}return f=d.getElementById(e[2]),f&&(this[0]=f,this.length=1),this}return a.nodeType?(this[0]=a,this.length=1,this):r.isFunction(a)?void 0!==c.ready?c.ready(a):a(r):r.makeArray(a,this)};H.prototype=r.fn,F=r(d);var I=/^(?:parents|prev(?:Until|All))/,J={children:!0,contents:!0,next:!0,prev:!0};r.fn.extend({has:function(a){var b=r(a,this),c=b.length;return this.filter(function(){for(var a=0;a<c;a++)if(r.contains(this,b[a]))return!0})},closest:function(a,b){var c,d=0,e=this.length,f=[],g="string"!=typeof a&&r(a);if(!A.test(a))for(;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&&r.find.matchesSelector(c,a))){f.push(c);break}return this.pushStack(f.length>1?r.uniqueSort(f):f)},index:function(a){return a?"string"==typeof a?i.call(r(a),this[0]):i.call(this,a.jquery?a[0]:a):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(a,b){return this.pushStack(r.uniqueSort(r.merge(this.get(),r(a,b))))},addBack:function(a){return this.add(null==a?this.prevObject:this.prevObject.filter(a))}});function K(a,b){while((a=a[b])&&1!==a.nodeType);return a}r.each({parent:function(a){var b=a.parentNode;return b&&11!==b.nodeType?b:null},parents:function(a){return y(a,"parentNode")},parentsUntil:function(a,b,c){return y(a,"parentNode",c)},next:function(a){return K(a,"nextSibling")},prev:function(a){return K(a,"previousSibling")},nextAll:function(a){return y(a,"nextSibling")},prevAll:function(a){return y(a,"previousSibling")},nextUntil:function(a,b,c){return y(a,"nextSibling",c)},prevUntil:function(a,b,c){return y(a,"previousSibling",c)},siblings:function(a){return z((a.parentNode||{}).firstChild,a)},children:function(a){return z(a.firstChild)},contents:function(a){return B(a,"iframe")?a.contentDocument:(B(a,"template")&&(a=a.content||a),r.merge([],a.childNodes))}},function(a,b){r.fn[a]=function(c,d){var e=r.map(this,b,c);return"Until"!==a.slice(-5)&&(d=c),d&&"string"==typeof d&&(e=r.filter(d,e)),this.length>1&&(J[a]||r.uniqueSort(e),I.test(a)&&e.reverse()),this.pushStack(e)}});var L=/[^\x20\t\r\n\f]+/g;function M(a){var b={};return r.each(a.match(L)||[],function(a,c){b[c]=!0}),b}r.Callbacks=function(a){a="string"==typeof a?M(a):r.extend({},a);var b,c,d,e,f=[],g=[],h=-1,i=function(){for(e=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){r.each(b,function(b,c){r.isFunction(c)?a.unique&&j.has(c)||f.push(c):c&&c.length&&"string"!==r.type(c)&&d(c)})}(arguments),c&&!b&&i()),this},remove:function(){return r.each(arguments,function(a,b){var c;while((c=r.inArray(b,f,c))>-1)f.splice(c,1),c<=h&&h--}),this},has:function(a){return a?r.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=g=[],c||b||(f=c=""),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};function N(a){return a}function O(a){throw a}function P(a,b,c,d){var e;try{a&&r.isFunction(e=a.promise)?e.call(a).done(b).fail(c):a&&r.isFunction(e=a.then)?e.call(a,b,c):b.apply(void 0,[a].slice(d))}catch(a){c.apply(void 0,[a])}}r.extend({Deferred:function(b){var c=[["notify","progress",r.Callbacks("memory"),r.Callbacks("memory"),2],["resolve","done",r.Callbacks("once memory"),r.Callbacks("once memory"),0,"resolved"],["reject","fail",r.Callbacks("once memory"),r.Callbacks("once memory"),1,"rejected"]],d="pending",e={state:function(){return d},always:function(){return f.done(arguments).fail(arguments),this},"catch":function(a){return e.then(null,a)},pipe:function(){var a=arguments;return r.Deferred(function(b){r.each(c,function(c,d){var e=r.isFunction(a[d[4]])&&a[d[4]];f[d[1]](function(){var a=e&&e.apply(this,arguments);a&&r.isFunction(a.promise)?a.promise().progress(b.notify).done(b.resolve).fail(b.reject):b[d[0]+"With"](this,e?[a]:arguments)})}),a=null}).promise()},then:function(b,d,e){var f=0;function g(b,c,d,e){return function(){var h=this,i=arguments,j=function(){var a,j;if(!(b<f)){if(a=d.apply(h,i),a===c.promise())throw new TypeError("Thenable self-resolution");j=a&&("object"==typeof a||"function"==typeof a)&&a.then,r.isFunction(j)?e?j.call(a,g(f,c,N,e),g(f,c,O,e)):(f++,j.call(a,g(f,c,N,e),g(f,c,O,e),g(f,c,N,c.notifyWith))):(d!==N&&(h=void 0,i=[a]),(e||c.resolveWith)(h,i))}},k=e?j:function(){try{j()}catch(a){r.Deferred.exceptionHook&&r.Deferred.exceptionHook(a,k.stackTrace),b+1>=f&&(d!==O&&(h=void 0,i=[a]),c.rejectWith(h,i))}};b?k():(r.Deferred.getStackHook&&(k.stackTrace=r.Deferred.getStackHook()),a.setTimeout(k))}}return r.Deferred(function(a){c[0][3].add(g(0,a,r.isFunction(e)?e:N,a.notifyWith)),c[1][3].add(g(0,a,r.isFunction(b)?b:N)),c[2][3].add(g(0,a,r.isFunction(d)?d:O))}).promise()},promise:function(a){return null!=a?r.extend(a,e):e}},f={};return r.each(c,function(a,b){var g=b[2],h=b[5];e[b[1]]=g.add,h&&g.add(function(){d=h},c[3-a][2].disable,c[0][2].lock),g.add(b[3].fire),f[b[0]]=function(){return f[b[0]+"With"](this===f?void 0:this,arguments),this},f[b[0]+"With"]=g.fireWith}),e.promise(f),b&&b.call(f,f),f},when:function(a){var b=arguments.length,c=b,d=Array(c),e=f.call(arguments),g=r.Deferred(),h=function(a){return function(c){d[a]=this,e[a]=arguments.length>1?f.call(arguments):c,--b||g.resolveWith(d,e)}};if(b<=1&&(P(a,g.done(h(c)).resolve,g.reject,!b),"pending"===g.state()||r.isFunction(e[c]&&e[c].then)))return g.then();while(c--)P(e[c],h(c),g.reject);return g.promise()}});var Q=/^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/;r.Deferred.exceptionHook=function(b,c){a.console&&a.console.warn&&b&&Q.test(b.name)&&a.console.warn("jQuery.Deferred exception: "+b.message,b.stack,c)},r.readyException=function(b){a.setTimeout(function(){throw b})};var R=r.Deferred();r.fn.ready=function(a){return R.then(a)["catch"](function(a){r.readyException(a)}),this},r.extend({isReady:!1,readyWait:1,ready:function(a){(a===!0?--r.readyWait:r.isReady)||(r.isReady=!0,a!==!0&&--r.readyWait>0||R.resolveWith(d,[r]))}}),r.ready.then=R.then;function S(){d.removeEventListener("DOMContentLoaded",S),
+a.removeEventListener("load",S),r.ready()}"complete"===d.readyState||"loading"!==d.readyState&&!d.documentElement.doScroll?a.setTimeout(r.ready):(d.addEventListener("DOMContentLoaded",S),a.addEventListener("load",S));var T=function(a,b,c,d,e,f,g){var h=0,i=a.length,j=null==c;if("object"===r.type(c)){e=!0;for(h in c)T(a,b,h,c[h],!0,f,g)}else if(void 0!==d&&(e=!0,r.isFunction(d)||(g=!0),j&&(g?(b.call(a,d),b=null):(j=b,b=function(a,b,c){return j.call(r(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},U=function(a){return 1===a.nodeType||9===a.nodeType||!+a.nodeType};function V(){this.expando=r.expando+V.uid++}V.uid=1,V.prototype={cache:function(a){var b=a[this.expando];return b||(b={},U(a)&&(a.nodeType?a[this.expando]=b:Object.defineProperty(a,this.expando,{value:b,configurable:!0}))),b},set:function(a,b,c){var d,e=this.cache(a);if("string"==typeof b)e[r.camelCase(b)]=c;else for(d in b)e[r.camelCase(d)]=b[d];return e},get:function(a,b){return void 0===b?this.cache(a):a[this.expando]&&a[this.expando][r.camelCase(b)]},access:function(a,b,c){return void 0===b||b&&"string"==typeof b&&void 0===c?this.get(a,b):(this.set(a,b,c),void 0!==c?c:b)},remove:function(a,b){var c,d=a[this.expando];if(void 0!==d){if(void 0!==b){Array.isArray(b)?b=b.map(r.camelCase):(b=r.camelCase(b),b=b in d?[b]:b.match(L)||[]),c=b.length;while(c--)delete d[b[c]]}(void 0===b||r.isEmptyObject(d))&&(a.nodeType?a[this.expando]=void 0:delete a[this.expando])}},hasData:function(a){var b=a[this.expando];return void 0!==b&&!r.isEmptyObject(b)}};var W=new V,X=new V,Y=/^(?:\{[\w\W]*\}|\[[\w\W]*\])$/,Z=/[A-Z]/g;function $(a){return"true"===a||"false"!==a&&("null"===a?null:a===+a+""?+a:Y.test(a)?JSON.parse(a):a)}function _(a,b,c){var d;if(void 0===c&&1===a.nodeType)if(d="data-"+b.replace(Z,"-$&").toLowerCase(),c=a.getAttribute(d),"string"==typeof c){try{c=$(c)}catch(e){}X.set(a,b,c)}else c=void 0;return c}r.extend({hasData:function(a){return X.hasData(a)||W.hasData(a)},data:function(a,b,c){return X.access(a,b,c)},removeData:function(a,b){X.remove(a,b)},_data:function(a,b,c){return W.access(a,b,c)},_removeData:function(a,b){W.remove(a,b)}}),r.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=X.get(f),1===f.nodeType&&!W.get(f,"hasDataAttrs"))){c=g.length;while(c--)g[c]&&(d=g[c].name,0===d.indexOf("data-")&&(d=r.camelCase(d.slice(5)),_(f,d,e[d])));W.set(f,"hasDataAttrs",!0)}return e}return"object"==typeof a?this.each(function(){X.set(this,a)}):T(this,function(b){var c;if(f&&void 0===b){if(c=X.get(f,a),void 0!==c)return c;if(c=_(f,a),void 0!==c)return c}else this.each(function(){X.set(this,a,b)})},null,b,arguments.length>1,null,!0)},removeData:function(a){return this.each(function(){X.remove(this,a)})}}),r.extend({queue:function(a,b,c){var d;if(a)return b=(b||"fx")+"queue",d=W.get(a,b),c&&(!d||Array.isArray(c)?d=W.access(a,b,r.makeArray(c)):d.push(c)),d||[]},dequeue:function(a,b){b=b||"fx";var c=r.queue(a,b),d=c.length,e=c.shift(),f=r._queueHooks(a,b),g=function(){r.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 W.get(a,c)||W.access(a,c,{empty:r.Callbacks("once memory").add(function(){W.remove(a,[b+"queue",c])})})}}),r.fn.extend({queue:function(a,b){var c=2;return"string"!=typeof a&&(b=a,a="fx",c--),arguments.length<c?r.queue(this[0],a):void 0===b?this:this.each(function(){var c=r.queue(this,a,b);r._queueHooks(this,a),"fx"===a&&"inprogress"!==c[0]&&r.dequeue(this,a)})},dequeue:function(a){return this.each(function(){r.dequeue(this,a)})},clearQueue:function(a){return this.queue(a||"fx",[])},promise:function(a,b){var c,d=1,e=r.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=W.get(f[g],a+"queueHooks"),c&&c.empty&&(d++,c.empty.add(h));return h(),e.promise(b)}});var aa=/[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/.source,ba=new RegExp("^(?:([+-])=|)("+aa+")([a-z%]*)$","i"),ca=["Top","Right","Bottom","Left"],da=function(a,b){return a=b||a,"none"===a.style.display||""===a.style.display&&r.contains(a.ownerDocument,a)&&"none"===r.css(a,"display")},ea=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};function fa(a,b,c,d){var e,f=1,g=20,h=d?function(){return d.cur()}:function(){return r.css(a,b,"")},i=h(),j=c&&c[3]||(r.cssNumber[b]?"":"px"),k=(r.cssNumber[b]||"px"!==j&&+i)&&ba.exec(r.css(a,b));if(k&&k[3]!==j){j=j||k[3],c=c||[],k=+i||1;do f=f||".5",k/=f,r.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 ga={};function ha(a){var b,c=a.ownerDocument,d=a.nodeName,e=ga[d];return e?e:(b=c.body.appendChild(c.createElement(d)),e=r.css(b,"display"),b.parentNode.removeChild(b),"none"===e&&(e="block"),ga[d]=e,e)}function ia(a,b){for(var c,d,e=[],f=0,g=a.length;f<g;f++)d=a[f],d.style&&(c=d.style.display,b?("none"===c&&(e[f]=W.get(d,"display")||null,e[f]||(d.style.display="")),""===d.style.display&&da(d)&&(e[f]=ha(d))):"none"!==c&&(e[f]="none",W.set(d,"display",c)));for(f=0;f<g;f++)null!=e[f]&&(a[f].style.display=e[f]);return a}r.fn.extend({show:function(){return ia(this,!0)},hide:function(){return ia(this)},toggle:function(a){return"boolean"==typeof a?a?this.show():this.hide():this.each(function(){da(this)?r(this).show():r(this).hide()})}});var ja=/^(?:checkbox|radio)$/i,ka=/<([a-z][^\/\0>\x20\t\r\n\f]+)/i,la=/^$|\/(?:java|ecma)script/i,ma={option:[1,"<select multiple='multiple'>","</select>"],thead:[1,"<table>","</table>"],col:[2,"<table><colgroup>","</colgroup></table>"],tr:[2,"<table><tbody>","</tbody></table>"],td:[3,"<table><tbody><tr>","</tr></tbody></table>"],_default:[0,"",""]};ma.optgroup=ma.option,ma.tbody=ma.tfoot=ma.colgroup=ma.caption=ma.thead,ma.th=ma.td;function na(a,b){var c;return c="undefined"!=typeof a.getElementsByTagName?a.getElementsByTagName(b||"*"):"undefined"!=typeof a.querySelectorAll?a.querySelectorAll(b||"*"):[],void 0===b||b&&B(a,b)?r.merge([a],c):c}function oa(a,b){for(var c=0,d=a.length;c<d;c++)W.set(a[c],"globalEval",!b||W.get(b[c],"globalEval"))}var pa=/<|&#?\w+;/;function qa(a,b,c,d,e){for(var f,g,h,i,j,k,l=b.createDocumentFragment(),m=[],n=0,o=a.length;n<o;n++)if(f=a[n],f||0===f)if("object"===r.type(f))r.merge(m,f.nodeType?[f]:f);else if(pa.test(f)){g=g||l.appendChild(b.createElement("div")),h=(ka.exec(f)||["",""])[1].toLowerCase(),i=ma[h]||ma._default,g.innerHTML=i[1]+r.htmlPrefilter(f)+i[2],k=i[0];while(k--)g=g.lastChild;r.merge(m,g.childNodes),g=l.firstChild,g.textContent=""}else m.push(b.createTextNode(f));l.textContent="",n=0;while(f=m[n++])if(d&&r.inArray(f,d)>-1)e&&e.push(f);else if(j=r.contains(f.ownerDocument,f),g=na(l.appendChild(f),"script"),j&&oa(g),c){k=0;while(f=g[k++])la.test(f.type||"")&&c.push(f)}return l}!function(){var a=d.createDocumentFragment(),b=a.appendChild(d.createElement("div")),c=d.createElement("input");c.setAttribute("type","radio"),c.setAttribute("checked","checked"),c.setAttribute("name","t"),b.appendChild(c),o.checkClone=b.cloneNode(!0).cloneNode(!0).lastChild.checked,b.innerHTML="<textarea>x</textarea>",o.noCloneChecked=!!b.cloneNode(!0).lastChild.defaultValue}();var ra=d.documentElement,sa=/^key/,ta=/^(?:mouse|pointer|contextmenu|drag|drop)|click/,ua=/^([^.]*)(?:\.(.+)|)/;function va(){return!0}function wa(){return!1}function xa(){try{return d.activeElement}catch(a){}}function ya(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)ya(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=wa;else if(!e)return a;return 1===f&&(g=e,e=function(a){return r().off(a),g.apply(this,arguments)},e.guid=g.guid||(g.guid=r.guid++)),a.each(function(){r.event.add(this,b,e,d,c)})}r.event={global:{},add:function(a,b,c,d,e){var f,g,h,i,j,k,l,m,n,o,p,q=W.get(a);if(q){c.handler&&(f=c,c=f.handler,e=f.selector),e&&r.find.matchesSelector(ra,e),c.guid||(c.guid=r.guid++),(i=q.events)||(i=q.events={}),(g=q.handle)||(g=q.handle=function(b){return"undefined"!=typeof r&&r.event.triggered!==b.type?r.event.dispatch.apply(a,arguments):void 0}),b=(b||"").match(L)||[""],j=b.length;while(j--)h=ua.exec(b[j])||[],n=p=h[1],o=(h[2]||"").split(".").sort(),n&&(l=r.event.special[n]||{},n=(e?l.delegateType:l.bindType)||n,l=r.event.special[n]||{},k=r.extend({type:n,origType:p,data:d,handler:c,guid:c.guid,selector:e,needsContext:e&&r.expr.match.needsContext.test(e),namespace:o.join(".")},f),(m=i[n])||(m=i[n]=[],m.delegateCount=0,l.setup&&l.setup.call(a,d,o,g)!==!1||a.addEventListener&&a.addEventListener(n,g)),l.add&&(l.add.call(a,k),k.handler.guid||(k.handler.guid=c.guid)),e?m.splice(m.delegateCount++,0,k):m.push(k),r.event.global[n]=!0)}},remove:function(a,b,c,d,e){var f,g,h,i,j,k,l,m,n,o,p,q=W.hasData(a)&&W.get(a);if(q&&(i=q.events)){b=(b||"").match(L)||[""],j=b.length;while(j--)if(h=ua.exec(b[j])||[],n=p=h[1],o=(h[2]||"").split(".").sort(),n){l=r.event.special[n]||{},n=(d?l.delegateType:l.bindType)||n,m=i[n]||[],h=h[2]&&new RegExp("(^|\\.)"+o.join("\\.(?:.*\\.|)")+"(\\.|$)"),g=f=m.length;while(f--)k=m[f],!e&&p!==k.origType||c&&c.guid!==k.guid||h&&!h.test(k.namespace)||d&&d!==k.selector&&("**"!==d||!k.selector)||(m.splice(f,1),k.selector&&m.delegateCount--,l.remove&&l.remove.call(a,k));g&&!m.length&&(l.teardown&&l.teardown.call(a,o,q.handle)!==!1||r.removeEvent(a,n,q.handle),delete i[n])}else for(n in i)r.event.remove(a,n+b[j],c,d,!0);r.isEmptyObject(i)&&W.remove(a,"handle events")}},dispatch:function(a){var b=r.event.fix(a),c,d,e,f,g,h,i=new Array(arguments.length),j=(W.get(this,"events")||{})[b.type]||[],k=r.event.special[b.type]||{};for(i[0]=b,c=1;c<arguments.length;c++)i[c]=arguments[c];if(b.delegateTarget=this,!k.preDispatch||k.preDispatch.call(this,b)!==!1){h=r.event.handlers.call(this,b,j),c=0;while((f=h[c++])&&!b.isPropagationStopped()){b.currentTarget=f.elem,d=0;while((g=f.handlers[d++])&&!b.isImmediatePropagationStopped())b.rnamespace&&!b.rnamespace.test(g.namespace)||(b.handleObj=g,b.data=g.data,e=((r.event.special[g.origType]||{}).handle||g.handler).apply(f.elem,i),void 0!==e&&(b.result=e)===!1&&(b.preventDefault(),b.stopPropagation()))}return k.postDispatch&&k.postDispatch.call(this,b),b.result}},handlers:function(a,b){var c,d,e,f,g,h=[],i=b.delegateCount,j=a.target;if(i&&j.nodeType&&!("click"===a.type&&a.button>=1))for(;j!==this;j=j.parentNode||this)if(1===j.nodeType&&("click"!==a.type||j.disabled!==!0)){for(f=[],g={},c=0;c<i;c++)d=b[c],e=d.selector+" ",void 0===g[e]&&(g[e]=d.needsContext?r(e,this).index(j)>-1:r.find(e,this,null,[j]).length),g[e]&&f.push(d);f.length&&h.push({elem:j,handlers:f})}return j=this,i<b.length&&h.push({elem:j,handlers:b.slice(i)}),h},addProp:function(a,b){Object.defineProperty(r.Event.prototype,a,{enumerable:!0,configurable:!0,get:r.isFunction(b)?function(){if(this.originalEvent)return b(this.originalEvent)}:function(){if(this.originalEvent)return this.originalEvent[a]},set:function(b){Object.defineProperty(this,a,{enumerable:!0,configurable:!0,writable:!0,value:b})}})},fix:function(a){return a[r.expando]?a:new r.Event(a)},special:{load:{noBubble:!0},focus:{trigger:function(){if(this!==xa()&&this.focus)return this.focus(),!1},delegateType:"focusin"},blur:{trigger:function(){if(this===xa()&&this.blur)return this.blur(),!1},delegateType:"focusout"},click:{trigger:function(){if(ja.test(this.type)&&this.click&&B(this,"input"))return this.click(),!1},_default:function(a){return B(a.target,"a")}},beforeunload:{postDispatch:function(a){void 0!==a.result&&a.originalEvent&&(a.originalEvent.returnValue=a.result)}}}},r.removeEvent=function(a,b,c){a.removeEventListener&&a.removeEventListener(b,c)},r.Event=function(a,b){return this instanceof r.Event?(a&&a.type?(this.originalEvent=a,this.type=a.type,this.isDefaultPrevented=a.defaultPrevented||void 0===a.defaultPrevented&&a.returnValue===!1?va:wa,this.target=a.target&&3===a.target.nodeType?a.target.parentNode:a.target,this.currentTarget=a.currentTarget,this.relatedTarget=a.relatedTarget):this.type=a,b&&r.extend(this,b),this.timeStamp=a&&a.timeStamp||r.now(),void(this[r.expando]=!0)):new r.Event(a,b)},r.Event.prototype={constructor:r.Event,isDefaultPrevented:wa,isPropagationStopped:wa,isImmediatePropagationStopped:wa,isSimulated:!1,preventDefault:function(){var a=this.originalEvent;this.isDefaultPrevented=va,a&&!this.isSimulated&&a.preventDefault()},stopPropagation:function(){var a=this.originalEvent;this.isPropagationStopped=va,a&&!this.isSimulated&&a.stopPropagation()},stopImmediatePropagation:function(){var a=this.originalEvent;this.isImmediatePropagationStopped=va,a&&!this.isSimulated&&a.stopImmediatePropagation(),this.stopPropagation()}},r.each({altKey:!0,bubbles:!0,cancelable:!0,changedTouches:!0,ctrlKey:!0,detail:!0,eventPhase:!0,metaKey:!0,pageX:!0,pageY:!0,shiftKey:!0,view:!0,"char":!0,charCode:!0,key:!0,keyCode:!0,button:!0,buttons:!0,clientX:!0,clientY:!0,offsetX:!0,offsetY:!0,pointerId:!0,pointerType:!0,screenX:!0,screenY:!0,targetTouches:!0,toElement:!0,touches:!0,which:function(a){var b=a.button;return null==a.which&&sa.test(a.type)?null!=a.charCode?a.charCode:a.keyCode:!a.which&&void 0!==b&&ta.test(a.type)?1&b?1:2&b?3:4&b?2:0:a.which}},r.event.addProp),r.each({mouseenter:"mouseover",mouseleave:"mouseout",pointerenter:"pointerover",pointerleave:"pointerout"},function(a,b){r.event.special[a]={delegateType:b,bindType:b,handle:function(a){var c,d=this,e=a.relatedTarget,f=a.handleObj;return e&&(e===d||r.contains(d,e))||(a.type=f.origType,c=f.handler.apply(this,arguments),a.type=b),c}}}),r.fn.extend({on:function(a,b,c,d){return ya(this,a,b,c,d)},one:function(a,b,c,d){return ya(this,a,b,c,d,1)},off:function(a,b,c){var d,e;if(a&&a.preventDefault&&a.handleObj)return d=a.handleObj,r(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=wa),this.each(function(){r.event.remove(this,a,c,b)})}});var za=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([a-z][^\/\0>\x20\t\r\n\f]*)[^>]*)\/>/gi,Aa=/<script|<style|<link/i,Ba=/checked\s*(?:[^=]|=\s*.checked.)/i,Ca=/^true\/(.*)/,Da=/^\s*<!(?:\[CDATA\[|--)|(?:\]\]|--)>\s*$/g;function Ea(a,b){return B(a,"table")&&B(11!==b.nodeType?b:b.firstChild,"tr")?r(">tbody",a)[0]||a:a}function Fa(a){return a.type=(null!==a.getAttribute("type"))+"/"+a.type,a}function Ga(a){var b=Ca.exec(a.type);return b?a.type=b[1]:a.removeAttribute("type"),a}function Ha(a,b){var c,d,e,f,g,h,i,j;if(1===b.nodeType){if(W.hasData(a)&&(f=W.access(a),g=W.set(b,f),j=f.events)){delete g.handle,g.events={};for(e in j)for(c=0,d=j[e].length;c<d;c++)r.event.add(b,e,j[e][c])}X.hasData(a)&&(h=X.access(a),i=r.extend({},h),X.set(b,i))}}function Ia(a,b){var c=b.nodeName.toLowerCase();"input"===c&&ja.test(a.type)?b.checked=a.checked:"input"!==c&&"textarea"!==c||(b.defaultValue=a.defaultValue)}function Ja(a,b,c,d){b=g.apply([],b);var e,f,h,i,j,k,l=0,m=a.length,n=m-1,q=b[0],s=r.isFunction(q);if(s||m>1&&"string"==typeof q&&!o.checkClone&&Ba.test(q))return a.each(function(e){var f=a.eq(e);s&&(b[0]=q.call(this,e,f.html())),Ja(f,b,c,d)});if(m&&(e=qa(b,a[0].ownerDocument,!1,a,d),f=e.firstChild,1===e.childNodes.length&&(e=f),f||d)){for(h=r.map(na(e,"script"),Fa),i=h.length;l<m;l++)j=e,l!==n&&(j=r.clone(j,!0,!0),i&&r.merge(h,na(j,"script"))),c.call(a[l],j,l);if(i)for(k=h[h.length-1].ownerDocument,r.map(h,Ga),l=0;l<i;l++)j=h[l],la.test(j.type||"")&&!W.access(j,"globalEval")&&r.contains(k,j)&&(j.src?r._evalUrl&&r._evalUrl(j.src):p(j.textContent.replace(Da,""),k))}return a}function Ka(a,b,c){for(var d,e=b?r.filter(b,a):a,f=0;null!=(d=e[f]);f++)c||1!==d.nodeType||r.cleanData(na(d)),d.parentNode&&(c&&r.contains(d.ownerDocument,d)&&oa(na(d,"script")),d.parentNode.removeChild(d));return a}r.extend({htmlPrefilter:function(a){return a.replace(za,"<$1></$2>")},clone:function(a,b,c){var d,e,f,g,h=a.cloneNode(!0),i=r.contains(a.ownerDocument,a);if(!(o.noCloneChecked||1!==a.nodeType&&11!==a.nodeType||r.isXMLDoc(a)))for(g=na(h),f=na(a),d=0,e=f.length;d<e;d++)Ia(f[d],g[d]);if(b)if(c)for(f=f||na(a),g=g||na(h),d=0,e=f.length;d<e;d++)Ha(f[d],g[d]);else Ha(a,h);return g=na(h,"script"),g.length>0&&oa(g,!i&&na(a,"script")),h},cleanData:function(a){for(var b,c,d,e=r.event.special,f=0;void 0!==(c=a[f]);f++)if(U(c)){if(b=c[W.expando]){if(b.events)for(d in b.events)e[d]?r.event.remove(c,d):r.removeEvent(c,d,b.handle);c[W.expando]=void 0}c[X.expando]&&(c[X.expando]=void 0)}}}),r.fn.extend({detach:function(a){return Ka(this,a,!0)},remove:function(a){return Ka(this,a)},text:function(a){return T(this,function(a){return void 0===a?r.text(this):this.empty().each(function(){1!==this.nodeType&&11!==this.nodeType&&9!==this.nodeType||(this.textContent=a)})},null,a,arguments.length)},append:function(){return Ja(this,arguments,function(a){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var b=Ea(this,a);b.appendChild(a)}})},prepend:function(){return Ja(this,arguments,function(a){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var b=Ea(this,a);b.insertBefore(a,b.firstChild)}})},before:function(){return Ja(this,arguments,function(a){this.parentNode&&this.parentNode.insertBefore(a,this)})},after:function(){return Ja(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&&(r.cleanData(na(a,!1)),a.textContent="");return this},clone:function(a,b){return a=null!=a&&a,b=null==b?a:b,this.map(function(){return r.clone(this,a,b)})},html:function(a){return T(this,function(a){var b=this[0]||{},c=0,d=this.length;if(void 0===a&&1===b.nodeType)return b.innerHTML;if("string"==typeof a&&!Aa.test(a)&&!ma[(ka.exec(a)||["",""])[1].toLowerCase()]){a=r.htmlPrefilter(a);try{for(;c<d;c++)b=this[c]||{},1===b.nodeType&&(r.cleanData(na(b,!1)),b.innerHTML=a);b=0}catch(e){}}b&&this.empty().append(a)},null,a,arguments.length)},replaceWith:function(){var a=[];return Ja(this,arguments,function(b){var c=this.parentNode;r.inArray(this,a)<0&&(r.cleanData(na(this)),c&&c.replaceChild(b,this))},a)}}),r.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(a,b){r.fn[a]=function(a){for(var c,d=[],e=r(a),f=e.length-1,g=0;g<=f;g++)c=g===f?this:this.clone(!0),r(e[g])[b](c),h.apply(d,c.get());return this.pushStack(d)}});var La=/^margin/,Ma=new RegExp("^("+aa+")(?!px)[a-z%]+$","i"),Na=function(b){var c=b.ownerDocument.defaultView;return c&&c.opener||(c=a),c.getComputedStyle(b)};!function(){function b(){if(i){i.style.cssText="box-sizing:border-box;position:relative;display:block;margin:auto;border:1px;padding:1px;top:1%;width:50%",i.innerHTML="",ra.appendChild(h);var b=a.getComputedStyle(i);c="1%"!==b.top,g="2px"===b.marginLeft,e="4px"===b.width,i.style.marginRight="50%",f="4px"===b.marginRight,ra.removeChild(h),i=null}}var c,e,f,g,h=d.createElement("div"),i=d.createElement("div");i.style&&(i.style.backgroundClip="content-box",i.cloneNode(!0).style.backgroundClip="",o.clearCloneStyle="content-box"===i.style.backgroundClip,h.style.cssText="border:0;width:8px;height:0;top:0;left:-9999px;padding:0;margin-top:1px;position:absolute",h.appendChild(i),r.extend(o,{pixelPosition:function(){return b(),c},boxSizingReliable:function(){return b(),e},pixelMarginRight:function(){return b(),f},reliableMarginLeft:function(){return b(),g}}))}();function Oa(a,b,c){var d,e,f,g,h=a.style;return c=c||Na(a),c&&(g=c.getPropertyValue(b)||c[b],""!==g||r.contains(a.ownerDocument,a)||(g=r.style(a,b)),!o.pixelMarginRight()&&Ma.test(g)&&La.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}function Pa(a,b){return{get:function(){return a()?void delete this.get:(this.get=b).apply(this,arguments)}}}var Qa=/^(none|table(?!-c[ea]).+)/,Ra=/^--/,Sa={position:"absolute",visibility:"hidden",display:"block"},Ta={letterSpacing:"0",fontWeight:"400"},Ua=["Webkit","Moz","ms"],Va=d.createElement("div").style;function Wa(a){if(a in Va)return a;var b=a[0].toUpperCase()+a.slice(1),c=Ua.length;while(c--)if(a=Ua[c]+b,a in Va)return a}function Xa(a){var b=r.cssProps[a];return b||(b=r.cssProps[a]=Wa(a)||a),b}function Ya(a,b,c){var d=ba.exec(b);return d?Math.max(0,d[2]-(c||0))+(d[3]||"px"):b}function Za(a,b,c,d,e){var f,g=0;for(f=c===(d?"border":"content")?4:"width"===b?1:0;f<4;f+=2)"margin"===c&&(g+=r.css(a,c+ca[f],!0,e)),d?("content"===c&&(g-=r.css(a,"padding"+ca[f],!0,e)),"margin"!==c&&(g-=r.css(a,"border"+ca[f]+"Width",!0,e))):(g+=r.css(a,"padding"+ca[f],!0,e),"padding"!==c&&(g+=r.css(a,"border"+ca[f]+"Width",!0,e)));return g}function $a(a,b,c){var d,e=Na(a),f=Oa(a,b,e),g="border-box"===r.css(a,"boxSizing",!1,e);return Ma.test(f)?f:(d=g&&(o.boxSizingReliable()||f===a.style[b]),f=parseFloat(f)||0,f+Za(a,b,c||(g?"border":"content"),d,e)+"px")}r.extend({cssHooks:{opacity:{get:function(a,b){if(b){var c=Oa(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":"cssFloat"},style:function(a,b,c,d){if(a&&3!==a.nodeType&&8!==a.nodeType&&a.style){var e,f,g,h=r.camelCase(b),i=Ra.test(b),j=a.style;return i||(b=Xa(h)),g=r.cssHooks[b]||r.cssHooks[h],void 0===c?g&&"get"in g&&void 0!==(e=g.get(a,!1,d))?e:j[b]:(f=typeof c,"string"===f&&(e=ba.exec(c))&&e[1]&&(c=fa(a,b,e),f="number"),null!=c&&c===c&&("number"===f&&(c+=e&&e[3]||(r.cssNumber[h]?"":"px")),o.clearCloneStyle||""!==c||0!==b.indexOf("background")||(j[b]="inherit"),g&&"set"in g&&void 0===(c=g.set(a,c,d))||(i?j.setProperty(b,c):j[b]=c)),void 0)}},css:function(a,b,c,d){var e,f,g,h=r.camelCase(b),i=Ra.test(b);return i||(b=Xa(h)),g=r.cssHooks[b]||r.cssHooks[h],g&&"get"in g&&(e=g.get(a,!0,c)),void 0===e&&(e=Oa(a,b,d)),"normal"===e&&b in Ta&&(e=Ta[b]),""===c||c?(f=parseFloat(e),c===!0||isFinite(f)?f||0:e):e}}),r.each(["height","width"],function(a,b){r.cssHooks[b]={get:function(a,c,d){if(c)return!Qa.test(r.css(a,"display"))||a.getClientRects().length&&a.getBoundingClientRect().width?$a(a,b,d):ea(a,Sa,function(){return $a(a,b,d)})},set:function(a,c,d){var e,f=d&&Na(a),g=d&&Za(a,b,d,"border-box"===r.css(a,"boxSizing",!1,f),f);return g&&(e=ba.exec(c))&&"px"!==(e[3]||"px")&&(a.style[b]=c,c=r.css(a,b)),Ya(a,c,g)}}}),r.cssHooks.marginLeft=Pa(o.reliableMarginLeft,function(a,b){if(b)return(parseFloat(Oa(a,"marginLeft"))||a.getBoundingClientRect().left-ea(a,{marginLeft:0},function(){return a.getBoundingClientRect().left}))+"px"}),r.each({margin:"",padding:"",border:"Width"},function(a,b){r.cssHooks[a+b]={expand:function(c){for(var d=0,e={},f="string"==typeof c?c.split(" "):[c];d<4;d++)e[a+ca[d]+b]=f[d]||f[d-2]||f[0];return e}},La.test(a)||(r.cssHooks[a+b].set=Ya)}),r.fn.extend({css:function(a,b){return T(this,function(a,b,c){var d,e,f={},g=0;if(Array.isArray(b)){for(d=Na(a),e=b.length;g<e;g++)f[b[g]]=r.css(a,b[g],!1,d);return f}return void 0!==c?r.style(a,b,c):r.css(a,b)},a,b,arguments.length>1)}});function _a(a,b,c,d,e){return new _a.prototype.init(a,b,c,d,e)}r.Tween=_a,_a.prototype={constructor:_a,init:function(a,b,c,d,e,f){this.elem=a,this.prop=c,this.easing=e||r.easing._default,this.options=b,this.start=this.now=this.cur(),this.end=d,this.unit=f||(r.cssNumber[c]?"":"px")},cur:function(){var a=_a.propHooks[this.prop];return a&&a.get?a.get(this):_a.propHooks._default.get(this)},run:function(a){var b,c=_a.propHooks[this.prop];return this.options.duration?this.pos=b=r.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):_a.propHooks._default.set(this),this}},_a.prototype.init.prototype=_a.prototype,_a.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=r.css(a.elem,a.prop,""),b&&"auto"!==b?b:0)},set:function(a){r.fx.step[a.prop]?r.fx.step[a.prop](a):1!==a.elem.nodeType||null==a.elem.style[r.cssProps[a.prop]]&&!r.cssHooks[a.prop]?a.elem[a.prop]=a.now:r.style(a.elem,a.prop,a.now+a.unit)}}},_a.propHooks.scrollTop=_a.propHooks.scrollLeft={set:function(a){a.elem.nodeType&&a.elem.parentNode&&(a.elem[a.prop]=a.now)}},r.easing={linear:function(a){return a},swing:function(a){return.5-Math.cos(a*Math.PI)/2},_default:"swing"},r.fx=_a.prototype.init,r.fx.step={};var ab,bb,cb=/^(?:toggle|show|hide)$/,db=/queueHooks$/;function eb(){bb&&(d.hidden===!1&&a.requestAnimationFrame?a.requestAnimationFrame(eb):a.setTimeout(eb,r.fx.interval),r.fx.tick())}function fb(){return a.setTimeout(function(){ab=void 0}),ab=r.now()}function gb(a,b){var c,d=0,e={height:a};for(b=b?1:0;d<4;d+=2-b)c=ca[d],e["margin"+c]=e["padding"+c]=a;return b&&(e.opacity=e.width=a),e}function hb(a,b,c){for(var d,e=(kb.tweeners[b]||[]).concat(kb.tweeners["*"]),f=0,g=e.length;f<g;f++)if(d=e[f].call(c,b,a))return d}function ib(a,b,c){var d,e,f,g,h,i,j,k,l="width"in b||"height"in b,m=this,n={},o=a.style,p=a.nodeType&&da(a),q=W.get(a,"fxshow");c.queue||(g=r._queueHooks(a,"fx"),null==g.unqueued&&(g.unqueued=0,h=g.empty.fire,g.empty.fire=function(){g.unqueued||h()}),g.unqueued++,m.always(function(){m.always(function(){g.unqueued--,r.queue(a,"fx").length||g.empty.fire()})}));for(d in b)if(e=b[d],cb.test(e)){if(delete b[d],f=f||"toggle"===e,e===(p?"hide":"show")){if("show"!==e||!q||void 0===q[d])continue;p=!0}n[d]=q&&q[d]||r.style(a,d)}if(i=!r.isEmptyObject(b),i||!r.isEmptyObject(n)){l&&1===a.nodeType&&(c.overflow=[o.overflow,o.overflowX,o.overflowY],j=q&&q.display,null==j&&(j=W.get(a,"display")),k=r.css(a,"display"),"none"===k&&(j?k=j:(ia([a],!0),j=a.style.display||j,k=r.css(a,"display"),ia([a]))),("inline"===k||"inline-block"===k&&null!=j)&&"none"===r.css(a,"float")&&(i||(m.done(function(){o.display=j}),null==j&&(k=o.display,j="none"===k?"":k)),o.display="inline-block")),c.overflow&&(o.overflow="hidden",m.always(function(){o.overflow=c.overflow[0],o.overflowX=c.overflow[1],o.overflowY=c.overflow[2]})),i=!1;for(d in n)i||(q?"hidden"in q&&(p=q.hidden):q=W.access(a,"fxshow",{display:j}),f&&(q.hidden=!p),p&&ia([a],!0),m.done(function(){p||ia([a]),W.remove(a,"fxshow");for(d in n)r.style(a,d,n[d])})),i=hb(p?q[d]:0,d,m),d in q||(q[d]=i.start,p&&(i.end=i.start,i.start=0))}}function jb(a,b){var c,d,e,f,g;for(c in a)if(d=r.camelCase(c),e=b[d],f=a[c],Array.isArray(f)&&(e=f[1],f=a[c]=f[0]),c!==d&&(a[d]=f,delete a[c]),g=r.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 kb(a,b,c){var d,e,f=0,g=kb.prefilters.length,h=r.Deferred().always(function(){delete i.elem}),i=function(){if(e)return!1;for(var b=ab||fb(),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:(i||h.notifyWith(a,[j,1,0]),h.resolveWith(a,[j]),!1)},j=h.promise({elem:a,props:r.extend({},b),opts:r.extend(!0,{specialEasing:{},easing:r.easing._default},c),originalProperties:b,originalOptions:c,startTime:ab||fb(),duration:c.duration,tweens:[],createTween:function(b,c){var d=r.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(jb(k,j.opts.specialEasing);f<g;f++)if(d=kb.prefilters[f].call(j,a,k,j.opts))return r.isFunction(d.stop)&&(r._queueHooks(j.elem,j.opts.queue).stop=r.proxy(d.stop,d)),d;return r.map(k,hb,j),r.isFunction(j.opts.start)&&j.opts.start.call(a,j),j.progress(j.opts.progress).done(j.opts.done,j.opts.complete).fail(j.opts.fail).always(j.opts.always),r.fx.timer(r.extend(i,{elem:a,anim:j,queue:j.opts.queue})),j}r.Animation=r.extend(kb,{tweeners:{"*":[function(a,b){var c=this.createTween(a,b);return fa(c.elem,a,ba.exec(b),c),c}]},tweener:function(a,b){r.isFunction(a)?(b=a,a=["*"]):a=a.match(L);for(var c,d=0,e=a.length;d<e;d++)c=a[d],kb.tweeners[c]=kb.tweeners[c]||[],kb.tweeners[c].unshift(b)},prefilters:[ib],prefilter:function(a,b){b?kb.prefilters.unshift(a):kb.prefilters.push(a)}}),r.speed=function(a,b,c){var d=a&&"object"==typeof a?r.extend({},a):{complete:c||!c&&b||r.isFunction(a)&&a,duration:a,easing:c&&b||b&&!r.isFunction(b)&&b};return r.fx.off?d.duration=0:"number"!=typeof d.duration&&(d.duration in r.fx.speeds?d.duration=r.fx.speeds[d.duration]:d.duration=r.fx.speeds._default),null!=d.queue&&d.queue!==!0||(d.queue="fx"),d.old=d.complete,d.complete=function(){r.isFunction(d.old)&&d.old.call(this),d.queue&&r.dequeue(this,d.queue)},d},r.fn.extend({fadeTo:function(a,b,c,d){return this.filter(da).css("opacity",0).show().end().animate({opacity:b},a,c,d)},animate:function(a,b,c,d){var e=r.isEmptyObject(a),f=r.speed(b,c,d),g=function(){var b=kb(this,r.extend({},a),f);(e||W.get(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=r.timers,g=W.get(this);if(e)g[e]&&g[e].stop&&d(g[e]);else for(e in g)g[e]&&g[e].stop&&db.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||r.dequeue(this,a)})},finish:function(a){return a!==!1&&(a=a||"fx"),this.each(function(){var b,c=W.get(this),d=c[a+"queue"],e=c[a+"queueHooks"],f=r.timers,g=d?d.length:0;for(c.finish=!0,r.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})}}),r.each(["toggle","show","hide"],function(a,b){var c=r.fn[b];r.fn[b]=function(a,d,e){return null==a||"boolean"==typeof a?c.apply(this,arguments):this.animate(gb(b,!0),a,d,e)}}),r.each({slideDown:gb("show"),slideUp:gb("hide"),slideToggle:gb("toggle"),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"},fadeToggle:{opacity:"toggle"}},function(a,b){r.fn[a]=function(a,c,d){return this.animate(b,a,c,d)}}),r.timers=[],r.fx.tick=function(){var a,b=0,c=r.timers;for(ab=r.now();b<c.length;b++)a=c[b],a()||c[b]!==a||c.splice(b--,1);c.length||r.fx.stop(),ab=void 0},r.fx.timer=function(a){r.timers.push(a),r.fx.start()},r.fx.interval=13,r.fx.start=function(){bb||(bb=!0,eb())},r.fx.stop=function(){bb=null},r.fx.speeds={slow:600,fast:200,_default:400},r.fn.delay=function(b,c){return b=r.fx?r.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=d.createElement("input"),b=d.createElement("select"),c=b.appendChild(d.createElement("option"));a.type="checkbox",o.checkOn=""!==a.value,o.optSelected=c.selected,a=d.createElement("input"),a.value="t",a.type="radio",o.radioValue="t"===a.value}();var lb,mb=r.expr.attrHandle;r.fn.extend({attr:function(a,b){return T(this,r.attr,a,b,arguments.length>1)},removeAttr:function(a){return this.each(function(){r.removeAttr(this,a)})}}),r.extend({attr:function(a,b,c){var d,e,f=a.nodeType;if(3!==f&&8!==f&&2!==f)return"undefined"==typeof a.getAttribute?r.prop(a,b,c):(1===f&&r.isXMLDoc(a)||(e=r.attrHooks[b.toLowerCase()]||(r.expr.match.bool.test(b)?lb:void 0)),void 0!==c?null===c?void r.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=r.find.attr(a,b),null==d?void 0:d));
+},attrHooks:{type:{set:function(a,b){if(!o.radioValue&&"radio"===b&&B(a,"input")){var c=a.value;return a.setAttribute("type",b),c&&(a.value=c),b}}}},removeAttr:function(a,b){var c,d=0,e=b&&b.match(L);if(e&&1===a.nodeType)while(c=e[d++])a.removeAttribute(c)}}),lb={set:function(a,b,c){return b===!1?r.removeAttr(a,c):a.setAttribute(c,c),c}},r.each(r.expr.match.bool.source.match(/\w+/g),function(a,b){var c=mb[b]||r.find.attr;mb[b]=function(a,b,d){var e,f,g=b.toLowerCase();return d||(f=mb[g],mb[g]=e,e=null!=c(a,b,d)?g:null,mb[g]=f),e}});var nb=/^(?:input|select|textarea|button)$/i,ob=/^(?:a|area)$/i;r.fn.extend({prop:function(a,b){return T(this,r.prop,a,b,arguments.length>1)},removeProp:function(a){return this.each(function(){delete this[r.propFix[a]||a]})}}),r.extend({prop:function(a,b,c){var d,e,f=a.nodeType;if(3!==f&&8!==f&&2!==f)return 1===f&&r.isXMLDoc(a)||(b=r.propFix[b]||b,e=r.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=r.find.attr(a,"tabindex");return b?parseInt(b,10):nb.test(a.nodeName)||ob.test(a.nodeName)&&a.href?0:-1}}},propFix:{"for":"htmlFor","class":"className"}}),o.optSelected||(r.propHooks.selected={get:function(a){var b=a.parentNode;return b&&b.parentNode&&b.parentNode.selectedIndex,null},set:function(a){var b=a.parentNode;b&&(b.selectedIndex,b.parentNode&&b.parentNode.selectedIndex)}}),r.each(["tabIndex","readOnly","maxLength","cellSpacing","cellPadding","rowSpan","colSpan","useMap","frameBorder","contentEditable"],function(){r.propFix[this.toLowerCase()]=this});function pb(a){var b=a.match(L)||[];return b.join(" ")}function qb(a){return a.getAttribute&&a.getAttribute("class")||""}r.fn.extend({addClass:function(a){var b,c,d,e,f,g,h,i=0;if(r.isFunction(a))return this.each(function(b){r(this).addClass(a.call(this,b,qb(this)))});if("string"==typeof a&&a){b=a.match(L)||[];while(c=this[i++])if(e=qb(c),d=1===c.nodeType&&" "+pb(e)+" "){g=0;while(f=b[g++])d.indexOf(" "+f+" ")<0&&(d+=f+" ");h=pb(d),e!==h&&c.setAttribute("class",h)}}return this},removeClass:function(a){var b,c,d,e,f,g,h,i=0;if(r.isFunction(a))return this.each(function(b){r(this).removeClass(a.call(this,b,qb(this)))});if(!arguments.length)return this.attr("class","");if("string"==typeof a&&a){b=a.match(L)||[];while(c=this[i++])if(e=qb(c),d=1===c.nodeType&&" "+pb(e)+" "){g=0;while(f=b[g++])while(d.indexOf(" "+f+" ")>-1)d=d.replace(" "+f+" "," ");h=pb(d),e!==h&&c.setAttribute("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):r.isFunction(a)?this.each(function(c){r(this).toggleClass(a.call(this,c,qb(this),b),b)}):this.each(function(){var b,d,e,f;if("string"===c){d=0,e=r(this),f=a.match(L)||[];while(b=f[d++])e.hasClass(b)?e.removeClass(b):e.addClass(b)}else void 0!==a&&"boolean"!==c||(b=qb(this),b&&W.set(this,"__className__",b),this.setAttribute&&this.setAttribute("class",b||a===!1?"":W.get(this,"__className__")||""))})},hasClass:function(a){var b,c,d=0;b=" "+a+" ";while(c=this[d++])if(1===c.nodeType&&(" "+pb(qb(c))+" ").indexOf(b)>-1)return!0;return!1}});var rb=/\r/g;r.fn.extend({val:function(a){var b,c,d,e=this[0];{if(arguments.length)return d=r.isFunction(a),this.each(function(c){var e;1===this.nodeType&&(e=d?a.call(this,c,r(this).val()):a,null==e?e="":"number"==typeof e?e+="":Array.isArray(e)&&(e=r.map(e,function(a){return null==a?"":a+""})),b=r.valHooks[this.type]||r.valHooks[this.nodeName.toLowerCase()],b&&"set"in b&&void 0!==b.set(this,e,"value")||(this.value=e))});if(e)return b=r.valHooks[e.type]||r.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)}}}),r.extend({valHooks:{option:{get:function(a){var b=r.find.attr(a,"value");return null!=b?b:pb(r.text(a))}},select:{get:function(a){var b,c,d,e=a.options,f=a.selectedIndex,g="select-one"===a.type,h=g?null:[],i=g?f+1:e.length;for(d=f<0?i:g?f:0;d<i;d++)if(c=e[d],(c.selected||d===f)&&!c.disabled&&(!c.parentNode.disabled||!B(c.parentNode,"optgroup"))){if(b=r(c).val(),g)return b;h.push(b)}return h},set:function(a,b){var c,d,e=a.options,f=r.makeArray(b),g=e.length;while(g--)d=e[g],(d.selected=r.inArray(r.valHooks.option.get(d),f)>-1)&&(c=!0);return c||(a.selectedIndex=-1),f}}}}),r.each(["radio","checkbox"],function(){r.valHooks[this]={set:function(a,b){if(Array.isArray(b))return a.checked=r.inArray(r(a).val(),b)>-1}},o.checkOn||(r.valHooks[this].get=function(a){return null===a.getAttribute("value")?"on":a.value})});var sb=/^(?:focusinfocus|focusoutblur)$/;r.extend(r.event,{trigger:function(b,c,e,f){var g,h,i,j,k,m,n,o=[e||d],p=l.call(b,"type")?b.type:b,q=l.call(b,"namespace")?b.namespace.split("."):[];if(h=i=e=e||d,3!==e.nodeType&&8!==e.nodeType&&!sb.test(p+r.event.triggered)&&(p.indexOf(".")>-1&&(q=p.split("."),p=q.shift(),q.sort()),k=p.indexOf(":")<0&&"on"+p,b=b[r.expando]?b:new r.Event(p,"object"==typeof b&&b),b.isTrigger=f?2:3,b.namespace=q.join("."),b.rnamespace=b.namespace?new RegExp("(^|\\.)"+q.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,b.result=void 0,b.target||(b.target=e),c=null==c?[b]:r.makeArray(c,[b]),n=r.event.special[p]||{},f||!n.trigger||n.trigger.apply(e,c)!==!1)){if(!f&&!n.noBubble&&!r.isWindow(e)){for(j=n.delegateType||p,sb.test(j+p)||(h=h.parentNode);h;h=h.parentNode)o.push(h),i=h;i===(e.ownerDocument||d)&&o.push(i.defaultView||i.parentWindow||a)}g=0;while((h=o[g++])&&!b.isPropagationStopped())b.type=g>1?j:n.bindType||p,m=(W.get(h,"events")||{})[b.type]&&W.get(h,"handle"),m&&m.apply(h,c),m=k&&h[k],m&&m.apply&&U(h)&&(b.result=m.apply(h,c),b.result===!1&&b.preventDefault());return b.type=p,f||b.isDefaultPrevented()||n._default&&n._default.apply(o.pop(),c)!==!1||!U(e)||k&&r.isFunction(e[p])&&!r.isWindow(e)&&(i=e[k],i&&(e[k]=null),r.event.triggered=p,e[p](),r.event.triggered=void 0,i&&(e[k]=i)),b.result}},simulate:function(a,b,c){var d=r.extend(new r.Event,c,{type:a,isSimulated:!0});r.event.trigger(d,null,b)}}),r.fn.extend({trigger:function(a,b){return this.each(function(){r.event.trigger(a,b,this)})},triggerHandler:function(a,b){var c=this[0];if(c)return r.event.trigger(a,b,c,!0)}}),r.each("blur focus focusin focusout resize scroll click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup contextmenu".split(" "),function(a,b){r.fn[b]=function(a,c){return arguments.length>0?this.on(b,null,a,c):this.trigger(b)}}),r.fn.extend({hover:function(a,b){return this.mouseenter(a).mouseleave(b||a)}}),o.focusin="onfocusin"in a,o.focusin||r.each({focus:"focusin",blur:"focusout"},function(a,b){var c=function(a){r.event.simulate(b,a.target,r.event.fix(a))};r.event.special[b]={setup:function(){var d=this.ownerDocument||this,e=W.access(d,b);e||d.addEventListener(a,c,!0),W.access(d,b,(e||0)+1)},teardown:function(){var d=this.ownerDocument||this,e=W.access(d,b)-1;e?W.access(d,b,e):(d.removeEventListener(a,c,!0),W.remove(d,b))}}});var tb=a.location,ub=r.now(),vb=/\?/;r.parseXML=function(b){var c;if(!b||"string"!=typeof b)return null;try{c=(new a.DOMParser).parseFromString(b,"text/xml")}catch(d){c=void 0}return c&&!c.getElementsByTagName("parsererror").length||r.error("Invalid XML: "+b),c};var wb=/\[\]$/,xb=/\r?\n/g,yb=/^(?:submit|button|image|reset|file)$/i,zb=/^(?:input|select|textarea|keygen)/i;function Ab(a,b,c,d){var e;if(Array.isArray(b))r.each(b,function(b,e){c||wb.test(a)?d(a,e):Ab(a+"["+("object"==typeof e&&null!=e?b:"")+"]",e,c,d)});else if(c||"object"!==r.type(b))d(a,b);else for(e in b)Ab(a+"["+e+"]",b[e],c,d)}r.param=function(a,b){var c,d=[],e=function(a,b){var c=r.isFunction(b)?b():b;d[d.length]=encodeURIComponent(a)+"="+encodeURIComponent(null==c?"":c)};if(Array.isArray(a)||a.jquery&&!r.isPlainObject(a))r.each(a,function(){e(this.name,this.value)});else for(c in a)Ab(c,a[c],b,e);return d.join("&")},r.fn.extend({serialize:function(){return r.param(this.serializeArray())},serializeArray:function(){return this.map(function(){var a=r.prop(this,"elements");return a?r.makeArray(a):this}).filter(function(){var a=this.type;return this.name&&!r(this).is(":disabled")&&zb.test(this.nodeName)&&!yb.test(a)&&(this.checked||!ja.test(a))}).map(function(a,b){var c=r(this).val();return null==c?null:Array.isArray(c)?r.map(c,function(a){return{name:b.name,value:a.replace(xb,"\r\n")}}):{name:b.name,value:c.replace(xb,"\r\n")}}).get()}});var Bb=/%20/g,Cb=/#.*$/,Db=/([?&])_=[^&]*/,Eb=/^(.*?):[ \t]*([^\r\n]*)$/gm,Fb=/^(?:about|app|app-storage|.+-extension|file|res|widget):$/,Gb=/^(?:GET|HEAD)$/,Hb=/^\/\//,Ib={},Jb={},Kb="*/".concat("*"),Lb=d.createElement("a");Lb.href=tb.href;function Mb(a){return function(b,c){"string"!=typeof b&&(c=b,b="*");var d,e=0,f=b.toLowerCase().match(L)||[];if(r.isFunction(c))while(d=f[e++])"+"===d[0]?(d=d.slice(1)||"*",(a[d]=a[d]||[]).unshift(c)):(a[d]=a[d]||[]).push(c)}}function Nb(a,b,c,d){var e={},f=a===Jb;function g(h){var i;return e[h]=!0,r.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 Ob(a,b){var c,d,e=r.ajaxSettings.flatOptions||{};for(c in b)void 0!==b[c]&&((e[c]?a:d||(d={}))[c]=b[c]);return d&&r.extend(!0,a,d),a}function Pb(a,b,c){var d,e,f,g,h=a.contents,i=a.dataTypes;while("*"===i[0])i.shift(),void 0===d&&(d=a.mimeType||b.getResponseHeader("Content-Type"));if(d)for(e in h)if(h[e]&&h[e].test(d)){i.unshift(e);break}if(i[0]in c)f=i[0];else{for(e in c){if(!i[0]||a.converters[e+" "+i[0]]){f=e;break}g||(g=e)}f=f||g}if(f)return f!==i[0]&&i.unshift(f),c[f]}function Qb(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}}r.extend({active:0,lastModified:{},etag:{},ajaxSettings:{url:tb.href,type:"GET",isLocal:Fb.test(tb.protocol),global:!0,processData:!0,async:!0,contentType:"application/x-www-form-urlencoded; charset=UTF-8",accepts:{"*":Kb,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":JSON.parse,"text xml":r.parseXML},flatOptions:{url:!0,context:!0}},ajaxSetup:function(a,b){return b?Ob(Ob(a,r.ajaxSettings),b):Ob(r.ajaxSettings,a)},ajaxPrefilter:Mb(Ib),ajaxTransport:Mb(Jb),ajax:function(b,c){"object"==typeof b&&(c=b,b=void 0),c=c||{};var e,f,g,h,i,j,k,l,m,n,o=r.ajaxSetup({},c),p=o.context||o,q=o.context&&(p.nodeType||p.jquery)?r(p):r.event,s=r.Deferred(),t=r.Callbacks("once memory"),u=o.statusCode||{},v={},w={},x="canceled",y={readyState:0,getResponseHeader:function(a){var b;if(k){if(!h){h={};while(b=Eb.exec(g))h[b[1].toLowerCase()]=b[2]}b=h[a.toLowerCase()]}return null==b?null:b},getAllResponseHeaders:function(){return k?g:null},setRequestHeader:function(a,b){return null==k&&(a=w[a.toLowerCase()]=w[a.toLowerCase()]||a,v[a]=b),this},overrideMimeType:function(a){return null==k&&(o.mimeType=a),this},statusCode:function(a){var b;if(a)if(k)y.always(a[y.status]);else for(b in a)u[b]=[u[b],a[b]];return this},abort:function(a){var b=a||x;return e&&e.abort(b),A(0,b),this}};if(s.promise(y),o.url=((b||o.url||tb.href)+"").replace(Hb,tb.protocol+"//"),o.type=c.method||c.type||o.method||o.type,o.dataTypes=(o.dataType||"*").toLowerCase().match(L)||[""],null==o.crossDomain){j=d.createElement("a");try{j.href=o.url,j.href=j.href,o.crossDomain=Lb.protocol+"//"+Lb.host!=j.protocol+"//"+j.host}catch(z){o.crossDomain=!0}}if(o.data&&o.processData&&"string"!=typeof o.data&&(o.data=r.param(o.data,o.traditional)),Nb(Ib,o,c,y),k)return y;l=r.event&&o.global,l&&0===r.active++&&r.event.trigger("ajaxStart"),o.type=o.type.toUpperCase(),o.hasContent=!Gb.test(o.type),f=o.url.replace(Cb,""),o.hasContent?o.data&&o.processData&&0===(o.contentType||"").indexOf("application/x-www-form-urlencoded")&&(o.data=o.data.replace(Bb,"+")):(n=o.url.slice(f.length),o.data&&(f+=(vb.test(f)?"&":"?")+o.data,delete o.data),o.cache===!1&&(f=f.replace(Db,"$1"),n=(vb.test(f)?"&":"?")+"_="+ub++ +n),o.url=f+n),o.ifModified&&(r.lastModified[f]&&y.setRequestHeader("If-Modified-Since",r.lastModified[f]),r.etag[f]&&y.setRequestHeader("If-None-Match",r.etag[f])),(o.data&&o.hasContent&&o.contentType!==!1||c.contentType)&&y.setRequestHeader("Content-Type",o.contentType),y.setRequestHeader("Accept",o.dataTypes[0]&&o.accepts[o.dataTypes[0]]?o.accepts[o.dataTypes[0]]+("*"!==o.dataTypes[0]?", "+Kb+"; q=0.01":""):o.accepts["*"]);for(m in o.headers)y.setRequestHeader(m,o.headers[m]);if(o.beforeSend&&(o.beforeSend.call(p,y,o)===!1||k))return y.abort();if(x="abort",t.add(o.complete),y.done(o.success),y.fail(o.error),e=Nb(Jb,o,c,y)){if(y.readyState=1,l&&q.trigger("ajaxSend",[y,o]),k)return y;o.async&&o.timeout>0&&(i=a.setTimeout(function(){y.abort("timeout")},o.timeout));try{k=!1,e.send(v,A)}catch(z){if(k)throw z;A(-1,z)}}else A(-1,"No Transport");function A(b,c,d,h){var j,m,n,v,w,x=c;k||(k=!0,i&&a.clearTimeout(i),e=void 0,g=h||"",y.readyState=b>0?4:0,j=b>=200&&b<300||304===b,d&&(v=Pb(o,y,d)),v=Qb(o,v,y,j),j?(o.ifModified&&(w=y.getResponseHeader("Last-Modified"),w&&(r.lastModified[f]=w),w=y.getResponseHeader("etag"),w&&(r.etag[f]=w)),204===b||"HEAD"===o.type?x="nocontent":304===b?x="notmodified":(x=v.state,m=v.data,n=v.error,j=!n)):(n=x,!b&&x||(x="error",b<0&&(b=0))),y.status=b,y.statusText=(c||x)+"",j?s.resolveWith(p,[m,x,y]):s.rejectWith(p,[y,x,n]),y.statusCode(u),u=void 0,l&&q.trigger(j?"ajaxSuccess":"ajaxError",[y,o,j?m:n]),t.fireWith(p,[y,x]),l&&(q.trigger("ajaxComplete",[y,o]),--r.active||r.event.trigger("ajaxStop")))}return y},getJSON:function(a,b,c){return r.get(a,b,c,"json")},getScript:function(a,b){return r.get(a,void 0,b,"script")}}),r.each(["get","post"],function(a,b){r[b]=function(a,c,d,e){return r.isFunction(c)&&(e=e||d,d=c,c=void 0),r.ajax(r.extend({url:a,type:b,dataType:e,data:c,success:d},r.isPlainObject(a)&&a))}}),r._evalUrl=function(a){return r.ajax({url:a,type:"GET",dataType:"script",cache:!0,async:!1,global:!1,"throws":!0})},r.fn.extend({wrapAll:function(a){var b;return this[0]&&(r.isFunction(a)&&(a=a.call(this[0])),b=r(a,this[0].ownerDocument).eq(0).clone(!0),this[0].parentNode&&b.insertBefore(this[0]),b.map(function(){var a=this;while(a.firstElementChild)a=a.firstElementChild;return a}).append(this)),this},wrapInner:function(a){return r.isFunction(a)?this.each(function(b){r(this).wrapInner(a.call(this,b))}):this.each(function(){var b=r(this),c=b.contents();c.length?c.wrapAll(a):b.append(a)})},wrap:function(a){var b=r.isFunction(a);return this.each(function(c){r(this).wrapAll(b?a.call(this,c):a)})},unwrap:function(a){return this.parent(a).not("body").each(function(){r(this).replaceWith(this.childNodes)}),this}}),r.expr.pseudos.hidden=function(a){return!r.expr.pseudos.visible(a)},r.expr.pseudos.visible=function(a){return!!(a.offsetWidth||a.offsetHeight||a.getClientRects().length)},r.ajaxSettings.xhr=function(){try{return new a.XMLHttpRequest}catch(b){}};var Rb={0:200,1223:204},Sb=r.ajaxSettings.xhr();o.cors=!!Sb&&"withCredentials"in Sb,o.ajax=Sb=!!Sb,r.ajaxTransport(function(b){var c,d;if(o.cors||Sb&&!b.crossDomain)return{send:function(e,f){var g,h=b.xhr();if(h.open(b.type,b.url,b.async,b.username,b.password),b.xhrFields)for(g in b.xhrFields)h[g]=b.xhrFields[g];b.mimeType&&h.overrideMimeType&&h.overrideMimeType(b.mimeType),b.crossDomain||e["X-Requested-With"]||(e["X-Requested-With"]="XMLHttpRequest");for(g in e)h.setRequestHeader(g,e[g]);c=function(a){return function(){c&&(c=d=h.onload=h.onerror=h.onabort=h.onreadystatechange=null,"abort"===a?h.abort():"error"===a?"number"!=typeof h.status?f(0,"error"):f(h.status,h.statusText):f(Rb[h.status]||h.status,h.statusText,"text"!==(h.responseType||"text")||"string"!=typeof h.responseText?{binary:h.response}:{text:h.responseText},h.getAllResponseHeaders()))}},h.onload=c(),d=h.onerror=c("error"),void 0!==h.onabort?h.onabort=d:h.onreadystatechange=function(){4===h.readyState&&a.setTimeout(function(){c&&d()})},c=c("abort");try{h.send(b.hasContent&&b.data||null)}catch(i){if(c)throw i}},abort:function(){c&&c()}}}),r.ajaxPrefilter(function(a){a.crossDomain&&(a.contents.script=!1)}),r.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 r.globalEval(a),a}}}),r.ajaxPrefilter("script",function(a){void 0===a.cache&&(a.cache=!1),a.crossDomain&&(a.type="GET")}),r.ajaxTransport("script",function(a){if(a.crossDomain){var b,c;return{send:function(e,f){b=r("<script>").prop({charset:a.scriptCharset,src:a.url}).on("load error",c=function(a){b.remove(),c=null,a&&f("error"===a.type?404:200,a.type)}),d.head.appendChild(b[0])},abort:function(){c&&c()}}}});var Tb=[],Ub=/(=)\?(?=&|$)|\?\?/;r.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var a=Tb.pop()||r.expando+"_"+ub++;return this[a]=!0,a}}),r.ajaxPrefilter("json jsonp",function(b,c,d){var e,f,g,h=b.jsonp!==!1&&(Ub.test(b.url)?"url":"string"==typeof b.data&&0===(b.contentType||"").indexOf("application/x-www-form-urlencoded")&&Ub.test(b.data)&&"data");if(h||"jsonp"===b.dataTypes[0])return e=b.jsonpCallback=r.isFunction(b.jsonpCallback)?b.jsonpCallback():b.jsonpCallback,h?b[h]=b[h].replace(Ub,"$1"+e):b.jsonp!==!1&&(b.url+=(vb.test(b.url)?"&":"?")+b.jsonp+"="+e),b.converters["script json"]=function(){return g||r.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?r(a).removeProp(e):a[e]=f,b[e]&&(b.jsonpCallback=c.jsonpCallback,Tb.push(e)),g&&r.isFunction(f)&&f(g[0]),g=f=void 0}),"script"}),o.createHTMLDocument=function(){var a=d.implementation.createHTMLDocument("").body;return a.innerHTML="<form></form><form></form>",2===a.childNodes.length}(),r.parseHTML=function(a,b,c){if("string"!=typeof a)return[];"boolean"==typeof b&&(c=b,b=!1);var e,f,g;return b||(o.createHTMLDocument?(b=d.implementation.createHTMLDocument(""),e=b.createElement("base"),e.href=d.location.href,b.head.appendChild(e)):b=d),f=C.exec(a),g=!c&&[],f?[b.createElement(f[1])]:(f=qa([a],b,g),g&&g.length&&r(g).remove(),r.merge([],f.childNodes))},r.fn.load=function(a,b,c){var d,e,f,g=this,h=a.indexOf(" ");return h>-1&&(d=pb(a.slice(h)),a=a.slice(0,h)),r.isFunction(b)?(c=b,b=void 0):b&&"object"==typeof b&&(e="POST"),g.length>0&&r.ajax({url:a,type:e||"GET",dataType:"html",data:b}).done(function(a){f=arguments,g.html(d?r("<div>").append(r.parseHTML(a)).find(d):a)}).always(c&&function(a,b){g.each(function(){c.apply(this,f||[a.responseText,b,a])})}),this},r.each(["ajaxStart","ajaxStop","ajaxComplete","ajaxError","ajaxSuccess","ajaxSend"],function(a,b){r.fn[b]=function(a){return this.on(b,a)}}),r.expr.pseudos.animated=function(a){return r.grep(r.timers,function(b){return a===b.elem}).length},r.offset={setOffset:function(a,b,c){var d,e,f,g,h,i,j,k=r.css(a,"position"),l=r(a),m={};"static"===k&&(a.style.position="relative"),h=l.offset(),f=r.css(a,"top"),i=r.css(a,"left"),j=("absolute"===k||"fixed"===k)&&(f+i).indexOf("auto")>-1,j?(d=l.position(),g=d.top,e=d.left):(g=parseFloat(f)||0,e=parseFloat(i)||0),r.isFunction(b)&&(b=b.call(a,c,r.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)}},r.fn.extend({offset:function(a){if(arguments.length)return void 0===a?this:this.each(function(b){r.offset.setOffset(this,a,b)});var b,c,d,e,f=this[0];if(f)return f.getClientRects().length?(d=f.getBoundingClientRect(),b=f.ownerDocument,c=b.documentElement,e=b.defaultView,{top:d.top+e.pageYOffset-c.clientTop,left:d.left+e.pageXOffset-c.clientLeft}):{top:0,left:0}},position:function(){if(this[0]){var a,b,c=this[0],d={top:0,left:0};return"fixed"===r.css(c,"position")?b=c.getBoundingClientRect():(a=this.offsetParent(),b=this.offset(),B(a[0],"html")||(d=a.offset()),d={top:d.top+r.css(a[0],"borderTopWidth",!0),left:d.left+r.css(a[0],"borderLeftWidth",!0)}),{top:b.top-d.top-r.css(c,"marginTop",!0),left:b.left-d.left-r.css(c,"marginLeft",!0)}}},offsetParent:function(){return this.map(function(){var a=this.offsetParent;while(a&&"static"===r.css(a,"position"))a=a.offsetParent;return a||ra})}}),r.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(a,b){var c="pageYOffset"===b;r.fn[a]=function(d){return T(this,function(a,d,e){var f;return r.isWindow(a)?f=a:9===a.nodeType&&(f=a.defaultView),void 0===e?f?f[b]:a[d]:void(f?f.scrollTo(c?f.pageXOffset:e,c?e:f.pageYOffset):a[d]=e)},a,d,arguments.length)}}),r.each(["top","left"],function(a,b){r.cssHooks[b]=Pa(o.pixelPosition,function(a,c){if(c)return c=Oa(a,b),Ma.test(c)?r(a).position()[b]+"px":c})}),r.each({Height:"height",Width:"width"},function(a,b){r.each({padding:"inner"+a,content:b,"":"outer"+a},function(c,d){r.fn[d]=function(e,f){var g=arguments.length&&(c||"boolean"!=typeof e),h=c||(e===!0||f===!0?"margin":"border");return T(this,function(b,c,e){var f;return r.isWindow(b)?0===d.indexOf("outer")?b["inner"+a]:b.document.documentElement["client"+a]:9===b.nodeType?(f=b.documentElement,Math.max(b.body["scroll"+a],f["scroll"+a],b.body["offset"+a],f["offset"+a],f["client"+a])):void 0===e?r.css(b,c,h):r.style(b,c,e,h)},b,g?e:void 0,g)}})}),r.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)},holdReady:function(a){a?r.readyWait++:r.ready(!0)}}),r.isArray=Array.isArray,r.parseJSON=JSON.parse,r.nodeName=B,"function"==typeof define&&define.amd&&define("jquery",[],function(){return r});var Vb=a.jQuery,Wb=a.$;return r.noConflict=function(b){return a.$===r&&(a.$=Wb),b&&a.jQuery===r&&(a.jQuery=Vb),r},b||(a.jQuery=a.$=r),r});
+
+function createShiftArr(step) {
+
+	var space = '    ';
+	
+	if ( isNaN(parseInt(step)) ) {  // argument is string
+		space = step;
+	} else { // argument is integer
+		switch(step) {
+			case 1: space = ' '; break;
+			case 2: space = '  '; break;
+			case 3: space = '   '; break;
+			case 4: space = '    '; break;
+			case 5: space = '     '; break;
+			case 6: space = '      '; break;
+			case 7: space = '       '; break;
+			case 8: space = '        '; break;
+			case 9: space = '         '; break;
+			case 10: space = '          '; break;
+			case 11: space = '           '; break;
+			case 12: space = '            '; break;
+		}
+	}
+
+	var shift = ['\n']; // array of shifts
+	for(ix=0;ix<100;ix++){
+		shift.push(shift[ix]+space); 
+	}
+	return shift;
+}
+
+function vkbeautify(){
+	this.step = '    '; // 4 spaces
+	this.shift = createShiftArr(this.step);
+};
+
+vkbeautify.prototype.xml = function(text,step) {
+
+	var ar = text.replace(/>\s{0,}</g,"><")
+				 .replace(/</g,"~::~<")
+				 .replace(/\s*xmlns\:/g,"~::~xmlns:")
+				 .replace(/\s*xmlns\=/g,"~::~xmlns=")
+				 .split('~::~'),
+		len = ar.length,
+		inComment = false,
+		deep = 0,
+		str = '',
+		ix = 0,
+		shift = step ? createShiftArr(step) : this.shift;
+
+		for(ix=0;ix<len;ix++) {
+			// start comment or <![CDATA[...]]> or <!DOCTYPE //
+			if(ar[ix].search(/<!/) > -1) { 
+				str += shift[deep]+ar[ix];
+				inComment = true; 
+				// end comment  or <![CDATA[...]]> //
+				if(ar[ix].search(/-->/) > -1 || ar[ix].search(/\]>/) > -1 || ar[ix].search(/!DOCTYPE/) > -1 ) { 
+					inComment = false; 
+				}
+			} else 
+			// end comment  or <![CDATA[...]]> //
+			if(ar[ix].search(/-->/) > -1 || ar[ix].search(/\]>/) > -1) { 
+				str += ar[ix];
+				inComment = false; 
+			} else 
+			// <elm></elm> //
+			if( /^<\w/.exec(ar[ix-1]) && /^<\/\w/.exec(ar[ix]) &&
+				/^<[\w:\-\.\,]+/.exec(ar[ix-1]) == /^<\/[\w:\-\.\,]+/.exec(ar[ix])[0].replace('/','')) { 
+				str += ar[ix];
+				if(!inComment) deep--;
+			} else
+			 // <elm> //
+			if(ar[ix].search(/<\w/) > -1 && ar[ix].search(/<\//) == -1 && ar[ix].search(/\/>/) == -1 ) {
+				str = !inComment ? str += shift[deep++]+ar[ix] : str += ar[ix];
+			} else 
+			 // <elm>...</elm> //
+			if(ar[ix].search(/<\w/) > -1 && ar[ix].search(/<\//) > -1) {
+				str = !inComment ? str += shift[deep]+ar[ix] : str += ar[ix];
+			} else 
+			// </elm> //
+			if(ar[ix].search(/<\//) > -1) { 
+				str = !inComment ? str += shift[--deep]+ar[ix] : str += ar[ix];
+			} else 
+			// <elm/> //
+			if(ar[ix].search(/\/>/) > -1 ) { 
+				str = !inComment ? str += shift[deep]+ar[ix] : str += ar[ix];
+			} else 
+			// <? xml ... ?> //
+			if(ar[ix].search(/<\?/) > -1) { 
+				str += shift[deep]+ar[ix];
+			} else 
+			// xmlns //
+			if( ar[ix].search(/xmlns\:/) > -1  || ar[ix].search(/xmlns\=/) > -1) { 
+				str += shift[deep]+ar[ix];
+			} 
+			
+			else {
+				str += ar[ix];
+			}
+		}
+		
+	return  (str[0] == '\n') ? str.slice(1) : str;
+}
+
+vkbeautify.prototype.json = function(text,step) {
+
+	var step = step ? step : this.step;
+	
+	if (typeof JSON === 'undefined' ) return text; 
+	
+	if ( typeof text === "string" ) return JSON.stringify(JSON.parse(text), null, step);
+	if ( typeof text === "object" ) return JSON.stringify(text, null, step);
+		
+	return text; // text is not string nor object
+}
+
+vkbeautify.prototype.css = function(text, step) {
+
+	var ar = text.replace(/\s{1,}/g,' ')
+				.replace(/\{/g,"{~::~")
+				.replace(/\}/g,"~::~}~::~")
+				.replace(/\;/g,";~::~")
+				.replace(/\/\*/g,"~::~/*")
+				.replace(/\*\//g,"*/~::~")
+				.replace(/~::~\s{0,}~::~/g,"~::~")
+				.split('~::~'),
+		len = ar.length,
+		deep = 0,
+		str = '',
+		ix = 0,
+		shift = step ? createShiftArr(step) : this.shift;
+		
+		for(ix=0;ix<len;ix++) {
+
+			if( /\{/.exec(ar[ix]))  { 
+				str += shift[deep++]+ar[ix];
+			} else 
+			if( /\}/.exec(ar[ix]))  { 
+				str += shift[--deep]+ar[ix];
+			} else
+			if( /\*\\/.exec(ar[ix]))  { 
+				str += shift[deep]+ar[ix];
+			}
+			else {
+				str += shift[deep]+ar[ix];
+			}
+		}
+		return str.replace(/^\n{1,}/,'');
+}
+
+//----------------------------------------------------------------------------
+
+function isSubquery(str, parenthesisLevel) {
+	return  parenthesisLevel - (str.replace(/\(/g,'').length - str.replace(/\)/g,'').length )
+}
+
+function split_sql(str, tab) {
+
+	return str.replace(/\s{1,}/g," ")
+
+				.replace(/ AND /ig,"~::~"+tab+tab+"AND ")
+				.replace(/ BETWEEN /ig,"~::~"+tab+"BETWEEN ")
+				.replace(/ CASE /ig,"~::~"+tab+"CASE ")
+				.replace(/ ELSE /ig,"~::~"+tab+"ELSE ")
+				.replace(/ END /ig,"~::~"+tab+"END ")
+				.replace(/ FROM /ig,"~::~FROM ")
+				.replace(/ GROUP\s{1,}BY/ig,"~::~GROUP BY ")
+				.replace(/ HAVING /ig,"~::~HAVING ")
+				//.replace(/ SET /ig," SET~::~")
+				.replace(/ IN /ig," IN ")
+				
+				.replace(/ JOIN /ig,"~::~JOIN ")
+				.replace(/ CROSS~::~{1,}JOIN /ig,"~::~CROSS JOIN ")
+				.replace(/ INNER~::~{1,}JOIN /ig,"~::~INNER JOIN ")
+				.replace(/ LEFT~::~{1,}JOIN /ig,"~::~LEFT JOIN ")
+				.replace(/ RIGHT~::~{1,}JOIN /ig,"~::~RIGHT JOIN ")
+				
+				.replace(/ ON /ig,"~::~"+tab+"ON ")
+				.replace(/ OR /ig,"~::~"+tab+tab+"OR ")
+				.replace(/ ORDER\s{1,}BY/ig,"~::~ORDER BY ")
+				.replace(/ OVER /ig,"~::~"+tab+"OVER ")
+
+				.replace(/\(\s{0,}SELECT /ig,"~::~(SELECT ")
+				.replace(/\)\s{0,}SELECT /ig,")~::~SELECT ")
+				
+				.replace(/ THEN /ig," THEN~::~"+tab+"")
+				.replace(/ UNION /ig,"~::~UNION~::~")
+				.replace(/ USING /ig,"~::~USING ")
+				.replace(/ WHEN /ig,"~::~"+tab+"WHEN ")
+				.replace(/ WHERE /ig,"~::~WHERE ")
+				.replace(/ WITH /ig,"~::~WITH ")
+				
+				//.replace(/\,\s{0,}\(/ig,",~::~( ")
+				//.replace(/\,/ig,",~::~"+tab+tab+"")
+
+				.replace(/ ALL /ig," ALL ")
+				.replace(/ AS /ig," AS ")
+				.replace(/ ASC /ig," ASC ")	
+				.replace(/ DESC /ig," DESC ")	
+				.replace(/ DISTINCT /ig," DISTINCT ")
+				.replace(/ EXISTS /ig," EXISTS ")
+				.replace(/ NOT /ig," NOT ")
+				.replace(/ NULL /ig," NULL ")
+				.replace(/ LIKE /ig," LIKE ")
+				.replace(/\s{0,}SELECT /ig,"SELECT ")
+				.replace(/\s{0,}UPDATE /ig,"UPDATE ")
+				.replace(/ SET /ig," SET ")
+							
+				.replace(/~::~{1,}/g,"~::~")
+				.split('~::~');
+}
+
+vkbeautify.prototype.sql = function(text,step) {
+
+	var ar_by_quote = text.replace(/\s{1,}/g," ")
+							.replace(/\'/ig,"~::~\'")
+							.split('~::~'),
+		len = ar_by_quote.length,
+		ar = [],
+		deep = 0,
+		tab = this.step,//+this.step,
+		inComment = true,
+		inQuote = false,
+		parenthesisLevel = 0,
+		str = '',
+		ix = 0,
+		shift = step ? createShiftArr(step) : this.shift;;
+
+		for(ix=0;ix<len;ix++) {
+			if(ix%2) {
+				ar = ar.concat(ar_by_quote[ix]);
+			} else {
+				ar = ar.concat(split_sql(ar_by_quote[ix], tab) );
+			}
+		}
+		
+		len = ar.length;
+		for(ix=0;ix<len;ix++) {
+			
+			parenthesisLevel = isSubquery(ar[ix], parenthesisLevel);
+			
+			if( /\s{0,}\s{0,}SELECT\s{0,}/.exec(ar[ix]))  { 
+				ar[ix] = ar[ix].replace(/\,/g,",\n"+tab+tab+"")
+			} 
+			
+			if( /\s{0,}\s{0,}SET\s{0,}/.exec(ar[ix]))  { 
+				ar[ix] = ar[ix].replace(/\,/g,",\n"+tab+tab+"")
+			} 
+			
+			if( /\s{0,}\(\s{0,}SELECT\s{0,}/.exec(ar[ix]))  { 
+				deep++;
+				str += shift[deep]+ar[ix];
+			} else 
+			if( /\'/.exec(ar[ix]) )  { 
+				if(parenthesisLevel<1 && deep) {
+					deep--;
+				}
+				str += ar[ix];
+			}
+			else  { 
+				str += shift[deep]+ar[ix];
+				if(parenthesisLevel<1 && deep) {
+					deep--;
+				}
+			} 
+			var junk = 0;
+		}
+
+		str = str.replace(/^\n{1,}/,'').replace(/\n{1,}/g,"\n");
+		return str;
+}
+
+
+vkbeautify.prototype.xmlmin = function(text, preserveComments) {
+
+	var str = preserveComments ? text
+							   : text.replace(/\<![ \r\n\t]*(--([^\-]|[\r\n]|-[^\-])*--[ \r\n\t]*)\>/g,"")
+									 .replace(/[ \r\n\t]{1,}xmlns/g, ' xmlns');
+	return  str.replace(/>\s{0,}</g,"><"); 
+}
+
+vkbeautify.prototype.jsonmin = function(text) {
+
+	if (typeof JSON === 'undefined' ) return text; 
+	
+	return JSON.stringify(JSON.parse(text), null, 0); 
+				
+}
+
+vkbeautify.prototype.cssmin = function(text, preserveComments) {
+	
+	var str = preserveComments ? text
+							   : text.replace(/\/\*([^*]|[\r\n]|(\*+([^*/]|[\r\n])))*\*+\//g,"") ;
+
+	return str.replace(/\s{1,}/g,' ')
+			  .replace(/\{\s{1,}/g,"{")
+			  .replace(/\}\s{1,}/g,"}")
+			  .replace(/\;\s{1,}/g,";")
+			  .replace(/\/\*\s{1,}/g,"/*")
+			  .replace(/\*\/\s{1,}/g,"*/");
+}
+
+vkbeautify.prototype.sqlmin = function(text) {
+	return text.replace(/\s{1,}/g," ").replace(/\s{1,}\(/,"(").replace(/\s{1,}\)/,")");
+}
+
+window.vkbeautify = new vkbeautify();
+
+})();
+
+
+(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(){function n(n){return n&&(n.ownerDocument||n.document||n).documentElement}function t(n){return n&&(n.ownerDocument&&n.ownerDocument.defaultView||n.document&&n||n.defaultView)}function e(n,t){return t>n?-1:n>t?1:n>=t?0:NaN}function r(n){return null===n?NaN:+n}function i(n){return!isNaN(n)}function u(n){return{left:function(t,e,r,i){for(arguments.length<3&&(r=0),arguments.length<4&&(i=t.length);i>r;){var u=r+i>>>1;n(t[u],e)<0?r=u+1:i=u}return r},right:function(t,e,r,i){for(arguments.length<3&&(r=0),arguments.length<4&&(i=t.length);i>r;){var u=r+i>>>1;n(t[u],e)>0?i=u:r=u+1}return r}}}function o(n){return n.length}function a(n){for(var t=1;n*t%1;)t*=10;return t}function l(n,t){for(var e in t)Object.defineProperty(n.prototype,e,{value:t[e],enumerable:!1})}function c(){this._=Object.create(null)}function f(n){return(n+="")===bo||n[0]===_o?_o+n:n}function s(n){return(n+="")[0]===_o?n.slice(1):n}function h(n){return f(n)in this._}function p(n){return(n=f(n))in this._&&delete this._[n]}function g(){var n=[];for(var t in this._)n.push(s(t));return n}function v(){var n=0;for(var t in this._)++n;return n}function d(){for(var n in this._)return!1;return!0}function y(){this._=Object.create(null)}function m(n){return n}function M(n,t,e){return function(){var r=e.apply(t,arguments);return r===t?n:r}}function x(n,t){if(t in n)return t;t=t.charAt(0).toUpperCase()+t.slice(1);for(var e=0,r=wo.length;r>e;++e){var i=wo[e]+t;if(i in n)return i}}function b(){}function _(){}function w(n){function t(){for(var t,r=e,i=-1,u=r.length;++i<u;)(t=r[i].on)&&t.apply(this,arguments);return n}var e=[],r=new c;return t.on=function(t,i){var u,o=r.get(t);return arguments.length<2?o&&o.on:(o&&(o.on=null,e=e.slice(0,u=e.indexOf(o)).concat(e.slice(u+1)),r.remove(t)),i&&e.push(r.set(t,{on:i})),n)},t}function S(){ao.event.preventDefault()}function k(){for(var n,t=ao.event;n=t.sourceEvent;)t=n;return t}function N(n){for(var t=new _,e=0,r=arguments.length;++e<r;)t[arguments[e]]=w(t);return t.of=function(e,r){return function(i){try{var u=i.sourceEvent=ao.event;i.target=n,ao.event=i,t[i.type].apply(e,r)}finally{ao.event=u}}},t}function E(n){return ko(n,Co),n}function A(n){return"function"==typeof n?n:function(){return No(n,this)}}function C(n){return"function"==typeof n?n:function(){return Eo(n,this)}}function z(n,t){function e(){this.removeAttribute(n)}function r(){this.removeAttributeNS(n.space,n.local)}function i(){this.setAttribute(n,t)}function u(){this.setAttributeNS(n.space,n.local,t)}function o(){var e=t.apply(this,arguments);null==e?this.removeAttribute(n):this.setAttribute(n,e)}function a(){var e=t.apply(this,arguments);null==e?this.removeAttributeNS(n.space,n.local):this.setAttributeNS(n.space,n.local,e)}return n=ao.ns.qualify(n),null==t?n.local?r:e:"function"==typeof t?n.local?a:o:n.local?u:i}function L(n){return n.trim().replace(/\s+/g," ")}function q(n){return new RegExp("(?:^|\\s+)"+ao.requote(n)+"(?:\\s+|$)","g")}function T(n){return(n+"").trim().split(/^|\s+/)}function R(n,t){function e(){for(var e=-1;++e<i;)n[e](this,t)}function r(){for(var e=-1,r=t.apply(this,arguments);++e<i;)n[e](this,r)}n=T(n).map(D);var i=n.length;return"function"==typeof t?r:e}function D(n){var t=q(n);return function(e,r){if(i=e.classList)return r?i.add(n):i.remove(n);var i=e.getAttribute("class")||"";r?(t.lastIndex=0,t.test(i)||e.setAttribute("class",L(i+" "+n))):e.setAttribute("class",L(i.replace(t," ")))}}function P(n,t,e){function r(){this.style.removeProperty(n)}function i(){this.style.setProperty(n,t,e)}function u(){var r=t.apply(this,arguments);null==r?this.style.removeProperty(n):this.style.setProperty(n,r,e)}return null==t?r:"function"==typeof t?u:i}function U(n,t){function e(){delete this[n]}function r(){this[n]=t}function i(){var e=t.apply(this,arguments);null==e?delete this[n]:this[n]=e}return null==t?e:"function"==typeof t?i:r}function j(n){function t(){var t=this.ownerDocument,e=this.namespaceURI;return e===zo&&t.documentElement.namespaceURI===zo?t.createElement(n):t.createElementNS(e,n)}function e(){return this.ownerDocument.createElementNS(n.space,n.local)}return"function"==typeof n?n:(n=ao.ns.qualify(n)).local?e:t}function F(){var n=this.parentNode;n&&n.removeChild(this)}function H(n){return{__data__:n}}function O(n){return function(){return Ao(this,n)}}function I(n){return arguments.length||(n=e),function(t,e){return t&&e?n(t.__data__,e.__data__):!t-!e}}function Y(n,t){for(var e=0,r=n.length;r>e;e++)for(var i,u=n[e],o=0,a=u.length;a>o;o++)(i=u[o])&&t(i,o,e);return n}function Z(n){return ko(n,qo),n}function V(n){var t,e;return function(r,i,u){var o,a=n[u].update,l=a.length;for(u!=e&&(e=u,t=0),i>=t&&(t=i+1);!(o=a[t])&&++t<l;);return o}}function X(n,t,e){function r(){var t=this[o];t&&(this.removeEventListener(n,t,t.$),delete this[o])}function i(){var i=l(t,co(arguments));r.call(this),this.addEventListener(n,this[o]=i,i.$=e),i._=t}function u(){var t,e=new RegExp("^__on([^.]+)"+ao.requote(n)+"$");for(var r in this)if(t=r.match(e)){var i=this[r];this.removeEventListener(t[1],i,i.$),delete this[r]}}var o="__on"+n,a=n.indexOf("."),l=$;a>0&&(n=n.slice(0,a));var c=To.get(n);return c&&(n=c,l=B),a?t?i:r:t?b:u}function $(n,t){return function(e){var r=ao.event;ao.event=e,t[0]=this.__data__;try{n.apply(this,t)}finally{ao.event=r}}}function B(n,t){var e=$(n,t);return function(n){var t=this,r=n.relatedTarget;r&&(r===t||8&r.compareDocumentPosition(t))||e.call(t,n)}}function W(e){var r=".dragsuppress-"+ ++Do,i="click"+r,u=ao.select(t(e)).on("touchmove"+r,S).on("dragstart"+r,S).on("selectstart"+r,S);if(null==Ro&&(Ro="onselectstart"in e?!1:x(e.style,"userSelect")),Ro){var o=n(e).style,a=o[Ro];o[Ro]="none"}return function(n){if(u.on(r,null),Ro&&(o[Ro]=a),n){var t=function(){u.on(i,null)};u.on(i,function(){S(),t()},!0),setTimeout(t,0)}}}function J(n,e){e.changedTouches&&(e=e.changedTouches[0]);var r=n.ownerSVGElement||n;if(r.createSVGPoint){var i=r.createSVGPoint();if(0>Po){var u=t(n);if(u.scrollX||u.scrollY){r=ao.select("body").append("svg").style({position:"absolute",top:0,left:0,margin:0,padding:0,border:"none"},"important");var o=r[0][0].getScreenCTM();Po=!(o.f||o.e),r.remove()}}return Po?(i.x=e.pageX,i.y=e.pageY):(i.x=e.clientX,i.y=e.clientY),i=i.matrixTransform(n.getScreenCTM().inverse()),[i.x,i.y]}var a=n.getBoundingClientRect();return[e.clientX-a.left-n.clientLeft,e.clientY-a.top-n.clientTop]}function G(){return ao.event.changedTouches[0].identifier}function K(n){return n>0?1:0>n?-1:0}function Q(n,t,e){return(t[0]-n[0])*(e[1]-n[1])-(t[1]-n[1])*(e[0]-n[0])}function nn(n){return n>1?0:-1>n?Fo:Math.acos(n)}function tn(n){return n>1?Io:-1>n?-Io:Math.asin(n)}function en(n){return((n=Math.exp(n))-1/n)/2}function rn(n){return((n=Math.exp(n))+1/n)/2}function un(n){return((n=Math.exp(2*n))-1)/(n+1)}function on(n){return(n=Math.sin(n/2))*n}function an(){}function ln(n,t,e){return this instanceof ln?(this.h=+n,this.s=+t,void(this.l=+e)):arguments.length<2?n instanceof ln?new ln(n.h,n.s,n.l):_n(""+n,wn,ln):new ln(n,t,e)}function cn(n,t,e){function r(n){return n>360?n-=360:0>n&&(n+=360),60>n?u+(o-u)*n/60:180>n?o:240>n?u+(o-u)*(240-n)/60:u}function i(n){return Math.round(255*r(n))}var u,o;return n=isNaN(n)?0:(n%=360)<0?n+360:n,t=isNaN(t)?0:0>t?0:t>1?1:t,e=0>e?0:e>1?1:e,o=.5>=e?e*(1+t):e+t-e*t,u=2*e-o,new mn(i(n+120),i(n),i(n-120))}function fn(n,t,e){return this instanceof fn?(this.h=+n,this.c=+t,void(this.l=+e)):arguments.length<2?n instanceof fn?new fn(n.h,n.c,n.l):n instanceof hn?gn(n.l,n.a,n.b):gn((n=Sn((n=ao.rgb(n)).r,n.g,n.b)).l,n.a,n.b):new fn(n,t,e)}function sn(n,t,e){return isNaN(n)&&(n=0),isNaN(t)&&(t=0),new hn(e,Math.cos(n*=Yo)*t,Math.sin(n)*t)}function hn(n,t,e){return this instanceof hn?(this.l=+n,this.a=+t,void(this.b=+e)):arguments.length<2?n instanceof hn?new hn(n.l,n.a,n.b):n instanceof fn?sn(n.h,n.c,n.l):Sn((n=mn(n)).r,n.g,n.b):new hn(n,t,e)}function pn(n,t,e){var r=(n+16)/116,i=r+t/500,u=r-e/200;return i=vn(i)*na,r=vn(r)*ta,u=vn(u)*ea,new mn(yn(3.2404542*i-1.5371385*r-.4985314*u),yn(-.969266*i+1.8760108*r+.041556*u),yn(.0556434*i-.2040259*r+1.0572252*u))}function gn(n,t,e){return n>0?new fn(Math.atan2(e,t)*Zo,Math.sqrt(t*t+e*e),n):new fn(NaN,NaN,n)}function vn(n){return n>.206893034?n*n*n:(n-4/29)/7.787037}function dn(n){return n>.008856?Math.pow(n,1/3):7.787037*n+4/29}function yn(n){return Math.round(255*(.00304>=n?12.92*n:1.055*Math.pow(n,1/2.4)-.055))}function mn(n,t,e){return this instanceof mn?(this.r=~~n,this.g=~~t,void(this.b=~~e)):arguments.length<2?n instanceof mn?new mn(n.r,n.g,n.b):_n(""+n,mn,cn):new mn(n,t,e)}function Mn(n){return new mn(n>>16,n>>8&255,255&n)}function xn(n){return Mn(n)+""}function bn(n){return 16>n?"0"+Math.max(0,n).toString(16):Math.min(255,n).toString(16)}function _n(n,t,e){var r,i,u,o=0,a=0,l=0;if(r=/([a-z]+)\((.*)\)/.exec(n=n.toLowerCase()))switch(i=r[2].split(","),r[1]){case"hsl":return e(parseFloat(i[0]),parseFloat(i[1])/100,parseFloat(i[2])/100);case"rgb":return t(Nn(i[0]),Nn(i[1]),Nn(i[2]))}return(u=ua.get(n))?t(u.r,u.g,u.b):(null==n||"#"!==n.charAt(0)||isNaN(u=parseInt(n.slice(1),16))||(4===n.length?(o=(3840&u)>>4,o=o>>4|o,a=240&u,a=a>>4|a,l=15&u,l=l<<4|l):7===n.length&&(o=(16711680&u)>>16,a=(65280&u)>>8,l=255&u)),t(o,a,l))}function wn(n,t,e){var r,i,u=Math.min(n/=255,t/=255,e/=255),o=Math.max(n,t,e),a=o-u,l=(o+u)/2;return a?(i=.5>l?a/(o+u):a/(2-o-u),r=n==o?(t-e)/a+(e>t?6:0):t==o?(e-n)/a+2:(n-t)/a+4,r*=60):(r=NaN,i=l>0&&1>l?0:r),new ln(r,i,l)}function Sn(n,t,e){n=kn(n),t=kn(t),e=kn(e);var r=dn((.4124564*n+.3575761*t+.1804375*e)/na),i=dn((.2126729*n+.7151522*t+.072175*e)/ta),u=dn((.0193339*n+.119192*t+.9503041*e)/ea);return hn(116*i-16,500*(r-i),200*(i-u))}function kn(n){return(n/=255)<=.04045?n/12.92:Math.pow((n+.055)/1.055,2.4)}function Nn(n){var t=parseFloat(n);return"%"===n.charAt(n.length-1)?Math.round(2.55*t):t}function En(n){return"function"==typeof n?n:function(){return n}}function An(n){return function(t,e,r){return 2===arguments.length&&"function"==typeof e&&(r=e,e=null),Cn(t,e,n,r)}}function Cn(n,t,e,r){function i(){var n,t=l.status;if(!t&&Ln(l)||t>=200&&300>t||304===t){try{n=e.call(u,l)}catch(r){return void o.error.call(u,r)}o.load.call(u,n)}else o.error.call(u,l)}var u={},o=ao.dispatch("beforesend","progress","load","error"),a={},l=new XMLHttpRequest,c=null;return!this.XDomainRequest||"withCredentials"in l||!/^(http(s)?:)?\/\//.test(n)||(l=new XDomainRequest),"onload"in l?l.onload=l.onerror=i:l.onreadystatechange=function(){l.readyState>3&&i()},l.onprogress=function(n){var t=ao.event;ao.event=n;try{o.progress.call(u,l)}finally{ao.event=t}},u.header=function(n,t){return n=(n+"").toLowerCase(),arguments.length<2?a[n]:(null==t?delete a[n]:a[n]=t+"",u)},u.mimeType=function(n){return arguments.length?(t=null==n?null:n+"",u):t},u.responseType=function(n){return arguments.length?(c=n,u):c},u.response=function(n){return e=n,u},["get","post"].forEach(function(n){u[n]=function(){return u.send.apply(u,[n].concat(co(arguments)))}}),u.send=function(e,r,i){if(2===arguments.length&&"function"==typeof r&&(i=r,r=null),l.open(e,n,!0),null==t||"accept"in a||(a.accept=t+",*/*"),l.setRequestHeader)for(var f in a)l.setRequestHeader(f,a[f]);return null!=t&&l.overrideMimeType&&l.overrideMimeType(t),null!=c&&(l.responseType=c),null!=i&&u.on("error",i).on("load",function(n){i(null,n)}),o.beforesend.call(u,l),l.send(null==r?null:r),u},u.abort=function(){return l.abort(),u},ao.rebind(u,o,"on"),null==r?u:u.get(zn(r))}function zn(n){return 1===n.length?function(t,e){n(null==t?e:null)}:n}function Ln(n){var t=n.responseType;return t&&"text"!==t?n.response:n.responseText}function qn(n,t,e){var r=arguments.length;2>r&&(t=0),3>r&&(e=Date.now());var i=e+t,u={c:n,t:i,n:null};return aa?aa.n=u:oa=u,aa=u,la||(ca=clearTimeout(ca),la=1,fa(Tn)),u}function Tn(){var n=Rn(),t=Dn()-n;t>24?(isFinite(t)&&(clearTimeout(ca),ca=setTimeout(Tn,t)),la=0):(la=1,fa(Tn))}function Rn(){for(var n=Date.now(),t=oa;t;)n>=t.t&&t.c(n-t.t)&&(t.c=null),t=t.n;return n}function Dn(){for(var n,t=oa,e=1/0;t;)t.c?(t.t<e&&(e=t.t),t=(n=t).n):t=n?n.n=t.n:oa=t.n;return aa=n,e}function Pn(n,t){return t-(n?Math.ceil(Math.log(n)/Math.LN10):1)}function Un(n,t){var e=Math.pow(10,3*xo(8-t));return{scale:t>8?function(n){return n/e}:function(n){return n*e},symbol:n}}function jn(n){var t=n.decimal,e=n.thousands,r=n.grouping,i=n.currency,u=r&&e?function(n,t){for(var i=n.length,u=[],o=0,a=r[0],l=0;i>0&&a>0&&(l+a+1>t&&(a=Math.max(1,t-l)),u.push(n.substring(i-=a,i+a)),!((l+=a+1)>t));)a=r[o=(o+1)%r.length];return u.reverse().join(e)}:m;return function(n){var e=ha.exec(n),r=e[1]||" ",o=e[2]||">",a=e[3]||"-",l=e[4]||"",c=e[5],f=+e[6],s=e[7],h=e[8],p=e[9],g=1,v="",d="",y=!1,m=!0;switch(h&&(h=+h.substring(1)),(c||"0"===r&&"="===o)&&(c=r="0",o="="),p){case"n":s=!0,p="g";break;case"%":g=100,d="%",p="f";break;case"p":g=100,d="%",p="r";break;case"b":case"o":case"x":case"X":"#"===l&&(v="0"+p.toLowerCase());case"c":m=!1;case"d":y=!0,h=0;break;case"s":g=-1,p="r"}"$"===l&&(v=i[0],d=i[1]),"r"!=p||h||(p="g"),null!=h&&("g"==p?h=Math.max(1,Math.min(21,h)):"e"!=p&&"f"!=p||(h=Math.max(0,Math.min(20,h)))),p=pa.get(p)||Fn;var M=c&&s;return function(n){var e=d;if(y&&n%1)return"";var i=0>n||0===n&&0>1/n?(n=-n,"-"):"-"===a?"":a;if(0>g){var l=ao.formatPrefix(n,h);n=l.scale(n),e=l.symbol+d}else n*=g;n=p(n,h);var x,b,_=n.lastIndexOf(".");if(0>_){var w=m?n.lastIndexOf("e"):-1;0>w?(x=n,b=""):(x=n.substring(0,w),b=n.substring(w))}else x=n.substring(0,_),b=t+n.substring(_+1);!c&&s&&(x=u(x,1/0));var S=v.length+x.length+b.length+(M?0:i.length),k=f>S?new Array(S=f-S+1).join(r):"";return M&&(x=u(k+x,k.length?f-b.length:1/0)),i+=v,n=x+b,("<"===o?i+n+k:">"===o?k+i+n:"^"===o?k.substring(0,S>>=1)+i+n+k.substring(S):i+(M?n:k+n))+e}}}function Fn(n){return n+""}function Hn(){this._=new Date(arguments.length>1?Date.UTC.apply(this,arguments):arguments[0])}function On(n,t,e){function r(t){var e=n(t),r=u(e,1);return r-t>t-e?e:r}function i(e){return t(e=n(new va(e-1)),1),e}function u(n,e){return t(n=new va(+n),e),n}function o(n,r,u){var o=i(n),a=[];if(u>1)for(;r>o;)e(o)%u||a.push(new Date(+o)),t(o,1);else for(;r>o;)a.push(new Date(+o)),t(o,1);return a}function a(n,t,e){try{va=Hn;var r=new Hn;return r._=n,o(r,t,e)}finally{va=Date}}n.floor=n,n.round=r,n.ceil=i,n.offset=u,n.range=o;var l=n.utc=In(n);return l.floor=l,l.round=In(r),l.ceil=In(i),l.offset=In(u),l.range=a,n}function In(n){return function(t,e){try{va=Hn;var r=new Hn;return r._=t,n(r,e)._}finally{va=Date}}}function Yn(n){function t(n){function t(t){for(var e,i,u,o=[],a=-1,l=0;++a<r;)37===n.charCodeAt(a)&&(o.push(n.slice(l,a)),null!=(i=ya[e=n.charAt(++a)])&&(e=n.charAt(++a)),(u=A[e])&&(e=u(t,null==i?"e"===e?" ":"0":i)),o.push(e),l=a+1);return o.push(n.slice(l,a)),o.join("")}var r=n.length;return t.parse=function(t){var r={y:1900,m:0,d:1,H:0,M:0,S:0,L:0,Z:null},i=e(r,n,t,0);if(i!=t.length)return null;"p"in r&&(r.H=r.H%12+12*r.p);var u=null!=r.Z&&va!==Hn,o=new(u?Hn:va);return"j"in r?o.setFullYear(r.y,0,r.j):"W"in r||"U"in r?("w"in r||(r.w="W"in r?1:0),o.setFullYear(r.y,0,1),o.setFullYear(r.y,0,"W"in r?(r.w+6)%7+7*r.W-(o.getDay()+5)%7:r.w+7*r.U-(o.getDay()+6)%7)):o.setFullYear(r.y,r.m,r.d),o.setHours(r.H+(r.Z/100|0),r.M+r.Z%100,r.S,r.L),u?o._:o},t.toString=function(){return n},t}function e(n,t,e,r){for(var i,u,o,a=0,l=t.length,c=e.length;l>a;){if(r>=c)return-1;if(i=t.charCodeAt(a++),37===i){if(o=t.charAt(a++),u=C[o in ya?t.charAt(a++):o],!u||(r=u(n,e,r))<0)return-1}else if(i!=e.charCodeAt(r++))return-1}return r}function r(n,t,e){_.lastIndex=0;var r=_.exec(t.slice(e));return r?(n.w=w.get(r[0].toLowerCase()),e+r[0].length):-1}function i(n,t,e){x.lastIndex=0;var r=x.exec(t.slice(e));return r?(n.w=b.get(r[0].toLowerCase()),e+r[0].length):-1}function u(n,t,e){N.lastIndex=0;var r=N.exec(t.slice(e));return r?(n.m=E.get(r[0].toLowerCase()),e+r[0].length):-1}function o(n,t,e){S.lastIndex=0;var r=S.exec(t.slice(e));return r?(n.m=k.get(r[0].toLowerCase()),e+r[0].length):-1}function a(n,t,r){return e(n,A.c.toString(),t,r)}function l(n,t,r){return e(n,A.x.toString(),t,r)}function c(n,t,r){return e(n,A.X.toString(),t,r)}function f(n,t,e){var r=M.get(t.slice(e,e+=2).toLowerCase());return null==r?-1:(n.p=r,e)}var s=n.dateTime,h=n.date,p=n.time,g=n.periods,v=n.days,d=n.shortDays,y=n.months,m=n.shortMonths;t.utc=function(n){function e(n){try{va=Hn;var t=new va;return t._=n,r(t)}finally{va=Date}}var r=t(n);return e.parse=function(n){try{va=Hn;var t=r.parse(n);return t&&t._}finally{va=Date}},e.toString=r.toString,e},t.multi=t.utc.multi=ct;var M=ao.map(),x=Vn(v),b=Xn(v),_=Vn(d),w=Xn(d),S=Vn(y),k=Xn(y),N=Vn(m),E=Xn(m);g.forEach(function(n,t){M.set(n.toLowerCase(),t)});var A={a:function(n){return d[n.getDay()]},A:function(n){return v[n.getDay()]},b:function(n){return m[n.getMonth()]},B:function(n){return y[n.getMonth()]},c:t(s),d:function(n,t){return Zn(n.getDate(),t,2)},e:function(n,t){return Zn(n.getDate(),t,2)},H:function(n,t){return Zn(n.getHours(),t,2)},I:function(n,t){return Zn(n.getHours()%12||12,t,2)},j:function(n,t){return Zn(1+ga.dayOfYear(n),t,3)},L:function(n,t){return Zn(n.getMilliseconds(),t,3)},m:function(n,t){return Zn(n.getMonth()+1,t,2)},M:function(n,t){return Zn(n.getMinutes(),t,2)},p:function(n){return g[+(n.getHours()>=12)]},S:function(n,t){return Zn(n.getSeconds(),t,2)},U:function(n,t){return Zn(ga.sundayOfYear(n),t,2)},w:function(n){return n.getDay()},W:function(n,t){return Zn(ga.mondayOfYear(n),t,2)},x:t(h),X:t(p),y:function(n,t){return Zn(n.getFullYear()%100,t,2)},Y:function(n,t){return Zn(n.getFullYear()%1e4,t,4)},Z:at,"%":function(){return"%"}},C={a:r,A:i,b:u,B:o,c:a,d:tt,e:tt,H:rt,I:rt,j:et,L:ot,m:nt,M:it,p:f,S:ut,U:Bn,w:$n,W:Wn,x:l,X:c,y:Gn,Y:Jn,Z:Kn,"%":lt};return t}function Zn(n,t,e){var r=0>n?"-":"",i=(r?-n:n)+"",u=i.length;return r+(e>u?new Array(e-u+1).join(t)+i:i)}function Vn(n){return new RegExp("^(?:"+n.map(ao.requote).join("|")+")","i")}function Xn(n){for(var t=new c,e=-1,r=n.length;++e<r;)t.set(n[e].toLowerCase(),e);return t}function $n(n,t,e){ma.lastIndex=0;var r=ma.exec(t.slice(e,e+1));return r?(n.w=+r[0],e+r[0].length):-1}function Bn(n,t,e){ma.lastIndex=0;var r=ma.exec(t.slice(e));return r?(n.U=+r[0],e+r[0].length):-1}function Wn(n,t,e){ma.lastIndex=0;var r=ma.exec(t.slice(e));return r?(n.W=+r[0],e+r[0].length):-1}function Jn(n,t,e){ma.lastIndex=0;var r=ma.exec(t.slice(e,e+4));return r?(n.y=+r[0],e+r[0].length):-1}function Gn(n,t,e){ma.lastIndex=0;var r=ma.exec(t.slice(e,e+2));return r?(n.y=Qn(+r[0]),e+r[0].length):-1}function Kn(n,t,e){return/^[+-]\d{4}$/.test(t=t.slice(e,e+5))?(n.Z=-t,e+5):-1}function Qn(n){return n+(n>68?1900:2e3)}function nt(n,t,e){ma.lastIndex=0;var r=ma.exec(t.slice(e,e+2));return r?(n.m=r[0]-1,e+r[0].length):-1}function tt(n,t,e){ma.lastIndex=0;var r=ma.exec(t.slice(e,e+2));return r?(n.d=+r[0],e+r[0].length):-1}function et(n,t,e){ma.lastIndex=0;var r=ma.exec(t.slice(e,e+3));return r?(n.j=+r[0],e+r[0].length):-1}function rt(n,t,e){ma.lastIndex=0;var r=ma.exec(t.slice(e,e+2));return r?(n.H=+r[0],e+r[0].length):-1}function it(n,t,e){ma.lastIndex=0;var r=ma.exec(t.slice(e,e+2));return r?(n.M=+r[0],e+r[0].length):-1}function ut(n,t,e){ma.lastIndex=0;var r=ma.exec(t.slice(e,e+2));return r?(n.S=+r[0],e+r[0].length):-1}function ot(n,t,e){ma.lastIndex=0;var r=ma.exec(t.slice(e,e+3));return r?(n.L=+r[0],e+r[0].length):-1}function at(n){var t=n.getTimezoneOffset(),e=t>0?"-":"+",r=xo(t)/60|0,i=xo(t)%60;return e+Zn(r,"0",2)+Zn(i,"0",2)}function lt(n,t,e){Ma.lastIndex=0;var r=Ma.exec(t.slice(e,e+1));return r?e+r[0].length:-1}function ct(n){for(var t=n.length,e=-1;++e<t;)n[e][0]=this(n[e][0]);return function(t){for(var e=0,r=n[e];!r[1](t);)r=n[++e];return r[0](t)}}function ft(){}function st(n,t,e){var r=e.s=n+t,i=r-n,u=r-i;e.t=n-u+(t-i)}function ht(n,t){n&&wa.hasOwnProperty(n.type)&&wa[n.type](n,t)}function pt(n,t,e){var r,i=-1,u=n.length-e;for(t.lineStart();++i<u;)r=n[i],t.point(r[0],r[1],r[2]);t.lineEnd()}function gt(n,t){var e=-1,r=n.length;for(t.polygonStart();++e<r;)pt(n[e],t,1);t.polygonEnd()}function vt(){function n(n,t){n*=Yo,t=t*Yo/2+Fo/4;var e=n-r,o=e>=0?1:-1,a=o*e,l=Math.cos(t),c=Math.sin(t),f=u*c,s=i*l+f*Math.cos(a),h=f*o*Math.sin(a);ka.add(Math.atan2(h,s)),r=n,i=l,u=c}var t,e,r,i,u;Na.point=function(o,a){Na.point=n,r=(t=o)*Yo,i=Math.cos(a=(e=a)*Yo/2+Fo/4),u=Math.sin(a)},Na.lineEnd=function(){n(t,e)}}function dt(n){var t=n[0],e=n[1],r=Math.cos(e);return[r*Math.cos(t),r*Math.sin(t),Math.sin(e)]}function yt(n,t){return n[0]*t[0]+n[1]*t[1]+n[2]*t[2]}function mt(n,t){return[n[1]*t[2]-n[2]*t[1],n[2]*t[0]-n[0]*t[2],n[0]*t[1]-n[1]*t[0]]}function Mt(n,t){n[0]+=t[0],n[1]+=t[1],n[2]+=t[2]}function xt(n,t){return[n[0]*t,n[1]*t,n[2]*t]}function bt(n){var t=Math.sqrt(n[0]*n[0]+n[1]*n[1]+n[2]*n[2]);n[0]/=t,n[1]/=t,n[2]/=t}function _t(n){return[Math.atan2(n[1],n[0]),tn(n[2])]}function wt(n,t){return xo(n[0]-t[0])<Uo&&xo(n[1]-t[1])<Uo}function St(n,t){n*=Yo;var e=Math.cos(t*=Yo);kt(e*Math.cos(n),e*Math.sin(n),Math.sin(t))}function kt(n,t,e){++Ea,Ca+=(n-Ca)/Ea,za+=(t-za)/Ea,La+=(e-La)/Ea}function Nt(){function n(n,i){n*=Yo;var u=Math.cos(i*=Yo),o=u*Math.cos(n),a=u*Math.sin(n),l=Math.sin(i),c=Math.atan2(Math.sqrt((c=e*l-r*a)*c+(c=r*o-t*l)*c+(c=t*a-e*o)*c),t*o+e*a+r*l);Aa+=c,qa+=c*(t+(t=o)),Ta+=c*(e+(e=a)),Ra+=c*(r+(r=l)),kt(t,e,r)}var t,e,r;ja.point=function(i,u){i*=Yo;var o=Math.cos(u*=Yo);t=o*Math.cos(i),e=o*Math.sin(i),r=Math.sin(u),ja.point=n,kt(t,e,r)}}function Et(){ja.point=St}function At(){function n(n,t){n*=Yo;var e=Math.cos(t*=Yo),o=e*Math.cos(n),a=e*Math.sin(n),l=Math.sin(t),c=i*l-u*a,f=u*o-r*l,s=r*a-i*o,h=Math.sqrt(c*c+f*f+s*s),p=r*o+i*a+u*l,g=h&&-nn(p)/h,v=Math.atan2(h,p);Da+=g*c,Pa+=g*f,Ua+=g*s,Aa+=v,qa+=v*(r+(r=o)),Ta+=v*(i+(i=a)),Ra+=v*(u+(u=l)),kt(r,i,u)}var t,e,r,i,u;ja.point=function(o,a){t=o,e=a,ja.point=n,o*=Yo;var l=Math.cos(a*=Yo);r=l*Math.cos(o),i=l*Math.sin(o),u=Math.sin(a),kt(r,i,u)},ja.lineEnd=function(){n(t,e),ja.lineEnd=Et,ja.point=St}}function Ct(n,t){function e(e,r){return e=n(e,r),t(e[0],e[1])}return n.invert&&t.invert&&(e.invert=function(e,r){return e=t.invert(e,r),e&&n.invert(e[0],e[1])}),e}function zt(){return!0}function Lt(n,t,e,r,i){var u=[],o=[];if(n.forEach(function(n){if(!((t=n.length-1)<=0)){var t,e=n[0],r=n[t];if(wt(e,r)){i.lineStart();for(var a=0;t>a;++a)i.point((e=n[a])[0],e[1]);return void i.lineEnd()}var l=new Tt(e,n,null,!0),c=new Tt(e,null,l,!1);l.o=c,u.push(l),o.push(c),l=new Tt(r,n,null,!1),c=new Tt(r,null,l,!0),l.o=c,u.push(l),o.push(c)}}),o.sort(t),qt(u),qt(o),u.length){for(var a=0,l=e,c=o.length;c>a;++a)o[a].e=l=!l;for(var f,s,h=u[0];;){for(var p=h,g=!0;p.v;)if((p=p.n)===h)return;f=p.z,i.lineStart();do{if(p.v=p.o.v=!0,p.e){if(g)for(var a=0,c=f.length;c>a;++a)i.point((s=f[a])[0],s[1]);else r(p.x,p.n.x,1,i);p=p.n}else{if(g){f=p.p.z;for(var a=f.length-1;a>=0;--a)i.point((s=f[a])[0],s[1])}else r(p.x,p.p.x,-1,i);p=p.p}p=p.o,f=p.z,g=!g}while(!p.v);i.lineEnd()}}}function qt(n){if(t=n.length){for(var t,e,r=0,i=n[0];++r<t;)i.n=e=n[r],e.p=i,i=e;i.n=e=n[0],e.p=i}}function Tt(n,t,e,r){this.x=n,this.z=t,this.o=e,this.e=r,this.v=!1,this.n=this.p=null}function Rt(n,t,e,r){return function(i,u){function o(t,e){var r=i(t,e);n(t=r[0],e=r[1])&&u.point(t,e)}function a(n,t){var e=i(n,t);d.point(e[0],e[1])}function l(){m.point=a,d.lineStart()}function c(){m.point=o,d.lineEnd()}function f(n,t){v.push([n,t]);var e=i(n,t);x.point(e[0],e[1])}function s(){x.lineStart(),v=[]}function h(){f(v[0][0],v[0][1]),x.lineEnd();var n,t=x.clean(),e=M.buffer(),r=e.length;if(v.pop(),g.push(v),v=null,r)if(1&t){n=e[0];var i,r=n.length-1,o=-1;if(r>0){for(b||(u.polygonStart(),b=!0),u.lineStart();++o<r;)u.point((i=n[o])[0],i[1]);u.lineEnd()}}else r>1&&2&t&&e.push(e.pop().concat(e.shift())),p.push(e.filter(Dt))}var p,g,v,d=t(u),y=i.invert(r[0],r[1]),m={point:o,lineStart:l,lineEnd:c,polygonStart:function(){m.point=f,m.lineStart=s,m.lineEnd=h,p=[],g=[]},polygonEnd:function(){m.point=o,m.lineStart=l,m.lineEnd=c,p=ao.merge(p);var n=Ot(y,g);p.length?(b||(u.polygonStart(),b=!0),Lt(p,Ut,n,e,u)):n&&(b||(u.polygonStart(),b=!0),u.lineStart(),e(null,null,1,u),u.lineEnd()),b&&(u.polygonEnd(),b=!1),p=g=null},sphere:function(){u.polygonStart(),u.lineStart(),e(null,null,1,u),u.lineEnd(),u.polygonEnd()}},M=Pt(),x=t(M),b=!1;return m}}function Dt(n){return n.length>1}function Pt(){var n,t=[];return{lineStart:function(){t.push(n=[])},point:function(t,e){n.push([t,e])},lineEnd:b,buffer:function(){var e=t;return t=[],n=null,e},rejoin:function(){t.length>1&&t.push(t.pop().concat(t.shift()))}}}function Ut(n,t){return((n=n.x)[0]<0?n[1]-Io-Uo:Io-n[1])-((t=t.x)[0]<0?t[1]-Io-Uo:Io-t[1])}function jt(n){var t,e=NaN,r=NaN,i=NaN;return{lineStart:function(){n.lineStart(),t=1},point:function(u,o){var a=u>0?Fo:-Fo,l=xo(u-e);xo(l-Fo)<Uo?(n.point(e,r=(r+o)/2>0?Io:-Io),n.point(i,r),n.lineEnd(),n.lineStart(),n.point(a,r),n.point(u,r),t=0):i!==a&&l>=Fo&&(xo(e-i)<Uo&&(e-=i*Uo),xo(u-a)<Uo&&(u-=a*Uo),r=Ft(e,r,u,o),n.point(i,r),n.lineEnd(),n.lineStart(),n.point(a,r),t=0),n.point(e=u,r=o),i=a},lineEnd:function(){n.lineEnd(),e=r=NaN},clean:function(){return 2-t}}}function Ft(n,t,e,r){var i,u,o=Math.sin(n-e);return xo(o)>Uo?Math.atan((Math.sin(t)*(u=Math.cos(r))*Math.sin(e)-Math.sin(r)*(i=Math.cos(t))*Math.sin(n))/(i*u*o)):(t+r)/2}function Ht(n,t,e,r){var i;if(null==n)i=e*Io,r.point(-Fo,i),r.point(0,i),r.point(Fo,i),r.point(Fo,0),r.point(Fo,-i),r.point(0,-i),r.point(-Fo,-i),r.point(-Fo,0),r.point(-Fo,i);else if(xo(n[0]-t[0])>Uo){var u=n[0]<t[0]?Fo:-Fo;i=e*u/2,r.point(-u,i),r.point(0,i),r.point(u,i)}else r.point(t[0],t[1])}function Ot(n,t){var e=n[0],r=n[1],i=[Math.sin(e),-Math.cos(e),0],u=0,o=0;ka.reset();for(var a=0,l=t.length;l>a;++a){var c=t[a],f=c.length;if(f)for(var s=c[0],h=s[0],p=s[1]/2+Fo/4,g=Math.sin(p),v=Math.cos(p),d=1;;){d===f&&(d=0),n=c[d];var y=n[0],m=n[1]/2+Fo/4,M=Math.sin(m),x=Math.cos(m),b=y-h,_=b>=0?1:-1,w=_*b,S=w>Fo,k=g*M;if(ka.add(Math.atan2(k*_*Math.sin(w),v*x+k*Math.cos(w))),u+=S?b+_*Ho:b,S^h>=e^y>=e){var N=mt(dt(s),dt(n));bt(N);var E=mt(i,N);bt(E);var A=(S^b>=0?-1:1)*tn(E[2]);(r>A||r===A&&(N[0]||N[1]))&&(o+=S^b>=0?1:-1)}if(!d++)break;h=y,g=M,v=x,s=n}}return(-Uo>u||Uo>u&&-Uo>ka)^1&o}function It(n){function t(n,t){return Math.cos(n)*Math.cos(t)>u}function e(n){var e,u,l,c,f;return{lineStart:function(){c=l=!1,f=1},point:function(s,h){var p,g=[s,h],v=t(s,h),d=o?v?0:i(s,h):v?i(s+(0>s?Fo:-Fo),h):0;if(!e&&(c=l=v)&&n.lineStart(),v!==l&&(p=r(e,g),(wt(e,p)||wt(g,p))&&(g[0]+=Uo,g[1]+=Uo,v=t(g[0],g[1]))),v!==l)f=0,v?(n.lineStart(),p=r(g,e),n.point(p[0],p[1])):(p=r(e,g),n.point(p[0],p[1]),n.lineEnd()),e=p;else if(a&&e&&o^v){var y;d&u||!(y=r(g,e,!0))||(f=0,o?(n.lineStart(),n.point(y[0][0],y[0][1]),n.point(y[1][0],y[1][1]),n.lineEnd()):(n.point(y[1][0],y[1][1]),n.lineEnd(),n.lineStart(),n.point(y[0][0],y[0][1])))}!v||e&&wt(e,g)||n.point(g[0],g[1]),e=g,l=v,u=d},lineEnd:function(){l&&n.lineEnd(),e=null},clean:function(){return f|(c&&l)<<1}}}function r(n,t,e){var r=dt(n),i=dt(t),o=[1,0,0],a=mt(r,i),l=yt(a,a),c=a[0],f=l-c*c;if(!f)return!e&&n;var s=u*l/f,h=-u*c/f,p=mt(o,a),g=xt(o,s),v=xt(a,h);Mt(g,v);var d=p,y=yt(g,d),m=yt(d,d),M=y*y-m*(yt(g,g)-1);if(!(0>M)){var x=Math.sqrt(M),b=xt(d,(-y-x)/m);if(Mt(b,g),b=_t(b),!e)return b;var _,w=n[0],S=t[0],k=n[1],N=t[1];w>S&&(_=w,w=S,S=_);var E=S-w,A=xo(E-Fo)<Uo,C=A||Uo>E;if(!A&&k>N&&(_=k,k=N,N=_),C?A?k+N>0^b[1]<(xo(b[0]-w)<Uo?k:N):k<=b[1]&&b[1]<=N:E>Fo^(w<=b[0]&&b[0]<=S)){var z=xt(d,(-y+x)/m);return Mt(z,g),[b,_t(z)]}}}function i(t,e){var r=o?n:Fo-n,i=0;return-r>t?i|=1:t>r&&(i|=2),-r>e?i|=4:e>r&&(i|=8),i}var u=Math.cos(n),o=u>0,a=xo(u)>Uo,l=ve(n,6*Yo);return Rt(t,e,l,o?[0,-n]:[-Fo,n-Fo])}function Yt(n,t,e,r){return function(i){var u,o=i.a,a=i.b,l=o.x,c=o.y,f=a.x,s=a.y,h=0,p=1,g=f-l,v=s-c;if(u=n-l,g||!(u>0)){if(u/=g,0>g){if(h>u)return;p>u&&(p=u)}else if(g>0){if(u>p)return;u>h&&(h=u)}if(u=e-l,g||!(0>u)){if(u/=g,0>g){if(u>p)return;u>h&&(h=u)}else if(g>0){if(h>u)return;p>u&&(p=u)}if(u=t-c,v||!(u>0)){if(u/=v,0>v){if(h>u)return;p>u&&(p=u)}else if(v>0){if(u>p)return;u>h&&(h=u)}if(u=r-c,v||!(0>u)){if(u/=v,0>v){if(u>p)return;u>h&&(h=u)}else if(v>0){if(h>u)return;p>u&&(p=u)}return h>0&&(i.a={x:l+h*g,y:c+h*v}),1>p&&(i.b={x:l+p*g,y:c+p*v}),i}}}}}}function Zt(n,t,e,r){function i(r,i){return xo(r[0]-n)<Uo?i>0?0:3:xo(r[0]-e)<Uo?i>0?2:1:xo(r[1]-t)<Uo?i>0?1:0:i>0?3:2}function u(n,t){return o(n.x,t.x)}function o(n,t){var e=i(n,1),r=i(t,1);return e!==r?e-r:0===e?t[1]-n[1]:1===e?n[0]-t[0]:2===e?n[1]-t[1]:t[0]-n[0]}return function(a){function l(n){for(var t=0,e=d.length,r=n[1],i=0;e>i;++i)for(var u,o=1,a=d[i],l=a.length,c=a[0];l>o;++o)u=a[o],c[1]<=r?u[1]>r&&Q(c,u,n)>0&&++t:u[1]<=r&&Q(c,u,n)<0&&--t,c=u;return 0!==t}function c(u,a,l,c){var f=0,s=0;if(null==u||(f=i(u,l))!==(s=i(a,l))||o(u,a)<0^l>0){do c.point(0===f||3===f?n:e,f>1?r:t);while((f=(f+l+4)%4)!==s)}else c.point(a[0],a[1])}function f(i,u){return i>=n&&e>=i&&u>=t&&r>=u}function s(n,t){f(n,t)&&a.point(n,t)}function h(){C.point=g,d&&d.push(y=[]),S=!0,w=!1,b=_=NaN}function p(){v&&(g(m,M),x&&w&&E.rejoin(),v.push(E.buffer())),C.point=s,w&&a.lineEnd()}function g(n,t){n=Math.max(-Ha,Math.min(Ha,n)),t=Math.max(-Ha,Math.min(Ha,t));var e=f(n,t);if(d&&y.push([n,t]),S)m=n,M=t,x=e,S=!1,e&&(a.lineStart(),a.point(n,t));else if(e&&w)a.point(n,t);else{var r={a:{x:b,y:_},b:{x:n,y:t}};A(r)?(w||(a.lineStart(),a.point(r.a.x,r.a.y)),a.point(r.b.x,r.b.y),e||a.lineEnd(),k=!1):e&&(a.lineStart(),a.point(n,t),k=!1)}b=n,_=t,w=e}var v,d,y,m,M,x,b,_,w,S,k,N=a,E=Pt(),A=Yt(n,t,e,r),C={point:s,lineStart:h,lineEnd:p,polygonStart:function(){a=E,v=[],d=[],k=!0},polygonEnd:function(){a=N,v=ao.merge(v);var t=l([n,r]),e=k&&t,i=v.length;(e||i)&&(a.polygonStart(),e&&(a.lineStart(),c(null,null,1,a),a.lineEnd()),i&&Lt(v,u,t,c,a),a.polygonEnd()),v=d=y=null}};return C}}function Vt(n){var t=0,e=Fo/3,r=ae(n),i=r(t,e);return i.parallels=function(n){return arguments.length?r(t=n[0]*Fo/180,e=n[1]*Fo/180):[t/Fo*180,e/Fo*180]},i}function Xt(n,t){function e(n,t){var e=Math.sqrt(u-2*i*Math.sin(t))/i;return[e*Math.sin(n*=i),o-e*Math.cos(n)]}var r=Math.sin(n),i=(r+Math.sin(t))/2,u=1+r*(2*i-r),o=Math.sqrt(u)/i;return e.invert=function(n,t){var e=o-t;return[Math.atan2(n,e)/i,tn((u-(n*n+e*e)*i*i)/(2*i))]},e}function $t(){function n(n,t){Ia+=i*n-r*t,r=n,i=t}var t,e,r,i;$a.point=function(u,o){$a.point=n,t=r=u,e=i=o},$a.lineEnd=function(){n(t,e)}}function Bt(n,t){Ya>n&&(Ya=n),n>Va&&(Va=n),Za>t&&(Za=t),t>Xa&&(Xa=t)}function Wt(){function n(n,t){o.push("M",n,",",t,u)}function t(n,t){o.push("M",n,",",t),a.point=e}function e(n,t){o.push("L",n,",",t)}function r(){a.point=n}function i(){o.push("Z")}var u=Jt(4.5),o=[],a={point:n,lineStart:function(){a.point=t},lineEnd:r,polygonStart:function(){a.lineEnd=i},polygonEnd:function(){a.lineEnd=r,a.point=n},pointRadius:function(n){return u=Jt(n),a},result:function(){if(o.length){var n=o.join("");return o=[],n}}};return a}function Jt(n){return"m0,"+n+"a"+n+","+n+" 0 1,1 0,"+-2*n+"a"+n+","+n+" 0 1,1 0,"+2*n+"z"}function Gt(n,t){Ca+=n,za+=t,++La}function Kt(){function n(n,r){var i=n-t,u=r-e,o=Math.sqrt(i*i+u*u);qa+=o*(t+n)/2,Ta+=o*(e+r)/2,Ra+=o,Gt(t=n,e=r)}var t,e;Wa.point=function(r,i){Wa.point=n,Gt(t=r,e=i)}}function Qt(){Wa.point=Gt}function ne(){function n(n,t){var e=n-r,u=t-i,o=Math.sqrt(e*e+u*u);qa+=o*(r+n)/2,Ta+=o*(i+t)/2,Ra+=o,o=i*n-r*t,Da+=o*(r+n),Pa+=o*(i+t),Ua+=3*o,Gt(r=n,i=t)}var t,e,r,i;Wa.point=function(u,o){Wa.point=n,Gt(t=r=u,e=i=o)},Wa.lineEnd=function(){n(t,e)}}function te(n){function t(t,e){n.moveTo(t+o,e),n.arc(t,e,o,0,Ho)}function e(t,e){n.moveTo(t,e),a.point=r}function r(t,e){n.lineTo(t,e)}function i(){a.point=t}function u(){n.closePath()}var o=4.5,a={point:t,lineStart:function(){a.point=e},lineEnd:i,polygonStart:function(){a.lineEnd=u},polygonEnd:function(){a.lineEnd=i,a.point=t},pointRadius:function(n){return o=n,a},result:b};return a}function ee(n){function t(n){return(a?r:e)(n)}function e(t){return ue(t,function(e,r){e=n(e,r),t.point(e[0],e[1])})}function r(t){function e(e,r){e=n(e,r),t.point(e[0],e[1])}function r(){M=NaN,S.point=u,t.lineStart()}function u(e,r){var u=dt([e,r]),o=n(e,r);i(M,x,m,b,_,w,M=o[0],x=o[1],m=e,b=u[0],_=u[1],w=u[2],a,t),t.point(M,x)}function o(){S.point=e,t.lineEnd()}function l(){
+r(),S.point=c,S.lineEnd=f}function c(n,t){u(s=n,h=t),p=M,g=x,v=b,d=_,y=w,S.point=u}function f(){i(M,x,m,b,_,w,p,g,s,v,d,y,a,t),S.lineEnd=o,o()}var s,h,p,g,v,d,y,m,M,x,b,_,w,S={point:e,lineStart:r,lineEnd:o,polygonStart:function(){t.polygonStart(),S.lineStart=l},polygonEnd:function(){t.polygonEnd(),S.lineStart=r}};return S}function i(t,e,r,a,l,c,f,s,h,p,g,v,d,y){var m=f-t,M=s-e,x=m*m+M*M;if(x>4*u&&d--){var b=a+p,_=l+g,w=c+v,S=Math.sqrt(b*b+_*_+w*w),k=Math.asin(w/=S),N=xo(xo(w)-1)<Uo||xo(r-h)<Uo?(r+h)/2:Math.atan2(_,b),E=n(N,k),A=E[0],C=E[1],z=A-t,L=C-e,q=M*z-m*L;(q*q/x>u||xo((m*z+M*L)/x-.5)>.3||o>a*p+l*g+c*v)&&(i(t,e,r,a,l,c,A,C,N,b/=S,_/=S,w,d,y),y.point(A,C),i(A,C,N,b,_,w,f,s,h,p,g,v,d,y))}}var u=.5,o=Math.cos(30*Yo),a=16;return t.precision=function(n){return arguments.length?(a=(u=n*n)>0&&16,t):Math.sqrt(u)},t}function re(n){var t=ee(function(t,e){return n([t*Zo,e*Zo])});return function(n){return le(t(n))}}function ie(n){this.stream=n}function ue(n,t){return{point:t,sphere:function(){n.sphere()},lineStart:function(){n.lineStart()},lineEnd:function(){n.lineEnd()},polygonStart:function(){n.polygonStart()},polygonEnd:function(){n.polygonEnd()}}}function oe(n){return ae(function(){return n})()}function ae(n){function t(n){return n=a(n[0]*Yo,n[1]*Yo),[n[0]*h+l,c-n[1]*h]}function e(n){return n=a.invert((n[0]-l)/h,(c-n[1])/h),n&&[n[0]*Zo,n[1]*Zo]}function r(){a=Ct(o=se(y,M,x),u);var n=u(v,d);return l=p-n[0]*h,c=g+n[1]*h,i()}function i(){return f&&(f.valid=!1,f=null),t}var u,o,a,l,c,f,s=ee(function(n,t){return n=u(n,t),[n[0]*h+l,c-n[1]*h]}),h=150,p=480,g=250,v=0,d=0,y=0,M=0,x=0,b=Fa,_=m,w=null,S=null;return t.stream=function(n){return f&&(f.valid=!1),f=le(b(o,s(_(n)))),f.valid=!0,f},t.clipAngle=function(n){return arguments.length?(b=null==n?(w=n,Fa):It((w=+n)*Yo),i()):w},t.clipExtent=function(n){return arguments.length?(S=n,_=n?Zt(n[0][0],n[0][1],n[1][0],n[1][1]):m,i()):S},t.scale=function(n){return arguments.length?(h=+n,r()):h},t.translate=function(n){return arguments.length?(p=+n[0],g=+n[1],r()):[p,g]},t.center=function(n){return arguments.length?(v=n[0]%360*Yo,d=n[1]%360*Yo,r()):[v*Zo,d*Zo]},t.rotate=function(n){return arguments.length?(y=n[0]%360*Yo,M=n[1]%360*Yo,x=n.length>2?n[2]%360*Yo:0,r()):[y*Zo,M*Zo,x*Zo]},ao.rebind(t,s,"precision"),function(){return u=n.apply(this,arguments),t.invert=u.invert&&e,r()}}function le(n){return ue(n,function(t,e){n.point(t*Yo,e*Yo)})}function ce(n,t){return[n,t]}function fe(n,t){return[n>Fo?n-Ho:-Fo>n?n+Ho:n,t]}function se(n,t,e){return n?t||e?Ct(pe(n),ge(t,e)):pe(n):t||e?ge(t,e):fe}function he(n){return function(t,e){return t+=n,[t>Fo?t-Ho:-Fo>t?t+Ho:t,e]}}function pe(n){var t=he(n);return t.invert=he(-n),t}function ge(n,t){function e(n,t){var e=Math.cos(t),a=Math.cos(n)*e,l=Math.sin(n)*e,c=Math.sin(t),f=c*r+a*i;return[Math.atan2(l*u-f*o,a*r-c*i),tn(f*u+l*o)]}var r=Math.cos(n),i=Math.sin(n),u=Math.cos(t),o=Math.sin(t);return e.invert=function(n,t){var e=Math.cos(t),a=Math.cos(n)*e,l=Math.sin(n)*e,c=Math.sin(t),f=c*u-l*o;return[Math.atan2(l*u+c*o,a*r+f*i),tn(f*r-a*i)]},e}function ve(n,t){var e=Math.cos(n),r=Math.sin(n);return function(i,u,o,a){var l=o*t;null!=i?(i=de(e,i),u=de(e,u),(o>0?u>i:i>u)&&(i+=o*Ho)):(i=n+o*Ho,u=n-.5*l);for(var c,f=i;o>0?f>u:u>f;f-=l)a.point((c=_t([e,-r*Math.cos(f),-r*Math.sin(f)]))[0],c[1])}}function de(n,t){var e=dt(t);e[0]-=n,bt(e);var r=nn(-e[1]);return((-e[2]<0?-r:r)+2*Math.PI-Uo)%(2*Math.PI)}function ye(n,t,e){var r=ao.range(n,t-Uo,e).concat(t);return function(n){return r.map(function(t){return[n,t]})}}function me(n,t,e){var r=ao.range(n,t-Uo,e).concat(t);return function(n){return r.map(function(t){return[t,n]})}}function Me(n){return n.source}function xe(n){return n.target}function be(n,t,e,r){var i=Math.cos(t),u=Math.sin(t),o=Math.cos(r),a=Math.sin(r),l=i*Math.cos(n),c=i*Math.sin(n),f=o*Math.cos(e),s=o*Math.sin(e),h=2*Math.asin(Math.sqrt(on(r-t)+i*o*on(e-n))),p=1/Math.sin(h),g=h?function(n){var t=Math.sin(n*=h)*p,e=Math.sin(h-n)*p,r=e*l+t*f,i=e*c+t*s,o=e*u+t*a;return[Math.atan2(i,r)*Zo,Math.atan2(o,Math.sqrt(r*r+i*i))*Zo]}:function(){return[n*Zo,t*Zo]};return g.distance=h,g}function _e(){function n(n,i){var u=Math.sin(i*=Yo),o=Math.cos(i),a=xo((n*=Yo)-t),l=Math.cos(a);Ja+=Math.atan2(Math.sqrt((a=o*Math.sin(a))*a+(a=r*u-e*o*l)*a),e*u+r*o*l),t=n,e=u,r=o}var t,e,r;Ga.point=function(i,u){t=i*Yo,e=Math.sin(u*=Yo),r=Math.cos(u),Ga.point=n},Ga.lineEnd=function(){Ga.point=Ga.lineEnd=b}}function we(n,t){function e(t,e){var r=Math.cos(t),i=Math.cos(e),u=n(r*i);return[u*i*Math.sin(t),u*Math.sin(e)]}return e.invert=function(n,e){var r=Math.sqrt(n*n+e*e),i=t(r),u=Math.sin(i),o=Math.cos(i);return[Math.atan2(n*u,r*o),Math.asin(r&&e*u/r)]},e}function Se(n,t){function e(n,t){o>0?-Io+Uo>t&&(t=-Io+Uo):t>Io-Uo&&(t=Io-Uo);var e=o/Math.pow(i(t),u);return[e*Math.sin(u*n),o-e*Math.cos(u*n)]}var r=Math.cos(n),i=function(n){return Math.tan(Fo/4+n/2)},u=n===t?Math.sin(n):Math.log(r/Math.cos(t))/Math.log(i(t)/i(n)),o=r*Math.pow(i(n),u)/u;return u?(e.invert=function(n,t){var e=o-t,r=K(u)*Math.sqrt(n*n+e*e);return[Math.atan2(n,e)/u,2*Math.atan(Math.pow(o/r,1/u))-Io]},e):Ne}function ke(n,t){function e(n,t){var e=u-t;return[e*Math.sin(i*n),u-e*Math.cos(i*n)]}var r=Math.cos(n),i=n===t?Math.sin(n):(r-Math.cos(t))/(t-n),u=r/i+n;return xo(i)<Uo?ce:(e.invert=function(n,t){var e=u-t;return[Math.atan2(n,e)/i,u-K(i)*Math.sqrt(n*n+e*e)]},e)}function Ne(n,t){return[n,Math.log(Math.tan(Fo/4+t/2))]}function Ee(n){var t,e=oe(n),r=e.scale,i=e.translate,u=e.clipExtent;return e.scale=function(){var n=r.apply(e,arguments);return n===e?t?e.clipExtent(null):e:n},e.translate=function(){var n=i.apply(e,arguments);return n===e?t?e.clipExtent(null):e:n},e.clipExtent=function(n){var o=u.apply(e,arguments);if(o===e){if(t=null==n){var a=Fo*r(),l=i();u([[l[0]-a,l[1]-a],[l[0]+a,l[1]+a]])}}else t&&(o=null);return o},e.clipExtent(null)}function Ae(n,t){return[Math.log(Math.tan(Fo/4+t/2)),-n]}function Ce(n){return n[0]}function ze(n){return n[1]}function Le(n){for(var t=n.length,e=[0,1],r=2,i=2;t>i;i++){for(;r>1&&Q(n[e[r-2]],n[e[r-1]],n[i])<=0;)--r;e[r++]=i}return e.slice(0,r)}function qe(n,t){return n[0]-t[0]||n[1]-t[1]}function Te(n,t,e){return(e[0]-t[0])*(n[1]-t[1])<(e[1]-t[1])*(n[0]-t[0])}function Re(n,t,e,r){var i=n[0],u=e[0],o=t[0]-i,a=r[0]-u,l=n[1],c=e[1],f=t[1]-l,s=r[1]-c,h=(a*(l-c)-s*(i-u))/(s*o-a*f);return[i+h*o,l+h*f]}function De(n){var t=n[0],e=n[n.length-1];return!(t[0]-e[0]||t[1]-e[1])}function Pe(){rr(this),this.edge=this.site=this.circle=null}function Ue(n){var t=cl.pop()||new Pe;return t.site=n,t}function je(n){Be(n),ol.remove(n),cl.push(n),rr(n)}function Fe(n){var t=n.circle,e=t.x,r=t.cy,i={x:e,y:r},u=n.P,o=n.N,a=[n];je(n);for(var l=u;l.circle&&xo(e-l.circle.x)<Uo&&xo(r-l.circle.cy)<Uo;)u=l.P,a.unshift(l),je(l),l=u;a.unshift(l),Be(l);for(var c=o;c.circle&&xo(e-c.circle.x)<Uo&&xo(r-c.circle.cy)<Uo;)o=c.N,a.push(c),je(c),c=o;a.push(c),Be(c);var f,s=a.length;for(f=1;s>f;++f)c=a[f],l=a[f-1],nr(c.edge,l.site,c.site,i);l=a[0],c=a[s-1],c.edge=Ke(l.site,c.site,null,i),$e(l),$e(c)}function He(n){for(var t,e,r,i,u=n.x,o=n.y,a=ol._;a;)if(r=Oe(a,o)-u,r>Uo)a=a.L;else{if(i=u-Ie(a,o),!(i>Uo)){r>-Uo?(t=a.P,e=a):i>-Uo?(t=a,e=a.N):t=e=a;break}if(!a.R){t=a;break}a=a.R}var l=Ue(n);if(ol.insert(t,l),t||e){if(t===e)return Be(t),e=Ue(t.site),ol.insert(l,e),l.edge=e.edge=Ke(t.site,l.site),$e(t),void $e(e);if(!e)return void(l.edge=Ke(t.site,l.site));Be(t),Be(e);var c=t.site,f=c.x,s=c.y,h=n.x-f,p=n.y-s,g=e.site,v=g.x-f,d=g.y-s,y=2*(h*d-p*v),m=h*h+p*p,M=v*v+d*d,x={x:(d*m-p*M)/y+f,y:(h*M-v*m)/y+s};nr(e.edge,c,g,x),l.edge=Ke(c,n,null,x),e.edge=Ke(n,g,null,x),$e(t),$e(e)}}function Oe(n,t){var e=n.site,r=e.x,i=e.y,u=i-t;if(!u)return r;var o=n.P;if(!o)return-(1/0);e=o.site;var a=e.x,l=e.y,c=l-t;if(!c)return a;var f=a-r,s=1/u-1/c,h=f/c;return s?(-h+Math.sqrt(h*h-2*s*(f*f/(-2*c)-l+c/2+i-u/2)))/s+r:(r+a)/2}function Ie(n,t){var e=n.N;if(e)return Oe(e,t);var r=n.site;return r.y===t?r.x:1/0}function Ye(n){this.site=n,this.edges=[]}function Ze(n){for(var t,e,r,i,u,o,a,l,c,f,s=n[0][0],h=n[1][0],p=n[0][1],g=n[1][1],v=ul,d=v.length;d--;)if(u=v[d],u&&u.prepare())for(a=u.edges,l=a.length,o=0;l>o;)f=a[o].end(),r=f.x,i=f.y,c=a[++o%l].start(),t=c.x,e=c.y,(xo(r-t)>Uo||xo(i-e)>Uo)&&(a.splice(o,0,new tr(Qe(u.site,f,xo(r-s)<Uo&&g-i>Uo?{x:s,y:xo(t-s)<Uo?e:g}:xo(i-g)<Uo&&h-r>Uo?{x:xo(e-g)<Uo?t:h,y:g}:xo(r-h)<Uo&&i-p>Uo?{x:h,y:xo(t-h)<Uo?e:p}:xo(i-p)<Uo&&r-s>Uo?{x:xo(e-p)<Uo?t:s,y:p}:null),u.site,null)),++l)}function Ve(n,t){return t.angle-n.angle}function Xe(){rr(this),this.x=this.y=this.arc=this.site=this.cy=null}function $e(n){var t=n.P,e=n.N;if(t&&e){var r=t.site,i=n.site,u=e.site;if(r!==u){var o=i.x,a=i.y,l=r.x-o,c=r.y-a,f=u.x-o,s=u.y-a,h=2*(l*s-c*f);if(!(h>=-jo)){var p=l*l+c*c,g=f*f+s*s,v=(s*p-c*g)/h,d=(l*g-f*p)/h,s=d+a,y=fl.pop()||new Xe;y.arc=n,y.site=i,y.x=v+o,y.y=s+Math.sqrt(v*v+d*d),y.cy=s,n.circle=y;for(var m=null,M=ll._;M;)if(y.y<M.y||y.y===M.y&&y.x<=M.x){if(!M.L){m=M.P;break}M=M.L}else{if(!M.R){m=M;break}M=M.R}ll.insert(m,y),m||(al=y)}}}}function Be(n){var t=n.circle;t&&(t.P||(al=t.N),ll.remove(t),fl.push(t),rr(t),n.circle=null)}function We(n){for(var t,e=il,r=Yt(n[0][0],n[0][1],n[1][0],n[1][1]),i=e.length;i--;)t=e[i],(!Je(t,n)||!r(t)||xo(t.a.x-t.b.x)<Uo&&xo(t.a.y-t.b.y)<Uo)&&(t.a=t.b=null,e.splice(i,1))}function Je(n,t){var e=n.b;if(e)return!0;var r,i,u=n.a,o=t[0][0],a=t[1][0],l=t[0][1],c=t[1][1],f=n.l,s=n.r,h=f.x,p=f.y,g=s.x,v=s.y,d=(h+g)/2,y=(p+v)/2;if(v===p){if(o>d||d>=a)return;if(h>g){if(u){if(u.y>=c)return}else u={x:d,y:l};e={x:d,y:c}}else{if(u){if(u.y<l)return}else u={x:d,y:c};e={x:d,y:l}}}else if(r=(h-g)/(v-p),i=y-r*d,-1>r||r>1)if(h>g){if(u){if(u.y>=c)return}else u={x:(l-i)/r,y:l};e={x:(c-i)/r,y:c}}else{if(u){if(u.y<l)return}else u={x:(c-i)/r,y:c};e={x:(l-i)/r,y:l}}else if(v>p){if(u){if(u.x>=a)return}else u={x:o,y:r*o+i};e={x:a,y:r*a+i}}else{if(u){if(u.x<o)return}else u={x:a,y:r*a+i};e={x:o,y:r*o+i}}return n.a=u,n.b=e,!0}function Ge(n,t){this.l=n,this.r=t,this.a=this.b=null}function Ke(n,t,e,r){var i=new Ge(n,t);return il.push(i),e&&nr(i,n,t,e),r&&nr(i,t,n,r),ul[n.i].edges.push(new tr(i,n,t)),ul[t.i].edges.push(new tr(i,t,n)),i}function Qe(n,t,e){var r=new Ge(n,null);return r.a=t,r.b=e,il.push(r),r}function nr(n,t,e,r){n.a||n.b?n.l===e?n.b=r:n.a=r:(n.a=r,n.l=t,n.r=e)}function tr(n,t,e){var r=n.a,i=n.b;this.edge=n,this.site=t,this.angle=e?Math.atan2(e.y-t.y,e.x-t.x):n.l===t?Math.atan2(i.x-r.x,r.y-i.y):Math.atan2(r.x-i.x,i.y-r.y)}function er(){this._=null}function rr(n){n.U=n.C=n.L=n.R=n.P=n.N=null}function ir(n,t){var e=t,r=t.R,i=e.U;i?i.L===e?i.L=r:i.R=r:n._=r,r.U=i,e.U=r,e.R=r.L,e.R&&(e.R.U=e),r.L=e}function ur(n,t){var e=t,r=t.L,i=e.U;i?i.L===e?i.L=r:i.R=r:n._=r,r.U=i,e.U=r,e.L=r.R,e.L&&(e.L.U=e),r.R=e}function or(n){for(;n.L;)n=n.L;return n}function ar(n,t){var e,r,i,u=n.sort(lr).pop();for(il=[],ul=new Array(n.length),ol=new er,ll=new er;;)if(i=al,u&&(!i||u.y<i.y||u.y===i.y&&u.x<i.x))u.x===e&&u.y===r||(ul[u.i]=new Ye(u),He(u),e=u.x,r=u.y),u=n.pop();else{if(!i)break;Fe(i.arc)}t&&(We(t),Ze(t));var o={cells:ul,edges:il};return ol=ll=il=ul=null,o}function lr(n,t){return t.y-n.y||t.x-n.x}function cr(n,t,e){return(n.x-e.x)*(t.y-n.y)-(n.x-t.x)*(e.y-n.y)}function fr(n){return n.x}function sr(n){return n.y}function hr(){return{leaf:!0,nodes:[],point:null,x:null,y:null}}function pr(n,t,e,r,i,u){if(!n(t,e,r,i,u)){var o=.5*(e+i),a=.5*(r+u),l=t.nodes;l[0]&&pr(n,l[0],e,r,o,a),l[1]&&pr(n,l[1],o,r,i,a),l[2]&&pr(n,l[2],e,a,o,u),l[3]&&pr(n,l[3],o,a,i,u)}}function gr(n,t,e,r,i,u,o){var a,l=1/0;return function c(n,f,s,h,p){if(!(f>u||s>o||r>h||i>p)){if(g=n.point){var g,v=t-n.x,d=e-n.y,y=v*v+d*d;if(l>y){var m=Math.sqrt(l=y);r=t-m,i=e-m,u=t+m,o=e+m,a=g}}for(var M=n.nodes,x=.5*(f+h),b=.5*(s+p),_=t>=x,w=e>=b,S=w<<1|_,k=S+4;k>S;++S)if(n=M[3&S])switch(3&S){case 0:c(n,f,s,x,b);break;case 1:c(n,x,s,h,b);break;case 2:c(n,f,b,x,p);break;case 3:c(n,x,b,h,p)}}}(n,r,i,u,o),a}function vr(n,t){n=ao.rgb(n),t=ao.rgb(t);var e=n.r,r=n.g,i=n.b,u=t.r-e,o=t.g-r,a=t.b-i;return function(n){return"#"+bn(Math.round(e+u*n))+bn(Math.round(r+o*n))+bn(Math.round(i+a*n))}}function dr(n,t){var e,r={},i={};for(e in n)e in t?r[e]=Mr(n[e],t[e]):i[e]=n[e];for(e in t)e in n||(i[e]=t[e]);return function(n){for(e in r)i[e]=r[e](n);return i}}function yr(n,t){return n=+n,t=+t,function(e){return n*(1-e)+t*e}}function mr(n,t){var e,r,i,u=hl.lastIndex=pl.lastIndex=0,o=-1,a=[],l=[];for(n+="",t+="";(e=hl.exec(n))&&(r=pl.exec(t));)(i=r.index)>u&&(i=t.slice(u,i),a[o]?a[o]+=i:a[++o]=i),(e=e[0])===(r=r[0])?a[o]?a[o]+=r:a[++o]=r:(a[++o]=null,l.push({i:o,x:yr(e,r)})),u=pl.lastIndex;return u<t.length&&(i=t.slice(u),a[o]?a[o]+=i:a[++o]=i),a.length<2?l[0]?(t=l[0].x,function(n){return t(n)+""}):function(){return t}:(t=l.length,function(n){for(var e,r=0;t>r;++r)a[(e=l[r]).i]=e.x(n);return a.join("")})}function Mr(n,t){for(var e,r=ao.interpolators.length;--r>=0&&!(e=ao.interpolators[r](n,t)););return e}function xr(n,t){var e,r=[],i=[],u=n.length,o=t.length,a=Math.min(n.length,t.length);for(e=0;a>e;++e)r.push(Mr(n[e],t[e]));for(;u>e;++e)i[e]=n[e];for(;o>e;++e)i[e]=t[e];return function(n){for(e=0;a>e;++e)i[e]=r[e](n);return i}}function br(n){return function(t){return 0>=t?0:t>=1?1:n(t)}}function _r(n){return function(t){return 1-n(1-t)}}function wr(n){return function(t){return.5*(.5>t?n(2*t):2-n(2-2*t))}}function Sr(n){return n*n}function kr(n){return n*n*n}function Nr(n){if(0>=n)return 0;if(n>=1)return 1;var t=n*n,e=t*n;return 4*(.5>n?e:3*(n-t)+e-.75)}function Er(n){return function(t){return Math.pow(t,n)}}function Ar(n){return 1-Math.cos(n*Io)}function Cr(n){return Math.pow(2,10*(n-1))}function zr(n){return 1-Math.sqrt(1-n*n)}function Lr(n,t){var e;return arguments.length<2&&(t=.45),arguments.length?e=t/Ho*Math.asin(1/n):(n=1,e=t/4),function(r){return 1+n*Math.pow(2,-10*r)*Math.sin((r-e)*Ho/t)}}function qr(n){return n||(n=1.70158),function(t){return t*t*((n+1)*t-n)}}function Tr(n){return 1/2.75>n?7.5625*n*n:2/2.75>n?7.5625*(n-=1.5/2.75)*n+.75:2.5/2.75>n?7.5625*(n-=2.25/2.75)*n+.9375:7.5625*(n-=2.625/2.75)*n+.984375}function Rr(n,t){n=ao.hcl(n),t=ao.hcl(t);var e=n.h,r=n.c,i=n.l,u=t.h-e,o=t.c-r,a=t.l-i;return isNaN(o)&&(o=0,r=isNaN(r)?t.c:r),isNaN(u)?(u=0,e=isNaN(e)?t.h:e):u>180?u-=360:-180>u&&(u+=360),function(n){return sn(e+u*n,r+o*n,i+a*n)+""}}function Dr(n,t){n=ao.hsl(n),t=ao.hsl(t);var e=n.h,r=n.s,i=n.l,u=t.h-e,o=t.s-r,a=t.l-i;return isNaN(o)&&(o=0,r=isNaN(r)?t.s:r),isNaN(u)?(u=0,e=isNaN(e)?t.h:e):u>180?u-=360:-180>u&&(u+=360),function(n){return cn(e+u*n,r+o*n,i+a*n)+""}}function Pr(n,t){n=ao.lab(n),t=ao.lab(t);var e=n.l,r=n.a,i=n.b,u=t.l-e,o=t.a-r,a=t.b-i;return function(n){return pn(e+u*n,r+o*n,i+a*n)+""}}function Ur(n,t){return t-=n,function(e){return Math.round(n+t*e)}}function jr(n){var t=[n.a,n.b],e=[n.c,n.d],r=Hr(t),i=Fr(t,e),u=Hr(Or(e,t,-i))||0;t[0]*e[1]<e[0]*t[1]&&(t[0]*=-1,t[1]*=-1,r*=-1,i*=-1),this.rotate=(r?Math.atan2(t[1],t[0]):Math.atan2(-e[0],e[1]))*Zo,this.translate=[n.e,n.f],this.scale=[r,u],this.skew=u?Math.atan2(i,u)*Zo:0}function Fr(n,t){return n[0]*t[0]+n[1]*t[1]}function Hr(n){var t=Math.sqrt(Fr(n,n));return t&&(n[0]/=t,n[1]/=t),t}function Or(n,t,e){return n[0]+=e*t[0],n[1]+=e*t[1],n}function Ir(n){return n.length?n.pop()+",":""}function Yr(n,t,e,r){if(n[0]!==t[0]||n[1]!==t[1]){var i=e.push("translate(",null,",",null,")");r.push({i:i-4,x:yr(n[0],t[0])},{i:i-2,x:yr(n[1],t[1])})}else(t[0]||t[1])&&e.push("translate("+t+")")}function Zr(n,t,e,r){n!==t?(n-t>180?t+=360:t-n>180&&(n+=360),r.push({i:e.push(Ir(e)+"rotate(",null,")")-2,x:yr(n,t)})):t&&e.push(Ir(e)+"rotate("+t+")")}function Vr(n,t,e,r){n!==t?r.push({i:e.push(Ir(e)+"skewX(",null,")")-2,x:yr(n,t)}):t&&e.push(Ir(e)+"skewX("+t+")")}function Xr(n,t,e,r){if(n[0]!==t[0]||n[1]!==t[1]){var i=e.push(Ir(e)+"scale(",null,",",null,")");r.push({i:i-4,x:yr(n[0],t[0])},{i:i-2,x:yr(n[1],t[1])})}else 1===t[0]&&1===t[1]||e.push(Ir(e)+"scale("+t+")")}function $r(n,t){var e=[],r=[];return n=ao.transform(n),t=ao.transform(t),Yr(n.translate,t.translate,e,r),Zr(n.rotate,t.rotate,e,r),Vr(n.skew,t.skew,e,r),Xr(n.scale,t.scale,e,r),n=t=null,function(n){for(var t,i=-1,u=r.length;++i<u;)e[(t=r[i]).i]=t.x(n);return e.join("")}}function Br(n,t){return t=(t-=n=+n)||1/t,function(e){return(e-n)/t}}function Wr(n,t){return t=(t-=n=+n)||1/t,function(e){return Math.max(0,Math.min(1,(e-n)/t))}}function Jr(n){for(var t=n.source,e=n.target,r=Kr(t,e),i=[t];t!==r;)t=t.parent,i.push(t);for(var u=i.length;e!==r;)i.splice(u,0,e),e=e.parent;return i}function Gr(n){for(var t=[],e=n.parent;null!=e;)t.push(n),n=e,e=e.parent;return t.push(n),t}function Kr(n,t){if(n===t)return n;for(var e=Gr(n),r=Gr(t),i=e.pop(),u=r.pop(),o=null;i===u;)o=i,i=e.pop(),u=r.pop();return o}function Qr(n){n.fixed|=2}function ni(n){n.fixed&=-7}function ti(n){n.fixed|=4,n.px=n.x,n.py=n.y}function ei(n){n.fixed&=-5}function ri(n,t,e){var r=0,i=0;if(n.charge=0,!n.leaf)for(var u,o=n.nodes,a=o.length,l=-1;++l<a;)u=o[l],null!=u&&(ri(u,t,e),n.charge+=u.charge,r+=u.charge*u.cx,i+=u.charge*u.cy);if(n.point){n.leaf||(n.point.x+=Math.random()-.5,n.point.y+=Math.random()-.5);var c=t*e[n.point.index];n.charge+=n.pointCharge=c,r+=c*n.point.x,i+=c*n.point.y}n.cx=r/n.charge,n.cy=i/n.charge}function ii(n,t){return ao.rebind(n,t,"sort","children","value"),n.nodes=n,n.links=fi,n}function ui(n,t){for(var e=[n];null!=(n=e.pop());)if(t(n),(i=n.children)&&(r=i.length))for(var r,i;--r>=0;)e.push(i[r])}function oi(n,t){for(var e=[n],r=[];null!=(n=e.pop());)if(r.push(n),(u=n.children)&&(i=u.length))for(var i,u,o=-1;++o<i;)e.push(u[o]);for(;null!=(n=r.pop());)t(n)}function ai(n){return n.children}function li(n){return n.value}function ci(n,t){return t.value-n.value}function fi(n){return ao.merge(n.map(function(n){return(n.children||[]).map(function(t){return{source:n,target:t}})}))}function si(n){return n.x}function hi(n){return n.y}function pi(n,t,e){n.y0=t,n.y=e}function gi(n){return ao.range(n.length)}function vi(n){for(var t=-1,e=n[0].length,r=[];++t<e;)r[t]=0;return r}function di(n){for(var t,e=1,r=0,i=n[0][1],u=n.length;u>e;++e)(t=n[e][1])>i&&(r=e,i=t);return r}function yi(n){return n.reduce(mi,0)}function mi(n,t){return n+t[1]}function Mi(n,t){return xi(n,Math.ceil(Math.log(t.length)/Math.LN2+1))}function xi(n,t){for(var e=-1,r=+n[0],i=(n[1]-r)/t,u=[];++e<=t;)u[e]=i*e+r;return u}function bi(n){return[ao.min(n),ao.max(n)]}function _i(n,t){return n.value-t.value}function wi(n,t){var e=n._pack_next;n._pack_next=t,t._pack_prev=n,t._pack_next=e,e._pack_prev=t}function Si(n,t){n._pack_next=t,t._pack_prev=n}function ki(n,t){var e=t.x-n.x,r=t.y-n.y,i=n.r+t.r;return.999*i*i>e*e+r*r}function Ni(n){function t(n){f=Math.min(n.x-n.r,f),s=Math.max(n.x+n.r,s),h=Math.min(n.y-n.r,h),p=Math.max(n.y+n.r,p)}if((e=n.children)&&(c=e.length)){var e,r,i,u,o,a,l,c,f=1/0,s=-(1/0),h=1/0,p=-(1/0);if(e.forEach(Ei),r=e[0],r.x=-r.r,r.y=0,t(r),c>1&&(i=e[1],i.x=i.r,i.y=0,t(i),c>2))for(u=e[2],zi(r,i,u),t(u),wi(r,u),r._pack_prev=u,wi(u,i),i=r._pack_next,o=3;c>o;o++){zi(r,i,u=e[o]);var g=0,v=1,d=1;for(a=i._pack_next;a!==i;a=a._pack_next,v++)if(ki(a,u)){g=1;break}if(1==g)for(l=r._pack_prev;l!==a._pack_prev&&!ki(l,u);l=l._pack_prev,d++);g?(d>v||v==d&&i.r<r.r?Si(r,i=a):Si(r=l,i),o--):(wi(r,u),i=u,t(u))}var y=(f+s)/2,m=(h+p)/2,M=0;for(o=0;c>o;o++)u=e[o],u.x-=y,u.y-=m,M=Math.max(M,u.r+Math.sqrt(u.x*u.x+u.y*u.y));n.r=M,e.forEach(Ai)}}function Ei(n){n._pack_next=n._pack_prev=n}function Ai(n){delete n._pack_next,delete n._pack_prev}function Ci(n,t,e,r){var i=n.children;if(n.x=t+=r*n.x,n.y=e+=r*n.y,n.r*=r,i)for(var u=-1,o=i.length;++u<o;)Ci(i[u],t,e,r)}function zi(n,t,e){var r=n.r+e.r,i=t.x-n.x,u=t.y-n.y;if(r&&(i||u)){var o=t.r+e.r,a=i*i+u*u;o*=o,r*=r;var l=.5+(r-o)/(2*a),c=Math.sqrt(Math.max(0,2*o*(r+a)-(r-=a)*r-o*o))/(2*a);e.x=n.x+l*i+c*u,e.y=n.y+l*u-c*i}else e.x=n.x+r,e.y=n.y}function Li(n,t){return n.parent==t.parent?1:2}function qi(n){var t=n.children;return t.length?t[0]:n.t}function Ti(n){var t,e=n.children;return(t=e.length)?e[t-1]:n.t}function Ri(n,t,e){var r=e/(t.i-n.i);t.c-=r,t.s+=e,n.c+=r,t.z+=e,t.m+=e}function Di(n){for(var t,e=0,r=0,i=n.children,u=i.length;--u>=0;)t=i[u],t.z+=e,t.m+=e,e+=t.s+(r+=t.c)}function Pi(n,t,e){return n.a.parent===t.parent?n.a:e}function Ui(n){return 1+ao.max(n,function(n){return n.y})}function ji(n){return n.reduce(function(n,t){return n+t.x},0)/n.length}function Fi(n){var t=n.children;return t&&t.length?Fi(t[0]):n}function Hi(n){var t,e=n.children;return e&&(t=e.length)?Hi(e[t-1]):n}function Oi(n){return{x:n.x,y:n.y,dx:n.dx,dy:n.dy}}function Ii(n,t){var e=n.x+t[3],r=n.y+t[0],i=n.dx-t[1]-t[3],u=n.dy-t[0]-t[2];return 0>i&&(e+=i/2,i=0),0>u&&(r+=u/2,u=0),{x:e,y:r,dx:i,dy:u}}function Yi(n){var t=n[0],e=n[n.length-1];return e>t?[t,e]:[e,t]}function Zi(n){return n.rangeExtent?n.rangeExtent():Yi(n.range())}function Vi(n,t,e,r){var i=e(n[0],n[1]),u=r(t[0],t[1]);return function(n){return u(i(n))}}function Xi(n,t){var e,r=0,i=n.length-1,u=n[r],o=n[i];return u>o&&(e=r,r=i,i=e,e=u,u=o,o=e),n[r]=t.floor(u),n[i]=t.ceil(o),n}function $i(n){return n?{floor:function(t){return Math.floor(t/n)*n},ceil:function(t){return Math.ceil(t/n)*n}}:Sl}function Bi(n,t,e,r){var i=[],u=[],o=0,a=Math.min(n.length,t.length)-1;for(n[a]<n[0]&&(n=n.slice().reverse(),t=t.slice().reverse());++o<=a;)i.push(e(n[o-1],n[o])),u.push(r(t[o-1],t[o]));return function(t){var e=ao.bisect(n,t,1,a)-1;return u[e](i[e](t))}}function Wi(n,t,e,r){function i(){var i=Math.min(n.length,t.length)>2?Bi:Vi,l=r?Wr:Br;return o=i(n,t,l,e),a=i(t,n,l,Mr),u}function u(n){return o(n)}var o,a;return u.invert=function(n){return a(n)},u.domain=function(t){return arguments.length?(n=t.map(Number),i()):n},u.range=function(n){return arguments.length?(t=n,i()):t},u.rangeRound=function(n){return u.range(n).interpolate(Ur)},u.clamp=function(n){return arguments.length?(r=n,i()):r},u.interpolate=function(n){return arguments.length?(e=n,i()):e},u.ticks=function(t){return Qi(n,t)},u.tickFormat=function(t,e){return nu(n,t,e)},u.nice=function(t){return Gi(n,t),i()},u.copy=function(){return Wi(n,t,e,r)},i()}function Ji(n,t){return ao.rebind(n,t,"range","rangeRound","interpolate","clamp")}function Gi(n,t){return Xi(n,$i(Ki(n,t)[2])),Xi(n,$i(Ki(n,t)[2])),n}function Ki(n,t){null==t&&(t=10);var e=Yi(n),r=e[1]-e[0],i=Math.pow(10,Math.floor(Math.log(r/t)/Math.LN10)),u=t/r*i;return.15>=u?i*=10:.35>=u?i*=5:.75>=u&&(i*=2),e[0]=Math.ceil(e[0]/i)*i,e[1]=Math.floor(e[1]/i)*i+.5*i,e[2]=i,e}function Qi(n,t){return ao.range.apply(ao,Ki(n,t))}function nu(n,t,e){var r=Ki(n,t);if(e){var i=ha.exec(e);if(i.shift(),"s"===i[8]){var u=ao.formatPrefix(Math.max(xo(r[0]),xo(r[1])));return i[7]||(i[7]="."+tu(u.scale(r[2]))),i[8]="f",e=ao.format(i.join("")),function(n){return e(u.scale(n))+u.symbol}}i[7]||(i[7]="."+eu(i[8],r)),e=i.join("")}else e=",."+tu(r[2])+"f";return ao.format(e)}function tu(n){return-Math.floor(Math.log(n)/Math.LN10+.01)}function eu(n,t){var e=tu(t[2]);return n in kl?Math.abs(e-tu(Math.max(xo(t[0]),xo(t[1]))))+ +("e"!==n):e-2*("%"===n)}function ru(n,t,e,r){function i(n){return(e?Math.log(0>n?0:n):-Math.log(n>0?0:-n))/Math.log(t)}function u(n){return e?Math.pow(t,n):-Math.pow(t,-n)}function o(t){return n(i(t))}return o.invert=function(t){return u(n.invert(t))},o.domain=function(t){return arguments.length?(e=t[0]>=0,n.domain((r=t.map(Number)).map(i)),o):r},o.base=function(e){return arguments.length?(t=+e,n.domain(r.map(i)),o):t},o.nice=function(){var t=Xi(r.map(i),e?Math:El);return n.domain(t),r=t.map(u),o},o.ticks=function(){var n=Yi(r),o=[],a=n[0],l=n[1],c=Math.floor(i(a)),f=Math.ceil(i(l)),s=t%1?2:t;if(isFinite(f-c)){if(e){for(;f>c;c++)for(var h=1;s>h;h++)o.push(u(c)*h);o.push(u(c))}else for(o.push(u(c));c++<f;)for(var h=s-1;h>0;h--)o.push(u(c)*h);for(c=0;o[c]<a;c++);for(f=o.length;o[f-1]>l;f--);o=o.slice(c,f)}return o},o.tickFormat=function(n,e){if(!arguments.length)return Nl;arguments.length<2?e=Nl:"function"!=typeof e&&(e=ao.format(e));var r=Math.max(1,t*n/o.ticks().length);return function(n){var o=n/u(Math.round(i(n)));return t-.5>o*t&&(o*=t),r>=o?e(n):""}},o.copy=function(){return ru(n.copy(),t,e,r)},Ji(o,n)}function iu(n,t,e){function r(t){return n(i(t))}var i=uu(t),u=uu(1/t);return r.invert=function(t){return u(n.invert(t))},r.domain=function(t){return arguments.length?(n.domain((e=t.map(Number)).map(i)),r):e},r.ticks=function(n){return Qi(e,n)},r.tickFormat=function(n,t){return nu(e,n,t)},r.nice=function(n){return r.domain(Gi(e,n))},r.exponent=function(o){return arguments.length?(i=uu(t=o),u=uu(1/t),n.domain(e.map(i)),r):t},r.copy=function(){return iu(n.copy(),t,e)},Ji(r,n)}function uu(n){return function(t){return 0>t?-Math.pow(-t,n):Math.pow(t,n)}}function ou(n,t){function e(e){return u[((i.get(e)||("range"===t.t?i.set(e,n.push(e)):NaN))-1)%u.length]}function r(t,e){return ao.range(n.length).map(function(n){return t+e*n})}var i,u,o;return e.domain=function(r){if(!arguments.length)return n;n=[],i=new c;for(var u,o=-1,a=r.length;++o<a;)i.has(u=r[o])||i.set(u,n.push(u));return e[t.t].apply(e,t.a)},e.range=function(n){return arguments.length?(u=n,o=0,t={t:"range",a:arguments},e):u},e.rangePoints=function(i,a){arguments.length<2&&(a=0);var l=i[0],c=i[1],f=n.length<2?(l=(l+c)/2,0):(c-l)/(n.length-1+a);return u=r(l+f*a/2,f),o=0,t={t:"rangePoints",a:arguments},e},e.rangeRoundPoints=function(i,a){arguments.length<2&&(a=0);var l=i[0],c=i[1],f=n.length<2?(l=c=Math.round((l+c)/2),0):(c-l)/(n.length-1+a)|0;return u=r(l+Math.round(f*a/2+(c-l-(n.length-1+a)*f)/2),f),o=0,t={t:"rangeRoundPoints",a:arguments},e},e.rangeBands=function(i,a,l){arguments.length<2&&(a=0),arguments.length<3&&(l=a);var c=i[1]<i[0],f=i[c-0],s=i[1-c],h=(s-f)/(n.length-a+2*l);return u=r(f+h*l,h),c&&u.reverse(),o=h*(1-a),t={t:"rangeBands",a:arguments},e},e.rangeRoundBands=function(i,a,l){arguments.length<2&&(a=0),arguments.length<3&&(l=a);var c=i[1]<i[0],f=i[c-0],s=i[1-c],h=Math.floor((s-f)/(n.length-a+2*l));return u=r(f+Math.round((s-f-(n.length-a)*h)/2),h),c&&u.reverse(),o=Math.round(h*(1-a)),t={t:"rangeRoundBands",a:arguments},e},e.rangeBand=function(){return o},e.rangeExtent=function(){return Yi(t.a[0])},e.copy=function(){return ou(n,t)},e.domain(n)}function au(n,t){function u(){var e=0,r=t.length;for(a=[];++e<r;)a[e-1]=ao.quantile(n,e/r);return o}function o(n){return isNaN(n=+n)?void 0:t[ao.bisect(a,n)]}var a;return o.domain=function(t){return arguments.length?(n=t.map(r).filter(i).sort(e),u()):n},o.range=function(n){return arguments.length?(t=n,u()):t},o.quantiles=function(){return a},o.invertExtent=function(e){return e=t.indexOf(e),0>e?[NaN,NaN]:[e>0?a[e-1]:n[0],e<a.length?a[e]:n[n.length-1]]},o.copy=function(){return au(n,t)},u()}function lu(n,t,e){function r(t){return e[Math.max(0,Math.min(o,Math.floor(u*(t-n))))]}function i(){return u=e.length/(t-n),o=e.length-1,r}var u,o;return r.domain=function(e){return arguments.length?(n=+e[0],t=+e[e.length-1],i()):[n,t]},r.range=function(n){return arguments.length?(e=n,i()):e},r.invertExtent=function(t){return t=e.indexOf(t),t=0>t?NaN:t/u+n,[t,t+1/u]},r.copy=function(){return lu(n,t,e)},i()}function cu(n,t){function e(e){return e>=e?t[ao.bisect(n,e)]:void 0}return e.domain=function(t){return arguments.length?(n=t,e):n},e.range=function(n){return arguments.length?(t=n,e):t},e.invertExtent=function(e){return e=t.indexOf(e),[n[e-1],n[e]]},e.copy=function(){return cu(n,t)},e}function fu(n){function t(n){return+n}return t.invert=t,t.domain=t.range=function(e){return arguments.length?(n=e.map(t),t):n},t.ticks=function(t){return Qi(n,t)},t.tickFormat=function(t,e){return nu(n,t,e)},t.copy=function(){return fu(n)},t}function su(){return 0}function hu(n){return n.innerRadius}function pu(n){return n.outerRadius}function gu(n){return n.startAngle}function vu(n){return n.endAngle}function du(n){return n&&n.padAngle}function yu(n,t,e,r){return(n-e)*t-(t-r)*n>0?0:1}function mu(n,t,e,r,i){var u=n[0]-t[0],o=n[1]-t[1],a=(i?r:-r)/Math.sqrt(u*u+o*o),l=a*o,c=-a*u,f=n[0]+l,s=n[1]+c,h=t[0]+l,p=t[1]+c,g=(f+h)/2,v=(s+p)/2,d=h-f,y=p-s,m=d*d+y*y,M=e-r,x=f*p-h*s,b=(0>y?-1:1)*Math.sqrt(Math.max(0,M*M*m-x*x)),_=(x*y-d*b)/m,w=(-x*d-y*b)/m,S=(x*y+d*b)/m,k=(-x*d+y*b)/m,N=_-g,E=w-v,A=S-g,C=k-v;return N*N+E*E>A*A+C*C&&(_=S,w=k),[[_-l,w-c],[_*e/M,w*e/M]]}function Mu(n){function t(t){function o(){c.push("M",u(n(f),a))}for(var l,c=[],f=[],s=-1,h=t.length,p=En(e),g=En(r);++s<h;)i.call(this,l=t[s],s)?f.push([+p.call(this,l,s),+g.call(this,l,s)]):f.length&&(o(),f=[]);return f.length&&o(),c.length?c.join(""):null}var e=Ce,r=ze,i=zt,u=xu,o=u.key,a=.7;return t.x=function(n){return arguments.length?(e=n,t):e},t.y=function(n){return arguments.length?(r=n,t):r},t.defined=function(n){return arguments.length?(i=n,t):i},t.interpolate=function(n){return arguments.length?(o="function"==typeof n?u=n:(u=Tl.get(n)||xu).key,t):o},t.tension=function(n){return arguments.length?(a=n,t):a},t}function xu(n){return n.length>1?n.join("L"):n+"Z"}function bu(n){return n.join("L")+"Z"}function _u(n){for(var t=0,e=n.length,r=n[0],i=[r[0],",",r[1]];++t<e;)i.push("H",(r[0]+(r=n[t])[0])/2,"V",r[1]);return e>1&&i.push("H",r[0]),i.join("")}function wu(n){for(var t=0,e=n.length,r=n[0],i=[r[0],",",r[1]];++t<e;)i.push("V",(r=n[t])[1],"H",r[0]);return i.join("")}function Su(n){for(var t=0,e=n.length,r=n[0],i=[r[0],",",r[1]];++t<e;)i.push("H",(r=n[t])[0],"V",r[1]);return i.join("")}function ku(n,t){return n.length<4?xu(n):n[1]+Au(n.slice(1,-1),Cu(n,t))}function Nu(n,t){return n.length<3?bu(n):n[0]+Au((n.push(n[0]),n),Cu([n[n.length-2]].concat(n,[n[1]]),t))}function Eu(n,t){return n.length<3?xu(n):n[0]+Au(n,Cu(n,t))}function Au(n,t){if(t.length<1||n.length!=t.length&&n.length!=t.length+2)return xu(n);var e=n.length!=t.length,r="",i=n[0],u=n[1],o=t[0],a=o,l=1;if(e&&(r+="Q"+(u[0]-2*o[0]/3)+","+(u[1]-2*o[1]/3)+","+u[0]+","+u[1],i=n[1],l=2),t.length>1){a=t[1],u=n[l],l++,r+="C"+(i[0]+o[0])+","+(i[1]+o[1])+","+(u[0]-a[0])+","+(u[1]-a[1])+","+u[0]+","+u[1];for(var c=2;c<t.length;c++,l++)u=n[l],a=t[c],r+="S"+(u[0]-a[0])+","+(u[1]-a[1])+","+u[0]+","+u[1]}if(e){var f=n[l];r+="Q"+(u[0]+2*a[0]/3)+","+(u[1]+2*a[1]/3)+","+f[0]+","+f[1]}return r}function Cu(n,t){for(var e,r=[],i=(1-t)/2,u=n[0],o=n[1],a=1,l=n.length;++a<l;)e=u,u=o,o=n[a],r.push([i*(o[0]-e[0]),i*(o[1]-e[1])]);return r}function zu(n){if(n.length<3)return xu(n);var t=1,e=n.length,r=n[0],i=r[0],u=r[1],o=[i,i,i,(r=n[1])[0]],a=[u,u,u,r[1]],l=[i,",",u,"L",Ru(Pl,o),",",Ru(Pl,a)];for(n.push(n[e-1]);++t<=e;)r=n[t],o.shift(),o.push(r[0]),a.shift(),a.push(r[1]),Du(l,o,a);return n.pop(),l.push("L",r),l.join("")}function Lu(n){if(n.length<4)return xu(n);for(var t,e=[],r=-1,i=n.length,u=[0],o=[0];++r<3;)t=n[r],u.push(t[0]),o.push(t[1]);for(e.push(Ru(Pl,u)+","+Ru(Pl,o)),--r;++r<i;)t=n[r],u.shift(),u.push(t[0]),o.shift(),o.push(t[1]),Du(e,u,o);return e.join("")}function qu(n){for(var t,e,r=-1,i=n.length,u=i+4,o=[],a=[];++r<4;)e=n[r%i],o.push(e[0]),a.push(e[1]);for(t=[Ru(Pl,o),",",Ru(Pl,a)],--r;++r<u;)e=n[r%i],o.shift(),o.push(e[0]),a.shift(),a.push(e[1]),Du(t,o,a);return t.join("")}function Tu(n,t){var e=n.length-1;if(e)for(var r,i,u=n[0][0],o=n[0][1],a=n[e][0]-u,l=n[e][1]-o,c=-1;++c<=e;)r=n[c],i=c/e,r[0]=t*r[0]+(1-t)*(u+i*a),r[1]=t*r[1]+(1-t)*(o+i*l);return zu(n)}function Ru(n,t){return n[0]*t[0]+n[1]*t[1]+n[2]*t[2]+n[3]*t[3]}function Du(n,t,e){n.push("C",Ru(Rl,t),",",Ru(Rl,e),",",Ru(Dl,t),",",Ru(Dl,e),",",Ru(Pl,t),",",Ru(Pl,e))}function Pu(n,t){return(t[1]-n[1])/(t[0]-n[0])}function Uu(n){for(var t=0,e=n.length-1,r=[],i=n[0],u=n[1],o=r[0]=Pu(i,u);++t<e;)r[t]=(o+(o=Pu(i=u,u=n[t+1])))/2;return r[t]=o,r}function ju(n){for(var t,e,r,i,u=[],o=Uu(n),a=-1,l=n.length-1;++a<l;)t=Pu(n[a],n[a+1]),xo(t)<Uo?o[a]=o[a+1]=0:(e=o[a]/t,r=o[a+1]/t,i=e*e+r*r,i>9&&(i=3*t/Math.sqrt(i),o[a]=i*e,o[a+1]=i*r));for(a=-1;++a<=l;)i=(n[Math.min(l,a+1)][0]-n[Math.max(0,a-1)][0])/(6*(1+o[a]*o[a])),u.push([i||0,o[a]*i||0]);return u}function Fu(n){return n.length<3?xu(n):n[0]+Au(n,ju(n))}function Hu(n){for(var t,e,r,i=-1,u=n.length;++i<u;)t=n[i],e=t[0],r=t[1]-Io,t[0]=e*Math.cos(r),t[1]=e*Math.sin(r);return n}function Ou(n){function t(t){function l(){v.push("M",a(n(y),s),f,c(n(d.reverse()),s),"Z")}for(var h,p,g,v=[],d=[],y=[],m=-1,M=t.length,x=En(e),b=En(i),_=e===r?function(){
+return p}:En(r),w=i===u?function(){return g}:En(u);++m<M;)o.call(this,h=t[m],m)?(d.push([p=+x.call(this,h,m),g=+b.call(this,h,m)]),y.push([+_.call(this,h,m),+w.call(this,h,m)])):d.length&&(l(),d=[],y=[]);return d.length&&l(),v.length?v.join(""):null}var e=Ce,r=Ce,i=0,u=ze,o=zt,a=xu,l=a.key,c=a,f="L",s=.7;return t.x=function(n){return arguments.length?(e=r=n,t):r},t.x0=function(n){return arguments.length?(e=n,t):e},t.x1=function(n){return arguments.length?(r=n,t):r},t.y=function(n){return arguments.length?(i=u=n,t):u},t.y0=function(n){return arguments.length?(i=n,t):i},t.y1=function(n){return arguments.length?(u=n,t):u},t.defined=function(n){return arguments.length?(o=n,t):o},t.interpolate=function(n){return arguments.length?(l="function"==typeof n?a=n:(a=Tl.get(n)||xu).key,c=a.reverse||a,f=a.closed?"M":"L",t):l},t.tension=function(n){return arguments.length?(s=n,t):s},t}function Iu(n){return n.radius}function Yu(n){return[n.x,n.y]}function Zu(n){return function(){var t=n.apply(this,arguments),e=t[0],r=t[1]-Io;return[e*Math.cos(r),e*Math.sin(r)]}}function Vu(){return 64}function Xu(){return"circle"}function $u(n){var t=Math.sqrt(n/Fo);return"M0,"+t+"A"+t+","+t+" 0 1,1 0,"+-t+"A"+t+","+t+" 0 1,1 0,"+t+"Z"}function Bu(n){return function(){var t,e,r;(t=this[n])&&(r=t[e=t.active])&&(r.timer.c=null,r.timer.t=NaN,--t.count?delete t[e]:delete this[n],t.active+=.5,r.event&&r.event.interrupt.call(this,this.__data__,r.index))}}function Wu(n,t,e){return ko(n,Yl),n.namespace=t,n.id=e,n}function Ju(n,t,e,r){var i=n.id,u=n.namespace;return Y(n,"function"==typeof e?function(n,o,a){n[u][i].tween.set(t,r(e.call(n,n.__data__,o,a)))}:(e=r(e),function(n){n[u][i].tween.set(t,e)}))}function Gu(n){return null==n&&(n=""),function(){this.textContent=n}}function Ku(n){return null==n?"__transition__":"__transition_"+n+"__"}function Qu(n,t,e,r,i){function u(n){var t=v.delay;return f.t=t+l,n>=t?o(n-t):void(f.c=o)}function o(e){var i=g.active,u=g[i];u&&(u.timer.c=null,u.timer.t=NaN,--g.count,delete g[i],u.event&&u.event.interrupt.call(n,n.__data__,u.index));for(var o in g)if(r>+o){var c=g[o];c.timer.c=null,c.timer.t=NaN,--g.count,delete g[o]}f.c=a,qn(function(){return f.c&&a(e||1)&&(f.c=null,f.t=NaN),1},0,l),g.active=r,v.event&&v.event.start.call(n,n.__data__,t),p=[],v.tween.forEach(function(e,r){(r=r.call(n,n.__data__,t))&&p.push(r)}),h=v.ease,s=v.duration}function a(i){for(var u=i/s,o=h(u),a=p.length;a>0;)p[--a].call(n,o);return u>=1?(v.event&&v.event.end.call(n,n.__data__,t),--g.count?delete g[r]:delete n[e],1):void 0}var l,f,s,h,p,g=n[e]||(n[e]={active:0,count:0}),v=g[r];v||(l=i.time,f=qn(u,0,l),v=g[r]={tween:new c,time:l,timer:f,delay:i.delay,duration:i.duration,ease:i.ease,index:t},i=null,++g.count)}function no(n,t,e){n.attr("transform",function(n){var r=t(n);return"translate("+(isFinite(r)?r:e(n))+",0)"})}function to(n,t,e){n.attr("transform",function(n){var r=t(n);return"translate(0,"+(isFinite(r)?r:e(n))+")"})}function eo(n){return n.toISOString()}function ro(n,t,e){function r(t){return n(t)}function i(n,e){var r=n[1]-n[0],i=r/e,u=ao.bisect(Kl,i);return u==Kl.length?[t.year,Ki(n.map(function(n){return n/31536e6}),e)[2]]:u?t[i/Kl[u-1]<Kl[u]/i?u-1:u]:[tc,Ki(n,e)[2]]}return r.invert=function(t){return io(n.invert(t))},r.domain=function(t){return arguments.length?(n.domain(t),r):n.domain().map(io)},r.nice=function(n,t){function e(e){return!isNaN(e)&&!n.range(e,io(+e+1),t).length}var u=r.domain(),o=Yi(u),a=null==n?i(o,10):"number"==typeof n&&i(o,n);return a&&(n=a[0],t=a[1]),r.domain(Xi(u,t>1?{floor:function(t){for(;e(t=n.floor(t));)t=io(t-1);return t},ceil:function(t){for(;e(t=n.ceil(t));)t=io(+t+1);return t}}:n))},r.ticks=function(n,t){var e=Yi(r.domain()),u=null==n?i(e,10):"number"==typeof n?i(e,n):!n.range&&[{range:n},t];return u&&(n=u[0],t=u[1]),n.range(e[0],io(+e[1]+1),1>t?1:t)},r.tickFormat=function(){return e},r.copy=function(){return ro(n.copy(),t,e)},Ji(r,n)}function io(n){return new Date(n)}function uo(n){return JSON.parse(n.responseText)}function oo(n){var t=fo.createRange();return t.selectNode(fo.body),t.createContextualFragment(n.responseText)}var ao={version:"3.5.17"},lo=[].slice,co=function(n){return lo.call(n)},fo=this.document;if(fo)try{co(fo.documentElement.childNodes)[0].nodeType}catch(so){co=function(n){for(var t=n.length,e=new Array(t);t--;)e[t]=n[t];return e}}if(Date.now||(Date.now=function(){return+new Date}),fo)try{fo.createElement("DIV").style.setProperty("opacity",0,"")}catch(ho){var po=this.Element.prototype,go=po.setAttribute,vo=po.setAttributeNS,yo=this.CSSStyleDeclaration.prototype,mo=yo.setProperty;po.setAttribute=function(n,t){go.call(this,n,t+"")},po.setAttributeNS=function(n,t,e){vo.call(this,n,t,e+"")},yo.setProperty=function(n,t,e){mo.call(this,n,t+"",e)}}ao.ascending=e,ao.descending=function(n,t){return n>t?-1:t>n?1:t>=n?0:NaN},ao.min=function(n,t){var e,r,i=-1,u=n.length;if(1===arguments.length){for(;++i<u;)if(null!=(r=n[i])&&r>=r){e=r;break}for(;++i<u;)null!=(r=n[i])&&e>r&&(e=r)}else{for(;++i<u;)if(null!=(r=t.call(n,n[i],i))&&r>=r){e=r;break}for(;++i<u;)null!=(r=t.call(n,n[i],i))&&e>r&&(e=r)}return e},ao.max=function(n,t){var e,r,i=-1,u=n.length;if(1===arguments.length){for(;++i<u;)if(null!=(r=n[i])&&r>=r){e=r;break}for(;++i<u;)null!=(r=n[i])&&r>e&&(e=r)}else{for(;++i<u;)if(null!=(r=t.call(n,n[i],i))&&r>=r){e=r;break}for(;++i<u;)null!=(r=t.call(n,n[i],i))&&r>e&&(e=r)}return e},ao.extent=function(n,t){var e,r,i,u=-1,o=n.length;if(1===arguments.length){for(;++u<o;)if(null!=(r=n[u])&&r>=r){e=i=r;break}for(;++u<o;)null!=(r=n[u])&&(e>r&&(e=r),r>i&&(i=r))}else{for(;++u<o;)if(null!=(r=t.call(n,n[u],u))&&r>=r){e=i=r;break}for(;++u<o;)null!=(r=t.call(n,n[u],u))&&(e>r&&(e=r),r>i&&(i=r))}return[e,i]},ao.sum=function(n,t){var e,r=0,u=n.length,o=-1;if(1===arguments.length)for(;++o<u;)i(e=+n[o])&&(r+=e);else for(;++o<u;)i(e=+t.call(n,n[o],o))&&(r+=e);return r},ao.mean=function(n,t){var e,u=0,o=n.length,a=-1,l=o;if(1===arguments.length)for(;++a<o;)i(e=r(n[a]))?u+=e:--l;else for(;++a<o;)i(e=r(t.call(n,n[a],a)))?u+=e:--l;return l?u/l:void 0},ao.quantile=function(n,t){var e=(n.length-1)*t+1,r=Math.floor(e),i=+n[r-1],u=e-r;return u?i+u*(n[r]-i):i},ao.median=function(n,t){var u,o=[],a=n.length,l=-1;if(1===arguments.length)for(;++l<a;)i(u=r(n[l]))&&o.push(u);else for(;++l<a;)i(u=r(t.call(n,n[l],l)))&&o.push(u);return o.length?ao.quantile(o.sort(e),.5):void 0},ao.variance=function(n,t){var e,u,o=n.length,a=0,l=0,c=-1,f=0;if(1===arguments.length)for(;++c<o;)i(e=r(n[c]))&&(u=e-a,a+=u/++f,l+=u*(e-a));else for(;++c<o;)i(e=r(t.call(n,n[c],c)))&&(u=e-a,a+=u/++f,l+=u*(e-a));return f>1?l/(f-1):void 0},ao.deviation=function(){var n=ao.variance.apply(this,arguments);return n?Math.sqrt(n):n};var Mo=u(e);ao.bisectLeft=Mo.left,ao.bisect=ao.bisectRight=Mo.right,ao.bisector=function(n){return u(1===n.length?function(t,r){return e(n(t),r)}:n)},ao.shuffle=function(n,t,e){(u=arguments.length)<3&&(e=n.length,2>u&&(t=0));for(var r,i,u=e-t;u;)i=Math.random()*u--|0,r=n[u+t],n[u+t]=n[i+t],n[i+t]=r;return n},ao.permute=function(n,t){for(var e=t.length,r=new Array(e);e--;)r[e]=n[t[e]];return r},ao.pairs=function(n){for(var t,e=0,r=n.length-1,i=n[0],u=new Array(0>r?0:r);r>e;)u[e]=[t=i,i=n[++e]];return u},ao.transpose=function(n){if(!(i=n.length))return[];for(var t=-1,e=ao.min(n,o),r=new Array(e);++t<e;)for(var i,u=-1,a=r[t]=new Array(i);++u<i;)a[u]=n[u][t];return r},ao.zip=function(){return ao.transpose(arguments)},ao.keys=function(n){var t=[];for(var e in n)t.push(e);return t},ao.values=function(n){var t=[];for(var e in n)t.push(n[e]);return t},ao.entries=function(n){var t=[];for(var e in n)t.push({key:e,value:n[e]});return t},ao.merge=function(n){for(var t,e,r,i=n.length,u=-1,o=0;++u<i;)o+=n[u].length;for(e=new Array(o);--i>=0;)for(r=n[i],t=r.length;--t>=0;)e[--o]=r[t];return e};var xo=Math.abs;ao.range=function(n,t,e){if(arguments.length<3&&(e=1,arguments.length<2&&(t=n,n=0)),(t-n)/e===1/0)throw new Error("infinite range");var r,i=[],u=a(xo(e)),o=-1;if(n*=u,t*=u,e*=u,0>e)for(;(r=n+e*++o)>t;)i.push(r/u);else for(;(r=n+e*++o)<t;)i.push(r/u);return i},ao.map=function(n,t){var e=new c;if(n instanceof c)n.forEach(function(n,t){e.set(n,t)});else if(Array.isArray(n)){var r,i=-1,u=n.length;if(1===arguments.length)for(;++i<u;)e.set(i,n[i]);else for(;++i<u;)e.set(t.call(n,r=n[i],i),r)}else for(var o in n)e.set(o,n[o]);return e};var bo="__proto__",_o="\x00";l(c,{has:h,get:function(n){return this._[f(n)]},set:function(n,t){return this._[f(n)]=t},remove:p,keys:g,values:function(){var n=[];for(var t in this._)n.push(this._[t]);return n},entries:function(){var n=[];for(var t in this._)n.push({key:s(t),value:this._[t]});return n},size:v,empty:d,forEach:function(n){for(var t in this._)n.call(this,s(t),this._[t])}}),ao.nest=function(){function n(t,o,a){if(a>=u.length)return r?r.call(i,o):e?o.sort(e):o;for(var l,f,s,h,p=-1,g=o.length,v=u[a++],d=new c;++p<g;)(h=d.get(l=v(f=o[p])))?h.push(f):d.set(l,[f]);return t?(f=t(),s=function(e,r){f.set(e,n(t,r,a))}):(f={},s=function(e,r){f[e]=n(t,r,a)}),d.forEach(s),f}function t(n,e){if(e>=u.length)return n;var r=[],i=o[e++];return n.forEach(function(n,i){r.push({key:n,values:t(i,e)})}),i?r.sort(function(n,t){return i(n.key,t.key)}):r}var e,r,i={},u=[],o=[];return i.map=function(t,e){return n(e,t,0)},i.entries=function(e){return t(n(ao.map,e,0),0)},i.key=function(n){return u.push(n),i},i.sortKeys=function(n){return o[u.length-1]=n,i},i.sortValues=function(n){return e=n,i},i.rollup=function(n){return r=n,i},i},ao.set=function(n){var t=new y;if(n)for(var e=0,r=n.length;r>e;++e)t.add(n[e]);return t},l(y,{has:h,add:function(n){return this._[f(n+="")]=!0,n},remove:p,values:g,size:v,empty:d,forEach:function(n){for(var t in this._)n.call(this,s(t))}}),ao.behavior={},ao.rebind=function(n,t){for(var e,r=1,i=arguments.length;++r<i;)n[e=arguments[r]]=M(n,t,t[e]);return n};var wo=["webkit","ms","moz","Moz","o","O"];ao.dispatch=function(){for(var n=new _,t=-1,e=arguments.length;++t<e;)n[arguments[t]]=w(n);return n},_.prototype.on=function(n,t){var e=n.indexOf("."),r="";if(e>=0&&(r=n.slice(e+1),n=n.slice(0,e)),n)return arguments.length<2?this[n].on(r):this[n].on(r,t);if(2===arguments.length){if(null==t)for(n in this)this.hasOwnProperty(n)&&this[n].on(r,null);return this}},ao.event=null,ao.requote=function(n){return n.replace(So,"\\$&")};var So=/[\\\^\$\*\+\?\|\[\]\(\)\.\{\}]/g,ko={}.__proto__?function(n,t){n.__proto__=t}:function(n,t){for(var e in t)n[e]=t[e]},No=function(n,t){return t.querySelector(n)},Eo=function(n,t){return t.querySelectorAll(n)},Ao=function(n,t){var e=n.matches||n[x(n,"matchesSelector")];return(Ao=function(n,t){return e.call(n,t)})(n,t)};"function"==typeof Sizzle&&(No=function(n,t){return Sizzle(n,t)[0]||null},Eo=Sizzle,Ao=Sizzle.matchesSelector),ao.selection=function(){return ao.select(fo.documentElement)};var Co=ao.selection.prototype=[];Co.select=function(n){var t,e,r,i,u=[];n=A(n);for(var o=-1,a=this.length;++o<a;){u.push(t=[]),t.parentNode=(r=this[o]).parentNode;for(var l=-1,c=r.length;++l<c;)(i=r[l])?(t.push(e=n.call(i,i.__data__,l,o)),e&&"__data__"in i&&(e.__data__=i.__data__)):t.push(null)}return E(u)},Co.selectAll=function(n){var t,e,r=[];n=C(n);for(var i=-1,u=this.length;++i<u;)for(var o=this[i],a=-1,l=o.length;++a<l;)(e=o[a])&&(r.push(t=co(n.call(e,e.__data__,a,i))),t.parentNode=e);return E(r)};var zo="http://www.w3.org/1999/xhtml",Lo={svg:"http://www.w3.org/2000/svg",xhtml:zo,xlink:"http://www.w3.org/1999/xlink",xml:"http://www.w3.org/XML/1998/namespace",xmlns:"http://www.w3.org/2000/xmlns/"};ao.ns={prefix:Lo,qualify:function(n){var t=n.indexOf(":"),e=n;return t>=0&&"xmlns"!==(e=n.slice(0,t))&&(n=n.slice(t+1)),Lo.hasOwnProperty(e)?{space:Lo[e],local:n}:n}},Co.attr=function(n,t){if(arguments.length<2){if("string"==typeof n){var e=this.node();return n=ao.ns.qualify(n),n.local?e.getAttributeNS(n.space,n.local):e.getAttribute(n)}for(t in n)this.each(z(t,n[t]));return this}return this.each(z(n,t))},Co.classed=function(n,t){if(arguments.length<2){if("string"==typeof n){var e=this.node(),r=(n=T(n)).length,i=-1;if(t=e.classList){for(;++i<r;)if(!t.contains(n[i]))return!1}else for(t=e.getAttribute("class");++i<r;)if(!q(n[i]).test(t))return!1;return!0}for(t in n)this.each(R(t,n[t]));return this}return this.each(R(n,t))},Co.style=function(n,e,r){var i=arguments.length;if(3>i){if("string"!=typeof n){2>i&&(e="");for(r in n)this.each(P(r,n[r],e));return this}if(2>i){var u=this.node();return t(u).getComputedStyle(u,null).getPropertyValue(n)}r=""}return this.each(P(n,e,r))},Co.property=function(n,t){if(arguments.length<2){if("string"==typeof n)return this.node()[n];for(t in n)this.each(U(t,n[t]));return this}return this.each(U(n,t))},Co.text=function(n){return arguments.length?this.each("function"==typeof n?function(){var t=n.apply(this,arguments);this.textContent=null==t?"":t}:null==n?function(){this.textContent=""}:function(){this.textContent=n}):this.node().textContent},Co.html=function(n){return arguments.length?this.each("function"==typeof n?function(){var t=n.apply(this,arguments);this.innerHTML=null==t?"":t}:null==n?function(){this.innerHTML=""}:function(){this.innerHTML=n}):this.node().innerHTML},Co.append=function(n){return n=j(n),this.select(function(){return this.appendChild(n.apply(this,arguments))})},Co.insert=function(n,t){return n=j(n),t=A(t),this.select(function(){return this.insertBefore(n.apply(this,arguments),t.apply(this,arguments)||null)})},Co.remove=function(){return this.each(F)},Co.data=function(n,t){function e(n,e){var r,i,u,o=n.length,s=e.length,h=Math.min(o,s),p=new Array(s),g=new Array(s),v=new Array(o);if(t){var d,y=new c,m=new Array(o);for(r=-1;++r<o;)(i=n[r])&&(y.has(d=t.call(i,i.__data__,r))?v[r]=i:y.set(d,i),m[r]=d);for(r=-1;++r<s;)(i=y.get(d=t.call(e,u=e[r],r)))?i!==!0&&(p[r]=i,i.__data__=u):g[r]=H(u),y.set(d,!0);for(r=-1;++r<o;)r in m&&y.get(m[r])!==!0&&(v[r]=n[r])}else{for(r=-1;++r<h;)i=n[r],u=e[r],i?(i.__data__=u,p[r]=i):g[r]=H(u);for(;s>r;++r)g[r]=H(e[r]);for(;o>r;++r)v[r]=n[r]}g.update=p,g.parentNode=p.parentNode=v.parentNode=n.parentNode,a.push(g),l.push(p),f.push(v)}var r,i,u=-1,o=this.length;if(!arguments.length){for(n=new Array(o=(r=this[0]).length);++u<o;)(i=r[u])&&(n[u]=i.__data__);return n}var a=Z([]),l=E([]),f=E([]);if("function"==typeof n)for(;++u<o;)e(r=this[u],n.call(r,r.parentNode.__data__,u));else for(;++u<o;)e(r=this[u],n);return l.enter=function(){return a},l.exit=function(){return f},l},Co.datum=function(n){return arguments.length?this.property("__data__",n):this.property("__data__")},Co.filter=function(n){var t,e,r,i=[];"function"!=typeof n&&(n=O(n));for(var u=0,o=this.length;o>u;u++){i.push(t=[]),t.parentNode=(e=this[u]).parentNode;for(var a=0,l=e.length;l>a;a++)(r=e[a])&&n.call(r,r.__data__,a,u)&&t.push(r)}return E(i)},Co.order=function(){for(var n=-1,t=this.length;++n<t;)for(var e,r=this[n],i=r.length-1,u=r[i];--i>=0;)(e=r[i])&&(u&&u!==e.nextSibling&&u.parentNode.insertBefore(e,u),u=e);return this},Co.sort=function(n){n=I.apply(this,arguments);for(var t=-1,e=this.length;++t<e;)this[t].sort(n);return this.order()},Co.each=function(n){return Y(this,function(t,e,r){n.call(t,t.__data__,e,r)})},Co.call=function(n){var t=co(arguments);return n.apply(t[0]=this,t),this},Co.empty=function(){return!this.node()},Co.node=function(){for(var n=0,t=this.length;t>n;n++)for(var e=this[n],r=0,i=e.length;i>r;r++){var u=e[r];if(u)return u}return null},Co.size=function(){var n=0;return Y(this,function(){++n}),n};var qo=[];ao.selection.enter=Z,ao.selection.enter.prototype=qo,qo.append=Co.append,qo.empty=Co.empty,qo.node=Co.node,qo.call=Co.call,qo.size=Co.size,qo.select=function(n){for(var t,e,r,i,u,o=[],a=-1,l=this.length;++a<l;){r=(i=this[a]).update,o.push(t=[]),t.parentNode=i.parentNode;for(var c=-1,f=i.length;++c<f;)(u=i[c])?(t.push(r[c]=e=n.call(i.parentNode,u.__data__,c,a)),e.__data__=u.__data__):t.push(null)}return E(o)},qo.insert=function(n,t){return arguments.length<2&&(t=V(this)),Co.insert.call(this,n,t)},ao.select=function(t){var e;return"string"==typeof t?(e=[No(t,fo)],e.parentNode=fo.documentElement):(e=[t],e.parentNode=n(t)),E([e])},ao.selectAll=function(n){var t;return"string"==typeof n?(t=co(Eo(n,fo)),t.parentNode=fo.documentElement):(t=co(n),t.parentNode=null),E([t])},Co.on=function(n,t,e){var r=arguments.length;if(3>r){if("string"!=typeof n){2>r&&(t=!1);for(e in n)this.each(X(e,n[e],t));return this}if(2>r)return(r=this.node()["__on"+n])&&r._;e=!1}return this.each(X(n,t,e))};var To=ao.map({mouseenter:"mouseover",mouseleave:"mouseout"});fo&&To.forEach(function(n){"on"+n in fo&&To.remove(n)});var Ro,Do=0;ao.mouse=function(n){return J(n,k())};var Po=this.navigator&&/WebKit/.test(this.navigator.userAgent)?-1:0;ao.touch=function(n,t,e){if(arguments.length<3&&(e=t,t=k().changedTouches),t)for(var r,i=0,u=t.length;u>i;++i)if((r=t[i]).identifier===e)return J(n,r)},ao.behavior.drag=function(){function n(){this.on("mousedown.drag",u).on("touchstart.drag",o)}function e(n,t,e,u,o){return function(){function a(){var n,e,r=t(h,v);r&&(n=r[0]-M[0],e=r[1]-M[1],g|=n|e,M=r,p({type:"drag",x:r[0]+c[0],y:r[1]+c[1],dx:n,dy:e}))}function l(){t(h,v)&&(y.on(u+d,null).on(o+d,null),m(g),p({type:"dragend"}))}var c,f=this,s=ao.event.target.correspondingElement||ao.event.target,h=f.parentNode,p=r.of(f,arguments),g=0,v=n(),d=".drag"+(null==v?"":"-"+v),y=ao.select(e(s)).on(u+d,a).on(o+d,l),m=W(s),M=t(h,v);i?(c=i.apply(f,arguments),c=[c.x-M[0],c.y-M[1]]):c=[0,0],p({type:"dragstart"})}}var r=N(n,"drag","dragstart","dragend"),i=null,u=e(b,ao.mouse,t,"mousemove","mouseup"),o=e(G,ao.touch,m,"touchmove","touchend");return n.origin=function(t){return arguments.length?(i=t,n):i},ao.rebind(n,r,"on")},ao.touches=function(n,t){return arguments.length<2&&(t=k().touches),t?co(t).map(function(t){var e=J(n,t);return e.identifier=t.identifier,e}):[]};var Uo=1e-6,jo=Uo*Uo,Fo=Math.PI,Ho=2*Fo,Oo=Ho-Uo,Io=Fo/2,Yo=Fo/180,Zo=180/Fo,Vo=Math.SQRT2,Xo=2,$o=4;ao.interpolateZoom=function(n,t){var e,r,i=n[0],u=n[1],o=n[2],a=t[0],l=t[1],c=t[2],f=a-i,s=l-u,h=f*f+s*s;if(jo>h)r=Math.log(c/o)/Vo,e=function(n){return[i+n*f,u+n*s,o*Math.exp(Vo*n*r)]};else{var p=Math.sqrt(h),g=(c*c-o*o+$o*h)/(2*o*Xo*p),v=(c*c-o*o-$o*h)/(2*c*Xo*p),d=Math.log(Math.sqrt(g*g+1)-g),y=Math.log(Math.sqrt(v*v+1)-v);r=(y-d)/Vo,e=function(n){var t=n*r,e=rn(d),a=o/(Xo*p)*(e*un(Vo*t+d)-en(d));return[i+a*f,u+a*s,o*e/rn(Vo*t+d)]}}return e.duration=1e3*r,e},ao.behavior.zoom=function(){function n(n){n.on(L,s).on(Wo+".zoom",p).on("dblclick.zoom",g).on(R,h)}function e(n){return[(n[0]-k.x)/k.k,(n[1]-k.y)/k.k]}function r(n){return[n[0]*k.k+k.x,n[1]*k.k+k.y]}function i(n){k.k=Math.max(A[0],Math.min(A[1],n))}function u(n,t){t=r(t),k.x+=n[0]-t[0],k.y+=n[1]-t[1]}function o(t,e,r,o){t.__chart__={x:k.x,y:k.y,k:k.k},i(Math.pow(2,o)),u(d=e,r),t=ao.select(t),C>0&&(t=t.transition().duration(C)),t.call(n.event)}function a(){b&&b.domain(x.range().map(function(n){return(n-k.x)/k.k}).map(x.invert)),w&&w.domain(_.range().map(function(n){return(n-k.y)/k.k}).map(_.invert))}function l(n){z++||n({type:"zoomstart"})}function c(n){a(),n({type:"zoom",scale:k.k,translate:[k.x,k.y]})}function f(n){--z||(n({type:"zoomend"}),d=null)}function s(){function n(){a=1,u(ao.mouse(i),h),c(o)}function r(){s.on(q,null).on(T,null),p(a),f(o)}var i=this,o=D.of(i,arguments),a=0,s=ao.select(t(i)).on(q,n).on(T,r),h=e(ao.mouse(i)),p=W(i);Il.call(i),l(o)}function h(){function n(){var n=ao.touches(g);return p=k.k,n.forEach(function(n){n.identifier in d&&(d[n.identifier]=e(n))}),n}function t(){var t=ao.event.target;ao.select(t).on(x,r).on(b,a),_.push(t);for(var e=ao.event.changedTouches,i=0,u=e.length;u>i;++i)d[e[i].identifier]=null;var l=n(),c=Date.now();if(1===l.length){if(500>c-M){var f=l[0];o(g,f,d[f.identifier],Math.floor(Math.log(k.k)/Math.LN2)+1),S()}M=c}else if(l.length>1){var f=l[0],s=l[1],h=f[0]-s[0],p=f[1]-s[1];y=h*h+p*p}}function r(){var n,t,e,r,o=ao.touches(g);Il.call(g);for(var a=0,l=o.length;l>a;++a,r=null)if(e=o[a],r=d[e.identifier]){if(t)break;n=e,t=r}if(r){var f=(f=e[0]-n[0])*f+(f=e[1]-n[1])*f,s=y&&Math.sqrt(f/y);n=[(n[0]+e[0])/2,(n[1]+e[1])/2],t=[(t[0]+r[0])/2,(t[1]+r[1])/2],i(s*p)}M=null,u(n,t),c(v)}function a(){if(ao.event.touches.length){for(var t=ao.event.changedTouches,e=0,r=t.length;r>e;++e)delete d[t[e].identifier];for(var i in d)return void n()}ao.selectAll(_).on(m,null),w.on(L,s).on(R,h),N(),f(v)}var p,g=this,v=D.of(g,arguments),d={},y=0,m=".zoom-"+ao.event.changedTouches[0].identifier,x="touchmove"+m,b="touchend"+m,_=[],w=ao.select(g),N=W(g);t(),l(v),w.on(L,null).on(R,t)}function p(){var n=D.of(this,arguments);m?clearTimeout(m):(Il.call(this),v=e(d=y||ao.mouse(this)),l(n)),m=setTimeout(function(){m=null,f(n)},50),S(),i(Math.pow(2,.002*Bo())*k.k),u(d,v),c(n)}function g(){var n=ao.mouse(this),t=Math.log(k.k)/Math.LN2;o(this,n,e(n),ao.event.shiftKey?Math.ceil(t)-1:Math.floor(t)+1)}var v,d,y,m,M,x,b,_,w,k={x:0,y:0,k:1},E=[960,500],A=Jo,C=250,z=0,L="mousedown.zoom",q="mousemove.zoom",T="mouseup.zoom",R="touchstart.zoom",D=N(n,"zoomstart","zoom","zoomend");return Wo||(Wo="onwheel"in fo?(Bo=function(){return-ao.event.deltaY*(ao.event.deltaMode?120:1)},"wheel"):"onmousewheel"in fo?(Bo=function(){return ao.event.wheelDelta},"mousewheel"):(Bo=function(){return-ao.event.detail},"MozMousePixelScroll")),n.event=function(n){n.each(function(){var n=D.of(this,arguments),t=k;Hl?ao.select(this).transition().each("start.zoom",function(){k=this.__chart__||{x:0,y:0,k:1},l(n)}).tween("zoom:zoom",function(){var e=E[0],r=E[1],i=d?d[0]:e/2,u=d?d[1]:r/2,o=ao.interpolateZoom([(i-k.x)/k.k,(u-k.y)/k.k,e/k.k],[(i-t.x)/t.k,(u-t.y)/t.k,e/t.k]);return function(t){var r=o(t),a=e/r[2];this.__chart__=k={x:i-r[0]*a,y:u-r[1]*a,k:a},c(n)}}).each("interrupt.zoom",function(){f(n)}).each("end.zoom",function(){f(n)}):(this.__chart__=k,l(n),c(n),f(n))})},n.translate=function(t){return arguments.length?(k={x:+t[0],y:+t[1],k:k.k},a(),n):[k.x,k.y]},n.scale=function(t){return arguments.length?(k={x:k.x,y:k.y,k:null},i(+t),a(),n):k.k},n.scaleExtent=function(t){return arguments.length?(A=null==t?Jo:[+t[0],+t[1]],n):A},n.center=function(t){return arguments.length?(y=t&&[+t[0],+t[1]],n):y},n.size=function(t){return arguments.length?(E=t&&[+t[0],+t[1]],n):E},n.duration=function(t){return arguments.length?(C=+t,n):C},n.x=function(t){return arguments.length?(b=t,x=t.copy(),k={x:0,y:0,k:1},n):b},n.y=function(t){return arguments.length?(w=t,_=t.copy(),k={x:0,y:0,k:1},n):w},ao.rebind(n,D,"on")};var Bo,Wo,Jo=[0,1/0];ao.color=an,an.prototype.toString=function(){return this.rgb()+""},ao.hsl=ln;var Go=ln.prototype=new an;Go.brighter=function(n){return n=Math.pow(.7,arguments.length?n:1),new ln(this.h,this.s,this.l/n)},Go.darker=function(n){return n=Math.pow(.7,arguments.length?n:1),new ln(this.h,this.s,n*this.l)},Go.rgb=function(){return cn(this.h,this.s,this.l)},ao.hcl=fn;var Ko=fn.prototype=new an;Ko.brighter=function(n){return new fn(this.h,this.c,Math.min(100,this.l+Qo*(arguments.length?n:1)))},Ko.darker=function(n){return new fn(this.h,this.c,Math.max(0,this.l-Qo*(arguments.length?n:1)))},Ko.rgb=function(){return sn(this.h,this.c,this.l).rgb()},ao.lab=hn;var Qo=18,na=.95047,ta=1,ea=1.08883,ra=hn.prototype=new an;ra.brighter=function(n){return new hn(Math.min(100,this.l+Qo*(arguments.length?n:1)),this.a,this.b)},ra.darker=function(n){return new hn(Math.max(0,this.l-Qo*(arguments.length?n:1)),this.a,this.b)},ra.rgb=function(){return pn(this.l,this.a,this.b)},ao.rgb=mn;var ia=mn.prototype=new an;ia.brighter=function(n){n=Math.pow(.7,arguments.length?n:1);var t=this.r,e=this.g,r=this.b,i=30;return t||e||r?(t&&i>t&&(t=i),e&&i>e&&(e=i),r&&i>r&&(r=i),new mn(Math.min(255,t/n),Math.min(255,e/n),Math.min(255,r/n))):new mn(i,i,i)},ia.darker=function(n){return n=Math.pow(.7,arguments.length?n:1),new mn(n*this.r,n*this.g,n*this.b)},ia.hsl=function(){return wn(this.r,this.g,this.b)},ia.toString=function(){return"#"+bn(this.r)+bn(this.g)+bn(this.b)};var ua=ao.map({aliceblue:15792383,antiquewhite:16444375,aqua:65535,aquamarine:8388564,azure:15794175,beige:16119260,bisque:16770244,black:0,blanchedalmond:16772045,blue:255,blueviolet:9055202,brown:10824234,burlywood:14596231,cadetblue:6266528,chartreuse:8388352,chocolate:13789470,coral:16744272,cornflowerblue:6591981,cornsilk:16775388,crimson:14423100,cyan:65535,darkblue:139,darkcyan:35723,darkgoldenrod:12092939,darkgray:11119017,darkgreen:25600,darkgrey:11119017,darkkhaki:12433259,darkmagenta:9109643,darkolivegreen:5597999,darkorange:16747520,darkorchid:10040012,darkred:9109504,darksalmon:15308410,darkseagreen:9419919,darkslateblue:4734347,darkslategray:3100495,darkslategrey:3100495,darkturquoise:52945,darkviolet:9699539,deeppink:16716947,deepskyblue:49151,dimgray:6908265,dimgrey:6908265,dodgerblue:2003199,firebrick:11674146,floralwhite:16775920,forestgreen:2263842,fuchsia:16711935,gainsboro:14474460,ghostwhite:16316671,gold:16766720,goldenrod:14329120,gray:8421504,green:32768,greenyellow:11403055,grey:8421504,honeydew:15794160,hotpink:16738740,indianred:13458524,indigo:4915330,ivory:16777200,khaki:15787660,lavender:15132410,lavenderblush:16773365,lawngreen:8190976,lemonchiffon:16775885,lightblue:11393254,lightcoral:15761536,lightcyan:14745599,lightgoldenrodyellow:16448210,lightgray:13882323,lightgreen:9498256,lightgrey:13882323,lightpink:16758465,lightsalmon:16752762,lightseagreen:2142890,lightskyblue:8900346,lightslategray:7833753,lightslategrey:7833753,lightsteelblue:11584734,lightyellow:16777184,lime:65280,limegreen:3329330,linen:16445670,magenta:16711935,maroon:8388608,mediumaquamarine:6737322,mediumblue:205,mediumorchid:12211667,mediumpurple:9662683,mediumseagreen:3978097,mediumslateblue:8087790,mediumspringgreen:64154,mediumturquoise:4772300,mediumvioletred:13047173,midnightblue:1644912,mintcream:16121850,mistyrose:16770273,moccasin:16770229,navajowhite:16768685,navy:128,oldlace:16643558,olive:8421376,olivedrab:7048739,orange:16753920,orangered:16729344,orchid:14315734,palegoldenrod:15657130,palegreen:10025880,paleturquoise:11529966,palevioletred:14381203,papayawhip:16773077,peachpuff:16767673,peru:13468991,pink:16761035,plum:14524637,powderblue:11591910,purple:8388736,rebeccapurple:6697881,red:16711680,rosybrown:12357519,royalblue:4286945,saddlebrown:9127187,salmon:16416882,sandybrown:16032864,seagreen:3050327,seashell:16774638,sienna:10506797,silver:12632256,skyblue:8900331,slateblue:6970061,slategray:7372944,slategrey:7372944,snow:16775930,springgreen:65407,steelblue:4620980,tan:13808780,teal:32896,thistle:14204888,tomato:16737095,turquoise:4251856,violet:15631086,wheat:16113331,white:16777215,whitesmoke:16119285,yellow:16776960,yellowgreen:10145074});ua.forEach(function(n,t){ua.set(n,Mn(t))}),ao.functor=En,ao.xhr=An(m),ao.dsv=function(n,t){function e(n,e,u){arguments.length<3&&(u=e,e=null);var o=Cn(n,t,null==e?r:i(e),u);return o.row=function(n){return arguments.length?o.response(null==(e=n)?r:i(n)):e},o}function r(n){return e.parse(n.responseText)}function i(n){return function(t){return e.parse(t.responseText,n)}}function u(t){return t.map(o).join(n)}function o(n){return a.test(n)?'"'+n.replace(/\"/g,'""')+'"':n}var a=new RegExp('["'+n+"\n]"),l=n.charCodeAt(0);return e.parse=function(n,t){var r;return e.parseRows(n,function(n,e){if(r)return r(n,e-1);var i=new Function("d","return {"+n.map(function(n,t){return JSON.stringify(n)+": d["+t+"]"}).join(",")+"}");r=t?function(n,e){return t(i(n),e)}:i})},e.parseRows=function(n,t){function e(){if(f>=c)return o;if(i)return i=!1,u;var t=f;if(34===n.charCodeAt(t)){for(var e=t;e++<c;)if(34===n.charCodeAt(e)){if(34!==n.charCodeAt(e+1))break;++e}f=e+2;var r=n.charCodeAt(e+1);return 13===r?(i=!0,10===n.charCodeAt(e+2)&&++f):10===r&&(i=!0),n.slice(t+1,e).replace(/""/g,'"')}for(;c>f;){var r=n.charCodeAt(f++),a=1;if(10===r)i=!0;else if(13===r)i=!0,10===n.charCodeAt(f)&&(++f,++a);else if(r!==l)continue;return n.slice(t,f-a)}return n.slice(t)}for(var r,i,u={},o={},a=[],c=n.length,f=0,s=0;(r=e())!==o;){for(var h=[];r!==u&&r!==o;)h.push(r),r=e();t&&null==(h=t(h,s++))||a.push(h)}return a},e.format=function(t){if(Array.isArray(t[0]))return e.formatRows(t);var r=new y,i=[];return t.forEach(function(n){for(var t in n)r.has(t)||i.push(r.add(t))}),[i.map(o).join(n)].concat(t.map(function(t){return i.map(function(n){return o(t[n])}).join(n)})).join("\n")},e.formatRows=function(n){return n.map(u).join("\n")},e},ao.csv=ao.dsv(",","text/csv"),ao.tsv=ao.dsv("	","text/tab-separated-values");var oa,aa,la,ca,fa=this[x(this,"requestAnimationFrame")]||function(n){setTimeout(n,17)};ao.timer=function(){qn.apply(this,arguments)},ao.timer.flush=function(){Rn(),Dn()},ao.round=function(n,t){return t?Math.round(n*(t=Math.pow(10,t)))/t:Math.round(n)};var sa=["y","z","a","f","p","n","\xb5","m","","k","M","G","T","P","E","Z","Y"].map(Un);ao.formatPrefix=function(n,t){var e=0;return(n=+n)&&(0>n&&(n*=-1),t&&(n=ao.round(n,Pn(n,t))),e=1+Math.floor(1e-12+Math.log(n)/Math.LN10),e=Math.max(-24,Math.min(24,3*Math.floor((e-1)/3)))),sa[8+e/3]};var ha=/(?:([^{])?([<>=^]))?([+\- ])?([$#])?(0)?(\d+)?(,)?(\.-?\d+)?([a-z%])?/i,pa=ao.map({b:function(n){return n.toString(2)},c:function(n){return String.fromCharCode(n)},o:function(n){return n.toString(8)},x:function(n){return n.toString(16)},X:function(n){return n.toString(16).toUpperCase()},g:function(n,t){return n.toPrecision(t)},e:function(n,t){return n.toExponential(t)},f:function(n,t){return n.toFixed(t)},r:function(n,t){return(n=ao.round(n,Pn(n,t))).toFixed(Math.max(0,Math.min(20,Pn(n*(1+1e-15),t))))}}),ga=ao.time={},va=Date;Hn.prototype={getDate:function(){return this._.getUTCDate()},getDay:function(){return this._.getUTCDay()},getFullYear:function(){return this._.getUTCFullYear()},getHours:function(){return this._.getUTCHours()},getMilliseconds:function(){return this._.getUTCMilliseconds()},getMinutes:function(){return this._.getUTCMinutes()},getMonth:function(){return this._.getUTCMonth()},getSeconds:function(){return this._.getUTCSeconds()},getTime:function(){return this._.getTime()},getTimezoneOffset:function(){return 0},valueOf:function(){return this._.valueOf()},setDate:function(){da.setUTCDate.apply(this._,arguments)},setDay:function(){da.setUTCDay.apply(this._,arguments)},setFullYear:function(){da.setUTCFullYear.apply(this._,arguments)},setHours:function(){da.setUTCHours.apply(this._,arguments)},setMilliseconds:function(){da.setUTCMilliseconds.apply(this._,arguments)},setMinutes:function(){da.setUTCMinutes.apply(this._,arguments)},setMonth:function(){da.setUTCMonth.apply(this._,arguments)},setSeconds:function(){da.setUTCSeconds.apply(this._,arguments)},setTime:function(){da.setTime.apply(this._,arguments)}};var da=Date.prototype;ga.year=On(function(n){return n=ga.day(n),n.setMonth(0,1),n},function(n,t){n.setFullYear(n.getFullYear()+t)},function(n){return n.getFullYear()}),ga.years=ga.year.range,ga.years.utc=ga.year.utc.range,ga.day=On(function(n){var t=new va(2e3,0);return t.setFullYear(n.getFullYear(),n.getMonth(),n.getDate()),t},function(n,t){n.setDate(n.getDate()+t)},function(n){return n.getDate()-1}),ga.days=ga.day.range,ga.days.utc=ga.day.utc.range,ga.dayOfYear=function(n){var t=ga.year(n);return Math.floor((n-t-6e4*(n.getTimezoneOffset()-t.getTimezoneOffset()))/864e5)},["sunday","monday","tuesday","wednesday","thursday","friday","saturday"].forEach(function(n,t){t=7-t;var e=ga[n]=On(function(n){return(n=ga.day(n)).setDate(n.getDate()-(n.getDay()+t)%7),n},function(n,t){n.setDate(n.getDate()+7*Math.floor(t))},function(n){var e=ga.year(n).getDay();return Math.floor((ga.dayOfYear(n)+(e+t)%7)/7)-(e!==t)});ga[n+"s"]=e.range,ga[n+"s"].utc=e.utc.range,ga[n+"OfYear"]=function(n){var e=ga.year(n).getDay();return Math.floor((ga.dayOfYear(n)+(e+t)%7)/7)}}),ga.week=ga.sunday,ga.weeks=ga.sunday.range,ga.weeks.utc=ga.sunday.utc.range,ga.weekOfYear=ga.sundayOfYear;var ya={"-":"",_:" ",0:"0"},ma=/^\s*\d+/,Ma=/^%/;ao.locale=function(n){return{numberFormat:jn(n),timeFormat:Yn(n)}};var xa=ao.locale({decimal:".",thousands:",",grouping:[3],currency:["$",""],dateTime:"%a %b %e %X %Y",date:"%m/%d/%Y",time:"%H:%M:%S",periods:["AM","PM"],days:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],
+shortDays:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],months:["January","February","March","April","May","June","July","August","September","October","November","December"],shortMonths:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"]});ao.format=xa.numberFormat,ao.geo={},ft.prototype={s:0,t:0,add:function(n){st(n,this.t,ba),st(ba.s,this.s,this),this.s?this.t+=ba.t:this.s=ba.t},reset:function(){this.s=this.t=0},valueOf:function(){return this.s}};var ba=new ft;ao.geo.stream=function(n,t){n&&_a.hasOwnProperty(n.type)?_a[n.type](n,t):ht(n,t)};var _a={Feature:function(n,t){ht(n.geometry,t)},FeatureCollection:function(n,t){for(var e=n.features,r=-1,i=e.length;++r<i;)ht(e[r].geometry,t)}},wa={Sphere:function(n,t){t.sphere()},Point:function(n,t){n=n.coordinates,t.point(n[0],n[1],n[2])},MultiPoint:function(n,t){for(var e=n.coordinates,r=-1,i=e.length;++r<i;)n=e[r],t.point(n[0],n[1],n[2])},LineString:function(n,t){pt(n.coordinates,t,0)},MultiLineString:function(n,t){for(var e=n.coordinates,r=-1,i=e.length;++r<i;)pt(e[r],t,0)},Polygon:function(n,t){gt(n.coordinates,t)},MultiPolygon:function(n,t){for(var e=n.coordinates,r=-1,i=e.length;++r<i;)gt(e[r],t)},GeometryCollection:function(n,t){for(var e=n.geometries,r=-1,i=e.length;++r<i;)ht(e[r],t)}};ao.geo.area=function(n){return Sa=0,ao.geo.stream(n,Na),Sa};var Sa,ka=new ft,Na={sphere:function(){Sa+=4*Fo},point:b,lineStart:b,lineEnd:b,polygonStart:function(){ka.reset(),Na.lineStart=vt},polygonEnd:function(){var n=2*ka;Sa+=0>n?4*Fo+n:n,Na.lineStart=Na.lineEnd=Na.point=b}};ao.geo.bounds=function(){function n(n,t){M.push(x=[f=n,h=n]),s>t&&(s=t),t>p&&(p=t)}function t(t,e){var r=dt([t*Yo,e*Yo]);if(y){var i=mt(y,r),u=[i[1],-i[0],0],o=mt(u,i);bt(o),o=_t(o);var l=t-g,c=l>0?1:-1,v=o[0]*Zo*c,d=xo(l)>180;if(d^(v>c*g&&c*t>v)){var m=o[1]*Zo;m>p&&(p=m)}else if(v=(v+360)%360-180,d^(v>c*g&&c*t>v)){var m=-o[1]*Zo;s>m&&(s=m)}else s>e&&(s=e),e>p&&(p=e);d?g>t?a(f,t)>a(f,h)&&(h=t):a(t,h)>a(f,h)&&(f=t):h>=f?(f>t&&(f=t),t>h&&(h=t)):t>g?a(f,t)>a(f,h)&&(h=t):a(t,h)>a(f,h)&&(f=t)}else n(t,e);y=r,g=t}function e(){b.point=t}function r(){x[0]=f,x[1]=h,b.point=n,y=null}function i(n,e){if(y){var r=n-g;m+=xo(r)>180?r+(r>0?360:-360):r}else v=n,d=e;Na.point(n,e),t(n,e)}function u(){Na.lineStart()}function o(){i(v,d),Na.lineEnd(),xo(m)>Uo&&(f=-(h=180)),x[0]=f,x[1]=h,y=null}function a(n,t){return(t-=n)<0?t+360:t}function l(n,t){return n[0]-t[0]}function c(n,t){return t[0]<=t[1]?t[0]<=n&&n<=t[1]:n<t[0]||t[1]<n}var f,s,h,p,g,v,d,y,m,M,x,b={point:n,lineStart:e,lineEnd:r,polygonStart:function(){b.point=i,b.lineStart=u,b.lineEnd=o,m=0,Na.polygonStart()},polygonEnd:function(){Na.polygonEnd(),b.point=n,b.lineStart=e,b.lineEnd=r,0>ka?(f=-(h=180),s=-(p=90)):m>Uo?p=90:-Uo>m&&(s=-90),x[0]=f,x[1]=h}};return function(n){p=h=-(f=s=1/0),M=[],ao.geo.stream(n,b);var t=M.length;if(t){M.sort(l);for(var e,r=1,i=M[0],u=[i];t>r;++r)e=M[r],c(e[0],i)||c(e[1],i)?(a(i[0],e[1])>a(i[0],i[1])&&(i[1]=e[1]),a(e[0],i[1])>a(i[0],i[1])&&(i[0]=e[0])):u.push(i=e);for(var o,e,g=-(1/0),t=u.length-1,r=0,i=u[t];t>=r;i=e,++r)e=u[r],(o=a(i[1],e[0]))>g&&(g=o,f=e[0],h=i[1])}return M=x=null,f===1/0||s===1/0?[[NaN,NaN],[NaN,NaN]]:[[f,s],[h,p]]}}(),ao.geo.centroid=function(n){Ea=Aa=Ca=za=La=qa=Ta=Ra=Da=Pa=Ua=0,ao.geo.stream(n,ja);var t=Da,e=Pa,r=Ua,i=t*t+e*e+r*r;return jo>i&&(t=qa,e=Ta,r=Ra,Uo>Aa&&(t=Ca,e=za,r=La),i=t*t+e*e+r*r,jo>i)?[NaN,NaN]:[Math.atan2(e,t)*Zo,tn(r/Math.sqrt(i))*Zo]};var Ea,Aa,Ca,za,La,qa,Ta,Ra,Da,Pa,Ua,ja={sphere:b,point:St,lineStart:Nt,lineEnd:Et,polygonStart:function(){ja.lineStart=At},polygonEnd:function(){ja.lineStart=Nt}},Fa=Rt(zt,jt,Ht,[-Fo,-Fo/2]),Ha=1e9;ao.geo.clipExtent=function(){var n,t,e,r,i,u,o={stream:function(n){return i&&(i.valid=!1),i=u(n),i.valid=!0,i},extent:function(a){return arguments.length?(u=Zt(n=+a[0][0],t=+a[0][1],e=+a[1][0],r=+a[1][1]),i&&(i.valid=!1,i=null),o):[[n,t],[e,r]]}};return o.extent([[0,0],[960,500]])},(ao.geo.conicEqualArea=function(){return Vt(Xt)}).raw=Xt,ao.geo.albers=function(){return ao.geo.conicEqualArea().rotate([96,0]).center([-.6,38.7]).parallels([29.5,45.5]).scale(1070)},ao.geo.albersUsa=function(){function n(n){var u=n[0],o=n[1];return t=null,e(u,o),t||(r(u,o),t)||i(u,o),t}var t,e,r,i,u=ao.geo.albers(),o=ao.geo.conicEqualArea().rotate([154,0]).center([-2,58.5]).parallels([55,65]),a=ao.geo.conicEqualArea().rotate([157,0]).center([-3,19.9]).parallels([8,18]),l={point:function(n,e){t=[n,e]}};return n.invert=function(n){var t=u.scale(),e=u.translate(),r=(n[0]-e[0])/t,i=(n[1]-e[1])/t;return(i>=.12&&.234>i&&r>=-.425&&-.214>r?o:i>=.166&&.234>i&&r>=-.214&&-.115>r?a:u).invert(n)},n.stream=function(n){var t=u.stream(n),e=o.stream(n),r=a.stream(n);return{point:function(n,i){t.point(n,i),e.point(n,i),r.point(n,i)},sphere:function(){t.sphere(),e.sphere(),r.sphere()},lineStart:function(){t.lineStart(),e.lineStart(),r.lineStart()},lineEnd:function(){t.lineEnd(),e.lineEnd(),r.lineEnd()},polygonStart:function(){t.polygonStart(),e.polygonStart(),r.polygonStart()},polygonEnd:function(){t.polygonEnd(),e.polygonEnd(),r.polygonEnd()}}},n.precision=function(t){return arguments.length?(u.precision(t),o.precision(t),a.precision(t),n):u.precision()},n.scale=function(t){return arguments.length?(u.scale(t),o.scale(.35*t),a.scale(t),n.translate(u.translate())):u.scale()},n.translate=function(t){if(!arguments.length)return u.translate();var c=u.scale(),f=+t[0],s=+t[1];return e=u.translate(t).clipExtent([[f-.455*c,s-.238*c],[f+.455*c,s+.238*c]]).stream(l).point,r=o.translate([f-.307*c,s+.201*c]).clipExtent([[f-.425*c+Uo,s+.12*c+Uo],[f-.214*c-Uo,s+.234*c-Uo]]).stream(l).point,i=a.translate([f-.205*c,s+.212*c]).clipExtent([[f-.214*c+Uo,s+.166*c+Uo],[f-.115*c-Uo,s+.234*c-Uo]]).stream(l).point,n},n.scale(1070)};var Oa,Ia,Ya,Za,Va,Xa,$a={point:b,lineStart:b,lineEnd:b,polygonStart:function(){Ia=0,$a.lineStart=$t},polygonEnd:function(){$a.lineStart=$a.lineEnd=$a.point=b,Oa+=xo(Ia/2)}},Ba={point:Bt,lineStart:b,lineEnd:b,polygonStart:b,polygonEnd:b},Wa={point:Gt,lineStart:Kt,lineEnd:Qt,polygonStart:function(){Wa.lineStart=ne},polygonEnd:function(){Wa.point=Gt,Wa.lineStart=Kt,Wa.lineEnd=Qt}};ao.geo.path=function(){function n(n){return n&&("function"==typeof a&&u.pointRadius(+a.apply(this,arguments)),o&&o.valid||(o=i(u)),ao.geo.stream(n,o)),u.result()}function t(){return o=null,n}var e,r,i,u,o,a=4.5;return n.area=function(n){return Oa=0,ao.geo.stream(n,i($a)),Oa},n.centroid=function(n){return Ca=za=La=qa=Ta=Ra=Da=Pa=Ua=0,ao.geo.stream(n,i(Wa)),Ua?[Da/Ua,Pa/Ua]:Ra?[qa/Ra,Ta/Ra]:La?[Ca/La,za/La]:[NaN,NaN]},n.bounds=function(n){return Va=Xa=-(Ya=Za=1/0),ao.geo.stream(n,i(Ba)),[[Ya,Za],[Va,Xa]]},n.projection=function(n){return arguments.length?(i=(e=n)?n.stream||re(n):m,t()):e},n.context=function(n){return arguments.length?(u=null==(r=n)?new Wt:new te(n),"function"!=typeof a&&u.pointRadius(a),t()):r},n.pointRadius=function(t){return arguments.length?(a="function"==typeof t?t:(u.pointRadius(+t),+t),n):a},n.projection(ao.geo.albersUsa()).context(null)},ao.geo.transform=function(n){return{stream:function(t){var e=new ie(t);for(var r in n)e[r]=n[r];return e}}},ie.prototype={point:function(n,t){this.stream.point(n,t)},sphere:function(){this.stream.sphere()},lineStart:function(){this.stream.lineStart()},lineEnd:function(){this.stream.lineEnd()},polygonStart:function(){this.stream.polygonStart()},polygonEnd:function(){this.stream.polygonEnd()}},ao.geo.projection=oe,ao.geo.projectionMutator=ae,(ao.geo.equirectangular=function(){return oe(ce)}).raw=ce.invert=ce,ao.geo.rotation=function(n){function t(t){return t=n(t[0]*Yo,t[1]*Yo),t[0]*=Zo,t[1]*=Zo,t}return n=se(n[0]%360*Yo,n[1]*Yo,n.length>2?n[2]*Yo:0),t.invert=function(t){return t=n.invert(t[0]*Yo,t[1]*Yo),t[0]*=Zo,t[1]*=Zo,t},t},fe.invert=ce,ao.geo.circle=function(){function n(){var n="function"==typeof r?r.apply(this,arguments):r,t=se(-n[0]*Yo,-n[1]*Yo,0).invert,i=[];return e(null,null,1,{point:function(n,e){i.push(n=t(n,e)),n[0]*=Zo,n[1]*=Zo}}),{type:"Polygon",coordinates:[i]}}var t,e,r=[0,0],i=6;return n.origin=function(t){return arguments.length?(r=t,n):r},n.angle=function(r){return arguments.length?(e=ve((t=+r)*Yo,i*Yo),n):t},n.precision=function(r){return arguments.length?(e=ve(t*Yo,(i=+r)*Yo),n):i},n.angle(90)},ao.geo.distance=function(n,t){var e,r=(t[0]-n[0])*Yo,i=n[1]*Yo,u=t[1]*Yo,o=Math.sin(r),a=Math.cos(r),l=Math.sin(i),c=Math.cos(i),f=Math.sin(u),s=Math.cos(u);return Math.atan2(Math.sqrt((e=s*o)*e+(e=c*f-l*s*a)*e),l*f+c*s*a)},ao.geo.graticule=function(){function n(){return{type:"MultiLineString",coordinates:t()}}function t(){return ao.range(Math.ceil(u/d)*d,i,d).map(h).concat(ao.range(Math.ceil(c/y)*y,l,y).map(p)).concat(ao.range(Math.ceil(r/g)*g,e,g).filter(function(n){return xo(n%d)>Uo}).map(f)).concat(ao.range(Math.ceil(a/v)*v,o,v).filter(function(n){return xo(n%y)>Uo}).map(s))}var e,r,i,u,o,a,l,c,f,s,h,p,g=10,v=g,d=90,y=360,m=2.5;return n.lines=function(){return t().map(function(n){return{type:"LineString",coordinates:n}})},n.outline=function(){return{type:"Polygon",coordinates:[h(u).concat(p(l).slice(1),h(i).reverse().slice(1),p(c).reverse().slice(1))]}},n.extent=function(t){return arguments.length?n.majorExtent(t).minorExtent(t):n.minorExtent()},n.majorExtent=function(t){return arguments.length?(u=+t[0][0],i=+t[1][0],c=+t[0][1],l=+t[1][1],u>i&&(t=u,u=i,i=t),c>l&&(t=c,c=l,l=t),n.precision(m)):[[u,c],[i,l]]},n.minorExtent=function(t){return arguments.length?(r=+t[0][0],e=+t[1][0],a=+t[0][1],o=+t[1][1],r>e&&(t=r,r=e,e=t),a>o&&(t=a,a=o,o=t),n.precision(m)):[[r,a],[e,o]]},n.step=function(t){return arguments.length?n.majorStep(t).minorStep(t):n.minorStep()},n.majorStep=function(t){return arguments.length?(d=+t[0],y=+t[1],n):[d,y]},n.minorStep=function(t){return arguments.length?(g=+t[0],v=+t[1],n):[g,v]},n.precision=function(t){return arguments.length?(m=+t,f=ye(a,o,90),s=me(r,e,m),h=ye(c,l,90),p=me(u,i,m),n):m},n.majorExtent([[-180,-90+Uo],[180,90-Uo]]).minorExtent([[-180,-80-Uo],[180,80+Uo]])},ao.geo.greatArc=function(){function n(){return{type:"LineString",coordinates:[t||r.apply(this,arguments),e||i.apply(this,arguments)]}}var t,e,r=Me,i=xe;return n.distance=function(){return ao.geo.distance(t||r.apply(this,arguments),e||i.apply(this,arguments))},n.source=function(e){return arguments.length?(r=e,t="function"==typeof e?null:e,n):r},n.target=function(t){return arguments.length?(i=t,e="function"==typeof t?null:t,n):i},n.precision=function(){return arguments.length?n:0},n},ao.geo.interpolate=function(n,t){return be(n[0]*Yo,n[1]*Yo,t[0]*Yo,t[1]*Yo)},ao.geo.length=function(n){return Ja=0,ao.geo.stream(n,Ga),Ja};var Ja,Ga={sphere:b,point:b,lineStart:_e,lineEnd:b,polygonStart:b,polygonEnd:b},Ka=we(function(n){return Math.sqrt(2/(1+n))},function(n){return 2*Math.asin(n/2)});(ao.geo.azimuthalEqualArea=function(){return oe(Ka)}).raw=Ka;var Qa=we(function(n){var t=Math.acos(n);return t&&t/Math.sin(t)},m);(ao.geo.azimuthalEquidistant=function(){return oe(Qa)}).raw=Qa,(ao.geo.conicConformal=function(){return Vt(Se)}).raw=Se,(ao.geo.conicEquidistant=function(){return Vt(ke)}).raw=ke;var nl=we(function(n){return 1/n},Math.atan);(ao.geo.gnomonic=function(){return oe(nl)}).raw=nl,Ne.invert=function(n,t){return[n,2*Math.atan(Math.exp(t))-Io]},(ao.geo.mercator=function(){return Ee(Ne)}).raw=Ne;var tl=we(function(){return 1},Math.asin);(ao.geo.orthographic=function(){return oe(tl)}).raw=tl;var el=we(function(n){return 1/(1+n)},function(n){return 2*Math.atan(n)});(ao.geo.stereographic=function(){return oe(el)}).raw=el,Ae.invert=function(n,t){return[-t,2*Math.atan(Math.exp(n))-Io]},(ao.geo.transverseMercator=function(){var n=Ee(Ae),t=n.center,e=n.rotate;return n.center=function(n){return n?t([-n[1],n[0]]):(n=t(),[n[1],-n[0]])},n.rotate=function(n){return n?e([n[0],n[1],n.length>2?n[2]+90:90]):(n=e(),[n[0],n[1],n[2]-90])},e([0,0,90])}).raw=Ae,ao.geom={},ao.geom.hull=function(n){function t(n){if(n.length<3)return[];var t,i=En(e),u=En(r),o=n.length,a=[],l=[];for(t=0;o>t;t++)a.push([+i.call(this,n[t],t),+u.call(this,n[t],t),t]);for(a.sort(qe),t=0;o>t;t++)l.push([a[t][0],-a[t][1]]);var c=Le(a),f=Le(l),s=f[0]===c[0],h=f[f.length-1]===c[c.length-1],p=[];for(t=c.length-1;t>=0;--t)p.push(n[a[c[t]][2]]);for(t=+s;t<f.length-h;++t)p.push(n[a[f[t]][2]]);return p}var e=Ce,r=ze;return arguments.length?t(n):(t.x=function(n){return arguments.length?(e=n,t):e},t.y=function(n){return arguments.length?(r=n,t):r},t)},ao.geom.polygon=function(n){return ko(n,rl),n};var rl=ao.geom.polygon.prototype=[];rl.area=function(){for(var n,t=-1,e=this.length,r=this[e-1],i=0;++t<e;)n=r,r=this[t],i+=n[1]*r[0]-n[0]*r[1];return.5*i},rl.centroid=function(n){var t,e,r=-1,i=this.length,u=0,o=0,a=this[i-1];for(arguments.length||(n=-1/(6*this.area()));++r<i;)t=a,a=this[r],e=t[0]*a[1]-a[0]*t[1],u+=(t[0]+a[0])*e,o+=(t[1]+a[1])*e;return[u*n,o*n]},rl.clip=function(n){for(var t,e,r,i,u,o,a=De(n),l=-1,c=this.length-De(this),f=this[c-1];++l<c;){for(t=n.slice(),n.length=0,i=this[l],u=t[(r=t.length-a)-1],e=-1;++e<r;)o=t[e],Te(o,f,i)?(Te(u,f,i)||n.push(Re(u,o,f,i)),n.push(o)):Te(u,f,i)&&n.push(Re(u,o,f,i)),u=o;a&&n.push(n[0]),f=i}return n};var il,ul,ol,al,ll,cl=[],fl=[];Ye.prototype.prepare=function(){for(var n,t=this.edges,e=t.length;e--;)n=t[e].edge,n.b&&n.a||t.splice(e,1);return t.sort(Ve),t.length},tr.prototype={start:function(){return this.edge.l===this.site?this.edge.a:this.edge.b},end:function(){return this.edge.l===this.site?this.edge.b:this.edge.a}},er.prototype={insert:function(n,t){var e,r,i;if(n){if(t.P=n,t.N=n.N,n.N&&(n.N.P=t),n.N=t,n.R){for(n=n.R;n.L;)n=n.L;n.L=t}else n.R=t;e=n}else this._?(n=or(this._),t.P=null,t.N=n,n.P=n.L=t,e=n):(t.P=t.N=null,this._=t,e=null);for(t.L=t.R=null,t.U=e,t.C=!0,n=t;e&&e.C;)r=e.U,e===r.L?(i=r.R,i&&i.C?(e.C=i.C=!1,r.C=!0,n=r):(n===e.R&&(ir(this,e),n=e,e=n.U),e.C=!1,r.C=!0,ur(this,r))):(i=r.L,i&&i.C?(e.C=i.C=!1,r.C=!0,n=r):(n===e.L&&(ur(this,e),n=e,e=n.U),e.C=!1,r.C=!0,ir(this,r))),e=n.U;this._.C=!1},remove:function(n){n.N&&(n.N.P=n.P),n.P&&(n.P.N=n.N),n.N=n.P=null;var t,e,r,i=n.U,u=n.L,o=n.R;if(e=u?o?or(o):u:o,i?i.L===n?i.L=e:i.R=e:this._=e,u&&o?(r=e.C,e.C=n.C,e.L=u,u.U=e,e!==o?(i=e.U,e.U=n.U,n=e.R,i.L=n,e.R=o,o.U=e):(e.U=i,i=e,n=e.R)):(r=n.C,n=e),n&&(n.U=i),!r){if(n&&n.C)return void(n.C=!1);do{if(n===this._)break;if(n===i.L){if(t=i.R,t.C&&(t.C=!1,i.C=!0,ir(this,i),t=i.R),t.L&&t.L.C||t.R&&t.R.C){t.R&&t.R.C||(t.L.C=!1,t.C=!0,ur(this,t),t=i.R),t.C=i.C,i.C=t.R.C=!1,ir(this,i),n=this._;break}}else if(t=i.L,t.C&&(t.C=!1,i.C=!0,ur(this,i),t=i.L),t.L&&t.L.C||t.R&&t.R.C){t.L&&t.L.C||(t.R.C=!1,t.C=!0,ir(this,t),t=i.L),t.C=i.C,i.C=t.L.C=!1,ur(this,i),n=this._;break}t.C=!0,n=i,i=i.U}while(!n.C);n&&(n.C=!1)}}},ao.geom.voronoi=function(n){function t(n){var t=new Array(n.length),r=a[0][0],i=a[0][1],u=a[1][0],o=a[1][1];return ar(e(n),a).cells.forEach(function(e,a){var l=e.edges,c=e.site,f=t[a]=l.length?l.map(function(n){var t=n.start();return[t.x,t.y]}):c.x>=r&&c.x<=u&&c.y>=i&&c.y<=o?[[r,o],[u,o],[u,i],[r,i]]:[];f.point=n[a]}),t}function e(n){return n.map(function(n,t){return{x:Math.round(u(n,t)/Uo)*Uo,y:Math.round(o(n,t)/Uo)*Uo,i:t}})}var r=Ce,i=ze,u=r,o=i,a=sl;return n?t(n):(t.links=function(n){return ar(e(n)).edges.filter(function(n){return n.l&&n.r}).map(function(t){return{source:n[t.l.i],target:n[t.r.i]}})},t.triangles=function(n){var t=[];return ar(e(n)).cells.forEach(function(e,r){for(var i,u,o=e.site,a=e.edges.sort(Ve),l=-1,c=a.length,f=a[c-1].edge,s=f.l===o?f.r:f.l;++l<c;)i=f,u=s,f=a[l].edge,s=f.l===o?f.r:f.l,r<u.i&&r<s.i&&cr(o,u,s)<0&&t.push([n[r],n[u.i],n[s.i]])}),t},t.x=function(n){return arguments.length?(u=En(r=n),t):r},t.y=function(n){return arguments.length?(o=En(i=n),t):i},t.clipExtent=function(n){return arguments.length?(a=null==n?sl:n,t):a===sl?null:a},t.size=function(n){return arguments.length?t.clipExtent(n&&[[0,0],n]):a===sl?null:a&&a[1]},t)};var sl=[[-1e6,-1e6],[1e6,1e6]];ao.geom.delaunay=function(n){return ao.geom.voronoi().triangles(n)},ao.geom.quadtree=function(n,t,e,r,i){function u(n){function u(n,t,e,r,i,u,o,a){if(!isNaN(e)&&!isNaN(r))if(n.leaf){var l=n.x,f=n.y;if(null!=l)if(xo(l-e)+xo(f-r)<.01)c(n,t,e,r,i,u,o,a);else{var s=n.point;n.x=n.y=n.point=null,c(n,s,l,f,i,u,o,a),c(n,t,e,r,i,u,o,a)}else n.x=e,n.y=r,n.point=t}else c(n,t,e,r,i,u,o,a)}function c(n,t,e,r,i,o,a,l){var c=.5*(i+a),f=.5*(o+l),s=e>=c,h=r>=f,p=h<<1|s;n.leaf=!1,n=n.nodes[p]||(n.nodes[p]=hr()),s?i=c:a=c,h?o=f:l=f,u(n,t,e,r,i,o,a,l)}var f,s,h,p,g,v,d,y,m,M=En(a),x=En(l);if(null!=t)v=t,d=e,y=r,m=i;else if(y=m=-(v=d=1/0),s=[],h=[],g=n.length,o)for(p=0;g>p;++p)f=n[p],f.x<v&&(v=f.x),f.y<d&&(d=f.y),f.x>y&&(y=f.x),f.y>m&&(m=f.y),s.push(f.x),h.push(f.y);else for(p=0;g>p;++p){var b=+M(f=n[p],p),_=+x(f,p);v>b&&(v=b),d>_&&(d=_),b>y&&(y=b),_>m&&(m=_),s.push(b),h.push(_)}var w=y-v,S=m-d;w>S?m=d+w:y=v+S;var k=hr();if(k.add=function(n){u(k,n,+M(n,++p),+x(n,p),v,d,y,m)},k.visit=function(n){pr(n,k,v,d,y,m)},k.find=function(n){return gr(k,n[0],n[1],v,d,y,m)},p=-1,null==t){for(;++p<g;)u(k,n[p],s[p],h[p],v,d,y,m);--p}else n.forEach(k.add);return s=h=n=f=null,k}var o,a=Ce,l=ze;return(o=arguments.length)?(a=fr,l=sr,3===o&&(i=e,r=t,e=t=0),u(n)):(u.x=function(n){return arguments.length?(a=n,u):a},u.y=function(n){return arguments.length?(l=n,u):l},u.extent=function(n){return arguments.length?(null==n?t=e=r=i=null:(t=+n[0][0],e=+n[0][1],r=+n[1][0],i=+n[1][1]),u):null==t?null:[[t,e],[r,i]]},u.size=function(n){return arguments.length?(null==n?t=e=r=i=null:(t=e=0,r=+n[0],i=+n[1]),u):null==t?null:[r-t,i-e]},u)},ao.interpolateRgb=vr,ao.interpolateObject=dr,ao.interpolateNumber=yr,ao.interpolateString=mr;var hl=/[-+]?(?:\d+\.?\d*|\.?\d+)(?:[eE][-+]?\d+)?/g,pl=new RegExp(hl.source,"g");ao.interpolate=Mr,ao.interpolators=[function(n,t){var e=typeof t;return("string"===e?ua.has(t.toLowerCase())||/^(#|rgb\(|hsl\()/i.test(t)?vr:mr:t instanceof an?vr:Array.isArray(t)?xr:"object"===e&&isNaN(t)?dr:yr)(n,t)}],ao.interpolateArray=xr;var gl=function(){return m},vl=ao.map({linear:gl,poly:Er,quad:function(){return Sr},cubic:function(){return kr},sin:function(){return Ar},exp:function(){return Cr},circle:function(){return zr},elastic:Lr,back:qr,bounce:function(){return Tr}}),dl=ao.map({"in":m,out:_r,"in-out":wr,"out-in":function(n){return wr(_r(n))}});ao.ease=function(n){var t=n.indexOf("-"),e=t>=0?n.slice(0,t):n,r=t>=0?n.slice(t+1):"in";return e=vl.get(e)||gl,r=dl.get(r)||m,br(r(e.apply(null,lo.call(arguments,1))))},ao.interpolateHcl=Rr,ao.interpolateHsl=Dr,ao.interpolateLab=Pr,ao.interpolateRound=Ur,ao.transform=function(n){var t=fo.createElementNS(ao.ns.prefix.svg,"g");return(ao.transform=function(n){if(null!=n){t.setAttribute("transform",n);var e=t.transform.baseVal.consolidate()}return new jr(e?e.matrix:yl)})(n)},jr.prototype.toString=function(){return"translate("+this.translate+")rotate("+this.rotate+")skewX("+this.skew+")scale("+this.scale+")"};var yl={a:1,b:0,c:0,d:1,e:0,f:0};ao.interpolateTransform=$r,ao.layout={},ao.layout.bundle=function(){return function(n){for(var t=[],e=-1,r=n.length;++e<r;)t.push(Jr(n[e]));return t}},ao.layout.chord=function(){function n(){var n,c,s,h,p,g={},v=[],d=ao.range(u),y=[];for(e=[],r=[],n=0,h=-1;++h<u;){for(c=0,p=-1;++p<u;)c+=i[h][p];v.push(c),y.push(ao.range(u)),n+=c}for(o&&d.sort(function(n,t){return o(v[n],v[t])}),a&&y.forEach(function(n,t){n.sort(function(n,e){return a(i[t][n],i[t][e])})}),n=(Ho-f*u)/n,c=0,h=-1;++h<u;){for(s=c,p=-1;++p<u;){var m=d[h],M=y[m][p],x=i[m][M],b=c,_=c+=x*n;g[m+"-"+M]={index:m,subindex:M,startAngle:b,endAngle:_,value:x}}r[m]={index:m,startAngle:s,endAngle:c,value:v[m]},c+=f}for(h=-1;++h<u;)for(p=h-1;++p<u;){var w=g[h+"-"+p],S=g[p+"-"+h];(w.value||S.value)&&e.push(w.value<S.value?{source:S,target:w}:{source:w,target:S})}l&&t()}function t(){e.sort(function(n,t){return l((n.source.value+n.target.value)/2,(t.source.value+t.target.value)/2)})}var e,r,i,u,o,a,l,c={},f=0;return c.matrix=function(n){return arguments.length?(u=(i=n)&&i.length,e=r=null,c):i},c.padding=function(n){return arguments.length?(f=n,e=r=null,c):f},c.sortGroups=function(n){return arguments.length?(o=n,e=r=null,c):o},c.sortSubgroups=function(n){return arguments.length?(a=n,e=null,c):a},c.sortChords=function(n){return arguments.length?(l=n,e&&t(),c):l},c.chords=function(){return e||n(),e},c.groups=function(){return r||n(),r},c},ao.layout.force=function(){function n(n){return function(t,e,r,i){if(t.point!==n){var u=t.cx-n.x,o=t.cy-n.y,a=i-e,l=u*u+o*o;if(l>a*a/y){if(v>l){var c=t.charge/l;n.px-=u*c,n.py-=o*c}return!0}if(t.point&&l&&v>l){var c=t.pointCharge/l;n.px-=u*c,n.py-=o*c}}return!t.charge}}function t(n){n.px=ao.event.x,n.py=ao.event.y,l.resume()}var e,r,i,u,o,a,l={},c=ao.dispatch("start","tick","end"),f=[1,1],s=.9,h=ml,p=Ml,g=-30,v=xl,d=.1,y=.64,M=[],x=[];return l.tick=function(){if((i*=.99)<.005)return e=null,c.end({type:"end",alpha:i=0}),!0;var t,r,l,h,p,v,y,m,b,_=M.length,w=x.length;for(r=0;w>r;++r)l=x[r],h=l.source,p=l.target,m=p.x-h.x,b=p.y-h.y,(v=m*m+b*b)&&(v=i*o[r]*((v=Math.sqrt(v))-u[r])/v,m*=v,b*=v,p.x-=m*(y=h.weight+p.weight?h.weight/(h.weight+p.weight):.5),p.y-=b*y,h.x+=m*(y=1-y),h.y+=b*y);if((y=i*d)&&(m=f[0]/2,b=f[1]/2,r=-1,y))for(;++r<_;)l=M[r],l.x+=(m-l.x)*y,l.y+=(b-l.y)*y;if(g)for(ri(t=ao.geom.quadtree(M),i,a),r=-1;++r<_;)(l=M[r]).fixed||t.visit(n(l));for(r=-1;++r<_;)l=M[r],l.fixed?(l.x=l.px,l.y=l.py):(l.x-=(l.px-(l.px=l.x))*s,l.y-=(l.py-(l.py=l.y))*s);c.tick({type:"tick",alpha:i})},l.nodes=function(n){return arguments.length?(M=n,l):M},l.links=function(n){return arguments.length?(x=n,l):x},l.size=function(n){return arguments.length?(f=n,l):f},l.linkDistance=function(n){return arguments.length?(h="function"==typeof n?n:+n,l):h},l.distance=l.linkDistance,l.linkStrength=function(n){return arguments.length?(p="function"==typeof n?n:+n,l):p},l.friction=function(n){return arguments.length?(s=+n,l):s},l.charge=function(n){return arguments.length?(g="function"==typeof n?n:+n,l):g},l.chargeDistance=function(n){return arguments.length?(v=n*n,l):Math.sqrt(v)},l.gravity=function(n){return arguments.length?(d=+n,l):d},l.theta=function(n){return arguments.length?(y=n*n,l):Math.sqrt(y)},l.alpha=function(n){return arguments.length?(n=+n,i?n>0?i=n:(e.c=null,e.t=NaN,e=null,c.end({type:"end",alpha:i=0})):n>0&&(c.start({type:"start",alpha:i=n}),e=qn(l.tick)),l):i},l.start=function(){function n(n,r){if(!e){for(e=new Array(i),l=0;i>l;++l)e[l]=[];for(l=0;c>l;++l){var u=x[l];e[u.source.index].push(u.target),e[u.target.index].push(u.source)}}for(var o,a=e[t],l=-1,f=a.length;++l<f;)if(!isNaN(o=a[l][n]))return o;return Math.random()*r}var t,e,r,i=M.length,c=x.length,s=f[0],v=f[1];for(t=0;i>t;++t)(r=M[t]).index=t,r.weight=0;for(t=0;c>t;++t)r=x[t],"number"==typeof r.source&&(r.source=M[r.source]),"number"==typeof r.target&&(r.target=M[r.target]),++r.source.weight,++r.target.weight;for(t=0;i>t;++t)r=M[t],isNaN(r.x)&&(r.x=n("x",s)),isNaN(r.y)&&(r.y=n("y",v)),isNaN(r.px)&&(r.px=r.x),isNaN(r.py)&&(r.py=r.y);if(u=[],"function"==typeof h)for(t=0;c>t;++t)u[t]=+h.call(this,x[t],t);else for(t=0;c>t;++t)u[t]=h;if(o=[],"function"==typeof p)for(t=0;c>t;++t)o[t]=+p.call(this,x[t],t);else for(t=0;c>t;++t)o[t]=p;if(a=[],"function"==typeof g)for(t=0;i>t;++t)a[t]=+g.call(this,M[t],t);else for(t=0;i>t;++t)a[t]=g;return l.resume()},l.resume=function(){return l.alpha(.1)},l.stop=function(){return l.alpha(0)},l.drag=function(){return r||(r=ao.behavior.drag().origin(m).on("dragstart.force",Qr).on("drag.force",t).on("dragend.force",ni)),arguments.length?void this.on("mouseover.force",ti).on("mouseout.force",ei).call(r):r},ao.rebind(l,c,"on")};var ml=20,Ml=1,xl=1/0;ao.layout.hierarchy=function(){function n(i){var u,o=[i],a=[];for(i.depth=0;null!=(u=o.pop());)if(a.push(u),(c=e.call(n,u,u.depth))&&(l=c.length)){for(var l,c,f;--l>=0;)o.push(f=c[l]),f.parent=u,f.depth=u.depth+1;r&&(u.value=0),u.children=c}else r&&(u.value=+r.call(n,u,u.depth)||0),delete u.children;return oi(i,function(n){var e,i;t&&(e=n.children)&&e.sort(t),r&&(i=n.parent)&&(i.value+=n.value)}),a}var t=ci,e=ai,r=li;return n.sort=function(e){return arguments.length?(t=e,n):t},n.children=function(t){return arguments.length?(e=t,n):e},n.value=function(t){return arguments.length?(r=t,n):r},n.revalue=function(t){return r&&(ui(t,function(n){n.children&&(n.value=0)}),oi(t,function(t){var e;t.children||(t.value=+r.call(n,t,t.depth)||0),(e=t.parent)&&(e.value+=t.value)})),t},n},ao.layout.partition=function(){function n(t,e,r,i){var u=t.children;if(t.x=e,t.y=t.depth*i,t.dx=r,t.dy=i,u&&(o=u.length)){var o,a,l,c=-1;for(r=t.value?r/t.value:0;++c<o;)n(a=u[c],e,l=a.value*r,i),e+=l}}function t(n){var e=n.children,r=0;if(e&&(i=e.length))for(var i,u=-1;++u<i;)r=Math.max(r,t(e[u]));return 1+r}function e(e,u){var o=r.call(this,e,u);return n(o[0],0,i[0],i[1]/t(o[0])),o}var r=ao.layout.hierarchy(),i=[1,1];return e.size=function(n){return arguments.length?(i=n,e):i},ii(e,r)},ao.layout.pie=function(){function n(o){var a,l=o.length,c=o.map(function(e,r){return+t.call(n,e,r)}),f=+("function"==typeof r?r.apply(this,arguments):r),s=("function"==typeof i?i.apply(this,arguments):i)-f,h=Math.min(Math.abs(s)/l,+("function"==typeof u?u.apply(this,arguments):u)),p=h*(0>s?-1:1),g=ao.sum(c),v=g?(s-l*p)/g:0,d=ao.range(l),y=[];return null!=e&&d.sort(e===bl?function(n,t){return c[t]-c[n]}:function(n,t){return e(o[n],o[t])}),d.forEach(function(n){y[n]={data:o[n],value:a=c[n],startAngle:f,endAngle:f+=a*v+p,padAngle:h}}),y}var t=Number,e=bl,r=0,i=Ho,u=0;return n.value=function(e){return arguments.length?(t=e,n):t},n.sort=function(t){return arguments.length?(e=t,n):e},n.startAngle=function(t){return arguments.length?(r=t,n):r},n.endAngle=function(t){return arguments.length?(i=t,n):i},n.padAngle=function(t){return arguments.length?(u=t,n):u},n};var bl={};ao.layout.stack=function(){function n(a,l){if(!(h=a.length))return a;var c=a.map(function(e,r){return t.call(n,e,r)}),f=c.map(function(t){return t.map(function(t,e){return[u.call(n,t,e),o.call(n,t,e)]})}),s=e.call(n,f,l);c=ao.permute(c,s),f=ao.permute(f,s);var h,p,g,v,d=r.call(n,f,l),y=c[0].length;for(g=0;y>g;++g)for(i.call(n,c[0][g],v=d[g],f[0][g][1]),p=1;h>p;++p)i.call(n,c[p][g],v+=f[p-1][g][1],f[p][g][1]);return a}var t=m,e=gi,r=vi,i=pi,u=si,o=hi;return n.values=function(e){return arguments.length?(t=e,n):t},n.order=function(t){return arguments.length?(e="function"==typeof t?t:_l.get(t)||gi,n):e},n.offset=function(t){return arguments.length?(r="function"==typeof t?t:wl.get(t)||vi,n):r},n.x=function(t){return arguments.length?(u=t,n):u},n.y=function(t){return arguments.length?(o=t,n):o},n.out=function(t){return arguments.length?(i=t,n):i},n};var _l=ao.map({"inside-out":function(n){var t,e,r=n.length,i=n.map(di),u=n.map(yi),o=ao.range(r).sort(function(n,t){return i[n]-i[t]}),a=0,l=0,c=[],f=[];for(t=0;r>t;++t)e=o[t],l>a?(a+=u[e],c.push(e)):(l+=u[e],f.push(e));return f.reverse().concat(c)},reverse:function(n){return ao.range(n.length).reverse()},"default":gi}),wl=ao.map({silhouette:function(n){var t,e,r,i=n.length,u=n[0].length,o=[],a=0,l=[];for(e=0;u>e;++e){for(t=0,r=0;i>t;t++)r+=n[t][e][1];r>a&&(a=r),o.push(r)}for(e=0;u>e;++e)l[e]=(a-o[e])/2;return l},wiggle:function(n){var t,e,r,i,u,o,a,l,c,f=n.length,s=n[0],h=s.length,p=[];for(p[0]=l=c=0,e=1;h>e;++e){for(t=0,i=0;f>t;++t)i+=n[t][e][1];for(t=0,u=0,a=s[e][0]-s[e-1][0];f>t;++t){for(r=0,o=(n[t][e][1]-n[t][e-1][1])/(2*a);t>r;++r)o+=(n[r][e][1]-n[r][e-1][1])/a;u+=o*n[t][e][1]}p[e]=l-=i?u/i*a:0,c>l&&(c=l)}for(e=0;h>e;++e)p[e]-=c;return p},expand:function(n){var t,e,r,i=n.length,u=n[0].length,o=1/i,a=[];for(e=0;u>e;++e){for(t=0,r=0;i>t;t++)r+=n[t][e][1];if(r)for(t=0;i>t;t++)n[t][e][1]/=r;else for(t=0;i>t;t++)n[t][e][1]=o}for(e=0;u>e;++e)a[e]=0;return a},zero:vi});ao.layout.histogram=function(){function n(n,u){for(var o,a,l=[],c=n.map(e,this),f=r.call(this,c,u),s=i.call(this,f,c,u),u=-1,h=c.length,p=s.length-1,g=t?1:1/h;++u<p;)o=l[u]=[],o.dx=s[u+1]-(o.x=s[u]),o.y=0;if(p>0)for(u=-1;++u<h;)a=c[u],a>=f[0]&&a<=f[1]&&(o=l[ao.bisect(s,a,1,p)-1],o.y+=g,o.push(n[u]));return l}var t=!0,e=Number,r=bi,i=Mi;return n.value=function(t){return arguments.length?(e=t,n):e},n.range=function(t){return arguments.length?(r=En(t),n):r},n.bins=function(t){return arguments.length?(i="number"==typeof t?function(n){return xi(n,t)}:En(t),n):i},n.frequency=function(e){return arguments.length?(t=!!e,n):t},n},ao.layout.pack=function(){function n(n,u){var o=e.call(this,n,u),a=o[0],l=i[0],c=i[1],f=null==t?Math.sqrt:"function"==typeof t?t:function(){return t};if(a.x=a.y=0,oi(a,function(n){n.r=+f(n.value)}),oi(a,Ni),r){var s=r*(t?1:Math.max(2*a.r/l,2*a.r/c))/2;oi(a,function(n){n.r+=s}),oi(a,Ni),oi(a,function(n){n.r-=s})}return Ci(a,l/2,c/2,t?1:1/Math.max(2*a.r/l,2*a.r/c)),o}var t,e=ao.layout.hierarchy().sort(_i),r=0,i=[1,1];return n.size=function(t){return arguments.length?(i=t,n):i},n.radius=function(e){return arguments.length?(t=null==e||"function"==typeof e?e:+e,n):t},n.padding=function(t){return arguments.length?(r=+t,n):r},ii(n,e)},ao.layout.tree=function(){function n(n,i){var f=o.call(this,n,i),s=f[0],h=t(s);if(oi(h,e),h.parent.m=-h.z,ui(h,r),c)ui(s,u);else{var p=s,g=s,v=s;ui(s,function(n){n.x<p.x&&(p=n),n.x>g.x&&(g=n),n.depth>v.depth&&(v=n)});var d=a(p,g)/2-p.x,y=l[0]/(g.x+a(g,p)/2+d),m=l[1]/(v.depth||1);ui(s,function(n){n.x=(n.x+d)*y,n.y=n.depth*m})}return f}function t(n){for(var t,e={A:null,children:[n]},r=[e];null!=(t=r.pop());)for(var i,u=t.children,o=0,a=u.length;a>o;++o)r.push((u[o]=i={_:u[o],parent:t,children:(i=u[o].children)&&i.slice()||[],A:null,a:null,z:0,m:0,c:0,s:0,t:null,i:o}).a=i);return e.children[0]}function e(n){var t=n.children,e=n.parent.children,r=n.i?e[n.i-1]:null;if(t.length){Di(n);var u=(t[0].z+t[t.length-1].z)/2;r?(n.z=r.z+a(n._,r._),n.m=n.z-u):n.z=u}else r&&(n.z=r.z+a(n._,r._));n.parent.A=i(n,r,n.parent.A||e[0])}function r(n){n._.x=n.z+n.parent.m,n.m+=n.parent.m}function i(n,t,e){if(t){for(var r,i=n,u=n,o=t,l=i.parent.children[0],c=i.m,f=u.m,s=o.m,h=l.m;o=Ti(o),i=qi(i),o&&i;)l=qi(l),u=Ti(u),u.a=n,r=o.z+s-i.z-c+a(o._,i._),r>0&&(Ri(Pi(o,n,e),n,r),c+=r,f+=r),s+=o.m,c+=i.m,h+=l.m,f+=u.m;o&&!Ti(u)&&(u.t=o,u.m+=s-f),i&&!qi(l)&&(l.t=i,l.m+=c-h,e=n)}return e}function u(n){n.x*=l[0],n.y=n.depth*l[1]}var o=ao.layout.hierarchy().sort(null).value(null),a=Li,l=[1,1],c=null;return n.separation=function(t){return arguments.length?(a=t,n):a},n.size=function(t){return arguments.length?(c=null==(l=t)?u:null,n):c?null:l},n.nodeSize=function(t){return arguments.length?(c=null==(l=t)?null:u,n):c?l:null},ii(n,o)},ao.layout.cluster=function(){function n(n,u){var o,a=t.call(this,n,u),l=a[0],c=0;oi(l,function(n){var t=n.children;t&&t.length?(n.x=ji(t),n.y=Ui(t)):(n.x=o?c+=e(n,o):0,n.y=0,o=n)});var f=Fi(l),s=Hi(l),h=f.x-e(f,s)/2,p=s.x+e(s,f)/2;return oi(l,i?function(n){n.x=(n.x-l.x)*r[0],n.y=(l.y-n.y)*r[1]}:function(n){n.x=(n.x-h)/(p-h)*r[0],n.y=(1-(l.y?n.y/l.y:1))*r[1]}),a}var t=ao.layout.hierarchy().sort(null).value(null),e=Li,r=[1,1],i=!1;return n.separation=function(t){return arguments.length?(e=t,n):e},n.size=function(t){return arguments.length?(i=null==(r=t),n):i?null:r},n.nodeSize=function(t){return arguments.length?(i=null!=(r=t),n):i?r:null},ii(n,t)},ao.layout.treemap=function(){function n(n,t){for(var e,r,i=-1,u=n.length;++i<u;)r=(e=n[i]).value*(0>t?0:t),e.area=isNaN(r)||0>=r?0:r}function t(e){var u=e.children;if(u&&u.length){var o,a,l,c=s(e),f=[],h=u.slice(),g=1/0,v="slice"===p?c.dx:"dice"===p?c.dy:"slice-dice"===p?1&e.depth?c.dy:c.dx:Math.min(c.dx,c.dy);for(n(h,c.dx*c.dy/e.value),f.area=0;(l=h.length)>0;)f.push(o=h[l-1]),f.area+=o.area,"squarify"!==p||(a=r(f,v))<=g?(h.pop(),g=a):(f.area-=f.pop().area,i(f,v,c,!1),v=Math.min(c.dx,c.dy),f.length=f.area=0,g=1/0);f.length&&(i(f,v,c,!0),f.length=f.area=0),u.forEach(t)}}function e(t){var r=t.children;if(r&&r.length){var u,o=s(t),a=r.slice(),l=[];for(n(a,o.dx*o.dy/t.value),l.area=0;u=a.pop();)l.push(u),l.area+=u.area,null!=u.z&&(i(l,u.z?o.dx:o.dy,o,!a.length),l.length=l.area=0);r.forEach(e)}}function r(n,t){for(var e,r=n.area,i=0,u=1/0,o=-1,a=n.length;++o<a;)(e=n[o].area)&&(u>e&&(u=e),e>i&&(i=e));return r*=r,t*=t,r?Math.max(t*i*g/r,r/(t*u*g)):1/0}function i(n,t,e,r){var i,u=-1,o=n.length,a=e.x,c=e.y,f=t?l(n.area/t):0;
+if(t==e.dx){for((r||f>e.dy)&&(f=e.dy);++u<o;)i=n[u],i.x=a,i.y=c,i.dy=f,a+=i.dx=Math.min(e.x+e.dx-a,f?l(i.area/f):0);i.z=!0,i.dx+=e.x+e.dx-a,e.y+=f,e.dy-=f}else{for((r||f>e.dx)&&(f=e.dx);++u<o;)i=n[u],i.x=a,i.y=c,i.dx=f,c+=i.dy=Math.min(e.y+e.dy-c,f?l(i.area/f):0);i.z=!1,i.dy+=e.y+e.dy-c,e.x+=f,e.dx-=f}}function u(r){var i=o||a(r),u=i[0];return u.x=u.y=0,u.value?(u.dx=c[0],u.dy=c[1]):u.dx=u.dy=0,o&&a.revalue(u),n([u],u.dx*u.dy/u.value),(o?e:t)(u),h&&(o=i),i}var o,a=ao.layout.hierarchy(),l=Math.round,c=[1,1],f=null,s=Oi,h=!1,p="squarify",g=.5*(1+Math.sqrt(5));return u.size=function(n){return arguments.length?(c=n,u):c},u.padding=function(n){function t(t){var e=n.call(u,t,t.depth);return null==e?Oi(t):Ii(t,"number"==typeof e?[e,e,e,e]:e)}function e(t){return Ii(t,n)}if(!arguments.length)return f;var r;return s=null==(f=n)?Oi:"function"==(r=typeof n)?t:"number"===r?(n=[n,n,n,n],e):e,u},u.round=function(n){return arguments.length?(l=n?Math.round:Number,u):l!=Number},u.sticky=function(n){return arguments.length?(h=n,o=null,u):h},u.ratio=function(n){return arguments.length?(g=n,u):g},u.mode=function(n){return arguments.length?(p=n+"",u):p},ii(u,a)},ao.random={normal:function(n,t){var e=arguments.length;return 2>e&&(t=1),1>e&&(n=0),function(){var e,r,i;do e=2*Math.random()-1,r=2*Math.random()-1,i=e*e+r*r;while(!i||i>1);return n+t*e*Math.sqrt(-2*Math.log(i)/i)}},logNormal:function(){var n=ao.random.normal.apply(ao,arguments);return function(){return Math.exp(n())}},bates:function(n){var t=ao.random.irwinHall(n);return function(){return t()/n}},irwinHall:function(n){return function(){for(var t=0,e=0;n>e;e++)t+=Math.random();return t}}},ao.scale={};var Sl={floor:m,ceil:m};ao.scale.linear=function(){return Wi([0,1],[0,1],Mr,!1)};var kl={s:1,g:1,p:1,r:1,e:1};ao.scale.log=function(){return ru(ao.scale.linear().domain([0,1]),10,!0,[1,10])};var Nl=ao.format(".0e"),El={floor:function(n){return-Math.ceil(-n)},ceil:function(n){return-Math.floor(-n)}};ao.scale.pow=function(){return iu(ao.scale.linear(),1,[0,1])},ao.scale.sqrt=function(){return ao.scale.pow().exponent(.5)},ao.scale.ordinal=function(){return ou([],{t:"range",a:[[]]})},ao.scale.category10=function(){return ao.scale.ordinal().range(Al)},ao.scale.category20=function(){return ao.scale.ordinal().range(Cl)},ao.scale.category20b=function(){return ao.scale.ordinal().range(zl)},ao.scale.category20c=function(){return ao.scale.ordinal().range(Ll)};var Al=[2062260,16744206,2924588,14034728,9725885,9197131,14907330,8355711,12369186,1556175].map(xn),Cl=[2062260,11454440,16744206,16759672,2924588,10018698,14034728,16750742,9725885,12955861,9197131,12885140,14907330,16234194,8355711,13092807,12369186,14408589,1556175,10410725].map(xn),zl=[3750777,5395619,7040719,10264286,6519097,9216594,11915115,13556636,9202993,12426809,15186514,15190932,8666169,11356490,14049643,15177372,8077683,10834324,13528509,14589654].map(xn),Ll=[3244733,7057110,10406625,13032431,15095053,16616764,16625259,16634018,3253076,7652470,10607003,13101504,7695281,10394312,12369372,14342891,6513507,9868950,12434877,14277081].map(xn);ao.scale.quantile=function(){return au([],[])},ao.scale.quantize=function(){return lu(0,1,[0,1])},ao.scale.threshold=function(){return cu([.5],[0,1])},ao.scale.identity=function(){return fu([0,1])},ao.svg={},ao.svg.arc=function(){function n(){var n=Math.max(0,+e.apply(this,arguments)),c=Math.max(0,+r.apply(this,arguments)),f=o.apply(this,arguments)-Io,s=a.apply(this,arguments)-Io,h=Math.abs(s-f),p=f>s?0:1;if(n>c&&(g=c,c=n,n=g),h>=Oo)return t(c,p)+(n?t(n,1-p):"")+"Z";var g,v,d,y,m,M,x,b,_,w,S,k,N=0,E=0,A=[];if((y=(+l.apply(this,arguments)||0)/2)&&(d=u===ql?Math.sqrt(n*n+c*c):+u.apply(this,arguments),p||(E*=-1),c&&(E=tn(d/c*Math.sin(y))),n&&(N=tn(d/n*Math.sin(y)))),c){m=c*Math.cos(f+E),M=c*Math.sin(f+E),x=c*Math.cos(s-E),b=c*Math.sin(s-E);var C=Math.abs(s-f-2*E)<=Fo?0:1;if(E&&yu(m,M,x,b)===p^C){var z=(f+s)/2;m=c*Math.cos(z),M=c*Math.sin(z),x=b=null}}else m=M=0;if(n){_=n*Math.cos(s-N),w=n*Math.sin(s-N),S=n*Math.cos(f+N),k=n*Math.sin(f+N);var L=Math.abs(f-s+2*N)<=Fo?0:1;if(N&&yu(_,w,S,k)===1-p^L){var q=(f+s)/2;_=n*Math.cos(q),w=n*Math.sin(q),S=k=null}}else _=w=0;if(h>Uo&&(g=Math.min(Math.abs(c-n)/2,+i.apply(this,arguments)))>.001){v=c>n^p?0:1;var T=g,R=g;if(Fo>h){var D=null==S?[_,w]:null==x?[m,M]:Re([m,M],[S,k],[x,b],[_,w]),P=m-D[0],U=M-D[1],j=x-D[0],F=b-D[1],H=1/Math.sin(Math.acos((P*j+U*F)/(Math.sqrt(P*P+U*U)*Math.sqrt(j*j+F*F)))/2),O=Math.sqrt(D[0]*D[0]+D[1]*D[1]);R=Math.min(g,(n-O)/(H-1)),T=Math.min(g,(c-O)/(H+1))}if(null!=x){var I=mu(null==S?[_,w]:[S,k],[m,M],c,T,p),Y=mu([x,b],[_,w],c,T,p);g===T?A.push("M",I[0],"A",T,",",T," 0 0,",v," ",I[1],"A",c,",",c," 0 ",1-p^yu(I[1][0],I[1][1],Y[1][0],Y[1][1]),",",p," ",Y[1],"A",T,",",T," 0 0,",v," ",Y[0]):A.push("M",I[0],"A",T,",",T," 0 1,",v," ",Y[0])}else A.push("M",m,",",M);if(null!=S){var Z=mu([m,M],[S,k],n,-R,p),V=mu([_,w],null==x?[m,M]:[x,b],n,-R,p);g===R?A.push("L",V[0],"A",R,",",R," 0 0,",v," ",V[1],"A",n,",",n," 0 ",p^yu(V[1][0],V[1][1],Z[1][0],Z[1][1]),",",1-p," ",Z[1],"A",R,",",R," 0 0,",v," ",Z[0]):A.push("L",V[0],"A",R,",",R," 0 0,",v," ",Z[0])}else A.push("L",_,",",w)}else A.push("M",m,",",M),null!=x&&A.push("A",c,",",c," 0 ",C,",",p," ",x,",",b),A.push("L",_,",",w),null!=S&&A.push("A",n,",",n," 0 ",L,",",1-p," ",S,",",k);return A.push("Z"),A.join("")}function t(n,t){return"M0,"+n+"A"+n+","+n+" 0 1,"+t+" 0,"+-n+"A"+n+","+n+" 0 1,"+t+" 0,"+n}var e=hu,r=pu,i=su,u=ql,o=gu,a=vu,l=du;return n.innerRadius=function(t){return arguments.length?(e=En(t),n):e},n.outerRadius=function(t){return arguments.length?(r=En(t),n):r},n.cornerRadius=function(t){return arguments.length?(i=En(t),n):i},n.padRadius=function(t){return arguments.length?(u=t==ql?ql:En(t),n):u},n.startAngle=function(t){return arguments.length?(o=En(t),n):o},n.endAngle=function(t){return arguments.length?(a=En(t),n):a},n.padAngle=function(t){return arguments.length?(l=En(t),n):l},n.centroid=function(){var n=(+e.apply(this,arguments)+ +r.apply(this,arguments))/2,t=(+o.apply(this,arguments)+ +a.apply(this,arguments))/2-Io;return[Math.cos(t)*n,Math.sin(t)*n]},n};var ql="auto";ao.svg.line=function(){return Mu(m)};var Tl=ao.map({linear:xu,"linear-closed":bu,step:_u,"step-before":wu,"step-after":Su,basis:zu,"basis-open":Lu,"basis-closed":qu,bundle:Tu,cardinal:Eu,"cardinal-open":ku,"cardinal-closed":Nu,monotone:Fu});Tl.forEach(function(n,t){t.key=n,t.closed=/-closed$/.test(n)});var Rl=[0,2/3,1/3,0],Dl=[0,1/3,2/3,0],Pl=[0,1/6,2/3,1/6];ao.svg.line.radial=function(){var n=Mu(Hu);return n.radius=n.x,delete n.x,n.angle=n.y,delete n.y,n},wu.reverse=Su,Su.reverse=wu,ao.svg.area=function(){return Ou(m)},ao.svg.area.radial=function(){var n=Ou(Hu);return n.radius=n.x,delete n.x,n.innerRadius=n.x0,delete n.x0,n.outerRadius=n.x1,delete n.x1,n.angle=n.y,delete n.y,n.startAngle=n.y0,delete n.y0,n.endAngle=n.y1,delete n.y1,n},ao.svg.chord=function(){function n(n,a){var l=t(this,u,n,a),c=t(this,o,n,a);return"M"+l.p0+r(l.r,l.p1,l.a1-l.a0)+(e(l,c)?i(l.r,l.p1,l.r,l.p0):i(l.r,l.p1,c.r,c.p0)+r(c.r,c.p1,c.a1-c.a0)+i(c.r,c.p1,l.r,l.p0))+"Z"}function t(n,t,e,r){var i=t.call(n,e,r),u=a.call(n,i,r),o=l.call(n,i,r)-Io,f=c.call(n,i,r)-Io;return{r:u,a0:o,a1:f,p0:[u*Math.cos(o),u*Math.sin(o)],p1:[u*Math.cos(f),u*Math.sin(f)]}}function e(n,t){return n.a0==t.a0&&n.a1==t.a1}function r(n,t,e){return"A"+n+","+n+" 0 "+ +(e>Fo)+",1 "+t}function i(n,t,e,r){return"Q 0,0 "+r}var u=Me,o=xe,a=Iu,l=gu,c=vu;return n.radius=function(t){return arguments.length?(a=En(t),n):a},n.source=function(t){return arguments.length?(u=En(t),n):u},n.target=function(t){return arguments.length?(o=En(t),n):o},n.startAngle=function(t){return arguments.length?(l=En(t),n):l},n.endAngle=function(t){return arguments.length?(c=En(t),n):c},n},ao.svg.diagonal=function(){function n(n,i){var u=t.call(this,n,i),o=e.call(this,n,i),a=(u.y+o.y)/2,l=[u,{x:u.x,y:a},{x:o.x,y:a},o];return l=l.map(r),"M"+l[0]+"C"+l[1]+" "+l[2]+" "+l[3]}var t=Me,e=xe,r=Yu;return n.source=function(e){return arguments.length?(t=En(e),n):t},n.target=function(t){return arguments.length?(e=En(t),n):e},n.projection=function(t){return arguments.length?(r=t,n):r},n},ao.svg.diagonal.radial=function(){var n=ao.svg.diagonal(),t=Yu,e=n.projection;return n.projection=function(n){return arguments.length?e(Zu(t=n)):t},n},ao.svg.symbol=function(){function n(n,r){return(Ul.get(t.call(this,n,r))||$u)(e.call(this,n,r))}var t=Xu,e=Vu;return n.type=function(e){return arguments.length?(t=En(e),n):t},n.size=function(t){return arguments.length?(e=En(t),n):e},n};var Ul=ao.map({circle:$u,cross:function(n){var t=Math.sqrt(n/5)/2;return"M"+-3*t+","+-t+"H"+-t+"V"+-3*t+"H"+t+"V"+-t+"H"+3*t+"V"+t+"H"+t+"V"+3*t+"H"+-t+"V"+t+"H"+-3*t+"Z"},diamond:function(n){var t=Math.sqrt(n/(2*Fl)),e=t*Fl;return"M0,"+-t+"L"+e+",0 0,"+t+" "+-e+",0Z"},square:function(n){var t=Math.sqrt(n)/2;return"M"+-t+","+-t+"L"+t+","+-t+" "+t+","+t+" "+-t+","+t+"Z"},"triangle-down":function(n){var t=Math.sqrt(n/jl),e=t*jl/2;return"M0,"+e+"L"+t+","+-e+" "+-t+","+-e+"Z"},"triangle-up":function(n){var t=Math.sqrt(n/jl),e=t*jl/2;return"M0,"+-e+"L"+t+","+e+" "+-t+","+e+"Z"}});ao.svg.symbolTypes=Ul.keys();var jl=Math.sqrt(3),Fl=Math.tan(30*Yo);Co.transition=function(n){for(var t,e,r=Hl||++Zl,i=Ku(n),u=[],o=Ol||{time:Date.now(),ease:Nr,delay:0,duration:250},a=-1,l=this.length;++a<l;){u.push(t=[]);for(var c=this[a],f=-1,s=c.length;++f<s;)(e=c[f])&&Qu(e,f,i,r,o),t.push(e)}return Wu(u,i,r)},Co.interrupt=function(n){return this.each(null==n?Il:Bu(Ku(n)))};var Hl,Ol,Il=Bu(Ku()),Yl=[],Zl=0;Yl.call=Co.call,Yl.empty=Co.empty,Yl.node=Co.node,Yl.size=Co.size,ao.transition=function(n,t){return n&&n.transition?Hl?n.transition(t):n:ao.selection().transition(n)},ao.transition.prototype=Yl,Yl.select=function(n){var t,e,r,i=this.id,u=this.namespace,o=[];n=A(n);for(var a=-1,l=this.length;++a<l;){o.push(t=[]);for(var c=this[a],f=-1,s=c.length;++f<s;)(r=c[f])&&(e=n.call(r,r.__data__,f,a))?("__data__"in r&&(e.__data__=r.__data__),Qu(e,f,u,i,r[u][i]),t.push(e)):t.push(null)}return Wu(o,u,i)},Yl.selectAll=function(n){var t,e,r,i,u,o=this.id,a=this.namespace,l=[];n=C(n);for(var c=-1,f=this.length;++c<f;)for(var s=this[c],h=-1,p=s.length;++h<p;)if(r=s[h]){u=r[a][o],e=n.call(r,r.__data__,h,c),l.push(t=[]);for(var g=-1,v=e.length;++g<v;)(i=e[g])&&Qu(i,g,a,o,u),t.push(i)}return Wu(l,a,o)},Yl.filter=function(n){var t,e,r,i=[];"function"!=typeof n&&(n=O(n));for(var u=0,o=this.length;o>u;u++){i.push(t=[]);for(var e=this[u],a=0,l=e.length;l>a;a++)(r=e[a])&&n.call(r,r.__data__,a,u)&&t.push(r)}return Wu(i,this.namespace,this.id)},Yl.tween=function(n,t){var e=this.id,r=this.namespace;return arguments.length<2?this.node()[r][e].tween.get(n):Y(this,null==t?function(t){t[r][e].tween.remove(n)}:function(i){i[r][e].tween.set(n,t)})},Yl.attr=function(n,t){function e(){this.removeAttribute(a)}function r(){this.removeAttributeNS(a.space,a.local)}function i(n){return null==n?e:(n+="",function(){var t,e=this.getAttribute(a);return e!==n&&(t=o(e,n),function(n){this.setAttribute(a,t(n))})})}function u(n){return null==n?r:(n+="",function(){var t,e=this.getAttributeNS(a.space,a.local);return e!==n&&(t=o(e,n),function(n){this.setAttributeNS(a.space,a.local,t(n))})})}if(arguments.length<2){for(t in n)this.attr(t,n[t]);return this}var o="transform"==n?$r:Mr,a=ao.ns.qualify(n);return Ju(this,"attr."+n,t,a.local?u:i)},Yl.attrTween=function(n,t){function e(n,e){var r=t.call(this,n,e,this.getAttribute(i));return r&&function(n){this.setAttribute(i,r(n))}}function r(n,e){var r=t.call(this,n,e,this.getAttributeNS(i.space,i.local));return r&&function(n){this.setAttributeNS(i.space,i.local,r(n))}}var i=ao.ns.qualify(n);return this.tween("attr."+n,i.local?r:e)},Yl.style=function(n,e,r){function i(){this.style.removeProperty(n)}function u(e){return null==e?i:(e+="",function(){var i,u=t(this).getComputedStyle(this,null).getPropertyValue(n);return u!==e&&(i=Mr(u,e),function(t){this.style.setProperty(n,i(t),r)})})}var o=arguments.length;if(3>o){if("string"!=typeof n){2>o&&(e="");for(r in n)this.style(r,n[r],e);return this}r=""}return Ju(this,"style."+n,e,u)},Yl.styleTween=function(n,e,r){function i(i,u){var o=e.call(this,i,u,t(this).getComputedStyle(this,null).getPropertyValue(n));return o&&function(t){this.style.setProperty(n,o(t),r)}}return arguments.length<3&&(r=""),this.tween("style."+n,i)},Yl.text=function(n){return Ju(this,"text",n,Gu)},Yl.remove=function(){var n=this.namespace;return this.each("end.transition",function(){var t;this[n].count<2&&(t=this.parentNode)&&t.removeChild(this)})},Yl.ease=function(n){var t=this.id,e=this.namespace;return arguments.length<1?this.node()[e][t].ease:("function"!=typeof n&&(n=ao.ease.apply(ao,arguments)),Y(this,function(r){r[e][t].ease=n}))},Yl.delay=function(n){var t=this.id,e=this.namespace;return arguments.length<1?this.node()[e][t].delay:Y(this,"function"==typeof n?function(r,i,u){r[e][t].delay=+n.call(r,r.__data__,i,u)}:(n=+n,function(r){r[e][t].delay=n}))},Yl.duration=function(n){var t=this.id,e=this.namespace;return arguments.length<1?this.node()[e][t].duration:Y(this,"function"==typeof n?function(r,i,u){r[e][t].duration=Math.max(1,n.call(r,r.__data__,i,u))}:(n=Math.max(1,n),function(r){r[e][t].duration=n}))},Yl.each=function(n,t){var e=this.id,r=this.namespace;if(arguments.length<2){var i=Ol,u=Hl;try{Hl=e,Y(this,function(t,i,u){Ol=t[r][e],n.call(t,t.__data__,i,u)})}finally{Ol=i,Hl=u}}else Y(this,function(i){var u=i[r][e];(u.event||(u.event=ao.dispatch("start","end","interrupt"))).on(n,t)});return this},Yl.transition=function(){for(var n,t,e,r,i=this.id,u=++Zl,o=this.namespace,a=[],l=0,c=this.length;c>l;l++){a.push(n=[]);for(var t=this[l],f=0,s=t.length;s>f;f++)(e=t[f])&&(r=e[o][i],Qu(e,f,o,u,{time:r.time,ease:r.ease,delay:r.delay+r.duration,duration:r.duration})),n.push(e)}return Wu(a,o,u)},ao.svg.axis=function(){function n(n){n.each(function(){var n,c=ao.select(this),f=this.__chart__||e,s=this.__chart__=e.copy(),h=null==l?s.ticks?s.ticks.apply(s,a):s.domain():l,p=null==t?s.tickFormat?s.tickFormat.apply(s,a):m:t,g=c.selectAll(".tick").data(h,s),v=g.enter().insert("g",".domain").attr("class","tick").style("opacity",Uo),d=ao.transition(g.exit()).style("opacity",Uo).remove(),y=ao.transition(g.order()).style("opacity",1),M=Math.max(i,0)+o,x=Zi(s),b=c.selectAll(".domain").data([0]),_=(b.enter().append("path").attr("class","domain"),ao.transition(b));v.append("line"),v.append("text");var w,S,k,N,E=v.select("line"),A=y.select("line"),C=g.select("text").text(p),z=v.select("text"),L=y.select("text"),q="top"===r||"left"===r?-1:1;if("bottom"===r||"top"===r?(n=no,w="x",k="y",S="x2",N="y2",C.attr("dy",0>q?"0em":".71em").style("text-anchor","middle"),_.attr("d","M"+x[0]+","+q*u+"V0H"+x[1]+"V"+q*u)):(n=to,w="y",k="x",S="y2",N="x2",C.attr("dy",".32em").style("text-anchor",0>q?"end":"start"),_.attr("d","M"+q*u+","+x[0]+"H0V"+x[1]+"H"+q*u)),E.attr(N,q*i),z.attr(k,q*M),A.attr(S,0).attr(N,q*i),L.attr(w,0).attr(k,q*M),s.rangeBand){var T=s,R=T.rangeBand()/2;f=s=function(n){return T(n)+R}}else f.rangeBand?f=s:d.call(n,s,f);v.call(n,f,s),y.call(n,s,s)})}var t,e=ao.scale.linear(),r=Vl,i=6,u=6,o=3,a=[10],l=null;return n.scale=function(t){return arguments.length?(e=t,n):e},n.orient=function(t){return arguments.length?(r=t in Xl?t+"":Vl,n):r},n.ticks=function(){return arguments.length?(a=co(arguments),n):a},n.tickValues=function(t){return arguments.length?(l=t,n):l},n.tickFormat=function(e){return arguments.length?(t=e,n):t},n.tickSize=function(t){var e=arguments.length;return e?(i=+t,u=+arguments[e-1],n):i},n.innerTickSize=function(t){return arguments.length?(i=+t,n):i},n.outerTickSize=function(t){return arguments.length?(u=+t,n):u},n.tickPadding=function(t){return arguments.length?(o=+t,n):o},n.tickSubdivide=function(){return arguments.length&&n},n};var Vl="bottom",Xl={top:1,right:1,bottom:1,left:1};ao.svg.brush=function(){function n(t){t.each(function(){var t=ao.select(this).style("pointer-events","all").style("-webkit-tap-highlight-color","rgba(0,0,0,0)").on("mousedown.brush",u).on("touchstart.brush",u),o=t.selectAll(".background").data([0]);o.enter().append("rect").attr("class","background").style("visibility","hidden").style("cursor","crosshair"),t.selectAll(".extent").data([0]).enter().append("rect").attr("class","extent").style("cursor","move");var a=t.selectAll(".resize").data(v,m);a.exit().remove(),a.enter().append("g").attr("class",function(n){return"resize "+n}).style("cursor",function(n){return $l[n]}).append("rect").attr("x",function(n){return/[ew]$/.test(n)?-3:null}).attr("y",function(n){return/^[ns]/.test(n)?-3:null}).attr("width",6).attr("height",6).style("visibility","hidden"),a.style("display",n.empty()?"none":null);var l,s=ao.transition(t),h=ao.transition(o);c&&(l=Zi(c),h.attr("x",l[0]).attr("width",l[1]-l[0]),r(s)),f&&(l=Zi(f),h.attr("y",l[0]).attr("height",l[1]-l[0]),i(s)),e(s)})}function e(n){n.selectAll(".resize").attr("transform",function(n){return"translate("+s[+/e$/.test(n)]+","+h[+/^s/.test(n)]+")"})}function r(n){n.select(".extent").attr("x",s[0]),n.selectAll(".extent,.n>rect,.s>rect").attr("width",s[1]-s[0])}function i(n){n.select(".extent").attr("y",h[0]),n.selectAll(".extent,.e>rect,.w>rect").attr("height",h[1]-h[0])}function u(){function u(){32==ao.event.keyCode&&(C||(M=null,L[0]-=s[1],L[1]-=h[1],C=2),S())}function v(){32==ao.event.keyCode&&2==C&&(L[0]+=s[1],L[1]+=h[1],C=0,S())}function d(){var n=ao.mouse(b),t=!1;x&&(n[0]+=x[0],n[1]+=x[1]),C||(ao.event.altKey?(M||(M=[(s[0]+s[1])/2,(h[0]+h[1])/2]),L[0]=s[+(n[0]<M[0])],L[1]=h[+(n[1]<M[1])]):M=null),E&&y(n,c,0)&&(r(k),t=!0),A&&y(n,f,1)&&(i(k),t=!0),t&&(e(k),w({type:"brush",mode:C?"move":"resize"}))}function y(n,t,e){var r,i,u=Zi(t),l=u[0],c=u[1],f=L[e],v=e?h:s,d=v[1]-v[0];return C&&(l-=f,c-=d+f),r=(e?g:p)?Math.max(l,Math.min(c,n[e])):n[e],C?i=(r+=f)+d:(M&&(f=Math.max(l,Math.min(c,2*M[e]-r))),r>f?(i=r,r=f):i=f),v[0]!=r||v[1]!=i?(e?a=null:o=null,v[0]=r,v[1]=i,!0):void 0}function m(){d(),k.style("pointer-events","all").selectAll(".resize").style("display",n.empty()?"none":null),ao.select("body").style("cursor",null),q.on("mousemove.brush",null).on("mouseup.brush",null).on("touchmove.brush",null).on("touchend.brush",null).on("keydown.brush",null).on("keyup.brush",null),z(),w({type:"brushend"})}var M,x,b=this,_=ao.select(ao.event.target),w=l.of(b,arguments),k=ao.select(b),N=_.datum(),E=!/^(n|s)$/.test(N)&&c,A=!/^(e|w)$/.test(N)&&f,C=_.classed("extent"),z=W(b),L=ao.mouse(b),q=ao.select(t(b)).on("keydown.brush",u).on("keyup.brush",v);if(ao.event.changedTouches?q.on("touchmove.brush",d).on("touchend.brush",m):q.on("mousemove.brush",d).on("mouseup.brush",m),k.interrupt().selectAll("*").interrupt(),C)L[0]=s[0]-L[0],L[1]=h[0]-L[1];else if(N){var T=+/w$/.test(N),R=+/^n/.test(N);x=[s[1-T]-L[0],h[1-R]-L[1]],L[0]=s[T],L[1]=h[R]}else ao.event.altKey&&(M=L.slice());k.style("pointer-events","none").selectAll(".resize").style("display",null),ao.select("body").style("cursor",_.style("cursor")),w({type:"brushstart"}),d()}var o,a,l=N(n,"brushstart","brush","brushend"),c=null,f=null,s=[0,0],h=[0,0],p=!0,g=!0,v=Bl[0];return n.event=function(n){n.each(function(){var n=l.of(this,arguments),t={x:s,y:h,i:o,j:a},e=this.__chart__||t;this.__chart__=t,Hl?ao.select(this).transition().each("start.brush",function(){o=e.i,a=e.j,s=e.x,h=e.y,n({type:"brushstart"})}).tween("brush:brush",function(){var e=xr(s,t.x),r=xr(h,t.y);return o=a=null,function(i){s=t.x=e(i),h=t.y=r(i),n({type:"brush",mode:"resize"})}}).each("end.brush",function(){o=t.i,a=t.j,n({type:"brush",mode:"resize"}),n({type:"brushend"})}):(n({type:"brushstart"}),n({type:"brush",mode:"resize"}),n({type:"brushend"}))})},n.x=function(t){return arguments.length?(c=t,v=Bl[!c<<1|!f],n):c},n.y=function(t){return arguments.length?(f=t,v=Bl[!c<<1|!f],n):f},n.clamp=function(t){return arguments.length?(c&&f?(p=!!t[0],g=!!t[1]):c?p=!!t:f&&(g=!!t),n):c&&f?[p,g]:c?p:f?g:null},n.extent=function(t){var e,r,i,u,l;return arguments.length?(c&&(e=t[0],r=t[1],f&&(e=e[0],r=r[0]),o=[e,r],c.invert&&(e=c(e),r=c(r)),e>r&&(l=e,e=r,r=l),e==s[0]&&r==s[1]||(s=[e,r])),f&&(i=t[0],u=t[1],c&&(i=i[1],u=u[1]),a=[i,u],f.invert&&(i=f(i),u=f(u)),i>u&&(l=i,i=u,u=l),i==h[0]&&u==h[1]||(h=[i,u])),n):(c&&(o?(e=o[0],r=o[1]):(e=s[0],r=s[1],c.invert&&(e=c.invert(e),r=c.invert(r)),e>r&&(l=e,e=r,r=l))),f&&(a?(i=a[0],u=a[1]):(i=h[0],u=h[1],f.invert&&(i=f.invert(i),u=f.invert(u)),i>u&&(l=i,i=u,u=l))),c&&f?[[e,i],[r,u]]:c?[e,r]:f&&[i,u])},n.clear=function(){return n.empty()||(s=[0,0],h=[0,0],o=a=null),n},n.empty=function(){return!!c&&s[0]==s[1]||!!f&&h[0]==h[1]},ao.rebind(n,l,"on")};var $l={n:"ns-resize",e:"ew-resize",s:"ns-resize",w:"ew-resize",nw:"nwse-resize",ne:"nesw-resize",se:"nwse-resize",sw:"nesw-resize"},Bl=[["n","e","s","w","nw","ne","se","sw"],["e","w"],["n","s"],[]],Wl=ga.format=xa.timeFormat,Jl=Wl.utc,Gl=Jl("%Y-%m-%dT%H:%M:%S.%LZ");Wl.iso=Date.prototype.toISOString&&+new Date("2000-01-01T00:00:00.000Z")?eo:Gl,eo.parse=function(n){var t=new Date(n);return isNaN(t)?null:t},eo.toString=Gl.toString,ga.second=On(function(n){return new va(1e3*Math.floor(n/1e3))},function(n,t){n.setTime(n.getTime()+1e3*Math.floor(t))},function(n){return n.getSeconds()}),ga.seconds=ga.second.range,ga.seconds.utc=ga.second.utc.range,ga.minute=On(function(n){return new va(6e4*Math.floor(n/6e4))},function(n,t){n.setTime(n.getTime()+6e4*Math.floor(t))},function(n){return n.getMinutes()}),ga.minutes=ga.minute.range,ga.minutes.utc=ga.minute.utc.range,ga.hour=On(function(n){var t=n.getTimezoneOffset()/60;return new va(36e5*(Math.floor(n/36e5-t)+t))},function(n,t){n.setTime(n.getTime()+36e5*Math.floor(t))},function(n){return n.getHours()}),ga.hours=ga.hour.range,ga.hours.utc=ga.hour.utc.range,ga.month=On(function(n){return n=ga.day(n),n.setDate(1),n},function(n,t){n.setMonth(n.getMonth()+t)},function(n){return n.getMonth()}),ga.months=ga.month.range,ga.months.utc=ga.month.utc.range;var Kl=[1e3,5e3,15e3,3e4,6e4,3e5,9e5,18e5,36e5,108e5,216e5,432e5,864e5,1728e5,6048e5,2592e6,7776e6,31536e6],Ql=[[ga.second,1],[ga.second,5],[ga.second,15],[ga.second,30],[ga.minute,1],[ga.minute,5],[ga.minute,15],[ga.minute,30],[ga.hour,1],[ga.hour,3],[ga.hour,6],[ga.hour,12],[ga.day,1],[ga.day,2],[ga.week,1],[ga.month,1],[ga.month,3],[ga.year,1]],nc=Wl.multi([[".%L",function(n){return n.getMilliseconds()}],[":%S",function(n){return n.getSeconds()}],["%I:%M",function(n){return n.getMinutes()}],["%I %p",function(n){return n.getHours()}],["%a %d",function(n){return n.getDay()&&1!=n.getDate()}],["%b %d",function(n){return 1!=n.getDate()}],["%B",function(n){return n.getMonth()}],["%Y",zt]]),tc={range:function(n,t,e){return ao.range(Math.ceil(n/e)*e,+t,e).map(io)},floor:m,ceil:m};Ql.year=ga.year,ga.scale=function(){return ro(ao.scale.linear(),Ql,nc)};var ec=Ql.map(function(n){return[n[0].utc,n[1]]}),rc=Jl.multi([[".%L",function(n){return n.getUTCMilliseconds()}],[":%S",function(n){return n.getUTCSeconds()}],["%I:%M",function(n){return n.getUTCMinutes()}],["%I %p",function(n){return n.getUTCHours()}],["%a %d",function(n){return n.getUTCDay()&&1!=n.getUTCDate()}],["%b %d",function(n){return 1!=n.getUTCDate()}],["%B",function(n){return n.getUTCMonth()}],["%Y",zt]]);ec.year=ga.year.utc,ga.scale.utc=function(){return ro(ao.scale.linear(),ec,rc)},ao.text=An(function(n){return n.responseText}),ao.json=function(n,t){return Cn(n,"application/json",uo,t)},ao.html=function(n,t){return Cn(n,"text/html",oo,t)},ao.xml=An(function(n){return n.responseXML}),"function"==typeof define&&define.amd?(this.d3=ao,define(ao)):"object"==typeof module&&module.exports?module.exports=ao:this.d3=ao}();
+
+//aigner: HERE IS WHERE IT ALL STARTS!!!
+},{}],2:[function(require,module,exports){
+var d3 = require('d3');
+
+var PULSE_DURATION = 700;
+var SUB_ANIM_DELAY = 200;
+var ACTIVE_COLOR = d3.rgb("seagreen");
+
+function Animation(xdsms, rootId, delay) {
+  this.rootId = rootId;
+  if (typeof (rootId) === 'undefined') {
+    this.rootId = 'root';
+  }
+  this.root = xdsms[this.rootId];
+  this.xdsms = xdsms;
+  this.duration = PULSE_DURATION;
+  this.initialDelay = delay || 0;
+}
+
+Animation.prototype._pulse = function(delay, toBeSelected, option) {
+  var sel = d3.select("svg." + this.rootId)
+              .selectAll(toBeSelected)
+              .transition().delay(delay);
+  if (option !== "out") {
+    sel = sel.transition().duration(200)
+            .style('stroke-width', '8px')
+            .style('stroke', ACTIVE_COLOR)
+            .style('fill', function(d) {
+              if (d.id) {
+                return ACTIVE_COLOR.brighter();
+              }});
+  }
+  if (option !== "in") {
+    sel.transition().duration(3 * PULSE_DURATION)
+            .style('stroke-width', null)
+            .style('stroke', null)
+            .style('fill', null);
+  }
+};
+
+Animation.prototype._animate = function() {
+  var self = this;
+  var delay = this.initialDelay;
+  var animDelay = SUB_ANIM_DELAY;
+  var graph = self.xdsms[self.rootId].graph;
+  
+  var title = d3.select("svg." + self.rootId).select("g.title");
+  title.select("text").transition().delay(delay).style("fill", ACTIVE_COLOR);
+  d3.select("svg." + self.rootId).select("rect.border")
+    .transition().delay(delay)
+      .style("stroke-width", '5px').duration(200)
+    .transition().duration(1000)
+      .style("stroke", 'black').style("stroke-width", '0px');
+
+  graph.nodesByStep.forEach(function(nodesAtStep, n, nodesByStep) {
+    var offsets = [];
+    nodesAtStep.forEach(function(nodeId) {
+      var elapsed = delay + n * PULSE_DURATION;
+      if (n > 0) {
+        nodesByStep[n-1].forEach(function(prevNodeId) { // eslint-disable-line space-infix-ops
+          var from = graph.idxOf(prevNodeId);
+          var to = graph.idxOf(nodeId);
+          self._pulse(elapsed,"polyline.link_" + from + "_" + to);
+        });
+      }
+	  //aigner: Look for existing xdsms/Sub-xdsms. Only show those, which are expanded
+      var gnode = "g." + nodeId;
+      var nodeSel = d3.select("svg." + self.rootId).select(gnode);
+      var scnId = graph.getNode(nodeId).getScenarioId();
+	  if (nodeSel.classed("mdo") && self.xdsms[scnId]) 
+	  {
+          self._pulse(elapsed, gnode + " > rect", "in");
+          var anim = new Animation(self.xdsms, scnId, elapsed + animDelay);
+          var offset = anim._animate();
+          offsets.push(offset);
+          self._pulse(offset + elapsed + animDelay, gnode + " > rect", "out");
+      } 
+	  else 
+	  {
+          self._pulse(elapsed, gnode + " > rect");
+      }
+    }, this);
+
+    if (offsets.length > 0) {
+      delay += Math.max.apply(null, offsets);
+    }
+    delay += animDelay;
+  }, this);
+	
+  title.select("text").transition()
+    .delay(graph.nodesByStep.length * PULSE_DURATION + delay)
+    .style("fill", null);
+
+  return graph.nodesByStep.length * PULSE_DURATION;
+};
+
+Animation.prototype.run = function() {
+  this._animate();
+};
+
+module.exports = Animation;
+
+},
+{"d3":1}],3:[function(require,module,exports){
+var UID = "_U_";
+var MULTI_TYPE = "_multi";
+
+//aigner: Node() constructor additionally gets the "xdsm"
+function Node(xdsm, id, name, type, metadata) {
+	
+  var splitUndef = name.split("undefined: ")
+  if (splitUndef.length>1) {name=splitUndef[1]}
+  else {name=splitUndef[0]}
+  
+  if (typeof (name) === 'undefined') {
+    name = id;
+  }
+  if (typeof (type) === 'undefined') {
+    type = 'analysis';
+  }
+  this.xdsm = xdsm;
+  this.id = id;
+  this.name = name;
+  this.metadata = metadata;
+  this.isMulti = (type.search(/_multi$/) >= 0);
+  this.type = this.isMulti ?
+    type.substr(0, type.length - MULTI_TYPE.length) : type;
+}
+
+Node.prototype.isMdo = function() {
+  return this.type === "mdo";
+};
+
+Node.prototype.getScenarioId = function() {
+  if (this.isMdo()) {
+    var idxscn = this.name.indexOf("_scn-");
+    if (idxscn === -1) {
+      console.log("Warning: MDO Scenario not found. " +
+                  "Bad type or name for node: " + JSON.stringify(this));
+      return null;
+    }
+    return this.name.substr(idxscn + 1);
+  }
+  return null;
+};
+
+function Edge(from, to, name, row, col, isMulti) {
+  this.id = "link_" + from + "_" + to;
+  this.name = name;
+  this.row = row;
+  this.col = col;
+  this.iotype = row < col ? "in" : "out";
+  this.io = {
+    fromU: (from === UID),
+    toU: (to === UID)
+  };
+  this.from = from;
+  this.to = to;
+  this.isMulti = isMulti;
+}
+
+Edge.prototype.isIO = function() {
+  return this.io.fromU || this.io.toU;
+};
+
+//aigner: Function creates the xdsm graph
+function Graph(mdo, refname) {
+  this.nodes = [new Node(UID, UID, UID, "user",[])];
+  this.edges = [];
+  this.chains = [];
+  this.refname = refname || "";
+  
+  //aigner: New numbering due to new workflow definition in KADMOS (Old stuff commented out)
+  var numbering = Graph.new_number(mdo.workflow);
+  //var numbering = Graph.number(mdo.workflow);
+  var numPrefixes = numbering.toNum;
+  this.nodesByStep = numbering.toNode;
+
+  mdo.nodes.forEach(function(item) {
+    name = document.createElement("TEXTAREA");
+    name = numPrefixes[item.id] + ": " + item.name;
+    this.nodes.push(new Node(item.xdsm, item.id, name, item.type,item.metadata));    
+  }, this);
+
+  this.ids = this.nodes.map(function(elt) {
+    return elt.id;
+  });
+  
+  mdo.edges.forEach(function(item) {
+    var idA = this.idxOf(item.from);
+    var idB = this.idxOf(item.to);
+	
+    var isMulti = this.nodes[idA].isMulti || this.nodes[idB].isMulti;
+    this.edges.push(new Edge(item.from, item.to, item.name, idA, idB, isMulti));
+  }, this);
+
+  
+  //aigner: new chains with new workflow definition for KADMOS (Old stuff commented out)
+  this.chains = Graph.new_expand(mdo.workflow,mdo.nodes);
+  // var echain = Graph.expand(mdo.workflow); 
+  // echain.forEach(function(leafChain) {
+    // if (leafChain.length < 2) {
+      // throw new Error("Bad process chain (" + leafChain.length + "elt)");
+    // } else {
+      // this.chains.push([]);
+      // var ids = this.nodes.map(function(elt) {
+        // return elt.id;
+      // });
+      // leafChain.forEach(function(item, j) {
+        // if (j !== 0) {
+          // var idA = ids.indexOf(leafChain[j - 1]);
+          // if (idA < 0) {
+            // throw new Error("Process chain element (" +
+                            // leafChain[j - 1] + ") not found");
+          // }
+          // var idB = ids.indexOf(leafChain[j]);
+          // if (idB < 0) {
+            // throw new Error("Process chain element (" +
+                            // leafChain[j] + ") not found");
+          // }
+          // if (idA !== idB) {
+            // this.chains[this.chains.length - 1].push([idA, idB]);
+          // }
+        // }
+      // }, this);
+    // }
+  // }, this);
+  
+  
+}
+
+Graph.prototype.idxOf = function(nodeId) {
+  return this.ids.indexOf(nodeId);
+};
+Graph.prototype.getNode = function(nodeId) {
+  return this.nodes[this.ids.indexOf(nodeId)];
+};
+
+function _expand(workflow) {
+  var ret = [];
+  var prev;
+  workflow.forEach(function(item) {
+    if (item instanceof Array) {
+      if (item[0].hasOwnProperty('parallel')) {
+        if (prev) {
+          ret = ret.slice(0, ret.length - 1).concat(item[0].parallel.map(
+              function(elt) {
+                return [prev].concat(_expand([elt]), prev);
+              }));
+        } else {
+          throw new Error("Bad workflow structure : " +
+              "cannot parallel loop without previous starting point.");
+        }
+      } else if (prev) {
+        ret = ret.concat(_expand(item), prev);
+      } else {
+        ret = ret.concat(_expand(item));
+      }
+      prev = ret[ret.length - 1];
+    } else if (item.hasOwnProperty('parallel')) {
+      if (prev) {
+        ret = ret.slice(0, ret.length - 1).concat(
+            item.parallel.map(function(elt) {
+              return [prev].concat(_expand([elt]));
+            }));
+      } else {
+        ret = ret.concat(item.parallel.map(
+            function(elt) {
+              return _expand([elt]);
+            }));
+      }
+      prev = undefined;
+    } else {
+      var i = ret.length - 1;
+      var flagParallel = false;
+      while (i >= 0 && (ret[i] instanceof Array)) {
+        ret[i] = ret[i].concat(item);
+        i -= 1;
+        flagParallel = true;
+      }
+      if (!flagParallel) {
+        ret.push(item);
+      }
+      prev = item;
+    }
+  }, this);
+  return ret;
+}
+
+Graph.expand = function(item) {
+  var expanded = _expand(item);
+  var result = [];
+  var current = [];
+  expanded.forEach(function(elt) {
+    if (elt instanceof Array) {
+      if (current.length > 0) {
+        current.push(elt[0]);
+        result.push(current);
+        current = [];
+      }
+      result.push(elt);
+    } else {
+      if (result.length > 0 && current.length === 0) {
+        var lastChain = result[result.length - 1];
+        var lastElt = lastChain[lastChain.length - 1];
+        current.push(lastElt);
+      }
+      current.push(elt);
+    }
+  }, this);
+  if (current.length > 0) {
+    result.push(current);
+  }
+  return result;
+};
+
+Graph.new_expand = function(workflow,nodes) {
+	var ids = nodes.map(function(elt) {
+        return elt.id;
+	});
+	var result_tmp = [];
+	for (var i=0; i < workflow.length; i++)
+	{
+		var stepNumber = workflow[i].step_number
+		var edges = workflow[i].edges;
+		for (var j=0; j < edges.length; j++)
+		{
+			var fromNode = edges[j][0];
+			var toNode = edges[j][1];			
+			var fromId = ids.indexOf(fromNode)+1;
+			var toId = ids.indexOf(toNode)+1;
+			result_tmp.push([fromId,toId]);
+		}
+	}
+	var result = [];
+	result.push(result_tmp)
+	return result;
+};
+
+Graph.number = function(workflow, num) {
+  num = (typeof num === 'undefined') ? 0 : num;
+  var toNum = {};
+  var toNode = [];
+
+  function setStep(step, nodeId) {
+    if (step in toNode) {
+      toNode[step].push(nodeId);
+    } else {
+      toNode[step] = [nodeId];
+    }
+  }
+
+  function setNum(nodeId, beg, end) {
+    if (end === undefined) {
+      num = String(beg);
+      setStep(beg, nodeId);
+    } else {
+      num = end + "-" + beg;
+      setStep(end, nodeId);
+    }
+    if (nodeId in toNum) {
+      toNum[nodeId] += "," + num;
+    } else {
+      toNum[nodeId] = num;
+    }
+  }
+
+  function _number(wks, num) {
+    var ret = 0;
+    if (wks instanceof Array) {
+      if (wks.length === 0) {
+        ret = num;
+      } else if (wks.length === 1) {
+        ret = _number(wks[0], num);
+      } else {
+        var head = wks[0];
+        var tail = wks.slice(1);
+        var beg = _number(head, num);
+        if (tail[0] instanceof Array) {
+          var end = _number(tail[0], beg);
+          setNum(head, beg, end);
+          beg = end + 1;
+          tail.shift();
+        }
+        ret = _number(tail, beg);
+      }
+    } else if ((wks instanceof Object) && 'parallel' in wks) {
+      var nums = wks.parallel.map(function(branch) {
+        return _number(branch, num);
+      });
+      ret = Math.max.apply(null, nums);
+    } else {
+      setNum(wks, num);
+      ret = num + 1;
+    }
+    return ret;
+  }
+
+  _number(workflow, num);
+  // console.log('toNodes=', JSON.stringify(toNode));
+  // console.log('toNum=',JSON.stringify(toNum));
+  return {toNum: toNum, toNode: toNode};
+};
+
+//aigner: New numbering for the workflow nodes
+Graph.new_number = function(workflow, num) {
+	num = (typeof num === 'undefined') ? 0 : num;
+	var toNum = {};
+	var toNode = [];
+	
+	for (var i=0; i < workflow.length; i++)
+	{
+		//aigner: Number the nodes with respect to the defined process steps
+		//--> toNum
+		//##########################################
+		for (var j=0; j < workflow[i].process_step_blocks.length; j++)
+		{
+			var proc_id_to = workflow[i].process_step_blocks[j];
+			if (proc_id_to)
+			{
+
+				if (!toNum[proc_id_to])
+				{
+					toNum[proc_id_to] = workflow[i].step_number;
+				}
+				else
+				{
+					toNum[proc_id_to] += "," + workflow[i].step_number;
+				}
+			}
+		}
+		for (var j=0; j < workflow[i].converger_step_blocks.length; j++)
+		{
+			var conv_id_to = workflow[i].converger_step_blocks[j];
+			if (conv_id_to)
+			{
+				toNum[conv_id_to] += "," + workflow[i].step_number;
+				var stepID = parseInt(toNum[conv_id_to].split(',')[0])+1;
+				//aigner: CAUTION --> hard coded exception for coordinator
+				if (conv_id_to!="id_Coordinator"){toNum[conv_id_to] += "-" + stepID;}
+			}
+		}
+		//##########################################		
+		//--> toNode
+		//##########################################
+		var stepNumber = workflow[i].step_number
+		var nodeId;
+		if (stepNumber==0){nodeId = [workflow[i].process_step_blocks[0]];}
+		else
+		{
+			var nodeIds = [];
+			for (var j=0; j<workflow[i].edges.length ;j++)
+			{
+				nodeIds.push(workflow[i].edges[j][1]);
+			}
+			nodeId = nodeIds;
+		}
+		toNode[stepNumber] = nodeId;
+		//##########################################
+	}	
+	return {toNum: toNum, toNode: toNode};
+};
+
+module.exports = Graph;
+
+},{}],4:[function(require,module,exports){
+function Labelizer() {}
+
+Labelizer.strParse = function(str) {
+  if (str === "") {
+    return [{base: '', sub: undefined, sup: undefined}];
+  }
+
+  //console.log("STR-->")
+  //console.log(str);
+  //aigner: Space sign added
+  var lstr = str.split(',');
+  var underscores = /_/g;
+  var rg = /([0-9\-]+: )?([A-Za-z0-9\{\}\(\)\[\]\-\.]+)(_[A-Za-z0-9\-\._]+)?(\^.+)?/;
+
+  var res = lstr.map(function(s) {
+    var base;
+    var sub;
+    var sup;
+	
+	//aigner: Modification. xpath is split after each "/"
+	var s_split = s.split("/");
+	s = s_split[s_split.length-1];
+
+    if ((s.match(underscores) || []).length > 1) {
+      var mu = s.match(/(.+)^(.+)/);
+      if (mu) {
+        return {base: mu[1], sub: undefined, sup: mu[2]};
+      }
+      return {base: s, sub: undefined, sup: undefined};
+    }
+    var m = s.match(rg);
+    if (m) {
+      base = (m[1] ? m[1] : "") + m[2];
+      if (m[3]) {
+        sub = m[3].substring(1);
+      }
+      if (m[4]) {
+        sup = m[4].substring(1);
+      }
+    } else {
+      throw new Error("Labelizer.strParse: Can not parse '" + s + "'");
+    }
+    return {base: base, sub: sub, sup: sup};
+  }, this);
+ 
+  return res;
+};
+
+Labelizer.labelize = function() {
+  var ellipsis = 0;
+
+  //aigner: createLabel modified. Hide variable names if too long.
+  function createLabel(selection) 
+  {
+    selection.each(function(d) {
+		//console.log("Labelize-->");
+		//console.log(d);
+      var tokens = Labelizer.strParse(d.name);
+      var text = selection.append("text");
+      
+	  
+	  
+	  
+      var className = selection._groups[0][0].getAttribute("class");
+
+      if (className.includes("node"))
+      {
+        tokens.every(function(token, i, ary)
+        {
+            var offsetSub = 0;
+            var offsetSup = 0;
+            //aigner: If the node is too big, it will not be shown at first, only when hovering
+			if (ellipsis < 1 || i < 15) 
+			{
+				text.append("tspan").text(token.base);
+				if (token.sub) 
+				{
+				offsetSub = 10;
+				text.append("tspan")
+				  .attr("class", "sub")
+				  .attr("dy", offsetSub)
+				  .text(token.sub);
+				}
+				if (token.sup) {
+					offsetSup = -10;
+					text.append("tspan")
+					  .attr("class", "sup")
+					  .attr("dx", -5)
+					  .attr("dy", -offsetSub + offsetSup)
+					  .text(token.sup);
+					offsetSub = 0;
+				}
+			} else 
+			{
+				text.append("tspan")
+					.attr("dy", -offsetSub - offsetSup)
+					.text("...");
+				selection.classed("ellipsized", true);
+				return false;
+            }
+			if (i < ary.length - 1) 
+			{
+				  text.append("tspan")
+					.attr("dy", -offsetSub - offsetSup)
+					.text(", ");
+			}
+            return true;
+        }, this);
+      }
+      else if(className.includes("edge"))
+      {	  
+            var offsetSub = 0;
+            var offsetSup = 0;
+            //aigner: If there are more than 5 variables in an edge, they are not shown!
+			tokens.every(function(token, i, ary)
+			{           			
+				if(d.io.fromU || d.from =="id_Coordinator"){text_tmp = "inp."}
+				else if(d.io.toU || d.to=="id_Coordinator"){text_tmp = "outp."}
+				else{text_tmp = "conn."}
+				//if (ary.length>1){text_tmp = text_tmp+"s"};
+				text.append("tspan")
+				.attr("dy", -offsetSub - offsetSup)
+				.text(ary.length + " " + text_tmp);                    
+				
+				selection.classed("ellipsized", true);
+				return false;
+			}, this);
+      }
+    });
+  }
+
+  createLabel.ellipsis = function(value) {  
+    if (!arguments.length) {
+      return ellipsis;
+    }
+    ellipsis = value;
+    return createLabel;
+  };
+
+  return createLabel;
+};
+
+Labelizer.tooltipize = function() {
+  var text = "";
+
+  function createTooltip(selection) {
+    var tokens = Labelizer.strParse(text);
+    var html = [];
+    tokens.forEach(function(token) {
+      var item = token.base;
+      if (token.sub) {
+        item += "<sub>" + token.sub + "</sub>";
+      }
+      if (token.sup) {
+        item += "<sup>" + token.sup + "</sup>";
+      }
+      html.push(item);
+    }, this);
+    selection.html(html.join(", "));
+  }
+
+  createTooltip.text = function(value) {
+    if (!arguments.length) {
+      return text;
+    }
+    text = value;
+    return createTooltip;
+  };
+
+  return createTooltip;
+};
+
+module.exports = Labelizer;
+
+},{}],5:[function(require,module,exports){
+var d3 = require('d3');
+var Labelizer = require('./labelizer.js');
+
+var WIDTH = 1000;
+var HEIGHT = 500;
+var X_ORIG = 70;
+var Y_ORIG = 20;
+var PADDING = 20;
+var CELL_W = 250;
+var CELL_H = 75;
+var MULTI_OFFSET = 3;
+
+function Cell(x, y, width, height) {
+  this.x = x;
+  this.y = y;
+  this.width = width;
+  this.height = height;
+}
+
+function Xdsm(graph, svgid, tooltip) {
+  this.graph = graph;
+  this.tooltip = tooltip;
+  this.svg = d3.select(".xdsm")
+               .append("svg")
+             .attr("width", WIDTH)
+             .attr("height", HEIGHT)
+             .attr("class", svgid);
+
+  this.grid = [];
+  this.nodes = [];
+  this.edges = [];
+}
+
+Xdsm.prototype.draw = function(graphName) {
+  var self = this;
+
+  if (self.graph.refname) {
+    var ref = self.svg.append('g').classed('title', true);
+
+	var text_tmp = self.graph.refname.replace(/\w/g, function(l){ return l.toUpperCase() })
+		
+    ref.append("text").text(graphName);
+    var bbox = ref.nodes()[0].getBBox();
+    ref.insert("rect", "text")
+        .attr('x', bbox.x)
+        .attr('y', bbox.y)
+        .attr('width', bbox.width)
+        .attr('height', bbox.height);
+
+    ref.attr('transform',
+             'translate(' + X_ORIG + ',' + (Y_ORIG + bbox.height-10) + ')');
+  }
+
+  self.nodes = self._createTextGroup("node");
+  self.edges = self._createTextGroup("edge");
+
+  // Workflow
+  self._createWorkflow();
+
+  // Layout texts
+  self._layoutText(self.nodes);
+  self._layoutText(self.edges);
+
+  // Rectangles for nodes
+  self.nodes.each(function(d, i) {
+    var that = d3.select(this);
+    that.call(self._customRect.bind(self), d, i, 0);
+    if (d.isMulti) {
+      that.call(self._customRect.bind(self), d, i, 1 * Number(MULTI_OFFSET));
+      that.call(self._customRect.bind(self), d, i, 2 * Number(MULTI_OFFSET));
+    }
+  });
+
+  // Trapezium for edges
+  self.edges.each(function(d, i) {
+    var that = d3.select(this);
+    that.call(self._customTrapz.bind(self), d, i, 0);
+    if (d.isMulti) {
+      that.call(self._customTrapz.bind(self), d, i, 1 * Number(MULTI_OFFSET));
+      that.call(self._customTrapz.bind(self), d, i, 2 * Number(MULTI_OFFSET));
+    }
+  });
+
+  // Dataflow
+  self._createDataflow(self.edges);
+	
+  //aigner: set svg size
+  var w = CELL_W * (self.graph.nodes.length + 1);
+  var h = CELL_H * (self.graph.nodes.length + 1);
+  self.svg.attr("width", w).attr("height", h);
+
+  var bordercolor = 'black';
+  self.svg.append("rect")
+            .classed("border", true)
+            .attr("x", 4)
+            .attr("y", 4)
+            .attr("height", h - 4)
+            .attr("width", w - 4)
+            .style("stroke", bordercolor)
+            .style("fill", "none")
+            .style("stroke-width", 0);
+			
+  //aigner: PlayButton for animation
+  var playButton = self.svg.append("g").attr("class", "playButton")
+      .attr("transform", "translate("+ 10 +","+ 10 +")");
+  playButton
+    .append("rect")
+	  .attr("class", "playButton_rect")
+      .attr("width", 50)
+      .attr("height", 50)
+      .attr("rx", 4)
+      .style("fill", "#666666");
+  playButton
+    .append("path")
+	  .attr("class", "playButton_triangle")
+      .attr("d", "M15 10 L15 40 L35 25 Z")
+      .style("fill", "white");
+  //aigner: Hide playbutton if there is no workflow process
+  if(self.graph.nodesByStep.length<1)
+  {
+	  playButton.attr("visibility","hidden");
+  }
+};
+
+Xdsm.prototype._createTextGroup = function(kind) {
+  var self = this;
+
+  var group = self.svg.append('g').attr("class", kind + "s");
+
+  var textGroups =
+    group.selectAll("." + kind)
+      .data(this.graph[kind + "s"])
+    .enter()
+      .append("g").attr("class", function(d) {
+        var klass = kind === "node" ? d.type : "dataInter";
+        if (klass === "dataInter" && (d.isIO()||d.from=="id_Coordinator"||d.to=="id_Coordinator")) {
+          klass = "dataIO";
+        }
+        return d.id + " " + kind + " " + klass;
+      }).each(function() {
+        var labelize = Labelizer.labelize().ellipsis(5);
+        d3.select(this).call(labelize);
+      });
+
+  d3.selectAll(".ellipsized")
+    .on("mouseover", function(d) {
+		d3.select(this).style("cursor", "pointer")
+		self.tooltip.transition().duration(200).style("opacity", 0.9);
+		var pipeData = d.name.split(",");
+		var pipeVariables=[];
+		for (var i=0; i<pipeData.length; i++)
+		{
+			if (pipeData[i].includes("/"))
+			{
+				var splitPipeData = pipeData[i].split("/");
+				pipeVariables.push(splitPipeData[splitPipeData.length-1]);
+			}
+		}
+		
+
+		var pruned_pipeVars = {};
+		var tooltipText="";
+		pipeVariables.forEach(function(x) { pruned_pipeVars[x] = (pruned_pipeVars[x] || 0)+1; });
+		for(var keyName in pruned_pipeVars) {
+			var textTmp;
+			var value = pruned_pipeVars[keyName]
+			if (value>1){textTmp = String(keyName+"("+value+")")}
+			else{textTmp=String(keyName)}
+			if (tooltipText==""){tooltipText+=textTmp}
+			else{tooltipText+=","+textTmp}
+		}
+		
+		var tooltipize = Labelizer.tooltipize().text(tooltipText);
+		self.tooltip.call(tooltipize)
+		  .style("width", "200px")
+		  .style("left", (d3.event.pageX) + "px")
+		  .style("top", (d3.event.pageY - 28) + "px");
+	})
+	.on("mouseout", function() {
+		self.tooltip.transition().duration(500).style("opacity", 0);
+	});
+
+  return textGroups;
+};
+
+Xdsm.prototype._createWorkflow = function() {
+  //  console.log(JSON.stringify(this.graph.chains));
+  var workflow = this.svg.insert("g", ":first-child")
+                    .attr("class", "workflow");
+  workflow.selectAll("g")
+    .data(this.graph.chains)
+  .enter()
+    .insert('g').attr("class", "workflow-chain")
+    .selectAll('polyline')
+      .data(function(d) { return d; })  // eslint-disable-line brace-style
+    .enter()
+      .append("polyline")
+        .attr("class", function(d) {
+          return "link_" + d[0] + "_" + d[1];
+        })
+        .attr("points", function(d) {
+          var w = CELL_W * Math.abs(d[0] - d[1]);
+          var h = CELL_H * Math.abs(d[0] - d[1]);
+          var points = [];
+          if (d[0] < d[1]) {
+            if (d[0] !== 0) {
+              points.push((-w) + ",0");
+            }
+            points.push("0,0");
+            if (d[1] !== 0) {
+              points.push("0," + h);
+            }
+          } else {
+            if (d[0] !== 0) {
+              points.push(w + ",0");
+            }
+            points.push("0,0");
+            if (d[1] !== 0) {
+              points.push("0," + (-h));
+            }
+          }
+          return points.join(" ");
+        })
+      .attr("transform", function(d) {
+        var max = Math.max(d[0], d[1]);
+        var min = Math.min(d[0], d[1]);
+        var w;
+        var h;
+        if (d[0] < d[1]) {
+          w = CELL_W * max + X_ORIG;
+          h = CELL_H * min + Y_ORIG;
+        } else {
+          w = CELL_W * min + X_ORIG;
+          h = CELL_H * max + Y_ORIG;
+        }
+        return "translate(" + (X_ORIG + w) + "," + (Y_ORIG + h) + ")";
+      });
+};
+
+Xdsm.prototype._createDataflow = function(edges) {
+  var dataflow = this.svg.insert("g", ":first-child")
+                   .attr("class", "dataflow");
+
+  edges.each(function(d, i) {
+    dataflow.insert("polyline", ":first-child")
+      .attr("points", function() {
+        var w = CELL_W * Math.abs(d.col - d.row);
+        var h = CELL_H * Math.abs(d.col - d.row);
+        var points = [];
+        if (d.iotype === "in") {
+          if (!d.io.fromU) {
+            points.push((-w) + ",0");
+          }
+          points.push("0,0");
+          if (!d.io.toU) {
+            points.push("0," + h);
+          }
+        } else {
+          if (!d.io.fromU) {
+            points.push(w + ",0");
+          }
+          points.push("0,0");
+          if (!d.io.toU) {
+            points.push("0," + (-h));
+          }
+        }
+        return points.join(" ");
+      }).attr("transform", function() {
+        var m = (d.col === undefined) ? i : d.col;
+        var n = (d.row === undefined) ? i : d.row;
+        var w = CELL_W * m + X_ORIG;
+        var h = CELL_H * n + Y_ORIG;
+        return "translate(" + (X_ORIG + w) + "," + (Y_ORIG + h) + ")";
+      });
+  });
+};
+
+Xdsm.prototype._layoutText = function(items) {
+  var grid = this.grid;
+  items.each(function(d, i) {
+    var item = d3.select(this);
+    if (grid[i] === undefined) {
+      grid[i] = new Array(items.length);
+    }
+    item.select("text").each(function(d, j) {
+      var that = d3.select(this);
+      var data = item.data()[0];
+      var m = (data.row === undefined) ? i : data.row;
+      var n = (data.col === undefined) ? i : data.col;
+      var bbox = that.nodes()[j].getBBox();
+      grid[m][n] = new Cell(-bbox.width / 2, 0, bbox.width, bbox.height);
+      that.attr("x", function() {
+        return grid[m][n].x;
+      }).attr("y", function() {
+        return grid[m][n].y;
+      }).attr("width", function() {
+        return grid[m][n].width;
+      }).attr("height", function() {
+        return grid[m][n].height;
+      });
+    });
+  });
+
+  items.attr("transform", function(d, i) {
+    var m = (d.col === undefined) ? i : d.col;
+    var n = (d.row === undefined) ? i : d.row;
+    var w = CELL_W * m + X_ORIG;
+    var h = CELL_H * n + Y_ORIG;
+    return "translate(" + (X_ORIG + w) + "," + (Y_ORIG + h) + ")";
+  });
+};
+
+Xdsm.prototype._customRect = function(node, d, i, offset) {
+  var grid = this.grid;
+  node.insert("rect", ":first-child").attr("x", function() {
+    return grid[i][i].x + offset - PADDING;
+  }).attr("y", function() {
+    return -grid[i][i].height * 2 / 3 - PADDING - offset;
+  }).attr("width", function() {
+    return grid[i][i].width + (PADDING * 2);
+  }).attr("height", function() {
+    return grid[i][i].height + (PADDING * 2);
+  }).attr("rx", function() {
+    var rounded = d.type === 'optimization' ||
+                  d.type === 'mda' ||
+                  d.type === 'doe' ||
+		          d.type === 'converger';
+    return rounded ? (grid[i][i].height + (PADDING * 2)) / 2 : 0;
+  }).attr("ry", function() {
+    var rounded = d.type === 'optimization' ||
+                  d.type === 'mda' ||
+                  d.type === 'doe' ||
+		          d.type === 'converger';
+    return rounded ? (grid[i][i].height + (PADDING * 2)) / 2 : 0;
+  });
+};
+
+Xdsm.prototype._customTrapz = function(edge, d, i, offset) {
+  var grid = this.grid;
+  edge.insert("polygon", ":first-child").attr("points", function(d) {
+    var pad = 5;
+    var w = grid[d.row][d.col].width;
+    var h = grid[d.row][d.col].height;
+    var topleft = (-pad - w / 2 + offset) + ", " +
+                  (-pad - h * 2 / 3 - offset);
+    var topright = (w / 2 + pad + offset + 5) + ", " +
+                   (-pad - h * 2 / 3 - offset);
+    var botright = (w / 2 + pad + offset - 5 + 5) + ", " +
+                   (pad + h / 3 - offset);
+    var botleft = (-pad - w / 2 + offset - 5) + ", " +
+                  (pad + h / 3 - offset);
+    var tpz = [topleft, topright, botright, botleft].join(" ");
+    return tpz;
+  });
+};
+
+module.exports = Xdsm;
+
+},
+{"./labelizer.js":4,"d3":1}],6:[function(require,module,exports){
+/*
+ * XDSMjs
+ * Copyright 2016 Rémi Lafage
+ */
+"use strict";
+
+var d3 = require('d3');
+
+//d3-context-menu for right-click-option
+d3.contextMenu = function (menu, openCallback) {
+
+	// create the div element that will hold the context menu
+	d3.selectAll('.d3-context-menu').data([1])
+		.enter()
+		.append('div')
+		.attr('class', 'd3-context-menu');
+
+	// close menu
+	d3.select('body').on('click.d3-context-menu', function() {
+		d3.select('.d3-context-menu').style('display', 'none');
+	});
+
+	// this gets executed when a contextmenu event occurs
+	return function(data, index) {	
+		var elm = this;
+
+		d3.selectAll('.d3-context-menu').html('');
+		var list = d3.selectAll('.d3-context-menu').append('ul');
+	       	list.selectAll('li').data(menu).enter()
+			.append('li')
+			.html(function(d) {
+				return d.title;
+			})
+			.on('mousedown', function(d, i) {
+				d.onMouseDown(elm, data, index);
+			})
+			.on('mouseup', function(d, i) {
+				d.onMouseUp(elm, data, index);
+				d3.select('.d3-context-menu').style('display', 'none');
+			})
+            .on('mouseenter',function(d,i){
+                d.onMouseOver(elm,data,index);
+                if(d.childrenItems.length>0 )
+                     {
+                      d3.select(this).selectAll("ul").remove(); 
+                      d3.select(this)
+                        .append("ul")
+                        .selectAll("li")
+                           .data(d.childrenItems)
+                            .enter().append("li")
+                              .text(function(d) { return d.title; })
+                         .on("mouseenter", function(d,i){
+                                d.onMouseOver(elm,data,index);
+                            })
+                         .on('click',  function(d, i) {
+                                d.onMouseClick(elm, d, index);
+                            })
+                         .on('mouseleave',function(d,i){
+                            
+                            });
+                     }
+                 else
+                     return false;
+            })
+            .on('mouseleave',function(d,i){
+                d3.select(this).selectAll("ul").style('display', 'none')                  
+            });
+        
+          
+
+		// the openCallback allows an action to fire before the menu is displayed
+		// an example usage would be closing a tooltip
+		if (openCallback) openCallback(data, index);
+
+		// display context menu
+		d3.select('.d3-context-menu')
+			.style('left', (d3.event.pageX - 2) + 'px')
+			.style('top', (d3.event.pageY - 2) + 'px')
+			.style('display', 'block');
+
+		d3.event.preventDefault();
+	};
+};
+
+function makeKadmosMenu(theGraphs,currentView,currentID)
+{
+	var imageWidth = 200;
+	var imageHeight = 150;
+	var padding = 10;
+	var rectHeight = 70;
+	var imgSize = 40;
+	var visPackDiv = d3.select("body").append("div").attr("class","vispackDiv");
+	var visPackSvg = visPackDiv.append("svg")
+		.attr("class","visPackSvg")
+		.attr("width",imageWidth*5+40)
+		.attr("height",imageHeight+40)
+		.attr("transform", "translate("
+		  + String(10) + "," + String(10) + ")")			  
+	
+	
+	var defs = visPackSvg.append("defs");
+	var filter = defs.append("filter")
+		.attr("id", "drop-shadow")
+		.attr("height", "130%")
+	filter.append("feColorMatrix")
+		.attr("values", "0.2 0 0 0 0 0 0.2 0 0 0 0 0 0.2 0 0 0 0 0 1 0")
+		.attr("result", "matrixOut")
+	filter.append("feGaussianBlur")
+		.attr("in", "matrixOut")
+		.attr("stdDeviation", 5)
+		.attr("result", "blur")
+	filter.append("feOffset")
+		.attr("in", "blur")
+		.attr("dx", 5)
+		.attr("dy", 5)
+		.attr("result", "offsetBlur")
+	var feMerge = filter.append("feMerge");
+	feMerge.append("feMergeNode")
+		.attr("in", "offsetBlur")
+	feMerge.append("feMergeNode")
+		.attr("in", "SourceGraphic");
+	
+	var visPackFrame = visPackSvg.append("rect")
+		.attr("width",imageWidth*5+12)
+		.attr("height",imageHeight)
+		.attr("fill", "white")
+		.style("filter", "url(#drop-shadow)")
+	
+	var imgs = visPackSvg.selectAll("image").data([0]);
+		imgs.enter()
+		.append("svg:image")
+		.attr("x",5)
+		.attr("xlink:href", "file:../supportFiles/include/KADMOS_VisualizationPack_Icon.png")
+		.attr("width", imageWidth)
+		.attr("height", imageHeight)
+		.attr("position", "relative")
+		
+	var offset_tmp = 860;
+	visPackSvg.append("text")
+		.attr("transform", "translate("
+		  + String(210) + "," + String(35) + ")")
+		.attr("font-family","Arial")
+		.attr("font-size","32pt")
+		.attr("fill","#666666")
+		.text("KADMOS Visualization Package")
+	
+	
+	var acknGroup = visPackSvg.append("g").attr("class","acknGroup").classed("acknGroup",true)
+	var acknRect = acknGroup.append("rect").classed("ackn",true)
+		.attr("height", 30)
+		.attr("transform", "translate("
+		  + String(offset_tmp) + "," + String(2) + ")")
+	acknGroup.append("text")
+		.attr("transform", "translate("
+		  + String(offset_tmp+padding/2) + "," + String(20) + ")")
+		.attr("text-anchor", "front")
+		.attr("font-family","Arial")
+		.attr("font-size","12pt")
+		.attr("fill","white")
+		.text("Acknowledgements")
+	acknRect = acknRect.attr("width", function(d) {return this.parentNode.getBBox().width+padding;})
+	acknRect = acknRect.classed("VisPackMenu",true)
+	acknGroup = acknGroup.on("mouseover", function(){d3.select(this).style("cursor", "pointer")})
+	.on("click",function(){window.open("../supportFiles/include/acknowledgements.html", '_blank');})
+
+	var acknGroup2 = visPackSvg.append("g").attr("class","acknGroup2")
+		.attr("transform", "translate("
+		  + String(offset_tmp) + "," + String(40+padding) + ")")
+    acknGroup2.append("text")
+		.classed("acknText",true)
+		.attr("dy", "0em")
+		.text("Copyright:")
+	acknGroup2.append("text")
+		.classed("acknText",true)
+		.attr("dy", "1.5em")
+		.text("B. Aigner")
+	var imgs = visPackSvg.selectAll("img").data([0]);
+		imgs.enter()
+		.append("svg:image")
+		.attr("xlink:href", "file:../supportFiles/include/RWTH_Logo.png")
+		.attr("x", String(offset_tmp+85))
+		.attr("y", "3em")
+		.attr("width", "60")
+		.attr("height", "40");
+	acknGroup2.append("text")
+		.classed("acknText",true)
+		.attr("dy", "3.2em")
+		.text("I. van Gent")
+	var imgs = visPackSvg.selectAll("img").data([0]);
+		imgs.enter()
+		.append("svg:image")
+		.attr("xlink:href", "file:../supportFiles/include/TUDelft_Logo.png")
+		.attr("x", String(offset_tmp+85))
+		.attr("y", "4.7em")
+		.attr("width", "60")
+		.attr("height", "40");
+
+	
+	var ul = d3.select("body").append("div").attr("class","newDiv").append("ul")
+	function makeViewButtons(graphs_tmp,aName, visFile)
+	{
+		var dropdown1 = ul.append("li").on("mouseover", function(){d3.select(this).style("cursor", "default")})
+		dropdown1.append("a").text(aName)
+		dropdown1.append("img").attr("src","../supportFiles/include/AGILE_Icon.png")
+			.attr("align","left")
+			.style("margin-left","6px")
+			.style("margin-right","0px")
+			.style("margin-top","6px")
+			.style("margin-bottom","6px")
+			.attr("height","42")
+			.attr("width","42")
+		var links = dropdown1.append("ul");
+		for (var i=0; i < graphs_tmp.length; i++)
+		{
+			makeDropDown(graphs_tmp[i],visFile,links,aName)
+		}
+	}
+	function makeDropDown(theData,file,theLinks,aName)
+	{		
+		var linkLi = theLinks.append("li");
+		var link = linkLi.append("a").text(theData.description)
+		if (theData.id == currentID && currentView == aName)
+		{
+			link
+			 .on("mouseover", function(){
+				 d3.select(this).style("cursor", "default")})
+		    linkLi.style("background","#888")
+		}
+		else
+		{
+			link
+			 .on("mouseover", function(){d3.select(this).style("cursor", "pointer")})
+			 .on("click", function(){
+				window.location.replace("../supportFiles/"+file, '_blank');
+				window.localStorage.setItem("graphID", theData.id);})
+		}
+	}
+	makeViewButtons(theGraphs,"XDSM","xdsm.html");
+	makeViewButtons(theGraphs,"Edge Bundles","circlelayout.html");
+	makeViewButtons(theGraphs,"Sankey Diagram","sankeyDiagram.html");
+}
+	
+//aigner: Move to front function
+d3.selection.prototype.moveToFront = function() {  
+  return this.each(function(){
+	this.parentNode.appendChild(this);
+  });
+};
+//aigner: Move to back function
+d3.selection.prototype.moveToBack = function() {  
+	return this.each(function() { 
+		var firstChild = this.parentNode.firstChild; 
+		if (firstChild) { 
+			this.parentNode.insertBefore(this, firstChild); 
+		} 
+	});
+};
+	
+//get the current graph ID from the KADMOS visualiazation package's starting page
+var graphID = "01";
+if (window.localStorage.getItem("graphID"))
+{
+	graphID=window.localStorage.getItem("graphID");
+}
+var jsonFile = "json/circleLayout_"+graphID+".json";
+var schemaFile = "json/schema_"+graphID+".json"
+//Get graph info from graphs.json file
+var graphs; 
+var varCategories; 
+d3.json("json/graphs.json", function(error, aGraphInfo) 
+{	
+	if (error) {throw error;}	
+	graphs = aGraphInfo.graphs;
+	varCategories =  aGraphInfo.categories;
+})
+
+var diameter = 960,
+	radius = diameter / 2,
+	innerRadius = radius - 120;
+
+var cluster = d3.layout.cluster()
+	.size([360, innerRadius])
+	.sort(null)
+	.value(function(d) { return d.size; });
+
+var bundle = d3.layout.bundle();
+
+var line = d3.svg.line.radial()
+	.interpolate("bundle")
+	.tension(0.85)
+	.radius(function(d) { return d.y; })
+	.angle(function(d) { return d.x / 180 * Math.PI; });
+
+var svg = d3.select("body").append("div").append("svg")
+	.attr("class","circleSvg")
+	.attr("width", 10000)
+	.attr("height", 10000)
+  .append("g")
+	.attr("transform", "translate(" + radius*2 + "," + radius*1.2+ ")");
+	
+var width = diameter*1.5;
+var imgWidth = width;
+var imgs = svg.selectAll("image").data([0]);
+imgs.enter()
+.append("svg:image")
+.attr("xlink:href", "../include/AGILE_Background.png")
+.attr("x", -width/2)
+.attr("y", -100)
+.attr("width", imgWidth)
+.attr("height", imgWidth/4.8)
+.attr("opacity", 1)
+
+var link = svg.append("g").selectAll(".link"),
+	invisibleLink = svg.append("g").selectAll(".invisibleLink"),
+	node = svg.append("g").selectAll(".node");
+
+d3.json(jsonFile, function(error, classes) {
+	d3.json (schemaFile, function(schema)
+	{
+		if (error) throw error;		
+		
+		makeKadmosMenu(graphs,"Circle View",graphID);
+		
+		d3.select(".newDiv").moveToBack()
+		d3.select(".vispackDiv").moveToBack()
+		
+		var nodes = cluster.nodes(packageHierarchy(classes));
+		var links = packageImports(nodes);
+		
+		link = link
+		  .data(bundle(links))
+		.enter().append("path")
+		  .each(function(d) { 
+			d.source = d[0];
+			d.target = d[d.length - 1];})
+		  .attr("class", "link")
+		  .attr("d", line)
+	
+		
+		invisibleLink = invisibleLink
+		  .data(bundle(links))
+			.enter().append("path")
+		  .each(function(d) { 
+			d.source = d[0];
+			d.target = d[d.length - 1];
+			d.createNew = true;})
+		  .attr("class", "invisibleLink")
+		
+		invisibleLink = invisibleLink
+		  .attr("d", line)
+		  .on("click", function(d)
+		  {
+			createTreeLayout(schema,d);
+			d.createNew = false;			
+		  })
+		  
+
+		node = node
+		  .data(nodes.filter(function(n) { return !n.children; }))
+		.enter().append("text")
+		  .attr("class", "node")
+		  .attr("dy", ".31em")
+		  .attr("transform", function(d) { return "rotate(" + (d.x - 90) + ")translate(" + (d.y + 8) + ",0)" + (d.x < 180 ? "" : "rotate(180)"); })
+		  .style("text-anchor", function(d) { return d.x < 180 ? "start" : "end"; })
+		  .style("font-family","Arial")
+		  .style("font-size","24px")
+		  .text(function(d) { return d.key; })
+		  .on("mouseover", nodeMouseovered)
+		  .on("mouseout", nodeMouseouted);
+	})
+});
+
+function nodeMouseovered(d) {
+	
+  node
+      .each(function(n) { 
+	  n.target = n.source = false; });
+
+  link
+      .classed("link--target", function(l) { if (l.target === d) return l.source.source = true; })
+      .classed("link--source", function(l) { if (l.source === d) return l.target.target = true; })
+      .filter(function(l) { return l.target === d || l.source === d; })
+      .each(function() { this.parentNode.appendChild(this); });
+	  
+  node
+      .classed("node--target", function(n) { return n.target; })
+      .classed("node--source", function(n) { return n.source; });
+}
+
+function nodeMouseouted(d) {
+  link
+      .classed("link--target", false)
+      .classed("link--source", false);
+
+  node
+      .classed("node--target", false)
+      .classed("node--source", false);
+}
+
+d3.select(self.frameElement).style("height", diameter + "px");
+
+// Lazily construct the package hierarchy from class names.
+function packageHierarchy(classes) {
+  var map = {};
+
+  function find(name, data) {
+    var node = map[name], i;
+    if (!node) {
+      node = map[name] = data || {name: name, children: []};
+      if (name.length) {
+        node.parent = find(name.substring(0, i = name.lastIndexOf("/")));
+        node.parent.children.push(node);
+        node.key = name.substring(i + 1);
+      }
+    }
+    return node;
+  }
+
+  classes.forEach(function(d) {
+    find(d.name, d);
+  });
+
+  return map[""];
+}
+
+// Return a list of imports for the given array of nodes.
+function packageImports(nodes) {
+  var map = {},
+  map2 = {},
+  input = [];
+
+  // Compute a map from name to node.
+  nodes.forEach(function(d) {
+    map[d.name] = d;
+    map2[d.pipeline_data] = d;
+  });
+
+  // For each import, construct a link from the source to target node.
+  nodes.forEach(function(d) 
+  {
+	if(d.input)
+	{
+		d.input.forEach(function(i) 
+		{
+			if (map[i])
+			{
+				input.push({source: map[d.name], 
+						target: map[i],
+						pipeline_data: map2[d.pipeline_data]});
+			}
+		})
+	}
+
+   });
+  return input;
+}
+
+function include(arr,obj) {
+    return (arr.indexOf(obj) != -1);
+}
+
+
+function prune_schema(theParent, objArray, xPathListIn, xPathListOut) 
+{
+	for (var i = 0; i < objArray.length; ++i) 
+	{
+		var obj = objArray[i];
+		obj.pipeLineIn = false;
+		obj.pipeLineOut = false;
+		var objXPath = theParent.name+"/"+objArray[i].name;
+		var delete_it = true;
+		// console.log("Current node ->")
+		// console.log(objXPath)
+		for (var j = 0; j < xPathListIn.length; ++j) 
+		{
+			var xPath = xPathListIn[j];
+			// console.log(xPath);
+			// console.log("Position = " + j);
+			// console.log(include(xPath, objXPath));
+			if (include(xPath, objXPath))
+			{
+				obj.pipeLineIn = true;
+				delete_it = false;
+			}
+		}
+		for (var j = 0; j < xPathListOut.length; ++j) 
+		{
+			var xPath = xPathListOut[j];
+			// console.log(xPath);
+			// console.log("Position = " + j);
+			// console.log(include(xPath, objXPath));
+			if (include(xPath, objXPath))
+			{
+				obj.pipeLineOut = true;
+				delete_it = false;
+			}
+		}
+		if (delete_it==true)
+		{
+			// console.log("delete ->")
+			// console.log(objXPath)
+			objArray.splice(i, 1);
+			i--;
+		}
+		else
+		{
+			// console.log("do not delete ->")
+			// console.log(objXPath);
+			if (obj.children)
+			{
+				if (obj.children.length==0)
+				{
+					objArray.splice(i, 1);
+					i--;
+				}
+				prune_schema(obj, obj.children, xPathListIn, xPathListOut);
+			}
+		}
+	}
+}
+
+function createTreeLayout(schema,theLink)
+{
+	if (theLink.createNew == false)
+	{return};
+	
+	function cleanArray(actual) 
+	{
+		var newArray = new Array();
+		for (var i = 0; i < actual.length; i++) 
+		{
+			if (actual[i]) 
+			{
+				newArray.push(actual[i]);
+			}
+		}
+		return newArray;
+	}
+	
+	var inList = [];
+	var outList = [];
+	var pipeData_in = theLink.source.pipeline_data[theLink.target.name];
+	var pipeData_out = theLink.target.pipeline_data[theLink.source.name];
+	
+	<!-- console.log("###IN###"); -->
+	<!-- console.log(pipeData_in); -->
+	<!-- console.log("###OUT###"); -->
+	<!-- console.log(pipeData_out); -->
+	
+	var treeData = (JSON.parse(JSON.stringify(schema)));
+	
+	if (!pipeData_in){pipeData_in = [];}
+	if (!pipeData_out){pipeData_out = [];}
+	prune_schema(treeData, treeData.children, pipeData_in, pipeData_out);	
+	//console.log(treeData);
+		
+		
+	var width= 1000;
+	var height= 500;
+	var xOffset = 10;
+	var xOffset2 = 100;
+	var canvas = d3.select(".circleSvg");
+	// Calculate total nodes, max label length
+	var totalNodes = 0;
+	var maxLabelLength = 0;
+	// variables for drag/drop
+	var selectedNode = null;
+	var draggingNode = null;
+	// Misc. variables
+	var i = 0;
+	var duration = 500;
+	var root;
+	
+
+	// size of the diagram
+	var viewerWidth = width/3;
+	var viewerHeight = height-50;
+
+	var tree = d3.layout.tree()
+		.size([viewerHeight, viewerWidth])
+
+	// define a d3 diagonal projection for use by the node paths later on.
+	var diagonal = d3.svg.diagonal()
+		.projection(function(d) {
+			return [d.y+xOffset, d.x];
+		});
+
+	// A recursive helper function for performing some setup by walking through all nodes
+
+	function visit(parent, visitFn, childrenFn) {
+		if (!parent) return;
+
+		visitFn(parent);
+
+		var children = childrenFn(parent);
+		if (children) {
+			var count = children.length;
+			for (var i = 0; i < count; i++) {
+				visit(children[i], visitFn, childrenFn);
+			}
+		}
+	}
+
+	// Call visit function to establish maxLabelLength
+	visit(treeData, function(d) {
+		totalNodes++;
+		maxLabelLength = Math.max(d.name.length, maxLabelLength);
+	}, function(d) {
+		return d.children && d.children.length > 0 ? d.children : null;
+	});
+	
+	function getMaxLength(data)
+	{
+		var maxLen=0;;
+		for (var i = 0; i < data.length; i++)
+		{
+			maxLen = Math.max(data[i].name.length, maxLen);
+		}
+		for (var i = 0; i < data.length; i++)
+		{
+			data[i].labelLength = maxLen;
+			if (data[i].children)
+			{getMaxLength(data[i].children);}
+			if (data[i]._children)
+			{getMaxLength(data[i]._children);}
+		}
+		
+	}
+	if(treeData._children)
+	{getMaxLength(treeData._children);}
+	if(treeData.children)
+	{getMaxLength(treeData.children);}
+	treeData.labelLength = treeData.name.length;
+
+	// sort the tree according to the node names
+	function sortTree() {
+		tree.sort(function(a, b) {
+			return b.name.toLowerCase() < a.name.toLowerCase() ? 1 : -1;
+		});
+	}
+	// Sort the tree initially incase the JSON isn't in a sorted order.
+	//sortTree()
+
+
+	// Collapse the node and all it's children
+	function collapse(d) {
+	  if(d.children) {
+		d._children = d.children
+		d._children.forEach(collapse)
+		d.children = null
+	  }
+	}
+	// Collapse the node and all it's children
+	function expand(d) {
+	  if(d._children) {
+		d.children = d._children
+		d.children.forEach(expand)
+		d._children = null
+	  }
+	}
+	// Toggle children on click.
+	function click(d) 
+	{
+		if (d.children) {
+			d._children = d.children;
+			d.children = null;
+		} else 
+		{
+			d.children = d._children;
+			d._children = null;
+		}
+		update(d);
+	}
+	// Collapse/expand entire tree on double-click
+	function dblclick(d) 
+	{
+		if(d.children) 
+		{
+			collapse(d);
+		}
+		else if(d._children)
+		{
+			expand(d);
+		}
+		update(d);
+	}	
+
+	
+	
+	var treeGroup = canvas.append("g").attr("class","treeGroup")
+		.style("position","absolute")
+		
+	
+	var xPos = d3.event.pageX;
+	var yPos = d3.event.pageY-200;
+	
+	var frameGroup = treeGroup.append("g")
+		.style("position","absolute")
+		.attr("transform", "translate("+xPos+","+yPos+")")
+		.attr("class","frame")
+	var frame = frameGroup.append("rect")
+		.attr("stroke-width", 1)
+		.attr("stroke", "white")
+		.attr("fill-opacity", .8);
+	
+	var removeSymbol = frameGroup.append("g").attr("class", "remove"+d3.event.pageX+"_"+d3.event.pageX)
+		
+	
+	var r=8;
+	var cx=r+2;
+	var cy=r+2;
+	var circle = removeSymbol.append("circle")
+		.attr("cx", cx)
+		.attr("cy", cy)
+		.attr("r", r)
+		.style("stroke", "black")
+		.style("stroke-width", 1.5)
+		.style("fill", "red")
+		.style("fill-opacity", .6)
+	var minus = removeSymbol.append("line")
+		.attr("x1", cx+r/2)
+		.attr("y1", cy)
+		.attr("x2", cx-r/2)
+		.attr("y2", cy)
+		.style("stroke", "black")
+		.style("stroke-width", 1.5);
+		
+	removeSymbol
+		.on("mouseover", function(){circle.style("fill", "red").style("fill-opacity", .8);})
+		.on("mouseout", function(){circle.style("fill", "red").style("fill-opacity", .6)})
+		.on("mousedown",function()
+		{
+			circle.style("fill", "darkred").style("fill-opacity",1);
+		})
+		.on("mouseup",function()
+		{
+			treeGroup.remove();
+			theLink.createNew = true;
+		})
+	
+	
+	// Append a group which holds all nodes and which the zoom Listener can act upon.
+	var svgGroup = treeGroup.append("g")
+		.attr("class","tree_"+theLink.source.name+"."+theLink.target.name)
+		.attr("transform", "translate("+String(xPos+70)+","+String(yPos+30)+")");
+
+	
+	// Define the root
+	root = treeData;
+	root.x0 = 0;
+	root.y0 = 0;
+	
+	collapse(root);
+	update(root,theLink);
+	
+	
+	function update(source,aLink) {
+		// Compute the new height, function counts total children of root node and sets tree height accordingly.
+		// This prevents the layout looking squashed when new nodes are made visible or looking sparse when nodes are removed
+		// This makes the layout more consistent.
+		var levelWidth = [1];
+		var levelLength = [1];
+		var childCount = function(level, n) {
+
+			if (n.children && n.children.length > 0) {
+				if (levelWidth.length <= level + 1) levelWidth.push(0);
+				
+				levelWidth[level + 1] += n.children.length;
+				n.children.forEach(function(d) {
+					childCount(level + 1, d);
+				});
+			}
+		};
+		childCount(0, root);
+
+		var newHeight = d3.max(levelWidth) * 20; // 20 pixels per line
+		var newWidth = viewerWidth+300;
+		
+		
+		
+		//BENNI: fill in viewerHeight instead of newHeight for other expanding/collapsing beaviour
+		tree = tree.size([newHeight, newWidth]);
+		
+		frame = frame.attr("width",newWidth)
+			.attr("height",newHeight+60)
+			.attr("fill","white");
+			
+		if (aLink)
+		{
+			var frametext = frameGroup.append("text")
+				.attr("class", "frametext")
+				.attr("x",30)
+				.attr("y",-5)
+				.attr("text-anchor","start")
+				.attr("font-family","Arial")
+				.attr("font-size","18px")
+				.attr("font-weight","bold")
+				.text("Variable flow:    " + aLink.source.name + "  \-\-> " + aLink.target.name)
+		}
+		
+		// Compute the new tree layout.
+		var nodes = tree.nodes(root),
+			links = tree.links(nodes);
+			
+		//aigner: count all descendants of a node
+		function countDescendants(node, counter) 
+		{
+			if (node._children)
+			{
+				node._children.forEach(function(n)
+				{
+					counter = countDescendants(n, counter);
+				});
+			}
+			else if (node.children)
+			{
+				node.children.forEach(function(n)
+				{
+					counter = countDescendants(n, counter);
+				});
+			}
+			else
+			{
+				counter ++;
+			}
+			return counter;
+		}
+		
+		
+		var depths = [];
+		var labelLength = [];
+		nodes.forEach(function(d) 
+		{				
+			//aigner: If node is collapsed show number of ancestors
+			if (d._children)
+			{
+				d._childrenNum = countDescendants(d, 0);
+				d.text = d.name + " (" + d._childrenNum + ")";
+			}
+			else 
+			{
+				d.text = d.name
+			}
+			
+			//aigner: Find maximum labelLength for each level
+			if (!depths.includes(d.depth))
+			{
+				depths.push(d.depth);
+				labelLength.push(d.text.length);
+			}
+			else
+			{
+				if (d.depth!=0){labelLength[depths.indexOf(d.depth)] = Math.max(d.text.length, labelLength[depths.indexOf(d.depth)]);}
+			}
+		});
+		// Set widths between levels based on labelLength of each level.
+		var newWidth=0;	
+		var depth_tmp = 0;			
+		nodes.forEach(function(d) 
+		{
+			if (d.parent)
+			{
+				d.y = d.parent.y+(labelLength[depths.indexOf(d.depth)])*12+50;
+			}
+			else{d.y=0}
+			
+			
+			if (newWidth<d.y)
+			{newWidth=d.y;}
+			
+			// console.log("##############")
+			// console.log(d.name)
+			// console.log("x = " + d.x)
+			// console.log("y = " + d.y)
+			// console.log("depth = " + depths.indexOf(d.depth))
+			// console.log("##############")
+		});	
+
+
+		// Update the nodes…
+		var treeNode = svgGroup.selectAll("g.treeNode")
+			.data(nodes, function(d) {
+				return d.id || (d.id = ++i);
+			});
+
+		var dblclick_timer = false;
+		// Enter any new nodes at the parent's previous position.
+		var nodeEnter = treeNode.enter().append('g')
+		  .attr('class', 'treeNode')
+		  .attr("transform", function(d) {
+			return "translate(" + source.y0 + "," + source.x0 + ")";
+		})
+		.on("click", function(d) {
+			// if double click timer is active, this click is the double click
+			if ( dblclick_timer )
+			{
+				clearTimeout(dblclick_timer)
+				dblclick_timer = false
+				// double click code code comes here
+				//console.log("DOUBLE CLICK")
+				dblclick(d);
+			}
+			// otherwise, what to do after single click (double click has timed out)
+			else dblclick_timer = setTimeout( function(){
+				dblclick_timer = false
+				// single click code code comes here
+				//console.log("SINGLE CLICK")
+				click(d);
+			}, 250)
+		})
+			
+		
+		nodeEnter.append("circle")
+			.attr('class', 'nodeCircle')
+			.attr("r", 0)
+			.style("fill", function(d) {
+				return d._children ? "lightsteelblue" : "#fff";
+			})
+			.style("stroke", function(d) {
+				if(d.pipeLineIn && !d.pipeLineOut){
+					//console.log(d);
+					return '#CC0000'}
+				else if(!d.pipeLineIn && d.pipeLineOut){
+					//console.log(d);
+					return '#99CC00'}
+			})
+			.attr("cx", function(d) {return xOffset});
+
+		nodeEnter.append("text")
+			.attr("x", function(d) 
+			{
+					return d.children || d._children ? -10+xOffset : 10+xOffset;
+			})
+			.attr("dy", ".35em")
+			.attr('class', 'nodeText')
+			.attr("text-anchor", function(d) {
+				return d.children || d._children ? "end" : "start";
+			})
+			.text(function(d) {
+				return d.name;
+			})
+			.style("fill-opacity", 0)
+			
+
+		// Update the text to reflect whether node has children or not.
+		treeNode.select('text')
+			.attr("x", function(d) {
+				return d.children || d._children ? -10+xOffset : 10+xOffset;
+			})
+			.attr("text-anchor", function(d) {
+				return d.children || d._children ? "end" : "start";
+			})
+			.text(function(d) {
+				return d.name;
+			});
+
+		// Change the circle fill depending on whether it has children and is collapsed
+		treeNode.select("circle.nodeCircle")
+			.attr("r", 4.5)
+			.style("fill", function(d) {
+				return d._children ? "lightsteelblue" : "#fff";
+			});					
+		
+		
+		//menu --> functions for right click options
+		var nodeMenu = [
+		{
+			title: 'Show node information',
+			onMouseDown: function(elm, d, i) {
+			},
+			onMouseUp: function(elm, d, i) {},
+			onMouseOver: function(elm, d, i) {},
+			childrenItems: []
+		},
+		{
+			title: 'Show usage of node in XDSM',
+			onMouseDown: function(elm, d, i) {
+			},
+			onMouseUp: function(elm, d, i) {
+			},
+			onMouseOver: function(elm, d, i) {
+			},
+			childrenItems: []
+		},
+		{
+			title: 'Copy x-path to clipboard',
+			onMouseDown: function(elm, d, i) {
+			},
+			onMouseUp: function(elm, d, i) {
+			},
+			onMouseOver: function(elm, d, i) {
+			},
+			childrenItems: []
+		},
+		{
+			title: 'Download full tree as XML-file',
+			onMouseDown: function(elm, d, i) {		
+			},
+			onMouseUp: function(elm, d, i) {
+			},
+			onMouseOver: function(elm, d, i) {
+			},
+			childrenItems: []
+		},
+		{
+			title: 'Download tree as XML-file from current node',
+			onMouseDown: function(elm, d, i) {					
+			},
+			onMouseUp: function(elm, d, i) {
+			},
+			onMouseOver: function(elm, d, i) {
+			},
+			childrenItems: []
+		}
+		]
+		
+		
+		nodeEnter = nodeEnter
+					.on('contextmenu', d3.contextMenu(nodeMenu));
+					
+		// UPDATE		
+		// Transition nodes to their new position.
+		var nodeUpdate = treeNode.transition()
+			.duration(duration)
+			.attr("transform", function(d) {
+				return "translate(" + d.y + "," + d.x + ")";
+			});
+
+		// Fade the text in
+		nodeUpdate.select("text")
+			.style("fill-opacity", 1);
+		
+		//New object for invisible nodes
+		var exitNodes = [];
+		
+		// Transition exiting nodes to the parent's new position.
+		var nodeExit = treeNode.exit()
+			.transition()
+			.duration(duration)
+			.attr("transform", translation)
+			//.remove();
+		
+		function translation(d) 
+		{
+			
+			var closestAncestor;
+			closestAncestor = findClosestAncestor(nodes,d);
+			exitNodes.push(d);
+			exitNodes[exitNodes.length-1].x = closestAncestor.x;
+			exitNodes[exitNodes.length-1].y = closestAncestor.y;
+			return "translate(" + closestAncestor.y + "," + closestAncestor.x + ")";
+		}
+		
+		function findClosestAncestor(allNodes, element) 
+		{
+			var level = 0;
+			var closestAncestor;
+			for (var i=0;i<allNodes.length;i++)
+			{
+				if (!allNodes[i].level){allNodes[i].level=0};
+				if (isDescendant(allNodes[i],element) && allNodes[i].level >= level)
+				{
+					level = allNodes[i].level;
+					closestAncestor = allNodes[i];
+				}
+			}
+			return closestAncestor;
+		}
+		
+		function isDescendant(parent, child) 
+		{
+			 var node = child.parent;
+			 while (node != null) 
+			 {
+				if (node == parent) 
+				{
+					return true;
+				}
+				node = node.parent;
+			 }
+			 return false;
+		}
+		
+		nodeExit.select("circle")
+			.attr("r", 0);
+
+		nodeExit.select("text")
+			.style("fill-opacity", 0);
+
+		// Update the links…
+		var link = svgGroup.selectAll("path.treeLink")
+			.data(links, function(d) {
+				return d.target.id;
+			});
+
+		// Enter any new links at the parent's previous position.
+		link.enter().insert("path", "g")
+			.attr("class", "treeLink")
+			.attr("d", function(d) {
+				var o = {
+					x: source.x0,
+					y: source.y0
+				};
+				return diagonal({
+					source: o,
+					target: o
+				});
+			});
+
+		// Transition links to their new position.
+		link.transition()
+			.duration(duration)
+			.attr("d", diagonal);
+
+		// Transition exiting nodes to the parent's new position.
+		link.exit().transition()
+			.duration(duration)
+			.attr("d", function(d) {
+				var o = {
+					x: source.x,
+					y: source.y
+				};
+				return diagonal({
+					source: o,
+					target: o
+				});
+			})
+			.remove();
+		
+		// Stash the old positions for transition.
+		nodes.forEach(function(d) {						
+			d.x0 = d.x;
+			d.y0 = d.y;
+		});
+	}
+}
+
+
+},
+{"./src/animation":2,"./src/graph":3,"./src/xdsm":5,"d3":1}]},{},[6]);
diff --git a/kadmos/external/D3_vispack/KADMOS_VisualizationPackage_170530/supportFiles/edgeBundles.html b/kadmos/external/D3_vispack/KADMOS_VisualizationPackage_170530/supportFiles/edgeBundles.html
new file mode 100644
index 000000000..b3695e803
--- /dev/null
+++ b/kadmos/external/D3_vispack/KADMOS_VisualizationPackage_170530/supportFiles/edgeBundles.html
@@ -0,0 +1,224 @@
+<!doctype html>
+<html class="js" lang="">
+<style>
+.node {
+  fill: #aaa;
+}
+
+.node:hover {
+  fill: #666666;
+}
+
+.link {
+  stroke: #3399FF;
+  stroke-opacity: 0.4;
+  stroke-width: 2px;
+  fill: none;
+  
+}
+
+.invisibleLink {
+  stroke: #000;
+  stroke-opacity: 0;
+  stroke-width: 15px;
+  fill: none;
+}
+.invisibleLink:hover {
+  stroke: #3399FF;
+  stroke-opacity: 1.0;
+  stroke-width: 5px;
+  fill: none;
+}
+
+.node:hover,
+.node--source,
+.node--target {
+  font-weight: 700;
+}
+
+.node--source {
+  fill: #99CC00;
+}
+
+.node--target {
+  fill: #CC0000;
+}
+
+.link--target,
+.link--source{
+  stroke-opacity: .8;
+  stroke-width: 5px;
+}
+
+.link--source {
+  stroke: #CC0000;
+}
+
+.link--target {
+  stroke: #99CC00;
+}
+
+
+.treeNode {
+cursor: pointer;
+}
+
+.overlay{
+  background-color:#FFF;
+}
+
+.treeNode circle {
+fill: #fff;
+stroke: #3399FF;
+stroke-width: 1.5px;
+}
+
+.treeNode text {
+font-size:16px; 
+font-family:Arial;
+}
+
+.treeLink {
+fill: none;
+stroke: #ccc;
+stroke-width: 1.5px;
+}
+
+.d3-context-menu {
+	position: absolute;
+	display: none;
+	background-color: #f2f2f2;
+	border-radius: 4px;
+	font-family: Arial;
+	font-size: 16pt;
+	min-width: 300px;
+	border: 1px solid #d4d4d4;
+	z-index:1200;
+}
+.d3-context-menu ul {
+	list-style-type: none;
+	margin: 4px 0px;
+	padding: 0px;
+	cursor: default;
+}
+.d3-context-menu ul li {
+	padding: 4px 16px;
+}
+.d3-context-menu ul li:hover {
+	background-color: #4677f8;
+}
+.d3-context-menu ul li > ul {
+    position: absolute; 
+    background-color: #f2f2f2; 
+    top: 0;
+	min-width: 350px;
+    left: 300px; 
+    z-index: -1; 
+} 
+
+.d3-context-menu ul li > ul li:hover 
+{ 
+    background-color: #4677f8;
+	color: #fefefe;
+}
+
+.ackn {
+fill: #666666;
+stroke: #666666;
+stroke-width: 2.0;
+}
+
+.acknGroup:hover .ackn{
+fill: #3399FF;
+stroke: #3399FF;
+}
+
+.newDiv {
+	position:relative;
+	top: -100px;
+	left: 220px;
+	background-color: none;
+}
+.newDiv a {
+    text-decoration: none;
+    color: white;
+    font-family: Arial;
+    font-size: 20pt;
+    padding-top: 12px;
+    padding-right: 12px;
+    padding-bottom: 12px;
+    padding-left: 6px;
+    display:inline-block;
+}
+.newDiv ul {
+  display:  inline-block;;
+  margin: 0;
+  padding: 0;
+  background-color: #666666;
+}
+.newDiv ul li {display: inline-block;}
+.newDiv ul li:hover {background: #888;}
+.newDiv ul li:hover ul {display: block;}
+.newDiv ul li ul {
+  position: absolute;
+  min-width: 200px;
+  display: none;
+}
+.newDiv ul li ul li { 
+  background: #555; 
+  display: block;
+}
+.newDiv ul li ul li a {
+	display:block !important
+} 
+.newDiv ul li ul li:hover {background: #3399FF;}
+
+table {
+	width: 800px;
+	table-layout:fixed;
+}
+
+table, th, td {
+	font-family: Arial;
+    font-size: 16pt;
+	background-color: white;
+    border: 2pt solid darkgrey;
+    border-collapse: collapse;
+	text-align: left;
+	word-wrap:break-word;
+}
+}
+th, td {
+    padding-top: 6px;
+    padding-right: 20px;
+    padding-bottom: 6px;
+    padding-left: 20px;
+	min-width: 100px;
+	max-width: 400px;
+}
+
+.remCircle {
+	stroke: black;
+	stroke-width: 2;
+	fill: red;
+	fill-opacity: .6
+}
+.remMinus {
+	stroke: black;
+	stroke-width: 2;
+}
+
+.acknText {
+font-family: Arial;
+font-size: 12pt;
+fill: #666666;
+}
+</style>
+    <head>
+		<meta charset="utf-8">
+		<title>KADMOS Edge Bundles</title>
+    </head>
+    <body>
+		<script src="edgeBundles.js"></script>
+    </body>
+</html>
\ No newline at end of file
diff --git a/kadmos/external/D3_vispack/KADMOS_VisualizationPackage_170530/supportFiles/edgeBundles.js b/kadmos/external/D3_vispack/KADMOS_VisualizationPackage_170530/supportFiles/edgeBundles.js
new file mode 100644
index 000000000..8cdc7d70c
--- /dev/null
+++ b/kadmos/external/D3_vispack/KADMOS_VisualizationPackage_170530/supportFiles/edgeBundles.js
@@ -0,0 +1,2810 @@
+(function() {
+/*! jQuery v3.2.0 | (c) JS Foundation and other contributors | jquery.org/license */
+!function(a,b){"use strict";"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){"use strict";var c=[],d=a.document,e=Object.getPrototypeOf,f=c.slice,g=c.concat,h=c.push,i=c.indexOf,j={},k=j.toString,l=j.hasOwnProperty,m=l.toString,n=m.call(Object),o={};function p(a,b){b=b||d;var c=b.createElement("script");c.text=a,b.head.appendChild(c).parentNode.removeChild(c)}var q="3.2.0",r=function(a,b){return new r.fn.init(a,b)},s=/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,t=/^-ms-/,u=/-([a-z])/g,v=function(a,b){return b.toUpperCase()};r.fn=r.prototype={jquery:q,constructor:r,length:0,toArray:function(){return f.call(this)},get:function(a){return null==a?f.call(this):a<0?this[a+this.length]:this[a]},pushStack:function(a){var b=r.merge(this.constructor(),a);return b.prevObject=this,b},each:function(a){return r.each(this,a)},map:function(a){return this.pushStack(r.map(this,function(b,c){return a.call(b,c,b)}))},slice:function(){return this.pushStack(f.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:h,sort:c.sort,splice:c.splice},r.extend=r.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||r.isFunction(g)||(g={}),h===i&&(g=this,h--);h<i;h++)if(null!=(a=arguments[h]))for(b in a)c=g[b],d=a[b],g!==d&&(j&&d&&(r.isPlainObject(d)||(e=Array.isArray(d)))?(e?(e=!1,f=c&&Array.isArray(c)?c:[]):f=c&&r.isPlainObject(c)?c:{},g[b]=r.extend(j,f,d)):void 0!==d&&(g[b]=d));return g},r.extend({expando:"jQuery"+(q+Math.random()).replace(/\D/g,""),isReady:!0,error:function(a){throw new Error(a)},noop:function(){},isFunction:function(a){return"function"===r.type(a)},isWindow:function(a){return null!=a&&a===a.window},isNumeric:function(a){var b=r.type(a);return("number"===b||"string"===b)&&!isNaN(a-parseFloat(a))},isPlainObject:function(a){var b,c;return!(!a||"[object Object]"!==k.call(a))&&(!(b=e(a))||(c=l.call(b,"constructor")&&b.constructor,"function"==typeof c&&m.call(c)===n))},isEmptyObject:function(a){var b;for(b in a)return!1;return!0},type:function(a){return null==a?a+"":"object"==typeof a||"function"==typeof a?j[k.call(a)]||"object":typeof a},globalEval:function(a){p(a)},camelCase:function(a){return a.replace(t,"ms-").replace(u,v)},each:function(a,b){var c,d=0;if(w(a)){for(c=a.length;d<c;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(s,"")},makeArray:function(a,b){var c=b||[];return null!=a&&(w(Object(a))?r.merge(c,"string"==typeof a?[a]:a):h.call(c,a)),c},inArray:function(a,b,c){return null==b?-1:i.call(b,a,c)},merge:function(a,b){for(var c=+b.length,d=0,e=a.length;d<c;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),d!==h&&e.push(a[f]);return e},map:function(a,b,c){var d,e,f=0,h=[];if(w(a))for(d=a.length;f<d;f++)e=b(a[f],f,c),null!=e&&h.push(e);else for(f in a)e=b(a[f],f,c),null!=e&&h.push(e);return g.apply([],h)},guid:1,proxy:function(a,b){var c,d,e;if("string"==typeof b&&(c=a[b],b=a,a=c),r.isFunction(a))return d=f.call(arguments,2),e=function(){return a.apply(b||this,d.concat(f.call(arguments)))},e.guid=a.guid=a.guid||r.guid++,e},now:Date.now,support:o}),"function"==typeof Symbol&&(r.fn[Symbol.iterator]=c[Symbol.iterator]),r.each("Boolean Number String Function Array Date RegExp Object Error Symbol".split(" "),function(a,b){j["[object "+b+"]"]=b.toLowerCase()});function w(a){var b=!!a&&"length"in a&&a.length,c=r.type(a);return"function"!==c&&!r.isWindow(a)&&("array"===c||0===b||"number"==typeof b&&b>0&&b-1 in a)}var x=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=ha(),z=ha(),A=ha(),B=function(a,b){return a===b&&(l=!0),0},C={}.hasOwnProperty,D=[],E=D.pop,F=D.push,G=D.push,H=D.slice,I=function(a,b){for(var c=0,d=a.length;c<d;c++)if(a[c]===b)return c;return-1},J="checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped",K="[\\x20\\t\\r\\n\\f]",L="(?:\\\\.|[\\w-]|[^\0-\\xa0])+",M="\\["+K+"*("+L+")(?:"+K+"*([*^$|!~]?=)"+K+"*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|("+L+"))|)"+K+"*\\]",N=":("+L+")(?:\\((('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|((?:\\\\.|[^\\\\()[\\]]|"+M+")*)|.*)\\)|)",O=new RegExp(K+"+","g"),P=new RegExp("^"+K+"+|((?:^|[^\\\\])(?:\\\\.)*)"+K+"+$","g"),Q=new RegExp("^"+K+"*,"+K+"*"),R=new RegExp("^"+K+"*([>+~]|"+K+")"+K+"*"),S=new RegExp("="+K+"*([^\\]'\"]*?)"+K+"*\\]","g"),T=new RegExp(N),U=new RegExp("^"+L+"$"),V={ID:new RegExp("^#("+L+")"),CLASS:new RegExp("^\\.("+L+")"),TAG:new RegExp("^("+L+"|[*])"),ATTR:new RegExp("^"+M),PSEUDO:new RegExp("^"+N),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+K+"*(even|odd|(([+-]|)(\\d*)n|)"+K+"*(?:([+-]|)"+K+"*(\\d+)|))"+K+"*\\)|)","i"),bool:new RegExp("^(?:"+J+")$","i"),needsContext:new RegExp("^"+K+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+K+"*((?:-\\d)?\\d*)"+K+"*\\)|)(?=[^-]|$)","i")},W=/^(?:input|select|textarea|button)$/i,X=/^h\d$/i,Y=/^[^{]+\{\s*\[native \w/,Z=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,$=/[+~]/,_=new RegExp("\\\\([\\da-f]{1,6}"+K+"?|("+K+")|.)","ig"),aa=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)},ba=/([\0-\x1f\x7f]|^-?\d)|^-$|[^\0-\x1f\x7f-\uFFFF\w-]/g,ca=function(a,b){return b?"\0"===a?"\ufffd":a.slice(0,-1)+"\\"+a.charCodeAt(a.length-1).toString(16)+" ":"\\"+a},da=function(){m()},ea=ta(function(a){return a.disabled===!0&&("form"in a||"label"in a)},{dir:"parentNode",next:"legend"});try{G.apply(D=H.call(v.childNodes),v.childNodes),D[v.childNodes.length].nodeType}catch(fa){G={apply:D.length?function(a,b){F.apply(a,H.call(b))}:function(a,b){var c=a.length,d=0;while(a[c++]=b[d++]);a.length=c-1}}}function ga(a,b,d,e){var f,h,j,k,l,o,r,s=b&&b.ownerDocument,w=b?b.nodeType:9;if(d=d||[],"string"!=typeof a||!a||1!==w&&9!==w&&11!==w)return d;if(!e&&((b?b.ownerDocument||b:v)!==n&&m(b),b=b||n,p)){if(11!==w&&(l=Z.exec(a)))if(f=l[1]){if(9===w){if(!(j=b.getElementById(f)))return d;if(j.id===f)return d.push(j),d}else if(s&&(j=s.getElementById(f))&&t(b,j)&&j.id===f)return d.push(j),d}else{if(l[2])return G.apply(d,b.getElementsByTagName(a)),d;if((f=l[3])&&c.getElementsByClassName&&b.getElementsByClassName)return G.apply(d,b.getElementsByClassName(f)),d}if(c.qsa&&!A[a+" "]&&(!q||!q.test(a))){if(1!==w)s=b,r=a;else if("object"!==b.nodeName.toLowerCase()){(k=b.getAttribute("id"))?k=k.replace(ba,ca):b.setAttribute("id",k=u),o=g(a),h=o.length;while(h--)o[h]="#"+k+" "+sa(o[h]);r=o.join(","),s=$.test(a)&&qa(b.parentNode)||b}if(r)try{return G.apply(d,s.querySelectorAll(r)),d}catch(x){}finally{k===u&&b.removeAttribute("id")}}}return i(a.replace(P,"$1"),b,d,e)}function ha(){var a=[];function b(c,e){return a.push(c+" ")>d.cacheLength&&delete b[a.shift()],b[c+" "]=e}return b}function ia(a){return a[u]=!0,a}function ja(a){var b=n.createElement("fieldset");try{return!!a(b)}catch(c){return!1}finally{b.parentNode&&b.parentNode.removeChild(b),b=null}}function ka(a,b){var c=a.split("|"),e=c.length;while(e--)d.attrHandle[c[e]]=b}function la(a,b){var c=b&&a,d=c&&1===a.nodeType&&1===b.nodeType&&a.sourceIndex-b.sourceIndex;if(d)return d;if(c)while(c=c.nextSibling)if(c===b)return-1;return a?1:-1}function ma(a){return function(b){var c=b.nodeName.toLowerCase();return"input"===c&&b.type===a}}function na(a){return function(b){var c=b.nodeName.toLowerCase();return("input"===c||"button"===c)&&b.type===a}}function oa(a){return function(b){return"form"in b?b.parentNode&&b.disabled===!1?"label"in b?"label"in b.parentNode?b.parentNode.disabled===a:b.disabled===a:b.isDisabled===a||b.isDisabled!==!a&&ea(b)===a:b.disabled===a:"label"in b&&b.disabled===a}}function pa(a){return ia(function(b){return b=+b,ia(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 qa(a){return a&&"undefined"!=typeof a.getElementsByTagName&&a}c=ga.support={},f=ga.isXML=function(a){var b=a&&(a.ownerDocument||a).documentElement;return!!b&&"HTML"!==b.nodeName},m=ga.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),v!==n&&(e=n.defaultView)&&e.top!==e&&(e.addEventListener?e.addEventListener("unload",da,!1):e.attachEvent&&e.attachEvent("onunload",da)),c.attributes=ja(function(a){return a.className="i",!a.getAttribute("className")}),c.getElementsByTagName=ja(function(a){return a.appendChild(n.createComment("")),!a.getElementsByTagName("*").length}),c.getElementsByClassName=Y.test(n.getElementsByClassName),c.getById=ja(function(a){return o.appendChild(a).id=u,!n.getElementsByName||!n.getElementsByName(u).length}),c.getById?(d.filter.ID=function(a){var b=a.replace(_,aa);return function(a){return a.getAttribute("id")===b}},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(_,aa);return function(a){var c="undefined"!=typeof a.getAttributeNode&&a.getAttributeNode("id");return c&&c.value===b}},d.find.ID=function(a,b){if("undefined"!=typeof b.getElementById&&p){var c,d,e,f=b.getElementById(a);if(f){if(c=f.getAttributeNode("id"),c&&c.value===a)return[f];e=b.getElementsByName(a),d=0;while(f=e[d++])if(c=f.getAttributeNode("id"),c&&c.value===a)return[f]}return[]}}),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){if("undefined"!=typeof b.getElementsByClassName&&p)return b.getElementsByClassName(a)},r=[],q=[],(c.qsa=Y.test(n.querySelectorAll))&&(ja(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("[*^$]="+K+"*(?:''|\"\")"),a.querySelectorAll("[selected]").length||q.push("\\["+K+"*(?:value|"+J+")"),a.querySelectorAll("[id~="+u+"-]").length||q.push("~="),a.querySelectorAll(":checked").length||q.push(":checked"),a.querySelectorAll("a#"+u+"+*").length||q.push(".#.+[+~]")}),ja(function(a){a.innerHTML="<a href='' disabled='disabled'></a><select disabled='disabled'><option/></select>";var b=n.createElement("input");b.setAttribute("type","hidden"),a.appendChild(b).setAttribute("name","D"),a.querySelectorAll("[name=d]").length&&q.push("name"+K+"*[*^$|!~]?="),2!==a.querySelectorAll(":enabled").length&&q.push(":enabled",":disabled"),o.appendChild(a).disabled=!0,2!==a.querySelectorAll(":disabled").length&&q.push(":enabled",":disabled"),a.querySelectorAll("*,:x"),q.push(",.*:")})),(c.matchesSelector=Y.test(s=o.matches||o.webkitMatchesSelector||o.mozMatchesSelector||o.oMatchesSelector||o.msMatchesSelector))&&ja(function(a){c.disconnectedMatch=s.call(a,"*"),s.call(a,"[s!='']:x"),r.push("!=",N)}),q=q.length&&new RegExp(q.join("|")),r=r.length&&new RegExp(r.join("|")),b=Y.test(o.compareDocumentPosition),t=b||Y.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?I(k,a)-I(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?I(k,a)-I(k,b):0;if(e===f)return la(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?la(g[d],h[d]):g[d]===v?-1:h[d]===v?1:0},n):n},ga.matches=function(a,b){return ga(a,null,null,b)},ga.matchesSelector=function(a,b){if((a.ownerDocument||a)!==n&&m(a),b=b.replace(S,"='$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 ga(b,n,null,[a]).length>0},ga.contains=function(a,b){return(a.ownerDocument||a)!==n&&m(a),t(a,b)},ga.attr=function(a,b){(a.ownerDocument||a)!==n&&m(a);var e=d.attrHandle[b.toLowerCase()],f=e&&C.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},ga.escape=function(a){return(a+"").replace(ba,ca)},ga.error=function(a){throw new Error("Syntax error, unrecognized expression: "+a)},ga.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=ga.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=ga.selectors={cacheLength:50,createPseudo:ia,match:V,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(_,aa),a[3]=(a[3]||a[4]||a[5]||"").replace(_,aa),"~="===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]||ga.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]&&ga.error(a[0]),a},PSEUDO:function(a){var b,c=!a[6]&&a[2];return V.CHILD.test(a[0])?null:(a[3]?a[2]=a[4]||a[5]||"":c&&T.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(_,aa).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("(^|"+K+")"+a+"("+K+"|$)"))&&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=ga.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(O," ")+" ").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),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()]||ga.error("unsupported pseudo: "+a);return e[u]?e(b):e.length>1?(c=[a,a,"",b],d.setFilters.hasOwnProperty(a.toLowerCase())?ia(function(a,c){var d,f=e(a,b),g=f.length;while(g--)d=I(a,f[g]),a[d]=!(c[d]=f[g])}):function(a){return e(a,0,c)}):e}},pseudos:{not:ia(function(a){var b=[],c=[],d=h(a.replace(P,"$1"));return d[u]?ia(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:ia(function(a){return function(b){return ga(a,b).length>0}}),contains:ia(function(a){return a=a.replace(_,aa),function(b){return(b.textContent||b.innerText||e(b)).indexOf(a)>-1}}),lang:ia(function(a){return U.test(a||"")||ga.error("unsupported lang: "+a),a=a.replace(_,aa).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:oa(!1),disabled:oa(!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 X.test(a.nodeName)},input:function(a){return W.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:pa(function(){return[0]}),last:pa(function(a,b){return[b-1]}),eq:pa(function(a,b,c){return[c<0?c+b:c]}),even:pa(function(a,b){for(var c=0;c<b;c+=2)a.push(c);return a}),odd:pa(function(a,b){for(var c=1;c<b;c+=2)a.push(c);return a}),lt:pa(function(a,b,c){for(var d=c<0?c+b:c;--d>=0;)a.push(d);return a}),gt:pa(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]=ma(b);for(b in{submit:!0,reset:!0})d.pseudos[b]=na(b);function ra(){}ra.prototype=d.filters=d.pseudos,d.setFilters=new ra,g=ga.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=Q.exec(h))||(e&&(h=h.slice(e[0].length)||h),i.push(f=[])),c=!1,(e=R.exec(h))&&(c=e.shift(),f.push({value:c,type:e[0].replace(P," ")}),h=h.slice(c.length));for(g in d.filter)!(e=V[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?ga.error(a):z(a,i).slice(0)};function sa(a){for(var b=0,c=a.length,d="";b<c;b++)d+=a[b].value;return d}function ta(a,b,c){var d=b.dir,e=b.next,f=e||d,g=c&&"parentNode"===f,h=x++;return b.first?function(b,c,e){while(b=b[d])if(1===b.nodeType||g)return a(b,c,e);return!1}:function(b,c,i){var j,k,l,m=[w,h];if(i){while(b=b[d])if((1===b.nodeType||g)&&a(b,c,i))return!0}else while(b=b[d])if(1===b.nodeType||g)if(l=b[u]||(b[u]={}),k=l[b.uniqueID]||(l[b.uniqueID]={}),e&&e===b.nodeName.toLowerCase())b=b[d]||b;else{if((j=k[f])&&j[0]===w&&j[1]===h)return m[2]=j[2];if(k[f]=m,m[2]=a(b,c,i))return!0}return!1}}function ua(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 va(a,b,c){for(var d=0,e=b.length;d<e;d++)ga(a,b[d],c);return c}function wa(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 xa(a,b,c,d,e,f){return d&&!d[u]&&(d=xa(d)),e&&!e[u]&&(e=xa(e,f)),ia(function(f,g,h,i){var j,k,l,m=[],n=[],o=g.length,p=f||va(b||"*",h.nodeType?[h]:h,[]),q=!a||!f&&b?p:wa(p,m,a,h,i),r=c?e||(f?a:o||d)?[]:g:q;if(c&&c(q,r,h,i),d){j=wa(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?I(f,l):m[k])>-1&&(f[j]=!(g[j]=l))}}else r=wa(r===g?r.splice(o,r.length):r),e?e(null,g,r,i):G.apply(g,r)})}function ya(a){for(var b,c,e,f=a.length,g=d.relative[a[0].type],h=g||d.relative[" "],i=g?1:0,k=ta(function(a){return a===b},h,!0),l=ta(function(a){return I(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=[ta(ua(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 xa(i>1&&ua(m),i>1&&sa(a.slice(0,i-1).concat({value:" "===a[i-2].type?"*":""})).replace(P,"$1"),c,i<e&&ya(a.slice(i,e)),e<f&&ya(a=a.slice(e)),e<f&&sa(a))}m.push(c)}return ua(m)}function za(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]=E.call(i));u=wa(u)}G.apply(i,u),k&&!f&&u.length>0&&r+b.length>1&&ga.uniqueSort(i)}return k&&(w=y,j=v),t};return c?ia(f):f}return h=ga.compile=function(a,b){var c,d=[],e=[],f=A[a+" "];if(!f){b||(b=g(a)),c=b.length;while(c--)f=ya(b[c]),f[u]?d.push(f):e.push(f);f=A(a,za(e,d)),f.selector=a}return f},i=ga.select=function(a,b,c,e){var f,i,j,k,l,m="function"==typeof a&&a,n=!e&&g(a=m.selector||a);if(c=c||[],1===n.length){if(i=n[0]=n[0].slice(0),i.length>2&&"ID"===(j=i[0]).type&&9===b.nodeType&&p&&d.relative[i[1].type]){if(b=(d.find.ID(j.matches[0].replace(_,aa),b)||[])[0],!b)return c;m&&(b=b.parentNode),a=a.slice(i.shift().value.length)}f=V.needsContext.test(a)?0:i.length;while(f--){if(j=i[f],d.relative[k=j.type])break;if((l=d.find[k])&&(e=l(j.matches[0].replace(_,aa),$.test(i[0].type)&&qa(b.parentNode)||b))){if(i.splice(f,1),a=e.length&&sa(i),!a)return G.apply(c,e),c;break}}}return(m||h(a,n))(e,b,!p,c,!b||$.test(a)&&qa(b.parentNode)||b),c},c.sortStable=u.split("").sort(B).join("")===u,c.detectDuplicates=!!l,m(),c.sortDetached=ja(function(a){return 1&a.compareDocumentPosition(n.createElement("fieldset"))}),ja(function(a){return a.innerHTML="<a href='#'></a>","#"===a.firstChild.getAttribute("href")})||ka("type|href|height|width",function(a,b,c){if(!c)return a.getAttribute(b,"type"===b.toLowerCase()?1:2)}),c.attributes&&ja(function(a){return a.innerHTML="<input/>",a.firstChild.setAttribute("value",""),""===a.firstChild.getAttribute("value")})||ka("value",function(a,b,c){if(!c&&"input"===a.nodeName.toLowerCase())return a.defaultValue}),ja(function(a){return null==a.getAttribute("disabled")})||ka(J,function(a,b,c){var d;if(!c)return a[b]===!0?b.toLowerCase():(d=a.getAttributeNode(b))&&d.specified?d.value:null}),ga}(a);r.find=x,r.expr=x.selectors,r.expr[":"]=r.expr.pseudos,r.uniqueSort=r.unique=x.uniqueSort,r.text=x.getText,r.isXMLDoc=x.isXML,r.contains=x.contains,r.escapeSelector=x.escape;var y=function(a,b,c){var d=[],e=void 0!==c;while((a=a[b])&&9!==a.nodeType)if(1===a.nodeType){if(e&&r(a).is(c))break;d.push(a)}return d},z=function(a,b){for(var c=[];a;a=a.nextSibling)1===a.nodeType&&a!==b&&c.push(a);return c},A=r.expr.match.needsContext;function B(a,b){return a.nodeName&&a.nodeName.toLowerCase()===b.toLowerCase()}var C=/^<([a-z][^\/\0>:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i,D=/^.[^:#\[\.,]*$/;function E(a,b,c){return r.isFunction(b)?r.grep(a,function(a,d){return!!b.call(a,d,a)!==c}):b.nodeType?r.grep(a,function(a){return a===b!==c}):"string"!=typeof b?r.grep(a,function(a){return i.call(b,a)>-1!==c}):D.test(b)?r.filter(b,a,c):(b=r.filter(b,a),r.grep(a,function(a){return i.call(b,a)>-1!==c&&1===a.nodeType}))}r.filter=function(a,b,c){var d=b[0];return c&&(a=":not("+a+")"),1===b.length&&1===d.nodeType?r.find.matchesSelector(d,a)?[d]:[]:r.find.matches(a,r.grep(b,function(a){return 1===a.nodeType}))},r.fn.extend({find:function(a){var b,c,d=this.length,e=this;if("string"!=typeof a)return this.pushStack(r(a).filter(function(){for(b=0;b<d;b++)if(r.contains(e[b],this))return!0}));for(c=this.pushStack([]),b=0;b<d;b++)r.find(a,e[b],c);return d>1?r.uniqueSort(c):c},filter:function(a){return this.pushStack(E(this,a||[],!1))},not:function(a){return this.pushStack(E(this,a||[],!0))},is:function(a){return!!E(this,"string"==typeof a&&A.test(a)?r(a):a||[],!1).length}});var F,G=/^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]+))$/,H=r.fn.init=function(a,b,c){var e,f;if(!a)return this;if(c=c||F,"string"==typeof a){if(e="<"===a[0]&&">"===a[a.length-1]&&a.length>=3?[null,a,null]:G.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 r?b[0]:b,r.merge(this,r.parseHTML(e[1],b&&b.nodeType?b.ownerDocument||b:d,!0)),C.test(e[1])&&r.isPlainObject(b))for(e in b)r.isFunction(this[e])?this[e](b[e]):this.attr(e,b[e]);return this}return f=d.getElementById(e[2]),f&&(this[0]=f,this.length=1),this}return a.nodeType?(this[0]=a,this.length=1,this):r.isFunction(a)?void 0!==c.ready?c.ready(a):a(r):r.makeArray(a,this)};H.prototype=r.fn,F=r(d);var I=/^(?:parents|prev(?:Until|All))/,J={children:!0,contents:!0,next:!0,prev:!0};r.fn.extend({has:function(a){var b=r(a,this),c=b.length;return this.filter(function(){for(var a=0;a<c;a++)if(r.contains(this,b[a]))return!0})},closest:function(a,b){var c,d=0,e=this.length,f=[],g="string"!=typeof a&&r(a);if(!A.test(a))for(;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&&r.find.matchesSelector(c,a))){f.push(c);break}return this.pushStack(f.length>1?r.uniqueSort(f):f)},index:function(a){return a?"string"==typeof a?i.call(r(a),this[0]):i.call(this,a.jquery?a[0]:a):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(a,b){return this.pushStack(r.uniqueSort(r.merge(this.get(),r(a,b))))},addBack:function(a){return this.add(null==a?this.prevObject:this.prevObject.filter(a))}});function K(a,b){while((a=a[b])&&1!==a.nodeType);return a}r.each({parent:function(a){var b=a.parentNode;return b&&11!==b.nodeType?b:null},parents:function(a){return y(a,"parentNode")},parentsUntil:function(a,b,c){return y(a,"parentNode",c)},next:function(a){return K(a,"nextSibling")},prev:function(a){return K(a,"previousSibling")},nextAll:function(a){return y(a,"nextSibling")},prevAll:function(a){return y(a,"previousSibling")},nextUntil:function(a,b,c){return y(a,"nextSibling",c)},prevUntil:function(a,b,c){return y(a,"previousSibling",c)},siblings:function(a){return z((a.parentNode||{}).firstChild,a)},children:function(a){return z(a.firstChild)},contents:function(a){return B(a,"iframe")?a.contentDocument:(B(a,"template")&&(a=a.content||a),r.merge([],a.childNodes))}},function(a,b){r.fn[a]=function(c,d){var e=r.map(this,b,c);return"Until"!==a.slice(-5)&&(d=c),d&&"string"==typeof d&&(e=r.filter(d,e)),this.length>1&&(J[a]||r.uniqueSort(e),I.test(a)&&e.reverse()),this.pushStack(e)}});var L=/[^\x20\t\r\n\f]+/g;function M(a){var b={};return r.each(a.match(L)||[],function(a,c){b[c]=!0}),b}r.Callbacks=function(a){a="string"==typeof a?M(a):r.extend({},a);var b,c,d,e,f=[],g=[],h=-1,i=function(){for(e=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){r.each(b,function(b,c){r.isFunction(c)?a.unique&&j.has(c)||f.push(c):c&&c.length&&"string"!==r.type(c)&&d(c)})}(arguments),c&&!b&&i()),this},remove:function(){return r.each(arguments,function(a,b){var c;while((c=r.inArray(b,f,c))>-1)f.splice(c,1),c<=h&&h--}),this},has:function(a){return a?r.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=g=[],c||b||(f=c=""),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};function N(a){return a}function O(a){throw a}function P(a,b,c,d){var e;try{a&&r.isFunction(e=a.promise)?e.call(a).done(b).fail(c):a&&r.isFunction(e=a.then)?e.call(a,b,c):b.apply(void 0,[a].slice(d))}catch(a){c.apply(void 0,[a])}}r.extend({Deferred:function(b){var c=[["notify","progress",r.Callbacks("memory"),r.Callbacks("memory"),2],["resolve","done",r.Callbacks("once memory"),r.Callbacks("once memory"),0,"resolved"],["reject","fail",r.Callbacks("once memory"),r.Callbacks("once memory"),1,"rejected"]],d="pending",e={state:function(){return d},always:function(){return f.done(arguments).fail(arguments),this},"catch":function(a){return e.then(null,a)},pipe:function(){var a=arguments;return r.Deferred(function(b){r.each(c,function(c,d){var e=r.isFunction(a[d[4]])&&a[d[4]];f[d[1]](function(){var a=e&&e.apply(this,arguments);a&&r.isFunction(a.promise)?a.promise().progress(b.notify).done(b.resolve).fail(b.reject):b[d[0]+"With"](this,e?[a]:arguments)})}),a=null}).promise()},then:function(b,d,e){var f=0;function g(b,c,d,e){return function(){var h=this,i=arguments,j=function(){var a,j;if(!(b<f)){if(a=d.apply(h,i),a===c.promise())throw new TypeError("Thenable self-resolution");j=a&&("object"==typeof a||"function"==typeof a)&&a.then,r.isFunction(j)?e?j.call(a,g(f,c,N,e),g(f,c,O,e)):(f++,j.call(a,g(f,c,N,e),g(f,c,O,e),g(f,c,N,c.notifyWith))):(d!==N&&(h=void 0,i=[a]),(e||c.resolveWith)(h,i))}},k=e?j:function(){try{j()}catch(a){r.Deferred.exceptionHook&&r.Deferred.exceptionHook(a,k.stackTrace),b+1>=f&&(d!==O&&(h=void 0,i=[a]),c.rejectWith(h,i))}};b?k():(r.Deferred.getStackHook&&(k.stackTrace=r.Deferred.getStackHook()),a.setTimeout(k))}}return r.Deferred(function(a){c[0][3].add(g(0,a,r.isFunction(e)?e:N,a.notifyWith)),c[1][3].add(g(0,a,r.isFunction(b)?b:N)),c[2][3].add(g(0,a,r.isFunction(d)?d:O))}).promise()},promise:function(a){return null!=a?r.extend(a,e):e}},f={};return r.each(c,function(a,b){var g=b[2],h=b[5];e[b[1]]=g.add,h&&g.add(function(){d=h},c[3-a][2].disable,c[0][2].lock),g.add(b[3].fire),f[b[0]]=function(){return f[b[0]+"With"](this===f?void 0:this,arguments),this},f[b[0]+"With"]=g.fireWith}),e.promise(f),b&&b.call(f,f),f},when:function(a){var b=arguments.length,c=b,d=Array(c),e=f.call(arguments),g=r.Deferred(),h=function(a){return function(c){d[a]=this,e[a]=arguments.length>1?f.call(arguments):c,--b||g.resolveWith(d,e)}};if(b<=1&&(P(a,g.done(h(c)).resolve,g.reject,!b),"pending"===g.state()||r.isFunction(e[c]&&e[c].then)))return g.then();while(c--)P(e[c],h(c),g.reject);return g.promise()}});var Q=/^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/;r.Deferred.exceptionHook=function(b,c){a.console&&a.console.warn&&b&&Q.test(b.name)&&a.console.warn("jQuery.Deferred exception: "+b.message,b.stack,c)},r.readyException=function(b){a.setTimeout(function(){throw b})};var R=r.Deferred();r.fn.ready=function(a){return R.then(a)["catch"](function(a){r.readyException(a)}),this},r.extend({isReady:!1,readyWait:1,ready:function(a){(a===!0?--r.readyWait:r.isReady)||(r.isReady=!0,a!==!0&&--r.readyWait>0||R.resolveWith(d,[r]))}}),r.ready.then=R.then;function S(){d.removeEventListener("DOMContentLoaded",S),
+a.removeEventListener("load",S),r.ready()}"complete"===d.readyState||"loading"!==d.readyState&&!d.documentElement.doScroll?a.setTimeout(r.ready):(d.addEventListener("DOMContentLoaded",S),a.addEventListener("load",S));var T=function(a,b,c,d,e,f,g){var h=0,i=a.length,j=null==c;if("object"===r.type(c)){e=!0;for(h in c)T(a,b,h,c[h],!0,f,g)}else if(void 0!==d&&(e=!0,r.isFunction(d)||(g=!0),j&&(g?(b.call(a,d),b=null):(j=b,b=function(a,b,c){return j.call(r(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},U=function(a){return 1===a.nodeType||9===a.nodeType||!+a.nodeType};function V(){this.expando=r.expando+V.uid++}V.uid=1,V.prototype={cache:function(a){var b=a[this.expando];return b||(b={},U(a)&&(a.nodeType?a[this.expando]=b:Object.defineProperty(a,this.expando,{value:b,configurable:!0}))),b},set:function(a,b,c){var d,e=this.cache(a);if("string"==typeof b)e[r.camelCase(b)]=c;else for(d in b)e[r.camelCase(d)]=b[d];return e},get:function(a,b){return void 0===b?this.cache(a):a[this.expando]&&a[this.expando][r.camelCase(b)]},access:function(a,b,c){return void 0===b||b&&"string"==typeof b&&void 0===c?this.get(a,b):(this.set(a,b,c),void 0!==c?c:b)},remove:function(a,b){var c,d=a[this.expando];if(void 0!==d){if(void 0!==b){Array.isArray(b)?b=b.map(r.camelCase):(b=r.camelCase(b),b=b in d?[b]:b.match(L)||[]),c=b.length;while(c--)delete d[b[c]]}(void 0===b||r.isEmptyObject(d))&&(a.nodeType?a[this.expando]=void 0:delete a[this.expando])}},hasData:function(a){var b=a[this.expando];return void 0!==b&&!r.isEmptyObject(b)}};var W=new V,X=new V,Y=/^(?:\{[\w\W]*\}|\[[\w\W]*\])$/,Z=/[A-Z]/g;function $(a){return"true"===a||"false"!==a&&("null"===a?null:a===+a+""?+a:Y.test(a)?JSON.parse(a):a)}function _(a,b,c){var d;if(void 0===c&&1===a.nodeType)if(d="data-"+b.replace(Z,"-$&").toLowerCase(),c=a.getAttribute(d),"string"==typeof c){try{c=$(c)}catch(e){}X.set(a,b,c)}else c=void 0;return c}r.extend({hasData:function(a){return X.hasData(a)||W.hasData(a)},data:function(a,b,c){return X.access(a,b,c)},removeData:function(a,b){X.remove(a,b)},_data:function(a,b,c){return W.access(a,b,c)},_removeData:function(a,b){W.remove(a,b)}}),r.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=X.get(f),1===f.nodeType&&!W.get(f,"hasDataAttrs"))){c=g.length;while(c--)g[c]&&(d=g[c].name,0===d.indexOf("data-")&&(d=r.camelCase(d.slice(5)),_(f,d,e[d])));W.set(f,"hasDataAttrs",!0)}return e}return"object"==typeof a?this.each(function(){X.set(this,a)}):T(this,function(b){var c;if(f&&void 0===b){if(c=X.get(f,a),void 0!==c)return c;if(c=_(f,a),void 0!==c)return c}else this.each(function(){X.set(this,a,b)})},null,b,arguments.length>1,null,!0)},removeData:function(a){return this.each(function(){X.remove(this,a)})}}),r.extend({queue:function(a,b,c){var d;if(a)return b=(b||"fx")+"queue",d=W.get(a,b),c&&(!d||Array.isArray(c)?d=W.access(a,b,r.makeArray(c)):d.push(c)),d||[]},dequeue:function(a,b){b=b||"fx";var c=r.queue(a,b),d=c.length,e=c.shift(),f=r._queueHooks(a,b),g=function(){r.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 W.get(a,c)||W.access(a,c,{empty:r.Callbacks("once memory").add(function(){W.remove(a,[b+"queue",c])})})}}),r.fn.extend({queue:function(a,b){var c=2;return"string"!=typeof a&&(b=a,a="fx",c--),arguments.length<c?r.queue(this[0],a):void 0===b?this:this.each(function(){var c=r.queue(this,a,b);r._queueHooks(this,a),"fx"===a&&"inprogress"!==c[0]&&r.dequeue(this,a)})},dequeue:function(a){return this.each(function(){r.dequeue(this,a)})},clearQueue:function(a){return this.queue(a||"fx",[])},promise:function(a,b){var c,d=1,e=r.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=W.get(f[g],a+"queueHooks"),c&&c.empty&&(d++,c.empty.add(h));return h(),e.promise(b)}});var aa=/[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/.source,ba=new RegExp("^(?:([+-])=|)("+aa+")([a-z%]*)$","i"),ca=["Top","Right","Bottom","Left"],da=function(a,b){return a=b||a,"none"===a.style.display||""===a.style.display&&r.contains(a.ownerDocument,a)&&"none"===r.css(a,"display")},ea=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};function fa(a,b,c,d){var e,f=1,g=20,h=d?function(){return d.cur()}:function(){return r.css(a,b,"")},i=h(),j=c&&c[3]||(r.cssNumber[b]?"":"px"),k=(r.cssNumber[b]||"px"!==j&&+i)&&ba.exec(r.css(a,b));if(k&&k[3]!==j){j=j||k[3],c=c||[],k=+i||1;do f=f||".5",k/=f,r.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 ga={};function ha(a){var b,c=a.ownerDocument,d=a.nodeName,e=ga[d];return e?e:(b=c.body.appendChild(c.createElement(d)),e=r.css(b,"display"),b.parentNode.removeChild(b),"none"===e&&(e="block"),ga[d]=e,e)}function ia(a,b){for(var c,d,e=[],f=0,g=a.length;f<g;f++)d=a[f],d.style&&(c=d.style.display,b?("none"===c&&(e[f]=W.get(d,"display")||null,e[f]||(d.style.display="")),""===d.style.display&&da(d)&&(e[f]=ha(d))):"none"!==c&&(e[f]="none",W.set(d,"display",c)));for(f=0;f<g;f++)null!=e[f]&&(a[f].style.display=e[f]);return a}r.fn.extend({show:function(){return ia(this,!0)},hide:function(){return ia(this)},toggle:function(a){return"boolean"==typeof a?a?this.show():this.hide():this.each(function(){da(this)?r(this).show():r(this).hide()})}});var ja=/^(?:checkbox|radio)$/i,ka=/<([a-z][^\/\0>\x20\t\r\n\f]+)/i,la=/^$|\/(?:java|ecma)script/i,ma={option:[1,"<select multiple='multiple'>","</select>"],thead:[1,"<table>","</table>"],col:[2,"<table><colgroup>","</colgroup></table>"],tr:[2,"<table><tbody>","</tbody></table>"],td:[3,"<table><tbody><tr>","</tr></tbody></table>"],_default:[0,"",""]};ma.optgroup=ma.option,ma.tbody=ma.tfoot=ma.colgroup=ma.caption=ma.thead,ma.th=ma.td;function na(a,b){var c;return c="undefined"!=typeof a.getElementsByTagName?a.getElementsByTagName(b||"*"):"undefined"!=typeof a.querySelectorAll?a.querySelectorAll(b||"*"):[],void 0===b||b&&B(a,b)?r.merge([a],c):c}function oa(a,b){for(var c=0,d=a.length;c<d;c++)W.set(a[c],"globalEval",!b||W.get(b[c],"globalEval"))}var pa=/<|&#?\w+;/;function qa(a,b,c,d,e){for(var f,g,h,i,j,k,l=b.createDocumentFragment(),m=[],n=0,o=a.length;n<o;n++)if(f=a[n],f||0===f)if("object"===r.type(f))r.merge(m,f.nodeType?[f]:f);else if(pa.test(f)){g=g||l.appendChild(b.createElement("div")),h=(ka.exec(f)||["",""])[1].toLowerCase(),i=ma[h]||ma._default,g.innerHTML=i[1]+r.htmlPrefilter(f)+i[2],k=i[0];while(k--)g=g.lastChild;r.merge(m,g.childNodes),g=l.firstChild,g.textContent=""}else m.push(b.createTextNode(f));l.textContent="",n=0;while(f=m[n++])if(d&&r.inArray(f,d)>-1)e&&e.push(f);else if(j=r.contains(f.ownerDocument,f),g=na(l.appendChild(f),"script"),j&&oa(g),c){k=0;while(f=g[k++])la.test(f.type||"")&&c.push(f)}return l}!function(){var a=d.createDocumentFragment(),b=a.appendChild(d.createElement("div")),c=d.createElement("input");c.setAttribute("type","radio"),c.setAttribute("checked","checked"),c.setAttribute("name","t"),b.appendChild(c),o.checkClone=b.cloneNode(!0).cloneNode(!0).lastChild.checked,b.innerHTML="<textarea>x</textarea>",o.noCloneChecked=!!b.cloneNode(!0).lastChild.defaultValue}();var ra=d.documentElement,sa=/^key/,ta=/^(?:mouse|pointer|contextmenu|drag|drop)|click/,ua=/^([^.]*)(?:\.(.+)|)/;function va(){return!0}function wa(){return!1}function xa(){try{return d.activeElement}catch(a){}}function ya(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)ya(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=wa;else if(!e)return a;return 1===f&&(g=e,e=function(a){return r().off(a),g.apply(this,arguments)},e.guid=g.guid||(g.guid=r.guid++)),a.each(function(){r.event.add(this,b,e,d,c)})}r.event={global:{},add:function(a,b,c,d,e){var f,g,h,i,j,k,l,m,n,o,p,q=W.get(a);if(q){c.handler&&(f=c,c=f.handler,e=f.selector),e&&r.find.matchesSelector(ra,e),c.guid||(c.guid=r.guid++),(i=q.events)||(i=q.events={}),(g=q.handle)||(g=q.handle=function(b){return"undefined"!=typeof r&&r.event.triggered!==b.type?r.event.dispatch.apply(a,arguments):void 0}),b=(b||"").match(L)||[""],j=b.length;while(j--)h=ua.exec(b[j])||[],n=p=h[1],o=(h[2]||"").split(".").sort(),n&&(l=r.event.special[n]||{},n=(e?l.delegateType:l.bindType)||n,l=r.event.special[n]||{},k=r.extend({type:n,origType:p,data:d,handler:c,guid:c.guid,selector:e,needsContext:e&&r.expr.match.needsContext.test(e),namespace:o.join(".")},f),(m=i[n])||(m=i[n]=[],m.delegateCount=0,l.setup&&l.setup.call(a,d,o,g)!==!1||a.addEventListener&&a.addEventListener(n,g)),l.add&&(l.add.call(a,k),k.handler.guid||(k.handler.guid=c.guid)),e?m.splice(m.delegateCount++,0,k):m.push(k),r.event.global[n]=!0)}},remove:function(a,b,c,d,e){var f,g,h,i,j,k,l,m,n,o,p,q=W.hasData(a)&&W.get(a);if(q&&(i=q.events)){b=(b||"").match(L)||[""],j=b.length;while(j--)if(h=ua.exec(b[j])||[],n=p=h[1],o=(h[2]||"").split(".").sort(),n){l=r.event.special[n]||{},n=(d?l.delegateType:l.bindType)||n,m=i[n]||[],h=h[2]&&new RegExp("(^|\\.)"+o.join("\\.(?:.*\\.|)")+"(\\.|$)"),g=f=m.length;while(f--)k=m[f],!e&&p!==k.origType||c&&c.guid!==k.guid||h&&!h.test(k.namespace)||d&&d!==k.selector&&("**"!==d||!k.selector)||(m.splice(f,1),k.selector&&m.delegateCount--,l.remove&&l.remove.call(a,k));g&&!m.length&&(l.teardown&&l.teardown.call(a,o,q.handle)!==!1||r.removeEvent(a,n,q.handle),delete i[n])}else for(n in i)r.event.remove(a,n+b[j],c,d,!0);r.isEmptyObject(i)&&W.remove(a,"handle events")}},dispatch:function(a){var b=r.event.fix(a),c,d,e,f,g,h,i=new Array(arguments.length),j=(W.get(this,"events")||{})[b.type]||[],k=r.event.special[b.type]||{};for(i[0]=b,c=1;c<arguments.length;c++)i[c]=arguments[c];if(b.delegateTarget=this,!k.preDispatch||k.preDispatch.call(this,b)!==!1){h=r.event.handlers.call(this,b,j),c=0;while((f=h[c++])&&!b.isPropagationStopped()){b.currentTarget=f.elem,d=0;while((g=f.handlers[d++])&&!b.isImmediatePropagationStopped())b.rnamespace&&!b.rnamespace.test(g.namespace)||(b.handleObj=g,b.data=g.data,e=((r.event.special[g.origType]||{}).handle||g.handler).apply(f.elem,i),void 0!==e&&(b.result=e)===!1&&(b.preventDefault(),b.stopPropagation()))}return k.postDispatch&&k.postDispatch.call(this,b),b.result}},handlers:function(a,b){var c,d,e,f,g,h=[],i=b.delegateCount,j=a.target;if(i&&j.nodeType&&!("click"===a.type&&a.button>=1))for(;j!==this;j=j.parentNode||this)if(1===j.nodeType&&("click"!==a.type||j.disabled!==!0)){for(f=[],g={},c=0;c<i;c++)d=b[c],e=d.selector+" ",void 0===g[e]&&(g[e]=d.needsContext?r(e,this).index(j)>-1:r.find(e,this,null,[j]).length),g[e]&&f.push(d);f.length&&h.push({elem:j,handlers:f})}return j=this,i<b.length&&h.push({elem:j,handlers:b.slice(i)}),h},addProp:function(a,b){Object.defineProperty(r.Event.prototype,a,{enumerable:!0,configurable:!0,get:r.isFunction(b)?function(){if(this.originalEvent)return b(this.originalEvent)}:function(){if(this.originalEvent)return this.originalEvent[a]},set:function(b){Object.defineProperty(this,a,{enumerable:!0,configurable:!0,writable:!0,value:b})}})},fix:function(a){return a[r.expando]?a:new r.Event(a)},special:{load:{noBubble:!0},focus:{trigger:function(){if(this!==xa()&&this.focus)return this.focus(),!1},delegateType:"focusin"},blur:{trigger:function(){if(this===xa()&&this.blur)return this.blur(),!1},delegateType:"focusout"},click:{trigger:function(){if(ja.test(this.type)&&this.click&&B(this,"input"))return this.click(),!1},_default:function(a){return B(a.target,"a")}},beforeunload:{postDispatch:function(a){void 0!==a.result&&a.originalEvent&&(a.originalEvent.returnValue=a.result)}}}},r.removeEvent=function(a,b,c){a.removeEventListener&&a.removeEventListener(b,c)},r.Event=function(a,b){return this instanceof r.Event?(a&&a.type?(this.originalEvent=a,this.type=a.type,this.isDefaultPrevented=a.defaultPrevented||void 0===a.defaultPrevented&&a.returnValue===!1?va:wa,this.target=a.target&&3===a.target.nodeType?a.target.parentNode:a.target,this.currentTarget=a.currentTarget,this.relatedTarget=a.relatedTarget):this.type=a,b&&r.extend(this,b),this.timeStamp=a&&a.timeStamp||r.now(),void(this[r.expando]=!0)):new r.Event(a,b)},r.Event.prototype={constructor:r.Event,isDefaultPrevented:wa,isPropagationStopped:wa,isImmediatePropagationStopped:wa,isSimulated:!1,preventDefault:function(){var a=this.originalEvent;this.isDefaultPrevented=va,a&&!this.isSimulated&&a.preventDefault()},stopPropagation:function(){var a=this.originalEvent;this.isPropagationStopped=va,a&&!this.isSimulated&&a.stopPropagation()},stopImmediatePropagation:function(){var a=this.originalEvent;this.isImmediatePropagationStopped=va,a&&!this.isSimulated&&a.stopImmediatePropagation(),this.stopPropagation()}},r.each({altKey:!0,bubbles:!0,cancelable:!0,changedTouches:!0,ctrlKey:!0,detail:!0,eventPhase:!0,metaKey:!0,pageX:!0,pageY:!0,shiftKey:!0,view:!0,"char":!0,charCode:!0,key:!0,keyCode:!0,button:!0,buttons:!0,clientX:!0,clientY:!0,offsetX:!0,offsetY:!0,pointerId:!0,pointerType:!0,screenX:!0,screenY:!0,targetTouches:!0,toElement:!0,touches:!0,which:function(a){var b=a.button;return null==a.which&&sa.test(a.type)?null!=a.charCode?a.charCode:a.keyCode:!a.which&&void 0!==b&&ta.test(a.type)?1&b?1:2&b?3:4&b?2:0:a.which}},r.event.addProp),r.each({mouseenter:"mouseover",mouseleave:"mouseout",pointerenter:"pointerover",pointerleave:"pointerout"},function(a,b){r.event.special[a]={delegateType:b,bindType:b,handle:function(a){var c,d=this,e=a.relatedTarget,f=a.handleObj;return e&&(e===d||r.contains(d,e))||(a.type=f.origType,c=f.handler.apply(this,arguments),a.type=b),c}}}),r.fn.extend({on:function(a,b,c,d){return ya(this,a,b,c,d)},one:function(a,b,c,d){return ya(this,a,b,c,d,1)},off:function(a,b,c){var d,e;if(a&&a.preventDefault&&a.handleObj)return d=a.handleObj,r(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=wa),this.each(function(){r.event.remove(this,a,c,b)})}});var za=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([a-z][^\/\0>\x20\t\r\n\f]*)[^>]*)\/>/gi,Aa=/<script|<style|<link/i,Ba=/checked\s*(?:[^=]|=\s*.checked.)/i,Ca=/^true\/(.*)/,Da=/^\s*<!(?:\[CDATA\[|--)|(?:\]\]|--)>\s*$/g;function Ea(a,b){return B(a,"table")&&B(11!==b.nodeType?b:b.firstChild,"tr")?r(">tbody",a)[0]||a:a}function Fa(a){return a.type=(null!==a.getAttribute("type"))+"/"+a.type,a}function Ga(a){var b=Ca.exec(a.type);return b?a.type=b[1]:a.removeAttribute("type"),a}function Ha(a,b){var c,d,e,f,g,h,i,j;if(1===b.nodeType){if(W.hasData(a)&&(f=W.access(a),g=W.set(b,f),j=f.events)){delete g.handle,g.events={};for(e in j)for(c=0,d=j[e].length;c<d;c++)r.event.add(b,e,j[e][c])}X.hasData(a)&&(h=X.access(a),i=r.extend({},h),X.set(b,i))}}function Ia(a,b){var c=b.nodeName.toLowerCase();"input"===c&&ja.test(a.type)?b.checked=a.checked:"input"!==c&&"textarea"!==c||(b.defaultValue=a.defaultValue)}function Ja(a,b,c,d){b=g.apply([],b);var e,f,h,i,j,k,l=0,m=a.length,n=m-1,q=b[0],s=r.isFunction(q);if(s||m>1&&"string"==typeof q&&!o.checkClone&&Ba.test(q))return a.each(function(e){var f=a.eq(e);s&&(b[0]=q.call(this,e,f.html())),Ja(f,b,c,d)});if(m&&(e=qa(b,a[0].ownerDocument,!1,a,d),f=e.firstChild,1===e.childNodes.length&&(e=f),f||d)){for(h=r.map(na(e,"script"),Fa),i=h.length;l<m;l++)j=e,l!==n&&(j=r.clone(j,!0,!0),i&&r.merge(h,na(j,"script"))),c.call(a[l],j,l);if(i)for(k=h[h.length-1].ownerDocument,r.map(h,Ga),l=0;l<i;l++)j=h[l],la.test(j.type||"")&&!W.access(j,"globalEval")&&r.contains(k,j)&&(j.src?r._evalUrl&&r._evalUrl(j.src):p(j.textContent.replace(Da,""),k))}return a}function Ka(a,b,c){for(var d,e=b?r.filter(b,a):a,f=0;null!=(d=e[f]);f++)c||1!==d.nodeType||r.cleanData(na(d)),d.parentNode&&(c&&r.contains(d.ownerDocument,d)&&oa(na(d,"script")),d.parentNode.removeChild(d));return a}r.extend({htmlPrefilter:function(a){return a.replace(za,"<$1></$2>")},clone:function(a,b,c){var d,e,f,g,h=a.cloneNode(!0),i=r.contains(a.ownerDocument,a);if(!(o.noCloneChecked||1!==a.nodeType&&11!==a.nodeType||r.isXMLDoc(a)))for(g=na(h),f=na(a),d=0,e=f.length;d<e;d++)Ia(f[d],g[d]);if(b)if(c)for(f=f||na(a),g=g||na(h),d=0,e=f.length;d<e;d++)Ha(f[d],g[d]);else Ha(a,h);return g=na(h,"script"),g.length>0&&oa(g,!i&&na(a,"script")),h},cleanData:function(a){for(var b,c,d,e=r.event.special,f=0;void 0!==(c=a[f]);f++)if(U(c)){if(b=c[W.expando]){if(b.events)for(d in b.events)e[d]?r.event.remove(c,d):r.removeEvent(c,d,b.handle);c[W.expando]=void 0}c[X.expando]&&(c[X.expando]=void 0)}}}),r.fn.extend({detach:function(a){return Ka(this,a,!0)},remove:function(a){return Ka(this,a)},text:function(a){return T(this,function(a){return void 0===a?r.text(this):this.empty().each(function(){1!==this.nodeType&&11!==this.nodeType&&9!==this.nodeType||(this.textContent=a)})},null,a,arguments.length)},append:function(){return Ja(this,arguments,function(a){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var b=Ea(this,a);b.appendChild(a)}})},prepend:function(){return Ja(this,arguments,function(a){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var b=Ea(this,a);b.insertBefore(a,b.firstChild)}})},before:function(){return Ja(this,arguments,function(a){this.parentNode&&this.parentNode.insertBefore(a,this)})},after:function(){return Ja(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&&(r.cleanData(na(a,!1)),a.textContent="");return this},clone:function(a,b){return a=null!=a&&a,b=null==b?a:b,this.map(function(){return r.clone(this,a,b)})},html:function(a){return T(this,function(a){var b=this[0]||{},c=0,d=this.length;if(void 0===a&&1===b.nodeType)return b.innerHTML;if("string"==typeof a&&!Aa.test(a)&&!ma[(ka.exec(a)||["",""])[1].toLowerCase()]){a=r.htmlPrefilter(a);try{for(;c<d;c++)b=this[c]||{},1===b.nodeType&&(r.cleanData(na(b,!1)),b.innerHTML=a);b=0}catch(e){}}b&&this.empty().append(a)},null,a,arguments.length)},replaceWith:function(){var a=[];return Ja(this,arguments,function(b){var c=this.parentNode;r.inArray(this,a)<0&&(r.cleanData(na(this)),c&&c.replaceChild(b,this))},a)}}),r.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(a,b){r.fn[a]=function(a){for(var c,d=[],e=r(a),f=e.length-1,g=0;g<=f;g++)c=g===f?this:this.clone(!0),r(e[g])[b](c),h.apply(d,c.get());return this.pushStack(d)}});var La=/^margin/,Ma=new RegExp("^("+aa+")(?!px)[a-z%]+$","i"),Na=function(b){var c=b.ownerDocument.defaultView;return c&&c.opener||(c=a),c.getComputedStyle(b)};!function(){function b(){if(i){i.style.cssText="box-sizing:border-box;position:relative;display:block;margin:auto;border:1px;padding:1px;top:1%;width:50%",i.innerHTML="",ra.appendChild(h);var b=a.getComputedStyle(i);c="1%"!==b.top,g="2px"===b.marginLeft,e="4px"===b.width,i.style.marginRight="50%",f="4px"===b.marginRight,ra.removeChild(h),i=null}}var c,e,f,g,h=d.createElement("div"),i=d.createElement("div");i.style&&(i.style.backgroundClip="content-box",i.cloneNode(!0).style.backgroundClip="",o.clearCloneStyle="content-box"===i.style.backgroundClip,h.style.cssText="border:0;width:8px;height:0;top:0;left:-9999px;padding:0;margin-top:1px;position:absolute",h.appendChild(i),r.extend(o,{pixelPosition:function(){return b(),c},boxSizingReliable:function(){return b(),e},pixelMarginRight:function(){return b(),f},reliableMarginLeft:function(){return b(),g}}))}();function Oa(a,b,c){var d,e,f,g,h=a.style;return c=c||Na(a),c&&(g=c.getPropertyValue(b)||c[b],""!==g||r.contains(a.ownerDocument,a)||(g=r.style(a,b)),!o.pixelMarginRight()&&Ma.test(g)&&La.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}function Pa(a,b){return{get:function(){return a()?void delete this.get:(this.get=b).apply(this,arguments)}}}var Qa=/^(none|table(?!-c[ea]).+)/,Ra=/^--/,Sa={position:"absolute",visibility:"hidden",display:"block"},Ta={letterSpacing:"0",fontWeight:"400"},Ua=["Webkit","Moz","ms"],Va=d.createElement("div").style;function Wa(a){if(a in Va)return a;var b=a[0].toUpperCase()+a.slice(1),c=Ua.length;while(c--)if(a=Ua[c]+b,a in Va)return a}function Xa(a){var b=r.cssProps[a];return b||(b=r.cssProps[a]=Wa(a)||a),b}function Ya(a,b,c){var d=ba.exec(b);return d?Math.max(0,d[2]-(c||0))+(d[3]||"px"):b}function Za(a,b,c,d,e){var f,g=0;for(f=c===(d?"border":"content")?4:"width"===b?1:0;f<4;f+=2)"margin"===c&&(g+=r.css(a,c+ca[f],!0,e)),d?("content"===c&&(g-=r.css(a,"padding"+ca[f],!0,e)),"margin"!==c&&(g-=r.css(a,"border"+ca[f]+"Width",!0,e))):(g+=r.css(a,"padding"+ca[f],!0,e),"padding"!==c&&(g+=r.css(a,"border"+ca[f]+"Width",!0,e)));return g}function $a(a,b,c){var d,e=Na(a),f=Oa(a,b,e),g="border-box"===r.css(a,"boxSizing",!1,e);return Ma.test(f)?f:(d=g&&(o.boxSizingReliable()||f===a.style[b]),f=parseFloat(f)||0,f+Za(a,b,c||(g?"border":"content"),d,e)+"px")}r.extend({cssHooks:{opacity:{get:function(a,b){if(b){var c=Oa(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":"cssFloat"},style:function(a,b,c,d){if(a&&3!==a.nodeType&&8!==a.nodeType&&a.style){var e,f,g,h=r.camelCase(b),i=Ra.test(b),j=a.style;return i||(b=Xa(h)),g=r.cssHooks[b]||r.cssHooks[h],void 0===c?g&&"get"in g&&void 0!==(e=g.get(a,!1,d))?e:j[b]:(f=typeof c,"string"===f&&(e=ba.exec(c))&&e[1]&&(c=fa(a,b,e),f="number"),null!=c&&c===c&&("number"===f&&(c+=e&&e[3]||(r.cssNumber[h]?"":"px")),o.clearCloneStyle||""!==c||0!==b.indexOf("background")||(j[b]="inherit"),g&&"set"in g&&void 0===(c=g.set(a,c,d))||(i?j.setProperty(b,c):j[b]=c)),void 0)}},css:function(a,b,c,d){var e,f,g,h=r.camelCase(b),i=Ra.test(b);return i||(b=Xa(h)),g=r.cssHooks[b]||r.cssHooks[h],g&&"get"in g&&(e=g.get(a,!0,c)),void 0===e&&(e=Oa(a,b,d)),"normal"===e&&b in Ta&&(e=Ta[b]),""===c||c?(f=parseFloat(e),c===!0||isFinite(f)?f||0:e):e}}),r.each(["height","width"],function(a,b){r.cssHooks[b]={get:function(a,c,d){if(c)return!Qa.test(r.css(a,"display"))||a.getClientRects().length&&a.getBoundingClientRect().width?$a(a,b,d):ea(a,Sa,function(){return $a(a,b,d)})},set:function(a,c,d){var e,f=d&&Na(a),g=d&&Za(a,b,d,"border-box"===r.css(a,"boxSizing",!1,f),f);return g&&(e=ba.exec(c))&&"px"!==(e[3]||"px")&&(a.style[b]=c,c=r.css(a,b)),Ya(a,c,g)}}}),r.cssHooks.marginLeft=Pa(o.reliableMarginLeft,function(a,b){if(b)return(parseFloat(Oa(a,"marginLeft"))||a.getBoundingClientRect().left-ea(a,{marginLeft:0},function(){return a.getBoundingClientRect().left}))+"px"}),r.each({margin:"",padding:"",border:"Width"},function(a,b){r.cssHooks[a+b]={expand:function(c){for(var d=0,e={},f="string"==typeof c?c.split(" "):[c];d<4;d++)e[a+ca[d]+b]=f[d]||f[d-2]||f[0];return e}},La.test(a)||(r.cssHooks[a+b].set=Ya)}),r.fn.extend({css:function(a,b){return T(this,function(a,b,c){var d,e,f={},g=0;if(Array.isArray(b)){for(d=Na(a),e=b.length;g<e;g++)f[b[g]]=r.css(a,b[g],!1,d);return f}return void 0!==c?r.style(a,b,c):r.css(a,b)},a,b,arguments.length>1)}});function _a(a,b,c,d,e){return new _a.prototype.init(a,b,c,d,e)}r.Tween=_a,_a.prototype={constructor:_a,init:function(a,b,c,d,e,f){this.elem=a,this.prop=c,this.easing=e||r.easing._default,this.options=b,this.start=this.now=this.cur(),this.end=d,this.unit=f||(r.cssNumber[c]?"":"px")},cur:function(){var a=_a.propHooks[this.prop];return a&&a.get?a.get(this):_a.propHooks._default.get(this)},run:function(a){var b,c=_a.propHooks[this.prop];return this.options.duration?this.pos=b=r.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):_a.propHooks._default.set(this),this}},_a.prototype.init.prototype=_a.prototype,_a.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=r.css(a.elem,a.prop,""),b&&"auto"!==b?b:0)},set:function(a){r.fx.step[a.prop]?r.fx.step[a.prop](a):1!==a.elem.nodeType||null==a.elem.style[r.cssProps[a.prop]]&&!r.cssHooks[a.prop]?a.elem[a.prop]=a.now:r.style(a.elem,a.prop,a.now+a.unit)}}},_a.propHooks.scrollTop=_a.propHooks.scrollLeft={set:function(a){a.elem.nodeType&&a.elem.parentNode&&(a.elem[a.prop]=a.now)}},r.easing={linear:function(a){return a},swing:function(a){return.5-Math.cos(a*Math.PI)/2},_default:"swing"},r.fx=_a.prototype.init,r.fx.step={};var ab,bb,cb=/^(?:toggle|show|hide)$/,db=/queueHooks$/;function eb(){bb&&(d.hidden===!1&&a.requestAnimationFrame?a.requestAnimationFrame(eb):a.setTimeout(eb,r.fx.interval),r.fx.tick())}function fb(){return a.setTimeout(function(){ab=void 0}),ab=r.now()}function gb(a,b){var c,d=0,e={height:a};for(b=b?1:0;d<4;d+=2-b)c=ca[d],e["margin"+c]=e["padding"+c]=a;return b&&(e.opacity=e.width=a),e}function hb(a,b,c){for(var d,e=(kb.tweeners[b]||[]).concat(kb.tweeners["*"]),f=0,g=e.length;f<g;f++)if(d=e[f].call(c,b,a))return d}function ib(a,b,c){var d,e,f,g,h,i,j,k,l="width"in b||"height"in b,m=this,n={},o=a.style,p=a.nodeType&&da(a),q=W.get(a,"fxshow");c.queue||(g=r._queueHooks(a,"fx"),null==g.unqueued&&(g.unqueued=0,h=g.empty.fire,g.empty.fire=function(){g.unqueued||h()}),g.unqueued++,m.always(function(){m.always(function(){g.unqueued--,r.queue(a,"fx").length||g.empty.fire()})}));for(d in b)if(e=b[d],cb.test(e)){if(delete b[d],f=f||"toggle"===e,e===(p?"hide":"show")){if("show"!==e||!q||void 0===q[d])continue;p=!0}n[d]=q&&q[d]||r.style(a,d)}if(i=!r.isEmptyObject(b),i||!r.isEmptyObject(n)){l&&1===a.nodeType&&(c.overflow=[o.overflow,o.overflowX,o.overflowY],j=q&&q.display,null==j&&(j=W.get(a,"display")),k=r.css(a,"display"),"none"===k&&(j?k=j:(ia([a],!0),j=a.style.display||j,k=r.css(a,"display"),ia([a]))),("inline"===k||"inline-block"===k&&null!=j)&&"none"===r.css(a,"float")&&(i||(m.done(function(){o.display=j}),null==j&&(k=o.display,j="none"===k?"":k)),o.display="inline-block")),c.overflow&&(o.overflow="hidden",m.always(function(){o.overflow=c.overflow[0],o.overflowX=c.overflow[1],o.overflowY=c.overflow[2]})),i=!1;for(d in n)i||(q?"hidden"in q&&(p=q.hidden):q=W.access(a,"fxshow",{display:j}),f&&(q.hidden=!p),p&&ia([a],!0),m.done(function(){p||ia([a]),W.remove(a,"fxshow");for(d in n)r.style(a,d,n[d])})),i=hb(p?q[d]:0,d,m),d in q||(q[d]=i.start,p&&(i.end=i.start,i.start=0))}}function jb(a,b){var c,d,e,f,g;for(c in a)if(d=r.camelCase(c),e=b[d],f=a[c],Array.isArray(f)&&(e=f[1],f=a[c]=f[0]),c!==d&&(a[d]=f,delete a[c]),g=r.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 kb(a,b,c){var d,e,f=0,g=kb.prefilters.length,h=r.Deferred().always(function(){delete i.elem}),i=function(){if(e)return!1;for(var b=ab||fb(),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:(i||h.notifyWith(a,[j,1,0]),h.resolveWith(a,[j]),!1)},j=h.promise({elem:a,props:r.extend({},b),opts:r.extend(!0,{specialEasing:{},easing:r.easing._default},c),originalProperties:b,originalOptions:c,startTime:ab||fb(),duration:c.duration,tweens:[],createTween:function(b,c){var d=r.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(jb(k,j.opts.specialEasing);f<g;f++)if(d=kb.prefilters[f].call(j,a,k,j.opts))return r.isFunction(d.stop)&&(r._queueHooks(j.elem,j.opts.queue).stop=r.proxy(d.stop,d)),d;return r.map(k,hb,j),r.isFunction(j.opts.start)&&j.opts.start.call(a,j),j.progress(j.opts.progress).done(j.opts.done,j.opts.complete).fail(j.opts.fail).always(j.opts.always),r.fx.timer(r.extend(i,{elem:a,anim:j,queue:j.opts.queue})),j}r.Animation=r.extend(kb,{tweeners:{"*":[function(a,b){var c=this.createTween(a,b);return fa(c.elem,a,ba.exec(b),c),c}]},tweener:function(a,b){r.isFunction(a)?(b=a,a=["*"]):a=a.match(L);for(var c,d=0,e=a.length;d<e;d++)c=a[d],kb.tweeners[c]=kb.tweeners[c]||[],kb.tweeners[c].unshift(b)},prefilters:[ib],prefilter:function(a,b){b?kb.prefilters.unshift(a):kb.prefilters.push(a)}}),r.speed=function(a,b,c){var d=a&&"object"==typeof a?r.extend({},a):{complete:c||!c&&b||r.isFunction(a)&&a,duration:a,easing:c&&b||b&&!r.isFunction(b)&&b};return r.fx.off?d.duration=0:"number"!=typeof d.duration&&(d.duration in r.fx.speeds?d.duration=r.fx.speeds[d.duration]:d.duration=r.fx.speeds._default),null!=d.queue&&d.queue!==!0||(d.queue="fx"),d.old=d.complete,d.complete=function(){r.isFunction(d.old)&&d.old.call(this),d.queue&&r.dequeue(this,d.queue)},d},r.fn.extend({fadeTo:function(a,b,c,d){return this.filter(da).css("opacity",0).show().end().animate({opacity:b},a,c,d)},animate:function(a,b,c,d){var e=r.isEmptyObject(a),f=r.speed(b,c,d),g=function(){var b=kb(this,r.extend({},a),f);(e||W.get(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=r.timers,g=W.get(this);if(e)g[e]&&g[e].stop&&d(g[e]);else for(e in g)g[e]&&g[e].stop&&db.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||r.dequeue(this,a)})},finish:function(a){return a!==!1&&(a=a||"fx"),this.each(function(){var b,c=W.get(this),d=c[a+"queue"],e=c[a+"queueHooks"],f=r.timers,g=d?d.length:0;for(c.finish=!0,r.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})}}),r.each(["toggle","show","hide"],function(a,b){var c=r.fn[b];r.fn[b]=function(a,d,e){return null==a||"boolean"==typeof a?c.apply(this,arguments):this.animate(gb(b,!0),a,d,e)}}),r.each({slideDown:gb("show"),slideUp:gb("hide"),slideToggle:gb("toggle"),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"},fadeToggle:{opacity:"toggle"}},function(a,b){r.fn[a]=function(a,c,d){return this.animate(b,a,c,d)}}),r.timers=[],r.fx.tick=function(){var a,b=0,c=r.timers;for(ab=r.now();b<c.length;b++)a=c[b],a()||c[b]!==a||c.splice(b--,1);c.length||r.fx.stop(),ab=void 0},r.fx.timer=function(a){r.timers.push(a),r.fx.start()},r.fx.interval=13,r.fx.start=function(){bb||(bb=!0,eb())},r.fx.stop=function(){bb=null},r.fx.speeds={slow:600,fast:200,_default:400},r.fn.delay=function(b,c){return b=r.fx?r.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=d.createElement("input"),b=d.createElement("select"),c=b.appendChild(d.createElement("option"));a.type="checkbox",o.checkOn=""!==a.value,o.optSelected=c.selected,a=d.createElement("input"),a.value="t",a.type="radio",o.radioValue="t"===a.value}();var lb,mb=r.expr.attrHandle;r.fn.extend({attr:function(a,b){return T(this,r.attr,a,b,arguments.length>1)},removeAttr:function(a){return this.each(function(){r.removeAttr(this,a)})}}),r.extend({attr:function(a,b,c){var d,e,f=a.nodeType;if(3!==f&&8!==f&&2!==f)return"undefined"==typeof a.getAttribute?r.prop(a,b,c):(1===f&&r.isXMLDoc(a)||(e=r.attrHooks[b.toLowerCase()]||(r.expr.match.bool.test(b)?lb:void 0)),void 0!==c?null===c?void r.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=r.find.attr(a,b),null==d?void 0:d));
+},attrHooks:{type:{set:function(a,b){if(!o.radioValue&&"radio"===b&&B(a,"input")){var c=a.value;return a.setAttribute("type",b),c&&(a.value=c),b}}}},removeAttr:function(a,b){var c,d=0,e=b&&b.match(L);if(e&&1===a.nodeType)while(c=e[d++])a.removeAttribute(c)}}),lb={set:function(a,b,c){return b===!1?r.removeAttr(a,c):a.setAttribute(c,c),c}},r.each(r.expr.match.bool.source.match(/\w+/g),function(a,b){var c=mb[b]||r.find.attr;mb[b]=function(a,b,d){var e,f,g=b.toLowerCase();return d||(f=mb[g],mb[g]=e,e=null!=c(a,b,d)?g:null,mb[g]=f),e}});var nb=/^(?:input|select|textarea|button)$/i,ob=/^(?:a|area)$/i;r.fn.extend({prop:function(a,b){return T(this,r.prop,a,b,arguments.length>1)},removeProp:function(a){return this.each(function(){delete this[r.propFix[a]||a]})}}),r.extend({prop:function(a,b,c){var d,e,f=a.nodeType;if(3!==f&&8!==f&&2!==f)return 1===f&&r.isXMLDoc(a)||(b=r.propFix[b]||b,e=r.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=r.find.attr(a,"tabindex");return b?parseInt(b,10):nb.test(a.nodeName)||ob.test(a.nodeName)&&a.href?0:-1}}},propFix:{"for":"htmlFor","class":"className"}}),o.optSelected||(r.propHooks.selected={get:function(a){var b=a.parentNode;return b&&b.parentNode&&b.parentNode.selectedIndex,null},set:function(a){var b=a.parentNode;b&&(b.selectedIndex,b.parentNode&&b.parentNode.selectedIndex)}}),r.each(["tabIndex","readOnly","maxLength","cellSpacing","cellPadding","rowSpan","colSpan","useMap","frameBorder","contentEditable"],function(){r.propFix[this.toLowerCase()]=this});function pb(a){var b=a.match(L)||[];return b.join(" ")}function qb(a){return a.getAttribute&&a.getAttribute("class")||""}r.fn.extend({addClass:function(a){var b,c,d,e,f,g,h,i=0;if(r.isFunction(a))return this.each(function(b){r(this).addClass(a.call(this,b,qb(this)))});if("string"==typeof a&&a){b=a.match(L)||[];while(c=this[i++])if(e=qb(c),d=1===c.nodeType&&" "+pb(e)+" "){g=0;while(f=b[g++])d.indexOf(" "+f+" ")<0&&(d+=f+" ");h=pb(d),e!==h&&c.setAttribute("class",h)}}return this},removeClass:function(a){var b,c,d,e,f,g,h,i=0;if(r.isFunction(a))return this.each(function(b){r(this).removeClass(a.call(this,b,qb(this)))});if(!arguments.length)return this.attr("class","");if("string"==typeof a&&a){b=a.match(L)||[];while(c=this[i++])if(e=qb(c),d=1===c.nodeType&&" "+pb(e)+" "){g=0;while(f=b[g++])while(d.indexOf(" "+f+" ")>-1)d=d.replace(" "+f+" "," ");h=pb(d),e!==h&&c.setAttribute("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):r.isFunction(a)?this.each(function(c){r(this).toggleClass(a.call(this,c,qb(this),b),b)}):this.each(function(){var b,d,e,f;if("string"===c){d=0,e=r(this),f=a.match(L)||[];while(b=f[d++])e.hasClass(b)?e.removeClass(b):e.addClass(b)}else void 0!==a&&"boolean"!==c||(b=qb(this),b&&W.set(this,"__className__",b),this.setAttribute&&this.setAttribute("class",b||a===!1?"":W.get(this,"__className__")||""))})},hasClass:function(a){var b,c,d=0;b=" "+a+" ";while(c=this[d++])if(1===c.nodeType&&(" "+pb(qb(c))+" ").indexOf(b)>-1)return!0;return!1}});var rb=/\r/g;r.fn.extend({val:function(a){var b,c,d,e=this[0];{if(arguments.length)return d=r.isFunction(a),this.each(function(c){var e;1===this.nodeType&&(e=d?a.call(this,c,r(this).val()):a,null==e?e="":"number"==typeof e?e+="":Array.isArray(e)&&(e=r.map(e,function(a){return null==a?"":a+""})),b=r.valHooks[this.type]||r.valHooks[this.nodeName.toLowerCase()],b&&"set"in b&&void 0!==b.set(this,e,"value")||(this.value=e))});if(e)return b=r.valHooks[e.type]||r.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)}}}),r.extend({valHooks:{option:{get:function(a){var b=r.find.attr(a,"value");return null!=b?b:pb(r.text(a))}},select:{get:function(a){var b,c,d,e=a.options,f=a.selectedIndex,g="select-one"===a.type,h=g?null:[],i=g?f+1:e.length;for(d=f<0?i:g?f:0;d<i;d++)if(c=e[d],(c.selected||d===f)&&!c.disabled&&(!c.parentNode.disabled||!B(c.parentNode,"optgroup"))){if(b=r(c).val(),g)return b;h.push(b)}return h},set:function(a,b){var c,d,e=a.options,f=r.makeArray(b),g=e.length;while(g--)d=e[g],(d.selected=r.inArray(r.valHooks.option.get(d),f)>-1)&&(c=!0);return c||(a.selectedIndex=-1),f}}}}),r.each(["radio","checkbox"],function(){r.valHooks[this]={set:function(a,b){if(Array.isArray(b))return a.checked=r.inArray(r(a).val(),b)>-1}},o.checkOn||(r.valHooks[this].get=function(a){return null===a.getAttribute("value")?"on":a.value})});var sb=/^(?:focusinfocus|focusoutblur)$/;r.extend(r.event,{trigger:function(b,c,e,f){var g,h,i,j,k,m,n,o=[e||d],p=l.call(b,"type")?b.type:b,q=l.call(b,"namespace")?b.namespace.split("."):[];if(h=i=e=e||d,3!==e.nodeType&&8!==e.nodeType&&!sb.test(p+r.event.triggered)&&(p.indexOf(".")>-1&&(q=p.split("."),p=q.shift(),q.sort()),k=p.indexOf(":")<0&&"on"+p,b=b[r.expando]?b:new r.Event(p,"object"==typeof b&&b),b.isTrigger=f?2:3,b.namespace=q.join("."),b.rnamespace=b.namespace?new RegExp("(^|\\.)"+q.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,b.result=void 0,b.target||(b.target=e),c=null==c?[b]:r.makeArray(c,[b]),n=r.event.special[p]||{},f||!n.trigger||n.trigger.apply(e,c)!==!1)){if(!f&&!n.noBubble&&!r.isWindow(e)){for(j=n.delegateType||p,sb.test(j+p)||(h=h.parentNode);h;h=h.parentNode)o.push(h),i=h;i===(e.ownerDocument||d)&&o.push(i.defaultView||i.parentWindow||a)}g=0;while((h=o[g++])&&!b.isPropagationStopped())b.type=g>1?j:n.bindType||p,m=(W.get(h,"events")||{})[b.type]&&W.get(h,"handle"),m&&m.apply(h,c),m=k&&h[k],m&&m.apply&&U(h)&&(b.result=m.apply(h,c),b.result===!1&&b.preventDefault());return b.type=p,f||b.isDefaultPrevented()||n._default&&n._default.apply(o.pop(),c)!==!1||!U(e)||k&&r.isFunction(e[p])&&!r.isWindow(e)&&(i=e[k],i&&(e[k]=null),r.event.triggered=p,e[p](),r.event.triggered=void 0,i&&(e[k]=i)),b.result}},simulate:function(a,b,c){var d=r.extend(new r.Event,c,{type:a,isSimulated:!0});r.event.trigger(d,null,b)}}),r.fn.extend({trigger:function(a,b){return this.each(function(){r.event.trigger(a,b,this)})},triggerHandler:function(a,b){var c=this[0];if(c)return r.event.trigger(a,b,c,!0)}}),r.each("blur focus focusin focusout resize scroll click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup contextmenu".split(" "),function(a,b){r.fn[b]=function(a,c){return arguments.length>0?this.on(b,null,a,c):this.trigger(b)}}),r.fn.extend({hover:function(a,b){return this.mouseenter(a).mouseleave(b||a)}}),o.focusin="onfocusin"in a,o.focusin||r.each({focus:"focusin",blur:"focusout"},function(a,b){var c=function(a){r.event.simulate(b,a.target,r.event.fix(a))};r.event.special[b]={setup:function(){var d=this.ownerDocument||this,e=W.access(d,b);e||d.addEventListener(a,c,!0),W.access(d,b,(e||0)+1)},teardown:function(){var d=this.ownerDocument||this,e=W.access(d,b)-1;e?W.access(d,b,e):(d.removeEventListener(a,c,!0),W.remove(d,b))}}});var tb=a.location,ub=r.now(),vb=/\?/;r.parseXML=function(b){var c;if(!b||"string"!=typeof b)return null;try{c=(new a.DOMParser).parseFromString(b,"text/xml")}catch(d){c=void 0}return c&&!c.getElementsByTagName("parsererror").length||r.error("Invalid XML: "+b),c};var wb=/\[\]$/,xb=/\r?\n/g,yb=/^(?:submit|button|image|reset|file)$/i,zb=/^(?:input|select|textarea|keygen)/i;function Ab(a,b,c,d){var e;if(Array.isArray(b))r.each(b,function(b,e){c||wb.test(a)?d(a,e):Ab(a+"["+("object"==typeof e&&null!=e?b:"")+"]",e,c,d)});else if(c||"object"!==r.type(b))d(a,b);else for(e in b)Ab(a+"["+e+"]",b[e],c,d)}r.param=function(a,b){var c,d=[],e=function(a,b){var c=r.isFunction(b)?b():b;d[d.length]=encodeURIComponent(a)+"="+encodeURIComponent(null==c?"":c)};if(Array.isArray(a)||a.jquery&&!r.isPlainObject(a))r.each(a,function(){e(this.name,this.value)});else for(c in a)Ab(c,a[c],b,e);return d.join("&")},r.fn.extend({serialize:function(){return r.param(this.serializeArray())},serializeArray:function(){return this.map(function(){var a=r.prop(this,"elements");return a?r.makeArray(a):this}).filter(function(){var a=this.type;return this.name&&!r(this).is(":disabled")&&zb.test(this.nodeName)&&!yb.test(a)&&(this.checked||!ja.test(a))}).map(function(a,b){var c=r(this).val();return null==c?null:Array.isArray(c)?r.map(c,function(a){return{name:b.name,value:a.replace(xb,"\r\n")}}):{name:b.name,value:c.replace(xb,"\r\n")}}).get()}});var Bb=/%20/g,Cb=/#.*$/,Db=/([?&])_=[^&]*/,Eb=/^(.*?):[ \t]*([^\r\n]*)$/gm,Fb=/^(?:about|app|app-storage|.+-extension|file|res|widget):$/,Gb=/^(?:GET|HEAD)$/,Hb=/^\/\//,Ib={},Jb={},Kb="*/".concat("*"),Lb=d.createElement("a");Lb.href=tb.href;function Mb(a){return function(b,c){"string"!=typeof b&&(c=b,b="*");var d,e=0,f=b.toLowerCase().match(L)||[];if(r.isFunction(c))while(d=f[e++])"+"===d[0]?(d=d.slice(1)||"*",(a[d]=a[d]||[]).unshift(c)):(a[d]=a[d]||[]).push(c)}}function Nb(a,b,c,d){var e={},f=a===Jb;function g(h){var i;return e[h]=!0,r.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 Ob(a,b){var c,d,e=r.ajaxSettings.flatOptions||{};for(c in b)void 0!==b[c]&&((e[c]?a:d||(d={}))[c]=b[c]);return d&&r.extend(!0,a,d),a}function Pb(a,b,c){var d,e,f,g,h=a.contents,i=a.dataTypes;while("*"===i[0])i.shift(),void 0===d&&(d=a.mimeType||b.getResponseHeader("Content-Type"));if(d)for(e in h)if(h[e]&&h[e].test(d)){i.unshift(e);break}if(i[0]in c)f=i[0];else{for(e in c){if(!i[0]||a.converters[e+" "+i[0]]){f=e;break}g||(g=e)}f=f||g}if(f)return f!==i[0]&&i.unshift(f),c[f]}function Qb(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}}r.extend({active:0,lastModified:{},etag:{},ajaxSettings:{url:tb.href,type:"GET",isLocal:Fb.test(tb.protocol),global:!0,processData:!0,async:!0,contentType:"application/x-www-form-urlencoded; charset=UTF-8",accepts:{"*":Kb,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":JSON.parse,"text xml":r.parseXML},flatOptions:{url:!0,context:!0}},ajaxSetup:function(a,b){return b?Ob(Ob(a,r.ajaxSettings),b):Ob(r.ajaxSettings,a)},ajaxPrefilter:Mb(Ib),ajaxTransport:Mb(Jb),ajax:function(b,c){"object"==typeof b&&(c=b,b=void 0),c=c||{};var e,f,g,h,i,j,k,l,m,n,o=r.ajaxSetup({},c),p=o.context||o,q=o.context&&(p.nodeType||p.jquery)?r(p):r.event,s=r.Deferred(),t=r.Callbacks("once memory"),u=o.statusCode||{},v={},w={},x="canceled",y={readyState:0,getResponseHeader:function(a){var b;if(k){if(!h){h={};while(b=Eb.exec(g))h[b[1].toLowerCase()]=b[2]}b=h[a.toLowerCase()]}return null==b?null:b},getAllResponseHeaders:function(){return k?g:null},setRequestHeader:function(a,b){return null==k&&(a=w[a.toLowerCase()]=w[a.toLowerCase()]||a,v[a]=b),this},overrideMimeType:function(a){return null==k&&(o.mimeType=a),this},statusCode:function(a){var b;if(a)if(k)y.always(a[y.status]);else for(b in a)u[b]=[u[b],a[b]];return this},abort:function(a){var b=a||x;return e&&e.abort(b),A(0,b),this}};if(s.promise(y),o.url=((b||o.url||tb.href)+"").replace(Hb,tb.protocol+"//"),o.type=c.method||c.type||o.method||o.type,o.dataTypes=(o.dataType||"*").toLowerCase().match(L)||[""],null==o.crossDomain){j=d.createElement("a");try{j.href=o.url,j.href=j.href,o.crossDomain=Lb.protocol+"//"+Lb.host!=j.protocol+"//"+j.host}catch(z){o.crossDomain=!0}}if(o.data&&o.processData&&"string"!=typeof o.data&&(o.data=r.param(o.data,o.traditional)),Nb(Ib,o,c,y),k)return y;l=r.event&&o.global,l&&0===r.active++&&r.event.trigger("ajaxStart"),o.type=o.type.toUpperCase(),o.hasContent=!Gb.test(o.type),f=o.url.replace(Cb,""),o.hasContent?o.data&&o.processData&&0===(o.contentType||"").indexOf("application/x-www-form-urlencoded")&&(o.data=o.data.replace(Bb,"+")):(n=o.url.slice(f.length),o.data&&(f+=(vb.test(f)?"&":"?")+o.data,delete o.data),o.cache===!1&&(f=f.replace(Db,"$1"),n=(vb.test(f)?"&":"?")+"_="+ub++ +n),o.url=f+n),o.ifModified&&(r.lastModified[f]&&y.setRequestHeader("If-Modified-Since",r.lastModified[f]),r.etag[f]&&y.setRequestHeader("If-None-Match",r.etag[f])),(o.data&&o.hasContent&&o.contentType!==!1||c.contentType)&&y.setRequestHeader("Content-Type",o.contentType),y.setRequestHeader("Accept",o.dataTypes[0]&&o.accepts[o.dataTypes[0]]?o.accepts[o.dataTypes[0]]+("*"!==o.dataTypes[0]?", "+Kb+"; q=0.01":""):o.accepts["*"]);for(m in o.headers)y.setRequestHeader(m,o.headers[m]);if(o.beforeSend&&(o.beforeSend.call(p,y,o)===!1||k))return y.abort();if(x="abort",t.add(o.complete),y.done(o.success),y.fail(o.error),e=Nb(Jb,o,c,y)){if(y.readyState=1,l&&q.trigger("ajaxSend",[y,o]),k)return y;o.async&&o.timeout>0&&(i=a.setTimeout(function(){y.abort("timeout")},o.timeout));try{k=!1,e.send(v,A)}catch(z){if(k)throw z;A(-1,z)}}else A(-1,"No Transport");function A(b,c,d,h){var j,m,n,v,w,x=c;k||(k=!0,i&&a.clearTimeout(i),e=void 0,g=h||"",y.readyState=b>0?4:0,j=b>=200&&b<300||304===b,d&&(v=Pb(o,y,d)),v=Qb(o,v,y,j),j?(o.ifModified&&(w=y.getResponseHeader("Last-Modified"),w&&(r.lastModified[f]=w),w=y.getResponseHeader("etag"),w&&(r.etag[f]=w)),204===b||"HEAD"===o.type?x="nocontent":304===b?x="notmodified":(x=v.state,m=v.data,n=v.error,j=!n)):(n=x,!b&&x||(x="error",b<0&&(b=0))),y.status=b,y.statusText=(c||x)+"",j?s.resolveWith(p,[m,x,y]):s.rejectWith(p,[y,x,n]),y.statusCode(u),u=void 0,l&&q.trigger(j?"ajaxSuccess":"ajaxError",[y,o,j?m:n]),t.fireWith(p,[y,x]),l&&(q.trigger("ajaxComplete",[y,o]),--r.active||r.event.trigger("ajaxStop")))}return y},getJSON:function(a,b,c){return r.get(a,b,c,"json")},getScript:function(a,b){return r.get(a,void 0,b,"script")}}),r.each(["get","post"],function(a,b){r[b]=function(a,c,d,e){return r.isFunction(c)&&(e=e||d,d=c,c=void 0),r.ajax(r.extend({url:a,type:b,dataType:e,data:c,success:d},r.isPlainObject(a)&&a))}}),r._evalUrl=function(a){return r.ajax({url:a,type:"GET",dataType:"script",cache:!0,async:!1,global:!1,"throws":!0})},r.fn.extend({wrapAll:function(a){var b;return this[0]&&(r.isFunction(a)&&(a=a.call(this[0])),b=r(a,this[0].ownerDocument).eq(0).clone(!0),this[0].parentNode&&b.insertBefore(this[0]),b.map(function(){var a=this;while(a.firstElementChild)a=a.firstElementChild;return a}).append(this)),this},wrapInner:function(a){return r.isFunction(a)?this.each(function(b){r(this).wrapInner(a.call(this,b))}):this.each(function(){var b=r(this),c=b.contents();c.length?c.wrapAll(a):b.append(a)})},wrap:function(a){var b=r.isFunction(a);return this.each(function(c){r(this).wrapAll(b?a.call(this,c):a)})},unwrap:function(a){return this.parent(a).not("body").each(function(){r(this).replaceWith(this.childNodes)}),this}}),r.expr.pseudos.hidden=function(a){return!r.expr.pseudos.visible(a)},r.expr.pseudos.visible=function(a){return!!(a.offsetWidth||a.offsetHeight||a.getClientRects().length)},r.ajaxSettings.xhr=function(){try{return new a.XMLHttpRequest}catch(b){}};var Rb={0:200,1223:204},Sb=r.ajaxSettings.xhr();o.cors=!!Sb&&"withCredentials"in Sb,o.ajax=Sb=!!Sb,r.ajaxTransport(function(b){var c,d;if(o.cors||Sb&&!b.crossDomain)return{send:function(e,f){var g,h=b.xhr();if(h.open(b.type,b.url,b.async,b.username,b.password),b.xhrFields)for(g in b.xhrFields)h[g]=b.xhrFields[g];b.mimeType&&h.overrideMimeType&&h.overrideMimeType(b.mimeType),b.crossDomain||e["X-Requested-With"]||(e["X-Requested-With"]="XMLHttpRequest");for(g in e)h.setRequestHeader(g,e[g]);c=function(a){return function(){c&&(c=d=h.onload=h.onerror=h.onabort=h.onreadystatechange=null,"abort"===a?h.abort():"error"===a?"number"!=typeof h.status?f(0,"error"):f(h.status,h.statusText):f(Rb[h.status]||h.status,h.statusText,"text"!==(h.responseType||"text")||"string"!=typeof h.responseText?{binary:h.response}:{text:h.responseText},h.getAllResponseHeaders()))}},h.onload=c(),d=h.onerror=c("error"),void 0!==h.onabort?h.onabort=d:h.onreadystatechange=function(){4===h.readyState&&a.setTimeout(function(){c&&d()})},c=c("abort");try{h.send(b.hasContent&&b.data||null)}catch(i){if(c)throw i}},abort:function(){c&&c()}}}),r.ajaxPrefilter(function(a){a.crossDomain&&(a.contents.script=!1)}),r.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 r.globalEval(a),a}}}),r.ajaxPrefilter("script",function(a){void 0===a.cache&&(a.cache=!1),a.crossDomain&&(a.type="GET")}),r.ajaxTransport("script",function(a){if(a.crossDomain){var b,c;return{send:function(e,f){b=r("<script>").prop({charset:a.scriptCharset,src:a.url}).on("load error",c=function(a){b.remove(),c=null,a&&f("error"===a.type?404:200,a.type)}),d.head.appendChild(b[0])},abort:function(){c&&c()}}}});var Tb=[],Ub=/(=)\?(?=&|$)|\?\?/;r.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var a=Tb.pop()||r.expando+"_"+ub++;return this[a]=!0,a}}),r.ajaxPrefilter("json jsonp",function(b,c,d){var e,f,g,h=b.jsonp!==!1&&(Ub.test(b.url)?"url":"string"==typeof b.data&&0===(b.contentType||"").indexOf("application/x-www-form-urlencoded")&&Ub.test(b.data)&&"data");if(h||"jsonp"===b.dataTypes[0])return e=b.jsonpCallback=r.isFunction(b.jsonpCallback)?b.jsonpCallback():b.jsonpCallback,h?b[h]=b[h].replace(Ub,"$1"+e):b.jsonp!==!1&&(b.url+=(vb.test(b.url)?"&":"?")+b.jsonp+"="+e),b.converters["script json"]=function(){return g||r.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?r(a).removeProp(e):a[e]=f,b[e]&&(b.jsonpCallback=c.jsonpCallback,Tb.push(e)),g&&r.isFunction(f)&&f(g[0]),g=f=void 0}),"script"}),o.createHTMLDocument=function(){var a=d.implementation.createHTMLDocument("").body;return a.innerHTML="<form></form><form></form>",2===a.childNodes.length}(),r.parseHTML=function(a,b,c){if("string"!=typeof a)return[];"boolean"==typeof b&&(c=b,b=!1);var e,f,g;return b||(o.createHTMLDocument?(b=d.implementation.createHTMLDocument(""),e=b.createElement("base"),e.href=d.location.href,b.head.appendChild(e)):b=d),f=C.exec(a),g=!c&&[],f?[b.createElement(f[1])]:(f=qa([a],b,g),g&&g.length&&r(g).remove(),r.merge([],f.childNodes))},r.fn.load=function(a,b,c){var d,e,f,g=this,h=a.indexOf(" ");return h>-1&&(d=pb(a.slice(h)),a=a.slice(0,h)),r.isFunction(b)?(c=b,b=void 0):b&&"object"==typeof b&&(e="POST"),g.length>0&&r.ajax({url:a,type:e||"GET",dataType:"html",data:b}).done(function(a){f=arguments,g.html(d?r("<div>").append(r.parseHTML(a)).find(d):a)}).always(c&&function(a,b){g.each(function(){c.apply(this,f||[a.responseText,b,a])})}),this},r.each(["ajaxStart","ajaxStop","ajaxComplete","ajaxError","ajaxSuccess","ajaxSend"],function(a,b){r.fn[b]=function(a){return this.on(b,a)}}),r.expr.pseudos.animated=function(a){return r.grep(r.timers,function(b){return a===b.elem}).length},r.offset={setOffset:function(a,b,c){var d,e,f,g,h,i,j,k=r.css(a,"position"),l=r(a),m={};"static"===k&&(a.style.position="relative"),h=l.offset(),f=r.css(a,"top"),i=r.css(a,"left"),j=("absolute"===k||"fixed"===k)&&(f+i).indexOf("auto")>-1,j?(d=l.position(),g=d.top,e=d.left):(g=parseFloat(f)||0,e=parseFloat(i)||0),r.isFunction(b)&&(b=b.call(a,c,r.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)}},r.fn.extend({offset:function(a){if(arguments.length)return void 0===a?this:this.each(function(b){r.offset.setOffset(this,a,b)});var b,c,d,e,f=this[0];if(f)return f.getClientRects().length?(d=f.getBoundingClientRect(),b=f.ownerDocument,c=b.documentElement,e=b.defaultView,{top:d.top+e.pageYOffset-c.clientTop,left:d.left+e.pageXOffset-c.clientLeft}):{top:0,left:0}},position:function(){if(this[0]){var a,b,c=this[0],d={top:0,left:0};return"fixed"===r.css(c,"position")?b=c.getBoundingClientRect():(a=this.offsetParent(),b=this.offset(),B(a[0],"html")||(d=a.offset()),d={top:d.top+r.css(a[0],"borderTopWidth",!0),left:d.left+r.css(a[0],"borderLeftWidth",!0)}),{top:b.top-d.top-r.css(c,"marginTop",!0),left:b.left-d.left-r.css(c,"marginLeft",!0)}}},offsetParent:function(){return this.map(function(){var a=this.offsetParent;while(a&&"static"===r.css(a,"position"))a=a.offsetParent;return a||ra})}}),r.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(a,b){var c="pageYOffset"===b;r.fn[a]=function(d){return T(this,function(a,d,e){var f;return r.isWindow(a)?f=a:9===a.nodeType&&(f=a.defaultView),void 0===e?f?f[b]:a[d]:void(f?f.scrollTo(c?f.pageXOffset:e,c?e:f.pageYOffset):a[d]=e)},a,d,arguments.length)}}),r.each(["top","left"],function(a,b){r.cssHooks[b]=Pa(o.pixelPosition,function(a,c){if(c)return c=Oa(a,b),Ma.test(c)?r(a).position()[b]+"px":c})}),r.each({Height:"height",Width:"width"},function(a,b){r.each({padding:"inner"+a,content:b,"":"outer"+a},function(c,d){r.fn[d]=function(e,f){var g=arguments.length&&(c||"boolean"!=typeof e),h=c||(e===!0||f===!0?"margin":"border");return T(this,function(b,c,e){var f;return r.isWindow(b)?0===d.indexOf("outer")?b["inner"+a]:b.document.documentElement["client"+a]:9===b.nodeType?(f=b.documentElement,Math.max(b.body["scroll"+a],f["scroll"+a],b.body["offset"+a],f["offset"+a],f["client"+a])):void 0===e?r.css(b,c,h):r.style(b,c,e,h)},b,g?e:void 0,g)}})}),r.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)},holdReady:function(a){a?r.readyWait++:r.ready(!0)}}),r.isArray=Array.isArray,r.parseJSON=JSON.parse,r.nodeName=B,"function"==typeof define&&define.amd&&define("jquery",[],function(){return r});var Vb=a.jQuery,Wb=a.$;return r.noConflict=function(b){return a.$===r&&(a.$=Wb),b&&a.jQuery===r&&(a.jQuery=Vb),r},b||(a.jQuery=a.$=r),r});
+
+function createShiftArr(step) {
+
+	var space = '    ';
+	
+	if ( isNaN(parseInt(step)) ) {  // argument is string
+		space = step;
+	} else { // argument is integer
+		switch(step) {
+			case 1: space = ' '; break;
+			case 2: space = '  '; break;
+			case 3: space = '   '; break;
+			case 4: space = '    '; break;
+			case 5: space = '     '; break;
+			case 6: space = '      '; break;
+			case 7: space = '       '; break;
+			case 8: space = '        '; break;
+			case 9: space = '         '; break;
+			case 10: space = '          '; break;
+			case 11: space = '           '; break;
+			case 12: space = '            '; break;
+		}
+	}
+
+	var shift = ['\n']; // array of shifts
+	for(ix=0;ix<100;ix++){
+		shift.push(shift[ix]+space); 
+	}
+	return shift;
+}
+
+function vkbeautify(){
+	this.step = '    '; // 4 spaces
+	this.shift = createShiftArr(this.step);
+};
+
+vkbeautify.prototype.xml = function(text,step) {
+
+	var ar = text.replace(/>\s{0,}</g,"><")
+				 .replace(/</g,"~::~<")
+				 .replace(/\s*xmlns\:/g,"~::~xmlns:")
+				 .replace(/\s*xmlns\=/g,"~::~xmlns=")
+				 .split('~::~'),
+		len = ar.length,
+		inComment = false,
+		deep = 0,
+		str = '',
+		ix = 0,
+		shift = step ? createShiftArr(step) : this.shift;
+
+		for(ix=0;ix<len;ix++) {
+			// start comment or <![CDATA[...]]> or <!DOCTYPE //
+			if(ar[ix].search(/<!/) > -1) { 
+				str += shift[deep]+ar[ix];
+				inComment = true; 
+				// end comment  or <![CDATA[...]]> //
+				if(ar[ix].search(/-->/) > -1 || ar[ix].search(/\]>/) > -1 || ar[ix].search(/!DOCTYPE/) > -1 ) { 
+					inComment = false; 
+				}
+			} else 
+			// end comment  or <![CDATA[...]]> //
+			if(ar[ix].search(/-->/) > -1 || ar[ix].search(/\]>/) > -1) { 
+				str += ar[ix];
+				inComment = false; 
+			} else 
+			// <elm></elm> //
+			if( /^<\w/.exec(ar[ix-1]) && /^<\/\w/.exec(ar[ix]) &&
+				/^<[\w:\-\.\,]+/.exec(ar[ix-1]) == /^<\/[\w:\-\.\,]+/.exec(ar[ix])[0].replace('/','')) { 
+				str += ar[ix];
+				if(!inComment) deep--;
+			} else
+			 // <elm> //
+			if(ar[ix].search(/<\w/) > -1 && ar[ix].search(/<\//) == -1 && ar[ix].search(/\/>/) == -1 ) {
+				str = !inComment ? str += shift[deep++]+ar[ix] : str += ar[ix];
+			} else 
+			 // <elm>...</elm> //
+			if(ar[ix].search(/<\w/) > -1 && ar[ix].search(/<\//) > -1) {
+				str = !inComment ? str += shift[deep]+ar[ix] : str += ar[ix];
+			} else 
+			// </elm> //
+			if(ar[ix].search(/<\//) > -1) { 
+				str = !inComment ? str += shift[--deep]+ar[ix] : str += ar[ix];
+			} else 
+			// <elm/> //
+			if(ar[ix].search(/\/>/) > -1 ) { 
+				str = !inComment ? str += shift[deep]+ar[ix] : str += ar[ix];
+			} else 
+			// <? xml ... ?> //
+			if(ar[ix].search(/<\?/) > -1) { 
+				str += shift[deep]+ar[ix];
+			} else 
+			// xmlns //
+			if( ar[ix].search(/xmlns\:/) > -1  || ar[ix].search(/xmlns\=/) > -1) { 
+				str += shift[deep]+ar[ix];
+			} 
+			
+			else {
+				str += ar[ix];
+			}
+		}
+		
+	return  (str[0] == '\n') ? str.slice(1) : str;
+}
+
+vkbeautify.prototype.json = function(text,step) {
+
+	var step = step ? step : this.step;
+	
+	if (typeof JSON === 'undefined' ) return text; 
+	
+	if ( typeof text === "string" ) return JSON.stringify(JSON.parse(text), null, step);
+	if ( typeof text === "object" ) return JSON.stringify(text, null, step);
+		
+	return text; // text is not string nor object
+}
+
+vkbeautify.prototype.css = function(text, step) {
+
+	var ar = text.replace(/\s{1,}/g,' ')
+				.replace(/\{/g,"{~::~")
+				.replace(/\}/g,"~::~}~::~")
+				.replace(/\;/g,";~::~")
+				.replace(/\/\*/g,"~::~/*")
+				.replace(/\*\//g,"*/~::~")
+				.replace(/~::~\s{0,}~::~/g,"~::~")
+				.split('~::~'),
+		len = ar.length,
+		deep = 0,
+		str = '',
+		ix = 0,
+		shift = step ? createShiftArr(step) : this.shift;
+		
+		for(ix=0;ix<len;ix++) {
+
+			if( /\{/.exec(ar[ix]))  { 
+				str += shift[deep++]+ar[ix];
+			} else 
+			if( /\}/.exec(ar[ix]))  { 
+				str += shift[--deep]+ar[ix];
+			} else
+			if( /\*\\/.exec(ar[ix]))  { 
+				str += shift[deep]+ar[ix];
+			}
+			else {
+				str += shift[deep]+ar[ix];
+			}
+		}
+		return str.replace(/^\n{1,}/,'');
+}
+
+//----------------------------------------------------------------------------
+
+function isSubquery(str, parenthesisLevel) {
+	return  parenthesisLevel - (str.replace(/\(/g,'').length - str.replace(/\)/g,'').length )
+}
+
+function split_sql(str, tab) {
+
+	return str.replace(/\s{1,}/g," ")
+
+				.replace(/ AND /ig,"~::~"+tab+tab+"AND ")
+				.replace(/ BETWEEN /ig,"~::~"+tab+"BETWEEN ")
+				.replace(/ CASE /ig,"~::~"+tab+"CASE ")
+				.replace(/ ELSE /ig,"~::~"+tab+"ELSE ")
+				.replace(/ END /ig,"~::~"+tab+"END ")
+				.replace(/ FROM /ig,"~::~FROM ")
+				.replace(/ GROUP\s{1,}BY/ig,"~::~GROUP BY ")
+				.replace(/ HAVING /ig,"~::~HAVING ")
+				//.replace(/ SET /ig," SET~::~")
+				.replace(/ IN /ig," IN ")
+				
+				.replace(/ JOIN /ig,"~::~JOIN ")
+				.replace(/ CROSS~::~{1,}JOIN /ig,"~::~CROSS JOIN ")
+				.replace(/ INNER~::~{1,}JOIN /ig,"~::~INNER JOIN ")
+				.replace(/ LEFT~::~{1,}JOIN /ig,"~::~LEFT JOIN ")
+				.replace(/ RIGHT~::~{1,}JOIN /ig,"~::~RIGHT JOIN ")
+				
+				.replace(/ ON /ig,"~::~"+tab+"ON ")
+				.replace(/ OR /ig,"~::~"+tab+tab+"OR ")
+				.replace(/ ORDER\s{1,}BY/ig,"~::~ORDER BY ")
+				.replace(/ OVER /ig,"~::~"+tab+"OVER ")
+
+				.replace(/\(\s{0,}SELECT /ig,"~::~(SELECT ")
+				.replace(/\)\s{0,}SELECT /ig,")~::~SELECT ")
+				
+				.replace(/ THEN /ig," THEN~::~"+tab+"")
+				.replace(/ UNION /ig,"~::~UNION~::~")
+				.replace(/ USING /ig,"~::~USING ")
+				.replace(/ WHEN /ig,"~::~"+tab+"WHEN ")
+				.replace(/ WHERE /ig,"~::~WHERE ")
+				.replace(/ WITH /ig,"~::~WITH ")
+				
+				//.replace(/\,\s{0,}\(/ig,",~::~( ")
+				//.replace(/\,/ig,",~::~"+tab+tab+"")
+
+				.replace(/ ALL /ig," ALL ")
+				.replace(/ AS /ig," AS ")
+				.replace(/ ASC /ig," ASC ")	
+				.replace(/ DESC /ig," DESC ")	
+				.replace(/ DISTINCT /ig," DISTINCT ")
+				.replace(/ EXISTS /ig," EXISTS ")
+				.replace(/ NOT /ig," NOT ")
+				.replace(/ NULL /ig," NULL ")
+				.replace(/ LIKE /ig," LIKE ")
+				.replace(/\s{0,}SELECT /ig,"SELECT ")
+				.replace(/\s{0,}UPDATE /ig,"UPDATE ")
+				.replace(/ SET /ig," SET ")
+							
+				.replace(/~::~{1,}/g,"~::~")
+				.split('~::~');
+}
+
+vkbeautify.prototype.sql = function(text,step) {
+
+	var ar_by_quote = text.replace(/\s{1,}/g," ")
+							.replace(/\'/ig,"~::~\'")
+							.split('~::~'),
+		len = ar_by_quote.length,
+		ar = [],
+		deep = 0,
+		tab = this.step,//+this.step,
+		inComment = true,
+		inQuote = false,
+		parenthesisLevel = 0,
+		str = '',
+		ix = 0,
+		shift = step ? createShiftArr(step) : this.shift;;
+
+		for(ix=0;ix<len;ix++) {
+			if(ix%2) {
+				ar = ar.concat(ar_by_quote[ix]);
+			} else {
+				ar = ar.concat(split_sql(ar_by_quote[ix], tab) );
+			}
+		}
+		
+		len = ar.length;
+		for(ix=0;ix<len;ix++) {
+			
+			parenthesisLevel = isSubquery(ar[ix], parenthesisLevel);
+			
+			if( /\s{0,}\s{0,}SELECT\s{0,}/.exec(ar[ix]))  { 
+				ar[ix] = ar[ix].replace(/\,/g,",\n"+tab+tab+"")
+			} 
+			
+			if( /\s{0,}\s{0,}SET\s{0,}/.exec(ar[ix]))  { 
+				ar[ix] = ar[ix].replace(/\,/g,",\n"+tab+tab+"")
+			} 
+			
+			if( /\s{0,}\(\s{0,}SELECT\s{0,}/.exec(ar[ix]))  { 
+				deep++;
+				str += shift[deep]+ar[ix];
+			} else 
+			if( /\'/.exec(ar[ix]) )  { 
+				if(parenthesisLevel<1 && deep) {
+					deep--;
+				}
+				str += ar[ix];
+			}
+			else  { 
+				str += shift[deep]+ar[ix];
+				if(parenthesisLevel<1 && deep) {
+					deep--;
+				}
+			} 
+			var junk = 0;
+		}
+
+		str = str.replace(/^\n{1,}/,'').replace(/\n{1,}/g,"\n");
+		return str;
+}
+
+
+vkbeautify.prototype.xmlmin = function(text, preserveComments) {
+
+	var str = preserveComments ? text
+							   : text.replace(/\<![ \r\n\t]*(--([^\-]|[\r\n]|-[^\-])*--[ \r\n\t]*)\>/g,"")
+									 .replace(/[ \r\n\t]{1,}xmlns/g, ' xmlns');
+	return  str.replace(/>\s{0,}</g,"><"); 
+}
+
+vkbeautify.prototype.jsonmin = function(text) {
+
+	if (typeof JSON === 'undefined' ) return text; 
+	
+	return JSON.stringify(JSON.parse(text), null, 0); 
+				
+}
+
+vkbeautify.prototype.cssmin = function(text, preserveComments) {
+	
+	var str = preserveComments ? text
+							   : text.replace(/\/\*([^*]|[\r\n]|(\*+([^*/]|[\r\n])))*\*+\//g,"") ;
+
+	return str.replace(/\s{1,}/g,' ')
+			  .replace(/\{\s{1,}/g,"{")
+			  .replace(/\}\s{1,}/g,"}")
+			  .replace(/\;\s{1,}/g,";")
+			  .replace(/\/\*\s{1,}/g,"/*")
+			  .replace(/\*\/\s{1,}/g,"*/");
+}
+
+vkbeautify.prototype.sqlmin = function(text) {
+	return text.replace(/\s{1,}/g," ").replace(/\s{1,}\(/,"(").replace(/\s{1,}\)/,")");
+}
+
+window.vkbeautify = new vkbeautify();
+
+})();
+
+
+(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(){function n(n){return n&&(n.ownerDocument||n.document||n).documentElement}function t(n){return n&&(n.ownerDocument&&n.ownerDocument.defaultView||n.document&&n||n.defaultView)}function e(n,t){return t>n?-1:n>t?1:n>=t?0:NaN}function r(n){return null===n?NaN:+n}function i(n){return!isNaN(n)}function u(n){return{left:function(t,e,r,i){for(arguments.length<3&&(r=0),arguments.length<4&&(i=t.length);i>r;){var u=r+i>>>1;n(t[u],e)<0?r=u+1:i=u}return r},right:function(t,e,r,i){for(arguments.length<3&&(r=0),arguments.length<4&&(i=t.length);i>r;){var u=r+i>>>1;n(t[u],e)>0?i=u:r=u+1}return r}}}function o(n){return n.length}function a(n){for(var t=1;n*t%1;)t*=10;return t}function l(n,t){for(var e in t)Object.defineProperty(n.prototype,e,{value:t[e],enumerable:!1})}function c(){this._=Object.create(null)}function f(n){return(n+="")===bo||n[0]===_o?_o+n:n}function s(n){return(n+="")[0]===_o?n.slice(1):n}function h(n){return f(n)in this._}function p(n){return(n=f(n))in this._&&delete this._[n]}function g(){var n=[];for(var t in this._)n.push(s(t));return n}function v(){var n=0;for(var t in this._)++n;return n}function d(){for(var n in this._)return!1;return!0}function y(){this._=Object.create(null)}function m(n){return n}function M(n,t,e){return function(){var r=e.apply(t,arguments);return r===t?n:r}}function x(n,t){if(t in n)return t;t=t.charAt(0).toUpperCase()+t.slice(1);for(var e=0,r=wo.length;r>e;++e){var i=wo[e]+t;if(i in n)return i}}function b(){}function _(){}function w(n){function t(){for(var t,r=e,i=-1,u=r.length;++i<u;)(t=r[i].on)&&t.apply(this,arguments);return n}var e=[],r=new c;return t.on=function(t,i){var u,o=r.get(t);return arguments.length<2?o&&o.on:(o&&(o.on=null,e=e.slice(0,u=e.indexOf(o)).concat(e.slice(u+1)),r.remove(t)),i&&e.push(r.set(t,{on:i})),n)},t}function S(){ao.event.preventDefault()}function k(){for(var n,t=ao.event;n=t.sourceEvent;)t=n;return t}function N(n){for(var t=new _,e=0,r=arguments.length;++e<r;)t[arguments[e]]=w(t);return t.of=function(e,r){return function(i){try{var u=i.sourceEvent=ao.event;i.target=n,ao.event=i,t[i.type].apply(e,r)}finally{ao.event=u}}},t}function E(n){return ko(n,Co),n}function A(n){return"function"==typeof n?n:function(){return No(n,this)}}function C(n){return"function"==typeof n?n:function(){return Eo(n,this)}}function z(n,t){function e(){this.removeAttribute(n)}function r(){this.removeAttributeNS(n.space,n.local)}function i(){this.setAttribute(n,t)}function u(){this.setAttributeNS(n.space,n.local,t)}function o(){var e=t.apply(this,arguments);null==e?this.removeAttribute(n):this.setAttribute(n,e)}function a(){var e=t.apply(this,arguments);null==e?this.removeAttributeNS(n.space,n.local):this.setAttributeNS(n.space,n.local,e)}return n=ao.ns.qualify(n),null==t?n.local?r:e:"function"==typeof t?n.local?a:o:n.local?u:i}function L(n){return n.trim().replace(/\s+/g," ")}function q(n){return new RegExp("(?:^|\\s+)"+ao.requote(n)+"(?:\\s+|$)","g")}function T(n){return(n+"").trim().split(/^|\s+/)}function R(n,t){function e(){for(var e=-1;++e<i;)n[e](this,t)}function r(){for(var e=-1,r=t.apply(this,arguments);++e<i;)n[e](this,r)}n=T(n).map(D);var i=n.length;return"function"==typeof t?r:e}function D(n){var t=q(n);return function(e,r){if(i=e.classList)return r?i.add(n):i.remove(n);var i=e.getAttribute("class")||"";r?(t.lastIndex=0,t.test(i)||e.setAttribute("class",L(i+" "+n))):e.setAttribute("class",L(i.replace(t," ")))}}function P(n,t,e){function r(){this.style.removeProperty(n)}function i(){this.style.setProperty(n,t,e)}function u(){var r=t.apply(this,arguments);null==r?this.style.removeProperty(n):this.style.setProperty(n,r,e)}return null==t?r:"function"==typeof t?u:i}function U(n,t){function e(){delete this[n]}function r(){this[n]=t}function i(){var e=t.apply(this,arguments);null==e?delete this[n]:this[n]=e}return null==t?e:"function"==typeof t?i:r}function j(n){function t(){var t=this.ownerDocument,e=this.namespaceURI;return e===zo&&t.documentElement.namespaceURI===zo?t.createElement(n):t.createElementNS(e,n)}function e(){return this.ownerDocument.createElementNS(n.space,n.local)}return"function"==typeof n?n:(n=ao.ns.qualify(n)).local?e:t}function F(){var n=this.parentNode;n&&n.removeChild(this)}function H(n){return{__data__:n}}function O(n){return function(){return Ao(this,n)}}function I(n){return arguments.length||(n=e),function(t,e){return t&&e?n(t.__data__,e.__data__):!t-!e}}function Y(n,t){for(var e=0,r=n.length;r>e;e++)for(var i,u=n[e],o=0,a=u.length;a>o;o++)(i=u[o])&&t(i,o,e);return n}function Z(n){return ko(n,qo),n}function V(n){var t,e;return function(r,i,u){var o,a=n[u].update,l=a.length;for(u!=e&&(e=u,t=0),i>=t&&(t=i+1);!(o=a[t])&&++t<l;);return o}}function X(n,t,e){function r(){var t=this[o];t&&(this.removeEventListener(n,t,t.$),delete this[o])}function i(){var i=l(t,co(arguments));r.call(this),this.addEventListener(n,this[o]=i,i.$=e),i._=t}function u(){var t,e=new RegExp("^__on([^.]+)"+ao.requote(n)+"$");for(var r in this)if(t=r.match(e)){var i=this[r];this.removeEventListener(t[1],i,i.$),delete this[r]}}var o="__on"+n,a=n.indexOf("."),l=$;a>0&&(n=n.slice(0,a));var c=To.get(n);return c&&(n=c,l=B),a?t?i:r:t?b:u}function $(n,t){return function(e){var r=ao.event;ao.event=e,t[0]=this.__data__;try{n.apply(this,t)}finally{ao.event=r}}}function B(n,t){var e=$(n,t);return function(n){var t=this,r=n.relatedTarget;r&&(r===t||8&r.compareDocumentPosition(t))||e.call(t,n)}}function W(e){var r=".dragsuppress-"+ ++Do,i="click"+r,u=ao.select(t(e)).on("touchmove"+r,S).on("dragstart"+r,S).on("selectstart"+r,S);if(null==Ro&&(Ro="onselectstart"in e?!1:x(e.style,"userSelect")),Ro){var o=n(e).style,a=o[Ro];o[Ro]="none"}return function(n){if(u.on(r,null),Ro&&(o[Ro]=a),n){var t=function(){u.on(i,null)};u.on(i,function(){S(),t()},!0),setTimeout(t,0)}}}function J(n,e){e.changedTouches&&(e=e.changedTouches[0]);var r=n.ownerSVGElement||n;if(r.createSVGPoint){var i=r.createSVGPoint();if(0>Po){var u=t(n);if(u.scrollX||u.scrollY){r=ao.select("body").append("svg").style({position:"absolute",top:0,left:0,margin:0,padding:0,border:"none"},"important");var o=r[0][0].getScreenCTM();Po=!(o.f||o.e),r.remove()}}return Po?(i.x=e.pageX,i.y=e.pageY):(i.x=e.clientX,i.y=e.clientY),i=i.matrixTransform(n.getScreenCTM().inverse()),[i.x,i.y]}var a=n.getBoundingClientRect();return[e.clientX-a.left-n.clientLeft,e.clientY-a.top-n.clientTop]}function G(){return ao.event.changedTouches[0].identifier}function K(n){return n>0?1:0>n?-1:0}function Q(n,t,e){return(t[0]-n[0])*(e[1]-n[1])-(t[1]-n[1])*(e[0]-n[0])}function nn(n){return n>1?0:-1>n?Fo:Math.acos(n)}function tn(n){return n>1?Io:-1>n?-Io:Math.asin(n)}function en(n){return((n=Math.exp(n))-1/n)/2}function rn(n){return((n=Math.exp(n))+1/n)/2}function un(n){return((n=Math.exp(2*n))-1)/(n+1)}function on(n){return(n=Math.sin(n/2))*n}function an(){}function ln(n,t,e){return this instanceof ln?(this.h=+n,this.s=+t,void(this.l=+e)):arguments.length<2?n instanceof ln?new ln(n.h,n.s,n.l):_n(""+n,wn,ln):new ln(n,t,e)}function cn(n,t,e){function r(n){return n>360?n-=360:0>n&&(n+=360),60>n?u+(o-u)*n/60:180>n?o:240>n?u+(o-u)*(240-n)/60:u}function i(n){return Math.round(255*r(n))}var u,o;return n=isNaN(n)?0:(n%=360)<0?n+360:n,t=isNaN(t)?0:0>t?0:t>1?1:t,e=0>e?0:e>1?1:e,o=.5>=e?e*(1+t):e+t-e*t,u=2*e-o,new mn(i(n+120),i(n),i(n-120))}function fn(n,t,e){return this instanceof fn?(this.h=+n,this.c=+t,void(this.l=+e)):arguments.length<2?n instanceof fn?new fn(n.h,n.c,n.l):n instanceof hn?gn(n.l,n.a,n.b):gn((n=Sn((n=ao.rgb(n)).r,n.g,n.b)).l,n.a,n.b):new fn(n,t,e)}function sn(n,t,e){return isNaN(n)&&(n=0),isNaN(t)&&(t=0),new hn(e,Math.cos(n*=Yo)*t,Math.sin(n)*t)}function hn(n,t,e){return this instanceof hn?(this.l=+n,this.a=+t,void(this.b=+e)):arguments.length<2?n instanceof hn?new hn(n.l,n.a,n.b):n instanceof fn?sn(n.h,n.c,n.l):Sn((n=mn(n)).r,n.g,n.b):new hn(n,t,e)}function pn(n,t,e){var r=(n+16)/116,i=r+t/500,u=r-e/200;return i=vn(i)*na,r=vn(r)*ta,u=vn(u)*ea,new mn(yn(3.2404542*i-1.5371385*r-.4985314*u),yn(-.969266*i+1.8760108*r+.041556*u),yn(.0556434*i-.2040259*r+1.0572252*u))}function gn(n,t,e){return n>0?new fn(Math.atan2(e,t)*Zo,Math.sqrt(t*t+e*e),n):new fn(NaN,NaN,n)}function vn(n){return n>.206893034?n*n*n:(n-4/29)/7.787037}function dn(n){return n>.008856?Math.pow(n,1/3):7.787037*n+4/29}function yn(n){return Math.round(255*(.00304>=n?12.92*n:1.055*Math.pow(n,1/2.4)-.055))}function mn(n,t,e){return this instanceof mn?(this.r=~~n,this.g=~~t,void(this.b=~~e)):arguments.length<2?n instanceof mn?new mn(n.r,n.g,n.b):_n(""+n,mn,cn):new mn(n,t,e)}function Mn(n){return new mn(n>>16,n>>8&255,255&n)}function xn(n){return Mn(n)+""}function bn(n){return 16>n?"0"+Math.max(0,n).toString(16):Math.min(255,n).toString(16)}function _n(n,t,e){var r,i,u,o=0,a=0,l=0;if(r=/([a-z]+)\((.*)\)/.exec(n=n.toLowerCase()))switch(i=r[2].split(","),r[1]){case"hsl":return e(parseFloat(i[0]),parseFloat(i[1])/100,parseFloat(i[2])/100);case"rgb":return t(Nn(i[0]),Nn(i[1]),Nn(i[2]))}return(u=ua.get(n))?t(u.r,u.g,u.b):(null==n||"#"!==n.charAt(0)||isNaN(u=parseInt(n.slice(1),16))||(4===n.length?(o=(3840&u)>>4,o=o>>4|o,a=240&u,a=a>>4|a,l=15&u,l=l<<4|l):7===n.length&&(o=(16711680&u)>>16,a=(65280&u)>>8,l=255&u)),t(o,a,l))}function wn(n,t,e){var r,i,u=Math.min(n/=255,t/=255,e/=255),o=Math.max(n,t,e),a=o-u,l=(o+u)/2;return a?(i=.5>l?a/(o+u):a/(2-o-u),r=n==o?(t-e)/a+(e>t?6:0):t==o?(e-n)/a+2:(n-t)/a+4,r*=60):(r=NaN,i=l>0&&1>l?0:r),new ln(r,i,l)}function Sn(n,t,e){n=kn(n),t=kn(t),e=kn(e);var r=dn((.4124564*n+.3575761*t+.1804375*e)/na),i=dn((.2126729*n+.7151522*t+.072175*e)/ta),u=dn((.0193339*n+.119192*t+.9503041*e)/ea);return hn(116*i-16,500*(r-i),200*(i-u))}function kn(n){return(n/=255)<=.04045?n/12.92:Math.pow((n+.055)/1.055,2.4)}function Nn(n){var t=parseFloat(n);return"%"===n.charAt(n.length-1)?Math.round(2.55*t):t}function En(n){return"function"==typeof n?n:function(){return n}}function An(n){return function(t,e,r){return 2===arguments.length&&"function"==typeof e&&(r=e,e=null),Cn(t,e,n,r)}}function Cn(n,t,e,r){function i(){var n,t=l.status;if(!t&&Ln(l)||t>=200&&300>t||304===t){try{n=e.call(u,l)}catch(r){return void o.error.call(u,r)}o.load.call(u,n)}else o.error.call(u,l)}var u={},o=ao.dispatch("beforesend","progress","load","error"),a={},l=new XMLHttpRequest,c=null;return!this.XDomainRequest||"withCredentials"in l||!/^(http(s)?:)?\/\//.test(n)||(l=new XDomainRequest),"onload"in l?l.onload=l.onerror=i:l.onreadystatechange=function(){l.readyState>3&&i()},l.onprogress=function(n){var t=ao.event;ao.event=n;try{o.progress.call(u,l)}finally{ao.event=t}},u.header=function(n,t){return n=(n+"").toLowerCase(),arguments.length<2?a[n]:(null==t?delete a[n]:a[n]=t+"",u)},u.mimeType=function(n){return arguments.length?(t=null==n?null:n+"",u):t},u.responseType=function(n){return arguments.length?(c=n,u):c},u.response=function(n){return e=n,u},["get","post"].forEach(function(n){u[n]=function(){return u.send.apply(u,[n].concat(co(arguments)))}}),u.send=function(e,r,i){if(2===arguments.length&&"function"==typeof r&&(i=r,r=null),l.open(e,n,!0),null==t||"accept"in a||(a.accept=t+",*/*"),l.setRequestHeader)for(var f in a)l.setRequestHeader(f,a[f]);return null!=t&&l.overrideMimeType&&l.overrideMimeType(t),null!=c&&(l.responseType=c),null!=i&&u.on("error",i).on("load",function(n){i(null,n)}),o.beforesend.call(u,l),l.send(null==r?null:r),u},u.abort=function(){return l.abort(),u},ao.rebind(u,o,"on"),null==r?u:u.get(zn(r))}function zn(n){return 1===n.length?function(t,e){n(null==t?e:null)}:n}function Ln(n){var t=n.responseType;return t&&"text"!==t?n.response:n.responseText}function qn(n,t,e){var r=arguments.length;2>r&&(t=0),3>r&&(e=Date.now());var i=e+t,u={c:n,t:i,n:null};return aa?aa.n=u:oa=u,aa=u,la||(ca=clearTimeout(ca),la=1,fa(Tn)),u}function Tn(){var n=Rn(),t=Dn()-n;t>24?(isFinite(t)&&(clearTimeout(ca),ca=setTimeout(Tn,t)),la=0):(la=1,fa(Tn))}function Rn(){for(var n=Date.now(),t=oa;t;)n>=t.t&&t.c(n-t.t)&&(t.c=null),t=t.n;return n}function Dn(){for(var n,t=oa,e=1/0;t;)t.c?(t.t<e&&(e=t.t),t=(n=t).n):t=n?n.n=t.n:oa=t.n;return aa=n,e}function Pn(n,t){return t-(n?Math.ceil(Math.log(n)/Math.LN10):1)}function Un(n,t){var e=Math.pow(10,3*xo(8-t));return{scale:t>8?function(n){return n/e}:function(n){return n*e},symbol:n}}function jn(n){var t=n.decimal,e=n.thousands,r=n.grouping,i=n.currency,u=r&&e?function(n,t){for(var i=n.length,u=[],o=0,a=r[0],l=0;i>0&&a>0&&(l+a+1>t&&(a=Math.max(1,t-l)),u.push(n.substring(i-=a,i+a)),!((l+=a+1)>t));)a=r[o=(o+1)%r.length];return u.reverse().join(e)}:m;return function(n){var e=ha.exec(n),r=e[1]||" ",o=e[2]||">",a=e[3]||"-",l=e[4]||"",c=e[5],f=+e[6],s=e[7],h=e[8],p=e[9],g=1,v="",d="",y=!1,m=!0;switch(h&&(h=+h.substring(1)),(c||"0"===r&&"="===o)&&(c=r="0",o="="),p){case"n":s=!0,p="g";break;case"%":g=100,d="%",p="f";break;case"p":g=100,d="%",p="r";break;case"b":case"o":case"x":case"X":"#"===l&&(v="0"+p.toLowerCase());case"c":m=!1;case"d":y=!0,h=0;break;case"s":g=-1,p="r"}"$"===l&&(v=i[0],d=i[1]),"r"!=p||h||(p="g"),null!=h&&("g"==p?h=Math.max(1,Math.min(21,h)):"e"!=p&&"f"!=p||(h=Math.max(0,Math.min(20,h)))),p=pa.get(p)||Fn;var M=c&&s;return function(n){var e=d;if(y&&n%1)return"";var i=0>n||0===n&&0>1/n?(n=-n,"-"):"-"===a?"":a;if(0>g){var l=ao.formatPrefix(n,h);n=l.scale(n),e=l.symbol+d}else n*=g;n=p(n,h);var x,b,_=n.lastIndexOf(".");if(0>_){var w=m?n.lastIndexOf("e"):-1;0>w?(x=n,b=""):(x=n.substring(0,w),b=n.substring(w))}else x=n.substring(0,_),b=t+n.substring(_+1);!c&&s&&(x=u(x,1/0));var S=v.length+x.length+b.length+(M?0:i.length),k=f>S?new Array(S=f-S+1).join(r):"";return M&&(x=u(k+x,k.length?f-b.length:1/0)),i+=v,n=x+b,("<"===o?i+n+k:">"===o?k+i+n:"^"===o?k.substring(0,S>>=1)+i+n+k.substring(S):i+(M?n:k+n))+e}}}function Fn(n){return n+""}function Hn(){this._=new Date(arguments.length>1?Date.UTC.apply(this,arguments):arguments[0])}function On(n,t,e){function r(t){var e=n(t),r=u(e,1);return r-t>t-e?e:r}function i(e){return t(e=n(new va(e-1)),1),e}function u(n,e){return t(n=new va(+n),e),n}function o(n,r,u){var o=i(n),a=[];if(u>1)for(;r>o;)e(o)%u||a.push(new Date(+o)),t(o,1);else for(;r>o;)a.push(new Date(+o)),t(o,1);return a}function a(n,t,e){try{va=Hn;var r=new Hn;return r._=n,o(r,t,e)}finally{va=Date}}n.floor=n,n.round=r,n.ceil=i,n.offset=u,n.range=o;var l=n.utc=In(n);return l.floor=l,l.round=In(r),l.ceil=In(i),l.offset=In(u),l.range=a,n}function In(n){return function(t,e){try{va=Hn;var r=new Hn;return r._=t,n(r,e)._}finally{va=Date}}}function Yn(n){function t(n){function t(t){for(var e,i,u,o=[],a=-1,l=0;++a<r;)37===n.charCodeAt(a)&&(o.push(n.slice(l,a)),null!=(i=ya[e=n.charAt(++a)])&&(e=n.charAt(++a)),(u=A[e])&&(e=u(t,null==i?"e"===e?" ":"0":i)),o.push(e),l=a+1);return o.push(n.slice(l,a)),o.join("")}var r=n.length;return t.parse=function(t){var r={y:1900,m:0,d:1,H:0,M:0,S:0,L:0,Z:null},i=e(r,n,t,0);if(i!=t.length)return null;"p"in r&&(r.H=r.H%12+12*r.p);var u=null!=r.Z&&va!==Hn,o=new(u?Hn:va);return"j"in r?o.setFullYear(r.y,0,r.j):"W"in r||"U"in r?("w"in r||(r.w="W"in r?1:0),o.setFullYear(r.y,0,1),o.setFullYear(r.y,0,"W"in r?(r.w+6)%7+7*r.W-(o.getDay()+5)%7:r.w+7*r.U-(o.getDay()+6)%7)):o.setFullYear(r.y,r.m,r.d),o.setHours(r.H+(r.Z/100|0),r.M+r.Z%100,r.S,r.L),u?o._:o},t.toString=function(){return n},t}function e(n,t,e,r){for(var i,u,o,a=0,l=t.length,c=e.length;l>a;){if(r>=c)return-1;if(i=t.charCodeAt(a++),37===i){if(o=t.charAt(a++),u=C[o in ya?t.charAt(a++):o],!u||(r=u(n,e,r))<0)return-1}else if(i!=e.charCodeAt(r++))return-1}return r}function r(n,t,e){_.lastIndex=0;var r=_.exec(t.slice(e));return r?(n.w=w.get(r[0].toLowerCase()),e+r[0].length):-1}function i(n,t,e){x.lastIndex=0;var r=x.exec(t.slice(e));return r?(n.w=b.get(r[0].toLowerCase()),e+r[0].length):-1}function u(n,t,e){N.lastIndex=0;var r=N.exec(t.slice(e));return r?(n.m=E.get(r[0].toLowerCase()),e+r[0].length):-1}function o(n,t,e){S.lastIndex=0;var r=S.exec(t.slice(e));return r?(n.m=k.get(r[0].toLowerCase()),e+r[0].length):-1}function a(n,t,r){return e(n,A.c.toString(),t,r)}function l(n,t,r){return e(n,A.x.toString(),t,r)}function c(n,t,r){return e(n,A.X.toString(),t,r)}function f(n,t,e){var r=M.get(t.slice(e,e+=2).toLowerCase());return null==r?-1:(n.p=r,e)}var s=n.dateTime,h=n.date,p=n.time,g=n.periods,v=n.days,d=n.shortDays,y=n.months,m=n.shortMonths;t.utc=function(n){function e(n){try{va=Hn;var t=new va;return t._=n,r(t)}finally{va=Date}}var r=t(n);return e.parse=function(n){try{va=Hn;var t=r.parse(n);return t&&t._}finally{va=Date}},e.toString=r.toString,e},t.multi=t.utc.multi=ct;var M=ao.map(),x=Vn(v),b=Xn(v),_=Vn(d),w=Xn(d),S=Vn(y),k=Xn(y),N=Vn(m),E=Xn(m);g.forEach(function(n,t){M.set(n.toLowerCase(),t)});var A={a:function(n){return d[n.getDay()]},A:function(n){return v[n.getDay()]},b:function(n){return m[n.getMonth()]},B:function(n){return y[n.getMonth()]},c:t(s),d:function(n,t){return Zn(n.getDate(),t,2)},e:function(n,t){return Zn(n.getDate(),t,2)},H:function(n,t){return Zn(n.getHours(),t,2)},I:function(n,t){return Zn(n.getHours()%12||12,t,2)},j:function(n,t){return Zn(1+ga.dayOfYear(n),t,3)},L:function(n,t){return Zn(n.getMilliseconds(),t,3)},m:function(n,t){return Zn(n.getMonth()+1,t,2)},M:function(n,t){return Zn(n.getMinutes(),t,2)},p:function(n){return g[+(n.getHours()>=12)]},S:function(n,t){return Zn(n.getSeconds(),t,2)},U:function(n,t){return Zn(ga.sundayOfYear(n),t,2)},w:function(n){return n.getDay()},W:function(n,t){return Zn(ga.mondayOfYear(n),t,2)},x:t(h),X:t(p),y:function(n,t){return Zn(n.getFullYear()%100,t,2)},Y:function(n,t){return Zn(n.getFullYear()%1e4,t,4)},Z:at,"%":function(){return"%"}},C={a:r,A:i,b:u,B:o,c:a,d:tt,e:tt,H:rt,I:rt,j:et,L:ot,m:nt,M:it,p:f,S:ut,U:Bn,w:$n,W:Wn,x:l,X:c,y:Gn,Y:Jn,Z:Kn,"%":lt};return t}function Zn(n,t,e){var r=0>n?"-":"",i=(r?-n:n)+"",u=i.length;return r+(e>u?new Array(e-u+1).join(t)+i:i)}function Vn(n){return new RegExp("^(?:"+n.map(ao.requote).join("|")+")","i")}function Xn(n){for(var t=new c,e=-1,r=n.length;++e<r;)t.set(n[e].toLowerCase(),e);return t}function $n(n,t,e){ma.lastIndex=0;var r=ma.exec(t.slice(e,e+1));return r?(n.w=+r[0],e+r[0].length):-1}function Bn(n,t,e){ma.lastIndex=0;var r=ma.exec(t.slice(e));return r?(n.U=+r[0],e+r[0].length):-1}function Wn(n,t,e){ma.lastIndex=0;var r=ma.exec(t.slice(e));return r?(n.W=+r[0],e+r[0].length):-1}function Jn(n,t,e){ma.lastIndex=0;var r=ma.exec(t.slice(e,e+4));return r?(n.y=+r[0],e+r[0].length):-1}function Gn(n,t,e){ma.lastIndex=0;var r=ma.exec(t.slice(e,e+2));return r?(n.y=Qn(+r[0]),e+r[0].length):-1}function Kn(n,t,e){return/^[+-]\d{4}$/.test(t=t.slice(e,e+5))?(n.Z=-t,e+5):-1}function Qn(n){return n+(n>68?1900:2e3)}function nt(n,t,e){ma.lastIndex=0;var r=ma.exec(t.slice(e,e+2));return r?(n.m=r[0]-1,e+r[0].length):-1}function tt(n,t,e){ma.lastIndex=0;var r=ma.exec(t.slice(e,e+2));return r?(n.d=+r[0],e+r[0].length):-1}function et(n,t,e){ma.lastIndex=0;var r=ma.exec(t.slice(e,e+3));return r?(n.j=+r[0],e+r[0].length):-1}function rt(n,t,e){ma.lastIndex=0;var r=ma.exec(t.slice(e,e+2));return r?(n.H=+r[0],e+r[0].length):-1}function it(n,t,e){ma.lastIndex=0;var r=ma.exec(t.slice(e,e+2));return r?(n.M=+r[0],e+r[0].length):-1}function ut(n,t,e){ma.lastIndex=0;var r=ma.exec(t.slice(e,e+2));return r?(n.S=+r[0],e+r[0].length):-1}function ot(n,t,e){ma.lastIndex=0;var r=ma.exec(t.slice(e,e+3));return r?(n.L=+r[0],e+r[0].length):-1}function at(n){var t=n.getTimezoneOffset(),e=t>0?"-":"+",r=xo(t)/60|0,i=xo(t)%60;return e+Zn(r,"0",2)+Zn(i,"0",2)}function lt(n,t,e){Ma.lastIndex=0;var r=Ma.exec(t.slice(e,e+1));return r?e+r[0].length:-1}function ct(n){for(var t=n.length,e=-1;++e<t;)n[e][0]=this(n[e][0]);return function(t){for(var e=0,r=n[e];!r[1](t);)r=n[++e];return r[0](t)}}function ft(){}function st(n,t,e){var r=e.s=n+t,i=r-n,u=r-i;e.t=n-u+(t-i)}function ht(n,t){n&&wa.hasOwnProperty(n.type)&&wa[n.type](n,t)}function pt(n,t,e){var r,i=-1,u=n.length-e;for(t.lineStart();++i<u;)r=n[i],t.point(r[0],r[1],r[2]);t.lineEnd()}function gt(n,t){var e=-1,r=n.length;for(t.polygonStart();++e<r;)pt(n[e],t,1);t.polygonEnd()}function vt(){function n(n,t){n*=Yo,t=t*Yo/2+Fo/4;var e=n-r,o=e>=0?1:-1,a=o*e,l=Math.cos(t),c=Math.sin(t),f=u*c,s=i*l+f*Math.cos(a),h=f*o*Math.sin(a);ka.add(Math.atan2(h,s)),r=n,i=l,u=c}var t,e,r,i,u;Na.point=function(o,a){Na.point=n,r=(t=o)*Yo,i=Math.cos(a=(e=a)*Yo/2+Fo/4),u=Math.sin(a)},Na.lineEnd=function(){n(t,e)}}function dt(n){var t=n[0],e=n[1],r=Math.cos(e);return[r*Math.cos(t),r*Math.sin(t),Math.sin(e)]}function yt(n,t){return n[0]*t[0]+n[1]*t[1]+n[2]*t[2]}function mt(n,t){return[n[1]*t[2]-n[2]*t[1],n[2]*t[0]-n[0]*t[2],n[0]*t[1]-n[1]*t[0]]}function Mt(n,t){n[0]+=t[0],n[1]+=t[1],n[2]+=t[2]}function xt(n,t){return[n[0]*t,n[1]*t,n[2]*t]}function bt(n){var t=Math.sqrt(n[0]*n[0]+n[1]*n[1]+n[2]*n[2]);n[0]/=t,n[1]/=t,n[2]/=t}function _t(n){return[Math.atan2(n[1],n[0]),tn(n[2])]}function wt(n,t){return xo(n[0]-t[0])<Uo&&xo(n[1]-t[1])<Uo}function St(n,t){n*=Yo;var e=Math.cos(t*=Yo);kt(e*Math.cos(n),e*Math.sin(n),Math.sin(t))}function kt(n,t,e){++Ea,Ca+=(n-Ca)/Ea,za+=(t-za)/Ea,La+=(e-La)/Ea}function Nt(){function n(n,i){n*=Yo;var u=Math.cos(i*=Yo),o=u*Math.cos(n),a=u*Math.sin(n),l=Math.sin(i),c=Math.atan2(Math.sqrt((c=e*l-r*a)*c+(c=r*o-t*l)*c+(c=t*a-e*o)*c),t*o+e*a+r*l);Aa+=c,qa+=c*(t+(t=o)),Ta+=c*(e+(e=a)),Ra+=c*(r+(r=l)),kt(t,e,r)}var t,e,r;ja.point=function(i,u){i*=Yo;var o=Math.cos(u*=Yo);t=o*Math.cos(i),e=o*Math.sin(i),r=Math.sin(u),ja.point=n,kt(t,e,r)}}function Et(){ja.point=St}function At(){function n(n,t){n*=Yo;var e=Math.cos(t*=Yo),o=e*Math.cos(n),a=e*Math.sin(n),l=Math.sin(t),c=i*l-u*a,f=u*o-r*l,s=r*a-i*o,h=Math.sqrt(c*c+f*f+s*s),p=r*o+i*a+u*l,g=h&&-nn(p)/h,v=Math.atan2(h,p);Da+=g*c,Pa+=g*f,Ua+=g*s,Aa+=v,qa+=v*(r+(r=o)),Ta+=v*(i+(i=a)),Ra+=v*(u+(u=l)),kt(r,i,u)}var t,e,r,i,u;ja.point=function(o,a){t=o,e=a,ja.point=n,o*=Yo;var l=Math.cos(a*=Yo);r=l*Math.cos(o),i=l*Math.sin(o),u=Math.sin(a),kt(r,i,u)},ja.lineEnd=function(){n(t,e),ja.lineEnd=Et,ja.point=St}}function Ct(n,t){function e(e,r){return e=n(e,r),t(e[0],e[1])}return n.invert&&t.invert&&(e.invert=function(e,r){return e=t.invert(e,r),e&&n.invert(e[0],e[1])}),e}function zt(){return!0}function Lt(n,t,e,r,i){var u=[],o=[];if(n.forEach(function(n){if(!((t=n.length-1)<=0)){var t,e=n[0],r=n[t];if(wt(e,r)){i.lineStart();for(var a=0;t>a;++a)i.point((e=n[a])[0],e[1]);return void i.lineEnd()}var l=new Tt(e,n,null,!0),c=new Tt(e,null,l,!1);l.o=c,u.push(l),o.push(c),l=new Tt(r,n,null,!1),c=new Tt(r,null,l,!0),l.o=c,u.push(l),o.push(c)}}),o.sort(t),qt(u),qt(o),u.length){for(var a=0,l=e,c=o.length;c>a;++a)o[a].e=l=!l;for(var f,s,h=u[0];;){for(var p=h,g=!0;p.v;)if((p=p.n)===h)return;f=p.z,i.lineStart();do{if(p.v=p.o.v=!0,p.e){if(g)for(var a=0,c=f.length;c>a;++a)i.point((s=f[a])[0],s[1]);else r(p.x,p.n.x,1,i);p=p.n}else{if(g){f=p.p.z;for(var a=f.length-1;a>=0;--a)i.point((s=f[a])[0],s[1])}else r(p.x,p.p.x,-1,i);p=p.p}p=p.o,f=p.z,g=!g}while(!p.v);i.lineEnd()}}}function qt(n){if(t=n.length){for(var t,e,r=0,i=n[0];++r<t;)i.n=e=n[r],e.p=i,i=e;i.n=e=n[0],e.p=i}}function Tt(n,t,e,r){this.x=n,this.z=t,this.o=e,this.e=r,this.v=!1,this.n=this.p=null}function Rt(n,t,e,r){return function(i,u){function o(t,e){var r=i(t,e);n(t=r[0],e=r[1])&&u.point(t,e)}function a(n,t){var e=i(n,t);d.point(e[0],e[1])}function l(){m.point=a,d.lineStart()}function c(){m.point=o,d.lineEnd()}function f(n,t){v.push([n,t]);var e=i(n,t);x.point(e[0],e[1])}function s(){x.lineStart(),v=[]}function h(){f(v[0][0],v[0][1]),x.lineEnd();var n,t=x.clean(),e=M.buffer(),r=e.length;if(v.pop(),g.push(v),v=null,r)if(1&t){n=e[0];var i,r=n.length-1,o=-1;if(r>0){for(b||(u.polygonStart(),b=!0),u.lineStart();++o<r;)u.point((i=n[o])[0],i[1]);u.lineEnd()}}else r>1&&2&t&&e.push(e.pop().concat(e.shift())),p.push(e.filter(Dt))}var p,g,v,d=t(u),y=i.invert(r[0],r[1]),m={point:o,lineStart:l,lineEnd:c,polygonStart:function(){m.point=f,m.lineStart=s,m.lineEnd=h,p=[],g=[]},polygonEnd:function(){m.point=o,m.lineStart=l,m.lineEnd=c,p=ao.merge(p);var n=Ot(y,g);p.length?(b||(u.polygonStart(),b=!0),Lt(p,Ut,n,e,u)):n&&(b||(u.polygonStart(),b=!0),u.lineStart(),e(null,null,1,u),u.lineEnd()),b&&(u.polygonEnd(),b=!1),p=g=null},sphere:function(){u.polygonStart(),u.lineStart(),e(null,null,1,u),u.lineEnd(),u.polygonEnd()}},M=Pt(),x=t(M),b=!1;return m}}function Dt(n){return n.length>1}function Pt(){var n,t=[];return{lineStart:function(){t.push(n=[])},point:function(t,e){n.push([t,e])},lineEnd:b,buffer:function(){var e=t;return t=[],n=null,e},rejoin:function(){t.length>1&&t.push(t.pop().concat(t.shift()))}}}function Ut(n,t){return((n=n.x)[0]<0?n[1]-Io-Uo:Io-n[1])-((t=t.x)[0]<0?t[1]-Io-Uo:Io-t[1])}function jt(n){var t,e=NaN,r=NaN,i=NaN;return{lineStart:function(){n.lineStart(),t=1},point:function(u,o){var a=u>0?Fo:-Fo,l=xo(u-e);xo(l-Fo)<Uo?(n.point(e,r=(r+o)/2>0?Io:-Io),n.point(i,r),n.lineEnd(),n.lineStart(),n.point(a,r),n.point(u,r),t=0):i!==a&&l>=Fo&&(xo(e-i)<Uo&&(e-=i*Uo),xo(u-a)<Uo&&(u-=a*Uo),r=Ft(e,r,u,o),n.point(i,r),n.lineEnd(),n.lineStart(),n.point(a,r),t=0),n.point(e=u,r=o),i=a},lineEnd:function(){n.lineEnd(),e=r=NaN},clean:function(){return 2-t}}}function Ft(n,t,e,r){var i,u,o=Math.sin(n-e);return xo(o)>Uo?Math.atan((Math.sin(t)*(u=Math.cos(r))*Math.sin(e)-Math.sin(r)*(i=Math.cos(t))*Math.sin(n))/(i*u*o)):(t+r)/2}function Ht(n,t,e,r){var i;if(null==n)i=e*Io,r.point(-Fo,i),r.point(0,i),r.point(Fo,i),r.point(Fo,0),r.point(Fo,-i),r.point(0,-i),r.point(-Fo,-i),r.point(-Fo,0),r.point(-Fo,i);else if(xo(n[0]-t[0])>Uo){var u=n[0]<t[0]?Fo:-Fo;i=e*u/2,r.point(-u,i),r.point(0,i),r.point(u,i)}else r.point(t[0],t[1])}function Ot(n,t){var e=n[0],r=n[1],i=[Math.sin(e),-Math.cos(e),0],u=0,o=0;ka.reset();for(var a=0,l=t.length;l>a;++a){var c=t[a],f=c.length;if(f)for(var s=c[0],h=s[0],p=s[1]/2+Fo/4,g=Math.sin(p),v=Math.cos(p),d=1;;){d===f&&(d=0),n=c[d];var y=n[0],m=n[1]/2+Fo/4,M=Math.sin(m),x=Math.cos(m),b=y-h,_=b>=0?1:-1,w=_*b,S=w>Fo,k=g*M;if(ka.add(Math.atan2(k*_*Math.sin(w),v*x+k*Math.cos(w))),u+=S?b+_*Ho:b,S^h>=e^y>=e){var N=mt(dt(s),dt(n));bt(N);var E=mt(i,N);bt(E);var A=(S^b>=0?-1:1)*tn(E[2]);(r>A||r===A&&(N[0]||N[1]))&&(o+=S^b>=0?1:-1)}if(!d++)break;h=y,g=M,v=x,s=n}}return(-Uo>u||Uo>u&&-Uo>ka)^1&o}function It(n){function t(n,t){return Math.cos(n)*Math.cos(t)>u}function e(n){var e,u,l,c,f;return{lineStart:function(){c=l=!1,f=1},point:function(s,h){var p,g=[s,h],v=t(s,h),d=o?v?0:i(s,h):v?i(s+(0>s?Fo:-Fo),h):0;if(!e&&(c=l=v)&&n.lineStart(),v!==l&&(p=r(e,g),(wt(e,p)||wt(g,p))&&(g[0]+=Uo,g[1]+=Uo,v=t(g[0],g[1]))),v!==l)f=0,v?(n.lineStart(),p=r(g,e),n.point(p[0],p[1])):(p=r(e,g),n.point(p[0],p[1]),n.lineEnd()),e=p;else if(a&&e&&o^v){var y;d&u||!(y=r(g,e,!0))||(f=0,o?(n.lineStart(),n.point(y[0][0],y[0][1]),n.point(y[1][0],y[1][1]),n.lineEnd()):(n.point(y[1][0],y[1][1]),n.lineEnd(),n.lineStart(),n.point(y[0][0],y[0][1])))}!v||e&&wt(e,g)||n.point(g[0],g[1]),e=g,l=v,u=d},lineEnd:function(){l&&n.lineEnd(),e=null},clean:function(){return f|(c&&l)<<1}}}function r(n,t,e){var r=dt(n),i=dt(t),o=[1,0,0],a=mt(r,i),l=yt(a,a),c=a[0],f=l-c*c;if(!f)return!e&&n;var s=u*l/f,h=-u*c/f,p=mt(o,a),g=xt(o,s),v=xt(a,h);Mt(g,v);var d=p,y=yt(g,d),m=yt(d,d),M=y*y-m*(yt(g,g)-1);if(!(0>M)){var x=Math.sqrt(M),b=xt(d,(-y-x)/m);if(Mt(b,g),b=_t(b),!e)return b;var _,w=n[0],S=t[0],k=n[1],N=t[1];w>S&&(_=w,w=S,S=_);var E=S-w,A=xo(E-Fo)<Uo,C=A||Uo>E;if(!A&&k>N&&(_=k,k=N,N=_),C?A?k+N>0^b[1]<(xo(b[0]-w)<Uo?k:N):k<=b[1]&&b[1]<=N:E>Fo^(w<=b[0]&&b[0]<=S)){var z=xt(d,(-y+x)/m);return Mt(z,g),[b,_t(z)]}}}function i(t,e){var r=o?n:Fo-n,i=0;return-r>t?i|=1:t>r&&(i|=2),-r>e?i|=4:e>r&&(i|=8),i}var u=Math.cos(n),o=u>0,a=xo(u)>Uo,l=ve(n,6*Yo);return Rt(t,e,l,o?[0,-n]:[-Fo,n-Fo])}function Yt(n,t,e,r){return function(i){var u,o=i.a,a=i.b,l=o.x,c=o.y,f=a.x,s=a.y,h=0,p=1,g=f-l,v=s-c;if(u=n-l,g||!(u>0)){if(u/=g,0>g){if(h>u)return;p>u&&(p=u)}else if(g>0){if(u>p)return;u>h&&(h=u)}if(u=e-l,g||!(0>u)){if(u/=g,0>g){if(u>p)return;u>h&&(h=u)}else if(g>0){if(h>u)return;p>u&&(p=u)}if(u=t-c,v||!(u>0)){if(u/=v,0>v){if(h>u)return;p>u&&(p=u)}else if(v>0){if(u>p)return;u>h&&(h=u)}if(u=r-c,v||!(0>u)){if(u/=v,0>v){if(u>p)return;u>h&&(h=u)}else if(v>0){if(h>u)return;p>u&&(p=u)}return h>0&&(i.a={x:l+h*g,y:c+h*v}),1>p&&(i.b={x:l+p*g,y:c+p*v}),i}}}}}}function Zt(n,t,e,r){function i(r,i){return xo(r[0]-n)<Uo?i>0?0:3:xo(r[0]-e)<Uo?i>0?2:1:xo(r[1]-t)<Uo?i>0?1:0:i>0?3:2}function u(n,t){return o(n.x,t.x)}function o(n,t){var e=i(n,1),r=i(t,1);return e!==r?e-r:0===e?t[1]-n[1]:1===e?n[0]-t[0]:2===e?n[1]-t[1]:t[0]-n[0]}return function(a){function l(n){for(var t=0,e=d.length,r=n[1],i=0;e>i;++i)for(var u,o=1,a=d[i],l=a.length,c=a[0];l>o;++o)u=a[o],c[1]<=r?u[1]>r&&Q(c,u,n)>0&&++t:u[1]<=r&&Q(c,u,n)<0&&--t,c=u;return 0!==t}function c(u,a,l,c){var f=0,s=0;if(null==u||(f=i(u,l))!==(s=i(a,l))||o(u,a)<0^l>0){do c.point(0===f||3===f?n:e,f>1?r:t);while((f=(f+l+4)%4)!==s)}else c.point(a[0],a[1])}function f(i,u){return i>=n&&e>=i&&u>=t&&r>=u}function s(n,t){f(n,t)&&a.point(n,t)}function h(){C.point=g,d&&d.push(y=[]),S=!0,w=!1,b=_=NaN}function p(){v&&(g(m,M),x&&w&&E.rejoin(),v.push(E.buffer())),C.point=s,w&&a.lineEnd()}function g(n,t){n=Math.max(-Ha,Math.min(Ha,n)),t=Math.max(-Ha,Math.min(Ha,t));var e=f(n,t);if(d&&y.push([n,t]),S)m=n,M=t,x=e,S=!1,e&&(a.lineStart(),a.point(n,t));else if(e&&w)a.point(n,t);else{var r={a:{x:b,y:_},b:{x:n,y:t}};A(r)?(w||(a.lineStart(),a.point(r.a.x,r.a.y)),a.point(r.b.x,r.b.y),e||a.lineEnd(),k=!1):e&&(a.lineStart(),a.point(n,t),k=!1)}b=n,_=t,w=e}var v,d,y,m,M,x,b,_,w,S,k,N=a,E=Pt(),A=Yt(n,t,e,r),C={point:s,lineStart:h,lineEnd:p,polygonStart:function(){a=E,v=[],d=[],k=!0},polygonEnd:function(){a=N,v=ao.merge(v);var t=l([n,r]),e=k&&t,i=v.length;(e||i)&&(a.polygonStart(),e&&(a.lineStart(),c(null,null,1,a),a.lineEnd()),i&&Lt(v,u,t,c,a),a.polygonEnd()),v=d=y=null}};return C}}function Vt(n){var t=0,e=Fo/3,r=ae(n),i=r(t,e);return i.parallels=function(n){return arguments.length?r(t=n[0]*Fo/180,e=n[1]*Fo/180):[t/Fo*180,e/Fo*180]},i}function Xt(n,t){function e(n,t){var e=Math.sqrt(u-2*i*Math.sin(t))/i;return[e*Math.sin(n*=i),o-e*Math.cos(n)]}var r=Math.sin(n),i=(r+Math.sin(t))/2,u=1+r*(2*i-r),o=Math.sqrt(u)/i;return e.invert=function(n,t){var e=o-t;return[Math.atan2(n,e)/i,tn((u-(n*n+e*e)*i*i)/(2*i))]},e}function $t(){function n(n,t){Ia+=i*n-r*t,r=n,i=t}var t,e,r,i;$a.point=function(u,o){$a.point=n,t=r=u,e=i=o},$a.lineEnd=function(){n(t,e)}}function Bt(n,t){Ya>n&&(Ya=n),n>Va&&(Va=n),Za>t&&(Za=t),t>Xa&&(Xa=t)}function Wt(){function n(n,t){o.push("M",n,",",t,u)}function t(n,t){o.push("M",n,",",t),a.point=e}function e(n,t){o.push("L",n,",",t)}function r(){a.point=n}function i(){o.push("Z")}var u=Jt(4.5),o=[],a={point:n,lineStart:function(){a.point=t},lineEnd:r,polygonStart:function(){a.lineEnd=i},polygonEnd:function(){a.lineEnd=r,a.point=n},pointRadius:function(n){return u=Jt(n),a},result:function(){if(o.length){var n=o.join("");return o=[],n}}};return a}function Jt(n){return"m0,"+n+"a"+n+","+n+" 0 1,1 0,"+-2*n+"a"+n+","+n+" 0 1,1 0,"+2*n+"z"}function Gt(n,t){Ca+=n,za+=t,++La}function Kt(){function n(n,r){var i=n-t,u=r-e,o=Math.sqrt(i*i+u*u);qa+=o*(t+n)/2,Ta+=o*(e+r)/2,Ra+=o,Gt(t=n,e=r)}var t,e;Wa.point=function(r,i){Wa.point=n,Gt(t=r,e=i)}}function Qt(){Wa.point=Gt}function ne(){function n(n,t){var e=n-r,u=t-i,o=Math.sqrt(e*e+u*u);qa+=o*(r+n)/2,Ta+=o*(i+t)/2,Ra+=o,o=i*n-r*t,Da+=o*(r+n),Pa+=o*(i+t),Ua+=3*o,Gt(r=n,i=t)}var t,e,r,i;Wa.point=function(u,o){Wa.point=n,Gt(t=r=u,e=i=o)},Wa.lineEnd=function(){n(t,e)}}function te(n){function t(t,e){n.moveTo(t+o,e),n.arc(t,e,o,0,Ho)}function e(t,e){n.moveTo(t,e),a.point=r}function r(t,e){n.lineTo(t,e)}function i(){a.point=t}function u(){n.closePath()}var o=4.5,a={point:t,lineStart:function(){a.point=e},lineEnd:i,polygonStart:function(){a.lineEnd=u},polygonEnd:function(){a.lineEnd=i,a.point=t},pointRadius:function(n){return o=n,a},result:b};return a}function ee(n){function t(n){return(a?r:e)(n)}function e(t){return ue(t,function(e,r){e=n(e,r),t.point(e[0],e[1])})}function r(t){function e(e,r){e=n(e,r),t.point(e[0],e[1])}function r(){M=NaN,S.point=u,t.lineStart()}function u(e,r){var u=dt([e,r]),o=n(e,r);i(M,x,m,b,_,w,M=o[0],x=o[1],m=e,b=u[0],_=u[1],w=u[2],a,t),t.point(M,x)}function o(){S.point=e,t.lineEnd()}function l(){
+r(),S.point=c,S.lineEnd=f}function c(n,t){u(s=n,h=t),p=M,g=x,v=b,d=_,y=w,S.point=u}function f(){i(M,x,m,b,_,w,p,g,s,v,d,y,a,t),S.lineEnd=o,o()}var s,h,p,g,v,d,y,m,M,x,b,_,w,S={point:e,lineStart:r,lineEnd:o,polygonStart:function(){t.polygonStart(),S.lineStart=l},polygonEnd:function(){t.polygonEnd(),S.lineStart=r}};return S}function i(t,e,r,a,l,c,f,s,h,p,g,v,d,y){var m=f-t,M=s-e,x=m*m+M*M;if(x>4*u&&d--){var b=a+p,_=l+g,w=c+v,S=Math.sqrt(b*b+_*_+w*w),k=Math.asin(w/=S),N=xo(xo(w)-1)<Uo||xo(r-h)<Uo?(r+h)/2:Math.atan2(_,b),E=n(N,k),A=E[0],C=E[1],z=A-t,L=C-e,q=M*z-m*L;(q*q/x>u||xo((m*z+M*L)/x-.5)>.3||o>a*p+l*g+c*v)&&(i(t,e,r,a,l,c,A,C,N,b/=S,_/=S,w,d,y),y.point(A,C),i(A,C,N,b,_,w,f,s,h,p,g,v,d,y))}}var u=.5,o=Math.cos(30*Yo),a=16;return t.precision=function(n){return arguments.length?(a=(u=n*n)>0&&16,t):Math.sqrt(u)},t}function re(n){var t=ee(function(t,e){return n([t*Zo,e*Zo])});return function(n){return le(t(n))}}function ie(n){this.stream=n}function ue(n,t){return{point:t,sphere:function(){n.sphere()},lineStart:function(){n.lineStart()},lineEnd:function(){n.lineEnd()},polygonStart:function(){n.polygonStart()},polygonEnd:function(){n.polygonEnd()}}}function oe(n){return ae(function(){return n})()}function ae(n){function t(n){return n=a(n[0]*Yo,n[1]*Yo),[n[0]*h+l,c-n[1]*h]}function e(n){return n=a.invert((n[0]-l)/h,(c-n[1])/h),n&&[n[0]*Zo,n[1]*Zo]}function r(){a=Ct(o=se(y,M,x),u);var n=u(v,d);return l=p-n[0]*h,c=g+n[1]*h,i()}function i(){return f&&(f.valid=!1,f=null),t}var u,o,a,l,c,f,s=ee(function(n,t){return n=u(n,t),[n[0]*h+l,c-n[1]*h]}),h=150,p=480,g=250,v=0,d=0,y=0,M=0,x=0,b=Fa,_=m,w=null,S=null;return t.stream=function(n){return f&&(f.valid=!1),f=le(b(o,s(_(n)))),f.valid=!0,f},t.clipAngle=function(n){return arguments.length?(b=null==n?(w=n,Fa):It((w=+n)*Yo),i()):w},t.clipExtent=function(n){return arguments.length?(S=n,_=n?Zt(n[0][0],n[0][1],n[1][0],n[1][1]):m,i()):S},t.scale=function(n){return arguments.length?(h=+n,r()):h},t.translate=function(n){return arguments.length?(p=+n[0],g=+n[1],r()):[p,g]},t.center=function(n){return arguments.length?(v=n[0]%360*Yo,d=n[1]%360*Yo,r()):[v*Zo,d*Zo]},t.rotate=function(n){return arguments.length?(y=n[0]%360*Yo,M=n[1]%360*Yo,x=n.length>2?n[2]%360*Yo:0,r()):[y*Zo,M*Zo,x*Zo]},ao.rebind(t,s,"precision"),function(){return u=n.apply(this,arguments),t.invert=u.invert&&e,r()}}function le(n){return ue(n,function(t,e){n.point(t*Yo,e*Yo)})}function ce(n,t){return[n,t]}function fe(n,t){return[n>Fo?n-Ho:-Fo>n?n+Ho:n,t]}function se(n,t,e){return n?t||e?Ct(pe(n),ge(t,e)):pe(n):t||e?ge(t,e):fe}function he(n){return function(t,e){return t+=n,[t>Fo?t-Ho:-Fo>t?t+Ho:t,e]}}function pe(n){var t=he(n);return t.invert=he(-n),t}function ge(n,t){function e(n,t){var e=Math.cos(t),a=Math.cos(n)*e,l=Math.sin(n)*e,c=Math.sin(t),f=c*r+a*i;return[Math.atan2(l*u-f*o,a*r-c*i),tn(f*u+l*o)]}var r=Math.cos(n),i=Math.sin(n),u=Math.cos(t),o=Math.sin(t);return e.invert=function(n,t){var e=Math.cos(t),a=Math.cos(n)*e,l=Math.sin(n)*e,c=Math.sin(t),f=c*u-l*o;return[Math.atan2(l*u+c*o,a*r+f*i),tn(f*r-a*i)]},e}function ve(n,t){var e=Math.cos(n),r=Math.sin(n);return function(i,u,o,a){var l=o*t;null!=i?(i=de(e,i),u=de(e,u),(o>0?u>i:i>u)&&(i+=o*Ho)):(i=n+o*Ho,u=n-.5*l);for(var c,f=i;o>0?f>u:u>f;f-=l)a.point((c=_t([e,-r*Math.cos(f),-r*Math.sin(f)]))[0],c[1])}}function de(n,t){var e=dt(t);e[0]-=n,bt(e);var r=nn(-e[1]);return((-e[2]<0?-r:r)+2*Math.PI-Uo)%(2*Math.PI)}function ye(n,t,e){var r=ao.range(n,t-Uo,e).concat(t);return function(n){return r.map(function(t){return[n,t]})}}function me(n,t,e){var r=ao.range(n,t-Uo,e).concat(t);return function(n){return r.map(function(t){return[t,n]})}}function Me(n){return n.source}function xe(n){return n.target}function be(n,t,e,r){var i=Math.cos(t),u=Math.sin(t),o=Math.cos(r),a=Math.sin(r),l=i*Math.cos(n),c=i*Math.sin(n),f=o*Math.cos(e),s=o*Math.sin(e),h=2*Math.asin(Math.sqrt(on(r-t)+i*o*on(e-n))),p=1/Math.sin(h),g=h?function(n){var t=Math.sin(n*=h)*p,e=Math.sin(h-n)*p,r=e*l+t*f,i=e*c+t*s,o=e*u+t*a;return[Math.atan2(i,r)*Zo,Math.atan2(o,Math.sqrt(r*r+i*i))*Zo]}:function(){return[n*Zo,t*Zo]};return g.distance=h,g}function _e(){function n(n,i){var u=Math.sin(i*=Yo),o=Math.cos(i),a=xo((n*=Yo)-t),l=Math.cos(a);Ja+=Math.atan2(Math.sqrt((a=o*Math.sin(a))*a+(a=r*u-e*o*l)*a),e*u+r*o*l),t=n,e=u,r=o}var t,e,r;Ga.point=function(i,u){t=i*Yo,e=Math.sin(u*=Yo),r=Math.cos(u),Ga.point=n},Ga.lineEnd=function(){Ga.point=Ga.lineEnd=b}}function we(n,t){function e(t,e){var r=Math.cos(t),i=Math.cos(e),u=n(r*i);return[u*i*Math.sin(t),u*Math.sin(e)]}return e.invert=function(n,e){var r=Math.sqrt(n*n+e*e),i=t(r),u=Math.sin(i),o=Math.cos(i);return[Math.atan2(n*u,r*o),Math.asin(r&&e*u/r)]},e}function Se(n,t){function e(n,t){o>0?-Io+Uo>t&&(t=-Io+Uo):t>Io-Uo&&(t=Io-Uo);var e=o/Math.pow(i(t),u);return[e*Math.sin(u*n),o-e*Math.cos(u*n)]}var r=Math.cos(n),i=function(n){return Math.tan(Fo/4+n/2)},u=n===t?Math.sin(n):Math.log(r/Math.cos(t))/Math.log(i(t)/i(n)),o=r*Math.pow(i(n),u)/u;return u?(e.invert=function(n,t){var e=o-t,r=K(u)*Math.sqrt(n*n+e*e);return[Math.atan2(n,e)/u,2*Math.atan(Math.pow(o/r,1/u))-Io]},e):Ne}function ke(n,t){function e(n,t){var e=u-t;return[e*Math.sin(i*n),u-e*Math.cos(i*n)]}var r=Math.cos(n),i=n===t?Math.sin(n):(r-Math.cos(t))/(t-n),u=r/i+n;return xo(i)<Uo?ce:(e.invert=function(n,t){var e=u-t;return[Math.atan2(n,e)/i,u-K(i)*Math.sqrt(n*n+e*e)]},e)}function Ne(n,t){return[n,Math.log(Math.tan(Fo/4+t/2))]}function Ee(n){var t,e=oe(n),r=e.scale,i=e.translate,u=e.clipExtent;return e.scale=function(){var n=r.apply(e,arguments);return n===e?t?e.clipExtent(null):e:n},e.translate=function(){var n=i.apply(e,arguments);return n===e?t?e.clipExtent(null):e:n},e.clipExtent=function(n){var o=u.apply(e,arguments);if(o===e){if(t=null==n){var a=Fo*r(),l=i();u([[l[0]-a,l[1]-a],[l[0]+a,l[1]+a]])}}else t&&(o=null);return o},e.clipExtent(null)}function Ae(n,t){return[Math.log(Math.tan(Fo/4+t/2)),-n]}function Ce(n){return n[0]}function ze(n){return n[1]}function Le(n){for(var t=n.length,e=[0,1],r=2,i=2;t>i;i++){for(;r>1&&Q(n[e[r-2]],n[e[r-1]],n[i])<=0;)--r;e[r++]=i}return e.slice(0,r)}function qe(n,t){return n[0]-t[0]||n[1]-t[1]}function Te(n,t,e){return(e[0]-t[0])*(n[1]-t[1])<(e[1]-t[1])*(n[0]-t[0])}function Re(n,t,e,r){var i=n[0],u=e[0],o=t[0]-i,a=r[0]-u,l=n[1],c=e[1],f=t[1]-l,s=r[1]-c,h=(a*(l-c)-s*(i-u))/(s*o-a*f);return[i+h*o,l+h*f]}function De(n){var t=n[0],e=n[n.length-1];return!(t[0]-e[0]||t[1]-e[1])}function Pe(){rr(this),this.edge=this.site=this.circle=null}function Ue(n){var t=cl.pop()||new Pe;return t.site=n,t}function je(n){Be(n),ol.remove(n),cl.push(n),rr(n)}function Fe(n){var t=n.circle,e=t.x,r=t.cy,i={x:e,y:r},u=n.P,o=n.N,a=[n];je(n);for(var l=u;l.circle&&xo(e-l.circle.x)<Uo&&xo(r-l.circle.cy)<Uo;)u=l.P,a.unshift(l),je(l),l=u;a.unshift(l),Be(l);for(var c=o;c.circle&&xo(e-c.circle.x)<Uo&&xo(r-c.circle.cy)<Uo;)o=c.N,a.push(c),je(c),c=o;a.push(c),Be(c);var f,s=a.length;for(f=1;s>f;++f)c=a[f],l=a[f-1],nr(c.edge,l.site,c.site,i);l=a[0],c=a[s-1],c.edge=Ke(l.site,c.site,null,i),$e(l),$e(c)}function He(n){for(var t,e,r,i,u=n.x,o=n.y,a=ol._;a;)if(r=Oe(a,o)-u,r>Uo)a=a.L;else{if(i=u-Ie(a,o),!(i>Uo)){r>-Uo?(t=a.P,e=a):i>-Uo?(t=a,e=a.N):t=e=a;break}if(!a.R){t=a;break}a=a.R}var l=Ue(n);if(ol.insert(t,l),t||e){if(t===e)return Be(t),e=Ue(t.site),ol.insert(l,e),l.edge=e.edge=Ke(t.site,l.site),$e(t),void $e(e);if(!e)return void(l.edge=Ke(t.site,l.site));Be(t),Be(e);var c=t.site,f=c.x,s=c.y,h=n.x-f,p=n.y-s,g=e.site,v=g.x-f,d=g.y-s,y=2*(h*d-p*v),m=h*h+p*p,M=v*v+d*d,x={x:(d*m-p*M)/y+f,y:(h*M-v*m)/y+s};nr(e.edge,c,g,x),l.edge=Ke(c,n,null,x),e.edge=Ke(n,g,null,x),$e(t),$e(e)}}function Oe(n,t){var e=n.site,r=e.x,i=e.y,u=i-t;if(!u)return r;var o=n.P;if(!o)return-(1/0);e=o.site;var a=e.x,l=e.y,c=l-t;if(!c)return a;var f=a-r,s=1/u-1/c,h=f/c;return s?(-h+Math.sqrt(h*h-2*s*(f*f/(-2*c)-l+c/2+i-u/2)))/s+r:(r+a)/2}function Ie(n,t){var e=n.N;if(e)return Oe(e,t);var r=n.site;return r.y===t?r.x:1/0}function Ye(n){this.site=n,this.edges=[]}function Ze(n){for(var t,e,r,i,u,o,a,l,c,f,s=n[0][0],h=n[1][0],p=n[0][1],g=n[1][1],v=ul,d=v.length;d--;)if(u=v[d],u&&u.prepare())for(a=u.edges,l=a.length,o=0;l>o;)f=a[o].end(),r=f.x,i=f.y,c=a[++o%l].start(),t=c.x,e=c.y,(xo(r-t)>Uo||xo(i-e)>Uo)&&(a.splice(o,0,new tr(Qe(u.site,f,xo(r-s)<Uo&&g-i>Uo?{x:s,y:xo(t-s)<Uo?e:g}:xo(i-g)<Uo&&h-r>Uo?{x:xo(e-g)<Uo?t:h,y:g}:xo(r-h)<Uo&&i-p>Uo?{x:h,y:xo(t-h)<Uo?e:p}:xo(i-p)<Uo&&r-s>Uo?{x:xo(e-p)<Uo?t:s,y:p}:null),u.site,null)),++l)}function Ve(n,t){return t.angle-n.angle}function Xe(){rr(this),this.x=this.y=this.arc=this.site=this.cy=null}function $e(n){var t=n.P,e=n.N;if(t&&e){var r=t.site,i=n.site,u=e.site;if(r!==u){var o=i.x,a=i.y,l=r.x-o,c=r.y-a,f=u.x-o,s=u.y-a,h=2*(l*s-c*f);if(!(h>=-jo)){var p=l*l+c*c,g=f*f+s*s,v=(s*p-c*g)/h,d=(l*g-f*p)/h,s=d+a,y=fl.pop()||new Xe;y.arc=n,y.site=i,y.x=v+o,y.y=s+Math.sqrt(v*v+d*d),y.cy=s,n.circle=y;for(var m=null,M=ll._;M;)if(y.y<M.y||y.y===M.y&&y.x<=M.x){if(!M.L){m=M.P;break}M=M.L}else{if(!M.R){m=M;break}M=M.R}ll.insert(m,y),m||(al=y)}}}}function Be(n){var t=n.circle;t&&(t.P||(al=t.N),ll.remove(t),fl.push(t),rr(t),n.circle=null)}function We(n){for(var t,e=il,r=Yt(n[0][0],n[0][1],n[1][0],n[1][1]),i=e.length;i--;)t=e[i],(!Je(t,n)||!r(t)||xo(t.a.x-t.b.x)<Uo&&xo(t.a.y-t.b.y)<Uo)&&(t.a=t.b=null,e.splice(i,1))}function Je(n,t){var e=n.b;if(e)return!0;var r,i,u=n.a,o=t[0][0],a=t[1][0],l=t[0][1],c=t[1][1],f=n.l,s=n.r,h=f.x,p=f.y,g=s.x,v=s.y,d=(h+g)/2,y=(p+v)/2;if(v===p){if(o>d||d>=a)return;if(h>g){if(u){if(u.y>=c)return}else u={x:d,y:l};e={x:d,y:c}}else{if(u){if(u.y<l)return}else u={x:d,y:c};e={x:d,y:l}}}else if(r=(h-g)/(v-p),i=y-r*d,-1>r||r>1)if(h>g){if(u){if(u.y>=c)return}else u={x:(l-i)/r,y:l};e={x:(c-i)/r,y:c}}else{if(u){if(u.y<l)return}else u={x:(c-i)/r,y:c};e={x:(l-i)/r,y:l}}else if(v>p){if(u){if(u.x>=a)return}else u={x:o,y:r*o+i};e={x:a,y:r*a+i}}else{if(u){if(u.x<o)return}else u={x:a,y:r*a+i};e={x:o,y:r*o+i}}return n.a=u,n.b=e,!0}function Ge(n,t){this.l=n,this.r=t,this.a=this.b=null}function Ke(n,t,e,r){var i=new Ge(n,t);return il.push(i),e&&nr(i,n,t,e),r&&nr(i,t,n,r),ul[n.i].edges.push(new tr(i,n,t)),ul[t.i].edges.push(new tr(i,t,n)),i}function Qe(n,t,e){var r=new Ge(n,null);return r.a=t,r.b=e,il.push(r),r}function nr(n,t,e,r){n.a||n.b?n.l===e?n.b=r:n.a=r:(n.a=r,n.l=t,n.r=e)}function tr(n,t,e){var r=n.a,i=n.b;this.edge=n,this.site=t,this.angle=e?Math.atan2(e.y-t.y,e.x-t.x):n.l===t?Math.atan2(i.x-r.x,r.y-i.y):Math.atan2(r.x-i.x,i.y-r.y)}function er(){this._=null}function rr(n){n.U=n.C=n.L=n.R=n.P=n.N=null}function ir(n,t){var e=t,r=t.R,i=e.U;i?i.L===e?i.L=r:i.R=r:n._=r,r.U=i,e.U=r,e.R=r.L,e.R&&(e.R.U=e),r.L=e}function ur(n,t){var e=t,r=t.L,i=e.U;i?i.L===e?i.L=r:i.R=r:n._=r,r.U=i,e.U=r,e.L=r.R,e.L&&(e.L.U=e),r.R=e}function or(n){for(;n.L;)n=n.L;return n}function ar(n,t){var e,r,i,u=n.sort(lr).pop();for(il=[],ul=new Array(n.length),ol=new er,ll=new er;;)if(i=al,u&&(!i||u.y<i.y||u.y===i.y&&u.x<i.x))u.x===e&&u.y===r||(ul[u.i]=new Ye(u),He(u),e=u.x,r=u.y),u=n.pop();else{if(!i)break;Fe(i.arc)}t&&(We(t),Ze(t));var o={cells:ul,edges:il};return ol=ll=il=ul=null,o}function lr(n,t){return t.y-n.y||t.x-n.x}function cr(n,t,e){return(n.x-e.x)*(t.y-n.y)-(n.x-t.x)*(e.y-n.y)}function fr(n){return n.x}function sr(n){return n.y}function hr(){return{leaf:!0,nodes:[],point:null,x:null,y:null}}function pr(n,t,e,r,i,u){if(!n(t,e,r,i,u)){var o=.5*(e+i),a=.5*(r+u),l=t.nodes;l[0]&&pr(n,l[0],e,r,o,a),l[1]&&pr(n,l[1],o,r,i,a),l[2]&&pr(n,l[2],e,a,o,u),l[3]&&pr(n,l[3],o,a,i,u)}}function gr(n,t,e,r,i,u,o){var a,l=1/0;return function c(n,f,s,h,p){if(!(f>u||s>o||r>h||i>p)){if(g=n.point){var g,v=t-n.x,d=e-n.y,y=v*v+d*d;if(l>y){var m=Math.sqrt(l=y);r=t-m,i=e-m,u=t+m,o=e+m,a=g}}for(var M=n.nodes,x=.5*(f+h),b=.5*(s+p),_=t>=x,w=e>=b,S=w<<1|_,k=S+4;k>S;++S)if(n=M[3&S])switch(3&S){case 0:c(n,f,s,x,b);break;case 1:c(n,x,s,h,b);break;case 2:c(n,f,b,x,p);break;case 3:c(n,x,b,h,p)}}}(n,r,i,u,o),a}function vr(n,t){n=ao.rgb(n),t=ao.rgb(t);var e=n.r,r=n.g,i=n.b,u=t.r-e,o=t.g-r,a=t.b-i;return function(n){return"#"+bn(Math.round(e+u*n))+bn(Math.round(r+o*n))+bn(Math.round(i+a*n))}}function dr(n,t){var e,r={},i={};for(e in n)e in t?r[e]=Mr(n[e],t[e]):i[e]=n[e];for(e in t)e in n||(i[e]=t[e]);return function(n){for(e in r)i[e]=r[e](n);return i}}function yr(n,t){return n=+n,t=+t,function(e){return n*(1-e)+t*e}}function mr(n,t){var e,r,i,u=hl.lastIndex=pl.lastIndex=0,o=-1,a=[],l=[];for(n+="",t+="";(e=hl.exec(n))&&(r=pl.exec(t));)(i=r.index)>u&&(i=t.slice(u,i),a[o]?a[o]+=i:a[++o]=i),(e=e[0])===(r=r[0])?a[o]?a[o]+=r:a[++o]=r:(a[++o]=null,l.push({i:o,x:yr(e,r)})),u=pl.lastIndex;return u<t.length&&(i=t.slice(u),a[o]?a[o]+=i:a[++o]=i),a.length<2?l[0]?(t=l[0].x,function(n){return t(n)+""}):function(){return t}:(t=l.length,function(n){for(var e,r=0;t>r;++r)a[(e=l[r]).i]=e.x(n);return a.join("")})}function Mr(n,t){for(var e,r=ao.interpolators.length;--r>=0&&!(e=ao.interpolators[r](n,t)););return e}function xr(n,t){var e,r=[],i=[],u=n.length,o=t.length,a=Math.min(n.length,t.length);for(e=0;a>e;++e)r.push(Mr(n[e],t[e]));for(;u>e;++e)i[e]=n[e];for(;o>e;++e)i[e]=t[e];return function(n){for(e=0;a>e;++e)i[e]=r[e](n);return i}}function br(n){return function(t){return 0>=t?0:t>=1?1:n(t)}}function _r(n){return function(t){return 1-n(1-t)}}function wr(n){return function(t){return.5*(.5>t?n(2*t):2-n(2-2*t))}}function Sr(n){return n*n}function kr(n){return n*n*n}function Nr(n){if(0>=n)return 0;if(n>=1)return 1;var t=n*n,e=t*n;return 4*(.5>n?e:3*(n-t)+e-.75)}function Er(n){return function(t){return Math.pow(t,n)}}function Ar(n){return 1-Math.cos(n*Io)}function Cr(n){return Math.pow(2,10*(n-1))}function zr(n){return 1-Math.sqrt(1-n*n)}function Lr(n,t){var e;return arguments.length<2&&(t=.45),arguments.length?e=t/Ho*Math.asin(1/n):(n=1,e=t/4),function(r){return 1+n*Math.pow(2,-10*r)*Math.sin((r-e)*Ho/t)}}function qr(n){return n||(n=1.70158),function(t){return t*t*((n+1)*t-n)}}function Tr(n){return 1/2.75>n?7.5625*n*n:2/2.75>n?7.5625*(n-=1.5/2.75)*n+.75:2.5/2.75>n?7.5625*(n-=2.25/2.75)*n+.9375:7.5625*(n-=2.625/2.75)*n+.984375}function Rr(n,t){n=ao.hcl(n),t=ao.hcl(t);var e=n.h,r=n.c,i=n.l,u=t.h-e,o=t.c-r,a=t.l-i;return isNaN(o)&&(o=0,r=isNaN(r)?t.c:r),isNaN(u)?(u=0,e=isNaN(e)?t.h:e):u>180?u-=360:-180>u&&(u+=360),function(n){return sn(e+u*n,r+o*n,i+a*n)+""}}function Dr(n,t){n=ao.hsl(n),t=ao.hsl(t);var e=n.h,r=n.s,i=n.l,u=t.h-e,o=t.s-r,a=t.l-i;return isNaN(o)&&(o=0,r=isNaN(r)?t.s:r),isNaN(u)?(u=0,e=isNaN(e)?t.h:e):u>180?u-=360:-180>u&&(u+=360),function(n){return cn(e+u*n,r+o*n,i+a*n)+""}}function Pr(n,t){n=ao.lab(n),t=ao.lab(t);var e=n.l,r=n.a,i=n.b,u=t.l-e,o=t.a-r,a=t.b-i;return function(n){return pn(e+u*n,r+o*n,i+a*n)+""}}function Ur(n,t){return t-=n,function(e){return Math.round(n+t*e)}}function jr(n){var t=[n.a,n.b],e=[n.c,n.d],r=Hr(t),i=Fr(t,e),u=Hr(Or(e,t,-i))||0;t[0]*e[1]<e[0]*t[1]&&(t[0]*=-1,t[1]*=-1,r*=-1,i*=-1),this.rotate=(r?Math.atan2(t[1],t[0]):Math.atan2(-e[0],e[1]))*Zo,this.translate=[n.e,n.f],this.scale=[r,u],this.skew=u?Math.atan2(i,u)*Zo:0}function Fr(n,t){return n[0]*t[0]+n[1]*t[1]}function Hr(n){var t=Math.sqrt(Fr(n,n));return t&&(n[0]/=t,n[1]/=t),t}function Or(n,t,e){return n[0]+=e*t[0],n[1]+=e*t[1],n}function Ir(n){return n.length?n.pop()+",":""}function Yr(n,t,e,r){if(n[0]!==t[0]||n[1]!==t[1]){var i=e.push("translate(",null,",",null,")");r.push({i:i-4,x:yr(n[0],t[0])},{i:i-2,x:yr(n[1],t[1])})}else(t[0]||t[1])&&e.push("translate("+t+")")}function Zr(n,t,e,r){n!==t?(n-t>180?t+=360:t-n>180&&(n+=360),r.push({i:e.push(Ir(e)+"rotate(",null,")")-2,x:yr(n,t)})):t&&e.push(Ir(e)+"rotate("+t+")")}function Vr(n,t,e,r){n!==t?r.push({i:e.push(Ir(e)+"skewX(",null,")")-2,x:yr(n,t)}):t&&e.push(Ir(e)+"skewX("+t+")")}function Xr(n,t,e,r){if(n[0]!==t[0]||n[1]!==t[1]){var i=e.push(Ir(e)+"scale(",null,",",null,")");r.push({i:i-4,x:yr(n[0],t[0])},{i:i-2,x:yr(n[1],t[1])})}else 1===t[0]&&1===t[1]||e.push(Ir(e)+"scale("+t+")")}function $r(n,t){var e=[],r=[];return n=ao.transform(n),t=ao.transform(t),Yr(n.translate,t.translate,e,r),Zr(n.rotate,t.rotate,e,r),Vr(n.skew,t.skew,e,r),Xr(n.scale,t.scale,e,r),n=t=null,function(n){for(var t,i=-1,u=r.length;++i<u;)e[(t=r[i]).i]=t.x(n);return e.join("")}}function Br(n,t){return t=(t-=n=+n)||1/t,function(e){return(e-n)/t}}function Wr(n,t){return t=(t-=n=+n)||1/t,function(e){return Math.max(0,Math.min(1,(e-n)/t))}}function Jr(n){for(var t=n.source,e=n.target,r=Kr(t,e),i=[t];t!==r;)t=t.parent,i.push(t);for(var u=i.length;e!==r;)i.splice(u,0,e),e=e.parent;return i}function Gr(n){for(var t=[],e=n.parent;null!=e;)t.push(n),n=e,e=e.parent;return t.push(n),t}function Kr(n,t){if(n===t)return n;for(var e=Gr(n),r=Gr(t),i=e.pop(),u=r.pop(),o=null;i===u;)o=i,i=e.pop(),u=r.pop();return o}function Qr(n){n.fixed|=2}function ni(n){n.fixed&=-7}function ti(n){n.fixed|=4,n.px=n.x,n.py=n.y}function ei(n){n.fixed&=-5}function ri(n,t,e){var r=0,i=0;if(n.charge=0,!n.leaf)for(var u,o=n.nodes,a=o.length,l=-1;++l<a;)u=o[l],null!=u&&(ri(u,t,e),n.charge+=u.charge,r+=u.charge*u.cx,i+=u.charge*u.cy);if(n.point){n.leaf||(n.point.x+=Math.random()-.5,n.point.y+=Math.random()-.5);var c=t*e[n.point.index];n.charge+=n.pointCharge=c,r+=c*n.point.x,i+=c*n.point.y}n.cx=r/n.charge,n.cy=i/n.charge}function ii(n,t){return ao.rebind(n,t,"sort","children","value"),n.nodes=n,n.links=fi,n}function ui(n,t){for(var e=[n];null!=(n=e.pop());)if(t(n),(i=n.children)&&(r=i.length))for(var r,i;--r>=0;)e.push(i[r])}function oi(n,t){for(var e=[n],r=[];null!=(n=e.pop());)if(r.push(n),(u=n.children)&&(i=u.length))for(var i,u,o=-1;++o<i;)e.push(u[o]);for(;null!=(n=r.pop());)t(n)}function ai(n){return n.children}function li(n){return n.value}function ci(n,t){return t.value-n.value}function fi(n){return ao.merge(n.map(function(n){return(n.children||[]).map(function(t){return{source:n,target:t}})}))}function si(n){return n.x}function hi(n){return n.y}function pi(n,t,e){n.y0=t,n.y=e}function gi(n){return ao.range(n.length)}function vi(n){for(var t=-1,e=n[0].length,r=[];++t<e;)r[t]=0;return r}function di(n){for(var t,e=1,r=0,i=n[0][1],u=n.length;u>e;++e)(t=n[e][1])>i&&(r=e,i=t);return r}function yi(n){return n.reduce(mi,0)}function mi(n,t){return n+t[1]}function Mi(n,t){return xi(n,Math.ceil(Math.log(t.length)/Math.LN2+1))}function xi(n,t){for(var e=-1,r=+n[0],i=(n[1]-r)/t,u=[];++e<=t;)u[e]=i*e+r;return u}function bi(n){return[ao.min(n),ao.max(n)]}function _i(n,t){return n.value-t.value}function wi(n,t){var e=n._pack_next;n._pack_next=t,t._pack_prev=n,t._pack_next=e,e._pack_prev=t}function Si(n,t){n._pack_next=t,t._pack_prev=n}function ki(n,t){var e=t.x-n.x,r=t.y-n.y,i=n.r+t.r;return.999*i*i>e*e+r*r}function Ni(n){function t(n){f=Math.min(n.x-n.r,f),s=Math.max(n.x+n.r,s),h=Math.min(n.y-n.r,h),p=Math.max(n.y+n.r,p)}if((e=n.children)&&(c=e.length)){var e,r,i,u,o,a,l,c,f=1/0,s=-(1/0),h=1/0,p=-(1/0);if(e.forEach(Ei),r=e[0],r.x=-r.r,r.y=0,t(r),c>1&&(i=e[1],i.x=i.r,i.y=0,t(i),c>2))for(u=e[2],zi(r,i,u),t(u),wi(r,u),r._pack_prev=u,wi(u,i),i=r._pack_next,o=3;c>o;o++){zi(r,i,u=e[o]);var g=0,v=1,d=1;for(a=i._pack_next;a!==i;a=a._pack_next,v++)if(ki(a,u)){g=1;break}if(1==g)for(l=r._pack_prev;l!==a._pack_prev&&!ki(l,u);l=l._pack_prev,d++);g?(d>v||v==d&&i.r<r.r?Si(r,i=a):Si(r=l,i),o--):(wi(r,u),i=u,t(u))}var y=(f+s)/2,m=(h+p)/2,M=0;for(o=0;c>o;o++)u=e[o],u.x-=y,u.y-=m,M=Math.max(M,u.r+Math.sqrt(u.x*u.x+u.y*u.y));n.r=M,e.forEach(Ai)}}function Ei(n){n._pack_next=n._pack_prev=n}function Ai(n){delete n._pack_next,delete n._pack_prev}function Ci(n,t,e,r){var i=n.children;if(n.x=t+=r*n.x,n.y=e+=r*n.y,n.r*=r,i)for(var u=-1,o=i.length;++u<o;)Ci(i[u],t,e,r)}function zi(n,t,e){var r=n.r+e.r,i=t.x-n.x,u=t.y-n.y;if(r&&(i||u)){var o=t.r+e.r,a=i*i+u*u;o*=o,r*=r;var l=.5+(r-o)/(2*a),c=Math.sqrt(Math.max(0,2*o*(r+a)-(r-=a)*r-o*o))/(2*a);e.x=n.x+l*i+c*u,e.y=n.y+l*u-c*i}else e.x=n.x+r,e.y=n.y}function Li(n,t){return n.parent==t.parent?1:2}function qi(n){var t=n.children;return t.length?t[0]:n.t}function Ti(n){var t,e=n.children;return(t=e.length)?e[t-1]:n.t}function Ri(n,t,e){var r=e/(t.i-n.i);t.c-=r,t.s+=e,n.c+=r,t.z+=e,t.m+=e}function Di(n){for(var t,e=0,r=0,i=n.children,u=i.length;--u>=0;)t=i[u],t.z+=e,t.m+=e,e+=t.s+(r+=t.c)}function Pi(n,t,e){return n.a.parent===t.parent?n.a:e}function Ui(n){return 1+ao.max(n,function(n){return n.y})}function ji(n){return n.reduce(function(n,t){return n+t.x},0)/n.length}function Fi(n){var t=n.children;return t&&t.length?Fi(t[0]):n}function Hi(n){var t,e=n.children;return e&&(t=e.length)?Hi(e[t-1]):n}function Oi(n){return{x:n.x,y:n.y,dx:n.dx,dy:n.dy}}function Ii(n,t){var e=n.x+t[3],r=n.y+t[0],i=n.dx-t[1]-t[3],u=n.dy-t[0]-t[2];return 0>i&&(e+=i/2,i=0),0>u&&(r+=u/2,u=0),{x:e,y:r,dx:i,dy:u}}function Yi(n){var t=n[0],e=n[n.length-1];return e>t?[t,e]:[e,t]}function Zi(n){return n.rangeExtent?n.rangeExtent():Yi(n.range())}function Vi(n,t,e,r){var i=e(n[0],n[1]),u=r(t[0],t[1]);return function(n){return u(i(n))}}function Xi(n,t){var e,r=0,i=n.length-1,u=n[r],o=n[i];return u>o&&(e=r,r=i,i=e,e=u,u=o,o=e),n[r]=t.floor(u),n[i]=t.ceil(o),n}function $i(n){return n?{floor:function(t){return Math.floor(t/n)*n},ceil:function(t){return Math.ceil(t/n)*n}}:Sl}function Bi(n,t,e,r){var i=[],u=[],o=0,a=Math.min(n.length,t.length)-1;for(n[a]<n[0]&&(n=n.slice().reverse(),t=t.slice().reverse());++o<=a;)i.push(e(n[o-1],n[o])),u.push(r(t[o-1],t[o]));return function(t){var e=ao.bisect(n,t,1,a)-1;return u[e](i[e](t))}}function Wi(n,t,e,r){function i(){var i=Math.min(n.length,t.length)>2?Bi:Vi,l=r?Wr:Br;return o=i(n,t,l,e),a=i(t,n,l,Mr),u}function u(n){return o(n)}var o,a;return u.invert=function(n){return a(n)},u.domain=function(t){return arguments.length?(n=t.map(Number),i()):n},u.range=function(n){return arguments.length?(t=n,i()):t},u.rangeRound=function(n){return u.range(n).interpolate(Ur)},u.clamp=function(n){return arguments.length?(r=n,i()):r},u.interpolate=function(n){return arguments.length?(e=n,i()):e},u.ticks=function(t){return Qi(n,t)},u.tickFormat=function(t,e){return nu(n,t,e)},u.nice=function(t){return Gi(n,t),i()},u.copy=function(){return Wi(n,t,e,r)},i()}function Ji(n,t){return ao.rebind(n,t,"range","rangeRound","interpolate","clamp")}function Gi(n,t){return Xi(n,$i(Ki(n,t)[2])),Xi(n,$i(Ki(n,t)[2])),n}function Ki(n,t){null==t&&(t=10);var e=Yi(n),r=e[1]-e[0],i=Math.pow(10,Math.floor(Math.log(r/t)/Math.LN10)),u=t/r*i;return.15>=u?i*=10:.35>=u?i*=5:.75>=u&&(i*=2),e[0]=Math.ceil(e[0]/i)*i,e[1]=Math.floor(e[1]/i)*i+.5*i,e[2]=i,e}function Qi(n,t){return ao.range.apply(ao,Ki(n,t))}function nu(n,t,e){var r=Ki(n,t);if(e){var i=ha.exec(e);if(i.shift(),"s"===i[8]){var u=ao.formatPrefix(Math.max(xo(r[0]),xo(r[1])));return i[7]||(i[7]="."+tu(u.scale(r[2]))),i[8]="f",e=ao.format(i.join("")),function(n){return e(u.scale(n))+u.symbol}}i[7]||(i[7]="."+eu(i[8],r)),e=i.join("")}else e=",."+tu(r[2])+"f";return ao.format(e)}function tu(n){return-Math.floor(Math.log(n)/Math.LN10+.01)}function eu(n,t){var e=tu(t[2]);return n in kl?Math.abs(e-tu(Math.max(xo(t[0]),xo(t[1]))))+ +("e"!==n):e-2*("%"===n)}function ru(n,t,e,r){function i(n){return(e?Math.log(0>n?0:n):-Math.log(n>0?0:-n))/Math.log(t)}function u(n){return e?Math.pow(t,n):-Math.pow(t,-n)}function o(t){return n(i(t))}return o.invert=function(t){return u(n.invert(t))},o.domain=function(t){return arguments.length?(e=t[0]>=0,n.domain((r=t.map(Number)).map(i)),o):r},o.base=function(e){return arguments.length?(t=+e,n.domain(r.map(i)),o):t},o.nice=function(){var t=Xi(r.map(i),e?Math:El);return n.domain(t),r=t.map(u),o},o.ticks=function(){var n=Yi(r),o=[],a=n[0],l=n[1],c=Math.floor(i(a)),f=Math.ceil(i(l)),s=t%1?2:t;if(isFinite(f-c)){if(e){for(;f>c;c++)for(var h=1;s>h;h++)o.push(u(c)*h);o.push(u(c))}else for(o.push(u(c));c++<f;)for(var h=s-1;h>0;h--)o.push(u(c)*h);for(c=0;o[c]<a;c++);for(f=o.length;o[f-1]>l;f--);o=o.slice(c,f)}return o},o.tickFormat=function(n,e){if(!arguments.length)return Nl;arguments.length<2?e=Nl:"function"!=typeof e&&(e=ao.format(e));var r=Math.max(1,t*n/o.ticks().length);return function(n){var o=n/u(Math.round(i(n)));return t-.5>o*t&&(o*=t),r>=o?e(n):""}},o.copy=function(){return ru(n.copy(),t,e,r)},Ji(o,n)}function iu(n,t,e){function r(t){return n(i(t))}var i=uu(t),u=uu(1/t);return r.invert=function(t){return u(n.invert(t))},r.domain=function(t){return arguments.length?(n.domain((e=t.map(Number)).map(i)),r):e},r.ticks=function(n){return Qi(e,n)},r.tickFormat=function(n,t){return nu(e,n,t)},r.nice=function(n){return r.domain(Gi(e,n))},r.exponent=function(o){return arguments.length?(i=uu(t=o),u=uu(1/t),n.domain(e.map(i)),r):t},r.copy=function(){return iu(n.copy(),t,e)},Ji(r,n)}function uu(n){return function(t){return 0>t?-Math.pow(-t,n):Math.pow(t,n)}}function ou(n,t){function e(e){return u[((i.get(e)||("range"===t.t?i.set(e,n.push(e)):NaN))-1)%u.length]}function r(t,e){return ao.range(n.length).map(function(n){return t+e*n})}var i,u,o;return e.domain=function(r){if(!arguments.length)return n;n=[],i=new c;for(var u,o=-1,a=r.length;++o<a;)i.has(u=r[o])||i.set(u,n.push(u));return e[t.t].apply(e,t.a)},e.range=function(n){return arguments.length?(u=n,o=0,t={t:"range",a:arguments},e):u},e.rangePoints=function(i,a){arguments.length<2&&(a=0);var l=i[0],c=i[1],f=n.length<2?(l=(l+c)/2,0):(c-l)/(n.length-1+a);return u=r(l+f*a/2,f),o=0,t={t:"rangePoints",a:arguments},e},e.rangeRoundPoints=function(i,a){arguments.length<2&&(a=0);var l=i[0],c=i[1],f=n.length<2?(l=c=Math.round((l+c)/2),0):(c-l)/(n.length-1+a)|0;return u=r(l+Math.round(f*a/2+(c-l-(n.length-1+a)*f)/2),f),o=0,t={t:"rangeRoundPoints",a:arguments},e},e.rangeBands=function(i,a,l){arguments.length<2&&(a=0),arguments.length<3&&(l=a);var c=i[1]<i[0],f=i[c-0],s=i[1-c],h=(s-f)/(n.length-a+2*l);return u=r(f+h*l,h),c&&u.reverse(),o=h*(1-a),t={t:"rangeBands",a:arguments},e},e.rangeRoundBands=function(i,a,l){arguments.length<2&&(a=0),arguments.length<3&&(l=a);var c=i[1]<i[0],f=i[c-0],s=i[1-c],h=Math.floor((s-f)/(n.length-a+2*l));return u=r(f+Math.round((s-f-(n.length-a)*h)/2),h),c&&u.reverse(),o=Math.round(h*(1-a)),t={t:"rangeRoundBands",a:arguments},e},e.rangeBand=function(){return o},e.rangeExtent=function(){return Yi(t.a[0])},e.copy=function(){return ou(n,t)},e.domain(n)}function au(n,t){function u(){var e=0,r=t.length;for(a=[];++e<r;)a[e-1]=ao.quantile(n,e/r);return o}function o(n){return isNaN(n=+n)?void 0:t[ao.bisect(a,n)]}var a;return o.domain=function(t){return arguments.length?(n=t.map(r).filter(i).sort(e),u()):n},o.range=function(n){return arguments.length?(t=n,u()):t},o.quantiles=function(){return a},o.invertExtent=function(e){return e=t.indexOf(e),0>e?[NaN,NaN]:[e>0?a[e-1]:n[0],e<a.length?a[e]:n[n.length-1]]},o.copy=function(){return au(n,t)},u()}function lu(n,t,e){function r(t){return e[Math.max(0,Math.min(o,Math.floor(u*(t-n))))]}function i(){return u=e.length/(t-n),o=e.length-1,r}var u,o;return r.domain=function(e){return arguments.length?(n=+e[0],t=+e[e.length-1],i()):[n,t]},r.range=function(n){return arguments.length?(e=n,i()):e},r.invertExtent=function(t){return t=e.indexOf(t),t=0>t?NaN:t/u+n,[t,t+1/u]},r.copy=function(){return lu(n,t,e)},i()}function cu(n,t){function e(e){return e>=e?t[ao.bisect(n,e)]:void 0}return e.domain=function(t){return arguments.length?(n=t,e):n},e.range=function(n){return arguments.length?(t=n,e):t},e.invertExtent=function(e){return e=t.indexOf(e),[n[e-1],n[e]]},e.copy=function(){return cu(n,t)},e}function fu(n){function t(n){return+n}return t.invert=t,t.domain=t.range=function(e){return arguments.length?(n=e.map(t),t):n},t.ticks=function(t){return Qi(n,t)},t.tickFormat=function(t,e){return nu(n,t,e)},t.copy=function(){return fu(n)},t}function su(){return 0}function hu(n){return n.innerRadius}function pu(n){return n.outerRadius}function gu(n){return n.startAngle}function vu(n){return n.endAngle}function du(n){return n&&n.padAngle}function yu(n,t,e,r){return(n-e)*t-(t-r)*n>0?0:1}function mu(n,t,e,r,i){var u=n[0]-t[0],o=n[1]-t[1],a=(i?r:-r)/Math.sqrt(u*u+o*o),l=a*o,c=-a*u,f=n[0]+l,s=n[1]+c,h=t[0]+l,p=t[1]+c,g=(f+h)/2,v=(s+p)/2,d=h-f,y=p-s,m=d*d+y*y,M=e-r,x=f*p-h*s,b=(0>y?-1:1)*Math.sqrt(Math.max(0,M*M*m-x*x)),_=(x*y-d*b)/m,w=(-x*d-y*b)/m,S=(x*y+d*b)/m,k=(-x*d+y*b)/m,N=_-g,E=w-v,A=S-g,C=k-v;return N*N+E*E>A*A+C*C&&(_=S,w=k),[[_-l,w-c],[_*e/M,w*e/M]]}function Mu(n){function t(t){function o(){c.push("M",u(n(f),a))}for(var l,c=[],f=[],s=-1,h=t.length,p=En(e),g=En(r);++s<h;)i.call(this,l=t[s],s)?f.push([+p.call(this,l,s),+g.call(this,l,s)]):f.length&&(o(),f=[]);return f.length&&o(),c.length?c.join(""):null}var e=Ce,r=ze,i=zt,u=xu,o=u.key,a=.7;return t.x=function(n){return arguments.length?(e=n,t):e},t.y=function(n){return arguments.length?(r=n,t):r},t.defined=function(n){return arguments.length?(i=n,t):i},t.interpolate=function(n){return arguments.length?(o="function"==typeof n?u=n:(u=Tl.get(n)||xu).key,t):o},t.tension=function(n){return arguments.length?(a=n,t):a},t}function xu(n){return n.length>1?n.join("L"):n+"Z"}function bu(n){return n.join("L")+"Z"}function _u(n){for(var t=0,e=n.length,r=n[0],i=[r[0],",",r[1]];++t<e;)i.push("H",(r[0]+(r=n[t])[0])/2,"V",r[1]);return e>1&&i.push("H",r[0]),i.join("")}function wu(n){for(var t=0,e=n.length,r=n[0],i=[r[0],",",r[1]];++t<e;)i.push("V",(r=n[t])[1],"H",r[0]);return i.join("")}function Su(n){for(var t=0,e=n.length,r=n[0],i=[r[0],",",r[1]];++t<e;)i.push("H",(r=n[t])[0],"V",r[1]);return i.join("")}function ku(n,t){return n.length<4?xu(n):n[1]+Au(n.slice(1,-1),Cu(n,t))}function Nu(n,t){return n.length<3?bu(n):n[0]+Au((n.push(n[0]),n),Cu([n[n.length-2]].concat(n,[n[1]]),t))}function Eu(n,t){return n.length<3?xu(n):n[0]+Au(n,Cu(n,t))}function Au(n,t){if(t.length<1||n.length!=t.length&&n.length!=t.length+2)return xu(n);var e=n.length!=t.length,r="",i=n[0],u=n[1],o=t[0],a=o,l=1;if(e&&(r+="Q"+(u[0]-2*o[0]/3)+","+(u[1]-2*o[1]/3)+","+u[0]+","+u[1],i=n[1],l=2),t.length>1){a=t[1],u=n[l],l++,r+="C"+(i[0]+o[0])+","+(i[1]+o[1])+","+(u[0]-a[0])+","+(u[1]-a[1])+","+u[0]+","+u[1];for(var c=2;c<t.length;c++,l++)u=n[l],a=t[c],r+="S"+(u[0]-a[0])+","+(u[1]-a[1])+","+u[0]+","+u[1]}if(e){var f=n[l];r+="Q"+(u[0]+2*a[0]/3)+","+(u[1]+2*a[1]/3)+","+f[0]+","+f[1]}return r}function Cu(n,t){for(var e,r=[],i=(1-t)/2,u=n[0],o=n[1],a=1,l=n.length;++a<l;)e=u,u=o,o=n[a],r.push([i*(o[0]-e[0]),i*(o[1]-e[1])]);return r}function zu(n){if(n.length<3)return xu(n);var t=1,e=n.length,r=n[0],i=r[0],u=r[1],o=[i,i,i,(r=n[1])[0]],a=[u,u,u,r[1]],l=[i,",",u,"L",Ru(Pl,o),",",Ru(Pl,a)];for(n.push(n[e-1]);++t<=e;)r=n[t],o.shift(),o.push(r[0]),a.shift(),a.push(r[1]),Du(l,o,a);return n.pop(),l.push("L",r),l.join("")}function Lu(n){if(n.length<4)return xu(n);for(var t,e=[],r=-1,i=n.length,u=[0],o=[0];++r<3;)t=n[r],u.push(t[0]),o.push(t[1]);for(e.push(Ru(Pl,u)+","+Ru(Pl,o)),--r;++r<i;)t=n[r],u.shift(),u.push(t[0]),o.shift(),o.push(t[1]),Du(e,u,o);return e.join("")}function qu(n){for(var t,e,r=-1,i=n.length,u=i+4,o=[],a=[];++r<4;)e=n[r%i],o.push(e[0]),a.push(e[1]);for(t=[Ru(Pl,o),",",Ru(Pl,a)],--r;++r<u;)e=n[r%i],o.shift(),o.push(e[0]),a.shift(),a.push(e[1]),Du(t,o,a);return t.join("")}function Tu(n,t){var e=n.length-1;if(e)for(var r,i,u=n[0][0],o=n[0][1],a=n[e][0]-u,l=n[e][1]-o,c=-1;++c<=e;)r=n[c],i=c/e,r[0]=t*r[0]+(1-t)*(u+i*a),r[1]=t*r[1]+(1-t)*(o+i*l);return zu(n)}function Ru(n,t){return n[0]*t[0]+n[1]*t[1]+n[2]*t[2]+n[3]*t[3]}function Du(n,t,e){n.push("C",Ru(Rl,t),",",Ru(Rl,e),",",Ru(Dl,t),",",Ru(Dl,e),",",Ru(Pl,t),",",Ru(Pl,e))}function Pu(n,t){return(t[1]-n[1])/(t[0]-n[0])}function Uu(n){for(var t=0,e=n.length-1,r=[],i=n[0],u=n[1],o=r[0]=Pu(i,u);++t<e;)r[t]=(o+(o=Pu(i=u,u=n[t+1])))/2;return r[t]=o,r}function ju(n){for(var t,e,r,i,u=[],o=Uu(n),a=-1,l=n.length-1;++a<l;)t=Pu(n[a],n[a+1]),xo(t)<Uo?o[a]=o[a+1]=0:(e=o[a]/t,r=o[a+1]/t,i=e*e+r*r,i>9&&(i=3*t/Math.sqrt(i),o[a]=i*e,o[a+1]=i*r));for(a=-1;++a<=l;)i=(n[Math.min(l,a+1)][0]-n[Math.max(0,a-1)][0])/(6*(1+o[a]*o[a])),u.push([i||0,o[a]*i||0]);return u}function Fu(n){return n.length<3?xu(n):n[0]+Au(n,ju(n))}function Hu(n){for(var t,e,r,i=-1,u=n.length;++i<u;)t=n[i],e=t[0],r=t[1]-Io,t[0]=e*Math.cos(r),t[1]=e*Math.sin(r);return n}function Ou(n){function t(t){function l(){v.push("M",a(n(y),s),f,c(n(d.reverse()),s),"Z")}for(var h,p,g,v=[],d=[],y=[],m=-1,M=t.length,x=En(e),b=En(i),_=e===r?function(){
+return p}:En(r),w=i===u?function(){return g}:En(u);++m<M;)o.call(this,h=t[m],m)?(d.push([p=+x.call(this,h,m),g=+b.call(this,h,m)]),y.push([+_.call(this,h,m),+w.call(this,h,m)])):d.length&&(l(),d=[],y=[]);return d.length&&l(),v.length?v.join(""):null}var e=Ce,r=Ce,i=0,u=ze,o=zt,a=xu,l=a.key,c=a,f="L",s=.7;return t.x=function(n){return arguments.length?(e=r=n,t):r},t.x0=function(n){return arguments.length?(e=n,t):e},t.x1=function(n){return arguments.length?(r=n,t):r},t.y=function(n){return arguments.length?(i=u=n,t):u},t.y0=function(n){return arguments.length?(i=n,t):i},t.y1=function(n){return arguments.length?(u=n,t):u},t.defined=function(n){return arguments.length?(o=n,t):o},t.interpolate=function(n){return arguments.length?(l="function"==typeof n?a=n:(a=Tl.get(n)||xu).key,c=a.reverse||a,f=a.closed?"M":"L",t):l},t.tension=function(n){return arguments.length?(s=n,t):s},t}function Iu(n){return n.radius}function Yu(n){return[n.x,n.y]}function Zu(n){return function(){var t=n.apply(this,arguments),e=t[0],r=t[1]-Io;return[e*Math.cos(r),e*Math.sin(r)]}}function Vu(){return 64}function Xu(){return"circle"}function $u(n){var t=Math.sqrt(n/Fo);return"M0,"+t+"A"+t+","+t+" 0 1,1 0,"+-t+"A"+t+","+t+" 0 1,1 0,"+t+"Z"}function Bu(n){return function(){var t,e,r;(t=this[n])&&(r=t[e=t.active])&&(r.timer.c=null,r.timer.t=NaN,--t.count?delete t[e]:delete this[n],t.active+=.5,r.event&&r.event.interrupt.call(this,this.__data__,r.index))}}function Wu(n,t,e){return ko(n,Yl),n.namespace=t,n.id=e,n}function Ju(n,t,e,r){var i=n.id,u=n.namespace;return Y(n,"function"==typeof e?function(n,o,a){n[u][i].tween.set(t,r(e.call(n,n.__data__,o,a)))}:(e=r(e),function(n){n[u][i].tween.set(t,e)}))}function Gu(n){return null==n&&(n=""),function(){this.textContent=n}}function Ku(n){return null==n?"__transition__":"__transition_"+n+"__"}function Qu(n,t,e,r,i){function u(n){var t=v.delay;return f.t=t+l,n>=t?o(n-t):void(f.c=o)}function o(e){var i=g.active,u=g[i];u&&(u.timer.c=null,u.timer.t=NaN,--g.count,delete g[i],u.event&&u.event.interrupt.call(n,n.__data__,u.index));for(var o in g)if(r>+o){var c=g[o];c.timer.c=null,c.timer.t=NaN,--g.count,delete g[o]}f.c=a,qn(function(){return f.c&&a(e||1)&&(f.c=null,f.t=NaN),1},0,l),g.active=r,v.event&&v.event.start.call(n,n.__data__,t),p=[],v.tween.forEach(function(e,r){(r=r.call(n,n.__data__,t))&&p.push(r)}),h=v.ease,s=v.duration}function a(i){for(var u=i/s,o=h(u),a=p.length;a>0;)p[--a].call(n,o);return u>=1?(v.event&&v.event.end.call(n,n.__data__,t),--g.count?delete g[r]:delete n[e],1):void 0}var l,f,s,h,p,g=n[e]||(n[e]={active:0,count:0}),v=g[r];v||(l=i.time,f=qn(u,0,l),v=g[r]={tween:new c,time:l,timer:f,delay:i.delay,duration:i.duration,ease:i.ease,index:t},i=null,++g.count)}function no(n,t,e){n.attr("transform",function(n){var r=t(n);return"translate("+(isFinite(r)?r:e(n))+",0)"})}function to(n,t,e){n.attr("transform",function(n){var r=t(n);return"translate(0,"+(isFinite(r)?r:e(n))+")"})}function eo(n){return n.toISOString()}function ro(n,t,e){function r(t){return n(t)}function i(n,e){var r=n[1]-n[0],i=r/e,u=ao.bisect(Kl,i);return u==Kl.length?[t.year,Ki(n.map(function(n){return n/31536e6}),e)[2]]:u?t[i/Kl[u-1]<Kl[u]/i?u-1:u]:[tc,Ki(n,e)[2]]}return r.invert=function(t){return io(n.invert(t))},r.domain=function(t){return arguments.length?(n.domain(t),r):n.domain().map(io)},r.nice=function(n,t){function e(e){return!isNaN(e)&&!n.range(e,io(+e+1),t).length}var u=r.domain(),o=Yi(u),a=null==n?i(o,10):"number"==typeof n&&i(o,n);return a&&(n=a[0],t=a[1]),r.domain(Xi(u,t>1?{floor:function(t){for(;e(t=n.floor(t));)t=io(t-1);return t},ceil:function(t){for(;e(t=n.ceil(t));)t=io(+t+1);return t}}:n))},r.ticks=function(n,t){var e=Yi(r.domain()),u=null==n?i(e,10):"number"==typeof n?i(e,n):!n.range&&[{range:n},t];return u&&(n=u[0],t=u[1]),n.range(e[0],io(+e[1]+1),1>t?1:t)},r.tickFormat=function(){return e},r.copy=function(){return ro(n.copy(),t,e)},Ji(r,n)}function io(n){return new Date(n)}function uo(n){return JSON.parse(n.responseText)}function oo(n){var t=fo.createRange();return t.selectNode(fo.body),t.createContextualFragment(n.responseText)}var ao={version:"3.5.17"},lo=[].slice,co=function(n){return lo.call(n)},fo=this.document;if(fo)try{co(fo.documentElement.childNodes)[0].nodeType}catch(so){co=function(n){for(var t=n.length,e=new Array(t);t--;)e[t]=n[t];return e}}if(Date.now||(Date.now=function(){return+new Date}),fo)try{fo.createElement("DIV").style.setProperty("opacity",0,"")}catch(ho){var po=this.Element.prototype,go=po.setAttribute,vo=po.setAttributeNS,yo=this.CSSStyleDeclaration.prototype,mo=yo.setProperty;po.setAttribute=function(n,t){go.call(this,n,t+"")},po.setAttributeNS=function(n,t,e){vo.call(this,n,t,e+"")},yo.setProperty=function(n,t,e){mo.call(this,n,t+"",e)}}ao.ascending=e,ao.descending=function(n,t){return n>t?-1:t>n?1:t>=n?0:NaN},ao.min=function(n,t){var e,r,i=-1,u=n.length;if(1===arguments.length){for(;++i<u;)if(null!=(r=n[i])&&r>=r){e=r;break}for(;++i<u;)null!=(r=n[i])&&e>r&&(e=r)}else{for(;++i<u;)if(null!=(r=t.call(n,n[i],i))&&r>=r){e=r;break}for(;++i<u;)null!=(r=t.call(n,n[i],i))&&e>r&&(e=r)}return e},ao.max=function(n,t){var e,r,i=-1,u=n.length;if(1===arguments.length){for(;++i<u;)if(null!=(r=n[i])&&r>=r){e=r;break}for(;++i<u;)null!=(r=n[i])&&r>e&&(e=r)}else{for(;++i<u;)if(null!=(r=t.call(n,n[i],i))&&r>=r){e=r;break}for(;++i<u;)null!=(r=t.call(n,n[i],i))&&r>e&&(e=r)}return e},ao.extent=function(n,t){var e,r,i,u=-1,o=n.length;if(1===arguments.length){for(;++u<o;)if(null!=(r=n[u])&&r>=r){e=i=r;break}for(;++u<o;)null!=(r=n[u])&&(e>r&&(e=r),r>i&&(i=r))}else{for(;++u<o;)if(null!=(r=t.call(n,n[u],u))&&r>=r){e=i=r;break}for(;++u<o;)null!=(r=t.call(n,n[u],u))&&(e>r&&(e=r),r>i&&(i=r))}return[e,i]},ao.sum=function(n,t){var e,r=0,u=n.length,o=-1;if(1===arguments.length)for(;++o<u;)i(e=+n[o])&&(r+=e);else for(;++o<u;)i(e=+t.call(n,n[o],o))&&(r+=e);return r},ao.mean=function(n,t){var e,u=0,o=n.length,a=-1,l=o;if(1===arguments.length)for(;++a<o;)i(e=r(n[a]))?u+=e:--l;else for(;++a<o;)i(e=r(t.call(n,n[a],a)))?u+=e:--l;return l?u/l:void 0},ao.quantile=function(n,t){var e=(n.length-1)*t+1,r=Math.floor(e),i=+n[r-1],u=e-r;return u?i+u*(n[r]-i):i},ao.median=function(n,t){var u,o=[],a=n.length,l=-1;if(1===arguments.length)for(;++l<a;)i(u=r(n[l]))&&o.push(u);else for(;++l<a;)i(u=r(t.call(n,n[l],l)))&&o.push(u);return o.length?ao.quantile(o.sort(e),.5):void 0},ao.variance=function(n,t){var e,u,o=n.length,a=0,l=0,c=-1,f=0;if(1===arguments.length)for(;++c<o;)i(e=r(n[c]))&&(u=e-a,a+=u/++f,l+=u*(e-a));else for(;++c<o;)i(e=r(t.call(n,n[c],c)))&&(u=e-a,a+=u/++f,l+=u*(e-a));return f>1?l/(f-1):void 0},ao.deviation=function(){var n=ao.variance.apply(this,arguments);return n?Math.sqrt(n):n};var Mo=u(e);ao.bisectLeft=Mo.left,ao.bisect=ao.bisectRight=Mo.right,ao.bisector=function(n){return u(1===n.length?function(t,r){return e(n(t),r)}:n)},ao.shuffle=function(n,t,e){(u=arguments.length)<3&&(e=n.length,2>u&&(t=0));for(var r,i,u=e-t;u;)i=Math.random()*u--|0,r=n[u+t],n[u+t]=n[i+t],n[i+t]=r;return n},ao.permute=function(n,t){for(var e=t.length,r=new Array(e);e--;)r[e]=n[t[e]];return r},ao.pairs=function(n){for(var t,e=0,r=n.length-1,i=n[0],u=new Array(0>r?0:r);r>e;)u[e]=[t=i,i=n[++e]];return u},ao.transpose=function(n){if(!(i=n.length))return[];for(var t=-1,e=ao.min(n,o),r=new Array(e);++t<e;)for(var i,u=-1,a=r[t]=new Array(i);++u<i;)a[u]=n[u][t];return r},ao.zip=function(){return ao.transpose(arguments)},ao.keys=function(n){var t=[];for(var e in n)t.push(e);return t},ao.values=function(n){var t=[];for(var e in n)t.push(n[e]);return t},ao.entries=function(n){var t=[];for(var e in n)t.push({key:e,value:n[e]});return t},ao.merge=function(n){for(var t,e,r,i=n.length,u=-1,o=0;++u<i;)o+=n[u].length;for(e=new Array(o);--i>=0;)for(r=n[i],t=r.length;--t>=0;)e[--o]=r[t];return e};var xo=Math.abs;ao.range=function(n,t,e){if(arguments.length<3&&(e=1,arguments.length<2&&(t=n,n=0)),(t-n)/e===1/0)throw new Error("infinite range");var r,i=[],u=a(xo(e)),o=-1;if(n*=u,t*=u,e*=u,0>e)for(;(r=n+e*++o)>t;)i.push(r/u);else for(;(r=n+e*++o)<t;)i.push(r/u);return i},ao.map=function(n,t){var e=new c;if(n instanceof c)n.forEach(function(n,t){e.set(n,t)});else if(Array.isArray(n)){var r,i=-1,u=n.length;if(1===arguments.length)for(;++i<u;)e.set(i,n[i]);else for(;++i<u;)e.set(t.call(n,r=n[i],i),r)}else for(var o in n)e.set(o,n[o]);return e};var bo="__proto__",_o="\x00";l(c,{has:h,get:function(n){return this._[f(n)]},set:function(n,t){return this._[f(n)]=t},remove:p,keys:g,values:function(){var n=[];for(var t in this._)n.push(this._[t]);return n},entries:function(){var n=[];for(var t in this._)n.push({key:s(t),value:this._[t]});return n},size:v,empty:d,forEach:function(n){for(var t in this._)n.call(this,s(t),this._[t])}}),ao.nest=function(){function n(t,o,a){if(a>=u.length)return r?r.call(i,o):e?o.sort(e):o;for(var l,f,s,h,p=-1,g=o.length,v=u[a++],d=new c;++p<g;)(h=d.get(l=v(f=o[p])))?h.push(f):d.set(l,[f]);return t?(f=t(),s=function(e,r){f.set(e,n(t,r,a))}):(f={},s=function(e,r){f[e]=n(t,r,a)}),d.forEach(s),f}function t(n,e){if(e>=u.length)return n;var r=[],i=o[e++];return n.forEach(function(n,i){r.push({key:n,values:t(i,e)})}),i?r.sort(function(n,t){return i(n.key,t.key)}):r}var e,r,i={},u=[],o=[];return i.map=function(t,e){return n(e,t,0)},i.entries=function(e){return t(n(ao.map,e,0),0)},i.key=function(n){return u.push(n),i},i.sortKeys=function(n){return o[u.length-1]=n,i},i.sortValues=function(n){return e=n,i},i.rollup=function(n){return r=n,i},i},ao.set=function(n){var t=new y;if(n)for(var e=0,r=n.length;r>e;++e)t.add(n[e]);return t},l(y,{has:h,add:function(n){return this._[f(n+="")]=!0,n},remove:p,values:g,size:v,empty:d,forEach:function(n){for(var t in this._)n.call(this,s(t))}}),ao.behavior={},ao.rebind=function(n,t){for(var e,r=1,i=arguments.length;++r<i;)n[e=arguments[r]]=M(n,t,t[e]);return n};var wo=["webkit","ms","moz","Moz","o","O"];ao.dispatch=function(){for(var n=new _,t=-1,e=arguments.length;++t<e;)n[arguments[t]]=w(n);return n},_.prototype.on=function(n,t){var e=n.indexOf("."),r="";if(e>=0&&(r=n.slice(e+1),n=n.slice(0,e)),n)return arguments.length<2?this[n].on(r):this[n].on(r,t);if(2===arguments.length){if(null==t)for(n in this)this.hasOwnProperty(n)&&this[n].on(r,null);return this}},ao.event=null,ao.requote=function(n){return n.replace(So,"\\$&")};var So=/[\\\^\$\*\+\?\|\[\]\(\)\.\{\}]/g,ko={}.__proto__?function(n,t){n.__proto__=t}:function(n,t){for(var e in t)n[e]=t[e]},No=function(n,t){return t.querySelector(n)},Eo=function(n,t){return t.querySelectorAll(n)},Ao=function(n,t){var e=n.matches||n[x(n,"matchesSelector")];return(Ao=function(n,t){return e.call(n,t)})(n,t)};"function"==typeof Sizzle&&(No=function(n,t){return Sizzle(n,t)[0]||null},Eo=Sizzle,Ao=Sizzle.matchesSelector),ao.selection=function(){return ao.select(fo.documentElement)};var Co=ao.selection.prototype=[];Co.select=function(n){var t,e,r,i,u=[];n=A(n);for(var o=-1,a=this.length;++o<a;){u.push(t=[]),t.parentNode=(r=this[o]).parentNode;for(var l=-1,c=r.length;++l<c;)(i=r[l])?(t.push(e=n.call(i,i.__data__,l,o)),e&&"__data__"in i&&(e.__data__=i.__data__)):t.push(null)}return E(u)},Co.selectAll=function(n){var t,e,r=[];n=C(n);for(var i=-1,u=this.length;++i<u;)for(var o=this[i],a=-1,l=o.length;++a<l;)(e=o[a])&&(r.push(t=co(n.call(e,e.__data__,a,i))),t.parentNode=e);return E(r)};var zo="http://www.w3.org/1999/xhtml",Lo={svg:"http://www.w3.org/2000/svg",xhtml:zo,xlink:"http://www.w3.org/1999/xlink",xml:"http://www.w3.org/XML/1998/namespace",xmlns:"http://www.w3.org/2000/xmlns/"};ao.ns={prefix:Lo,qualify:function(n){var t=n.indexOf(":"),e=n;return t>=0&&"xmlns"!==(e=n.slice(0,t))&&(n=n.slice(t+1)),Lo.hasOwnProperty(e)?{space:Lo[e],local:n}:n}},Co.attr=function(n,t){if(arguments.length<2){if("string"==typeof n){var e=this.node();return n=ao.ns.qualify(n),n.local?e.getAttributeNS(n.space,n.local):e.getAttribute(n)}for(t in n)this.each(z(t,n[t]));return this}return this.each(z(n,t))},Co.classed=function(n,t){if(arguments.length<2){if("string"==typeof n){var e=this.node(),r=(n=T(n)).length,i=-1;if(t=e.classList){for(;++i<r;)if(!t.contains(n[i]))return!1}else for(t=e.getAttribute("class");++i<r;)if(!q(n[i]).test(t))return!1;return!0}for(t in n)this.each(R(t,n[t]));return this}return this.each(R(n,t))},Co.style=function(n,e,r){var i=arguments.length;if(3>i){if("string"!=typeof n){2>i&&(e="");for(r in n)this.each(P(r,n[r],e));return this}if(2>i){var u=this.node();return t(u).getComputedStyle(u,null).getPropertyValue(n)}r=""}return this.each(P(n,e,r))},Co.property=function(n,t){if(arguments.length<2){if("string"==typeof n)return this.node()[n];for(t in n)this.each(U(t,n[t]));return this}return this.each(U(n,t))},Co.text=function(n){return arguments.length?this.each("function"==typeof n?function(){var t=n.apply(this,arguments);this.textContent=null==t?"":t}:null==n?function(){this.textContent=""}:function(){this.textContent=n}):this.node().textContent},Co.html=function(n){return arguments.length?this.each("function"==typeof n?function(){var t=n.apply(this,arguments);this.innerHTML=null==t?"":t}:null==n?function(){this.innerHTML=""}:function(){this.innerHTML=n}):this.node().innerHTML},Co.append=function(n){return n=j(n),this.select(function(){return this.appendChild(n.apply(this,arguments))})},Co.insert=function(n,t){return n=j(n),t=A(t),this.select(function(){return this.insertBefore(n.apply(this,arguments),t.apply(this,arguments)||null)})},Co.remove=function(){return this.each(F)},Co.data=function(n,t){function e(n,e){var r,i,u,o=n.length,s=e.length,h=Math.min(o,s),p=new Array(s),g=new Array(s),v=new Array(o);if(t){var d,y=new c,m=new Array(o);for(r=-1;++r<o;)(i=n[r])&&(y.has(d=t.call(i,i.__data__,r))?v[r]=i:y.set(d,i),m[r]=d);for(r=-1;++r<s;)(i=y.get(d=t.call(e,u=e[r],r)))?i!==!0&&(p[r]=i,i.__data__=u):g[r]=H(u),y.set(d,!0);for(r=-1;++r<o;)r in m&&y.get(m[r])!==!0&&(v[r]=n[r])}else{for(r=-1;++r<h;)i=n[r],u=e[r],i?(i.__data__=u,p[r]=i):g[r]=H(u);for(;s>r;++r)g[r]=H(e[r]);for(;o>r;++r)v[r]=n[r]}g.update=p,g.parentNode=p.parentNode=v.parentNode=n.parentNode,a.push(g),l.push(p),f.push(v)}var r,i,u=-1,o=this.length;if(!arguments.length){for(n=new Array(o=(r=this[0]).length);++u<o;)(i=r[u])&&(n[u]=i.__data__);return n}var a=Z([]),l=E([]),f=E([]);if("function"==typeof n)for(;++u<o;)e(r=this[u],n.call(r,r.parentNode.__data__,u));else for(;++u<o;)e(r=this[u],n);return l.enter=function(){return a},l.exit=function(){return f},l},Co.datum=function(n){return arguments.length?this.property("__data__",n):this.property("__data__")},Co.filter=function(n){var t,e,r,i=[];"function"!=typeof n&&(n=O(n));for(var u=0,o=this.length;o>u;u++){i.push(t=[]),t.parentNode=(e=this[u]).parentNode;for(var a=0,l=e.length;l>a;a++)(r=e[a])&&n.call(r,r.__data__,a,u)&&t.push(r)}return E(i)},Co.order=function(){for(var n=-1,t=this.length;++n<t;)for(var e,r=this[n],i=r.length-1,u=r[i];--i>=0;)(e=r[i])&&(u&&u!==e.nextSibling&&u.parentNode.insertBefore(e,u),u=e);return this},Co.sort=function(n){n=I.apply(this,arguments);for(var t=-1,e=this.length;++t<e;)this[t].sort(n);return this.order()},Co.each=function(n){return Y(this,function(t,e,r){n.call(t,t.__data__,e,r)})},Co.call=function(n){var t=co(arguments);return n.apply(t[0]=this,t),this},Co.empty=function(){return!this.node()},Co.node=function(){for(var n=0,t=this.length;t>n;n++)for(var e=this[n],r=0,i=e.length;i>r;r++){var u=e[r];if(u)return u}return null},Co.size=function(){var n=0;return Y(this,function(){++n}),n};var qo=[];ao.selection.enter=Z,ao.selection.enter.prototype=qo,qo.append=Co.append,qo.empty=Co.empty,qo.node=Co.node,qo.call=Co.call,qo.size=Co.size,qo.select=function(n){for(var t,e,r,i,u,o=[],a=-1,l=this.length;++a<l;){r=(i=this[a]).update,o.push(t=[]),t.parentNode=i.parentNode;for(var c=-1,f=i.length;++c<f;)(u=i[c])?(t.push(r[c]=e=n.call(i.parentNode,u.__data__,c,a)),e.__data__=u.__data__):t.push(null)}return E(o)},qo.insert=function(n,t){return arguments.length<2&&(t=V(this)),Co.insert.call(this,n,t)},ao.select=function(t){var e;return"string"==typeof t?(e=[No(t,fo)],e.parentNode=fo.documentElement):(e=[t],e.parentNode=n(t)),E([e])},ao.selectAll=function(n){var t;return"string"==typeof n?(t=co(Eo(n,fo)),t.parentNode=fo.documentElement):(t=co(n),t.parentNode=null),E([t])},Co.on=function(n,t,e){var r=arguments.length;if(3>r){if("string"!=typeof n){2>r&&(t=!1);for(e in n)this.each(X(e,n[e],t));return this}if(2>r)return(r=this.node()["__on"+n])&&r._;e=!1}return this.each(X(n,t,e))};var To=ao.map({mouseenter:"mouseover",mouseleave:"mouseout"});fo&&To.forEach(function(n){"on"+n in fo&&To.remove(n)});var Ro,Do=0;ao.mouse=function(n){return J(n,k())};var Po=this.navigator&&/WebKit/.test(this.navigator.userAgent)?-1:0;ao.touch=function(n,t,e){if(arguments.length<3&&(e=t,t=k().changedTouches),t)for(var r,i=0,u=t.length;u>i;++i)if((r=t[i]).identifier===e)return J(n,r)},ao.behavior.drag=function(){function n(){this.on("mousedown.drag",u).on("touchstart.drag",o)}function e(n,t,e,u,o){return function(){function a(){var n,e,r=t(h,v);r&&(n=r[0]-M[0],e=r[1]-M[1],g|=n|e,M=r,p({type:"drag",x:r[0]+c[0],y:r[1]+c[1],dx:n,dy:e}))}function l(){t(h,v)&&(y.on(u+d,null).on(o+d,null),m(g),p({type:"dragend"}))}var c,f=this,s=ao.event.target.correspondingElement||ao.event.target,h=f.parentNode,p=r.of(f,arguments),g=0,v=n(),d=".drag"+(null==v?"":"-"+v),y=ao.select(e(s)).on(u+d,a).on(o+d,l),m=W(s),M=t(h,v);i?(c=i.apply(f,arguments),c=[c.x-M[0],c.y-M[1]]):c=[0,0],p({type:"dragstart"})}}var r=N(n,"drag","dragstart","dragend"),i=null,u=e(b,ao.mouse,t,"mousemove","mouseup"),o=e(G,ao.touch,m,"touchmove","touchend");return n.origin=function(t){return arguments.length?(i=t,n):i},ao.rebind(n,r,"on")},ao.touches=function(n,t){return arguments.length<2&&(t=k().touches),t?co(t).map(function(t){var e=J(n,t);return e.identifier=t.identifier,e}):[]};var Uo=1e-6,jo=Uo*Uo,Fo=Math.PI,Ho=2*Fo,Oo=Ho-Uo,Io=Fo/2,Yo=Fo/180,Zo=180/Fo,Vo=Math.SQRT2,Xo=2,$o=4;ao.interpolateZoom=function(n,t){var e,r,i=n[0],u=n[1],o=n[2],a=t[0],l=t[1],c=t[2],f=a-i,s=l-u,h=f*f+s*s;if(jo>h)r=Math.log(c/o)/Vo,e=function(n){return[i+n*f,u+n*s,o*Math.exp(Vo*n*r)]};else{var p=Math.sqrt(h),g=(c*c-o*o+$o*h)/(2*o*Xo*p),v=(c*c-o*o-$o*h)/(2*c*Xo*p),d=Math.log(Math.sqrt(g*g+1)-g),y=Math.log(Math.sqrt(v*v+1)-v);r=(y-d)/Vo,e=function(n){var t=n*r,e=rn(d),a=o/(Xo*p)*(e*un(Vo*t+d)-en(d));return[i+a*f,u+a*s,o*e/rn(Vo*t+d)]}}return e.duration=1e3*r,e},ao.behavior.zoom=function(){function n(n){n.on(L,s).on(Wo+".zoom",p).on("dblclick.zoom",g).on(R,h)}function e(n){return[(n[0]-k.x)/k.k,(n[1]-k.y)/k.k]}function r(n){return[n[0]*k.k+k.x,n[1]*k.k+k.y]}function i(n){k.k=Math.max(A[0],Math.min(A[1],n))}function u(n,t){t=r(t),k.x+=n[0]-t[0],k.y+=n[1]-t[1]}function o(t,e,r,o){t.__chart__={x:k.x,y:k.y,k:k.k},i(Math.pow(2,o)),u(d=e,r),t=ao.select(t),C>0&&(t=t.transition().duration(C)),t.call(n.event)}function a(){b&&b.domain(x.range().map(function(n){return(n-k.x)/k.k}).map(x.invert)),w&&w.domain(_.range().map(function(n){return(n-k.y)/k.k}).map(_.invert))}function l(n){z++||n({type:"zoomstart"})}function c(n){a(),n({type:"zoom",scale:k.k,translate:[k.x,k.y]})}function f(n){--z||(n({type:"zoomend"}),d=null)}function s(){function n(){a=1,u(ao.mouse(i),h),c(o)}function r(){s.on(q,null).on(T,null),p(a),f(o)}var i=this,o=D.of(i,arguments),a=0,s=ao.select(t(i)).on(q,n).on(T,r),h=e(ao.mouse(i)),p=W(i);Il.call(i),l(o)}function h(){function n(){var n=ao.touches(g);return p=k.k,n.forEach(function(n){n.identifier in d&&(d[n.identifier]=e(n))}),n}function t(){var t=ao.event.target;ao.select(t).on(x,r).on(b,a),_.push(t);for(var e=ao.event.changedTouches,i=0,u=e.length;u>i;++i)d[e[i].identifier]=null;var l=n(),c=Date.now();if(1===l.length){if(500>c-M){var f=l[0];o(g,f,d[f.identifier],Math.floor(Math.log(k.k)/Math.LN2)+1),S()}M=c}else if(l.length>1){var f=l[0],s=l[1],h=f[0]-s[0],p=f[1]-s[1];y=h*h+p*p}}function r(){var n,t,e,r,o=ao.touches(g);Il.call(g);for(var a=0,l=o.length;l>a;++a,r=null)if(e=o[a],r=d[e.identifier]){if(t)break;n=e,t=r}if(r){var f=(f=e[0]-n[0])*f+(f=e[1]-n[1])*f,s=y&&Math.sqrt(f/y);n=[(n[0]+e[0])/2,(n[1]+e[1])/2],t=[(t[0]+r[0])/2,(t[1]+r[1])/2],i(s*p)}M=null,u(n,t),c(v)}function a(){if(ao.event.touches.length){for(var t=ao.event.changedTouches,e=0,r=t.length;r>e;++e)delete d[t[e].identifier];for(var i in d)return void n()}ao.selectAll(_).on(m,null),w.on(L,s).on(R,h),N(),f(v)}var p,g=this,v=D.of(g,arguments),d={},y=0,m=".zoom-"+ao.event.changedTouches[0].identifier,x="touchmove"+m,b="touchend"+m,_=[],w=ao.select(g),N=W(g);t(),l(v),w.on(L,null).on(R,t)}function p(){var n=D.of(this,arguments);m?clearTimeout(m):(Il.call(this),v=e(d=y||ao.mouse(this)),l(n)),m=setTimeout(function(){m=null,f(n)},50),S(),i(Math.pow(2,.002*Bo())*k.k),u(d,v),c(n)}function g(){var n=ao.mouse(this),t=Math.log(k.k)/Math.LN2;o(this,n,e(n),ao.event.shiftKey?Math.ceil(t)-1:Math.floor(t)+1)}var v,d,y,m,M,x,b,_,w,k={x:0,y:0,k:1},E=[960,500],A=Jo,C=250,z=0,L="mousedown.zoom",q="mousemove.zoom",T="mouseup.zoom",R="touchstart.zoom",D=N(n,"zoomstart","zoom","zoomend");return Wo||(Wo="onwheel"in fo?(Bo=function(){return-ao.event.deltaY*(ao.event.deltaMode?120:1)},"wheel"):"onmousewheel"in fo?(Bo=function(){return ao.event.wheelDelta},"mousewheel"):(Bo=function(){return-ao.event.detail},"MozMousePixelScroll")),n.event=function(n){n.each(function(){var n=D.of(this,arguments),t=k;Hl?ao.select(this).transition().each("start.zoom",function(){k=this.__chart__||{x:0,y:0,k:1},l(n)}).tween("zoom:zoom",function(){var e=E[0],r=E[1],i=d?d[0]:e/2,u=d?d[1]:r/2,o=ao.interpolateZoom([(i-k.x)/k.k,(u-k.y)/k.k,e/k.k],[(i-t.x)/t.k,(u-t.y)/t.k,e/t.k]);return function(t){var r=o(t),a=e/r[2];this.__chart__=k={x:i-r[0]*a,y:u-r[1]*a,k:a},c(n)}}).each("interrupt.zoom",function(){f(n)}).each("end.zoom",function(){f(n)}):(this.__chart__=k,l(n),c(n),f(n))})},n.translate=function(t){return arguments.length?(k={x:+t[0],y:+t[1],k:k.k},a(),n):[k.x,k.y]},n.scale=function(t){return arguments.length?(k={x:k.x,y:k.y,k:null},i(+t),a(),n):k.k},n.scaleExtent=function(t){return arguments.length?(A=null==t?Jo:[+t[0],+t[1]],n):A},n.center=function(t){return arguments.length?(y=t&&[+t[0],+t[1]],n):y},n.size=function(t){return arguments.length?(E=t&&[+t[0],+t[1]],n):E},n.duration=function(t){return arguments.length?(C=+t,n):C},n.x=function(t){return arguments.length?(b=t,x=t.copy(),k={x:0,y:0,k:1},n):b},n.y=function(t){return arguments.length?(w=t,_=t.copy(),k={x:0,y:0,k:1},n):w},ao.rebind(n,D,"on")};var Bo,Wo,Jo=[0,1/0];ao.color=an,an.prototype.toString=function(){return this.rgb()+""},ao.hsl=ln;var Go=ln.prototype=new an;Go.brighter=function(n){return n=Math.pow(.7,arguments.length?n:1),new ln(this.h,this.s,this.l/n)},Go.darker=function(n){return n=Math.pow(.7,arguments.length?n:1),new ln(this.h,this.s,n*this.l)},Go.rgb=function(){return cn(this.h,this.s,this.l)},ao.hcl=fn;var Ko=fn.prototype=new an;Ko.brighter=function(n){return new fn(this.h,this.c,Math.min(100,this.l+Qo*(arguments.length?n:1)))},Ko.darker=function(n){return new fn(this.h,this.c,Math.max(0,this.l-Qo*(arguments.length?n:1)))},Ko.rgb=function(){return sn(this.h,this.c,this.l).rgb()},ao.lab=hn;var Qo=18,na=.95047,ta=1,ea=1.08883,ra=hn.prototype=new an;ra.brighter=function(n){return new hn(Math.min(100,this.l+Qo*(arguments.length?n:1)),this.a,this.b)},ra.darker=function(n){return new hn(Math.max(0,this.l-Qo*(arguments.length?n:1)),this.a,this.b)},ra.rgb=function(){return pn(this.l,this.a,this.b)},ao.rgb=mn;var ia=mn.prototype=new an;ia.brighter=function(n){n=Math.pow(.7,arguments.length?n:1);var t=this.r,e=this.g,r=this.b,i=30;return t||e||r?(t&&i>t&&(t=i),e&&i>e&&(e=i),r&&i>r&&(r=i),new mn(Math.min(255,t/n),Math.min(255,e/n),Math.min(255,r/n))):new mn(i,i,i)},ia.darker=function(n){return n=Math.pow(.7,arguments.length?n:1),new mn(n*this.r,n*this.g,n*this.b)},ia.hsl=function(){return wn(this.r,this.g,this.b)},ia.toString=function(){return"#"+bn(this.r)+bn(this.g)+bn(this.b)};var ua=ao.map({aliceblue:15792383,antiquewhite:16444375,aqua:65535,aquamarine:8388564,azure:15794175,beige:16119260,bisque:16770244,black:0,blanchedalmond:16772045,blue:255,blueviolet:9055202,brown:10824234,burlywood:14596231,cadetblue:6266528,chartreuse:8388352,chocolate:13789470,coral:16744272,cornflowerblue:6591981,cornsilk:16775388,crimson:14423100,cyan:65535,darkblue:139,darkcyan:35723,darkgoldenrod:12092939,darkgray:11119017,darkgreen:25600,darkgrey:11119017,darkkhaki:12433259,darkmagenta:9109643,darkolivegreen:5597999,darkorange:16747520,darkorchid:10040012,darkred:9109504,darksalmon:15308410,darkseagreen:9419919,darkslateblue:4734347,darkslategray:3100495,darkslategrey:3100495,darkturquoise:52945,darkviolet:9699539,deeppink:16716947,deepskyblue:49151,dimgray:6908265,dimgrey:6908265,dodgerblue:2003199,firebrick:11674146,floralwhite:16775920,forestgreen:2263842,fuchsia:16711935,gainsboro:14474460,ghostwhite:16316671,gold:16766720,goldenrod:14329120,gray:8421504,green:32768,greenyellow:11403055,grey:8421504,honeydew:15794160,hotpink:16738740,indianred:13458524,indigo:4915330,ivory:16777200,khaki:15787660,lavender:15132410,lavenderblush:16773365,lawngreen:8190976,lemonchiffon:16775885,lightblue:11393254,lightcoral:15761536,lightcyan:14745599,lightgoldenrodyellow:16448210,lightgray:13882323,lightgreen:9498256,lightgrey:13882323,lightpink:16758465,lightsalmon:16752762,lightseagreen:2142890,lightskyblue:8900346,lightslategray:7833753,lightslategrey:7833753,lightsteelblue:11584734,lightyellow:16777184,lime:65280,limegreen:3329330,linen:16445670,magenta:16711935,maroon:8388608,mediumaquamarine:6737322,mediumblue:205,mediumorchid:12211667,mediumpurple:9662683,mediumseagreen:3978097,mediumslateblue:8087790,mediumspringgreen:64154,mediumturquoise:4772300,mediumvioletred:13047173,midnightblue:1644912,mintcream:16121850,mistyrose:16770273,moccasin:16770229,navajowhite:16768685,navy:128,oldlace:16643558,olive:8421376,olivedrab:7048739,orange:16753920,orangered:16729344,orchid:14315734,palegoldenrod:15657130,palegreen:10025880,paleturquoise:11529966,palevioletred:14381203,papayawhip:16773077,peachpuff:16767673,peru:13468991,pink:16761035,plum:14524637,powderblue:11591910,purple:8388736,rebeccapurple:6697881,red:16711680,rosybrown:12357519,royalblue:4286945,saddlebrown:9127187,salmon:16416882,sandybrown:16032864,seagreen:3050327,seashell:16774638,sienna:10506797,silver:12632256,skyblue:8900331,slateblue:6970061,slategray:7372944,slategrey:7372944,snow:16775930,springgreen:65407,steelblue:4620980,tan:13808780,teal:32896,thistle:14204888,tomato:16737095,turquoise:4251856,violet:15631086,wheat:16113331,white:16777215,whitesmoke:16119285,yellow:16776960,yellowgreen:10145074});ua.forEach(function(n,t){ua.set(n,Mn(t))}),ao.functor=En,ao.xhr=An(m),ao.dsv=function(n,t){function e(n,e,u){arguments.length<3&&(u=e,e=null);var o=Cn(n,t,null==e?r:i(e),u);return o.row=function(n){return arguments.length?o.response(null==(e=n)?r:i(n)):e},o}function r(n){return e.parse(n.responseText)}function i(n){return function(t){return e.parse(t.responseText,n)}}function u(t){return t.map(o).join(n)}function o(n){return a.test(n)?'"'+n.replace(/\"/g,'""')+'"':n}var a=new RegExp('["'+n+"\n]"),l=n.charCodeAt(0);return e.parse=function(n,t){var r;return e.parseRows(n,function(n,e){if(r)return r(n,e-1);var i=new Function("d","return {"+n.map(function(n,t){return JSON.stringify(n)+": d["+t+"]"}).join(",")+"}");r=t?function(n,e){return t(i(n),e)}:i})},e.parseRows=function(n,t){function e(){if(f>=c)return o;if(i)return i=!1,u;var t=f;if(34===n.charCodeAt(t)){for(var e=t;e++<c;)if(34===n.charCodeAt(e)){if(34!==n.charCodeAt(e+1))break;++e}f=e+2;var r=n.charCodeAt(e+1);return 13===r?(i=!0,10===n.charCodeAt(e+2)&&++f):10===r&&(i=!0),n.slice(t+1,e).replace(/""/g,'"')}for(;c>f;){var r=n.charCodeAt(f++),a=1;if(10===r)i=!0;else if(13===r)i=!0,10===n.charCodeAt(f)&&(++f,++a);else if(r!==l)continue;return n.slice(t,f-a)}return n.slice(t)}for(var r,i,u={},o={},a=[],c=n.length,f=0,s=0;(r=e())!==o;){for(var h=[];r!==u&&r!==o;)h.push(r),r=e();t&&null==(h=t(h,s++))||a.push(h)}return a},e.format=function(t){if(Array.isArray(t[0]))return e.formatRows(t);var r=new y,i=[];return t.forEach(function(n){for(var t in n)r.has(t)||i.push(r.add(t))}),[i.map(o).join(n)].concat(t.map(function(t){return i.map(function(n){return o(t[n])}).join(n)})).join("\n")},e.formatRows=function(n){return n.map(u).join("\n")},e},ao.csv=ao.dsv(",","text/csv"),ao.tsv=ao.dsv("	","text/tab-separated-values");var oa,aa,la,ca,fa=this[x(this,"requestAnimationFrame")]||function(n){setTimeout(n,17)};ao.timer=function(){qn.apply(this,arguments)},ao.timer.flush=function(){Rn(),Dn()},ao.round=function(n,t){return t?Math.round(n*(t=Math.pow(10,t)))/t:Math.round(n)};var sa=["y","z","a","f","p","n","\xb5","m","","k","M","G","T","P","E","Z","Y"].map(Un);ao.formatPrefix=function(n,t){var e=0;return(n=+n)&&(0>n&&(n*=-1),t&&(n=ao.round(n,Pn(n,t))),e=1+Math.floor(1e-12+Math.log(n)/Math.LN10),e=Math.max(-24,Math.min(24,3*Math.floor((e-1)/3)))),sa[8+e/3]};var ha=/(?:([^{])?([<>=^]))?([+\- ])?([$#])?(0)?(\d+)?(,)?(\.-?\d+)?([a-z%])?/i,pa=ao.map({b:function(n){return n.toString(2)},c:function(n){return String.fromCharCode(n)},o:function(n){return n.toString(8)},x:function(n){return n.toString(16)},X:function(n){return n.toString(16).toUpperCase()},g:function(n,t){return n.toPrecision(t)},e:function(n,t){return n.toExponential(t)},f:function(n,t){return n.toFixed(t)},r:function(n,t){return(n=ao.round(n,Pn(n,t))).toFixed(Math.max(0,Math.min(20,Pn(n*(1+1e-15),t))))}}),ga=ao.time={},va=Date;Hn.prototype={getDate:function(){return this._.getUTCDate()},getDay:function(){return this._.getUTCDay()},getFullYear:function(){return this._.getUTCFullYear()},getHours:function(){return this._.getUTCHours()},getMilliseconds:function(){return this._.getUTCMilliseconds()},getMinutes:function(){return this._.getUTCMinutes()},getMonth:function(){return this._.getUTCMonth()},getSeconds:function(){return this._.getUTCSeconds()},getTime:function(){return this._.getTime()},getTimezoneOffset:function(){return 0},valueOf:function(){return this._.valueOf()},setDate:function(){da.setUTCDate.apply(this._,arguments)},setDay:function(){da.setUTCDay.apply(this._,arguments)},setFullYear:function(){da.setUTCFullYear.apply(this._,arguments)},setHours:function(){da.setUTCHours.apply(this._,arguments)},setMilliseconds:function(){da.setUTCMilliseconds.apply(this._,arguments)},setMinutes:function(){da.setUTCMinutes.apply(this._,arguments)},setMonth:function(){da.setUTCMonth.apply(this._,arguments)},setSeconds:function(){da.setUTCSeconds.apply(this._,arguments)},setTime:function(){da.setTime.apply(this._,arguments)}};var da=Date.prototype;ga.year=On(function(n){return n=ga.day(n),n.setMonth(0,1),n},function(n,t){n.setFullYear(n.getFullYear()+t)},function(n){return n.getFullYear()}),ga.years=ga.year.range,ga.years.utc=ga.year.utc.range,ga.day=On(function(n){var t=new va(2e3,0);return t.setFullYear(n.getFullYear(),n.getMonth(),n.getDate()),t},function(n,t){n.setDate(n.getDate()+t)},function(n){return n.getDate()-1}),ga.days=ga.day.range,ga.days.utc=ga.day.utc.range,ga.dayOfYear=function(n){var t=ga.year(n);return Math.floor((n-t-6e4*(n.getTimezoneOffset()-t.getTimezoneOffset()))/864e5)},["sunday","monday","tuesday","wednesday","thursday","friday","saturday"].forEach(function(n,t){t=7-t;var e=ga[n]=On(function(n){return(n=ga.day(n)).setDate(n.getDate()-(n.getDay()+t)%7),n},function(n,t){n.setDate(n.getDate()+7*Math.floor(t))},function(n){var e=ga.year(n).getDay();return Math.floor((ga.dayOfYear(n)+(e+t)%7)/7)-(e!==t)});ga[n+"s"]=e.range,ga[n+"s"].utc=e.utc.range,ga[n+"OfYear"]=function(n){var e=ga.year(n).getDay();return Math.floor((ga.dayOfYear(n)+(e+t)%7)/7)}}),ga.week=ga.sunday,ga.weeks=ga.sunday.range,ga.weeks.utc=ga.sunday.utc.range,ga.weekOfYear=ga.sundayOfYear;var ya={"-":"",_:" ",0:"0"},ma=/^\s*\d+/,Ma=/^%/;ao.locale=function(n){return{numberFormat:jn(n),timeFormat:Yn(n)}};var xa=ao.locale({decimal:".",thousands:",",grouping:[3],currency:["$",""],dateTime:"%a %b %e %X %Y",date:"%m/%d/%Y",time:"%H:%M:%S",periods:["AM","PM"],days:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],
+shortDays:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],months:["January","February","March","April","May","June","July","August","September","October","November","December"],shortMonths:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"]});ao.format=xa.numberFormat,ao.geo={},ft.prototype={s:0,t:0,add:function(n){st(n,this.t,ba),st(ba.s,this.s,this),this.s?this.t+=ba.t:this.s=ba.t},reset:function(){this.s=this.t=0},valueOf:function(){return this.s}};var ba=new ft;ao.geo.stream=function(n,t){n&&_a.hasOwnProperty(n.type)?_a[n.type](n,t):ht(n,t)};var _a={Feature:function(n,t){ht(n.geometry,t)},FeatureCollection:function(n,t){for(var e=n.features,r=-1,i=e.length;++r<i;)ht(e[r].geometry,t)}},wa={Sphere:function(n,t){t.sphere()},Point:function(n,t){n=n.coordinates,t.point(n[0],n[1],n[2])},MultiPoint:function(n,t){for(var e=n.coordinates,r=-1,i=e.length;++r<i;)n=e[r],t.point(n[0],n[1],n[2])},LineString:function(n,t){pt(n.coordinates,t,0)},MultiLineString:function(n,t){for(var e=n.coordinates,r=-1,i=e.length;++r<i;)pt(e[r],t,0)},Polygon:function(n,t){gt(n.coordinates,t)},MultiPolygon:function(n,t){for(var e=n.coordinates,r=-1,i=e.length;++r<i;)gt(e[r],t)},GeometryCollection:function(n,t){for(var e=n.geometries,r=-1,i=e.length;++r<i;)ht(e[r],t)}};ao.geo.area=function(n){return Sa=0,ao.geo.stream(n,Na),Sa};var Sa,ka=new ft,Na={sphere:function(){Sa+=4*Fo},point:b,lineStart:b,lineEnd:b,polygonStart:function(){ka.reset(),Na.lineStart=vt},polygonEnd:function(){var n=2*ka;Sa+=0>n?4*Fo+n:n,Na.lineStart=Na.lineEnd=Na.point=b}};ao.geo.bounds=function(){function n(n,t){M.push(x=[f=n,h=n]),s>t&&(s=t),t>p&&(p=t)}function t(t,e){var r=dt([t*Yo,e*Yo]);if(y){var i=mt(y,r),u=[i[1],-i[0],0],o=mt(u,i);bt(o),o=_t(o);var l=t-g,c=l>0?1:-1,v=o[0]*Zo*c,d=xo(l)>180;if(d^(v>c*g&&c*t>v)){var m=o[1]*Zo;m>p&&(p=m)}else if(v=(v+360)%360-180,d^(v>c*g&&c*t>v)){var m=-o[1]*Zo;s>m&&(s=m)}else s>e&&(s=e),e>p&&(p=e);d?g>t?a(f,t)>a(f,h)&&(h=t):a(t,h)>a(f,h)&&(f=t):h>=f?(f>t&&(f=t),t>h&&(h=t)):t>g?a(f,t)>a(f,h)&&(h=t):a(t,h)>a(f,h)&&(f=t)}else n(t,e);y=r,g=t}function e(){b.point=t}function r(){x[0]=f,x[1]=h,b.point=n,y=null}function i(n,e){if(y){var r=n-g;m+=xo(r)>180?r+(r>0?360:-360):r}else v=n,d=e;Na.point(n,e),t(n,e)}function u(){Na.lineStart()}function o(){i(v,d),Na.lineEnd(),xo(m)>Uo&&(f=-(h=180)),x[0]=f,x[1]=h,y=null}function a(n,t){return(t-=n)<0?t+360:t}function l(n,t){return n[0]-t[0]}function c(n,t){return t[0]<=t[1]?t[0]<=n&&n<=t[1]:n<t[0]||t[1]<n}var f,s,h,p,g,v,d,y,m,M,x,b={point:n,lineStart:e,lineEnd:r,polygonStart:function(){b.point=i,b.lineStart=u,b.lineEnd=o,m=0,Na.polygonStart()},polygonEnd:function(){Na.polygonEnd(),b.point=n,b.lineStart=e,b.lineEnd=r,0>ka?(f=-(h=180),s=-(p=90)):m>Uo?p=90:-Uo>m&&(s=-90),x[0]=f,x[1]=h}};return function(n){p=h=-(f=s=1/0),M=[],ao.geo.stream(n,b);var t=M.length;if(t){M.sort(l);for(var e,r=1,i=M[0],u=[i];t>r;++r)e=M[r],c(e[0],i)||c(e[1],i)?(a(i[0],e[1])>a(i[0],i[1])&&(i[1]=e[1]),a(e[0],i[1])>a(i[0],i[1])&&(i[0]=e[0])):u.push(i=e);for(var o,e,g=-(1/0),t=u.length-1,r=0,i=u[t];t>=r;i=e,++r)e=u[r],(o=a(i[1],e[0]))>g&&(g=o,f=e[0],h=i[1])}return M=x=null,f===1/0||s===1/0?[[NaN,NaN],[NaN,NaN]]:[[f,s],[h,p]]}}(),ao.geo.centroid=function(n){Ea=Aa=Ca=za=La=qa=Ta=Ra=Da=Pa=Ua=0,ao.geo.stream(n,ja);var t=Da,e=Pa,r=Ua,i=t*t+e*e+r*r;return jo>i&&(t=qa,e=Ta,r=Ra,Uo>Aa&&(t=Ca,e=za,r=La),i=t*t+e*e+r*r,jo>i)?[NaN,NaN]:[Math.atan2(e,t)*Zo,tn(r/Math.sqrt(i))*Zo]};var Ea,Aa,Ca,za,La,qa,Ta,Ra,Da,Pa,Ua,ja={sphere:b,point:St,lineStart:Nt,lineEnd:Et,polygonStart:function(){ja.lineStart=At},polygonEnd:function(){ja.lineStart=Nt}},Fa=Rt(zt,jt,Ht,[-Fo,-Fo/2]),Ha=1e9;ao.geo.clipExtent=function(){var n,t,e,r,i,u,o={stream:function(n){return i&&(i.valid=!1),i=u(n),i.valid=!0,i},extent:function(a){return arguments.length?(u=Zt(n=+a[0][0],t=+a[0][1],e=+a[1][0],r=+a[1][1]),i&&(i.valid=!1,i=null),o):[[n,t],[e,r]]}};return o.extent([[0,0],[960,500]])},(ao.geo.conicEqualArea=function(){return Vt(Xt)}).raw=Xt,ao.geo.albers=function(){return ao.geo.conicEqualArea().rotate([96,0]).center([-.6,38.7]).parallels([29.5,45.5]).scale(1070)},ao.geo.albersUsa=function(){function n(n){var u=n[0],o=n[1];return t=null,e(u,o),t||(r(u,o),t)||i(u,o),t}var t,e,r,i,u=ao.geo.albers(),o=ao.geo.conicEqualArea().rotate([154,0]).center([-2,58.5]).parallels([55,65]),a=ao.geo.conicEqualArea().rotate([157,0]).center([-3,19.9]).parallels([8,18]),l={point:function(n,e){t=[n,e]}};return n.invert=function(n){var t=u.scale(),e=u.translate(),r=(n[0]-e[0])/t,i=(n[1]-e[1])/t;return(i>=.12&&.234>i&&r>=-.425&&-.214>r?o:i>=.166&&.234>i&&r>=-.214&&-.115>r?a:u).invert(n)},n.stream=function(n){var t=u.stream(n),e=o.stream(n),r=a.stream(n);return{point:function(n,i){t.point(n,i),e.point(n,i),r.point(n,i)},sphere:function(){t.sphere(),e.sphere(),r.sphere()},lineStart:function(){t.lineStart(),e.lineStart(),r.lineStart()},lineEnd:function(){t.lineEnd(),e.lineEnd(),r.lineEnd()},polygonStart:function(){t.polygonStart(),e.polygonStart(),r.polygonStart()},polygonEnd:function(){t.polygonEnd(),e.polygonEnd(),r.polygonEnd()}}},n.precision=function(t){return arguments.length?(u.precision(t),o.precision(t),a.precision(t),n):u.precision()},n.scale=function(t){return arguments.length?(u.scale(t),o.scale(.35*t),a.scale(t),n.translate(u.translate())):u.scale()},n.translate=function(t){if(!arguments.length)return u.translate();var c=u.scale(),f=+t[0],s=+t[1];return e=u.translate(t).clipExtent([[f-.455*c,s-.238*c],[f+.455*c,s+.238*c]]).stream(l).point,r=o.translate([f-.307*c,s+.201*c]).clipExtent([[f-.425*c+Uo,s+.12*c+Uo],[f-.214*c-Uo,s+.234*c-Uo]]).stream(l).point,i=a.translate([f-.205*c,s+.212*c]).clipExtent([[f-.214*c+Uo,s+.166*c+Uo],[f-.115*c-Uo,s+.234*c-Uo]]).stream(l).point,n},n.scale(1070)};var Oa,Ia,Ya,Za,Va,Xa,$a={point:b,lineStart:b,lineEnd:b,polygonStart:function(){Ia=0,$a.lineStart=$t},polygonEnd:function(){$a.lineStart=$a.lineEnd=$a.point=b,Oa+=xo(Ia/2)}},Ba={point:Bt,lineStart:b,lineEnd:b,polygonStart:b,polygonEnd:b},Wa={point:Gt,lineStart:Kt,lineEnd:Qt,polygonStart:function(){Wa.lineStart=ne},polygonEnd:function(){Wa.point=Gt,Wa.lineStart=Kt,Wa.lineEnd=Qt}};ao.geo.path=function(){function n(n){return n&&("function"==typeof a&&u.pointRadius(+a.apply(this,arguments)),o&&o.valid||(o=i(u)),ao.geo.stream(n,o)),u.result()}function t(){return o=null,n}var e,r,i,u,o,a=4.5;return n.area=function(n){return Oa=0,ao.geo.stream(n,i($a)),Oa},n.centroid=function(n){return Ca=za=La=qa=Ta=Ra=Da=Pa=Ua=0,ao.geo.stream(n,i(Wa)),Ua?[Da/Ua,Pa/Ua]:Ra?[qa/Ra,Ta/Ra]:La?[Ca/La,za/La]:[NaN,NaN]},n.bounds=function(n){return Va=Xa=-(Ya=Za=1/0),ao.geo.stream(n,i(Ba)),[[Ya,Za],[Va,Xa]]},n.projection=function(n){return arguments.length?(i=(e=n)?n.stream||re(n):m,t()):e},n.context=function(n){return arguments.length?(u=null==(r=n)?new Wt:new te(n),"function"!=typeof a&&u.pointRadius(a),t()):r},n.pointRadius=function(t){return arguments.length?(a="function"==typeof t?t:(u.pointRadius(+t),+t),n):a},n.projection(ao.geo.albersUsa()).context(null)},ao.geo.transform=function(n){return{stream:function(t){var e=new ie(t);for(var r in n)e[r]=n[r];return e}}},ie.prototype={point:function(n,t){this.stream.point(n,t)},sphere:function(){this.stream.sphere()},lineStart:function(){this.stream.lineStart()},lineEnd:function(){this.stream.lineEnd()},polygonStart:function(){this.stream.polygonStart()},polygonEnd:function(){this.stream.polygonEnd()}},ao.geo.projection=oe,ao.geo.projectionMutator=ae,(ao.geo.equirectangular=function(){return oe(ce)}).raw=ce.invert=ce,ao.geo.rotation=function(n){function t(t){return t=n(t[0]*Yo,t[1]*Yo),t[0]*=Zo,t[1]*=Zo,t}return n=se(n[0]%360*Yo,n[1]*Yo,n.length>2?n[2]*Yo:0),t.invert=function(t){return t=n.invert(t[0]*Yo,t[1]*Yo),t[0]*=Zo,t[1]*=Zo,t},t},fe.invert=ce,ao.geo.circle=function(){function n(){var n="function"==typeof r?r.apply(this,arguments):r,t=se(-n[0]*Yo,-n[1]*Yo,0).invert,i=[];return e(null,null,1,{point:function(n,e){i.push(n=t(n,e)),n[0]*=Zo,n[1]*=Zo}}),{type:"Polygon",coordinates:[i]}}var t,e,r=[0,0],i=6;return n.origin=function(t){return arguments.length?(r=t,n):r},n.angle=function(r){return arguments.length?(e=ve((t=+r)*Yo,i*Yo),n):t},n.precision=function(r){return arguments.length?(e=ve(t*Yo,(i=+r)*Yo),n):i},n.angle(90)},ao.geo.distance=function(n,t){var e,r=(t[0]-n[0])*Yo,i=n[1]*Yo,u=t[1]*Yo,o=Math.sin(r),a=Math.cos(r),l=Math.sin(i),c=Math.cos(i),f=Math.sin(u),s=Math.cos(u);return Math.atan2(Math.sqrt((e=s*o)*e+(e=c*f-l*s*a)*e),l*f+c*s*a)},ao.geo.graticule=function(){function n(){return{type:"MultiLineString",coordinates:t()}}function t(){return ao.range(Math.ceil(u/d)*d,i,d).map(h).concat(ao.range(Math.ceil(c/y)*y,l,y).map(p)).concat(ao.range(Math.ceil(r/g)*g,e,g).filter(function(n){return xo(n%d)>Uo}).map(f)).concat(ao.range(Math.ceil(a/v)*v,o,v).filter(function(n){return xo(n%y)>Uo}).map(s))}var e,r,i,u,o,a,l,c,f,s,h,p,g=10,v=g,d=90,y=360,m=2.5;return n.lines=function(){return t().map(function(n){return{type:"LineString",coordinates:n}})},n.outline=function(){return{type:"Polygon",coordinates:[h(u).concat(p(l).slice(1),h(i).reverse().slice(1),p(c).reverse().slice(1))]}},n.extent=function(t){return arguments.length?n.majorExtent(t).minorExtent(t):n.minorExtent()},n.majorExtent=function(t){return arguments.length?(u=+t[0][0],i=+t[1][0],c=+t[0][1],l=+t[1][1],u>i&&(t=u,u=i,i=t),c>l&&(t=c,c=l,l=t),n.precision(m)):[[u,c],[i,l]]},n.minorExtent=function(t){return arguments.length?(r=+t[0][0],e=+t[1][0],a=+t[0][1],o=+t[1][1],r>e&&(t=r,r=e,e=t),a>o&&(t=a,a=o,o=t),n.precision(m)):[[r,a],[e,o]]},n.step=function(t){return arguments.length?n.majorStep(t).minorStep(t):n.minorStep()},n.majorStep=function(t){return arguments.length?(d=+t[0],y=+t[1],n):[d,y]},n.minorStep=function(t){return arguments.length?(g=+t[0],v=+t[1],n):[g,v]},n.precision=function(t){return arguments.length?(m=+t,f=ye(a,o,90),s=me(r,e,m),h=ye(c,l,90),p=me(u,i,m),n):m},n.majorExtent([[-180,-90+Uo],[180,90-Uo]]).minorExtent([[-180,-80-Uo],[180,80+Uo]])},ao.geo.greatArc=function(){function n(){return{type:"LineString",coordinates:[t||r.apply(this,arguments),e||i.apply(this,arguments)]}}var t,e,r=Me,i=xe;return n.distance=function(){return ao.geo.distance(t||r.apply(this,arguments),e||i.apply(this,arguments))},n.source=function(e){return arguments.length?(r=e,t="function"==typeof e?null:e,n):r},n.target=function(t){return arguments.length?(i=t,e="function"==typeof t?null:t,n):i},n.precision=function(){return arguments.length?n:0},n},ao.geo.interpolate=function(n,t){return be(n[0]*Yo,n[1]*Yo,t[0]*Yo,t[1]*Yo)},ao.geo.length=function(n){return Ja=0,ao.geo.stream(n,Ga),Ja};var Ja,Ga={sphere:b,point:b,lineStart:_e,lineEnd:b,polygonStart:b,polygonEnd:b},Ka=we(function(n){return Math.sqrt(2/(1+n))},function(n){return 2*Math.asin(n/2)});(ao.geo.azimuthalEqualArea=function(){return oe(Ka)}).raw=Ka;var Qa=we(function(n){var t=Math.acos(n);return t&&t/Math.sin(t)},m);(ao.geo.azimuthalEquidistant=function(){return oe(Qa)}).raw=Qa,(ao.geo.conicConformal=function(){return Vt(Se)}).raw=Se,(ao.geo.conicEquidistant=function(){return Vt(ke)}).raw=ke;var nl=we(function(n){return 1/n},Math.atan);(ao.geo.gnomonic=function(){return oe(nl)}).raw=nl,Ne.invert=function(n,t){return[n,2*Math.atan(Math.exp(t))-Io]},(ao.geo.mercator=function(){return Ee(Ne)}).raw=Ne;var tl=we(function(){return 1},Math.asin);(ao.geo.orthographic=function(){return oe(tl)}).raw=tl;var el=we(function(n){return 1/(1+n)},function(n){return 2*Math.atan(n)});(ao.geo.stereographic=function(){return oe(el)}).raw=el,Ae.invert=function(n,t){return[-t,2*Math.atan(Math.exp(n))-Io]},(ao.geo.transverseMercator=function(){var n=Ee(Ae),t=n.center,e=n.rotate;return n.center=function(n){return n?t([-n[1],n[0]]):(n=t(),[n[1],-n[0]])},n.rotate=function(n){return n?e([n[0],n[1],n.length>2?n[2]+90:90]):(n=e(),[n[0],n[1],n[2]-90])},e([0,0,90])}).raw=Ae,ao.geom={},ao.geom.hull=function(n){function t(n){if(n.length<3)return[];var t,i=En(e),u=En(r),o=n.length,a=[],l=[];for(t=0;o>t;t++)a.push([+i.call(this,n[t],t),+u.call(this,n[t],t),t]);for(a.sort(qe),t=0;o>t;t++)l.push([a[t][0],-a[t][1]]);var c=Le(a),f=Le(l),s=f[0]===c[0],h=f[f.length-1]===c[c.length-1],p=[];for(t=c.length-1;t>=0;--t)p.push(n[a[c[t]][2]]);for(t=+s;t<f.length-h;++t)p.push(n[a[f[t]][2]]);return p}var e=Ce,r=ze;return arguments.length?t(n):(t.x=function(n){return arguments.length?(e=n,t):e},t.y=function(n){return arguments.length?(r=n,t):r},t)},ao.geom.polygon=function(n){return ko(n,rl),n};var rl=ao.geom.polygon.prototype=[];rl.area=function(){for(var n,t=-1,e=this.length,r=this[e-1],i=0;++t<e;)n=r,r=this[t],i+=n[1]*r[0]-n[0]*r[1];return.5*i},rl.centroid=function(n){var t,e,r=-1,i=this.length,u=0,o=0,a=this[i-1];for(arguments.length||(n=-1/(6*this.area()));++r<i;)t=a,a=this[r],e=t[0]*a[1]-a[0]*t[1],u+=(t[0]+a[0])*e,o+=(t[1]+a[1])*e;return[u*n,o*n]},rl.clip=function(n){for(var t,e,r,i,u,o,a=De(n),l=-1,c=this.length-De(this),f=this[c-1];++l<c;){for(t=n.slice(),n.length=0,i=this[l],u=t[(r=t.length-a)-1],e=-1;++e<r;)o=t[e],Te(o,f,i)?(Te(u,f,i)||n.push(Re(u,o,f,i)),n.push(o)):Te(u,f,i)&&n.push(Re(u,o,f,i)),u=o;a&&n.push(n[0]),f=i}return n};var il,ul,ol,al,ll,cl=[],fl=[];Ye.prototype.prepare=function(){for(var n,t=this.edges,e=t.length;e--;)n=t[e].edge,n.b&&n.a||t.splice(e,1);return t.sort(Ve),t.length},tr.prototype={start:function(){return this.edge.l===this.site?this.edge.a:this.edge.b},end:function(){return this.edge.l===this.site?this.edge.b:this.edge.a}},er.prototype={insert:function(n,t){var e,r,i;if(n){if(t.P=n,t.N=n.N,n.N&&(n.N.P=t),n.N=t,n.R){for(n=n.R;n.L;)n=n.L;n.L=t}else n.R=t;e=n}else this._?(n=or(this._),t.P=null,t.N=n,n.P=n.L=t,e=n):(t.P=t.N=null,this._=t,e=null);for(t.L=t.R=null,t.U=e,t.C=!0,n=t;e&&e.C;)r=e.U,e===r.L?(i=r.R,i&&i.C?(e.C=i.C=!1,r.C=!0,n=r):(n===e.R&&(ir(this,e),n=e,e=n.U),e.C=!1,r.C=!0,ur(this,r))):(i=r.L,i&&i.C?(e.C=i.C=!1,r.C=!0,n=r):(n===e.L&&(ur(this,e),n=e,e=n.U),e.C=!1,r.C=!0,ir(this,r))),e=n.U;this._.C=!1},remove:function(n){n.N&&(n.N.P=n.P),n.P&&(n.P.N=n.N),n.N=n.P=null;var t,e,r,i=n.U,u=n.L,o=n.R;if(e=u?o?or(o):u:o,i?i.L===n?i.L=e:i.R=e:this._=e,u&&o?(r=e.C,e.C=n.C,e.L=u,u.U=e,e!==o?(i=e.U,e.U=n.U,n=e.R,i.L=n,e.R=o,o.U=e):(e.U=i,i=e,n=e.R)):(r=n.C,n=e),n&&(n.U=i),!r){if(n&&n.C)return void(n.C=!1);do{if(n===this._)break;if(n===i.L){if(t=i.R,t.C&&(t.C=!1,i.C=!0,ir(this,i),t=i.R),t.L&&t.L.C||t.R&&t.R.C){t.R&&t.R.C||(t.L.C=!1,t.C=!0,ur(this,t),t=i.R),t.C=i.C,i.C=t.R.C=!1,ir(this,i),n=this._;break}}else if(t=i.L,t.C&&(t.C=!1,i.C=!0,ur(this,i),t=i.L),t.L&&t.L.C||t.R&&t.R.C){t.L&&t.L.C||(t.R.C=!1,t.C=!0,ir(this,t),t=i.L),t.C=i.C,i.C=t.L.C=!1,ur(this,i),n=this._;break}t.C=!0,n=i,i=i.U}while(!n.C);n&&(n.C=!1)}}},ao.geom.voronoi=function(n){function t(n){var t=new Array(n.length),r=a[0][0],i=a[0][1],u=a[1][0],o=a[1][1];return ar(e(n),a).cells.forEach(function(e,a){var l=e.edges,c=e.site,f=t[a]=l.length?l.map(function(n){var t=n.start();return[t.x,t.y]}):c.x>=r&&c.x<=u&&c.y>=i&&c.y<=o?[[r,o],[u,o],[u,i],[r,i]]:[];f.point=n[a]}),t}function e(n){return n.map(function(n,t){return{x:Math.round(u(n,t)/Uo)*Uo,y:Math.round(o(n,t)/Uo)*Uo,i:t}})}var r=Ce,i=ze,u=r,o=i,a=sl;return n?t(n):(t.links=function(n){return ar(e(n)).edges.filter(function(n){return n.l&&n.r}).map(function(t){return{source:n[t.l.i],target:n[t.r.i]}})},t.triangles=function(n){var t=[];return ar(e(n)).cells.forEach(function(e,r){for(var i,u,o=e.site,a=e.edges.sort(Ve),l=-1,c=a.length,f=a[c-1].edge,s=f.l===o?f.r:f.l;++l<c;)i=f,u=s,f=a[l].edge,s=f.l===o?f.r:f.l,r<u.i&&r<s.i&&cr(o,u,s)<0&&t.push([n[r],n[u.i],n[s.i]])}),t},t.x=function(n){return arguments.length?(u=En(r=n),t):r},t.y=function(n){return arguments.length?(o=En(i=n),t):i},t.clipExtent=function(n){return arguments.length?(a=null==n?sl:n,t):a===sl?null:a},t.size=function(n){return arguments.length?t.clipExtent(n&&[[0,0],n]):a===sl?null:a&&a[1]},t)};var sl=[[-1e6,-1e6],[1e6,1e6]];ao.geom.delaunay=function(n){return ao.geom.voronoi().triangles(n)},ao.geom.quadtree=function(n,t,e,r,i){function u(n){function u(n,t,e,r,i,u,o,a){if(!isNaN(e)&&!isNaN(r))if(n.leaf){var l=n.x,f=n.y;if(null!=l)if(xo(l-e)+xo(f-r)<.01)c(n,t,e,r,i,u,o,a);else{var s=n.point;n.x=n.y=n.point=null,c(n,s,l,f,i,u,o,a),c(n,t,e,r,i,u,o,a)}else n.x=e,n.y=r,n.point=t}else c(n,t,e,r,i,u,o,a)}function c(n,t,e,r,i,o,a,l){var c=.5*(i+a),f=.5*(o+l),s=e>=c,h=r>=f,p=h<<1|s;n.leaf=!1,n=n.nodes[p]||(n.nodes[p]=hr()),s?i=c:a=c,h?o=f:l=f,u(n,t,e,r,i,o,a,l)}var f,s,h,p,g,v,d,y,m,M=En(a),x=En(l);if(null!=t)v=t,d=e,y=r,m=i;else if(y=m=-(v=d=1/0),s=[],h=[],g=n.length,o)for(p=0;g>p;++p)f=n[p],f.x<v&&(v=f.x),f.y<d&&(d=f.y),f.x>y&&(y=f.x),f.y>m&&(m=f.y),s.push(f.x),h.push(f.y);else for(p=0;g>p;++p){var b=+M(f=n[p],p),_=+x(f,p);v>b&&(v=b),d>_&&(d=_),b>y&&(y=b),_>m&&(m=_),s.push(b),h.push(_)}var w=y-v,S=m-d;w>S?m=d+w:y=v+S;var k=hr();if(k.add=function(n){u(k,n,+M(n,++p),+x(n,p),v,d,y,m)},k.visit=function(n){pr(n,k,v,d,y,m)},k.find=function(n){return gr(k,n[0],n[1],v,d,y,m)},p=-1,null==t){for(;++p<g;)u(k,n[p],s[p],h[p],v,d,y,m);--p}else n.forEach(k.add);return s=h=n=f=null,k}var o,a=Ce,l=ze;return(o=arguments.length)?(a=fr,l=sr,3===o&&(i=e,r=t,e=t=0),u(n)):(u.x=function(n){return arguments.length?(a=n,u):a},u.y=function(n){return arguments.length?(l=n,u):l},u.extent=function(n){return arguments.length?(null==n?t=e=r=i=null:(t=+n[0][0],e=+n[0][1],r=+n[1][0],i=+n[1][1]),u):null==t?null:[[t,e],[r,i]]},u.size=function(n){return arguments.length?(null==n?t=e=r=i=null:(t=e=0,r=+n[0],i=+n[1]),u):null==t?null:[r-t,i-e]},u)},ao.interpolateRgb=vr,ao.interpolateObject=dr,ao.interpolateNumber=yr,ao.interpolateString=mr;var hl=/[-+]?(?:\d+\.?\d*|\.?\d+)(?:[eE][-+]?\d+)?/g,pl=new RegExp(hl.source,"g");ao.interpolate=Mr,ao.interpolators=[function(n,t){var e=typeof t;return("string"===e?ua.has(t.toLowerCase())||/^(#|rgb\(|hsl\()/i.test(t)?vr:mr:t instanceof an?vr:Array.isArray(t)?xr:"object"===e&&isNaN(t)?dr:yr)(n,t)}],ao.interpolateArray=xr;var gl=function(){return m},vl=ao.map({linear:gl,poly:Er,quad:function(){return Sr},cubic:function(){return kr},sin:function(){return Ar},exp:function(){return Cr},circle:function(){return zr},elastic:Lr,back:qr,bounce:function(){return Tr}}),dl=ao.map({"in":m,out:_r,"in-out":wr,"out-in":function(n){return wr(_r(n))}});ao.ease=function(n){var t=n.indexOf("-"),e=t>=0?n.slice(0,t):n,r=t>=0?n.slice(t+1):"in";return e=vl.get(e)||gl,r=dl.get(r)||m,br(r(e.apply(null,lo.call(arguments,1))))},ao.interpolateHcl=Rr,ao.interpolateHsl=Dr,ao.interpolateLab=Pr,ao.interpolateRound=Ur,ao.transform=function(n){var t=fo.createElementNS(ao.ns.prefix.svg,"g");return(ao.transform=function(n){if(null!=n){t.setAttribute("transform",n);var e=t.transform.baseVal.consolidate()}return new jr(e?e.matrix:yl)})(n)},jr.prototype.toString=function(){return"translate("+this.translate+")rotate("+this.rotate+")skewX("+this.skew+")scale("+this.scale+")"};var yl={a:1,b:0,c:0,d:1,e:0,f:0};ao.interpolateTransform=$r,ao.layout={},ao.layout.bundle=function(){return function(n){for(var t=[],e=-1,r=n.length;++e<r;)t.push(Jr(n[e]));return t}},ao.layout.chord=function(){function n(){var n,c,s,h,p,g={},v=[],d=ao.range(u),y=[];for(e=[],r=[],n=0,h=-1;++h<u;){for(c=0,p=-1;++p<u;)c+=i[h][p];v.push(c),y.push(ao.range(u)),n+=c}for(o&&d.sort(function(n,t){return o(v[n],v[t])}),a&&y.forEach(function(n,t){n.sort(function(n,e){return a(i[t][n],i[t][e])})}),n=(Ho-f*u)/n,c=0,h=-1;++h<u;){for(s=c,p=-1;++p<u;){var m=d[h],M=y[m][p],x=i[m][M],b=c,_=c+=x*n;g[m+"-"+M]={index:m,subindex:M,startAngle:b,endAngle:_,value:x}}r[m]={index:m,startAngle:s,endAngle:c,value:v[m]},c+=f}for(h=-1;++h<u;)for(p=h-1;++p<u;){var w=g[h+"-"+p],S=g[p+"-"+h];(w.value||S.value)&&e.push(w.value<S.value?{source:S,target:w}:{source:w,target:S})}l&&t()}function t(){e.sort(function(n,t){return l((n.source.value+n.target.value)/2,(t.source.value+t.target.value)/2)})}var e,r,i,u,o,a,l,c={},f=0;return c.matrix=function(n){return arguments.length?(u=(i=n)&&i.length,e=r=null,c):i},c.padding=function(n){return arguments.length?(f=n,e=r=null,c):f},c.sortGroups=function(n){return arguments.length?(o=n,e=r=null,c):o},c.sortSubgroups=function(n){return arguments.length?(a=n,e=null,c):a},c.sortChords=function(n){return arguments.length?(l=n,e&&t(),c):l},c.chords=function(){return e||n(),e},c.groups=function(){return r||n(),r},c},ao.layout.force=function(){function n(n){return function(t,e,r,i){if(t.point!==n){var u=t.cx-n.x,o=t.cy-n.y,a=i-e,l=u*u+o*o;if(l>a*a/y){if(v>l){var c=t.charge/l;n.px-=u*c,n.py-=o*c}return!0}if(t.point&&l&&v>l){var c=t.pointCharge/l;n.px-=u*c,n.py-=o*c}}return!t.charge}}function t(n){n.px=ao.event.x,n.py=ao.event.y,l.resume()}var e,r,i,u,o,a,l={},c=ao.dispatch("start","tick","end"),f=[1,1],s=.9,h=ml,p=Ml,g=-30,v=xl,d=.1,y=.64,M=[],x=[];return l.tick=function(){if((i*=.99)<.005)return e=null,c.end({type:"end",alpha:i=0}),!0;var t,r,l,h,p,v,y,m,b,_=M.length,w=x.length;for(r=0;w>r;++r)l=x[r],h=l.source,p=l.target,m=p.x-h.x,b=p.y-h.y,(v=m*m+b*b)&&(v=i*o[r]*((v=Math.sqrt(v))-u[r])/v,m*=v,b*=v,p.x-=m*(y=h.weight+p.weight?h.weight/(h.weight+p.weight):.5),p.y-=b*y,h.x+=m*(y=1-y),h.y+=b*y);if((y=i*d)&&(m=f[0]/2,b=f[1]/2,r=-1,y))for(;++r<_;)l=M[r],l.x+=(m-l.x)*y,l.y+=(b-l.y)*y;if(g)for(ri(t=ao.geom.quadtree(M),i,a),r=-1;++r<_;)(l=M[r]).fixed||t.visit(n(l));for(r=-1;++r<_;)l=M[r],l.fixed?(l.x=l.px,l.y=l.py):(l.x-=(l.px-(l.px=l.x))*s,l.y-=(l.py-(l.py=l.y))*s);c.tick({type:"tick",alpha:i})},l.nodes=function(n){return arguments.length?(M=n,l):M},l.links=function(n){return arguments.length?(x=n,l):x},l.size=function(n){return arguments.length?(f=n,l):f},l.linkDistance=function(n){return arguments.length?(h="function"==typeof n?n:+n,l):h},l.distance=l.linkDistance,l.linkStrength=function(n){return arguments.length?(p="function"==typeof n?n:+n,l):p},l.friction=function(n){return arguments.length?(s=+n,l):s},l.charge=function(n){return arguments.length?(g="function"==typeof n?n:+n,l):g},l.chargeDistance=function(n){return arguments.length?(v=n*n,l):Math.sqrt(v)},l.gravity=function(n){return arguments.length?(d=+n,l):d},l.theta=function(n){return arguments.length?(y=n*n,l):Math.sqrt(y)},l.alpha=function(n){return arguments.length?(n=+n,i?n>0?i=n:(e.c=null,e.t=NaN,e=null,c.end({type:"end",alpha:i=0})):n>0&&(c.start({type:"start",alpha:i=n}),e=qn(l.tick)),l):i},l.start=function(){function n(n,r){if(!e){for(e=new Array(i),l=0;i>l;++l)e[l]=[];for(l=0;c>l;++l){var u=x[l];e[u.source.index].push(u.target),e[u.target.index].push(u.source)}}for(var o,a=e[t],l=-1,f=a.length;++l<f;)if(!isNaN(o=a[l][n]))return o;return Math.random()*r}var t,e,r,i=M.length,c=x.length,s=f[0],v=f[1];for(t=0;i>t;++t)(r=M[t]).index=t,r.weight=0;for(t=0;c>t;++t)r=x[t],"number"==typeof r.source&&(r.source=M[r.source]),"number"==typeof r.target&&(r.target=M[r.target]),++r.source.weight,++r.target.weight;for(t=0;i>t;++t)r=M[t],isNaN(r.x)&&(r.x=n("x",s)),isNaN(r.y)&&(r.y=n("y",v)),isNaN(r.px)&&(r.px=r.x),isNaN(r.py)&&(r.py=r.y);if(u=[],"function"==typeof h)for(t=0;c>t;++t)u[t]=+h.call(this,x[t],t);else for(t=0;c>t;++t)u[t]=h;if(o=[],"function"==typeof p)for(t=0;c>t;++t)o[t]=+p.call(this,x[t],t);else for(t=0;c>t;++t)o[t]=p;if(a=[],"function"==typeof g)for(t=0;i>t;++t)a[t]=+g.call(this,M[t],t);else for(t=0;i>t;++t)a[t]=g;return l.resume()},l.resume=function(){return l.alpha(.1)},l.stop=function(){return l.alpha(0)},l.drag=function(){return r||(r=ao.behavior.drag().origin(m).on("dragstart.force",Qr).on("drag.force",t).on("dragend.force",ni)),arguments.length?void this.on("mouseover.force",ti).on("mouseout.force",ei).call(r):r},ao.rebind(l,c,"on")};var ml=20,Ml=1,xl=1/0;ao.layout.hierarchy=function(){function n(i){var u,o=[i],a=[];for(i.depth=0;null!=(u=o.pop());)if(a.push(u),(c=e.call(n,u,u.depth))&&(l=c.length)){for(var l,c,f;--l>=0;)o.push(f=c[l]),f.parent=u,f.depth=u.depth+1;r&&(u.value=0),u.children=c}else r&&(u.value=+r.call(n,u,u.depth)||0),delete u.children;return oi(i,function(n){var e,i;t&&(e=n.children)&&e.sort(t),r&&(i=n.parent)&&(i.value+=n.value)}),a}var t=ci,e=ai,r=li;return n.sort=function(e){return arguments.length?(t=e,n):t},n.children=function(t){return arguments.length?(e=t,n):e},n.value=function(t){return arguments.length?(r=t,n):r},n.revalue=function(t){return r&&(ui(t,function(n){n.children&&(n.value=0)}),oi(t,function(t){var e;t.children||(t.value=+r.call(n,t,t.depth)||0),(e=t.parent)&&(e.value+=t.value)})),t},n},ao.layout.partition=function(){function n(t,e,r,i){var u=t.children;if(t.x=e,t.y=t.depth*i,t.dx=r,t.dy=i,u&&(o=u.length)){var o,a,l,c=-1;for(r=t.value?r/t.value:0;++c<o;)n(a=u[c],e,l=a.value*r,i),e+=l}}function t(n){var e=n.children,r=0;if(e&&(i=e.length))for(var i,u=-1;++u<i;)r=Math.max(r,t(e[u]));return 1+r}function e(e,u){var o=r.call(this,e,u);return n(o[0],0,i[0],i[1]/t(o[0])),o}var r=ao.layout.hierarchy(),i=[1,1];return e.size=function(n){return arguments.length?(i=n,e):i},ii(e,r)},ao.layout.pie=function(){function n(o){var a,l=o.length,c=o.map(function(e,r){return+t.call(n,e,r)}),f=+("function"==typeof r?r.apply(this,arguments):r),s=("function"==typeof i?i.apply(this,arguments):i)-f,h=Math.min(Math.abs(s)/l,+("function"==typeof u?u.apply(this,arguments):u)),p=h*(0>s?-1:1),g=ao.sum(c),v=g?(s-l*p)/g:0,d=ao.range(l),y=[];return null!=e&&d.sort(e===bl?function(n,t){return c[t]-c[n]}:function(n,t){return e(o[n],o[t])}),d.forEach(function(n){y[n]={data:o[n],value:a=c[n],startAngle:f,endAngle:f+=a*v+p,padAngle:h}}),y}var t=Number,e=bl,r=0,i=Ho,u=0;return n.value=function(e){return arguments.length?(t=e,n):t},n.sort=function(t){return arguments.length?(e=t,n):e},n.startAngle=function(t){return arguments.length?(r=t,n):r},n.endAngle=function(t){return arguments.length?(i=t,n):i},n.padAngle=function(t){return arguments.length?(u=t,n):u},n};var bl={};ao.layout.stack=function(){function n(a,l){if(!(h=a.length))return a;var c=a.map(function(e,r){return t.call(n,e,r)}),f=c.map(function(t){return t.map(function(t,e){return[u.call(n,t,e),o.call(n,t,e)]})}),s=e.call(n,f,l);c=ao.permute(c,s),f=ao.permute(f,s);var h,p,g,v,d=r.call(n,f,l),y=c[0].length;for(g=0;y>g;++g)for(i.call(n,c[0][g],v=d[g],f[0][g][1]),p=1;h>p;++p)i.call(n,c[p][g],v+=f[p-1][g][1],f[p][g][1]);return a}var t=m,e=gi,r=vi,i=pi,u=si,o=hi;return n.values=function(e){return arguments.length?(t=e,n):t},n.order=function(t){return arguments.length?(e="function"==typeof t?t:_l.get(t)||gi,n):e},n.offset=function(t){return arguments.length?(r="function"==typeof t?t:wl.get(t)||vi,n):r},n.x=function(t){return arguments.length?(u=t,n):u},n.y=function(t){return arguments.length?(o=t,n):o},n.out=function(t){return arguments.length?(i=t,n):i},n};var _l=ao.map({"inside-out":function(n){var t,e,r=n.length,i=n.map(di),u=n.map(yi),o=ao.range(r).sort(function(n,t){return i[n]-i[t]}),a=0,l=0,c=[],f=[];for(t=0;r>t;++t)e=o[t],l>a?(a+=u[e],c.push(e)):(l+=u[e],f.push(e));return f.reverse().concat(c)},reverse:function(n){return ao.range(n.length).reverse()},"default":gi}),wl=ao.map({silhouette:function(n){var t,e,r,i=n.length,u=n[0].length,o=[],a=0,l=[];for(e=0;u>e;++e){for(t=0,r=0;i>t;t++)r+=n[t][e][1];r>a&&(a=r),o.push(r)}for(e=0;u>e;++e)l[e]=(a-o[e])/2;return l},wiggle:function(n){var t,e,r,i,u,o,a,l,c,f=n.length,s=n[0],h=s.length,p=[];for(p[0]=l=c=0,e=1;h>e;++e){for(t=0,i=0;f>t;++t)i+=n[t][e][1];for(t=0,u=0,a=s[e][0]-s[e-1][0];f>t;++t){for(r=0,o=(n[t][e][1]-n[t][e-1][1])/(2*a);t>r;++r)o+=(n[r][e][1]-n[r][e-1][1])/a;u+=o*n[t][e][1]}p[e]=l-=i?u/i*a:0,c>l&&(c=l)}for(e=0;h>e;++e)p[e]-=c;return p},expand:function(n){var t,e,r,i=n.length,u=n[0].length,o=1/i,a=[];for(e=0;u>e;++e){for(t=0,r=0;i>t;t++)r+=n[t][e][1];if(r)for(t=0;i>t;t++)n[t][e][1]/=r;else for(t=0;i>t;t++)n[t][e][1]=o}for(e=0;u>e;++e)a[e]=0;return a},zero:vi});ao.layout.histogram=function(){function n(n,u){for(var o,a,l=[],c=n.map(e,this),f=r.call(this,c,u),s=i.call(this,f,c,u),u=-1,h=c.length,p=s.length-1,g=t?1:1/h;++u<p;)o=l[u]=[],o.dx=s[u+1]-(o.x=s[u]),o.y=0;if(p>0)for(u=-1;++u<h;)a=c[u],a>=f[0]&&a<=f[1]&&(o=l[ao.bisect(s,a,1,p)-1],o.y+=g,o.push(n[u]));return l}var t=!0,e=Number,r=bi,i=Mi;return n.value=function(t){return arguments.length?(e=t,n):e},n.range=function(t){return arguments.length?(r=En(t),n):r},n.bins=function(t){return arguments.length?(i="number"==typeof t?function(n){return xi(n,t)}:En(t),n):i},n.frequency=function(e){return arguments.length?(t=!!e,n):t},n},ao.layout.pack=function(){function n(n,u){var o=e.call(this,n,u),a=o[0],l=i[0],c=i[1],f=null==t?Math.sqrt:"function"==typeof t?t:function(){return t};if(a.x=a.y=0,oi(a,function(n){n.r=+f(n.value)}),oi(a,Ni),r){var s=r*(t?1:Math.max(2*a.r/l,2*a.r/c))/2;oi(a,function(n){n.r+=s}),oi(a,Ni),oi(a,function(n){n.r-=s})}return Ci(a,l/2,c/2,t?1:1/Math.max(2*a.r/l,2*a.r/c)),o}var t,e=ao.layout.hierarchy().sort(_i),r=0,i=[1,1];return n.size=function(t){return arguments.length?(i=t,n):i},n.radius=function(e){return arguments.length?(t=null==e||"function"==typeof e?e:+e,n):t},n.padding=function(t){return arguments.length?(r=+t,n):r},ii(n,e)},ao.layout.tree=function(){function n(n,i){var f=o.call(this,n,i),s=f[0],h=t(s);if(oi(h,e),h.parent.m=-h.z,ui(h,r),c)ui(s,u);else{var p=s,g=s,v=s;ui(s,function(n){n.x<p.x&&(p=n),n.x>g.x&&(g=n),n.depth>v.depth&&(v=n)});var d=a(p,g)/2-p.x,y=l[0]/(g.x+a(g,p)/2+d),m=l[1]/(v.depth||1);ui(s,function(n){n.x=(n.x+d)*y,n.y=n.depth*m})}return f}function t(n){for(var t,e={A:null,children:[n]},r=[e];null!=(t=r.pop());)for(var i,u=t.children,o=0,a=u.length;a>o;++o)r.push((u[o]=i={_:u[o],parent:t,children:(i=u[o].children)&&i.slice()||[],A:null,a:null,z:0,m:0,c:0,s:0,t:null,i:o}).a=i);return e.children[0]}function e(n){var t=n.children,e=n.parent.children,r=n.i?e[n.i-1]:null;if(t.length){Di(n);var u=(t[0].z+t[t.length-1].z)/2;r?(n.z=r.z+a(n._,r._),n.m=n.z-u):n.z=u}else r&&(n.z=r.z+a(n._,r._));n.parent.A=i(n,r,n.parent.A||e[0])}function r(n){n._.x=n.z+n.parent.m,n.m+=n.parent.m}function i(n,t,e){if(t){for(var r,i=n,u=n,o=t,l=i.parent.children[0],c=i.m,f=u.m,s=o.m,h=l.m;o=Ti(o),i=qi(i),o&&i;)l=qi(l),u=Ti(u),u.a=n,r=o.z+s-i.z-c+a(o._,i._),r>0&&(Ri(Pi(o,n,e),n,r),c+=r,f+=r),s+=o.m,c+=i.m,h+=l.m,f+=u.m;o&&!Ti(u)&&(u.t=o,u.m+=s-f),i&&!qi(l)&&(l.t=i,l.m+=c-h,e=n)}return e}function u(n){n.x*=l[0],n.y=n.depth*l[1]}var o=ao.layout.hierarchy().sort(null).value(null),a=Li,l=[1,1],c=null;return n.separation=function(t){return arguments.length?(a=t,n):a},n.size=function(t){return arguments.length?(c=null==(l=t)?u:null,n):c?null:l},n.nodeSize=function(t){return arguments.length?(c=null==(l=t)?null:u,n):c?l:null},ii(n,o)},ao.layout.cluster=function(){function n(n,u){var o,a=t.call(this,n,u),l=a[0],c=0;oi(l,function(n){var t=n.children;t&&t.length?(n.x=ji(t),n.y=Ui(t)):(n.x=o?c+=e(n,o):0,n.y=0,o=n)});var f=Fi(l),s=Hi(l),h=f.x-e(f,s)/2,p=s.x+e(s,f)/2;return oi(l,i?function(n){n.x=(n.x-l.x)*r[0],n.y=(l.y-n.y)*r[1]}:function(n){n.x=(n.x-h)/(p-h)*r[0],n.y=(1-(l.y?n.y/l.y:1))*r[1]}),a}var t=ao.layout.hierarchy().sort(null).value(null),e=Li,r=[1,1],i=!1;return n.separation=function(t){return arguments.length?(e=t,n):e},n.size=function(t){return arguments.length?(i=null==(r=t),n):i?null:r},n.nodeSize=function(t){return arguments.length?(i=null!=(r=t),n):i?r:null},ii(n,t)},ao.layout.treemap=function(){function n(n,t){for(var e,r,i=-1,u=n.length;++i<u;)r=(e=n[i]).value*(0>t?0:t),e.area=isNaN(r)||0>=r?0:r}function t(e){var u=e.children;if(u&&u.length){var o,a,l,c=s(e),f=[],h=u.slice(),g=1/0,v="slice"===p?c.dx:"dice"===p?c.dy:"slice-dice"===p?1&e.depth?c.dy:c.dx:Math.min(c.dx,c.dy);for(n(h,c.dx*c.dy/e.value),f.area=0;(l=h.length)>0;)f.push(o=h[l-1]),f.area+=o.area,"squarify"!==p||(a=r(f,v))<=g?(h.pop(),g=a):(f.area-=f.pop().area,i(f,v,c,!1),v=Math.min(c.dx,c.dy),f.length=f.area=0,g=1/0);f.length&&(i(f,v,c,!0),f.length=f.area=0),u.forEach(t)}}function e(t){var r=t.children;if(r&&r.length){var u,o=s(t),a=r.slice(),l=[];for(n(a,o.dx*o.dy/t.value),l.area=0;u=a.pop();)l.push(u),l.area+=u.area,null!=u.z&&(i(l,u.z?o.dx:o.dy,o,!a.length),l.length=l.area=0);r.forEach(e)}}function r(n,t){for(var e,r=n.area,i=0,u=1/0,o=-1,a=n.length;++o<a;)(e=n[o].area)&&(u>e&&(u=e),e>i&&(i=e));return r*=r,t*=t,r?Math.max(t*i*g/r,r/(t*u*g)):1/0}function i(n,t,e,r){var i,u=-1,o=n.length,a=e.x,c=e.y,f=t?l(n.area/t):0;
+if(t==e.dx){for((r||f>e.dy)&&(f=e.dy);++u<o;)i=n[u],i.x=a,i.y=c,i.dy=f,a+=i.dx=Math.min(e.x+e.dx-a,f?l(i.area/f):0);i.z=!0,i.dx+=e.x+e.dx-a,e.y+=f,e.dy-=f}else{for((r||f>e.dx)&&(f=e.dx);++u<o;)i=n[u],i.x=a,i.y=c,i.dx=f,c+=i.dy=Math.min(e.y+e.dy-c,f?l(i.area/f):0);i.z=!1,i.dy+=e.y+e.dy-c,e.x+=f,e.dx-=f}}function u(r){var i=o||a(r),u=i[0];return u.x=u.y=0,u.value?(u.dx=c[0],u.dy=c[1]):u.dx=u.dy=0,o&&a.revalue(u),n([u],u.dx*u.dy/u.value),(o?e:t)(u),h&&(o=i),i}var o,a=ao.layout.hierarchy(),l=Math.round,c=[1,1],f=null,s=Oi,h=!1,p="squarify",g=.5*(1+Math.sqrt(5));return u.size=function(n){return arguments.length?(c=n,u):c},u.padding=function(n){function t(t){var e=n.call(u,t,t.depth);return null==e?Oi(t):Ii(t,"number"==typeof e?[e,e,e,e]:e)}function e(t){return Ii(t,n)}if(!arguments.length)return f;var r;return s=null==(f=n)?Oi:"function"==(r=typeof n)?t:"number"===r?(n=[n,n,n,n],e):e,u},u.round=function(n){return arguments.length?(l=n?Math.round:Number,u):l!=Number},u.sticky=function(n){return arguments.length?(h=n,o=null,u):h},u.ratio=function(n){return arguments.length?(g=n,u):g},u.mode=function(n){return arguments.length?(p=n+"",u):p},ii(u,a)},ao.random={normal:function(n,t){var e=arguments.length;return 2>e&&(t=1),1>e&&(n=0),function(){var e,r,i;do e=2*Math.random()-1,r=2*Math.random()-1,i=e*e+r*r;while(!i||i>1);return n+t*e*Math.sqrt(-2*Math.log(i)/i)}},logNormal:function(){var n=ao.random.normal.apply(ao,arguments);return function(){return Math.exp(n())}},bates:function(n){var t=ao.random.irwinHall(n);return function(){return t()/n}},irwinHall:function(n){return function(){for(var t=0,e=0;n>e;e++)t+=Math.random();return t}}},ao.scale={};var Sl={floor:m,ceil:m};ao.scale.linear=function(){return Wi([0,1],[0,1],Mr,!1)};var kl={s:1,g:1,p:1,r:1,e:1};ao.scale.log=function(){return ru(ao.scale.linear().domain([0,1]),10,!0,[1,10])};var Nl=ao.format(".0e"),El={floor:function(n){return-Math.ceil(-n)},ceil:function(n){return-Math.floor(-n)}};ao.scale.pow=function(){return iu(ao.scale.linear(),1,[0,1])},ao.scale.sqrt=function(){return ao.scale.pow().exponent(.5)},ao.scale.ordinal=function(){return ou([],{t:"range",a:[[]]})},ao.scale.category10=function(){return ao.scale.ordinal().range(Al)},ao.scale.category20=function(){return ao.scale.ordinal().range(Cl)},ao.scale.category20b=function(){return ao.scale.ordinal().range(zl)},ao.scale.category20c=function(){return ao.scale.ordinal().range(Ll)};var Al=[2062260,16744206,2924588,14034728,9725885,9197131,14907330,8355711,12369186,1556175].map(xn),Cl=[2062260,11454440,16744206,16759672,2924588,10018698,14034728,16750742,9725885,12955861,9197131,12885140,14907330,16234194,8355711,13092807,12369186,14408589,1556175,10410725].map(xn),zl=[3750777,5395619,7040719,10264286,6519097,9216594,11915115,13556636,9202993,12426809,15186514,15190932,8666169,11356490,14049643,15177372,8077683,10834324,13528509,14589654].map(xn),Ll=[3244733,7057110,10406625,13032431,15095053,16616764,16625259,16634018,3253076,7652470,10607003,13101504,7695281,10394312,12369372,14342891,6513507,9868950,12434877,14277081].map(xn);ao.scale.quantile=function(){return au([],[])},ao.scale.quantize=function(){return lu(0,1,[0,1])},ao.scale.threshold=function(){return cu([.5],[0,1])},ao.scale.identity=function(){return fu([0,1])},ao.svg={},ao.svg.arc=function(){function n(){var n=Math.max(0,+e.apply(this,arguments)),c=Math.max(0,+r.apply(this,arguments)),f=o.apply(this,arguments)-Io,s=a.apply(this,arguments)-Io,h=Math.abs(s-f),p=f>s?0:1;if(n>c&&(g=c,c=n,n=g),h>=Oo)return t(c,p)+(n?t(n,1-p):"")+"Z";var g,v,d,y,m,M,x,b,_,w,S,k,N=0,E=0,A=[];if((y=(+l.apply(this,arguments)||0)/2)&&(d=u===ql?Math.sqrt(n*n+c*c):+u.apply(this,arguments),p||(E*=-1),c&&(E=tn(d/c*Math.sin(y))),n&&(N=tn(d/n*Math.sin(y)))),c){m=c*Math.cos(f+E),M=c*Math.sin(f+E),x=c*Math.cos(s-E),b=c*Math.sin(s-E);var C=Math.abs(s-f-2*E)<=Fo?0:1;if(E&&yu(m,M,x,b)===p^C){var z=(f+s)/2;m=c*Math.cos(z),M=c*Math.sin(z),x=b=null}}else m=M=0;if(n){_=n*Math.cos(s-N),w=n*Math.sin(s-N),S=n*Math.cos(f+N),k=n*Math.sin(f+N);var L=Math.abs(f-s+2*N)<=Fo?0:1;if(N&&yu(_,w,S,k)===1-p^L){var q=(f+s)/2;_=n*Math.cos(q),w=n*Math.sin(q),S=k=null}}else _=w=0;if(h>Uo&&(g=Math.min(Math.abs(c-n)/2,+i.apply(this,arguments)))>.001){v=c>n^p?0:1;var T=g,R=g;if(Fo>h){var D=null==S?[_,w]:null==x?[m,M]:Re([m,M],[S,k],[x,b],[_,w]),P=m-D[0],U=M-D[1],j=x-D[0],F=b-D[1],H=1/Math.sin(Math.acos((P*j+U*F)/(Math.sqrt(P*P+U*U)*Math.sqrt(j*j+F*F)))/2),O=Math.sqrt(D[0]*D[0]+D[1]*D[1]);R=Math.min(g,(n-O)/(H-1)),T=Math.min(g,(c-O)/(H+1))}if(null!=x){var I=mu(null==S?[_,w]:[S,k],[m,M],c,T,p),Y=mu([x,b],[_,w],c,T,p);g===T?A.push("M",I[0],"A",T,",",T," 0 0,",v," ",I[1],"A",c,",",c," 0 ",1-p^yu(I[1][0],I[1][1],Y[1][0],Y[1][1]),",",p," ",Y[1],"A",T,",",T," 0 0,",v," ",Y[0]):A.push("M",I[0],"A",T,",",T," 0 1,",v," ",Y[0])}else A.push("M",m,",",M);if(null!=S){var Z=mu([m,M],[S,k],n,-R,p),V=mu([_,w],null==x?[m,M]:[x,b],n,-R,p);g===R?A.push("L",V[0],"A",R,",",R," 0 0,",v," ",V[1],"A",n,",",n," 0 ",p^yu(V[1][0],V[1][1],Z[1][0],Z[1][1]),",",1-p," ",Z[1],"A",R,",",R," 0 0,",v," ",Z[0]):A.push("L",V[0],"A",R,",",R," 0 0,",v," ",Z[0])}else A.push("L",_,",",w)}else A.push("M",m,",",M),null!=x&&A.push("A",c,",",c," 0 ",C,",",p," ",x,",",b),A.push("L",_,",",w),null!=S&&A.push("A",n,",",n," 0 ",L,",",1-p," ",S,",",k);return A.push("Z"),A.join("")}function t(n,t){return"M0,"+n+"A"+n+","+n+" 0 1,"+t+" 0,"+-n+"A"+n+","+n+" 0 1,"+t+" 0,"+n}var e=hu,r=pu,i=su,u=ql,o=gu,a=vu,l=du;return n.innerRadius=function(t){return arguments.length?(e=En(t),n):e},n.outerRadius=function(t){return arguments.length?(r=En(t),n):r},n.cornerRadius=function(t){return arguments.length?(i=En(t),n):i},n.padRadius=function(t){return arguments.length?(u=t==ql?ql:En(t),n):u},n.startAngle=function(t){return arguments.length?(o=En(t),n):o},n.endAngle=function(t){return arguments.length?(a=En(t),n):a},n.padAngle=function(t){return arguments.length?(l=En(t),n):l},n.centroid=function(){var n=(+e.apply(this,arguments)+ +r.apply(this,arguments))/2,t=(+o.apply(this,arguments)+ +a.apply(this,arguments))/2-Io;return[Math.cos(t)*n,Math.sin(t)*n]},n};var ql="auto";ao.svg.line=function(){return Mu(m)};var Tl=ao.map({linear:xu,"linear-closed":bu,step:_u,"step-before":wu,"step-after":Su,basis:zu,"basis-open":Lu,"basis-closed":qu,bundle:Tu,cardinal:Eu,"cardinal-open":ku,"cardinal-closed":Nu,monotone:Fu});Tl.forEach(function(n,t){t.key=n,t.closed=/-closed$/.test(n)});var Rl=[0,2/3,1/3,0],Dl=[0,1/3,2/3,0],Pl=[0,1/6,2/3,1/6];ao.svg.line.radial=function(){var n=Mu(Hu);return n.radius=n.x,delete n.x,n.angle=n.y,delete n.y,n},wu.reverse=Su,Su.reverse=wu,ao.svg.area=function(){return Ou(m)},ao.svg.area.radial=function(){var n=Ou(Hu);return n.radius=n.x,delete n.x,n.innerRadius=n.x0,delete n.x0,n.outerRadius=n.x1,delete n.x1,n.angle=n.y,delete n.y,n.startAngle=n.y0,delete n.y0,n.endAngle=n.y1,delete n.y1,n},ao.svg.chord=function(){function n(n,a){var l=t(this,u,n,a),c=t(this,o,n,a);return"M"+l.p0+r(l.r,l.p1,l.a1-l.a0)+(e(l,c)?i(l.r,l.p1,l.r,l.p0):i(l.r,l.p1,c.r,c.p0)+r(c.r,c.p1,c.a1-c.a0)+i(c.r,c.p1,l.r,l.p0))+"Z"}function t(n,t,e,r){var i=t.call(n,e,r),u=a.call(n,i,r),o=l.call(n,i,r)-Io,f=c.call(n,i,r)-Io;return{r:u,a0:o,a1:f,p0:[u*Math.cos(o),u*Math.sin(o)],p1:[u*Math.cos(f),u*Math.sin(f)]}}function e(n,t){return n.a0==t.a0&&n.a1==t.a1}function r(n,t,e){return"A"+n+","+n+" 0 "+ +(e>Fo)+",1 "+t}function i(n,t,e,r){return"Q 0,0 "+r}var u=Me,o=xe,a=Iu,l=gu,c=vu;return n.radius=function(t){return arguments.length?(a=En(t),n):a},n.source=function(t){return arguments.length?(u=En(t),n):u},n.target=function(t){return arguments.length?(o=En(t),n):o},n.startAngle=function(t){return arguments.length?(l=En(t),n):l},n.endAngle=function(t){return arguments.length?(c=En(t),n):c},n},ao.svg.diagonal=function(){function n(n,i){var u=t.call(this,n,i),o=e.call(this,n,i),a=(u.y+o.y)/2,l=[u,{x:u.x,y:a},{x:o.x,y:a},o];return l=l.map(r),"M"+l[0]+"C"+l[1]+" "+l[2]+" "+l[3]}var t=Me,e=xe,r=Yu;return n.source=function(e){return arguments.length?(t=En(e),n):t},n.target=function(t){return arguments.length?(e=En(t),n):e},n.projection=function(t){return arguments.length?(r=t,n):r},n},ao.svg.diagonal.radial=function(){var n=ao.svg.diagonal(),t=Yu,e=n.projection;return n.projection=function(n){return arguments.length?e(Zu(t=n)):t},n},ao.svg.symbol=function(){function n(n,r){return(Ul.get(t.call(this,n,r))||$u)(e.call(this,n,r))}var t=Xu,e=Vu;return n.type=function(e){return arguments.length?(t=En(e),n):t},n.size=function(t){return arguments.length?(e=En(t),n):e},n};var Ul=ao.map({circle:$u,cross:function(n){var t=Math.sqrt(n/5)/2;return"M"+-3*t+","+-t+"H"+-t+"V"+-3*t+"H"+t+"V"+-t+"H"+3*t+"V"+t+"H"+t+"V"+3*t+"H"+-t+"V"+t+"H"+-3*t+"Z"},diamond:function(n){var t=Math.sqrt(n/(2*Fl)),e=t*Fl;return"M0,"+-t+"L"+e+",0 0,"+t+" "+-e+",0Z"},square:function(n){var t=Math.sqrt(n)/2;return"M"+-t+","+-t+"L"+t+","+-t+" "+t+","+t+" "+-t+","+t+"Z"},"triangle-down":function(n){var t=Math.sqrt(n/jl),e=t*jl/2;return"M0,"+e+"L"+t+","+-e+" "+-t+","+-e+"Z"},"triangle-up":function(n){var t=Math.sqrt(n/jl),e=t*jl/2;return"M0,"+-e+"L"+t+","+e+" "+-t+","+e+"Z"}});ao.svg.symbolTypes=Ul.keys();var jl=Math.sqrt(3),Fl=Math.tan(30*Yo);Co.transition=function(n){for(var t,e,r=Hl||++Zl,i=Ku(n),u=[],o=Ol||{time:Date.now(),ease:Nr,delay:0,duration:250},a=-1,l=this.length;++a<l;){u.push(t=[]);for(var c=this[a],f=-1,s=c.length;++f<s;)(e=c[f])&&Qu(e,f,i,r,o),t.push(e)}return Wu(u,i,r)},Co.interrupt=function(n){return this.each(null==n?Il:Bu(Ku(n)))};var Hl,Ol,Il=Bu(Ku()),Yl=[],Zl=0;Yl.call=Co.call,Yl.empty=Co.empty,Yl.node=Co.node,Yl.size=Co.size,ao.transition=function(n,t){return n&&n.transition?Hl?n.transition(t):n:ao.selection().transition(n)},ao.transition.prototype=Yl,Yl.select=function(n){var t,e,r,i=this.id,u=this.namespace,o=[];n=A(n);for(var a=-1,l=this.length;++a<l;){o.push(t=[]);for(var c=this[a],f=-1,s=c.length;++f<s;)(r=c[f])&&(e=n.call(r,r.__data__,f,a))?("__data__"in r&&(e.__data__=r.__data__),Qu(e,f,u,i,r[u][i]),t.push(e)):t.push(null)}return Wu(o,u,i)},Yl.selectAll=function(n){var t,e,r,i,u,o=this.id,a=this.namespace,l=[];n=C(n);for(var c=-1,f=this.length;++c<f;)for(var s=this[c],h=-1,p=s.length;++h<p;)if(r=s[h]){u=r[a][o],e=n.call(r,r.__data__,h,c),l.push(t=[]);for(var g=-1,v=e.length;++g<v;)(i=e[g])&&Qu(i,g,a,o,u),t.push(i)}return Wu(l,a,o)},Yl.filter=function(n){var t,e,r,i=[];"function"!=typeof n&&(n=O(n));for(var u=0,o=this.length;o>u;u++){i.push(t=[]);for(var e=this[u],a=0,l=e.length;l>a;a++)(r=e[a])&&n.call(r,r.__data__,a,u)&&t.push(r)}return Wu(i,this.namespace,this.id)},Yl.tween=function(n,t){var e=this.id,r=this.namespace;return arguments.length<2?this.node()[r][e].tween.get(n):Y(this,null==t?function(t){t[r][e].tween.remove(n)}:function(i){i[r][e].tween.set(n,t)})},Yl.attr=function(n,t){function e(){this.removeAttribute(a)}function r(){this.removeAttributeNS(a.space,a.local)}function i(n){return null==n?e:(n+="",function(){var t,e=this.getAttribute(a);return e!==n&&(t=o(e,n),function(n){this.setAttribute(a,t(n))})})}function u(n){return null==n?r:(n+="",function(){var t,e=this.getAttributeNS(a.space,a.local);return e!==n&&(t=o(e,n),function(n){this.setAttributeNS(a.space,a.local,t(n))})})}if(arguments.length<2){for(t in n)this.attr(t,n[t]);return this}var o="transform"==n?$r:Mr,a=ao.ns.qualify(n);return Ju(this,"attr."+n,t,a.local?u:i)},Yl.attrTween=function(n,t){function e(n,e){var r=t.call(this,n,e,this.getAttribute(i));return r&&function(n){this.setAttribute(i,r(n))}}function r(n,e){var r=t.call(this,n,e,this.getAttributeNS(i.space,i.local));return r&&function(n){this.setAttributeNS(i.space,i.local,r(n))}}var i=ao.ns.qualify(n);return this.tween("attr."+n,i.local?r:e)},Yl.style=function(n,e,r){function i(){this.style.removeProperty(n)}function u(e){return null==e?i:(e+="",function(){var i,u=t(this).getComputedStyle(this,null).getPropertyValue(n);return u!==e&&(i=Mr(u,e),function(t){this.style.setProperty(n,i(t),r)})})}var o=arguments.length;if(3>o){if("string"!=typeof n){2>o&&(e="");for(r in n)this.style(r,n[r],e);return this}r=""}return Ju(this,"style."+n,e,u)},Yl.styleTween=function(n,e,r){function i(i,u){var o=e.call(this,i,u,t(this).getComputedStyle(this,null).getPropertyValue(n));return o&&function(t){this.style.setProperty(n,o(t),r)}}return arguments.length<3&&(r=""),this.tween("style."+n,i)},Yl.text=function(n){return Ju(this,"text",n,Gu)},Yl.remove=function(){var n=this.namespace;return this.each("end.transition",function(){var t;this[n].count<2&&(t=this.parentNode)&&t.removeChild(this)})},Yl.ease=function(n){var t=this.id,e=this.namespace;return arguments.length<1?this.node()[e][t].ease:("function"!=typeof n&&(n=ao.ease.apply(ao,arguments)),Y(this,function(r){r[e][t].ease=n}))},Yl.delay=function(n){var t=this.id,e=this.namespace;return arguments.length<1?this.node()[e][t].delay:Y(this,"function"==typeof n?function(r,i,u){r[e][t].delay=+n.call(r,r.__data__,i,u)}:(n=+n,function(r){r[e][t].delay=n}))},Yl.duration=function(n){var t=this.id,e=this.namespace;return arguments.length<1?this.node()[e][t].duration:Y(this,"function"==typeof n?function(r,i,u){r[e][t].duration=Math.max(1,n.call(r,r.__data__,i,u))}:(n=Math.max(1,n),function(r){r[e][t].duration=n}))},Yl.each=function(n,t){var e=this.id,r=this.namespace;if(arguments.length<2){var i=Ol,u=Hl;try{Hl=e,Y(this,function(t,i,u){Ol=t[r][e],n.call(t,t.__data__,i,u)})}finally{Ol=i,Hl=u}}else Y(this,function(i){var u=i[r][e];(u.event||(u.event=ao.dispatch("start","end","interrupt"))).on(n,t)});return this},Yl.transition=function(){for(var n,t,e,r,i=this.id,u=++Zl,o=this.namespace,a=[],l=0,c=this.length;c>l;l++){a.push(n=[]);for(var t=this[l],f=0,s=t.length;s>f;f++)(e=t[f])&&(r=e[o][i],Qu(e,f,o,u,{time:r.time,ease:r.ease,delay:r.delay+r.duration,duration:r.duration})),n.push(e)}return Wu(a,o,u)},ao.svg.axis=function(){function n(n){n.each(function(){var n,c=ao.select(this),f=this.__chart__||e,s=this.__chart__=e.copy(),h=null==l?s.ticks?s.ticks.apply(s,a):s.domain():l,p=null==t?s.tickFormat?s.tickFormat.apply(s,a):m:t,g=c.selectAll(".tick").data(h,s),v=g.enter().insert("g",".domain").attr("class","tick").style("opacity",Uo),d=ao.transition(g.exit()).style("opacity",Uo).remove(),y=ao.transition(g.order()).style("opacity",1),M=Math.max(i,0)+o,x=Zi(s),b=c.selectAll(".domain").data([0]),_=(b.enter().append("path").attr("class","domain"),ao.transition(b));v.append("line"),v.append("text");var w,S,k,N,E=v.select("line"),A=y.select("line"),C=g.select("text").text(p),z=v.select("text"),L=y.select("text"),q="top"===r||"left"===r?-1:1;if("bottom"===r||"top"===r?(n=no,w="x",k="y",S="x2",N="y2",C.attr("dy",0>q?"0em":".71em").style("text-anchor","middle"),_.attr("d","M"+x[0]+","+q*u+"V0H"+x[1]+"V"+q*u)):(n=to,w="y",k="x",S="y2",N="x2",C.attr("dy",".32em").style("text-anchor",0>q?"end":"start"),_.attr("d","M"+q*u+","+x[0]+"H0V"+x[1]+"H"+q*u)),E.attr(N,q*i),z.attr(k,q*M),A.attr(S,0).attr(N,q*i),L.attr(w,0).attr(k,q*M),s.rangeBand){var T=s,R=T.rangeBand()/2;f=s=function(n){return T(n)+R}}else f.rangeBand?f=s:d.call(n,s,f);v.call(n,f,s),y.call(n,s,s)})}var t,e=ao.scale.linear(),r=Vl,i=6,u=6,o=3,a=[10],l=null;return n.scale=function(t){return arguments.length?(e=t,n):e},n.orient=function(t){return arguments.length?(r=t in Xl?t+"":Vl,n):r},n.ticks=function(){return arguments.length?(a=co(arguments),n):a},n.tickValues=function(t){return arguments.length?(l=t,n):l},n.tickFormat=function(e){return arguments.length?(t=e,n):t},n.tickSize=function(t){var e=arguments.length;return e?(i=+t,u=+arguments[e-1],n):i},n.innerTickSize=function(t){return arguments.length?(i=+t,n):i},n.outerTickSize=function(t){return arguments.length?(u=+t,n):u},n.tickPadding=function(t){return arguments.length?(o=+t,n):o},n.tickSubdivide=function(){return arguments.length&&n},n};var Vl="bottom",Xl={top:1,right:1,bottom:1,left:1};ao.svg.brush=function(){function n(t){t.each(function(){var t=ao.select(this).style("pointer-events","all").style("-webkit-tap-highlight-color","rgba(0,0,0,0)").on("mousedown.brush",u).on("touchstart.brush",u),o=t.selectAll(".background").data([0]);o.enter().append("rect").attr("class","background").style("visibility","hidden").style("cursor","crosshair"),t.selectAll(".extent").data([0]).enter().append("rect").attr("class","extent").style("cursor","move");var a=t.selectAll(".resize").data(v,m);a.exit().remove(),a.enter().append("g").attr("class",function(n){return"resize "+n}).style("cursor",function(n){return $l[n]}).append("rect").attr("x",function(n){return/[ew]$/.test(n)?-3:null}).attr("y",function(n){return/^[ns]/.test(n)?-3:null}).attr("width",6).attr("height",6).style("visibility","hidden"),a.style("display",n.empty()?"none":null);var l,s=ao.transition(t),h=ao.transition(o);c&&(l=Zi(c),h.attr("x",l[0]).attr("width",l[1]-l[0]),r(s)),f&&(l=Zi(f),h.attr("y",l[0]).attr("height",l[1]-l[0]),i(s)),e(s)})}function e(n){n.selectAll(".resize").attr("transform",function(n){return"translate("+s[+/e$/.test(n)]+","+h[+/^s/.test(n)]+")"})}function r(n){n.select(".extent").attr("x",s[0]),n.selectAll(".extent,.n>rect,.s>rect").attr("width",s[1]-s[0])}function i(n){n.select(".extent").attr("y",h[0]),n.selectAll(".extent,.e>rect,.w>rect").attr("height",h[1]-h[0])}function u(){function u(){32==ao.event.keyCode&&(C||(M=null,L[0]-=s[1],L[1]-=h[1],C=2),S())}function v(){32==ao.event.keyCode&&2==C&&(L[0]+=s[1],L[1]+=h[1],C=0,S())}function d(){var n=ao.mouse(b),t=!1;x&&(n[0]+=x[0],n[1]+=x[1]),C||(ao.event.altKey?(M||(M=[(s[0]+s[1])/2,(h[0]+h[1])/2]),L[0]=s[+(n[0]<M[0])],L[1]=h[+(n[1]<M[1])]):M=null),E&&y(n,c,0)&&(r(k),t=!0),A&&y(n,f,1)&&(i(k),t=!0),t&&(e(k),w({type:"brush",mode:C?"move":"resize"}))}function y(n,t,e){var r,i,u=Zi(t),l=u[0],c=u[1],f=L[e],v=e?h:s,d=v[1]-v[0];return C&&(l-=f,c-=d+f),r=(e?g:p)?Math.max(l,Math.min(c,n[e])):n[e],C?i=(r+=f)+d:(M&&(f=Math.max(l,Math.min(c,2*M[e]-r))),r>f?(i=r,r=f):i=f),v[0]!=r||v[1]!=i?(e?a=null:o=null,v[0]=r,v[1]=i,!0):void 0}function m(){d(),k.style("pointer-events","all").selectAll(".resize").style("display",n.empty()?"none":null),ao.select("body").style("cursor",null),q.on("mousemove.brush",null).on("mouseup.brush",null).on("touchmove.brush",null).on("touchend.brush",null).on("keydown.brush",null).on("keyup.brush",null),z(),w({type:"brushend"})}var M,x,b=this,_=ao.select(ao.event.target),w=l.of(b,arguments),k=ao.select(b),N=_.datum(),E=!/^(n|s)$/.test(N)&&c,A=!/^(e|w)$/.test(N)&&f,C=_.classed("extent"),z=W(b),L=ao.mouse(b),q=ao.select(t(b)).on("keydown.brush",u).on("keyup.brush",v);if(ao.event.changedTouches?q.on("touchmove.brush",d).on("touchend.brush",m):q.on("mousemove.brush",d).on("mouseup.brush",m),k.interrupt().selectAll("*").interrupt(),C)L[0]=s[0]-L[0],L[1]=h[0]-L[1];else if(N){var T=+/w$/.test(N),R=+/^n/.test(N);x=[s[1-T]-L[0],h[1-R]-L[1]],L[0]=s[T],L[1]=h[R]}else ao.event.altKey&&(M=L.slice());k.style("pointer-events","none").selectAll(".resize").style("display",null),ao.select("body").style("cursor",_.style("cursor")),w({type:"brushstart"}),d()}var o,a,l=N(n,"brushstart","brush","brushend"),c=null,f=null,s=[0,0],h=[0,0],p=!0,g=!0,v=Bl[0];return n.event=function(n){n.each(function(){var n=l.of(this,arguments),t={x:s,y:h,i:o,j:a},e=this.__chart__||t;this.__chart__=t,Hl?ao.select(this).transition().each("start.brush",function(){o=e.i,a=e.j,s=e.x,h=e.y,n({type:"brushstart"})}).tween("brush:brush",function(){var e=xr(s,t.x),r=xr(h,t.y);return o=a=null,function(i){s=t.x=e(i),h=t.y=r(i),n({type:"brush",mode:"resize"})}}).each("end.brush",function(){o=t.i,a=t.j,n({type:"brush",mode:"resize"}),n({type:"brushend"})}):(n({type:"brushstart"}),n({type:"brush",mode:"resize"}),n({type:"brushend"}))})},n.x=function(t){return arguments.length?(c=t,v=Bl[!c<<1|!f],n):c},n.y=function(t){return arguments.length?(f=t,v=Bl[!c<<1|!f],n):f},n.clamp=function(t){return arguments.length?(c&&f?(p=!!t[0],g=!!t[1]):c?p=!!t:f&&(g=!!t),n):c&&f?[p,g]:c?p:f?g:null},n.extent=function(t){var e,r,i,u,l;return arguments.length?(c&&(e=t[0],r=t[1],f&&(e=e[0],r=r[0]),o=[e,r],c.invert&&(e=c(e),r=c(r)),e>r&&(l=e,e=r,r=l),e==s[0]&&r==s[1]||(s=[e,r])),f&&(i=t[0],u=t[1],c&&(i=i[1],u=u[1]),a=[i,u],f.invert&&(i=f(i),u=f(u)),i>u&&(l=i,i=u,u=l),i==h[0]&&u==h[1]||(h=[i,u])),n):(c&&(o?(e=o[0],r=o[1]):(e=s[0],r=s[1],c.invert&&(e=c.invert(e),r=c.invert(r)),e>r&&(l=e,e=r,r=l))),f&&(a?(i=a[0],u=a[1]):(i=h[0],u=h[1],f.invert&&(i=f.invert(i),u=f.invert(u)),i>u&&(l=i,i=u,u=l))),c&&f?[[e,i],[r,u]]:c?[e,r]:f&&[i,u])},n.clear=function(){return n.empty()||(s=[0,0],h=[0,0],o=a=null),n},n.empty=function(){return!!c&&s[0]==s[1]||!!f&&h[0]==h[1]},ao.rebind(n,l,"on")};var $l={n:"ns-resize",e:"ew-resize",s:"ns-resize",w:"ew-resize",nw:"nwse-resize",ne:"nesw-resize",se:"nwse-resize",sw:"nesw-resize"},Bl=[["n","e","s","w","nw","ne","se","sw"],["e","w"],["n","s"],[]],Wl=ga.format=xa.timeFormat,Jl=Wl.utc,Gl=Jl("%Y-%m-%dT%H:%M:%S.%LZ");Wl.iso=Date.prototype.toISOString&&+new Date("2000-01-01T00:00:00.000Z")?eo:Gl,eo.parse=function(n){var t=new Date(n);return isNaN(t)?null:t},eo.toString=Gl.toString,ga.second=On(function(n){return new va(1e3*Math.floor(n/1e3))},function(n,t){n.setTime(n.getTime()+1e3*Math.floor(t))},function(n){return n.getSeconds()}),ga.seconds=ga.second.range,ga.seconds.utc=ga.second.utc.range,ga.minute=On(function(n){return new va(6e4*Math.floor(n/6e4))},function(n,t){n.setTime(n.getTime()+6e4*Math.floor(t))},function(n){return n.getMinutes()}),ga.minutes=ga.minute.range,ga.minutes.utc=ga.minute.utc.range,ga.hour=On(function(n){var t=n.getTimezoneOffset()/60;return new va(36e5*(Math.floor(n/36e5-t)+t))},function(n,t){n.setTime(n.getTime()+36e5*Math.floor(t))},function(n){return n.getHours()}),ga.hours=ga.hour.range,ga.hours.utc=ga.hour.utc.range,ga.month=On(function(n){return n=ga.day(n),n.setDate(1),n},function(n,t){n.setMonth(n.getMonth()+t)},function(n){return n.getMonth()}),ga.months=ga.month.range,ga.months.utc=ga.month.utc.range;var Kl=[1e3,5e3,15e3,3e4,6e4,3e5,9e5,18e5,36e5,108e5,216e5,432e5,864e5,1728e5,6048e5,2592e6,7776e6,31536e6],Ql=[[ga.second,1],[ga.second,5],[ga.second,15],[ga.second,30],[ga.minute,1],[ga.minute,5],[ga.minute,15],[ga.minute,30],[ga.hour,1],[ga.hour,3],[ga.hour,6],[ga.hour,12],[ga.day,1],[ga.day,2],[ga.week,1],[ga.month,1],[ga.month,3],[ga.year,1]],nc=Wl.multi([[".%L",function(n){return n.getMilliseconds()}],[":%S",function(n){return n.getSeconds()}],["%I:%M",function(n){return n.getMinutes()}],["%I %p",function(n){return n.getHours()}],["%a %d",function(n){return n.getDay()&&1!=n.getDate()}],["%b %d",function(n){return 1!=n.getDate()}],["%B",function(n){return n.getMonth()}],["%Y",zt]]),tc={range:function(n,t,e){return ao.range(Math.ceil(n/e)*e,+t,e).map(io)},floor:m,ceil:m};Ql.year=ga.year,ga.scale=function(){return ro(ao.scale.linear(),Ql,nc)};var ec=Ql.map(function(n){return[n[0].utc,n[1]]}),rc=Jl.multi([[".%L",function(n){return n.getUTCMilliseconds()}],[":%S",function(n){return n.getUTCSeconds()}],["%I:%M",function(n){return n.getUTCMinutes()}],["%I %p",function(n){return n.getUTCHours()}],["%a %d",function(n){return n.getUTCDay()&&1!=n.getUTCDate()}],["%b %d",function(n){return 1!=n.getUTCDate()}],["%B",function(n){return n.getUTCMonth()}],["%Y",zt]]);ec.year=ga.year.utc,ga.scale.utc=function(){return ro(ao.scale.linear(),ec,rc)},ao.text=An(function(n){return n.responseText}),ao.json=function(n,t){return Cn(n,"application/json",uo,t)},ao.html=function(n,t){return Cn(n,"text/html",oo,t)},ao.xml=An(function(n){return n.responseXML}),"function"==typeof define&&define.amd?(this.d3=ao,define(ao)):"object"==typeof module&&module.exports?module.exports=ao:this.d3=ao}();},{}],
+2:[function(require,module,exports){
+"use strict";
+
+var d3 = require('d3');
+
+//aigner: functions for drawing expand- and collapse-symbols
+function drawExpandSymbol(aCircle, line1, line2)
+{        
+     aCircle = aCircle
+        .attr("r", 10)
+        .style("stroke", "black")
+        .style("stroke-width", 2)
+        .style("fill", "green")
+        .style("fill-opacity", .6)
+    line1 = line1
+        .attr("x1", parseFloat(aCircle.attr("cx"))-5)
+        .attr("y1", parseFloat(aCircle.attr("cy")))
+        .attr("x2", parseFloat(aCircle.attr("cx"))+5)
+        .attr("y2", parseFloat(aCircle.attr("cy")))
+        .style("stroke", "black")
+        .style("stroke-width", 2);
+    line2 = line2
+        .attr("x1", parseFloat(aCircle.attr("cx")))
+        .attr("y1", parseFloat(aCircle.attr("cy"))-5)
+        .attr("x2", parseFloat(aCircle.attr("cx")))
+        .attr("y2", parseFloat(aCircle.attr("cy"))+5)
+        .style("stroke", "black")
+        .style("stroke-width", 2);
+}
+function drawRemoveSymbol(anXdsm, aCircle, aMinus)
+{        
+     var xOffset=150;
+     var yOffset=12;
+     aCircle = aCircle
+        .attr("cx", anXdsm.svg.attr("width")-xOffset)
+        .attr("cy", yOffset)
+        .attr("r", 10)
+		.classed("remCircle",true)
+    aMinus = aMinus
+        .attr("x1", anXdsm.svg.attr("width")-xOffset+5)
+        .attr("y1", yOffset)
+        .attr("x2", anXdsm.svg.attr("width")-xOffset-5)
+        .attr("y2", yOffset)
+		.classed("remMinus",true)
+}
+//d3-context-menu for right-click-option
+d3.contextMenu = function (menu, openCallback) {
+
+	// create the div element that will hold the context menu
+	d3.selectAll('.d3-context-menu').data([1])
+		.enter()
+		.append('div')
+		.attr('class', 'd3-context-menu');
+
+	// close menu
+	d3.select('body').on('click.d3-context-menu', function() {
+		d3.select('.d3-context-menu').style('display', 'none');
+	});
+
+	// this gets executed when a contextmenu event occurs
+	return function(data, index) {	
+		var elm = this;
+
+		d3.selectAll('.d3-context-menu').html('');
+		var list = d3.selectAll('.d3-context-menu').append('ul');
+	       	list.selectAll('li').data(menu).enter()
+			.append('li')
+			.html(function(d) {
+				return d.title;
+			})
+			.on('mousedown', function(d, i) {
+				d.onMouseDown(elm, data, index);
+			})
+			.on('mouseup', function(d, i) {
+				d.onMouseUp(elm, data, index);
+				d3.select('.d3-context-menu').style('display', 'none');
+			})
+            .on('mouseenter',function(d,i){
+                d.onMouseOver(elm,data,index);
+                if(d.childrenItems.length>0 )
+                     {
+                      d3.select(this).selectAll("ul").remove(); 
+                      d3.select(this)
+                        .append("ul")
+                        .selectAll("li")
+                           .data(d.childrenItems)
+                            .enter().append("li")
+                              .text(function(d) { return d.title; })
+                         .on("mouseenter", function(d,i){
+                                d.onMouseOver(elm,data,index);
+                            })
+                         .on('click',  function(d, i) {
+                                d.onMouseClick(elm, d, index);
+                            })
+                         .on('mouseleave',function(d,i){
+                            
+                            });
+                     }
+                 else
+                     return false;
+            })
+            .on('mouseleave',function(d,i){
+                d3.select(this).selectAll("ul").style('display', 'none')                  
+            });
+        
+          
+
+		// the openCallback allows an action to fire before the menu is displayed
+		// an example usage would be closing a tooltip
+		if (openCallback) openCallback(data, index);
+
+		// display context menu
+		d3.select('.d3-context-menu')
+			.style('left', (d3.event.pageX - 2) + 'px')
+			.style('top', (d3.event.pageY - 2) + 'px')
+			.style('display', 'block');
+
+		d3.event.preventDefault();
+	};
+};
+
+function makeKadmosMenu(theGraphs,currentView,currentID)
+{
+	var imageWidth = 200;
+	var imageHeight = 150;
+	var padding = 10;
+	var rectHeight = 70;
+	var imgSize = 40;
+	var visPackDiv = d3.select("body").append("div").attr("class","vispackDiv");
+	var visPackSvg = visPackDiv.append("svg")
+		.attr("class","visPackSvg")
+		.attr("width",imageWidth*5+40)
+		.attr("height",imageHeight+40)
+		.attr("transform", "translate("
+		  + String(10) + "," + String(10) + ")")			  
+	
+	
+	var defs = visPackSvg.append("defs");
+	var filter = defs.append("filter")
+		.attr("id", "drop-shadow")
+		.attr("height", "130%")
+	filter.append("feColorMatrix")
+		.attr("values", "0.2 0 0 0 0 0 0.2 0 0 0 0 0 0.2 0 0 0 0 0 1 0")
+		.attr("result", "matrixOut")
+	filter.append("feGaussianBlur")
+		.attr("in", "matrixOut")
+		.attr("stdDeviation", 5)
+		.attr("result", "blur")
+	filter.append("feOffset")
+		.attr("in", "blur")
+		.attr("dx", 5)
+		.attr("dy", 5)
+		.attr("result", "offsetBlur")
+	var feMerge = filter.append("feMerge");
+	feMerge.append("feMergeNode")
+		.attr("in", "offsetBlur")
+	feMerge.append("feMergeNode")
+		.attr("in", "SourceGraphic");
+	
+	var visPackFrame = visPackSvg.append("rect")
+		.attr("width",imageWidth*5+12)
+		.attr("height",imageHeight)
+		.attr("fill", "white")
+		.style("filter", "url(#drop-shadow)")
+	
+	var imgs = visPackSvg.selectAll("image").data([0]);
+		imgs.enter()
+		.append("svg:image")
+		.attr("x",5)
+		.attr("xlink:href", "file:../supportFiles/include/KADMOS_VisualizationPack_Icon.png")
+		.attr("width", imageWidth)
+		.attr("height", imageHeight)
+		.attr("position", "relative")
+		
+	var offset_tmp = 860;
+	visPackSvg.append("text")
+		.attr("transform", "translate("
+		  + String(210) + "," + String(35) + ")")
+		.attr("font-family","Arial")
+		.attr("font-size","32pt")
+		.attr("fill","#666666")
+		.text("KADMOS Visualization Package")
+	
+	
+	var acknGroup = visPackSvg.append("g").attr("class","acknGroup").classed("acknGroup",true)
+	var acknRect = acknGroup.append("rect").classed("ackn",true)
+		.attr("height", 30)
+		.attr("transform", "translate("
+		  + String(offset_tmp) + "," + String(2) + ")")
+	acknGroup.append("text")
+		.attr("transform", "translate("
+		  + String(offset_tmp+padding/2) + "," + String(20) + ")")
+		.attr("text-anchor", "front")
+		.attr("font-family","Arial")
+		.attr("font-size","12pt")
+		.attr("fill","white")
+		.text("Acknowledgements")
+	acknRect = acknRect.attr("width", function(d) {return this.parentNode.getBBox().width+padding;})
+	acknRect = acknRect.classed("VisPackMenu",true)
+	acknGroup = acknGroup.on("mouseover", function(){d3.select(this).style("cursor", "pointer")})
+	.on("click",function(){window.open("../supportFiles/include/acknowledgements.html", '_blank');})
+
+	var acknGroup2 = visPackSvg.append("g").attr("class","acknGroup2")
+		.attr("transform", "translate("
+		  + String(offset_tmp) + "," + String(40+padding) + ")")
+    acknGroup2.append("text")
+		.classed("acknText",true)
+		.attr("dy", "0em")
+		.text("Copyright:")
+	acknGroup2.append("text")
+		.classed("acknText",true)
+		.attr("dy", "1.5em")
+		.text("B. Aigner")
+	var imgs = visPackSvg.selectAll("img").data([0]);
+		imgs.enter()
+		.append("svg:image")
+		.attr("xlink:href", "file:../supportFiles/include/RWTH_Logo.png")
+		.attr("x", String(offset_tmp+85))
+		.attr("y", "3em")
+		.attr("width", "60")
+		.attr("height", "40");
+	acknGroup2.append("text")
+		.classed("acknText",true)
+		.attr("dy", "3.2em")
+		.text("I. van Gent")
+	var imgs = visPackSvg.selectAll("img").data([0]);
+		imgs.enter()
+		.append("svg:image")
+		.attr("xlink:href", "file:../supportFiles/include/TUDelft_Logo.png")
+		.attr("x", String(offset_tmp+85))
+		.attr("y", "4.7em")
+		.attr("width", "60")
+		.attr("height", "40");
+
+	
+	var ul = d3.select("body").append("div").attr("class","newDiv").append("ul")
+	function makeViewButtons(graphs_tmp,aName, visFile)
+	{
+		var dropdown1 = ul.append("li").on("mouseover", function(){d3.select(this).style("cursor", "default")})
+		dropdown1.append("a").text(aName)
+		dropdown1.append("img").attr("src","../supportFiles/include/AGILE_Icon.png")
+			.attr("align","left")
+			.style("margin-left","6px")
+			.style("margin-right","0px")
+			.style("margin-top","6px")
+			.style("margin-bottom","6px")
+			.attr("height","42")
+			.attr("width","42")
+		var links = dropdown1.append("ul");
+		for (var i=0; i < graphs_tmp.length; i++)
+		{
+			makeDropDown(graphs_tmp[i],visFile,links,aName)
+		}
+	}
+	function makeDropDown(theData,file,theLinks,aName)
+	{		
+		var linkLi = theLinks.append("li");
+		var link = linkLi.append("a").text(theData.description)
+		if (theData.id == currentID && currentView == aName)
+		{
+			link
+			 .on("mouseover", function(){
+				 d3.select(this).style("cursor", "default")})
+		    linkLi.style("background","#888")
+		}
+		else
+		{
+			link
+			 .on("mouseover", function(){d3.select(this).style("cursor", "pointer")})
+			 .on("click", function(){
+				window.location.replace("../supportFiles/"+file, '_blank');
+				window.localStorage.setItem("graphID", theData.id);})
+		}
+	}
+	makeViewButtons(theGraphs,"XDSM","xdsm.html");
+	makeViewButtons(theGraphs,"Edge Bundles","edgeBundles.html");
+	makeViewButtons(theGraphs,"Sankey Diagram","sankeyDiagram.html");
+}
+	
+function tabulate(aTable,data,columns) {
+	var thead = aTable.append('thead');
+	var	tbody = aTable.append('tbody');  
+
+	// create a row for each object in the data
+	var rows = tbody.selectAll('tr')
+	  .data(data)
+	  .enter()
+	  .append('tr');
+
+	// create a cell in each row for each column
+	var cells = rows.selectAll('td')
+	  .data(function (row) {
+		return columns.map(function (column) {
+		  return {column: column, value: row[column]};
+		});
+	  })
+	  .enter()
+	  .append('td')
+		.html(function (d) { return d.value; });
+
+	return aTable;
+}
+
+//aigner: Move to front function
+d3.selection.prototype.moveToFront = function() {  
+  return this.each(function(){
+	this.parentNode.appendChild(this);
+  });
+};
+//aigner: Move to back function
+d3.selection.prototype.moveToBack = function() {  
+	return this.each(function() { 
+		var firstChild = this.parentNode.firstChild; 
+		if (firstChild) { 
+			this.parentNode.insertBefore(this, firstChild); 
+		} 
+	});
+};
+	
+//get the current graph ID from the KADMOS visualiazation package's starting page
+var graphID = "01";
+if (window.localStorage.getItem("graphID"))
+{
+	graphID=window.localStorage.getItem("graphID");
+}
+var jsonFile = "json/circleLayout_"+graphID+".json";
+var schemaFile = "json/schema_"+graphID+".json"
+//Get graph info from graphs.json file
+var graphs; 
+var varCategories; 
+d3.json("json/graphs.json", function(error, aGraphInfo) 
+{	
+	if (error) {throw error;}	
+	graphs = aGraphInfo.graphs;
+	varCategories =  aGraphInfo.categories;
+})
+
+var diameter = 1500,
+	radius = diameter / 2,
+	innerRadius = radius - 250;
+
+var cluster = d3.layout.cluster()
+	.size([360, innerRadius])
+	.sort(null)
+	.value(function(d) { return d.size; });
+
+var bundle = d3.layout.bundle();
+
+var line = d3.svg.line.radial()
+	.interpolate("bundle")
+	.tension(0.5)
+	.radius(function(d) { return d.y; })
+	.angle(function(d) { return d.x / 180 * Math.PI; });
+
+var svg = d3.select("body").append("div").append("svg")
+	.attr("class","circleSvg")
+	.attr("width", 10000)
+	.attr("height", 10000)
+  .append("g")
+	.attr("transform", "translate(" + radius*1.2 + "," + radius*1.2+ ")");
+	
+var width = diameter*1.5;
+var imgWidth = width;
+var imgs = svg.selectAll("image").data([0]);
+imgs.enter()
+.append("svg:image")
+.attr("xlink:href", "../include/AGILE_Background.png")
+.attr("x", -width/2)
+.attr("y", -100)
+.attr("width", imgWidth)
+.attr("height", imgWidth/4.8)
+.attr("opacity", 1)
+
+var link = svg.append("g").selectAll(".link"),
+	invisibleLink = svg.append("g").selectAll(".invisibleLink"),
+	node = svg.append("g").selectAll(".node");
+
+d3.json(jsonFile, function(error, classes) {
+	d3.json (schemaFile, function(schema)
+	{
+		if (error) throw error;		
+		
+		makeKadmosMenu(graphs,"Edge Bundles",graphID);
+		
+		//aigner: Tree option menu to select which kind of tree view the user wants to see
+		//#####################################################################//
+		function showFullTree(categoryName)
+		{
+			var theSchema;
+			$.ajax({
+			  dataType: "json",
+			  url: "json/"+categoryName+".json",
+			  async: false,
+			  success: function(data){theSchema = JSON.parse(JSON.stringify(data))}
+			});
+			var name_tmp = "Full tree view";
+			var emptyArray="";
+			var allLinks = d3.selectAll(".link");
+			createTreeLayout(name_tmp,theSchema,emptyArray,allLinks);
+		}
+		
+		var childrenItems = [];
+		for (var j=0; j< varCategories.length; j++)
+		{
+			childrenItems.push({title: 'according to ' + varCategories[j].description,
+						   identifier: varCategories[j].name+"_"+graphID,
+						   onMouseClick: function(elm, d, i) {showFullTree(d.identifier)},
+						   onMouseOver: function(elm,d,i){}})
+		}
+		var treeOptionMenu = [
+		{
+			title: 'Show variable tree...',
+			onMouseDown: function(elm, d, i) {
+			},
+			onMouseUp: function(elm, d, i) {
+			},
+			onMouseOver: function(elm, d, i) {
+			},
+			childrenItems: childrenItems
+		}
+		]
+		//#####################################################################//
+		//aigner: treeLayout in the bottom
+		//################################################################################################//		
+		//aigner: tree layout is done	
+		var emptyArray;
+		var expandSymbolDiv = d3.select("body").append("div").attr("class","expandSymbolDiv");
+		var expandSymbolSvg = expandSymbolDiv.append("svg").attr("width",400).attr("height",100);
+		var expandSymbol = expandSymbolSvg.append("g")
+			.attr("class", "newExpandSymbol")
+			.attr("transform", "translate(38,12)");
+		var expandRect = expandSymbol.append("rect")
+			.attr("x",-28)
+			.attr("height", 50)
+			.attr("fill", "#666666")
+			.attr("stroke", "none")
+			.attr("stroke-width", 2)
+			.attr("fill-opacity", 1)
+		var expCircle = expandSymbol.append("circle")
+			.attr("cx", -10)
+			.attr("cy", 25);
+		var expLine1 = expandSymbol.append("line");
+		var expLine2 = expandSymbol.append("line");
+		drawExpandSymbol(expCircle,expLine1,expLine2);
+			expCircle = expCircle.attr("fill", "white");
+		expandSymbol.append("text")
+			.attr("transform", "translate(15,35)")
+			.attr("font-family","Arial")
+			.attr("font-size","24pt")
+			.attr("fill","white")
+			.text("Show full variable tree")
+		expandRect.attr("width", function(d) {return this.parentNode.getBBox().width+40})
+		expandSymbol
+			.on("mouseover", function(){
+				d3.select(this).style("cursor", "pointer")			
+				expCircle.style("fill", "green").style("fill-opacity", .8);
+				expandRect.style("fill", "#4677f8");
+				showRightClickOption();
+			})
+			.on("mouseout", function(){
+				expCircle.style("fill", "green").style("fill-opacity", .6);
+				expandRect.style("fill", "#666666");
+				hideRightClickOption();
+			})
+			.on('contextmenu', d3.contextMenu(treeOptionMenu))
+		//################################################################################################//
+		
+		
+		//aigner: legend
+		//################################################################################################//
+		// var legendDiv = d3.select("body").append("div").attr("class","legendDiv");
+		// var legendSVG = legendDiv.append("svg").attr("width",1000).attr("height",200);
+		// var legend = legendSVG.append("g")
+			// .attr("class", "legend")
+			// .attr("transform", "translate(38,12)");
+		// var legendFrame = legend.append("rect")
+			// .attr("x",-28)
+			// .attr("height", 150)
+			// .attr("width", 400)
+			// .attr("fill", "none")
+			// .attr("stroke", "#8888")
+			// .attr("stroke-width", 3)
+		// legend.append("text")
+			// .attr("transform", "translate(-20,24)")
+			// .attr("font-family","Arial")
+			// .attr("font-size","16pt")
+			// .attr("font-weight",700)
+			// .attr("fill","black")
+			// .text("Legend")
+		// legend.append("line")
+			// .attr("x1", -20)
+			// .attr("y1", 50)
+			// .attr("x2", 20)
+			// .attr("y2", 50)
+			// .style("stroke", "#CC0000")
+			// .style("stroke-width", 5);
+		// legend.append("line")
+			// .attr("x1", -20)
+			// .attr("y1", 90)
+			// .attr("x2", 20)
+			// .attr("y2", 90)
+			// .style("stroke", "#99CC00")
+			// .style("stroke-width", 5);
+		// legend.append("text")
+			// .attr("transform", "translate(30,56)")
+			// .attr("font-family","Arial")
+			// .attr("font-size","12pt")
+			// .attr("fill","black")
+			// .text("Input")
+		// legend.append("text")
+			// .attr("transform", "translate(30,96)")
+			// .attr("font-family","Arial")
+			// .attr("font-size","12pt")
+			// .attr("fill","black")
+			// .text("Output")
+		
+		//################################################################################################//
+		
+		
+		d3.select(".legendDiv").moveToBack()
+		d3.select(".expandSymbolDiv").moveToBack()
+		d3.select(".newDiv").moveToBack()
+		d3.select(".vispackDiv").moveToBack()
+		
+		var nodes = cluster.nodes(packageHierarchy(classes));
+		var links = packageImports(nodes);
+		
+		links.forEach(function(d)
+		{
+			d.pipeData_in = d.source.pipeline_data[d.target.name];
+			d.pipeData_out = d.target.pipeline_data[d.source.name];
+			d.pipeDataName_in = "";
+			d.pipeDataName_out = "";
+			if (d.pipeData_in)
+			{
+				for (var i=0; i<d.pipeData_in.length; i++)
+				{
+					d.pipeDataName_in += "," + d.pipeData_in[i];
+				}
+			}
+			if (d.pipeData_out)
+			{
+				for (var i=0; i<d.pipeData_out.length; i++)
+				{
+					d.pipeDataName_out += "," + d.pipeData_out[i];
+				}
+
+			}
+		})
+			
+		link = link
+		  .data(bundle(links))
+		.enter().append("path")
+		  .each(function(d) { 
+			d.source = d[0];
+			d.target = d[d.length - 1];})
+		  .attr("class", "link")
+		  .attr("d", line)
+	
+		
+		
+		invisibleLink = invisibleLink
+		  .data(bundle(links))
+			.enter().append("path")
+		  .each(function(d) { 
+			d.source = d[0];
+			d.target = d[d.length - 1];
+			d.createNew = true;})
+		  .attr("class", "invisibleLink")
+		  .attr("d", line)
+		  
+			
+		function showLinkTree(aLink,aVarCategory)
+		{
+			var theSchema;
+			$.ajax({
+			  dataType: "json",
+			  url: "json/"+aVarCategory+".json",
+			  async: false,
+			  success: function(data){theSchema = JSON.parse(JSON.stringify(data))}
+			});
+			var name_tmp = "Variable flow: " + aLink.__data__.source.name +  "  →  " + aLink.__data__.target.name
+			createTreeLayout(name_tmp,theSchema,aLink.__data__,link);
+		}
+		
+		function showEdgeTable(aLink)
+		{						
+			aLink.pipeData_in = aLink.source.pipeline_data[aLink.target.name];
+			aLink.pipeData_out = aLink.target.pipeline_data[aLink.source.name];
+			aLink.pipeDataName_in = "";
+			aLink.pipeDataName_out = "";
+			aLink.name = "";
+			if (aLink.pipeData_in)
+			{
+				for (var i=0; i<aLink.pipeData_in.length; i++)
+				{
+					if (i==0){aLink.pipeDataName_in += aLink.pipeData_in[i];}
+					else{aLink.pipeDataName_in += "," + aLink.pipeData_in[i];}
+					
+				}
+				aLink.name += aLink.pipeDataName_in
+			}
+			if (aLink.pipeData_out)
+			{
+				for (var i=0; i<aLink.pipeData_out.length; i++)
+				{
+					if (i==0){aLink.pipeDataName_out += aLink.pipeData_out[i];}
+					else{aLink.pipeDataName_out += "," + aLink.pipeData_out[i];}
+				}
+				aLink.name += aLink.pipeDataName_out
+			}
+			
+			
+			var edgeTableDiv = d3.select("body").append("div").attr("class","edgeTableDiv")
+				.style('left', (d3.event.pageX - 2) + 'px')
+				.style('top', (d3.event.pageY - 2) + 'px')
+				.style("position", "absolute")
+			var edgeTableGroup = edgeTableDiv.append("g").attr("class","edgeTableGroup")
+			
+			//Drag Function for edge table
+			var xPos_init = d3.event.x - 2;
+			var yPos_init = d3.event.y - 2;
+			var xOffset_tmp;
+			var yOffset_tmp;
+			var drag = d3.behavior.drag()
+				.on("dragstart", dragstarted)
+				.on("drag", dragged)
+				.on("dragend", dragended);
+			function dragstarted() {				
+			  xOffset_tmp = xPos_init-d3.event.sourceEvent.clientX;
+			  yOffset_tmp = yPos_init-d3.event.sourceEvent.clientY;
+			}
+			function dragged() {
+				 d3.select(this)
+					.style("left",(d3.event.x+xOffset_tmp) + "px")
+					.style("top",(d3.event.y+yOffset_tmp) + "px")
+			}
+			function dragended() {
+			  xPos_init = d3.event.sourceEvent.clientX+xOffset_tmp;
+			  yPos_init = d3.event.sourceEvent.clientY+yOffset_tmp;
+			}
+			edgeTableDiv.call(drag);
+			
+			var headLine = "Edge Information (" + aLink.source.key + " - " + aLink.target.key + ")";
+
+			var tabRemoveSVG = edgeTableGroup.append("svg")
+				.attr("width",String(headLine.length*12+"pt"))
+				.attr("height",26)
+			tabRemoveSVG.append("rect")
+				.attr("width", "100%")
+				.attr("height", "100%")
+				.attr("fill", "white");
+			var tabRemoveSymbol = tabRemoveSVG.append("g");
+			tabRemoveSymbol = tabRemoveSymbol
+				.attr("class", "tabRemoveSymbol")
+				.attr("transform", "translate(26,0)")
+			var circle = tabRemoveSymbol.append("circle")
+				.classed("remCircle",true)
+			var minus = tabRemoveSymbol.append("line").classed("remMinus",true)
+			var cx = -20;
+			var cy = 12;
+			circle = circle
+				.attr("cx", cx+5)
+				.attr("cy", cy)
+				.attr("r", 10)
+			minus = minus
+				.attr("x1", cx)
+				.attr("y1", cy)
+				.attr("x2", cx+10)
+				.attr("y2", cy)
+				
+			tabRemoveSVG.append("text").attr("class","tabRemoveText")
+				.attr("transform", "translate(26,20)")
+				.attr("fill", "black")
+				.style("font-family", "Arial")
+				.style("font-size", "16pt")
+				.style("font-weight", "bold")
+				.text(headLine);
+			
+			tabRemoveSymbol
+				.on("mouseover", function(){
+					d3.select(this).style("cursor", "pointer")
+					circle.style("fill", "red").style("fill-opacity", .8);
+					})
+				.on("mouseout", function(){circle.style("fill", "red").style("fill-opacity", .6)})
+			tabRemoveSymbol.on("click", function(d)
+			{
+				edgeTableDiv.remove();
+			})
+						
+			var anEdgeNameSplit = aLink.name.split(',')
+			var numberOfconnections = anEdgeNameSplit.length;
+			var theLeafNodes = [];
+			var dimension=0;
+			var nullDim=false;
+			var undefinedLeafs;
+			var treeData;
+			$.ajax({
+			  dataType: "json",
+			  url: "json/"+varCategories[0].name+"_"+graphID+".json",
+			  async: false,
+			  success: function(data){treeData = JSON.parse(JSON.stringify(data))}
+			});
+			var pipeData = aLink.name;
+			getPrunedLeafNodes("/"+treeData.name+"/", treeData.children, pipeData, theLeafNodes)
+			var undefLeafsNumber=0;
+			var defLeafsNumber=0;
+			for (var k=0;k<theLeafNodes.length;k++)
+			{
+				if (theLeafNodes[k].dimension!=null){dimension = dimension+theLeafNodes[k].dimension}
+				else{nullDim=true}
+				if (theLeafNodes[k].value.includes("could not be found")||theLeafNodes[k].value.includes("unknown"))
+				{
+					if (undefLeafsNumber==0){undefinedLeafs += theLeafNodes[k].xPath;}
+					else {undefinedLeafs += "," + theLeafNodes[k].xPath;}
+					undefLeafsNumber ++;
+				}
+				else
+				{
+					defLeafsNumber++;
+				}
+			}		
+			//Render data for table
+			var data = [];
+			data.push({ "name" : "Total number of connections", "value" : numberOfconnections })
+			data.push({ "name" : "Number of referenced connections", "value" : defLeafsNumber })
+			data.push({ "name" : "Dimension of referenced connections", "value" : String(dimension) })
+			if (undefinedLeafs)
+			{
+				data.push({ "name" : "Number of unreferenced connections", "value" :  undefLeafsNumber})					
+			}
+			var table = edgeTableGroup.append('table');
+			tabulate(table,data,['name', 'value']); // 2 column table
+			if (undefinedLeafs)
+			{
+				var undefLeafTreeSVG = edgeTableGroup.append("svg")
+					.attr("transform", "translate(0,20)")
+					.attr("width",String(headLine.length*9.5+"pt"))
+					.attr("height",50)
+				undefLeafTreeSVG.append("rect")
+					.attr("width", "100%")
+					.attr("height", "100%")
+					.attr("fill", "white");
+				var expandSymbol = undefLeafTreeSVG.append("g")
+					.attr("class", "newExpandSymbol")
+					.attr("transform", "translate(38,12)");
+				var expandRect = expandSymbol.append("rect")
+					.attr("x",-28)
+					.attr("height", 50)
+					.attr("fill", "#666666")
+					.attr("stroke", "none")
+					.attr("stroke-width", 2)
+					.attr("fill-opacity", 1)
+				var expCircle = expandSymbol.append("circle")
+					.attr("cx", -26)
+					.attr("cy", 0);
+				var expLine1 = expandSymbol.append("line");
+				var expLine2 = expandSymbol.append("line");
+				drawExpandSymbol(expCircle,expLine1,expLine2);
+					expCircle = expCircle.attr("fill", "white");
+				expandSymbol
+					.on("mouseover", function(){
+						d3.select(this).style("cursor", "pointer")			
+						expCircle.style("fill", "green").style("fill-opacity", .8);
+					})
+					.on("mouseout", function(){
+						expCircle.style("fill", "green").style("fill-opacity", .6);
+					})
+				undefLeafTreeSVG.append("text").attr("class","tabRemoveText")
+					.attr("transform", "translate(26,20)")
+					.attr("fill", "black")
+					.style("font-family", "Arial")
+					.style("font-size", "16pt")
+					.style("font-weight", "bold")
+					.text("Show unreferenced connections as tree");
+				expandSymbol.on("mousedown", function(){
+					var name_tmp = "Unref. connections: " + aLink.source.name +  "  →  " + aLink.target.name
+					createTreeLayout(name_tmp,treeData,aLink,link);
+				})
+			}
+			
+		}
+		
+		//linkMenu --> functions for right click options
+		var linkChildrenItems = [];
+		for (var j=0; j< varCategories.length; j++)
+		{
+			linkChildrenItems.push({title: 'according to ' + varCategories[j].description,
+									identifier: varCategories[j].name+"_"+graphID,
+									onMouseClick: function(elm, data, i) {showLinkTree(elm,data.identifier)},
+									onMouseOver: function(elm,data,i){}});
+		}
+		var linkMenu = [
+		{
+			title: 'Show edge info',
+			onMouseDown: function(elm, k, i) {
+				showEdgeTable(k)
+			},
+			onMouseUp: function(elm, k, i) {
+			},
+			onMouseOver: function(elm, d, i) {
+			},
+			childrenItems: []
+		},
+		{
+			title: 'Show variable tree...',
+			onMouseDown: function(elm, k, i) {
+			},
+			onMouseUp: function(elm, k, i) {
+			},
+			onMouseOver: function(elm, d, i) {
+			},
+			childrenItems: linkChildrenItems
+		}
+		]  
+		invisibleLink
+		.on("mouseover", function(){d3.select(this).style("cursor", "pointer")})
+		.on('contextmenu', d3.contextMenu(linkMenu));
+		
+		//aigner: CAUTION, HACK --> delete the obsolete object that contains duplicate information
+		nodes.forEach(function(aNode,i)
+		{
+			if (aNode.children)
+			{
+				var index = nodes.indexOf(aNode);
+				if (index > -1) 
+				{
+					nodes.splice(index, 1);
+				}
+			}
+		});
+		
+		//aigner: Create the nodes in a circular view
+		node = node
+		  .data(nodes)
+		.enter().append("text")
+		  .attr("class", "node")
+		  .attr("dy", ".31em")
+		  .attr("transform", function(d) { return "rotate(" + (d.x - 90) + ")translate(" + (d.y + 8) + ",0)" + (d.x < 180 ? "" : "rotate(180)"); })
+		  .style("text-anchor", function(d) { return d.x < 180 ? "start" : "end"; })
+		  .style("font-family","Arial")
+		  .style("font-size","16pt")
+		  .text(function(d) { return d.name; })
+		  .on("mouseover", nodeMouseovered)
+		  .on("mouseout", nodeMouseouted);
+		
+		//aigner: Right click options for tools
+		//##############################################################################################################################
+		//aigner: assign additional node information to nodes coming from xdsm information
+		var theXDSM;
+		$.ajax({
+		  dataType: "json",
+		  url: "json/xdsm_"+graphID+".json",
+		  async: false,
+		  success: function(data){theXDSM = JSON.parse(JSON.stringify(data))}
+		});
+		nodes.forEach(function(aNode,i)
+		{
+			var xdsmNodes = theXDSM.nodes;
+			for (var i=0; i< xdsmNodes.length; i++)
+			{
+				var xdsmNode = xdsmNodes[i];
+				if (xdsmNode.name == aNode.name)
+				{
+					aNode.id = xdsmNode.id;
+					aNode.metadata = xdsmNode.metadata;
+					aNode.type = xdsmNode.type;
+				}
+			}
+		});		
+		
+		//aigner: Table for competence/tool information
+		//############################################################
+		function showToolTable(aTool)
+		{						
+			var toolTableDiv = d3.select("body").append("div").attr("class","toolTableDiv")
+				.style('left', (d3.event.x - 2) + 'px')
+				.style('top', (d3.event.y - 2) + 'px')
+				.style("position", "absolute")
+			var toolTableGroup = toolTableDiv.append("g").attr("class","toolTableGroup")
+			
+			//Drag Function for variable table
+			var xPos_init = d3.event.x - 2;
+			var yPos_init = d3.event.y - 2;
+			var xOffset_tmp;
+			var yOffset_tmp;
+			var drag = d3.behavior.drag()
+				.on("dragstart", dragstarted)
+				.on("drag", dragged)
+				.on("dragend", dragended);
+			function dragstarted() {				
+			  xOffset_tmp = xPos_init-d3.event.sourceEvent.clientX;
+			  yOffset_tmp = yPos_init-d3.event.sourceEvent.clientY;
+			}
+			function dragged() {
+				 d3.select(this)
+					.style("left",(d3.event.x+xOffset_tmp) + "px")
+					.style("top",(d3.event.y+yOffset_tmp) + "px")
+			}
+			function dragended() {
+			  xPos_init = d3.event.sourceEvent.clientX+xOffset_tmp;
+			  yPos_init = d3.event.sourceEvent.clientY+yOffset_tmp;
+			}
+			toolTableDiv.call(drag);
+			
+			var aToolNameSplit = aTool.name.split(': ')			
+			var headLine;
+			if (aToolNameSplit.length>1){headLine = "Competence Information: (" + aToolNameSplit[1] + ")";}
+			else {headLine = "Competence Information: (" + aToolNameSplit[0] + ")";}
+
+			var tabRemoveSVG = toolTableGroup.append("svg")
+				.attr("width",800)
+				.attr("height",26)
+			var tabRemoveRect = tabRemoveSVG.append("rect")
+				.attr("width", "100%")
+				.attr("height", "100%")
+				.attr("fill", "white");
+			var tabRemoveSymbol = tabRemoveSVG.append("g");
+			tabRemoveSymbol = tabRemoveSymbol
+				.attr("class", "tabRemoveSymbol")
+				.attr("transform", "translate(26,0)")
+			var circle = tabRemoveSymbol.append("circle")
+				.classed("remCircle",true)
+			var minus = tabRemoveSymbol.append("line").classed("remMinus",true)
+			var cx = -20;
+			var cy = 12;
+			circle = circle
+				.attr("cx", cx+5)
+				.attr("cy", cy)
+				.attr("r", 10)
+			minus = minus
+				.attr("x1", cx)
+				.attr("y1", cy)
+				.attr("x2", cx+10)
+				.attr("y2", cy)
+				
+			tabRemoveSVG.append("text").attr("class","tabRemoveText")
+				.attr("transform", "translate(26,20)")
+				.attr("fill", "black")
+				.style("font-family", "Arial")
+				.style("font-size", "16pt")
+				.style("font-weight", "bold")
+				.text(headLine);
+			
+			tabRemoveSymbol
+				.on("mouseover", function(){
+					d3.select(this).style("cursor", "pointer")
+					circle.style("fill", "red").style("fill-opacity", .8);
+					})
+				.on("mouseout", function(){circle.style("fill", "red").style("fill-opacity", .6)})
+			tabRemoveSymbol.on("click", function(d)
+			{
+				toolTableDiv.remove();
+			})
+			
+		
+			var data = [];
+			// render the table(s)
+			if (aTool.metadata.length==0)
+			{
+				data.push({ "name" : "NO TOOL METADATA AVAILABLE", "value" : "..." })
+			}
+			for (var j=0; j < aTool.metadata.length;j++)
+			{
+				var metaData = aTool.metadata[j]
+				for(var key in metaData){
+				  data.push({ "name" : key, "value" : metaData[key] })
+				}
+				
+			}
+			var table = toolTableGroup.append('table');
+			tabulate(table,data,['name', 'value']); // 2 column table
+		}
+		//############################################################
+		
+		//aigner: Creation of input/output tree
+		//############################################################
+		function showIOTree(categoryName, theNode, io)
+		{	
+			var links = d3.selectAll(".link")[0];
+			var array={name_in:"",name_out:"",name:""};
+			var name_tmp = "";
+						
+			links.forEach(function(d)
+			{	
+				var theLink = d.__data__;
+				
+				
+				var pipeData_in = theLink.source.pipeline_data[theLink.target.name];
+				var pipeData_out = theLink.target.pipeline_data[theLink.source.name];
+				if (!pipeData_in){pipeData_in = [];}
+				if (!pipeData_out){pipeData_out = [];}
+				theLink.pipeData_in = theLink.source.pipeline_data[theLink.target.name];
+				theLink.pipeData_out = theLink.target.pipeline_data[theLink.source.name];
+				theLink.name_in = "";
+				theLink.name_out = "";
+				theLink.name = "";
+				if (theLink.pipeData_in)
+				{
+					for (var i=0; i<theLink.pipeData_in.length; i++)
+					{
+						if (i==0){theLink.name_in += theLink.pipeData_in[i];}
+						else{theLink.name_in += "," + theLink.pipeData_in[i];}
+						
+					}
+					theLink.name += theLink.name_in
+				}
+				if (theLink.pipeData_out)
+				{
+					for (var i=0; i<theLink.pipeData_out.length; i++)
+					{
+						if (i==0){theLink.name_out += theLink.pipeData_out[i];}
+						else{theLink.name_out += "," + theLink.pipeData_out[i];}
+					}
+					theLink.name += theLink.name_out
+				}
+			
+				if (io=="in")
+				{
+					if (theLink.target == theNode)
+					{
+						if (array.name_in == ""){array.name_in +=theLink.name_out;}
+						else{array.name_in += "," + theLink.name_out;}
+						array.name_out = "";
+						array.name = array.name_in;
+					}
+					if (theLink.source == theNode)
+					{
+						if (array.name_in == ""){array.name_in +=theLink.name_in;}
+						else{array.name_in += "," + theLink.name_in;}
+						array.name_out = "";
+						array.name = array.name_in;
+					}
+					name_tmp = "Input tree view:" + theNode.id;
+				}
+				else if (io=="out")
+				{
+					if (theLink.source == theNode)
+					{
+						if (array.name_out == ""){array.name_out +=theLink.name_out;}
+						else{array.name_out += "," + theLink.name_out;}
+						array.name_in = "";
+						array.name = array.name_out;
+					}
+					if (theLink.target == theNode)
+					{
+						if (array.name_out == ""){array.name_out +=theLink.name_in;}
+						else{array.name_out += "," + theLink.name_in;}
+						array.name_in = "";
+						array.name = array.name_out;
+					}
+					name_tmp = "Output tree view:" + theNode.id;
+				}
+			})
+			
+			
+			
+			
+			var theSchema;
+			$.ajax({
+			  dataType: "json",
+			  url: "json/"+categoryName+".json",
+			  async: false,
+			  success: function(data){theSchema = JSON.parse(JSON.stringify(data))}
+			});
+			createTreeLayout(name_tmp,theSchema,array,link)
+		}
+		//############################################################
+		
+		var inputChildrenitems = [];
+		var outputChildrenitems = [];
+		var inputChildrenitems = [];
+		var outputChildrenitems = [];
+		for (var j=0; j< varCategories.length; j++)
+		{
+			inputChildrenitems.push({title: 'according to ' + varCategories[j].description,
+									 identifier: varCategories[j].name+"_"+graphID,
+									 onMouseClick: function(elm, data, i) {showIOTree(data.identifier,elm.__data__,"in")},
+									 onMouseOver: function(elm,data,i){}});
+			outputChildrenitems.push({title: 'according to ' + varCategories[j].description,
+									 identifier: varCategories[j].name+"_"+graphID,
+									 onMouseClick: function(elm, data, i) {showIOTree(data.identifier,elm.__data__,"out")},
+									 onMouseOver: function(elm,data,i){}});
+		}
+		//menu --> functions for right click options
+		var toolMenu = [
+		{
+			title: 'Show competence info',
+			onMouseDown: function(elm, k, i) {
+				showToolTable(k);
+			},
+			onMouseUp: function(elm, k, i) {
+			},
+			onMouseOver: function(elm, d, i) {
+			},
+			childrenItems: []
+		},
+		{
+			title: 'Show input variable tree...',
+			onMouseDown: function(elm, k, i) {
+			},
+			onMouseUp: function(elm, k, i) {
+			},
+			onMouseOver: function(elm, d, i) {
+			},
+			childrenItems: inputChildrenitems
+		},
+		{
+			title: 'Show output variable tree...',
+			onMouseDown: function(elm, k, i) {
+			},
+			onMouseUp: function(elm, k, i) {
+			},
+			onMouseOver: function(elm, d, i) {
+			},
+			childrenItems: outputChildrenitems
+		}
+		]
+		
+		node.on('contextmenu', d3.contextMenu(toolMenu));
+		//##############################################################################################################################
+	})
+});
+
+function showRightClickOption()
+{
+	var optionGroupDiv = d3.select("body").append("div").attr("class","optionDiv")
+		.style("left",(d3.event.pageX) + "px")
+		.style("top",(d3.event.pageY - 28) + "px")
+		.style("position", "absolute");
+	var optionGroupSvg = optionGroupDiv.append("svg").attr("class","optionGroupSvg");
+	var optionGroup = optionGroupSvg.append("g").attr("class","optionGroup");
+	var optionGroupRect = optionGroup.append("rect")
+		.transition().delay(400)
+		.attr("height", 26)
+		.attr("fill", "#f2f2f2")
+		.style("border-radius", "4px")
+		.style("border", "1px solid #d4d4d4")
+		.attr("fill-opacity", 1.)
+		.attr("width", 180)
+		.attr("stroke", "black")
+		.attr("stroke-width", 1)
+	var optionText = optionGroup.append("text")
+		.transition().delay(400)
+		.attr("transform", "translate(10,18)")
+		.attr("font-family","Arial")
+		.attr("font-size","12pt")
+		.attr("fill","black")
+		.attr("fill-opacity",1.)
+		.text("Click right for options")
+}
+function hideRightClickOption()
+{
+	d3.selectAll(".optionDiv").remove()
+}
+
+function nodeMouseovered(d) {
+	showRightClickOption();
+	d3.select(this).style("cursor", "pointer")
+  node
+      .each(function(n) { 
+	  n.target = n.source = false; });
+
+  link
+      .classed("link--target", function(l) { if (l.target === d) return l.source.source = true; })
+      .classed("link--source", function(l) { if (l.source === d) return l.target.target = true; })
+      .filter(function(l) { return l.target === d || l.source === d; })
+      .each(function() { this.parentNode.appendChild(this); });
+	  
+  node
+      .classed("node--target", function(n) { return n.target; })
+      .classed("node--source", function(n) { return n.source; })
+}
+
+function nodeMouseouted(d) {
+  hideRightClickOption();
+  link
+      .classed("link--target", false)
+      .classed("link--source", false);
+
+  node
+      .classed("node--target", false)
+      .classed("node--source", false);
+}
+
+d3.select(self.frameElement).style("height", diameter + "px");
+
+// Lazily construct the package hierarchy from class names.
+function packageHierarchy(classes) {
+  var map = {};
+
+  function find(name, data) {
+    var node = map[name], i;
+    if (!node) {
+      node = map[name] = data || {name: name, children: []};
+      if (name.length) {
+        node.parent = find(name.substring(0, i = name.lastIndexOf("/")));
+        node.parent.children.push(node);
+        node.key = name.substring(i + 1);
+      }
+    }
+    return node;
+  }
+
+  classes.forEach(function(d) {
+    find(d.name, d);
+  });
+
+  return map[""];
+}
+
+// Return a list of imports for the given array of nodes.
+function packageImports(nodes) {
+  var map = {},
+  map2 = {},
+  input = [];
+
+  // Compute a map from name to node.
+  nodes.forEach(function(d) {
+    map[d.name] = d;
+    map2[d.pipeline_data] = d;
+  });
+
+  // For each import, construct a link from the source to target node.
+  nodes.forEach(function(d) 
+  {
+	if(d.input)
+	{
+		d.input.forEach(function(i) 
+		{
+			if (map[i])
+			{
+				input.push({source: map[d.name], 
+						target: map[i],
+						pipeline_data: map2[d.pipeline_data]});	
+			}
+		})
+	}
+
+   });
+  return input;
+}
+
+function include(arr,obj) {
+    return (arr.indexOf(obj) != -1);
+}
+
+function prune_schema(parentXPath, objArray, xPathList_in, xPathList_out) 
+{ 
+	var firstElement_in = "/"+xPathList_in.split("/")[1]+"/";
+	var firstElement_out = "/"+xPathList_out.split("/")[1]+"/";
+	for (var i = 0; i < objArray.length; ++i) 
+	{
+		var obj = objArray[i];
+		obj.pipeLineIn = false;
+		obj.pipeLineOut = false;
+		var objXPath;
+		
+		//aigner: If object has children append a "/" as xPath separator
+		//else append comma as indicator for last element in the xPath
+		if (obj.children){objXPath = parentXPath+objArray[i].name+"/";}
+		else{objXPath =  parentXPath+objArray[i].name;}
+		var objXPathFromFirst_in = objXPath.split(firstElement_in);
+		var objXPathFromFirst_out = objXPath.split(firstElement_out);
+		
+		// console.log("Current node ->")
+		// console.log(firstElement_in+objXPathFromFirst_in[1])
+		// console.log(firstElement_out+objXPathFromFirst_out[1])
+		// console.log(xPathList_out)
+								
+		var delete_it = true;
+		if (xPathList_in!="")
+		{
+			if(objXPathFromFirst_in[1]==undefined)
+			{
+				delete_it = false;
+			}
+			else
+			{
+				if (include(xPathList_in, firstElement_in+objXPathFromFirst_in[1]))
+				{
+					obj.pipeLineIn = true;
+					delete_it = false;
+				}
+			}
+		}
+		if (xPathList_out!="")
+		{
+			if(objXPathFromFirst_out[1]==undefined)
+			{
+				delete_it = false;
+			}
+			else
+			{
+				if (include(xPathList_out, firstElement_out+objXPathFromFirst_out[1]))
+				{
+					obj.pipeLineOut = true;
+					delete_it = false;
+				}
+			}
+		}
+		
+		if (delete_it==true)
+		{
+			// console.log("delete ->")
+			// console.log( objXPathFromFirst_in[1])
+			// console.log(xPathList)
+			
+			objArray.splice(i, 1);
+			i--;
+		}
+		else
+		{
+			// console.log("do not delete ->")
+			// console.log(objXPath);
+			if (obj.children)
+			{
+				if (obj.children.length==0)
+				{
+					objArray.splice(i, 1);
+					i--;
+					prune_schema(parentXPath, objArray, xPathList_in, xPathList_out)
+				}
+				else{prune_schema(objXPath, obj.children, xPathList_in, xPathList_out);}
+				
+			}
+		}
+	}
+}
+function getPrunedLeafNodes(parentXPath, objArray, xPathList, leafNodes) 
+{ 
+	var firstElement = "/"+xPathList.split("/")[1]+"/";
+	for (var i = 0; i < objArray.length; ++i) 
+	{
+		var obj = objArray[i];
+		var objXPath;
+		
+		//aigner: If object has children append a "/" as xPath separator
+		//else append comma as indicator for last element in the xPath
+		if (obj.children){objXPath = parentXPath+objArray[i].name+"/";}
+		else{objXPath =  parentXPath+objArray[i].name;}
+		var objXPathFromFirst = objXPath.split(firstElement);
+		
+		// console.log("Current node ->")
+		// console.log(firstElement+objXPathFromFirst[1])
+		// console.log(xPathList)
+								
+		var delete_it = true;
+		if(objXPathFromFirst[1]==undefined)
+		{
+			delete_it = false;
+		}
+		else
+		{
+			if (include(xPathList, firstElement+objXPathFromFirst[1]))
+			{
+				delete_it = false;
+			}
+		}
+		if (delete_it==true)
+		{
+			// console.log("delete ->")
+			// console.log( objXPathFromFirst[1])
+			// console.log(xPathList)
+			
+			objArray.splice(i, 1);
+			i--;
+		}
+		else
+		{
+			// console.log("do not delete ->")
+			// console.log(objXPath);
+			if (obj.children)
+			{
+				if (obj.children.length==0)
+				{
+					objArray.splice(i, 1);
+					i--;
+					getPrunedLeafNodes(parentXPath, objArray, xPathList, leafNodes)
+				}
+				else{getPrunedLeafNodes(objXPath, obj.children, xPathList, leafNodes);}
+			}
+			else 
+			{
+				obj.xPath = objXPath;
+				leafNodes.push(obj);
+			};
+		}
+	}
+}
+function clean_tree(objArray)
+{
+	for (var i = 0; i < objArray.length; ++i) 
+	{
+		var obj = objArray[i];
+		if (obj.children)
+		{
+			if (obj.children.length==0)
+			{
+				objArray.splice(i, 1);
+				i--;
+			}
+			clean_tree(obj.children);
+		}
+	}
+}
+function countElements(node, counter) 
+{
+	counter ++;
+	if (node.children)
+	{
+		if (node.children.length !== 0)
+		{
+			node.children.forEach(function(n)
+			{
+				counter = countElements(n, counter);
+			});
+		}
+	}
+	return counter;
+}
+//createTreeLayout(theName,schema,theLinks,theAllLinks)
+function createTreeLayout(theName, schema,aLink,theAllLinks)
+{
+	var theLink = aLink;
+	if (aLink.source && aLink.target)
+	{
+		var pipeData_in = theLink.source.pipeline_data[theLink.target.name];
+		var pipeData_out = theLink.target.pipeline_data[theLink.source.name];
+		if (!pipeData_in){pipeData_in = [];}
+		if (!pipeData_out){pipeData_out = [];}
+		theLink.pipeData_in = theLink.source.pipeline_data[theLink.target.name];
+		theLink.pipeData_out = theLink.target.pipeline_data[theLink.source.name];
+		theLink.name_in = "";
+		theLink.name_out = "";
+		theLink.name = "";
+		if (theLink.pipeData_in)
+		{
+			for (var i=0; i<theLink.pipeData_in.length; i++)
+			{
+				if (i==0){theLink.name_in += theLink.pipeData_in[i];}
+				else{theLink.name_in += "," + theLink.pipeData_in[i];}
+				
+			}
+			theLink.name += theLink.name_in
+		}
+		if (theLink.pipeData_out)
+		{
+			for (var i=0; i<theLink.pipeData_out.length; i++)
+			{
+				if (i==0){theLink.name_out += theLink.pipeData_out[i];}
+				else{theLink.name_out += "," + theLink.pipeData_out[i];}
+			}
+			theLink.name += theLink.name_out
+		}
+	}
+
+	
+	
+	var treeData = (JSON.parse(JSON.stringify(schema)));
+	if (theLink)
+	{
+		prune_schema("/"+treeData.name+"/", treeData.children, theLink.name_in, theLink.name_out);
+		//aigner: count all descendants of a node
+		var firstEl = theLink.name.split("/")[1];
+		if(firstEl != treeData.name)
+		{
+			var cleanOperations = countElements(treeData,0)
+			for (var i=0; i<cleanOperations; i++){clean_tree(treeData.children);}
+		}
+	}
+		
+	var width= 1000;
+	var height= 500;
+	var xOffset = 10;
+	var xOffset2 = 100;
+	var canvas = d3.select(".circleSvg");
+	// Calculate total nodes, max label length
+	var totalNodes = 0;
+	var maxLabelLength = 0;
+	// variables for drag/drop
+	var selectedNode = null;
+	var draggingNode = null;
+	// Misc. variables
+	var i = 0;
+	var duration = 500;
+	var root;
+	
+
+	// size of the diagram
+	var viewerWidth = width/3;
+	var viewerHeight = height-50;
+
+	var tree = d3.layout.tree()
+		.size([viewerHeight, viewerWidth])
+
+	// define a d3 diagonal projection for use by the node paths later on.
+	var diagonal = d3.svg.diagonal()
+		.projection(function(d) {
+			return [d.y+xOffset, d.x];
+		});
+
+	// A recursive helper function for performing some setup by walking through all nodes
+
+	function visit(parent, visitFn, childrenFn) {
+		if (!parent) return;
+
+		visitFn(parent);
+
+		var children = childrenFn(parent);
+		if (children) {
+			var count = children.length;
+			for (var i = 0; i < count; i++) {
+				visit(children[i], visitFn, childrenFn);
+			}
+		}
+	}
+
+	// Call visit function to establish maxLabelLength
+	visit(treeData, function(d) {
+		totalNodes++;
+		maxLabelLength = Math.max(d.name.length, maxLabelLength);
+	}, function(d) {
+		return d.children && d.children.length > 0 ? d.children : null;
+	});
+	
+	function getMaxLength(data)
+	{
+		var maxLen=0;;
+		for (var i = 0; i < data.length; i++)
+		{
+			maxLen = Math.max(data[i].name.length, maxLen);
+		}
+		for (var i = 0; i < data.length; i++)
+		{
+			data[i].labelLength = maxLen;
+			if (data[i].children)
+			{getMaxLength(data[i].children);}
+			if (data[i]._children)
+			{getMaxLength(data[i]._children);}
+		}
+		
+	}
+	if(treeData._children)
+	{getMaxLength(treeData._children);}
+	if(treeData.children)
+	{getMaxLength(treeData.children);}
+	treeData.labelLength = treeData.name.length;
+
+	// sort the tree according to the node names
+	function sortTree() {
+		tree.sort(function(a, b) {
+			return b.name.toLowerCase() < a.name.toLowerCase() ? 1 : -1;
+		});
+	}
+	// Sort the tree initially incase the JSON isn't in a sorted order.
+	//sortTree()
+
+
+	// Collapse the node and all it's children
+	function collapse(d) {
+	  if(d.children) {
+		d._children = d.children
+		d._children.forEach(collapse)
+		d.children = null
+	  }
+	}
+	// Collapse the node and all it's children
+	function expand(d) {
+	  if(d._children) {
+		d.children = d._children
+		d.children.forEach(expand)
+		d._children = null
+	  }
+	}
+	// Toggle children on click.
+	function click(d) 
+	{
+		if (d.children) {
+			d._children = d.children;
+			d.children = null;
+		} else 
+		{
+			d.children = d._children;
+			d._children = null;
+		}
+		update(d,theAllLinks);
+	}
+	// Collapse/expand entire tree on double-click
+	function dblclick(d) 
+	{
+		if(d.children) 
+		{
+			collapse(d);
+		}
+		else if(d._children)
+		{
+			expand(d);
+		}
+		update(d,theAllLinks);
+	}	
+
+	
+	
+	//aigner: Here the tree layout is created
+	var treeLayoutdiv = d3.select("body").append("div").attr("class","treeDiv_"+theName)
+							.style("left",(d3.event.pageX) + "px")
+							.style("top",(d3.event.pageY - 28) + "px")
+							.style("position", "absolute")
+							.on("mousedown", function(d) {
+								d3.select(this).moveToFront();
+							})
+							
+	var treeLayoutSVG = treeLayoutdiv.append("svg").attr("class","treeLayoutSVG")
+	var treeGroup = treeLayoutSVG.append("g").attr("class","treeGroup").style("position","absolute")
+					.attr("transform", "translate(50,0)");
+	var margin = {top: 20, right: 90, bottom: 20, left: 90},
+				  width = 960 - margin.left - margin.right,
+				  height = 500 - margin.top - margin.bottom;
+
+	// append the svg object to the body of the page
+	// appends a 'group' element to 'svg'
+	// moves the 'group' element to the top left margin
+	var offset_tmp = 60;
+	treeLayoutSVG = treeLayoutSVG.attr("width", width + 1.2*margin.right + margin.left+offset_tmp)
+			 .attr("height", height + margin.top + margin.bottom+offset_tmp);
+	treeLayoutdiv = treeLayoutdiv.attr("width", width + 1.2*margin.right + margin.left+offset_tmp)
+			 .attr("height", height + margin.top + margin.bottom+offset_tmp);
+	treeGroup = treeGroup
+		.attr("width", width + margin.right + margin.left)
+		.attr("height", height + margin.top + margin.bottom);
+		
+	
+	//Drag Function for treeLayout
+	var xPos_init = d3.event.x - 2;
+	var yPos_init = d3.event.y - 2;
+	var xOffset_tmp;
+	var yOffset_tmp;
+	var drag = d3.behavior.drag()
+		.on("dragstart", dragstarted)
+		.on("drag", dragged)
+		.on("dragend", dragended);
+	function dragstarted() {				
+	  xOffset_tmp = xPos_init-d3.event.sourceEvent.clientX;
+	  yOffset_tmp = yPos_init-d3.event.sourceEvent.clientY;
+	}
+	function dragged() {
+		 d3.select(this)
+			.style("left",(d3.event.x+xOffset_tmp) + "px")
+			.style("top",(d3.event.y+yOffset_tmp) + "px")
+	}
+	function dragended() {
+	  xPos_init = d3.event.sourceEvent.clientX+xOffset_tmp;
+	  yPos_init = d3.event.sourceEvent.clientY+yOffset_tmp;
+	}
+	treeLayoutdiv.call(drag);
+	
+	var frame = treeGroup.append("rect")
+		.attr("class","treeFrame")
+		.attr("stroke-width", 1)
+		.attr("stroke", "white")
+		.attr("fill-opacity", .8);
+	
+	var removeSymbol = treeGroup.append("g").attr("class", "remove"+d3.event.pageX+"_"+d3.event.pageX)
+		
+	
+	var r=8;
+	var cx=r+2;
+	var cy=r+2;
+	var circle = removeSymbol.append("circle")
+		.attr("cx", cx)
+		.attr("cy", cy)
+		.attr("r", r)
+		.style("stroke", "black")
+		.style("stroke-width", 1.5)
+		.style("fill", "red")
+		.style("fill-opacity", .6)
+	var minus = removeSymbol.append("line")
+		.attr("x1", cx+r/2)
+		.attr("y1", cy)
+		.attr("x2", cx-r/2)
+		.attr("y2", cy)
+		.style("stroke", "black")
+		.style("stroke-width", 1.5);
+		
+	removeSymbol
+		.on("mouseover", function(){circle.style("fill", "red").style("fill-opacity", .8);})
+		.on("mouseout", function(){circle.style("fill", "red").style("fill-opacity", .6)})
+		.on("mousedown",function()
+		{
+			circle.style("fill", "darkred").style("fill-opacity",1);
+		})
+		.on("mouseup",function()
+		{
+			treeLayoutdiv.remove();
+		})
+	
+	
+	// Define the root
+	root = treeData;
+	root.x0 = 0;
+	root.y0 = 0;
+	
+	// Append a group which holds all nodes and which the zoom Listener can act upon.
+	var svgGroup_xOff = root.name.length*10+50
+	var svgGroup = treeGroup.append("g")
+		.attr("class","tree_"+theName)
+		.attr("transform", "translate("+ svgGroup_xOff + "," + String(margin.top+10) + ")");
+	
+	collapse(root);
+	update(root,theAllLinks);
+	
+	var frametext = treeGroup.append("text")
+		.attr("class", "frametext")
+		.attr("x",30)
+		.attr("y",15)
+		.attr("text-anchor","start")
+		.attr("font-family","Arial")
+		.attr("font-size","18px")
+		.attr("font-weight","bold")
+		.text(theName)
+	
+	function update(source,allLinks) {
+		// Compute the new height, function counts total children of root node and sets tree height accordingly.
+		// This prevents the layout looking squashed when new nodes are made visible or looking sparse when nodes are removed
+		// This makes the layout more consistent.
+		var levelWidth = [1];
+		var levelLength = [1];
+		var childCount = function(level, n) {
+
+			if (n.children && n.children.length > 0) {
+				if (levelWidth.length <= level + 1) levelWidth.push(0);
+				
+				levelWidth[level + 1] += n.children.length;
+				n.children.forEach(function(d) {
+					childCount(level + 1, d);
+				});
+			}
+		};
+		childCount(0, root);
+
+		var newHeight = d3.max(levelWidth) * 60; // 20 pixels per line
+		var newWidth = viewerWidth+300;
+		
+		//BENNI: fill in viewerHeight instead of newHeight for other expanding/collapsing beaviour
+		tree = tree.size([newHeight, newWidth]);
+		
+		frame = frame.attr("width",newWidth)
+			.attr("height",newHeight+60)
+			.attr("fill","white");
+			
+		
+		
+		// Compute the new tree layout.
+		var nodes = tree.nodes(root),
+			links = tree.links(nodes);
+			
+			
+		//aigner: count all descendants of a node
+		function countDescendants(node, counter) 
+		{
+			if (node._children)
+			{
+				node._children.forEach(function(n)
+				{
+					counter = countDescendants(n, counter);
+				});
+			}
+			else if (node.children)
+			{
+				node.children.forEach(function(n)
+				{
+					counter = countDescendants(n, counter);
+				});
+			}
+			else
+			{
+				counter ++;
+			}
+			return counter;
+		}
+		
+		
+		var depths = [];
+		var labelLength = [];
+		nodes.forEach(function(d) 
+		{				
+			//aigner: If node is collapsed show number of ancestors
+			if (d._children)
+			{
+				d._childrenNum = countDescendants(d, 0);
+				d.text = d.name + " (" + d._childrenNum + ")";
+			}
+			else 
+			{
+				d.text = d.name
+			}
+			
+			//aigner: Find maximum labelLength for each level
+			if (!depths.includes(d.depth))
+			{
+				depths.push(d.depth);
+				labelLength.push(d.text.length);
+			}
+			else
+			{
+				if (d.depth!=0){labelLength[depths.indexOf(d.depth)] = Math.max(d.text.length, labelLength[depths.indexOf(d.depth)]);}
+			}
+		});
+		// Set widths between levels based on labelLength of each level.
+		var newWidth=0;	
+		var depth_tmp = 0;			
+		nodes.forEach(function(d) 
+		{
+			if (d.parent)
+			{
+				d.y = d.parent.y+(labelLength[depths.indexOf(d.depth)])*10+50;
+			}
+			else{d.y=0}
+			
+			
+			if (newWidth<d.y)
+			{newWidth=d.y;}
+			
+			// console.log("##############")
+			// console.log(d.name)
+			// console.log("x = " + d.x)
+			// console.log("y = " + d.y)
+			// console.log("depth = " + depths.indexOf(d.depth))
+			// console.log("##############")
+		});	
+		
+
+		// console.log(depths)		
+		// console.log(labelLength)		
+		
+		//aigner: Adjust height and width of the frame
+		treeLayoutdiv = treeLayoutdiv.attr("height", newHeight + margin.top + margin.bottom+offset_tmp)
+		treeLayoutdiv = treeLayoutdiv.attr("width", newWidth + margin.top + margin.bottom +300+maxLabelLength*25+offset_tmp)
+		treeLayoutSVG = treeLayoutSVG.attr("height", newHeight + margin.top + margin.bottom+offset_tmp)
+		treeLayoutSVG = treeLayoutSVG.attr("width", newWidth + margin.top + margin.bottom +300+maxLabelLength*25+offset_tmp)
+		frame = frame.attr("height", newHeight + margin.top + margin.bottom)
+		frame = frame.attr("width", newWidth + margin.top + margin.bottom+300+maxLabelLength*15)
+
+
+		// Update the nodes…
+		var treeNode = svgGroup.selectAll("g.treeNode")
+			.data(nodes, function(d) {
+				return d.id || (d.id = ++i);
+			});
+
+		var dblclick_timer = false;
+		// Enter any new nodes at the parent's previous position.
+		var nodeEnter = treeNode.enter().append('g')
+		  .attr('class', 'treeNode')
+		  .attr("transform", function(d) {
+			return "translate(" + source.y0 + "," + source.x0 + ")";
+		})
+		.on("click", function(d) {
+			// if double click timer is active, this click is the double click
+			if ( dblclick_timer )
+			{
+				clearTimeout(dblclick_timer)
+				dblclick_timer = false
+				// double click code code comes here
+				//console.log("DOUBLE CLICK")
+				dblclick(d);
+			}
+			// otherwise, what to do after single click (double click has timed out)
+			else dblclick_timer = setTimeout( function(){
+				dblclick_timer = false
+				// single click code code comes here
+				//console.log("SINGLE CLICK")
+				click(d);
+			}, 250)
+		})
+			
+		
+		nodeEnter.append("circle")
+			.attr('class', 'nodeCircle')
+			.attr("r", 0)
+			.style("fill", function(d) {
+				return d._children ? "lightsteelblue" : "#fff";
+			})
+			.style("stroke", function(d) {
+				if(d.pipeLineIn && !d.pipeLineOut){
+					//console.log(d);
+					return '#CC0000'}
+				else if(!d.pipeLineIn && d.pipeLineOut){
+					//console.log(d);
+					return '#99CC00'}
+			})
+			.attr("cx", function(d) {return xOffset});
+
+		nodeEnter.append("text")
+			.attr("x", function(d) 
+			{
+					return d.children || d._children ? -10+xOffset : 10+xOffset;
+			})
+			.attr("dy", ".35em")
+			.attr('class', 'nodeText')
+			.attr("text-anchor", function(d) {
+				return d.children || d._children ? "end" : "start";
+			})
+			.text(function(d) {
+				return d.text;
+			})
+			.style("fill-opacity", 0)
+			
+
+		// Update the text to reflect whether node has children or not.
+		treeNode.select('text')
+			.attr("x", function(d) {
+				return d.children || d._children ? -10+xOffset : 10+xOffset;
+			})
+			.attr("text-anchor", function(d) {
+				return d.children || d._children ? "end" : "start";
+			})
+			.text(function(d) {
+				return d.text;
+			});
+
+		// Change the circle fill depending on whether it has children and is collapsed
+		treeNode.select("circle.nodeCircle")
+			.attr("r", 4.5)
+			.style("fill", function(d) {
+				return d._children ? "lightsteelblue" : "#fff";
+			});					
+		
+		
+		function showVariableTable(aVariable)
+		{						
+			var varTableDiv = d3.select("body").append("div").attr("class","varTableDiv_"+theName+"_"+aVariable.name)
+				.style('left', (d3.event.pageX - 2) + 'px')
+				.style('top', (d3.event.pageY - 2) + 'px')
+				.style("position", "absolute")
+				.on("mousedown", function(d) {
+					d3.select(this).moveToFront();
+				})
+			var varTableGroup = varTableDiv.append("g").attr("class","varTableGroup")
+			
+			//Drag Function for node table
+			var xPos_init = d3.event.x - 2;
+			var yPos_init = d3.event.y - 2;
+			var xOffset_tmp;
+			var yOffset_tmp;
+			var drag = d3.behavior.drag()
+				.on("dragstart", dragstarted)
+				.on("drag", dragged)
+				.on("dragend", dragended);
+			function dragstarted() {				
+			  xOffset_tmp = xPos_init-d3.event.sourceEvent.clientX;
+			  yOffset_tmp = yPos_init-d3.event.sourceEvent.clientY;
+			}
+			function dragged() {
+				 d3.select(this)
+					.style("left",(d3.event.x+xOffset_tmp) + "px")
+					.style("top",(d3.event.y+yOffset_tmp) + "px")
+			}
+			function dragended() {
+			  xPos_init = d3.event.sourceEvent.clientX+xOffset_tmp;
+			  yPos_init = d3.event.sourceEvent.clientY+yOffset_tmp;
+			}
+			varTableDiv.call(drag);
+			
+			var headLine = "Node Information (" + theName + ")";
+			var tabRemoveSVG = varTableGroup.append("svg")
+				.attr("width",String(headLine.length*9.5+"pt"))
+				.attr("height",26)
+			tabRemoveSVG.append("rect")
+				.attr("width", "100%")
+				.attr("height", "100%")
+				.attr("fill", "white");
+			var tabRemoveSymbol = tabRemoveSVG.append("g");
+			tabRemoveSymbol = tabRemoveSymbol
+				.attr("class", "tabRemoveSymbol")
+				.attr("transform", "translate(26,0)")
+			var circle = tabRemoveSymbol.append("circle")
+				.classed("remCircle",true)
+			var minus = tabRemoveSymbol.append("line").classed("remMinus",true)
+			var cx = -20;
+			var cy = 12;
+			circle = circle
+				.attr("cx", cx+5)
+				.attr("cy", cy)
+				.attr("r", 10)
+			minus = minus
+				.attr("x1", cx)
+				.attr("y1", cy)
+				.attr("x2", cx+10)
+				.attr("y2", cy)
+				
+			
+			tabRemoveSVG.append("text").attr("class","tabRemoveText")
+				.attr("transform", "translate(26,20)")
+				.attr("fill", "black")
+				.style("font-family", "Arial")
+				.style("font-size", "16pt")
+				.style("font-weight", "bold")
+				.text(headLine);
+			
+			
+			tabRemoveSymbol
+				.on("mouseover", function(){
+					d3.select(this).style("cursor", "pointer")
+					circle.style("fill", "red").style("fill-opacity", .8);
+					})
+				.on("mouseout", function(){circle.style("fill", "red").style("fill-opacity", .6)})
+			tabRemoveSymbol.on("click", function(d)
+			{
+				varTableDiv.remove();
+			})
+			
+			var data = [];
+			// render the table(s)
+			data.push({ "name" : "Name", "value" : "\""+aVariable.name+"\"" })
+			
+			function getNodeXPath(strWrapper,aNode) 
+			{
+			  strWrapper.val = "/"+aNode.name+strWrapper.val;
+			  if (!aNode.parent) 
+			  {
+				return strWrapper;
+			  }
+			  else 
+			  {
+				
+				return getNodeXPath(strWrapper, aNode.parent);
+			  }
+			}
+			var xPath_tmp = getNodeXPath({ val : '' }, aVariable).val;
+			data.push({ "name" : "xPath", "value" : xPath_tmp })
+			if (aVariable.type){data.push({ "name" : "Type", "value" : aVariable.type })}
+			if (aVariable.level){data.push({ "name" : "Level", "value" : aVariable.level })}
+			if (aVariable.children || aVariable._children)
+			{
+				var childrenNum=0;
+				if (aVariable.children){childrenNum=childrenNum+aVariable.children.length}
+				if (aVariable._children){childrenNum=childrenNum+aVariable._children.length}
+				data.push({ "name" : "Number of children", "value" : childrenNum })
+			}
+			if (aVariable.dimension){data.push({ "name" : "Dimension", "value" : aVariable.dimension })}
+			else if(aVariable.dimension===null){data.push({ "name" : "Dimension", "value" : "undefined" })}
+			if (aVariable.value){data.push({ "name" : "Value(s)", "value" : aVariable.value })}
+			var table = varTableGroup.append('table');
+			tabulate(table,data,['name', 'value']); // 2 column table
+		}
+		
+		//Highlight function, that shows usage of a node in the XDSM
+		function highlight(data,aText)
+		{
+			aText = "/"+data.name+aText;
+			if (data.parent){highlight(data.parent,aText)}
+			else
+			{
+				allLinks[0].forEach(function(aLink)
+				{
+					
+					aLink.__data__.pipeData_in = aLink.__data__.source.pipeline_data[aLink.__data__.target.name];
+					aLink.__data__.pipeData_out = aLink.__data__.target.pipeline_data[aLink.__data__.source.name];
+					aLink.__data__.pipeDataName_in = "";
+					aLink.__data__.pipeDataName_out = "";
+					aLink.__data__.name = "";
+					if (aLink.__data__.pipeData_in)
+					{
+						for (var i=0; i<aLink.__data__.pipeData_in.length; i++)
+						{
+							if (i==0){aLink.__data__.pipeDataName_in += aLink.__data__.pipeData_in[i];}
+							else{aLink.__data__.pipeDataName_in += "," + aLink.__data__.pipeData_in[i];}
+							
+						}
+						aLink.__data__.name += aLink.__data__.pipeDataName_in
+					}
+					if (aLink.__data__.pipeData_out)
+					{
+						for (var i=0; i<aLink.__data__.pipeData_out.length; i++)
+						{
+							if (i==0){aLink.__data__.pipeDataName_out += aLink.__data__.pipeData_out[i];}
+							else{aLink.__data__.pipeDataName_out += "," + aLink.__data__.pipeData_out[i];}
+						}
+						aLink.__data__.name += aLink.__data__.pipeDataName_out
+					}
+				})
+								
+				//var allLinks_tmp = allLinks[0];
+				allLinks[0].forEach(function(p) {
+					var firstElement_tmp = p.__data__.name.split("/")[1]
+					var text_fromFirst = "/"+firstElement_tmp+aText.split(firstElement_tmp)[1]
+					if (include(p.__data__.name,text_fromFirst))
+					{
+						d3.select(p)
+							.style("stroke-opacity", 1.0)
+							.style("stroke-width", 4.0)
+					}
+					else
+					{
+						d3.select(p).style("stroke-opacity", 0);			
+					}
+				});
+			}
+		}
+		
+		//Function writeTreeToXML goes through tree nodes and puts the into an xml document
+		function writeTreeToXML(aNode,anXMLDoc,anXPath)
+		{
+			//Variable "children" 
+			//--> One children variable, no matter whether a node has "_children" (collapsed) or "children" (expanded)
+			var children;
+			if (aNode._children){children = aNode._children;}
+			else if (aNode.children){children = aNode.children;}
+			
+			//Get current xml element with its xPath
+			var element = anXMLDoc.evaluate(anXPath,anXMLDoc, null, XPathResult.FIRST_ORDERED_NODE_TYPE, null ).singleNodeValue;
+			if (element != null) {element.value = '...';}
+			
+			//If a node has children (collapsed or expanded), loop through them
+			if (children)
+			{
+				for (var i=0; i < children.length;i++)
+				{
+					//Name of the new XML element --> childName
+					var child = children[i];
+					var childName = child.name.split(/[\[\]]+/);//Split childName at "[]" which is the uID 
+					var cleanChildName = childName[0].split(/[\+\*\^\-\ \#]+/);//Split childName all special characters
+					var newNode = anXMLDoc.createElement(String(cleanChildName[0]));
+					
+					//The children are appended to the xPath --> newXPath
+					var newXPath = anXPath+"/"+cleanChildName[0];
+					
+					//If childName contains a uID, make the uID an attribute
+					if (childName[1])
+					{
+						if (parseInt(childName[1]))
+						{
+							var dummyID = childName[1];
+							newNode.setAttribute("dummyID", dummyID)
+							newXPath = newXPath+"[@dummyID='"+dummyID+"']";
+						}
+						else
+						{
+							var uID = childName[1];
+							newNode.setAttribute("uID", uID)
+							newXPath = newXPath+"[@uID='"+uID+"']";
+						}
+					}
+					if (cleanChildName.length>1) {newNode.setAttribute("elementName", childName[0])};
+					
+					//Append the newNode to the xml structure
+					element.appendChild(newNode);
+					
+					
+					
+					////aigner: Sorting of XML elements according to "uID"
+					// var items = element.children;
+					// var itemsArr = [];
+					// for (var j in items) {
+						// if (items[j].nodeType == 1) { // get rid of the whitespace text nodes
+							// itemsArr.push(items[j]);
+						// }
+					// }
+					// itemsArr.sort(function(a,b){
+						// if (a.getAttribute("uID") < b.getAttribute("uID"))
+							// return -1;
+						// if (a.getAttribute("uID") > b.getAttribute("uID"))
+							// return 1;
+						// return 0;
+						// });
+
+					// for (j = 0; j < itemsArr.length; ++j) {
+					  // element.appendChild(itemsArr[j]);
+					// }
+					
+					//call function writeTreeToXML recursively for all children
+					writeTreeToXML(child,anXMLDoc,newXPath)
+				}
+			}
+			else
+			{
+				if (aNode.value){element.innerHTML = String(aNode.value);}
+				else{element.innerHTML = " ";}
+			}
+			//return the xml document
+			return anXMLDoc;
+		}
+		
+		function removeAttributeInAllElements(aDocument,attribute)
+		{
+		  var matchingElements = [];
+		  var allElements = aDocument.getElementsByTagName('*');
+		  for (var i = 0, n = allElements.length; i < n; i++)
+		  {
+			if (allElements[i].getAttribute(attribute) !== null)
+			{
+				allElements[i].removeAttribute(attribute);
+			}
+		  }
+		  return matchingElements;
+		}
+		
+		function putAncestorsInXMLString(strWrapper, aNode)
+		{
+			//Name of the new XML element
+			var nodeName = aNode.name.split(/[\[\]]+/);//Split name at "[]" which is the uID 
+			var cleanNodeName = nodeName[0].split(/[\+\*\^\-\ \#]+/);//Split nodeName all special characters
+			//If nodeName contains a uID, make the uID an attribute
+			if (nodeName[1])
+			{
+				var uID = nodeName[1];
+				strWrapper.val = "<"+cleanNodeName[0]+" uID='"+ uID +"'>"+strWrapper.val+"</"+cleanNodeName[0]+">";;
+			}
+			else
+			{
+				strWrapper.val = "<"+cleanNodeName[0]+">"+strWrapper.val+"</"+cleanNodeName[0]+">";;
+			}
+			var aParent = aNode.parent;
+			if (aParent)
+			{
+				return putAncestorsInXMLString(strWrapper, aParent);
+			}
+			else 
+			{
+				return strWrapper;
+			}
+		}
+		
+		function putAncestorsInXPath(strWrapper, aNode)
+		{
+			//Name of the new XML element
+			var nodeName = aNode.name.split(/[\[\]]+/);//Split name at "[]" which is the uID 
+			var cleanNodeName = nodeName[0].split(/[\+\*\^\-\ \#]+/);//Split nodeName all special characters
+			//If nodeName contains a uID, make the uID an attribute
+			if (nodeName[1])
+			{
+				var uID = nodeName[1];
+				strWrapper.val = "/"+cleanNodeName[0]+"[@uID='"+uID+"']"+strWrapper.val;
+			}
+			else
+			{
+				strWrapper.val = "/"+cleanNodeName[0]+strWrapper.val;
+			}
+			var aParent = aNode.parent;
+			if (aParent)
+			{
+				return putAncestorsInXPath(strWrapper, aParent);
+			}
+			else 
+			{
+				return strWrapper;
+			}
+		}
+		
+		// Function to download data to a file
+		function download(filename, text) {
+			var element = document.createElement('a');
+			element.setAttribute('href', 'data:text/plain;charset=utf-8,' + encodeURIComponent(text));
+			element.setAttribute('download', filename);
+
+			element.style.display = 'none';
+			document.body.appendChild(element);
+
+			element.click();
+
+			document.body.removeChild(element);
+		}
+		
+		//menu --> functions for right click options
+		var nodeMenu = [
+		{
+			title: 'Show node information',
+			onMouseDown: function(elm, d, i) {
+				showVariableTable(d);
+			},
+			onMouseUp: function(elm, d, i) {},
+			onMouseOver: function(elm, d, i) {},
+			childrenItems: []
+		},
+		{
+			title: 'Show usage of node in diagram',
+			onMouseDown: function(elm, d, i) {
+				d3.selectAll(".treeFrame").attr("fill-opacity", .5);
+				d3.selectAll(".nodeText").style("fill-opacity", 0.5);					
+				var theText="";
+				highlight(d,theText);
+			},
+			onMouseUp: function(elm, d, i) {				
+				d3.selectAll(".link")
+					.style("stroke-opacity",.4)
+					.style("stroke-width", 2)
+				d3.selectAll(".treeFrame").attr("fill-opacity", .8);
+				d3.selectAll(".nodeText").style("fill-opacity", 1);					
+			},
+			onMouseOver: function(elm, d, i) {
+			},
+			childrenItems: []
+		},
+		{
+			title: 'Copy x-path to clipboard',
+			onMouseDown: function(elm, d, i) {
+				function copyToClipboard(text) 
+				{
+					window.prompt("Copy to clipboard: Ctrl+C, Enter", text);
+				}
+				function copyXPathToClipboard(data,aText)
+				{
+					aText = "/"+data.name+aText;
+					if (data.parent){copyXPathToClipboard(data.parent,aText)}
+					else{copyToClipboard(aText);}
+				}
+				var copyText="";
+				copyXPathToClipboard(d,copyText);
+				d3.select('.d3-context-menu').style('display', 'none');
+			},
+			onMouseUp: function(elm, d, i) {
+			},
+			onMouseOver: function(elm, d, i) {
+			},
+			childrenItems: []
+		},
+		{
+			title: 'Download full tree as XML-file',
+			onMouseDown: function(elm, d, i) {
+				//Begin xml structure with the first element
+				var xmlString = "<"+nodes[0].name+">"+"</"+nodes[0].name+">";
+				//Create a new xml document
+				var parser = new DOMParser();
+				var xmlDocument = parser.parseFromString(xmlString, "text/xml"); //important to use "text/xml"
+				//Get initial xPath of the tree and pass it to the function "writeTreeToXML"
+				var initialXPath = "/"+nodes[0].name;								
+				writeTreeToXML(nodes[0],xmlDocument,initialXPath);
+				//remove all attributes dummyID
+				removeAttributeInAllElements(xmlDocument,'dummyID');
+				//Make the xml document a string
+				var serializer = new XMLSerializer();
+				var xmlString = serializer.serializeToString(xmlDocument);
+				xmlString = vkbeautify.xml(xmlString);														
+				//Download a document with the xml-schema
+				download(theName+'_full.xml',xmlString);						
+			},
+			onMouseUp: function(elm, d, i) {
+			},
+			onMouseOver: function(elm, d, i) {
+			},
+			childrenItems: []
+		},
+		{
+			title: 'Download tree as XML-file from current node',
+			onMouseDown: function(elm, d, i) {
+				var xmlString = putAncestorsInXMLString({ val : '' }, d).val;
+				var initialXPath = putAncestorsInXPath({ val : '' }, d).val;												
+				//Create a new xml document
+				var parser = new DOMParser();
+				var xmlDocument = parser.parseFromString(xmlString, "text/xml"); //important to use "text/xml"
+				//Get initial xPath of the tree and pass it to the function "writeCurrentTreeToXML"
+				writeTreeToXML(d,xmlDocument,initialXPath);
+				//remove all attributes dummyID
+				removeAttributeInAllElements(xmlDocument,'dummyID');
+				//Make the xml document a string
+				var serializer = new XMLSerializer();
+				xmlString = serializer.serializeToString(xmlDocument);
+				xmlString = vkbeautify.xml(xmlString);														
+				//Download a document with the xml-schema
+				download(theName+"_"+d.name+'.xml',xmlString);						
+			},
+			onMouseUp: function(elm, d, i) {
+			},
+			onMouseOver: function(elm, d, i) {
+			},
+			childrenItems: []
+		}
+		]
+		
+		
+		nodeEnter = nodeEnter.on('contextmenu', d3.contextMenu(nodeMenu));
+					
+		// UPDATE		
+		// Transition nodes to their new position.
+		var nodeUpdate = treeNode.transition()
+			.duration(duration)
+			.attr("transform", function(d) {
+				return "translate(" + d.y + "," + d.x + ")";
+			});
+
+		// Fade the text in
+		nodeUpdate.select("text")
+			.style("fill-opacity", 1);
+		
+		//New object for invisible nodes
+		var exitNodes = [];
+		
+		// Remove any exiting nodes
+		var nodeExit = treeNode.exit().transition()
+		  .duration(duration)
+		  .attr("transform", function(d) {
+			  return "translate(" + source.y + "," + source.x + ")";
+		  })
+		  .remove();
+		
+		function translation(d) 
+		{
+			
+			var closestAncestor;
+			closestAncestor = findClosestAncestor(nodes,d);
+			exitNodes.push(d);
+			exitNodes[exitNodes.length-1].x = closestAncestor.x;
+			exitNodes[exitNodes.length-1].y = closestAncestor.y;
+			return "translate(" + closestAncestor.y + "," + closestAncestor.x + ")";
+		}
+		
+		function findClosestAncestor(allNodes, element) 
+		{
+			var level = 0;
+			var closestAncestor;
+			for (var i=0;i<allNodes.length;i++)
+			{
+				if (!allNodes[i].level){allNodes[i].level=0};
+				if (isDescendant(allNodes[i],element) && allNodes[i].level >= level)
+				{
+					level = allNodes[i].level;
+					closestAncestor = allNodes[i];
+				}
+			}
+			return closestAncestor;
+		}
+		
+		function isDescendant(parent, child) 
+		{
+			 var node = child.parent;
+			 while (node != null) 
+			 {
+				if (node == parent) 
+				{
+					return true;
+				}
+				node = node.parent;
+			 }
+			 return false;
+		}
+	
+
+		// Update the links…
+		var link = svgGroup.selectAll("path.treeLink")
+			.data(links, function(d) {
+				return d.target.id;
+			});
+
+		// Enter any new links at the parent's previous position.
+		link.enter().insert("path", "g")
+			.attr("class", "treeLink")
+			.attr("d", function(d) {
+				var o = {
+					x: source.x0,
+					y: source.y0
+				};
+				return diagonal({
+					source: o,
+					target: o
+				});
+			});
+
+		// Transition links to their new position.
+		link.transition()
+			.duration(duration)
+			.attr("d", diagonal);
+
+		// Transition exiting nodes to the parent's new position.
+		link.exit().transition()
+			.duration(duration)
+			.attr("d", function(d) {
+				var o = {
+					x: source.x,
+					y: source.y
+				};
+				return diagonal({
+					source: o,
+					target: o
+				});
+			})
+			.remove();
+		
+		// Stash the old positions for transition.
+		nodes.forEach(function(d) {						
+			d.x0 = d.x;
+			d.y0 = d.y;
+		});
+	}
+}
+
+},{"d3":1}]},{},[2]);
diff --git a/kadmos/external/D3_vispack/KADMOS_VisualizationPackage_170530/supportFiles/include/AGILE_Background.png b/kadmos/external/D3_vispack/KADMOS_VisualizationPackage_170530/supportFiles/include/AGILE_Background.png
new file mode 100644
index 0000000000000000000000000000000000000000..4381f3b3e83b33388fe7ab81c94d16d7f3765923
GIT binary patch
literal 21140
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

literal 0
HcmV?d00001

diff --git a/kadmos/external/D3_vispack/KADMOS_VisualizationPackage_170530/supportFiles/include/AGILE_Icon.png b/kadmos/external/D3_vispack/KADMOS_VisualizationPackage_170530/supportFiles/include/AGILE_Icon.png
new file mode 100644
index 0000000000000000000000000000000000000000..774dbf9c876d6d90d13764e55742a64e7839a49e
GIT binary patch
literal 24690
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
KTCs|K=>GsL;=2U^

literal 0
HcmV?d00001

diff --git a/kadmos/external/D3_vispack/KADMOS_VisualizationPackage_170530/supportFiles/include/KADMOS_VisualizationPack_Icon.png b/kadmos/external/D3_vispack/KADMOS_VisualizationPackage_170530/supportFiles/include/KADMOS_VisualizationPack_Icon.png
new file mode 100644
index 0000000000000000000000000000000000000000..ccdb4d4b1093ba56c9c7c98a3d0b53c8deb62d2e
GIT binary patch
literal 14199
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

literal 0
HcmV?d00001

diff --git a/kadmos/external/D3_vispack/KADMOS_VisualizationPackage_170530/supportFiles/include/KADMOS_VisualizationPack_Logo.png b/kadmos/external/D3_vispack/KADMOS_VisualizationPackage_170530/supportFiles/include/KADMOS_VisualizationPack_Logo.png
new file mode 100644
index 0000000000000000000000000000000000000000..bcdcf3bcf354009f9218a0672f78de8eb0ee7cb4
GIT binary patch
literal 87879
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
F{1;T8$1DH<

literal 0
HcmV?d00001

diff --git a/kadmos/external/D3_vispack/KADMOS_VisualizationPackage_170530/supportFiles/include/RWTH_Logo.png b/kadmos/external/D3_vispack/KADMOS_VisualizationPackage_170530/supportFiles/include/RWTH_Logo.png
new file mode 100644
index 0000000000000000000000000000000000000000..b285d62e0eb235a6f9878f4b2c06a729ea70310c
GIT binary patch
literal 52099
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%0DQ>PC&
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
SW6LP`XKG||sQ94k-~R`8^em|W

literal 0
HcmV?d00001

diff --git a/kadmos/external/D3_vispack/KADMOS_VisualizationPackage_170530/supportFiles/include/TUDelft_Logo.png b/kadmos/external/D3_vispack/KADMOS_VisualizationPackage_170530/supportFiles/include/TUDelft_Logo.png
new file mode 100644
index 0000000000000000000000000000000000000000..bbda3b1d0405be7505d74add6d306b0df8a50baf
GIT binary patch
literal 4545
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

literal 0
HcmV?d00001

diff --git a/kadmos/external/D3_vispack/KADMOS_VisualizationPackage_170530/supportFiles/include/acknowledgements.html b/kadmos/external/D3_vispack/KADMOS_VisualizationPackage_170530/supportFiles/include/acknowledgements.html
new file mode 100644
index 000000000..e806856da
--- /dev/null
+++ b/kadmos/external/D3_vispack/KADMOS_VisualizationPackage_170530/supportFiles/include/acknowledgements.html
@@ -0,0 +1,54 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+<meta charset="utf-8">
+<meta name="viewport" content="width=device-width, minimum-scale=1.0, maximum-scale=1.0, user-scalable=no">
+<meta name="format-detection" content="telephone=no">
+<meta name="apple-mobile-web-app-capable" content="yes">
+<meta name="apple-mobile-web-app-status-bar-style" content="default">
+<title>Acknowledgements</title>
+<style type="text/css" media="screen">
+body {
+color:#888;
+margin:20px 10px;
+font-family:Arial;
+font-size:12px;
+}
+a:link {color:#666;}
+a:visited {color:#666;}
+    
+</style>
+</head>
+<body style="overflow-x:hidden; overflow-y:auto">
+<div style="-webkit-overflow-scrolling: touch; -webkit-text-size-adjust: none">
+<div>
+Created by Benedikt Aigner and Imco van Gent for the
+<a href="http://www.agile-project.eu/">AGILE Project</a>
+ in 2016. This project has received funding from the European Union's Horizon 2020 research and innovation framework programme under grant agreement No 636202
+<br>
+<br>
+<br>
+The KADMOS Visualization Package was created using the following open source packages:
+<br>
+<br>
+<a href="https://d3js.org/">D3.js</a>
+ package &copy 2015 by Mike Bostock released under the 
+<a href="https://opensource.org/licenses/BSD-3-Clause">BSD license</a>
+<br>
+<br>
+<a href="https://github.com/OneraHub/XDSMjs">XDSM.js</a>
+package &copy 2016 by R&eacutemi Lafage released under the 
+<a href="http://www.apache.org/licenses/LICENSE-2.0">Apache License, Version 2.0</a>
+<br>
+<br>
+<a href="https://github.com/Neilos/bihisankey">BiHiSankey.js</a>
+package &copy 2015 by Neil Atkinson released under the 
+<a href="https://opensource.org/licenses/MIT">MIT License</a>
+<br>
+<br>
+<br>
+<font size="-2">Rev. 05/11/2017</font>
+</div>
+</div>
+</body>
+</html>
\ No newline at end of file
diff --git a/kadmos/external/D3_vispack/KADMOS_VisualizationPackage_170530/supportFiles/json/empty_file b/kadmos/external/D3_vispack/KADMOS_VisualizationPackage_170530/supportFiles/json/empty_file
new file mode 100644
index 000000000..dde26fae6
--- /dev/null
+++ b/kadmos/external/D3_vispack/KADMOS_VisualizationPackage_170530/supportFiles/json/empty_file
@@ -0,0 +1 @@
+file added to ensure presence of json folder on the repository
\ No newline at end of file
diff --git a/kadmos/external/D3_vispack/KADMOS_VisualizationPackage_170530/supportFiles/sankeyDiagram.html b/kadmos/external/D3_vispack/KADMOS_VisualizationPackage_170530/supportFiles/sankeyDiagram.html
new file mode 100644
index 000000000..bd30e9c7d
--- /dev/null
+++ b/kadmos/external/D3_vispack/KADMOS_VisualizationPackage_170530/supportFiles/sankeyDiagram.html
@@ -0,0 +1,230 @@
+<!doctype html>
+<html>
+<style>
+
+.node rect {
+  cursor: move;
+  shape-rendering: crispEdges;
+}
+
+.node text {
+  pointer-events: none;
+  text-shadow: 1px 1px 2px #fff;
+  font-size: 0.8em;
+  font-family: sans-serif;
+}
+
+#tooltip {
+  position: absolute;
+  pointer-events: none;
+  font-size: 0.7em;
+  font-family: sans-serif;
+  padding: 3px;
+  width: auto;
+  height: auto;
+  background-color: #F2F2F2;
+  -webkit-box-shadow: 0px 0px 5px rgba(0, 0, 0, 0.4);
+  -mox-box-shadow: 0px 0px 0px 5px rgba(0, 0, 0, 0.4);
+  box-shadow: 0px 0px 5px rbga(0, 0, 0, 0.4);
+  pointer-events: none;
+}
+
+.value {
+  white-space: pre-line;
+  margin: 0;
+}
+
+
+div.treeDiv {
+position: absolute;
+}
+
+div.contextDiv {
+position: absolute;
+}
+
+sub, sup {
+/* Specified in % so that the sup/sup is the right size relative to the surrounding text */
+font-size: 75%;
+/* Zero out the line-height so that it doesn't interfere with the positioning that follows */
+line-height: 0;
+/* Where the magic happens: makes all browsers position the sup/sup properly, relative to the surrounding text */
+position: relative;
+/* Note that if you're using Eric Meyer's reset.css, this is already set and you can remove this rule */
+vertical-align: baseline;
+}
+
+sup {
+/* Move the superscripted text up */
+top: -0.5em;
+}
+
+sub {
+/* Move the subscripted text down, but only half as far down as the superscript moved up */
+bottom: -0.5em;
+}
+
+/* Aigner: New styles for tree layout */
+.treeNode {
+cursor: pointer;
+}
+
+.overlay{
+  background-color:#FFF;
+}
+
+.treeNode circle {
+fill: #fff;
+stroke: #3399FF;
+stroke-width: 1.5px;
+}
+
+.treeNode text {
+font-size:16px; 
+font-family:Arial;
+}
+
+.treeLink {
+fill: none;
+stroke: #ccc;
+stroke-width: 1.5px;
+}
+
+.d3-context-menu {
+	position: absolute;
+	display: none;
+	background-color: #f2f2f2;
+	border-radius: 4px;
+	font-family: Arial;
+	font-size: 16pt;
+	width: 350px;
+	border: 1px solid #d4d4d4;
+	z-index:1200;
+}
+.d3-context-menu ul {
+	list-style-type: none;
+	margin: 4px 0px;
+	padding: 0px;
+	cursor: default;
+}
+.d3-context-menu ul li {
+	padding: 4px 16px;
+}
+.d3-context-menu ul li:hover {
+	background-color: #3399FF;
+}
+.d3-context-menu ul li > ul {
+    position: absolute; 
+    background-color: #f2f2f2; 
+    top: 0;
+	min-width: 350px;
+    left: 350px; 
+    z-index: -1; 
+} 
+
+.d3-context-menu ul li > ul li:hover 
+{ 
+    background-color: #3399FF;
+	color: #fefefe;
+}
+
+.ackn {
+fill: #666666;
+stroke: #666666;
+stroke-width: 2.0;
+}
+
+.acknGroup:hover .ackn{
+fill: #3399FF;
+stroke: #3399FF;
+}
+
+.newDiv {
+	position:relative;
+	top: -100px;
+	left: 220px;
+	background-color: none;
+}
+.newDiv a {
+    text-decoration: none;
+    color: white;
+    font-family: Arial;
+    font-size: 20pt;
+    padding-top: 12px;
+    padding-right: 12px;
+    padding-bottom: 12px;
+    padding-left: 6px;
+    display:inline-block;
+}
+.newDiv ul {
+  display:  inline-block;;
+  margin: 0;
+  padding: 0;
+  background-color: #666666;
+}
+.newDiv ul li {display: inline-block;}
+.newDiv ul li:hover {background: #888;}
+.newDiv ul li:hover ul {display: block;}
+.newDiv ul li ul {
+  position: absolute;
+  min-width: 200px;
+  display: none;
+}
+.newDiv ul li ul li { 
+  background: #555; 
+  display: block;
+}
+.newDiv ul li ul li a {
+	display:block !important
+} 
+.newDiv ul li ul li:hover {background: #3399FF;}
+
+table {
+	width: 800px;
+	table-layout:fixed;
+}
+
+table, th, td {
+	font-family: Arial;
+    font-size: 16pt;
+	background-color: white;
+    border: 2pt solid darkgrey;
+    border-collapse: collapse;
+	text-align: left;
+	word-wrap:break-word;
+}
+}
+th, td {
+    padding-top: 6px;
+    padding-right: 20px;
+    padding-bottom: 6px;
+    padding-left: 20px;
+	min-width: 100px;
+	max-width: 400px;
+}
+
+.remCircle {
+	stroke: black;
+	stroke-width: 2;
+	fill: red;
+	fill-opacity: .6
+}
+.remMinus {
+	stroke: black;
+	stroke-width: 2;
+}
+
+.acknText {
+font-family: Arial;
+font-size: 12pt;
+fill: #666666;
+}
+</style>
+    <head>
+		<meta charset="utf-8">
+		<title>KADMOS Sankey Diagram</title>
+    </head>
+    <body>
+		<script src="sankeyDiagram.js"></script>
+    </body>
+</html>
\ No newline at end of file
diff --git a/kadmos/external/D3_vispack/KADMOS_VisualizationPackage_170530/supportFiles/sankeyDiagram.js b/kadmos/external/D3_vispack/KADMOS_VisualizationPackage_170530/supportFiles/sankeyDiagram.js
new file mode 100644
index 000000000..624a910bc
--- /dev/null
+++ b/kadmos/external/D3_vispack/KADMOS_VisualizationPackage_170530/supportFiles/sankeyDiagram.js
@@ -0,0 +1,3528 @@
+(function() {
+/*! jQuery v3.2.0 | (c) JS Foundation and other contributors | jquery.org/license */
+!function(a,b){"use strict";"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){"use strict";var c=[],d=a.document,e=Object.getPrototypeOf,f=c.slice,g=c.concat,h=c.push,i=c.indexOf,j={},k=j.toString,l=j.hasOwnProperty,m=l.toString,n=m.call(Object),o={};function p(a,b){b=b||d;var c=b.createElement("script");c.text=a,b.head.appendChild(c).parentNode.removeChild(c)}var q="3.2.0",r=function(a,b){return new r.fn.init(a,b)},s=/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,t=/^-ms-/,u=/-([a-z])/g,v=function(a,b){return b.toUpperCase()};r.fn=r.prototype={jquery:q,constructor:r,length:0,toArray:function(){return f.call(this)},get:function(a){return null==a?f.call(this):a<0?this[a+this.length]:this[a]},pushStack:function(a){var b=r.merge(this.constructor(),a);return b.prevObject=this,b},each:function(a){return r.each(this,a)},map:function(a){return this.pushStack(r.map(this,function(b,c){return a.call(b,c,b)}))},slice:function(){return this.pushStack(f.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:h,sort:c.sort,splice:c.splice},r.extend=r.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||r.isFunction(g)||(g={}),h===i&&(g=this,h--);h<i;h++)if(null!=(a=arguments[h]))for(b in a)c=g[b],d=a[b],g!==d&&(j&&d&&(r.isPlainObject(d)||(e=Array.isArray(d)))?(e?(e=!1,f=c&&Array.isArray(c)?c:[]):f=c&&r.isPlainObject(c)?c:{},g[b]=r.extend(j,f,d)):void 0!==d&&(g[b]=d));return g},r.extend({expando:"jQuery"+(q+Math.random()).replace(/\D/g,""),isReady:!0,error:function(a){throw new Error(a)},noop:function(){},isFunction:function(a){return"function"===r.type(a)},isWindow:function(a){return null!=a&&a===a.window},isNumeric:function(a){var b=r.type(a);return("number"===b||"string"===b)&&!isNaN(a-parseFloat(a))},isPlainObject:function(a){var b,c;return!(!a||"[object Object]"!==k.call(a))&&(!(b=e(a))||(c=l.call(b,"constructor")&&b.constructor,"function"==typeof c&&m.call(c)===n))},isEmptyObject:function(a){var b;for(b in a)return!1;return!0},type:function(a){return null==a?a+"":"object"==typeof a||"function"==typeof a?j[k.call(a)]||"object":typeof a},globalEval:function(a){p(a)},camelCase:function(a){return a.replace(t,"ms-").replace(u,v)},each:function(a,b){var c,d=0;if(w(a)){for(c=a.length;d<c;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(s,"")},makeArray:function(a,b){var c=b||[];return null!=a&&(w(Object(a))?r.merge(c,"string"==typeof a?[a]:a):h.call(c,a)),c},inArray:function(a,b,c){return null==b?-1:i.call(b,a,c)},merge:function(a,b){for(var c=+b.length,d=0,e=a.length;d<c;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),d!==h&&e.push(a[f]);return e},map:function(a,b,c){var d,e,f=0,h=[];if(w(a))for(d=a.length;f<d;f++)e=b(a[f],f,c),null!=e&&h.push(e);else for(f in a)e=b(a[f],f,c),null!=e&&h.push(e);return g.apply([],h)},guid:1,proxy:function(a,b){var c,d,e;if("string"==typeof b&&(c=a[b],b=a,a=c),r.isFunction(a))return d=f.call(arguments,2),e=function(){return a.apply(b||this,d.concat(f.call(arguments)))},e.guid=a.guid=a.guid||r.guid++,e},now:Date.now,support:o}),"function"==typeof Symbol&&(r.fn[Symbol.iterator]=c[Symbol.iterator]),r.each("Boolean Number String Function Array Date RegExp Object Error Symbol".split(" "),function(a,b){j["[object "+b+"]"]=b.toLowerCase()});function w(a){var b=!!a&&"length"in a&&a.length,c=r.type(a);return"function"!==c&&!r.isWindow(a)&&("array"===c||0===b||"number"==typeof b&&b>0&&b-1 in a)}var x=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=ha(),z=ha(),A=ha(),B=function(a,b){return a===b&&(l=!0),0},C={}.hasOwnProperty,D=[],E=D.pop,F=D.push,G=D.push,H=D.slice,I=function(a,b){for(var c=0,d=a.length;c<d;c++)if(a[c]===b)return c;return-1},J="checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped",K="[\\x20\\t\\r\\n\\f]",L="(?:\\\\.|[\\w-]|[^\0-\\xa0])+",M="\\["+K+"*("+L+")(?:"+K+"*([*^$|!~]?=)"+K+"*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|("+L+"))|)"+K+"*\\]",N=":("+L+")(?:\\((('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|((?:\\\\.|[^\\\\()[\\]]|"+M+")*)|.*)\\)|)",O=new RegExp(K+"+","g"),P=new RegExp("^"+K+"+|((?:^|[^\\\\])(?:\\\\.)*)"+K+"+$","g"),Q=new RegExp("^"+K+"*,"+K+"*"),R=new RegExp("^"+K+"*([>+~]|"+K+")"+K+"*"),S=new RegExp("="+K+"*([^\\]'\"]*?)"+K+"*\\]","g"),T=new RegExp(N),U=new RegExp("^"+L+"$"),V={ID:new RegExp("^#("+L+")"),CLASS:new RegExp("^\\.("+L+")"),TAG:new RegExp("^("+L+"|[*])"),ATTR:new RegExp("^"+M),PSEUDO:new RegExp("^"+N),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+K+"*(even|odd|(([+-]|)(\\d*)n|)"+K+"*(?:([+-]|)"+K+"*(\\d+)|))"+K+"*\\)|)","i"),bool:new RegExp("^(?:"+J+")$","i"),needsContext:new RegExp("^"+K+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+K+"*((?:-\\d)?\\d*)"+K+"*\\)|)(?=[^-]|$)","i")},W=/^(?:input|select|textarea|button)$/i,X=/^h\d$/i,Y=/^[^{]+\{\s*\[native \w/,Z=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,$=/[+~]/,_=new RegExp("\\\\([\\da-f]{1,6}"+K+"?|("+K+")|.)","ig"),aa=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)},ba=/([\0-\x1f\x7f]|^-?\d)|^-$|[^\0-\x1f\x7f-\uFFFF\w-]/g,ca=function(a,b){return b?"\0"===a?"\ufffd":a.slice(0,-1)+"\\"+a.charCodeAt(a.length-1).toString(16)+" ":"\\"+a},da=function(){m()},ea=ta(function(a){return a.disabled===!0&&("form"in a||"label"in a)},{dir:"parentNode",next:"legend"});try{G.apply(D=H.call(v.childNodes),v.childNodes),D[v.childNodes.length].nodeType}catch(fa){G={apply:D.length?function(a,b){F.apply(a,H.call(b))}:function(a,b){var c=a.length,d=0;while(a[c++]=b[d++]);a.length=c-1}}}function ga(a,b,d,e){var f,h,j,k,l,o,r,s=b&&b.ownerDocument,w=b?b.nodeType:9;if(d=d||[],"string"!=typeof a||!a||1!==w&&9!==w&&11!==w)return d;if(!e&&((b?b.ownerDocument||b:v)!==n&&m(b),b=b||n,p)){if(11!==w&&(l=Z.exec(a)))if(f=l[1]){if(9===w){if(!(j=b.getElementById(f)))return d;if(j.id===f)return d.push(j),d}else if(s&&(j=s.getElementById(f))&&t(b,j)&&j.id===f)return d.push(j),d}else{if(l[2])return G.apply(d,b.getElementsByTagName(a)),d;if((f=l[3])&&c.getElementsByClassName&&b.getElementsByClassName)return G.apply(d,b.getElementsByClassName(f)),d}if(c.qsa&&!A[a+" "]&&(!q||!q.test(a))){if(1!==w)s=b,r=a;else if("object"!==b.nodeName.toLowerCase()){(k=b.getAttribute("id"))?k=k.replace(ba,ca):b.setAttribute("id",k=u),o=g(a),h=o.length;while(h--)o[h]="#"+k+" "+sa(o[h]);r=o.join(","),s=$.test(a)&&qa(b.parentNode)||b}if(r)try{return G.apply(d,s.querySelectorAll(r)),d}catch(x){}finally{k===u&&b.removeAttribute("id")}}}return i(a.replace(P,"$1"),b,d,e)}function ha(){var a=[];function b(c,e){return a.push(c+" ")>d.cacheLength&&delete b[a.shift()],b[c+" "]=e}return b}function ia(a){return a[u]=!0,a}function ja(a){var b=n.createElement("fieldset");try{return!!a(b)}catch(c){return!1}finally{b.parentNode&&b.parentNode.removeChild(b),b=null}}function ka(a,b){var c=a.split("|"),e=c.length;while(e--)d.attrHandle[c[e]]=b}function la(a,b){var c=b&&a,d=c&&1===a.nodeType&&1===b.nodeType&&a.sourceIndex-b.sourceIndex;if(d)return d;if(c)while(c=c.nextSibling)if(c===b)return-1;return a?1:-1}function ma(a){return function(b){var c=b.nodeName.toLowerCase();return"input"===c&&b.type===a}}function na(a){return function(b){var c=b.nodeName.toLowerCase();return("input"===c||"button"===c)&&b.type===a}}function oa(a){return function(b){return"form"in b?b.parentNode&&b.disabled===!1?"label"in b?"label"in b.parentNode?b.parentNode.disabled===a:b.disabled===a:b.isDisabled===a||b.isDisabled!==!a&&ea(b)===a:b.disabled===a:"label"in b&&b.disabled===a}}function pa(a){return ia(function(b){return b=+b,ia(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 qa(a){return a&&"undefined"!=typeof a.getElementsByTagName&&a}c=ga.support={},f=ga.isXML=function(a){var b=a&&(a.ownerDocument||a).documentElement;return!!b&&"HTML"!==b.nodeName},m=ga.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),v!==n&&(e=n.defaultView)&&e.top!==e&&(e.addEventListener?e.addEventListener("unload",da,!1):e.attachEvent&&e.attachEvent("onunload",da)),c.attributes=ja(function(a){return a.className="i",!a.getAttribute("className")}),c.getElementsByTagName=ja(function(a){return a.appendChild(n.createComment("")),!a.getElementsByTagName("*").length}),c.getElementsByClassName=Y.test(n.getElementsByClassName),c.getById=ja(function(a){return o.appendChild(a).id=u,!n.getElementsByName||!n.getElementsByName(u).length}),c.getById?(d.filter.ID=function(a){var b=a.replace(_,aa);return function(a){return a.getAttribute("id")===b}},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(_,aa);return function(a){var c="undefined"!=typeof a.getAttributeNode&&a.getAttributeNode("id");return c&&c.value===b}},d.find.ID=function(a,b){if("undefined"!=typeof b.getElementById&&p){var c,d,e,f=b.getElementById(a);if(f){if(c=f.getAttributeNode("id"),c&&c.value===a)return[f];e=b.getElementsByName(a),d=0;while(f=e[d++])if(c=f.getAttributeNode("id"),c&&c.value===a)return[f]}return[]}}),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){if("undefined"!=typeof b.getElementsByClassName&&p)return b.getElementsByClassName(a)},r=[],q=[],(c.qsa=Y.test(n.querySelectorAll))&&(ja(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("[*^$]="+K+"*(?:''|\"\")"),a.querySelectorAll("[selected]").length||q.push("\\["+K+"*(?:value|"+J+")"),a.querySelectorAll("[id~="+u+"-]").length||q.push("~="),a.querySelectorAll(":checked").length||q.push(":checked"),a.querySelectorAll("a#"+u+"+*").length||q.push(".#.+[+~]")}),ja(function(a){a.innerHTML="<a href='' disabled='disabled'></a><select disabled='disabled'><option/></select>";var b=n.createElement("input");b.setAttribute("type","hidden"),a.appendChild(b).setAttribute("name","D"),a.querySelectorAll("[name=d]").length&&q.push("name"+K+"*[*^$|!~]?="),2!==a.querySelectorAll(":enabled").length&&q.push(":enabled",":disabled"),o.appendChild(a).disabled=!0,2!==a.querySelectorAll(":disabled").length&&q.push(":enabled",":disabled"),a.querySelectorAll("*,:x"),q.push(",.*:")})),(c.matchesSelector=Y.test(s=o.matches||o.webkitMatchesSelector||o.mozMatchesSelector||o.oMatchesSelector||o.msMatchesSelector))&&ja(function(a){c.disconnectedMatch=s.call(a,"*"),s.call(a,"[s!='']:x"),r.push("!=",N)}),q=q.length&&new RegExp(q.join("|")),r=r.length&&new RegExp(r.join("|")),b=Y.test(o.compareDocumentPosition),t=b||Y.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?I(k,a)-I(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?I(k,a)-I(k,b):0;if(e===f)return la(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?la(g[d],h[d]):g[d]===v?-1:h[d]===v?1:0},n):n},ga.matches=function(a,b){return ga(a,null,null,b)},ga.matchesSelector=function(a,b){if((a.ownerDocument||a)!==n&&m(a),b=b.replace(S,"='$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 ga(b,n,null,[a]).length>0},ga.contains=function(a,b){return(a.ownerDocument||a)!==n&&m(a),t(a,b)},ga.attr=function(a,b){(a.ownerDocument||a)!==n&&m(a);var e=d.attrHandle[b.toLowerCase()],f=e&&C.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},ga.escape=function(a){return(a+"").replace(ba,ca)},ga.error=function(a){throw new Error("Syntax error, unrecognized expression: "+a)},ga.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=ga.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=ga.selectors={cacheLength:50,createPseudo:ia,match:V,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(_,aa),a[3]=(a[3]||a[4]||a[5]||"").replace(_,aa),"~="===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]||ga.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]&&ga.error(a[0]),a},PSEUDO:function(a){var b,c=!a[6]&&a[2];return V.CHILD.test(a[0])?null:(a[3]?a[2]=a[4]||a[5]||"":c&&T.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(_,aa).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("(^|"+K+")"+a+"("+K+"|$)"))&&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=ga.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(O," ")+" ").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),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()]||ga.error("unsupported pseudo: "+a);return e[u]?e(b):e.length>1?(c=[a,a,"",b],d.setFilters.hasOwnProperty(a.toLowerCase())?ia(function(a,c){var d,f=e(a,b),g=f.length;while(g--)d=I(a,f[g]),a[d]=!(c[d]=f[g])}):function(a){return e(a,0,c)}):e}},pseudos:{not:ia(function(a){var b=[],c=[],d=h(a.replace(P,"$1"));return d[u]?ia(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:ia(function(a){return function(b){return ga(a,b).length>0}}),contains:ia(function(a){return a=a.replace(_,aa),function(b){return(b.textContent||b.innerText||e(b)).indexOf(a)>-1}}),lang:ia(function(a){return U.test(a||"")||ga.error("unsupported lang: "+a),a=a.replace(_,aa).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:oa(!1),disabled:oa(!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 X.test(a.nodeName)},input:function(a){return W.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:pa(function(){return[0]}),last:pa(function(a,b){return[b-1]}),eq:pa(function(a,b,c){return[c<0?c+b:c]}),even:pa(function(a,b){for(var c=0;c<b;c+=2)a.push(c);return a}),odd:pa(function(a,b){for(var c=1;c<b;c+=2)a.push(c);return a}),lt:pa(function(a,b,c){for(var d=c<0?c+b:c;--d>=0;)a.push(d);return a}),gt:pa(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]=ma(b);for(b in{submit:!0,reset:!0})d.pseudos[b]=na(b);function ra(){}ra.prototype=d.filters=d.pseudos,d.setFilters=new ra,g=ga.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=Q.exec(h))||(e&&(h=h.slice(e[0].length)||h),i.push(f=[])),c=!1,(e=R.exec(h))&&(c=e.shift(),f.push({value:c,type:e[0].replace(P," ")}),h=h.slice(c.length));for(g in d.filter)!(e=V[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?ga.error(a):z(a,i).slice(0)};function sa(a){for(var b=0,c=a.length,d="";b<c;b++)d+=a[b].value;return d}function ta(a,b,c){var d=b.dir,e=b.next,f=e||d,g=c&&"parentNode"===f,h=x++;return b.first?function(b,c,e){while(b=b[d])if(1===b.nodeType||g)return a(b,c,e);return!1}:function(b,c,i){var j,k,l,m=[w,h];if(i){while(b=b[d])if((1===b.nodeType||g)&&a(b,c,i))return!0}else while(b=b[d])if(1===b.nodeType||g)if(l=b[u]||(b[u]={}),k=l[b.uniqueID]||(l[b.uniqueID]={}),e&&e===b.nodeName.toLowerCase())b=b[d]||b;else{if((j=k[f])&&j[0]===w&&j[1]===h)return m[2]=j[2];if(k[f]=m,m[2]=a(b,c,i))return!0}return!1}}function ua(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 va(a,b,c){for(var d=0,e=b.length;d<e;d++)ga(a,b[d],c);return c}function wa(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 xa(a,b,c,d,e,f){return d&&!d[u]&&(d=xa(d)),e&&!e[u]&&(e=xa(e,f)),ia(function(f,g,h,i){var j,k,l,m=[],n=[],o=g.length,p=f||va(b||"*",h.nodeType?[h]:h,[]),q=!a||!f&&b?p:wa(p,m,a,h,i),r=c?e||(f?a:o||d)?[]:g:q;if(c&&c(q,r,h,i),d){j=wa(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?I(f,l):m[k])>-1&&(f[j]=!(g[j]=l))}}else r=wa(r===g?r.splice(o,r.length):r),e?e(null,g,r,i):G.apply(g,r)})}function ya(a){for(var b,c,e,f=a.length,g=d.relative[a[0].type],h=g||d.relative[" "],i=g?1:0,k=ta(function(a){return a===b},h,!0),l=ta(function(a){return I(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=[ta(ua(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 xa(i>1&&ua(m),i>1&&sa(a.slice(0,i-1).concat({value:" "===a[i-2].type?"*":""})).replace(P,"$1"),c,i<e&&ya(a.slice(i,e)),e<f&&ya(a=a.slice(e)),e<f&&sa(a))}m.push(c)}return ua(m)}function za(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]=E.call(i));u=wa(u)}G.apply(i,u),k&&!f&&u.length>0&&r+b.length>1&&ga.uniqueSort(i)}return k&&(w=y,j=v),t};return c?ia(f):f}return h=ga.compile=function(a,b){var c,d=[],e=[],f=A[a+" "];if(!f){b||(b=g(a)),c=b.length;while(c--)f=ya(b[c]),f[u]?d.push(f):e.push(f);f=A(a,za(e,d)),f.selector=a}return f},i=ga.select=function(a,b,c,e){var f,i,j,k,l,m="function"==typeof a&&a,n=!e&&g(a=m.selector||a);if(c=c||[],1===n.length){if(i=n[0]=n[0].slice(0),i.length>2&&"ID"===(j=i[0]).type&&9===b.nodeType&&p&&d.relative[i[1].type]){if(b=(d.find.ID(j.matches[0].replace(_,aa),b)||[])[0],!b)return c;m&&(b=b.parentNode),a=a.slice(i.shift().value.length)}f=V.needsContext.test(a)?0:i.length;while(f--){if(j=i[f],d.relative[k=j.type])break;if((l=d.find[k])&&(e=l(j.matches[0].replace(_,aa),$.test(i[0].type)&&qa(b.parentNode)||b))){if(i.splice(f,1),a=e.length&&sa(i),!a)return G.apply(c,e),c;break}}}return(m||h(a,n))(e,b,!p,c,!b||$.test(a)&&qa(b.parentNode)||b),c},c.sortStable=u.split("").sort(B).join("")===u,c.detectDuplicates=!!l,m(),c.sortDetached=ja(function(a){return 1&a.compareDocumentPosition(n.createElement("fieldset"))}),ja(function(a){return a.innerHTML="<a href='#'></a>","#"===a.firstChild.getAttribute("href")})||ka("type|href|height|width",function(a,b,c){if(!c)return a.getAttribute(b,"type"===b.toLowerCase()?1:2)}),c.attributes&&ja(function(a){return a.innerHTML="<input/>",a.firstChild.setAttribute("value",""),""===a.firstChild.getAttribute("value")})||ka("value",function(a,b,c){if(!c&&"input"===a.nodeName.toLowerCase())return a.defaultValue}),ja(function(a){return null==a.getAttribute("disabled")})||ka(J,function(a,b,c){var d;if(!c)return a[b]===!0?b.toLowerCase():(d=a.getAttributeNode(b))&&d.specified?d.value:null}),ga}(a);r.find=x,r.expr=x.selectors,r.expr[":"]=r.expr.pseudos,r.uniqueSort=r.unique=x.uniqueSort,r.text=x.getText,r.isXMLDoc=x.isXML,r.contains=x.contains,r.escapeSelector=x.escape;var y=function(a,b,c){var d=[],e=void 0!==c;while((a=a[b])&&9!==a.nodeType)if(1===a.nodeType){if(e&&r(a).is(c))break;d.push(a)}return d},z=function(a,b){for(var c=[];a;a=a.nextSibling)1===a.nodeType&&a!==b&&c.push(a);return c},A=r.expr.match.needsContext;function B(a,b){return a.nodeName&&a.nodeName.toLowerCase()===b.toLowerCase()}var C=/^<([a-z][^\/\0>:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i,D=/^.[^:#\[\.,]*$/;function E(a,b,c){return r.isFunction(b)?r.grep(a,function(a,d){return!!b.call(a,d,a)!==c}):b.nodeType?r.grep(a,function(a){return a===b!==c}):"string"!=typeof b?r.grep(a,function(a){return i.call(b,a)>-1!==c}):D.test(b)?r.filter(b,a,c):(b=r.filter(b,a),r.grep(a,function(a){return i.call(b,a)>-1!==c&&1===a.nodeType}))}r.filter=function(a,b,c){var d=b[0];return c&&(a=":not("+a+")"),1===b.length&&1===d.nodeType?r.find.matchesSelector(d,a)?[d]:[]:r.find.matches(a,r.grep(b,function(a){return 1===a.nodeType}))},r.fn.extend({find:function(a){var b,c,d=this.length,e=this;if("string"!=typeof a)return this.pushStack(r(a).filter(function(){for(b=0;b<d;b++)if(r.contains(e[b],this))return!0}));for(c=this.pushStack([]),b=0;b<d;b++)r.find(a,e[b],c);return d>1?r.uniqueSort(c):c},filter:function(a){return this.pushStack(E(this,a||[],!1))},not:function(a){return this.pushStack(E(this,a||[],!0))},is:function(a){return!!E(this,"string"==typeof a&&A.test(a)?r(a):a||[],!1).length}});var F,G=/^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]+))$/,H=r.fn.init=function(a,b,c){var e,f;if(!a)return this;if(c=c||F,"string"==typeof a){if(e="<"===a[0]&&">"===a[a.length-1]&&a.length>=3?[null,a,null]:G.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 r?b[0]:b,r.merge(this,r.parseHTML(e[1],b&&b.nodeType?b.ownerDocument||b:d,!0)),C.test(e[1])&&r.isPlainObject(b))for(e in b)r.isFunction(this[e])?this[e](b[e]):this.attr(e,b[e]);return this}return f=d.getElementById(e[2]),f&&(this[0]=f,this.length=1),this}return a.nodeType?(this[0]=a,this.length=1,this):r.isFunction(a)?void 0!==c.ready?c.ready(a):a(r):r.makeArray(a,this)};H.prototype=r.fn,F=r(d);var I=/^(?:parents|prev(?:Until|All))/,J={children:!0,contents:!0,next:!0,prev:!0};r.fn.extend({has:function(a){var b=r(a,this),c=b.length;return this.filter(function(){for(var a=0;a<c;a++)if(r.contains(this,b[a]))return!0})},closest:function(a,b){var c,d=0,e=this.length,f=[],g="string"!=typeof a&&r(a);if(!A.test(a))for(;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&&r.find.matchesSelector(c,a))){f.push(c);break}return this.pushStack(f.length>1?r.uniqueSort(f):f)},index:function(a){return a?"string"==typeof a?i.call(r(a),this[0]):i.call(this,a.jquery?a[0]:a):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(a,b){return this.pushStack(r.uniqueSort(r.merge(this.get(),r(a,b))))},addBack:function(a){return this.add(null==a?this.prevObject:this.prevObject.filter(a))}});function K(a,b){while((a=a[b])&&1!==a.nodeType);return a}r.each({parent:function(a){var b=a.parentNode;return b&&11!==b.nodeType?b:null},parents:function(a){return y(a,"parentNode")},parentsUntil:function(a,b,c){return y(a,"parentNode",c)},next:function(a){return K(a,"nextSibling")},prev:function(a){return K(a,"previousSibling")},nextAll:function(a){return y(a,"nextSibling")},prevAll:function(a){return y(a,"previousSibling")},nextUntil:function(a,b,c){return y(a,"nextSibling",c)},prevUntil:function(a,b,c){return y(a,"previousSibling",c)},siblings:function(a){return z((a.parentNode||{}).firstChild,a)},children:function(a){return z(a.firstChild)},contents:function(a){return B(a,"iframe")?a.contentDocument:(B(a,"template")&&(a=a.content||a),r.merge([],a.childNodes))}},function(a,b){r.fn[a]=function(c,d){var e=r.map(this,b,c);return"Until"!==a.slice(-5)&&(d=c),d&&"string"==typeof d&&(e=r.filter(d,e)),this.length>1&&(J[a]||r.uniqueSort(e),I.test(a)&&e.reverse()),this.pushStack(e)}});var L=/[^\x20\t\r\n\f]+/g;function M(a){var b={};return r.each(a.match(L)||[],function(a,c){b[c]=!0}),b}r.Callbacks=function(a){a="string"==typeof a?M(a):r.extend({},a);var b,c,d,e,f=[],g=[],h=-1,i=function(){for(e=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){r.each(b,function(b,c){r.isFunction(c)?a.unique&&j.has(c)||f.push(c):c&&c.length&&"string"!==r.type(c)&&d(c)})}(arguments),c&&!b&&i()),this},remove:function(){return r.each(arguments,function(a,b){var c;while((c=r.inArray(b,f,c))>-1)f.splice(c,1),c<=h&&h--}),this},has:function(a){return a?r.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=g=[],c||b||(f=c=""),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};function N(a){return a}function O(a){throw a}function P(a,b,c,d){var e;try{a&&r.isFunction(e=a.promise)?e.call(a).done(b).fail(c):a&&r.isFunction(e=a.then)?e.call(a,b,c):b.apply(void 0,[a].slice(d))}catch(a){c.apply(void 0,[a])}}r.extend({Deferred:function(b){var c=[["notify","progress",r.Callbacks("memory"),r.Callbacks("memory"),2],["resolve","done",r.Callbacks("once memory"),r.Callbacks("once memory"),0,"resolved"],["reject","fail",r.Callbacks("once memory"),r.Callbacks("once memory"),1,"rejected"]],d="pending",e={state:function(){return d},always:function(){return f.done(arguments).fail(arguments),this},"catch":function(a){return e.then(null,a)},pipe:function(){var a=arguments;return r.Deferred(function(b){r.each(c,function(c,d){var e=r.isFunction(a[d[4]])&&a[d[4]];f[d[1]](function(){var a=e&&e.apply(this,arguments);a&&r.isFunction(a.promise)?a.promise().progress(b.notify).done(b.resolve).fail(b.reject):b[d[0]+"With"](this,e?[a]:arguments)})}),a=null}).promise()},then:function(b,d,e){var f=0;function g(b,c,d,e){return function(){var h=this,i=arguments,j=function(){var a,j;if(!(b<f)){if(a=d.apply(h,i),a===c.promise())throw new TypeError("Thenable self-resolution");j=a&&("object"==typeof a||"function"==typeof a)&&a.then,r.isFunction(j)?e?j.call(a,g(f,c,N,e),g(f,c,O,e)):(f++,j.call(a,g(f,c,N,e),g(f,c,O,e),g(f,c,N,c.notifyWith))):(d!==N&&(h=void 0,i=[a]),(e||c.resolveWith)(h,i))}},k=e?j:function(){try{j()}catch(a){r.Deferred.exceptionHook&&r.Deferred.exceptionHook(a,k.stackTrace),b+1>=f&&(d!==O&&(h=void 0,i=[a]),c.rejectWith(h,i))}};b?k():(r.Deferred.getStackHook&&(k.stackTrace=r.Deferred.getStackHook()),a.setTimeout(k))}}return r.Deferred(function(a){c[0][3].add(g(0,a,r.isFunction(e)?e:N,a.notifyWith)),c[1][3].add(g(0,a,r.isFunction(b)?b:N)),c[2][3].add(g(0,a,r.isFunction(d)?d:O))}).promise()},promise:function(a){return null!=a?r.extend(a,e):e}},f={};return r.each(c,function(a,b){var g=b[2],h=b[5];e[b[1]]=g.add,h&&g.add(function(){d=h},c[3-a][2].disable,c[0][2].lock),g.add(b[3].fire),f[b[0]]=function(){return f[b[0]+"With"](this===f?void 0:this,arguments),this},f[b[0]+"With"]=g.fireWith}),e.promise(f),b&&b.call(f,f),f},when:function(a){var b=arguments.length,c=b,d=Array(c),e=f.call(arguments),g=r.Deferred(),h=function(a){return function(c){d[a]=this,e[a]=arguments.length>1?f.call(arguments):c,--b||g.resolveWith(d,e)}};if(b<=1&&(P(a,g.done(h(c)).resolve,g.reject,!b),"pending"===g.state()||r.isFunction(e[c]&&e[c].then)))return g.then();while(c--)P(e[c],h(c),g.reject);return g.promise()}});var Q=/^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/;r.Deferred.exceptionHook=function(b,c){a.console&&a.console.warn&&b&&Q.test(b.name)&&a.console.warn("jQuery.Deferred exception: "+b.message,b.stack,c)},r.readyException=function(b){a.setTimeout(function(){throw b})};var R=r.Deferred();r.fn.ready=function(a){return R.then(a)["catch"](function(a){r.readyException(a)}),this},r.extend({isReady:!1,readyWait:1,ready:function(a){(a===!0?--r.readyWait:r.isReady)||(r.isReady=!0,a!==!0&&--r.readyWait>0||R.resolveWith(d,[r]))}}),r.ready.then=R.then;function S(){d.removeEventListener("DOMContentLoaded",S),
+a.removeEventListener("load",S),r.ready()}"complete"===d.readyState||"loading"!==d.readyState&&!d.documentElement.doScroll?a.setTimeout(r.ready):(d.addEventListener("DOMContentLoaded",S),a.addEventListener("load",S));var T=function(a,b,c,d,e,f,g){var h=0,i=a.length,j=null==c;if("object"===r.type(c)){e=!0;for(h in c)T(a,b,h,c[h],!0,f,g)}else if(void 0!==d&&(e=!0,r.isFunction(d)||(g=!0),j&&(g?(b.call(a,d),b=null):(j=b,b=function(a,b,c){return j.call(r(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},U=function(a){return 1===a.nodeType||9===a.nodeType||!+a.nodeType};function V(){this.expando=r.expando+V.uid++}V.uid=1,V.prototype={cache:function(a){var b=a[this.expando];return b||(b={},U(a)&&(a.nodeType?a[this.expando]=b:Object.defineProperty(a,this.expando,{value:b,configurable:!0}))),b},set:function(a,b,c){var d,e=this.cache(a);if("string"==typeof b)e[r.camelCase(b)]=c;else for(d in b)e[r.camelCase(d)]=b[d];return e},get:function(a,b){return void 0===b?this.cache(a):a[this.expando]&&a[this.expando][r.camelCase(b)]},access:function(a,b,c){return void 0===b||b&&"string"==typeof b&&void 0===c?this.get(a,b):(this.set(a,b,c),void 0!==c?c:b)},remove:function(a,b){var c,d=a[this.expando];if(void 0!==d){if(void 0!==b){Array.isArray(b)?b=b.map(r.camelCase):(b=r.camelCase(b),b=b in d?[b]:b.match(L)||[]),c=b.length;while(c--)delete d[b[c]]}(void 0===b||r.isEmptyObject(d))&&(a.nodeType?a[this.expando]=void 0:delete a[this.expando])}},hasData:function(a){var b=a[this.expando];return void 0!==b&&!r.isEmptyObject(b)}};var W=new V,X=new V,Y=/^(?:\{[\w\W]*\}|\[[\w\W]*\])$/,Z=/[A-Z]/g;function $(a){return"true"===a||"false"!==a&&("null"===a?null:a===+a+""?+a:Y.test(a)?JSON.parse(a):a)}function _(a,b,c){var d;if(void 0===c&&1===a.nodeType)if(d="data-"+b.replace(Z,"-$&").toLowerCase(),c=a.getAttribute(d),"string"==typeof c){try{c=$(c)}catch(e){}X.set(a,b,c)}else c=void 0;return c}r.extend({hasData:function(a){return X.hasData(a)||W.hasData(a)},data:function(a,b,c){return X.access(a,b,c)},removeData:function(a,b){X.remove(a,b)},_data:function(a,b,c){return W.access(a,b,c)},_removeData:function(a,b){W.remove(a,b)}}),r.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=X.get(f),1===f.nodeType&&!W.get(f,"hasDataAttrs"))){c=g.length;while(c--)g[c]&&(d=g[c].name,0===d.indexOf("data-")&&(d=r.camelCase(d.slice(5)),_(f,d,e[d])));W.set(f,"hasDataAttrs",!0)}return e}return"object"==typeof a?this.each(function(){X.set(this,a)}):T(this,function(b){var c;if(f&&void 0===b){if(c=X.get(f,a),void 0!==c)return c;if(c=_(f,a),void 0!==c)return c}else this.each(function(){X.set(this,a,b)})},null,b,arguments.length>1,null,!0)},removeData:function(a){return this.each(function(){X.remove(this,a)})}}),r.extend({queue:function(a,b,c){var d;if(a)return b=(b||"fx")+"queue",d=W.get(a,b),c&&(!d||Array.isArray(c)?d=W.access(a,b,r.makeArray(c)):d.push(c)),d||[]},dequeue:function(a,b){b=b||"fx";var c=r.queue(a,b),d=c.length,e=c.shift(),f=r._queueHooks(a,b),g=function(){r.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 W.get(a,c)||W.access(a,c,{empty:r.Callbacks("once memory").add(function(){W.remove(a,[b+"queue",c])})})}}),r.fn.extend({queue:function(a,b){var c=2;return"string"!=typeof a&&(b=a,a="fx",c--),arguments.length<c?r.queue(this[0],a):void 0===b?this:this.each(function(){var c=r.queue(this,a,b);r._queueHooks(this,a),"fx"===a&&"inprogress"!==c[0]&&r.dequeue(this,a)})},dequeue:function(a){return this.each(function(){r.dequeue(this,a)})},clearQueue:function(a){return this.queue(a||"fx",[])},promise:function(a,b){var c,d=1,e=r.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=W.get(f[g],a+"queueHooks"),c&&c.empty&&(d++,c.empty.add(h));return h(),e.promise(b)}});var aa=/[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/.source,ba=new RegExp("^(?:([+-])=|)("+aa+")([a-z%]*)$","i"),ca=["Top","Right","Bottom","Left"],da=function(a,b){return a=b||a,"none"===a.style.display||""===a.style.display&&r.contains(a.ownerDocument,a)&&"none"===r.css(a,"display")},ea=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};function fa(a,b,c,d){var e,f=1,g=20,h=d?function(){return d.cur()}:function(){return r.css(a,b,"")},i=h(),j=c&&c[3]||(r.cssNumber[b]?"":"px"),k=(r.cssNumber[b]||"px"!==j&&+i)&&ba.exec(r.css(a,b));if(k&&k[3]!==j){j=j||k[3],c=c||[],k=+i||1;do f=f||".5",k/=f,r.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 ga={};function ha(a){var b,c=a.ownerDocument,d=a.nodeName,e=ga[d];return e?e:(b=c.body.appendChild(c.createElement(d)),e=r.css(b,"display"),b.parentNode.removeChild(b),"none"===e&&(e="block"),ga[d]=e,e)}function ia(a,b){for(var c,d,e=[],f=0,g=a.length;f<g;f++)d=a[f],d.style&&(c=d.style.display,b?("none"===c&&(e[f]=W.get(d,"display")||null,e[f]||(d.style.display="")),""===d.style.display&&da(d)&&(e[f]=ha(d))):"none"!==c&&(e[f]="none",W.set(d,"display",c)));for(f=0;f<g;f++)null!=e[f]&&(a[f].style.display=e[f]);return a}r.fn.extend({show:function(){return ia(this,!0)},hide:function(){return ia(this)},toggle:function(a){return"boolean"==typeof a?a?this.show():this.hide():this.each(function(){da(this)?r(this).show():r(this).hide()})}});var ja=/^(?:checkbox|radio)$/i,ka=/<([a-z][^\/\0>\x20\t\r\n\f]+)/i,la=/^$|\/(?:java|ecma)script/i,ma={option:[1,"<select multiple='multiple'>","</select>"],thead:[1,"<table>","</table>"],col:[2,"<table><colgroup>","</colgroup></table>"],tr:[2,"<table><tbody>","</tbody></table>"],td:[3,"<table><tbody><tr>","</tr></tbody></table>"],_default:[0,"",""]};ma.optgroup=ma.option,ma.tbody=ma.tfoot=ma.colgroup=ma.caption=ma.thead,ma.th=ma.td;function na(a,b){var c;return c="undefined"!=typeof a.getElementsByTagName?a.getElementsByTagName(b||"*"):"undefined"!=typeof a.querySelectorAll?a.querySelectorAll(b||"*"):[],void 0===b||b&&B(a,b)?r.merge([a],c):c}function oa(a,b){for(var c=0,d=a.length;c<d;c++)W.set(a[c],"globalEval",!b||W.get(b[c],"globalEval"))}var pa=/<|&#?\w+;/;function qa(a,b,c,d,e){for(var f,g,h,i,j,k,l=b.createDocumentFragment(),m=[],n=0,o=a.length;n<o;n++)if(f=a[n],f||0===f)if("object"===r.type(f))r.merge(m,f.nodeType?[f]:f);else if(pa.test(f)){g=g||l.appendChild(b.createElement("div")),h=(ka.exec(f)||["",""])[1].toLowerCase(),i=ma[h]||ma._default,g.innerHTML=i[1]+r.htmlPrefilter(f)+i[2],k=i[0];while(k--)g=g.lastChild;r.merge(m,g.childNodes),g=l.firstChild,g.textContent=""}else m.push(b.createTextNode(f));l.textContent="",n=0;while(f=m[n++])if(d&&r.inArray(f,d)>-1)e&&e.push(f);else if(j=r.contains(f.ownerDocument,f),g=na(l.appendChild(f),"script"),j&&oa(g),c){k=0;while(f=g[k++])la.test(f.type||"")&&c.push(f)}return l}!function(){var a=d.createDocumentFragment(),b=a.appendChild(d.createElement("div")),c=d.createElement("input");c.setAttribute("type","radio"),c.setAttribute("checked","checked"),c.setAttribute("name","t"),b.appendChild(c),o.checkClone=b.cloneNode(!0).cloneNode(!0).lastChild.checked,b.innerHTML="<textarea>x</textarea>",o.noCloneChecked=!!b.cloneNode(!0).lastChild.defaultValue}();var ra=d.documentElement,sa=/^key/,ta=/^(?:mouse|pointer|contextmenu|drag|drop)|click/,ua=/^([^.]*)(?:\.(.+)|)/;function va(){return!0}function wa(){return!1}function xa(){try{return d.activeElement}catch(a){}}function ya(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)ya(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=wa;else if(!e)return a;return 1===f&&(g=e,e=function(a){return r().off(a),g.apply(this,arguments)},e.guid=g.guid||(g.guid=r.guid++)),a.each(function(){r.event.add(this,b,e,d,c)})}r.event={global:{},add:function(a,b,c,d,e){var f,g,h,i,j,k,l,m,n,o,p,q=W.get(a);if(q){c.handler&&(f=c,c=f.handler,e=f.selector),e&&r.find.matchesSelector(ra,e),c.guid||(c.guid=r.guid++),(i=q.events)||(i=q.events={}),(g=q.handle)||(g=q.handle=function(b){return"undefined"!=typeof r&&r.event.triggered!==b.type?r.event.dispatch.apply(a,arguments):void 0}),b=(b||"").match(L)||[""],j=b.length;while(j--)h=ua.exec(b[j])||[],n=p=h[1],o=(h[2]||"").split(".").sort(),n&&(l=r.event.special[n]||{},n=(e?l.delegateType:l.bindType)||n,l=r.event.special[n]||{},k=r.extend({type:n,origType:p,data:d,handler:c,guid:c.guid,selector:e,needsContext:e&&r.expr.match.needsContext.test(e),namespace:o.join(".")},f),(m=i[n])||(m=i[n]=[],m.delegateCount=0,l.setup&&l.setup.call(a,d,o,g)!==!1||a.addEventListener&&a.addEventListener(n,g)),l.add&&(l.add.call(a,k),k.handler.guid||(k.handler.guid=c.guid)),e?m.splice(m.delegateCount++,0,k):m.push(k),r.event.global[n]=!0)}},remove:function(a,b,c,d,e){var f,g,h,i,j,k,l,m,n,o,p,q=W.hasData(a)&&W.get(a);if(q&&(i=q.events)){b=(b||"").match(L)||[""],j=b.length;while(j--)if(h=ua.exec(b[j])||[],n=p=h[1],o=(h[2]||"").split(".").sort(),n){l=r.event.special[n]||{},n=(d?l.delegateType:l.bindType)||n,m=i[n]||[],h=h[2]&&new RegExp("(^|\\.)"+o.join("\\.(?:.*\\.|)")+"(\\.|$)"),g=f=m.length;while(f--)k=m[f],!e&&p!==k.origType||c&&c.guid!==k.guid||h&&!h.test(k.namespace)||d&&d!==k.selector&&("**"!==d||!k.selector)||(m.splice(f,1),k.selector&&m.delegateCount--,l.remove&&l.remove.call(a,k));g&&!m.length&&(l.teardown&&l.teardown.call(a,o,q.handle)!==!1||r.removeEvent(a,n,q.handle),delete i[n])}else for(n in i)r.event.remove(a,n+b[j],c,d,!0);r.isEmptyObject(i)&&W.remove(a,"handle events")}},dispatch:function(a){var b=r.event.fix(a),c,d,e,f,g,h,i=new Array(arguments.length),j=(W.get(this,"events")||{})[b.type]||[],k=r.event.special[b.type]||{};for(i[0]=b,c=1;c<arguments.length;c++)i[c]=arguments[c];if(b.delegateTarget=this,!k.preDispatch||k.preDispatch.call(this,b)!==!1){h=r.event.handlers.call(this,b,j),c=0;while((f=h[c++])&&!b.isPropagationStopped()){b.currentTarget=f.elem,d=0;while((g=f.handlers[d++])&&!b.isImmediatePropagationStopped())b.rnamespace&&!b.rnamespace.test(g.namespace)||(b.handleObj=g,b.data=g.data,e=((r.event.special[g.origType]||{}).handle||g.handler).apply(f.elem,i),void 0!==e&&(b.result=e)===!1&&(b.preventDefault(),b.stopPropagation()))}return k.postDispatch&&k.postDispatch.call(this,b),b.result}},handlers:function(a,b){var c,d,e,f,g,h=[],i=b.delegateCount,j=a.target;if(i&&j.nodeType&&!("click"===a.type&&a.button>=1))for(;j!==this;j=j.parentNode||this)if(1===j.nodeType&&("click"!==a.type||j.disabled!==!0)){for(f=[],g={},c=0;c<i;c++)d=b[c],e=d.selector+" ",void 0===g[e]&&(g[e]=d.needsContext?r(e,this).index(j)>-1:r.find(e,this,null,[j]).length),g[e]&&f.push(d);f.length&&h.push({elem:j,handlers:f})}return j=this,i<b.length&&h.push({elem:j,handlers:b.slice(i)}),h},addProp:function(a,b){Object.defineProperty(r.Event.prototype,a,{enumerable:!0,configurable:!0,get:r.isFunction(b)?function(){if(this.originalEvent)return b(this.originalEvent)}:function(){if(this.originalEvent)return this.originalEvent[a]},set:function(b){Object.defineProperty(this,a,{enumerable:!0,configurable:!0,writable:!0,value:b})}})},fix:function(a){return a[r.expando]?a:new r.Event(a)},special:{load:{noBubble:!0},focus:{trigger:function(){if(this!==xa()&&this.focus)return this.focus(),!1},delegateType:"focusin"},blur:{trigger:function(){if(this===xa()&&this.blur)return this.blur(),!1},delegateType:"focusout"},click:{trigger:function(){if(ja.test(this.type)&&this.click&&B(this,"input"))return this.click(),!1},_default:function(a){return B(a.target,"a")}},beforeunload:{postDispatch:function(a){void 0!==a.result&&a.originalEvent&&(a.originalEvent.returnValue=a.result)}}}},r.removeEvent=function(a,b,c){a.removeEventListener&&a.removeEventListener(b,c)},r.Event=function(a,b){return this instanceof r.Event?(a&&a.type?(this.originalEvent=a,this.type=a.type,this.isDefaultPrevented=a.defaultPrevented||void 0===a.defaultPrevented&&a.returnValue===!1?va:wa,this.target=a.target&&3===a.target.nodeType?a.target.parentNode:a.target,this.currentTarget=a.currentTarget,this.relatedTarget=a.relatedTarget):this.type=a,b&&r.extend(this,b),this.timeStamp=a&&a.timeStamp||r.now(),void(this[r.expando]=!0)):new r.Event(a,b)},r.Event.prototype={constructor:r.Event,isDefaultPrevented:wa,isPropagationStopped:wa,isImmediatePropagationStopped:wa,isSimulated:!1,preventDefault:function(){var a=this.originalEvent;this.isDefaultPrevented=va,a&&!this.isSimulated&&a.preventDefault()},stopPropagation:function(){var a=this.originalEvent;this.isPropagationStopped=va,a&&!this.isSimulated&&a.stopPropagation()},stopImmediatePropagation:function(){var a=this.originalEvent;this.isImmediatePropagationStopped=va,a&&!this.isSimulated&&a.stopImmediatePropagation(),this.stopPropagation()}},r.each({altKey:!0,bubbles:!0,cancelable:!0,changedTouches:!0,ctrlKey:!0,detail:!0,eventPhase:!0,metaKey:!0,pageX:!0,pageY:!0,shiftKey:!0,view:!0,"char":!0,charCode:!0,key:!0,keyCode:!0,button:!0,buttons:!0,clientX:!0,clientY:!0,offsetX:!0,offsetY:!0,pointerId:!0,pointerType:!0,screenX:!0,screenY:!0,targetTouches:!0,toElement:!0,touches:!0,which:function(a){var b=a.button;return null==a.which&&sa.test(a.type)?null!=a.charCode?a.charCode:a.keyCode:!a.which&&void 0!==b&&ta.test(a.type)?1&b?1:2&b?3:4&b?2:0:a.which}},r.event.addProp),r.each({mouseenter:"mouseover",mouseleave:"mouseout",pointerenter:"pointerover",pointerleave:"pointerout"},function(a,b){r.event.special[a]={delegateType:b,bindType:b,handle:function(a){var c,d=this,e=a.relatedTarget,f=a.handleObj;return e&&(e===d||r.contains(d,e))||(a.type=f.origType,c=f.handler.apply(this,arguments),a.type=b),c}}}),r.fn.extend({on:function(a,b,c,d){return ya(this,a,b,c,d)},one:function(a,b,c,d){return ya(this,a,b,c,d,1)},off:function(a,b,c){var d,e;if(a&&a.preventDefault&&a.handleObj)return d=a.handleObj,r(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=wa),this.each(function(){r.event.remove(this,a,c,b)})}});var za=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([a-z][^\/\0>\x20\t\r\n\f]*)[^>]*)\/>/gi,Aa=/<script|<style|<link/i,Ba=/checked\s*(?:[^=]|=\s*.checked.)/i,Ca=/^true\/(.*)/,Da=/^\s*<!(?:\[CDATA\[|--)|(?:\]\]|--)>\s*$/g;function Ea(a,b){return B(a,"table")&&B(11!==b.nodeType?b:b.firstChild,"tr")?r(">tbody",a)[0]||a:a}function Fa(a){return a.type=(null!==a.getAttribute("type"))+"/"+a.type,a}function Ga(a){var b=Ca.exec(a.type);return b?a.type=b[1]:a.removeAttribute("type"),a}function Ha(a,b){var c,d,e,f,g,h,i,j;if(1===b.nodeType){if(W.hasData(a)&&(f=W.access(a),g=W.set(b,f),j=f.events)){delete g.handle,g.events={};for(e in j)for(c=0,d=j[e].length;c<d;c++)r.event.add(b,e,j[e][c])}X.hasData(a)&&(h=X.access(a),i=r.extend({},h),X.set(b,i))}}function Ia(a,b){var c=b.nodeName.toLowerCase();"input"===c&&ja.test(a.type)?b.checked=a.checked:"input"!==c&&"textarea"!==c||(b.defaultValue=a.defaultValue)}function Ja(a,b,c,d){b=g.apply([],b);var e,f,h,i,j,k,l=0,m=a.length,n=m-1,q=b[0],s=r.isFunction(q);if(s||m>1&&"string"==typeof q&&!o.checkClone&&Ba.test(q))return a.each(function(e){var f=a.eq(e);s&&(b[0]=q.call(this,e,f.html())),Ja(f,b,c,d)});if(m&&(e=qa(b,a[0].ownerDocument,!1,a,d),f=e.firstChild,1===e.childNodes.length&&(e=f),f||d)){for(h=r.map(na(e,"script"),Fa),i=h.length;l<m;l++)j=e,l!==n&&(j=r.clone(j,!0,!0),i&&r.merge(h,na(j,"script"))),c.call(a[l],j,l);if(i)for(k=h[h.length-1].ownerDocument,r.map(h,Ga),l=0;l<i;l++)j=h[l],la.test(j.type||"")&&!W.access(j,"globalEval")&&r.contains(k,j)&&(j.src?r._evalUrl&&r._evalUrl(j.src):p(j.textContent.replace(Da,""),k))}return a}function Ka(a,b,c){for(var d,e=b?r.filter(b,a):a,f=0;null!=(d=e[f]);f++)c||1!==d.nodeType||r.cleanData(na(d)),d.parentNode&&(c&&r.contains(d.ownerDocument,d)&&oa(na(d,"script")),d.parentNode.removeChild(d));return a}r.extend({htmlPrefilter:function(a){return a.replace(za,"<$1></$2>")},clone:function(a,b,c){var d,e,f,g,h=a.cloneNode(!0),i=r.contains(a.ownerDocument,a);if(!(o.noCloneChecked||1!==a.nodeType&&11!==a.nodeType||r.isXMLDoc(a)))for(g=na(h),f=na(a),d=0,e=f.length;d<e;d++)Ia(f[d],g[d]);if(b)if(c)for(f=f||na(a),g=g||na(h),d=0,e=f.length;d<e;d++)Ha(f[d],g[d]);else Ha(a,h);return g=na(h,"script"),g.length>0&&oa(g,!i&&na(a,"script")),h},cleanData:function(a){for(var b,c,d,e=r.event.special,f=0;void 0!==(c=a[f]);f++)if(U(c)){if(b=c[W.expando]){if(b.events)for(d in b.events)e[d]?r.event.remove(c,d):r.removeEvent(c,d,b.handle);c[W.expando]=void 0}c[X.expando]&&(c[X.expando]=void 0)}}}),r.fn.extend({detach:function(a){return Ka(this,a,!0)},remove:function(a){return Ka(this,a)},text:function(a){return T(this,function(a){return void 0===a?r.text(this):this.empty().each(function(){1!==this.nodeType&&11!==this.nodeType&&9!==this.nodeType||(this.textContent=a)})},null,a,arguments.length)},append:function(){return Ja(this,arguments,function(a){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var b=Ea(this,a);b.appendChild(a)}})},prepend:function(){return Ja(this,arguments,function(a){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var b=Ea(this,a);b.insertBefore(a,b.firstChild)}})},before:function(){return Ja(this,arguments,function(a){this.parentNode&&this.parentNode.insertBefore(a,this)})},after:function(){return Ja(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&&(r.cleanData(na(a,!1)),a.textContent="");return this},clone:function(a,b){return a=null!=a&&a,b=null==b?a:b,this.map(function(){return r.clone(this,a,b)})},html:function(a){return T(this,function(a){var b=this[0]||{},c=0,d=this.length;if(void 0===a&&1===b.nodeType)return b.innerHTML;if("string"==typeof a&&!Aa.test(a)&&!ma[(ka.exec(a)||["",""])[1].toLowerCase()]){a=r.htmlPrefilter(a);try{for(;c<d;c++)b=this[c]||{},1===b.nodeType&&(r.cleanData(na(b,!1)),b.innerHTML=a);b=0}catch(e){}}b&&this.empty().append(a)},null,a,arguments.length)},replaceWith:function(){var a=[];return Ja(this,arguments,function(b){var c=this.parentNode;r.inArray(this,a)<0&&(r.cleanData(na(this)),c&&c.replaceChild(b,this))},a)}}),r.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(a,b){r.fn[a]=function(a){for(var c,d=[],e=r(a),f=e.length-1,g=0;g<=f;g++)c=g===f?this:this.clone(!0),r(e[g])[b](c),h.apply(d,c.get());return this.pushStack(d)}});var La=/^margin/,Ma=new RegExp("^("+aa+")(?!px)[a-z%]+$","i"),Na=function(b){var c=b.ownerDocument.defaultView;return c&&c.opener||(c=a),c.getComputedStyle(b)};!function(){function b(){if(i){i.style.cssText="box-sizing:border-box;position:relative;display:block;margin:auto;border:1px;padding:1px;top:1%;width:50%",i.innerHTML="",ra.appendChild(h);var b=a.getComputedStyle(i);c="1%"!==b.top,g="2px"===b.marginLeft,e="4px"===b.width,i.style.marginRight="50%",f="4px"===b.marginRight,ra.removeChild(h),i=null}}var c,e,f,g,h=d.createElement("div"),i=d.createElement("div");i.style&&(i.style.backgroundClip="content-box",i.cloneNode(!0).style.backgroundClip="",o.clearCloneStyle="content-box"===i.style.backgroundClip,h.style.cssText="border:0;width:8px;height:0;top:0;left:-9999px;padding:0;margin-top:1px;position:absolute",h.appendChild(i),r.extend(o,{pixelPosition:function(){return b(),c},boxSizingReliable:function(){return b(),e},pixelMarginRight:function(){return b(),f},reliableMarginLeft:function(){return b(),g}}))}();function Oa(a,b,c){var d,e,f,g,h=a.style;return c=c||Na(a),c&&(g=c.getPropertyValue(b)||c[b],""!==g||r.contains(a.ownerDocument,a)||(g=r.style(a,b)),!o.pixelMarginRight()&&Ma.test(g)&&La.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}function Pa(a,b){return{get:function(){return a()?void delete this.get:(this.get=b).apply(this,arguments)}}}var Qa=/^(none|table(?!-c[ea]).+)/,Ra=/^--/,Sa={position:"absolute",visibility:"hidden",display:"block"},Ta={letterSpacing:"0",fontWeight:"400"},Ua=["Webkit","Moz","ms"],Va=d.createElement("div").style;function Wa(a){if(a in Va)return a;var b=a[0].toUpperCase()+a.slice(1),c=Ua.length;while(c--)if(a=Ua[c]+b,a in Va)return a}function Xa(a){var b=r.cssProps[a];return b||(b=r.cssProps[a]=Wa(a)||a),b}function Ya(a,b,c){var d=ba.exec(b);return d?Math.max(0,d[2]-(c||0))+(d[3]||"px"):b}function Za(a,b,c,d,e){var f,g=0;for(f=c===(d?"border":"content")?4:"width"===b?1:0;f<4;f+=2)"margin"===c&&(g+=r.css(a,c+ca[f],!0,e)),d?("content"===c&&(g-=r.css(a,"padding"+ca[f],!0,e)),"margin"!==c&&(g-=r.css(a,"border"+ca[f]+"Width",!0,e))):(g+=r.css(a,"padding"+ca[f],!0,e),"padding"!==c&&(g+=r.css(a,"border"+ca[f]+"Width",!0,e)));return g}function $a(a,b,c){var d,e=Na(a),f=Oa(a,b,e),g="border-box"===r.css(a,"boxSizing",!1,e);return Ma.test(f)?f:(d=g&&(o.boxSizingReliable()||f===a.style[b]),f=parseFloat(f)||0,f+Za(a,b,c||(g?"border":"content"),d,e)+"px")}r.extend({cssHooks:{opacity:{get:function(a,b){if(b){var c=Oa(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":"cssFloat"},style:function(a,b,c,d){if(a&&3!==a.nodeType&&8!==a.nodeType&&a.style){var e,f,g,h=r.camelCase(b),i=Ra.test(b),j=a.style;return i||(b=Xa(h)),g=r.cssHooks[b]||r.cssHooks[h],void 0===c?g&&"get"in g&&void 0!==(e=g.get(a,!1,d))?e:j[b]:(f=typeof c,"string"===f&&(e=ba.exec(c))&&e[1]&&(c=fa(a,b,e),f="number"),null!=c&&c===c&&("number"===f&&(c+=e&&e[3]||(r.cssNumber[h]?"":"px")),o.clearCloneStyle||""!==c||0!==b.indexOf("background")||(j[b]="inherit"),g&&"set"in g&&void 0===(c=g.set(a,c,d))||(i?j.setProperty(b,c):j[b]=c)),void 0)}},css:function(a,b,c,d){var e,f,g,h=r.camelCase(b),i=Ra.test(b);return i||(b=Xa(h)),g=r.cssHooks[b]||r.cssHooks[h],g&&"get"in g&&(e=g.get(a,!0,c)),void 0===e&&(e=Oa(a,b,d)),"normal"===e&&b in Ta&&(e=Ta[b]),""===c||c?(f=parseFloat(e),c===!0||isFinite(f)?f||0:e):e}}),r.each(["height","width"],function(a,b){r.cssHooks[b]={get:function(a,c,d){if(c)return!Qa.test(r.css(a,"display"))||a.getClientRects().length&&a.getBoundingClientRect().width?$a(a,b,d):ea(a,Sa,function(){return $a(a,b,d)})},set:function(a,c,d){var e,f=d&&Na(a),g=d&&Za(a,b,d,"border-box"===r.css(a,"boxSizing",!1,f),f);return g&&(e=ba.exec(c))&&"px"!==(e[3]||"px")&&(a.style[b]=c,c=r.css(a,b)),Ya(a,c,g)}}}),r.cssHooks.marginLeft=Pa(o.reliableMarginLeft,function(a,b){if(b)return(parseFloat(Oa(a,"marginLeft"))||a.getBoundingClientRect().left-ea(a,{marginLeft:0},function(){return a.getBoundingClientRect().left}))+"px"}),r.each({margin:"",padding:"",border:"Width"},function(a,b){r.cssHooks[a+b]={expand:function(c){for(var d=0,e={},f="string"==typeof c?c.split(" "):[c];d<4;d++)e[a+ca[d]+b]=f[d]||f[d-2]||f[0];return e}},La.test(a)||(r.cssHooks[a+b].set=Ya)}),r.fn.extend({css:function(a,b){return T(this,function(a,b,c){var d,e,f={},g=0;if(Array.isArray(b)){for(d=Na(a),e=b.length;g<e;g++)f[b[g]]=r.css(a,b[g],!1,d);return f}return void 0!==c?r.style(a,b,c):r.css(a,b)},a,b,arguments.length>1)}});function _a(a,b,c,d,e){return new _a.prototype.init(a,b,c,d,e)}r.Tween=_a,_a.prototype={constructor:_a,init:function(a,b,c,d,e,f){this.elem=a,this.prop=c,this.easing=e||r.easing._default,this.options=b,this.start=this.now=this.cur(),this.end=d,this.unit=f||(r.cssNumber[c]?"":"px")},cur:function(){var a=_a.propHooks[this.prop];return a&&a.get?a.get(this):_a.propHooks._default.get(this)},run:function(a){var b,c=_a.propHooks[this.prop];return this.options.duration?this.pos=b=r.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):_a.propHooks._default.set(this),this}},_a.prototype.init.prototype=_a.prototype,_a.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=r.css(a.elem,a.prop,""),b&&"auto"!==b?b:0)},set:function(a){r.fx.step[a.prop]?r.fx.step[a.prop](a):1!==a.elem.nodeType||null==a.elem.style[r.cssProps[a.prop]]&&!r.cssHooks[a.prop]?a.elem[a.prop]=a.now:r.style(a.elem,a.prop,a.now+a.unit)}}},_a.propHooks.scrollTop=_a.propHooks.scrollLeft={set:function(a){a.elem.nodeType&&a.elem.parentNode&&(a.elem[a.prop]=a.now)}},r.easing={linear:function(a){return a},swing:function(a){return.5-Math.cos(a*Math.PI)/2},_default:"swing"},r.fx=_a.prototype.init,r.fx.step={};var ab,bb,cb=/^(?:toggle|show|hide)$/,db=/queueHooks$/;function eb(){bb&&(d.hidden===!1&&a.requestAnimationFrame?a.requestAnimationFrame(eb):a.setTimeout(eb,r.fx.interval),r.fx.tick())}function fb(){return a.setTimeout(function(){ab=void 0}),ab=r.now()}function gb(a,b){var c,d=0,e={height:a};for(b=b?1:0;d<4;d+=2-b)c=ca[d],e["margin"+c]=e["padding"+c]=a;return b&&(e.opacity=e.width=a),e}function hb(a,b,c){for(var d,e=(kb.tweeners[b]||[]).concat(kb.tweeners["*"]),f=0,g=e.length;f<g;f++)if(d=e[f].call(c,b,a))return d}function ib(a,b,c){var d,e,f,g,h,i,j,k,l="width"in b||"height"in b,m=this,n={},o=a.style,p=a.nodeType&&da(a),q=W.get(a,"fxshow");c.queue||(g=r._queueHooks(a,"fx"),null==g.unqueued&&(g.unqueued=0,h=g.empty.fire,g.empty.fire=function(){g.unqueued||h()}),g.unqueued++,m.always(function(){m.always(function(){g.unqueued--,r.queue(a,"fx").length||g.empty.fire()})}));for(d in b)if(e=b[d],cb.test(e)){if(delete b[d],f=f||"toggle"===e,e===(p?"hide":"show")){if("show"!==e||!q||void 0===q[d])continue;p=!0}n[d]=q&&q[d]||r.style(a,d)}if(i=!r.isEmptyObject(b),i||!r.isEmptyObject(n)){l&&1===a.nodeType&&(c.overflow=[o.overflow,o.overflowX,o.overflowY],j=q&&q.display,null==j&&(j=W.get(a,"display")),k=r.css(a,"display"),"none"===k&&(j?k=j:(ia([a],!0),j=a.style.display||j,k=r.css(a,"display"),ia([a]))),("inline"===k||"inline-block"===k&&null!=j)&&"none"===r.css(a,"float")&&(i||(m.done(function(){o.display=j}),null==j&&(k=o.display,j="none"===k?"":k)),o.display="inline-block")),c.overflow&&(o.overflow="hidden",m.always(function(){o.overflow=c.overflow[0],o.overflowX=c.overflow[1],o.overflowY=c.overflow[2]})),i=!1;for(d in n)i||(q?"hidden"in q&&(p=q.hidden):q=W.access(a,"fxshow",{display:j}),f&&(q.hidden=!p),p&&ia([a],!0),m.done(function(){p||ia([a]),W.remove(a,"fxshow");for(d in n)r.style(a,d,n[d])})),i=hb(p?q[d]:0,d,m),d in q||(q[d]=i.start,p&&(i.end=i.start,i.start=0))}}function jb(a,b){var c,d,e,f,g;for(c in a)if(d=r.camelCase(c),e=b[d],f=a[c],Array.isArray(f)&&(e=f[1],f=a[c]=f[0]),c!==d&&(a[d]=f,delete a[c]),g=r.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 kb(a,b,c){var d,e,f=0,g=kb.prefilters.length,h=r.Deferred().always(function(){delete i.elem}),i=function(){if(e)return!1;for(var b=ab||fb(),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:(i||h.notifyWith(a,[j,1,0]),h.resolveWith(a,[j]),!1)},j=h.promise({elem:a,props:r.extend({},b),opts:r.extend(!0,{specialEasing:{},easing:r.easing._default},c),originalProperties:b,originalOptions:c,startTime:ab||fb(),duration:c.duration,tweens:[],createTween:function(b,c){var d=r.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(jb(k,j.opts.specialEasing);f<g;f++)if(d=kb.prefilters[f].call(j,a,k,j.opts))return r.isFunction(d.stop)&&(r._queueHooks(j.elem,j.opts.queue).stop=r.proxy(d.stop,d)),d;return r.map(k,hb,j),r.isFunction(j.opts.start)&&j.opts.start.call(a,j),j.progress(j.opts.progress).done(j.opts.done,j.opts.complete).fail(j.opts.fail).always(j.opts.always),r.fx.timer(r.extend(i,{elem:a,anim:j,queue:j.opts.queue})),j}r.Animation=r.extend(kb,{tweeners:{"*":[function(a,b){var c=this.createTween(a,b);return fa(c.elem,a,ba.exec(b),c),c}]},tweener:function(a,b){r.isFunction(a)?(b=a,a=["*"]):a=a.match(L);for(var c,d=0,e=a.length;d<e;d++)c=a[d],kb.tweeners[c]=kb.tweeners[c]||[],kb.tweeners[c].unshift(b)},prefilters:[ib],prefilter:function(a,b){b?kb.prefilters.unshift(a):kb.prefilters.push(a)}}),r.speed=function(a,b,c){var d=a&&"object"==typeof a?r.extend({},a):{complete:c||!c&&b||r.isFunction(a)&&a,duration:a,easing:c&&b||b&&!r.isFunction(b)&&b};return r.fx.off?d.duration=0:"number"!=typeof d.duration&&(d.duration in r.fx.speeds?d.duration=r.fx.speeds[d.duration]:d.duration=r.fx.speeds._default),null!=d.queue&&d.queue!==!0||(d.queue="fx"),d.old=d.complete,d.complete=function(){r.isFunction(d.old)&&d.old.call(this),d.queue&&r.dequeue(this,d.queue)},d},r.fn.extend({fadeTo:function(a,b,c,d){return this.filter(da).css("opacity",0).show().end().animate({opacity:b},a,c,d)},animate:function(a,b,c,d){var e=r.isEmptyObject(a),f=r.speed(b,c,d),g=function(){var b=kb(this,r.extend({},a),f);(e||W.get(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=r.timers,g=W.get(this);if(e)g[e]&&g[e].stop&&d(g[e]);else for(e in g)g[e]&&g[e].stop&&db.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||r.dequeue(this,a)})},finish:function(a){return a!==!1&&(a=a||"fx"),this.each(function(){var b,c=W.get(this),d=c[a+"queue"],e=c[a+"queueHooks"],f=r.timers,g=d?d.length:0;for(c.finish=!0,r.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})}}),r.each(["toggle","show","hide"],function(a,b){var c=r.fn[b];r.fn[b]=function(a,d,e){return null==a||"boolean"==typeof a?c.apply(this,arguments):this.animate(gb(b,!0),a,d,e)}}),r.each({slideDown:gb("show"),slideUp:gb("hide"),slideToggle:gb("toggle"),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"},fadeToggle:{opacity:"toggle"}},function(a,b){r.fn[a]=function(a,c,d){return this.animate(b,a,c,d)}}),r.timers=[],r.fx.tick=function(){var a,b=0,c=r.timers;for(ab=r.now();b<c.length;b++)a=c[b],a()||c[b]!==a||c.splice(b--,1);c.length||r.fx.stop(),ab=void 0},r.fx.timer=function(a){r.timers.push(a),r.fx.start()},r.fx.interval=13,r.fx.start=function(){bb||(bb=!0,eb())},r.fx.stop=function(){bb=null},r.fx.speeds={slow:600,fast:200,_default:400},r.fn.delay=function(b,c){return b=r.fx?r.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=d.createElement("input"),b=d.createElement("select"),c=b.appendChild(d.createElement("option"));a.type="checkbox",o.checkOn=""!==a.value,o.optSelected=c.selected,a=d.createElement("input"),a.value="t",a.type="radio",o.radioValue="t"===a.value}();var lb,mb=r.expr.attrHandle;r.fn.extend({attr:function(a,b){return T(this,r.attr,a,b,arguments.length>1)},removeAttr:function(a){return this.each(function(){r.removeAttr(this,a)})}}),r.extend({attr:function(a,b,c){var d,e,f=a.nodeType;if(3!==f&&8!==f&&2!==f)return"undefined"==typeof a.getAttribute?r.prop(a,b,c):(1===f&&r.isXMLDoc(a)||(e=r.attrHooks[b.toLowerCase()]||(r.expr.match.bool.test(b)?lb:void 0)),void 0!==c?null===c?void r.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=r.find.attr(a,b),null==d?void 0:d));
+},attrHooks:{type:{set:function(a,b){if(!o.radioValue&&"radio"===b&&B(a,"input")){var c=a.value;return a.setAttribute("type",b),c&&(a.value=c),b}}}},removeAttr:function(a,b){var c,d=0,e=b&&b.match(L);if(e&&1===a.nodeType)while(c=e[d++])a.removeAttribute(c)}}),lb={set:function(a,b,c){return b===!1?r.removeAttr(a,c):a.setAttribute(c,c),c}},r.each(r.expr.match.bool.source.match(/\w+/g),function(a,b){var c=mb[b]||r.find.attr;mb[b]=function(a,b,d){var e,f,g=b.toLowerCase();return d||(f=mb[g],mb[g]=e,e=null!=c(a,b,d)?g:null,mb[g]=f),e}});var nb=/^(?:input|select|textarea|button)$/i,ob=/^(?:a|area)$/i;r.fn.extend({prop:function(a,b){return T(this,r.prop,a,b,arguments.length>1)},removeProp:function(a){return this.each(function(){delete this[r.propFix[a]||a]})}}),r.extend({prop:function(a,b,c){var d,e,f=a.nodeType;if(3!==f&&8!==f&&2!==f)return 1===f&&r.isXMLDoc(a)||(b=r.propFix[b]||b,e=r.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=r.find.attr(a,"tabindex");return b?parseInt(b,10):nb.test(a.nodeName)||ob.test(a.nodeName)&&a.href?0:-1}}},propFix:{"for":"htmlFor","class":"className"}}),o.optSelected||(r.propHooks.selected={get:function(a){var b=a.parentNode;return b&&b.parentNode&&b.parentNode.selectedIndex,null},set:function(a){var b=a.parentNode;b&&(b.selectedIndex,b.parentNode&&b.parentNode.selectedIndex)}}),r.each(["tabIndex","readOnly","maxLength","cellSpacing","cellPadding","rowSpan","colSpan","useMap","frameBorder","contentEditable"],function(){r.propFix[this.toLowerCase()]=this});function pb(a){var b=a.match(L)||[];return b.join(" ")}function qb(a){return a.getAttribute&&a.getAttribute("class")||""}r.fn.extend({addClass:function(a){var b,c,d,e,f,g,h,i=0;if(r.isFunction(a))return this.each(function(b){r(this).addClass(a.call(this,b,qb(this)))});if("string"==typeof a&&a){b=a.match(L)||[];while(c=this[i++])if(e=qb(c),d=1===c.nodeType&&" "+pb(e)+" "){g=0;while(f=b[g++])d.indexOf(" "+f+" ")<0&&(d+=f+" ");h=pb(d),e!==h&&c.setAttribute("class",h)}}return this},removeClass:function(a){var b,c,d,e,f,g,h,i=0;if(r.isFunction(a))return this.each(function(b){r(this).removeClass(a.call(this,b,qb(this)))});if(!arguments.length)return this.attr("class","");if("string"==typeof a&&a){b=a.match(L)||[];while(c=this[i++])if(e=qb(c),d=1===c.nodeType&&" "+pb(e)+" "){g=0;while(f=b[g++])while(d.indexOf(" "+f+" ")>-1)d=d.replace(" "+f+" "," ");h=pb(d),e!==h&&c.setAttribute("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):r.isFunction(a)?this.each(function(c){r(this).toggleClass(a.call(this,c,qb(this),b),b)}):this.each(function(){var b,d,e,f;if("string"===c){d=0,e=r(this),f=a.match(L)||[];while(b=f[d++])e.hasClass(b)?e.removeClass(b):e.addClass(b)}else void 0!==a&&"boolean"!==c||(b=qb(this),b&&W.set(this,"__className__",b),this.setAttribute&&this.setAttribute("class",b||a===!1?"":W.get(this,"__className__")||""))})},hasClass:function(a){var b,c,d=0;b=" "+a+" ";while(c=this[d++])if(1===c.nodeType&&(" "+pb(qb(c))+" ").indexOf(b)>-1)return!0;return!1}});var rb=/\r/g;r.fn.extend({val:function(a){var b,c,d,e=this[0];{if(arguments.length)return d=r.isFunction(a),this.each(function(c){var e;1===this.nodeType&&(e=d?a.call(this,c,r(this).val()):a,null==e?e="":"number"==typeof e?e+="":Array.isArray(e)&&(e=r.map(e,function(a){return null==a?"":a+""})),b=r.valHooks[this.type]||r.valHooks[this.nodeName.toLowerCase()],b&&"set"in b&&void 0!==b.set(this,e,"value")||(this.value=e))});if(e)return b=r.valHooks[e.type]||r.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)}}}),r.extend({valHooks:{option:{get:function(a){var b=r.find.attr(a,"value");return null!=b?b:pb(r.text(a))}},select:{get:function(a){var b,c,d,e=a.options,f=a.selectedIndex,g="select-one"===a.type,h=g?null:[],i=g?f+1:e.length;for(d=f<0?i:g?f:0;d<i;d++)if(c=e[d],(c.selected||d===f)&&!c.disabled&&(!c.parentNode.disabled||!B(c.parentNode,"optgroup"))){if(b=r(c).val(),g)return b;h.push(b)}return h},set:function(a,b){var c,d,e=a.options,f=r.makeArray(b),g=e.length;while(g--)d=e[g],(d.selected=r.inArray(r.valHooks.option.get(d),f)>-1)&&(c=!0);return c||(a.selectedIndex=-1),f}}}}),r.each(["radio","checkbox"],function(){r.valHooks[this]={set:function(a,b){if(Array.isArray(b))return a.checked=r.inArray(r(a).val(),b)>-1}},o.checkOn||(r.valHooks[this].get=function(a){return null===a.getAttribute("value")?"on":a.value})});var sb=/^(?:focusinfocus|focusoutblur)$/;r.extend(r.event,{trigger:function(b,c,e,f){var g,h,i,j,k,m,n,o=[e||d],p=l.call(b,"type")?b.type:b,q=l.call(b,"namespace")?b.namespace.split("."):[];if(h=i=e=e||d,3!==e.nodeType&&8!==e.nodeType&&!sb.test(p+r.event.triggered)&&(p.indexOf(".")>-1&&(q=p.split("."),p=q.shift(),q.sort()),k=p.indexOf(":")<0&&"on"+p,b=b[r.expando]?b:new r.Event(p,"object"==typeof b&&b),b.isTrigger=f?2:3,b.namespace=q.join("."),b.rnamespace=b.namespace?new RegExp("(^|\\.)"+q.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,b.result=void 0,b.target||(b.target=e),c=null==c?[b]:r.makeArray(c,[b]),n=r.event.special[p]||{},f||!n.trigger||n.trigger.apply(e,c)!==!1)){if(!f&&!n.noBubble&&!r.isWindow(e)){for(j=n.delegateType||p,sb.test(j+p)||(h=h.parentNode);h;h=h.parentNode)o.push(h),i=h;i===(e.ownerDocument||d)&&o.push(i.defaultView||i.parentWindow||a)}g=0;while((h=o[g++])&&!b.isPropagationStopped())b.type=g>1?j:n.bindType||p,m=(W.get(h,"events")||{})[b.type]&&W.get(h,"handle"),m&&m.apply(h,c),m=k&&h[k],m&&m.apply&&U(h)&&(b.result=m.apply(h,c),b.result===!1&&b.preventDefault());return b.type=p,f||b.isDefaultPrevented()||n._default&&n._default.apply(o.pop(),c)!==!1||!U(e)||k&&r.isFunction(e[p])&&!r.isWindow(e)&&(i=e[k],i&&(e[k]=null),r.event.triggered=p,e[p](),r.event.triggered=void 0,i&&(e[k]=i)),b.result}},simulate:function(a,b,c){var d=r.extend(new r.Event,c,{type:a,isSimulated:!0});r.event.trigger(d,null,b)}}),r.fn.extend({trigger:function(a,b){return this.each(function(){r.event.trigger(a,b,this)})},triggerHandler:function(a,b){var c=this[0];if(c)return r.event.trigger(a,b,c,!0)}}),r.each("blur focus focusin focusout resize scroll click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup contextmenu".split(" "),function(a,b){r.fn[b]=function(a,c){return arguments.length>0?this.on(b,null,a,c):this.trigger(b)}}),r.fn.extend({hover:function(a,b){return this.mouseenter(a).mouseleave(b||a)}}),o.focusin="onfocusin"in a,o.focusin||r.each({focus:"focusin",blur:"focusout"},function(a,b){var c=function(a){r.event.simulate(b,a.target,r.event.fix(a))};r.event.special[b]={setup:function(){var d=this.ownerDocument||this,e=W.access(d,b);e||d.addEventListener(a,c,!0),W.access(d,b,(e||0)+1)},teardown:function(){var d=this.ownerDocument||this,e=W.access(d,b)-1;e?W.access(d,b,e):(d.removeEventListener(a,c,!0),W.remove(d,b))}}});var tb=a.location,ub=r.now(),vb=/\?/;r.parseXML=function(b){var c;if(!b||"string"!=typeof b)return null;try{c=(new a.DOMParser).parseFromString(b,"text/xml")}catch(d){c=void 0}return c&&!c.getElementsByTagName("parsererror").length||r.error("Invalid XML: "+b),c};var wb=/\[\]$/,xb=/\r?\n/g,yb=/^(?:submit|button|image|reset|file)$/i,zb=/^(?:input|select|textarea|keygen)/i;function Ab(a,b,c,d){var e;if(Array.isArray(b))r.each(b,function(b,e){c||wb.test(a)?d(a,e):Ab(a+"["+("object"==typeof e&&null!=e?b:"")+"]",e,c,d)});else if(c||"object"!==r.type(b))d(a,b);else for(e in b)Ab(a+"["+e+"]",b[e],c,d)}r.param=function(a,b){var c,d=[],e=function(a,b){var c=r.isFunction(b)?b():b;d[d.length]=encodeURIComponent(a)+"="+encodeURIComponent(null==c?"":c)};if(Array.isArray(a)||a.jquery&&!r.isPlainObject(a))r.each(a,function(){e(this.name,this.value)});else for(c in a)Ab(c,a[c],b,e);return d.join("&")},r.fn.extend({serialize:function(){return r.param(this.serializeArray())},serializeArray:function(){return this.map(function(){var a=r.prop(this,"elements");return a?r.makeArray(a):this}).filter(function(){var a=this.type;return this.name&&!r(this).is(":disabled")&&zb.test(this.nodeName)&&!yb.test(a)&&(this.checked||!ja.test(a))}).map(function(a,b){var c=r(this).val();return null==c?null:Array.isArray(c)?r.map(c,function(a){return{name:b.name,value:a.replace(xb,"\r\n")}}):{name:b.name,value:c.replace(xb,"\r\n")}}).get()}});var Bb=/%20/g,Cb=/#.*$/,Db=/([?&])_=[^&]*/,Eb=/^(.*?):[ \t]*([^\r\n]*)$/gm,Fb=/^(?:about|app|app-storage|.+-extension|file|res|widget):$/,Gb=/^(?:GET|HEAD)$/,Hb=/^\/\//,Ib={},Jb={},Kb="*/".concat("*"),Lb=d.createElement("a");Lb.href=tb.href;function Mb(a){return function(b,c){"string"!=typeof b&&(c=b,b="*");var d,e=0,f=b.toLowerCase().match(L)||[];if(r.isFunction(c))while(d=f[e++])"+"===d[0]?(d=d.slice(1)||"*",(a[d]=a[d]||[]).unshift(c)):(a[d]=a[d]||[]).push(c)}}function Nb(a,b,c,d){var e={},f=a===Jb;function g(h){var i;return e[h]=!0,r.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 Ob(a,b){var c,d,e=r.ajaxSettings.flatOptions||{};for(c in b)void 0!==b[c]&&((e[c]?a:d||(d={}))[c]=b[c]);return d&&r.extend(!0,a,d),a}function Pb(a,b,c){var d,e,f,g,h=a.contents,i=a.dataTypes;while("*"===i[0])i.shift(),void 0===d&&(d=a.mimeType||b.getResponseHeader("Content-Type"));if(d)for(e in h)if(h[e]&&h[e].test(d)){i.unshift(e);break}if(i[0]in c)f=i[0];else{for(e in c){if(!i[0]||a.converters[e+" "+i[0]]){f=e;break}g||(g=e)}f=f||g}if(f)return f!==i[0]&&i.unshift(f),c[f]}function Qb(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}}r.extend({active:0,lastModified:{},etag:{},ajaxSettings:{url:tb.href,type:"GET",isLocal:Fb.test(tb.protocol),global:!0,processData:!0,async:!0,contentType:"application/x-www-form-urlencoded; charset=UTF-8",accepts:{"*":Kb,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":JSON.parse,"text xml":r.parseXML},flatOptions:{url:!0,context:!0}},ajaxSetup:function(a,b){return b?Ob(Ob(a,r.ajaxSettings),b):Ob(r.ajaxSettings,a)},ajaxPrefilter:Mb(Ib),ajaxTransport:Mb(Jb),ajax:function(b,c){"object"==typeof b&&(c=b,b=void 0),c=c||{};var e,f,g,h,i,j,k,l,m,n,o=r.ajaxSetup({},c),p=o.context||o,q=o.context&&(p.nodeType||p.jquery)?r(p):r.event,s=r.Deferred(),t=r.Callbacks("once memory"),u=o.statusCode||{},v={},w={},x="canceled",y={readyState:0,getResponseHeader:function(a){var b;if(k){if(!h){h={};while(b=Eb.exec(g))h[b[1].toLowerCase()]=b[2]}b=h[a.toLowerCase()]}return null==b?null:b},getAllResponseHeaders:function(){return k?g:null},setRequestHeader:function(a,b){return null==k&&(a=w[a.toLowerCase()]=w[a.toLowerCase()]||a,v[a]=b),this},overrideMimeType:function(a){return null==k&&(o.mimeType=a),this},statusCode:function(a){var b;if(a)if(k)y.always(a[y.status]);else for(b in a)u[b]=[u[b],a[b]];return this},abort:function(a){var b=a||x;return e&&e.abort(b),A(0,b),this}};if(s.promise(y),o.url=((b||o.url||tb.href)+"").replace(Hb,tb.protocol+"//"),o.type=c.method||c.type||o.method||o.type,o.dataTypes=(o.dataType||"*").toLowerCase().match(L)||[""],null==o.crossDomain){j=d.createElement("a");try{j.href=o.url,j.href=j.href,o.crossDomain=Lb.protocol+"//"+Lb.host!=j.protocol+"//"+j.host}catch(z){o.crossDomain=!0}}if(o.data&&o.processData&&"string"!=typeof o.data&&(o.data=r.param(o.data,o.traditional)),Nb(Ib,o,c,y),k)return y;l=r.event&&o.global,l&&0===r.active++&&r.event.trigger("ajaxStart"),o.type=o.type.toUpperCase(),o.hasContent=!Gb.test(o.type),f=o.url.replace(Cb,""),o.hasContent?o.data&&o.processData&&0===(o.contentType||"").indexOf("application/x-www-form-urlencoded")&&(o.data=o.data.replace(Bb,"+")):(n=o.url.slice(f.length),o.data&&(f+=(vb.test(f)?"&":"?")+o.data,delete o.data),o.cache===!1&&(f=f.replace(Db,"$1"),n=(vb.test(f)?"&":"?")+"_="+ub++ +n),o.url=f+n),o.ifModified&&(r.lastModified[f]&&y.setRequestHeader("If-Modified-Since",r.lastModified[f]),r.etag[f]&&y.setRequestHeader("If-None-Match",r.etag[f])),(o.data&&o.hasContent&&o.contentType!==!1||c.contentType)&&y.setRequestHeader("Content-Type",o.contentType),y.setRequestHeader("Accept",o.dataTypes[0]&&o.accepts[o.dataTypes[0]]?o.accepts[o.dataTypes[0]]+("*"!==o.dataTypes[0]?", "+Kb+"; q=0.01":""):o.accepts["*"]);for(m in o.headers)y.setRequestHeader(m,o.headers[m]);if(o.beforeSend&&(o.beforeSend.call(p,y,o)===!1||k))return y.abort();if(x="abort",t.add(o.complete),y.done(o.success),y.fail(o.error),e=Nb(Jb,o,c,y)){if(y.readyState=1,l&&q.trigger("ajaxSend",[y,o]),k)return y;o.async&&o.timeout>0&&(i=a.setTimeout(function(){y.abort("timeout")},o.timeout));try{k=!1,e.send(v,A)}catch(z){if(k)throw z;A(-1,z)}}else A(-1,"No Transport");function A(b,c,d,h){var j,m,n,v,w,x=c;k||(k=!0,i&&a.clearTimeout(i),e=void 0,g=h||"",y.readyState=b>0?4:0,j=b>=200&&b<300||304===b,d&&(v=Pb(o,y,d)),v=Qb(o,v,y,j),j?(o.ifModified&&(w=y.getResponseHeader("Last-Modified"),w&&(r.lastModified[f]=w),w=y.getResponseHeader("etag"),w&&(r.etag[f]=w)),204===b||"HEAD"===o.type?x="nocontent":304===b?x="notmodified":(x=v.state,m=v.data,n=v.error,j=!n)):(n=x,!b&&x||(x="error",b<0&&(b=0))),y.status=b,y.statusText=(c||x)+"",j?s.resolveWith(p,[m,x,y]):s.rejectWith(p,[y,x,n]),y.statusCode(u),u=void 0,l&&q.trigger(j?"ajaxSuccess":"ajaxError",[y,o,j?m:n]),t.fireWith(p,[y,x]),l&&(q.trigger("ajaxComplete",[y,o]),--r.active||r.event.trigger("ajaxStop")))}return y},getJSON:function(a,b,c){return r.get(a,b,c,"json")},getScript:function(a,b){return r.get(a,void 0,b,"script")}}),r.each(["get","post"],function(a,b){r[b]=function(a,c,d,e){return r.isFunction(c)&&(e=e||d,d=c,c=void 0),r.ajax(r.extend({url:a,type:b,dataType:e,data:c,success:d},r.isPlainObject(a)&&a))}}),r._evalUrl=function(a){return r.ajax({url:a,type:"GET",dataType:"script",cache:!0,async:!1,global:!1,"throws":!0})},r.fn.extend({wrapAll:function(a){var b;return this[0]&&(r.isFunction(a)&&(a=a.call(this[0])),b=r(a,this[0].ownerDocument).eq(0).clone(!0),this[0].parentNode&&b.insertBefore(this[0]),b.map(function(){var a=this;while(a.firstElementChild)a=a.firstElementChild;return a}).append(this)),this},wrapInner:function(a){return r.isFunction(a)?this.each(function(b){r(this).wrapInner(a.call(this,b))}):this.each(function(){var b=r(this),c=b.contents();c.length?c.wrapAll(a):b.append(a)})},wrap:function(a){var b=r.isFunction(a);return this.each(function(c){r(this).wrapAll(b?a.call(this,c):a)})},unwrap:function(a){return this.parent(a).not("body").each(function(){r(this).replaceWith(this.childNodes)}),this}}),r.expr.pseudos.hidden=function(a){return!r.expr.pseudos.visible(a)},r.expr.pseudos.visible=function(a){return!!(a.offsetWidth||a.offsetHeight||a.getClientRects().length)},r.ajaxSettings.xhr=function(){try{return new a.XMLHttpRequest}catch(b){}};var Rb={0:200,1223:204},Sb=r.ajaxSettings.xhr();o.cors=!!Sb&&"withCredentials"in Sb,o.ajax=Sb=!!Sb,r.ajaxTransport(function(b){var c,d;if(o.cors||Sb&&!b.crossDomain)return{send:function(e,f){var g,h=b.xhr();if(h.open(b.type,b.url,b.async,b.username,b.password),b.xhrFields)for(g in b.xhrFields)h[g]=b.xhrFields[g];b.mimeType&&h.overrideMimeType&&h.overrideMimeType(b.mimeType),b.crossDomain||e["X-Requested-With"]||(e["X-Requested-With"]="XMLHttpRequest");for(g in e)h.setRequestHeader(g,e[g]);c=function(a){return function(){c&&(c=d=h.onload=h.onerror=h.onabort=h.onreadystatechange=null,"abort"===a?h.abort():"error"===a?"number"!=typeof h.status?f(0,"error"):f(h.status,h.statusText):f(Rb[h.status]||h.status,h.statusText,"text"!==(h.responseType||"text")||"string"!=typeof h.responseText?{binary:h.response}:{text:h.responseText},h.getAllResponseHeaders()))}},h.onload=c(),d=h.onerror=c("error"),void 0!==h.onabort?h.onabort=d:h.onreadystatechange=function(){4===h.readyState&&a.setTimeout(function(){c&&d()})},c=c("abort");try{h.send(b.hasContent&&b.data||null)}catch(i){if(c)throw i}},abort:function(){c&&c()}}}),r.ajaxPrefilter(function(a){a.crossDomain&&(a.contents.script=!1)}),r.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 r.globalEval(a),a}}}),r.ajaxPrefilter("script",function(a){void 0===a.cache&&(a.cache=!1),a.crossDomain&&(a.type="GET")}),r.ajaxTransport("script",function(a){if(a.crossDomain){var b,c;return{send:function(e,f){b=r("<script>").prop({charset:a.scriptCharset,src:a.url}).on("load error",c=function(a){b.remove(),c=null,a&&f("error"===a.type?404:200,a.type)}),d.head.appendChild(b[0])},abort:function(){c&&c()}}}});var Tb=[],Ub=/(=)\?(?=&|$)|\?\?/;r.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var a=Tb.pop()||r.expando+"_"+ub++;return this[a]=!0,a}}),r.ajaxPrefilter("json jsonp",function(b,c,d){var e,f,g,h=b.jsonp!==!1&&(Ub.test(b.url)?"url":"string"==typeof b.data&&0===(b.contentType||"").indexOf("application/x-www-form-urlencoded")&&Ub.test(b.data)&&"data");if(h||"jsonp"===b.dataTypes[0])return e=b.jsonpCallback=r.isFunction(b.jsonpCallback)?b.jsonpCallback():b.jsonpCallback,h?b[h]=b[h].replace(Ub,"$1"+e):b.jsonp!==!1&&(b.url+=(vb.test(b.url)?"&":"?")+b.jsonp+"="+e),b.converters["script json"]=function(){return g||r.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?r(a).removeProp(e):a[e]=f,b[e]&&(b.jsonpCallback=c.jsonpCallback,Tb.push(e)),g&&r.isFunction(f)&&f(g[0]),g=f=void 0}),"script"}),o.createHTMLDocument=function(){var a=d.implementation.createHTMLDocument("").body;return a.innerHTML="<form></form><form></form>",2===a.childNodes.length}(),r.parseHTML=function(a,b,c){if("string"!=typeof a)return[];"boolean"==typeof b&&(c=b,b=!1);var e,f,g;return b||(o.createHTMLDocument?(b=d.implementation.createHTMLDocument(""),e=b.createElement("base"),e.href=d.location.href,b.head.appendChild(e)):b=d),f=C.exec(a),g=!c&&[],f?[b.createElement(f[1])]:(f=qa([a],b,g),g&&g.length&&r(g).remove(),r.merge([],f.childNodes))},r.fn.load=function(a,b,c){var d,e,f,g=this,h=a.indexOf(" ");return h>-1&&(d=pb(a.slice(h)),a=a.slice(0,h)),r.isFunction(b)?(c=b,b=void 0):b&&"object"==typeof b&&(e="POST"),g.length>0&&r.ajax({url:a,type:e||"GET",dataType:"html",data:b}).done(function(a){f=arguments,g.html(d?r("<div>").append(r.parseHTML(a)).find(d):a)}).always(c&&function(a,b){g.each(function(){c.apply(this,f||[a.responseText,b,a])})}),this},r.each(["ajaxStart","ajaxStop","ajaxComplete","ajaxError","ajaxSuccess","ajaxSend"],function(a,b){r.fn[b]=function(a){return this.on(b,a)}}),r.expr.pseudos.animated=function(a){return r.grep(r.timers,function(b){return a===b.elem}).length},r.offset={setOffset:function(a,b,c){var d,e,f,g,h,i,j,k=r.css(a,"position"),l=r(a),m={};"static"===k&&(a.style.position="relative"),h=l.offset(),f=r.css(a,"top"),i=r.css(a,"left"),j=("absolute"===k||"fixed"===k)&&(f+i).indexOf("auto")>-1,j?(d=l.position(),g=d.top,e=d.left):(g=parseFloat(f)||0,e=parseFloat(i)||0),r.isFunction(b)&&(b=b.call(a,c,r.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)}},r.fn.extend({offset:function(a){if(arguments.length)return void 0===a?this:this.each(function(b){r.offset.setOffset(this,a,b)});var b,c,d,e,f=this[0];if(f)return f.getClientRects().length?(d=f.getBoundingClientRect(),b=f.ownerDocument,c=b.documentElement,e=b.defaultView,{top:d.top+e.pageYOffset-c.clientTop,left:d.left+e.pageXOffset-c.clientLeft}):{top:0,left:0}},position:function(){if(this[0]){var a,b,c=this[0],d={top:0,left:0};return"fixed"===r.css(c,"position")?b=c.getBoundingClientRect():(a=this.offsetParent(),b=this.offset(),B(a[0],"html")||(d=a.offset()),d={top:d.top+r.css(a[0],"borderTopWidth",!0),left:d.left+r.css(a[0],"borderLeftWidth",!0)}),{top:b.top-d.top-r.css(c,"marginTop",!0),left:b.left-d.left-r.css(c,"marginLeft",!0)}}},offsetParent:function(){return this.map(function(){var a=this.offsetParent;while(a&&"static"===r.css(a,"position"))a=a.offsetParent;return a||ra})}}),r.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(a,b){var c="pageYOffset"===b;r.fn[a]=function(d){return T(this,function(a,d,e){var f;return r.isWindow(a)?f=a:9===a.nodeType&&(f=a.defaultView),void 0===e?f?f[b]:a[d]:void(f?f.scrollTo(c?f.pageXOffset:e,c?e:f.pageYOffset):a[d]=e)},a,d,arguments.length)}}),r.each(["top","left"],function(a,b){r.cssHooks[b]=Pa(o.pixelPosition,function(a,c){if(c)return c=Oa(a,b),Ma.test(c)?r(a).position()[b]+"px":c})}),r.each({Height:"height",Width:"width"},function(a,b){r.each({padding:"inner"+a,content:b,"":"outer"+a},function(c,d){r.fn[d]=function(e,f){var g=arguments.length&&(c||"boolean"!=typeof e),h=c||(e===!0||f===!0?"margin":"border");return T(this,function(b,c,e){var f;return r.isWindow(b)?0===d.indexOf("outer")?b["inner"+a]:b.document.documentElement["client"+a]:9===b.nodeType?(f=b.documentElement,Math.max(b.body["scroll"+a],f["scroll"+a],b.body["offset"+a],f["offset"+a],f["client"+a])):void 0===e?r.css(b,c,h):r.style(b,c,e,h)},b,g?e:void 0,g)}})}),r.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)},holdReady:function(a){a?r.readyWait++:r.ready(!0)}}),r.isArray=Array.isArray,r.parseJSON=JSON.parse,r.nodeName=B,"function"==typeof define&&define.amd&&define("jquery",[],function(){return r});var Vb=a.jQuery,Wb=a.$;return r.noConflict=function(b){return a.$===r&&(a.$=Wb),b&&a.jQuery===r&&(a.jQuery=Vb),r},b||(a.jQuery=a.$=r),r});
+
+function createShiftArr(step) {
+
+	var space = '    ';
+	
+	if ( isNaN(parseInt(step)) ) {  // argument is string
+		space = step;
+	} else { // argument is integer
+		switch(step) {
+			case 1: space = ' '; break;
+			case 2: space = '  '; break;
+			case 3: space = '   '; break;
+			case 4: space = '    '; break;
+			case 5: space = '     '; break;
+			case 6: space = '      '; break;
+			case 7: space = '       '; break;
+			case 8: space = '        '; break;
+			case 9: space = '         '; break;
+			case 10: space = '          '; break;
+			case 11: space = '           '; break;
+			case 12: space = '            '; break;
+		}
+	}
+
+	var shift = ['\n']; // array of shifts
+	for(ix=0;ix<100;ix++){
+		shift.push(shift[ix]+space); 
+	}
+	return shift;
+}
+
+function vkbeautify(){
+	this.step = '    '; // 4 spaces
+	this.shift = createShiftArr(this.step);
+};
+
+vkbeautify.prototype.xml = function(text,step) {
+
+	var ar = text.replace(/>\s{0,}</g,"><")
+				 .replace(/</g,"~::~<")
+				 .replace(/\s*xmlns\:/g,"~::~xmlns:")
+				 .replace(/\s*xmlns\=/g,"~::~xmlns=")
+				 .split('~::~'),
+		len = ar.length,
+		inComment = false,
+		deep = 0,
+		str = '',
+		ix = 0,
+		shift = step ? createShiftArr(step) : this.shift;
+
+		for(ix=0;ix<len;ix++) {
+			// start comment or <![CDATA[...]]> or <!DOCTYPE //
+			if(ar[ix].search(/<!/) > -1) { 
+				str += shift[deep]+ar[ix];
+				inComment = true; 
+				// end comment  or <![CDATA[...]]> //
+				if(ar[ix].search(/-->/) > -1 || ar[ix].search(/\]>/) > -1 || ar[ix].search(/!DOCTYPE/) > -1 ) { 
+					inComment = false; 
+				}
+			} else 
+			// end comment  or <![CDATA[...]]> //
+			if(ar[ix].search(/-->/) > -1 || ar[ix].search(/\]>/) > -1) { 
+				str += ar[ix];
+				inComment = false; 
+			} else 
+			// <elm></elm> //
+			if( /^<\w/.exec(ar[ix-1]) && /^<\/\w/.exec(ar[ix]) &&
+				/^<[\w:\-\.\,]+/.exec(ar[ix-1]) == /^<\/[\w:\-\.\,]+/.exec(ar[ix])[0].replace('/','')) { 
+				str += ar[ix];
+				if(!inComment) deep--;
+			} else
+			 // <elm> //
+			if(ar[ix].search(/<\w/) > -1 && ar[ix].search(/<\//) == -1 && ar[ix].search(/\/>/) == -1 ) {
+				str = !inComment ? str += shift[deep++]+ar[ix] : str += ar[ix];
+			} else 
+			 // <elm>...</elm> //
+			if(ar[ix].search(/<\w/) > -1 && ar[ix].search(/<\//) > -1) {
+				str = !inComment ? str += shift[deep]+ar[ix] : str += ar[ix];
+			} else 
+			// </elm> //
+			if(ar[ix].search(/<\//) > -1) { 
+				str = !inComment ? str += shift[--deep]+ar[ix] : str += ar[ix];
+			} else 
+			// <elm/> //
+			if(ar[ix].search(/\/>/) > -1 ) { 
+				str = !inComment ? str += shift[deep]+ar[ix] : str += ar[ix];
+			} else 
+			// <? xml ... ?> //
+			if(ar[ix].search(/<\?/) > -1) { 
+				str += shift[deep]+ar[ix];
+			} else 
+			// xmlns //
+			if( ar[ix].search(/xmlns\:/) > -1  || ar[ix].search(/xmlns\=/) > -1) { 
+				str += shift[deep]+ar[ix];
+			} 
+			
+			else {
+				str += ar[ix];
+			}
+		}
+		
+	return  (str[0] == '\n') ? str.slice(1) : str;
+}
+
+vkbeautify.prototype.json = function(text,step) {
+
+	var step = step ? step : this.step;
+	
+	if (typeof JSON === 'undefined' ) return text; 
+	
+	if ( typeof text === "string" ) return JSON.stringify(JSON.parse(text), null, step);
+	if ( typeof text === "object" ) return JSON.stringify(text, null, step);
+		
+	return text; // text is not string nor object
+}
+
+vkbeautify.prototype.css = function(text, step) {
+
+	var ar = text.replace(/\s{1,}/g,' ')
+				.replace(/\{/g,"{~::~")
+				.replace(/\}/g,"~::~}~::~")
+				.replace(/\;/g,";~::~")
+				.replace(/\/\*/g,"~::~/*")
+				.replace(/\*\//g,"*/~::~")
+				.replace(/~::~\s{0,}~::~/g,"~::~")
+				.split('~::~'),
+		len = ar.length,
+		deep = 0,
+		str = '',
+		ix = 0,
+		shift = step ? createShiftArr(step) : this.shift;
+		
+		for(ix=0;ix<len;ix++) {
+
+			if( /\{/.exec(ar[ix]))  { 
+				str += shift[deep++]+ar[ix];
+			} else 
+			if( /\}/.exec(ar[ix]))  { 
+				str += shift[--deep]+ar[ix];
+			} else
+			if( /\*\\/.exec(ar[ix]))  { 
+				str += shift[deep]+ar[ix];
+			}
+			else {
+				str += shift[deep]+ar[ix];
+			}
+		}
+		return str.replace(/^\n{1,}/,'');
+}
+
+//----------------------------------------------------------------------------
+
+function isSubquery(str, parenthesisLevel) {
+	return  parenthesisLevel - (str.replace(/\(/g,'').length - str.replace(/\)/g,'').length )
+}
+
+function split_sql(str, tab) {
+
+	return str.replace(/\s{1,}/g," ")
+
+				.replace(/ AND /ig,"~::~"+tab+tab+"AND ")
+				.replace(/ BETWEEN /ig,"~::~"+tab+"BETWEEN ")
+				.replace(/ CASE /ig,"~::~"+tab+"CASE ")
+				.replace(/ ELSE /ig,"~::~"+tab+"ELSE ")
+				.replace(/ END /ig,"~::~"+tab+"END ")
+				.replace(/ FROM /ig,"~::~FROM ")
+				.replace(/ GROUP\s{1,}BY/ig,"~::~GROUP BY ")
+				.replace(/ HAVING /ig,"~::~HAVING ")
+				//.replace(/ SET /ig," SET~::~")
+				.replace(/ IN /ig," IN ")
+				
+				.replace(/ JOIN /ig,"~::~JOIN ")
+				.replace(/ CROSS~::~{1,}JOIN /ig,"~::~CROSS JOIN ")
+				.replace(/ INNER~::~{1,}JOIN /ig,"~::~INNER JOIN ")
+				.replace(/ LEFT~::~{1,}JOIN /ig,"~::~LEFT JOIN ")
+				.replace(/ RIGHT~::~{1,}JOIN /ig,"~::~RIGHT JOIN ")
+				
+				.replace(/ ON /ig,"~::~"+tab+"ON ")
+				.replace(/ OR /ig,"~::~"+tab+tab+"OR ")
+				.replace(/ ORDER\s{1,}BY/ig,"~::~ORDER BY ")
+				.replace(/ OVER /ig,"~::~"+tab+"OVER ")
+
+				.replace(/\(\s{0,}SELECT /ig,"~::~(SELECT ")
+				.replace(/\)\s{0,}SELECT /ig,")~::~SELECT ")
+				
+				.replace(/ THEN /ig," THEN~::~"+tab+"")
+				.replace(/ UNION /ig,"~::~UNION~::~")
+				.replace(/ USING /ig,"~::~USING ")
+				.replace(/ WHEN /ig,"~::~"+tab+"WHEN ")
+				.replace(/ WHERE /ig,"~::~WHERE ")
+				.replace(/ WITH /ig,"~::~WITH ")
+				
+				//.replace(/\,\s{0,}\(/ig,",~::~( ")
+				//.replace(/\,/ig,",~::~"+tab+tab+"")
+
+				.replace(/ ALL /ig," ALL ")
+				.replace(/ AS /ig," AS ")
+				.replace(/ ASC /ig," ASC ")	
+				.replace(/ DESC /ig," DESC ")	
+				.replace(/ DISTINCT /ig," DISTINCT ")
+				.replace(/ EXISTS /ig," EXISTS ")
+				.replace(/ NOT /ig," NOT ")
+				.replace(/ NULL /ig," NULL ")
+				.replace(/ LIKE /ig," LIKE ")
+				.replace(/\s{0,}SELECT /ig,"SELECT ")
+				.replace(/\s{0,}UPDATE /ig,"UPDATE ")
+				.replace(/ SET /ig," SET ")
+							
+				.replace(/~::~{1,}/g,"~::~")
+				.split('~::~');
+}
+
+vkbeautify.prototype.sql = function(text,step) {
+
+	var ar_by_quote = text.replace(/\s{1,}/g," ")
+							.replace(/\'/ig,"~::~\'")
+							.split('~::~'),
+		len = ar_by_quote.length,
+		ar = [],
+		deep = 0,
+		tab = this.step,//+this.step,
+		inComment = true,
+		inQuote = false,
+		parenthesisLevel = 0,
+		str = '',
+		ix = 0,
+		shift = step ? createShiftArr(step) : this.shift;;
+
+		for(ix=0;ix<len;ix++) {
+			if(ix%2) {
+				ar = ar.concat(ar_by_quote[ix]);
+			} else {
+				ar = ar.concat(split_sql(ar_by_quote[ix], tab) );
+			}
+		}
+		
+		len = ar.length;
+		for(ix=0;ix<len;ix++) {
+			
+			parenthesisLevel = isSubquery(ar[ix], parenthesisLevel);
+			
+			if( /\s{0,}\s{0,}SELECT\s{0,}/.exec(ar[ix]))  { 
+				ar[ix] = ar[ix].replace(/\,/g,",\n"+tab+tab+"")
+			} 
+			
+			if( /\s{0,}\s{0,}SET\s{0,}/.exec(ar[ix]))  { 
+				ar[ix] = ar[ix].replace(/\,/g,",\n"+tab+tab+"")
+			} 
+			
+			if( /\s{0,}\(\s{0,}SELECT\s{0,}/.exec(ar[ix]))  { 
+				deep++;
+				str += shift[deep]+ar[ix];
+			} else 
+			if( /\'/.exec(ar[ix]) )  { 
+				if(parenthesisLevel<1 && deep) {
+					deep--;
+				}
+				str += ar[ix];
+			}
+			else  { 
+				str += shift[deep]+ar[ix];
+				if(parenthesisLevel<1 && deep) {
+					deep--;
+				}
+			} 
+			var junk = 0;
+		}
+
+		str = str.replace(/^\n{1,}/,'').replace(/\n{1,}/g,"\n");
+		return str;
+}
+
+
+vkbeautify.prototype.xmlmin = function(text, preserveComments) {
+
+	var str = preserveComments ? text
+							   : text.replace(/\<![ \r\n\t]*(--([^\-]|[\r\n]|-[^\-])*--[ \r\n\t]*)\>/g,"")
+									 .replace(/[ \r\n\t]{1,}xmlns/g, ' xmlns');
+	return  str.replace(/>\s{0,}</g,"><"); 
+}
+
+vkbeautify.prototype.jsonmin = function(text) {
+
+	if (typeof JSON === 'undefined' ) return text; 
+	
+	return JSON.stringify(JSON.parse(text), null, 0); 
+				
+}
+
+vkbeautify.prototype.cssmin = function(text, preserveComments) {
+	
+	var str = preserveComments ? text
+							   : text.replace(/\/\*([^*]|[\r\n]|(\*+([^*/]|[\r\n])))*\*+\//g,"") ;
+
+	return str.replace(/\s{1,}/g,' ')
+			  .replace(/\{\s{1,}/g,"{")
+			  .replace(/\}\s{1,}/g,"}")
+			  .replace(/\;\s{1,}/g,";")
+			  .replace(/\/\*\s{1,}/g,"/*")
+			  .replace(/\*\/\s{1,}/g,"*/");
+}
+
+vkbeautify.prototype.sqlmin = function(text) {
+	return text.replace(/\s{1,}/g," ").replace(/\s{1,}\(/,"(").replace(/\s{1,}\)/,")");
+}
+
+window.vkbeautify = new vkbeautify();
+
+})();
+
+
+(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(){function n(n){return n&&(n.ownerDocument||n.document||n).documentElement}function t(n){return n&&(n.ownerDocument&&n.ownerDocument.defaultView||n.document&&n||n.defaultView)}function e(n,t){return t>n?-1:n>t?1:n>=t?0:NaN}function r(n){return null===n?NaN:+n}function i(n){return!isNaN(n)}function u(n){return{left:function(t,e,r,i){for(arguments.length<3&&(r=0),arguments.length<4&&(i=t.length);i>r;){var u=r+i>>>1;n(t[u],e)<0?r=u+1:i=u}return r},right:function(t,e,r,i){for(arguments.length<3&&(r=0),arguments.length<4&&(i=t.length);i>r;){var u=r+i>>>1;n(t[u],e)>0?i=u:r=u+1}return r}}}function o(n){return n.length}function a(n){for(var t=1;n*t%1;)t*=10;return t}function l(n,t){for(var e in t)Object.defineProperty(n.prototype,e,{value:t[e],enumerable:!1})}function c(){this._=Object.create(null)}function f(n){return(n+="")===bo||n[0]===_o?_o+n:n}function s(n){return(n+="")[0]===_o?n.slice(1):n}function h(n){return f(n)in this._}function p(n){return(n=f(n))in this._&&delete this._[n]}function g(){var n=[];for(var t in this._)n.push(s(t));return n}function v(){var n=0;for(var t in this._)++n;return n}function d(){for(var n in this._)return!1;return!0}function y(){this._=Object.create(null)}function m(n){return n}function M(n,t,e){return function(){var r=e.apply(t,arguments);return r===t?n:r}}function x(n,t){if(t in n)return t;t=t.charAt(0).toUpperCase()+t.slice(1);for(var e=0,r=wo.length;r>e;++e){var i=wo[e]+t;if(i in n)return i}}function b(){}function _(){}function w(n){function t(){for(var t,r=e,i=-1,u=r.length;++i<u;)(t=r[i].on)&&t.apply(this,arguments);return n}var e=[],r=new c;return t.on=function(t,i){var u,o=r.get(t);return arguments.length<2?o&&o.on:(o&&(o.on=null,e=e.slice(0,u=e.indexOf(o)).concat(e.slice(u+1)),r.remove(t)),i&&e.push(r.set(t,{on:i})),n)},t}function S(){ao.event.preventDefault()}function k(){for(var n,t=ao.event;n=t.sourceEvent;)t=n;return t}function N(n){for(var t=new _,e=0,r=arguments.length;++e<r;)t[arguments[e]]=w(t);return t.of=function(e,r){return function(i){try{var u=i.sourceEvent=ao.event;i.target=n,ao.event=i,t[i.type].apply(e,r)}finally{ao.event=u}}},t}function E(n){return ko(n,Co),n}function A(n){return"function"==typeof n?n:function(){return No(n,this)}}function C(n){return"function"==typeof n?n:function(){return Eo(n,this)}}function z(n,t){function e(){this.removeAttribute(n)}function r(){this.removeAttributeNS(n.space,n.local)}function i(){this.setAttribute(n,t)}function u(){this.setAttributeNS(n.space,n.local,t)}function o(){var e=t.apply(this,arguments);null==e?this.removeAttribute(n):this.setAttribute(n,e)}function a(){var e=t.apply(this,arguments);null==e?this.removeAttributeNS(n.space,n.local):this.setAttributeNS(n.space,n.local,e)}return n=ao.ns.qualify(n),null==t?n.local?r:e:"function"==typeof t?n.local?a:o:n.local?u:i}function L(n){return n.trim().replace(/\s+/g," ")}function q(n){return new RegExp("(?:^|\\s+)"+ao.requote(n)+"(?:\\s+|$)","g")}function T(n){return(n+"").trim().split(/^|\s+/)}function R(n,t){function e(){for(var e=-1;++e<i;)n[e](this,t)}function r(){for(var e=-1,r=t.apply(this,arguments);++e<i;)n[e](this,r)}n=T(n).map(D);var i=n.length;return"function"==typeof t?r:e}function D(n){var t=q(n);return function(e,r){if(i=e.classList)return r?i.add(n):i.remove(n);var i=e.getAttribute("class")||"";r?(t.lastIndex=0,t.test(i)||e.setAttribute("class",L(i+" "+n))):e.setAttribute("class",L(i.replace(t," ")))}}function P(n,t,e){function r(){this.style.removeProperty(n)}function i(){this.style.setProperty(n,t,e)}function u(){var r=t.apply(this,arguments);null==r?this.style.removeProperty(n):this.style.setProperty(n,r,e)}return null==t?r:"function"==typeof t?u:i}function U(n,t){function e(){delete this[n]}function r(){this[n]=t}function i(){var e=t.apply(this,arguments);null==e?delete this[n]:this[n]=e}return null==t?e:"function"==typeof t?i:r}function j(n){function t(){var t=this.ownerDocument,e=this.namespaceURI;return e===zo&&t.documentElement.namespaceURI===zo?t.createElement(n):t.createElementNS(e,n)}function e(){return this.ownerDocument.createElementNS(n.space,n.local)}return"function"==typeof n?n:(n=ao.ns.qualify(n)).local?e:t}function F(){var n=this.parentNode;n&&n.removeChild(this)}function H(n){return{__data__:n}}function O(n){return function(){return Ao(this,n)}}function I(n){return arguments.length||(n=e),function(t,e){return t&&e?n(t.__data__,e.__data__):!t-!e}}function Y(n,t){for(var e=0,r=n.length;r>e;e++)for(var i,u=n[e],o=0,a=u.length;a>o;o++)(i=u[o])&&t(i,o,e);return n}function Z(n){return ko(n,qo),n}function V(n){var t,e;return function(r,i,u){var o,a=n[u].update,l=a.length;for(u!=e&&(e=u,t=0),i>=t&&(t=i+1);!(o=a[t])&&++t<l;);return o}}function X(n,t,e){function r(){var t=this[o];t&&(this.removeEventListener(n,t,t.$),delete this[o])}function i(){var i=l(t,co(arguments));r.call(this),this.addEventListener(n,this[o]=i,i.$=e),i._=t}function u(){var t,e=new RegExp("^__on([^.]+)"+ao.requote(n)+"$");for(var r in this)if(t=r.match(e)){var i=this[r];this.removeEventListener(t[1],i,i.$),delete this[r]}}var o="__on"+n,a=n.indexOf("."),l=$;a>0&&(n=n.slice(0,a));var c=To.get(n);return c&&(n=c,l=B),a?t?i:r:t?b:u}function $(n,t){return function(e){var r=ao.event;ao.event=e,t[0]=this.__data__;try{n.apply(this,t)}finally{ao.event=r}}}function B(n,t){var e=$(n,t);return function(n){var t=this,r=n.relatedTarget;r&&(r===t||8&r.compareDocumentPosition(t))||e.call(t,n)}}function W(e){var r=".dragsuppress-"+ ++Do,i="click"+r,u=ao.select(t(e)).on("touchmove"+r,S).on("dragstart"+r,S).on("selectstart"+r,S);if(null==Ro&&(Ro="onselectstart"in e?!1:x(e.style,"userSelect")),Ro){var o=n(e).style,a=o[Ro];o[Ro]="none"}return function(n){if(u.on(r,null),Ro&&(o[Ro]=a),n){var t=function(){u.on(i,null)};u.on(i,function(){S(),t()},!0),setTimeout(t,0)}}}function J(n,e){e.changedTouches&&(e=e.changedTouches[0]);var r=n.ownerSVGElement||n;if(r.createSVGPoint){var i=r.createSVGPoint();if(0>Po){var u=t(n);if(u.scrollX||u.scrollY){r=ao.select("body").append("svg").style({position:"absolute",top:0,left:0,margin:0,padding:0,border:"none"},"important");var o=r[0][0].getScreenCTM();Po=!(o.f||o.e),r.remove()}}return Po?(i.x=e.pageX,i.y=e.pageY):(i.x=e.clientX,i.y=e.clientY),i=i.matrixTransform(n.getScreenCTM().inverse()),[i.x,i.y]}var a=n.getBoundingClientRect();return[e.clientX-a.left-n.clientLeft,e.clientY-a.top-n.clientTop]}function G(){return ao.event.changedTouches[0].identifier}function K(n){return n>0?1:0>n?-1:0}function Q(n,t,e){return(t[0]-n[0])*(e[1]-n[1])-(t[1]-n[1])*(e[0]-n[0])}function nn(n){return n>1?0:-1>n?Fo:Math.acos(n)}function tn(n){return n>1?Io:-1>n?-Io:Math.asin(n)}function en(n){return((n=Math.exp(n))-1/n)/2}function rn(n){return((n=Math.exp(n))+1/n)/2}function un(n){return((n=Math.exp(2*n))-1)/(n+1)}function on(n){return(n=Math.sin(n/2))*n}function an(){}function ln(n,t,e){return this instanceof ln?(this.h=+n,this.s=+t,void(this.l=+e)):arguments.length<2?n instanceof ln?new ln(n.h,n.s,n.l):_n(""+n,wn,ln):new ln(n,t,e)}function cn(n,t,e){function r(n){return n>360?n-=360:0>n&&(n+=360),60>n?u+(o-u)*n/60:180>n?o:240>n?u+(o-u)*(240-n)/60:u}function i(n){return Math.round(255*r(n))}var u,o;return n=isNaN(n)?0:(n%=360)<0?n+360:n,t=isNaN(t)?0:0>t?0:t>1?1:t,e=0>e?0:e>1?1:e,o=.5>=e?e*(1+t):e+t-e*t,u=2*e-o,new mn(i(n+120),i(n),i(n-120))}function fn(n,t,e){return this instanceof fn?(this.h=+n,this.c=+t,void(this.l=+e)):arguments.length<2?n instanceof fn?new fn(n.h,n.c,n.l):n instanceof hn?gn(n.l,n.a,n.b):gn((n=Sn((n=ao.rgb(n)).r,n.g,n.b)).l,n.a,n.b):new fn(n,t,e)}function sn(n,t,e){return isNaN(n)&&(n=0),isNaN(t)&&(t=0),new hn(e,Math.cos(n*=Yo)*t,Math.sin(n)*t)}function hn(n,t,e){return this instanceof hn?(this.l=+n,this.a=+t,void(this.b=+e)):arguments.length<2?n instanceof hn?new hn(n.l,n.a,n.b):n instanceof fn?sn(n.h,n.c,n.l):Sn((n=mn(n)).r,n.g,n.b):new hn(n,t,e)}function pn(n,t,e){var r=(n+16)/116,i=r+t/500,u=r-e/200;return i=vn(i)*na,r=vn(r)*ta,u=vn(u)*ea,new mn(yn(3.2404542*i-1.5371385*r-.4985314*u),yn(-.969266*i+1.8760108*r+.041556*u),yn(.0556434*i-.2040259*r+1.0572252*u))}function gn(n,t,e){return n>0?new fn(Math.atan2(e,t)*Zo,Math.sqrt(t*t+e*e),n):new fn(NaN,NaN,n)}function vn(n){return n>.206893034?n*n*n:(n-4/29)/7.787037}function dn(n){return n>.008856?Math.pow(n,1/3):7.787037*n+4/29}function yn(n){return Math.round(255*(.00304>=n?12.92*n:1.055*Math.pow(n,1/2.4)-.055))}function mn(n,t,e){return this instanceof mn?(this.r=~~n,this.g=~~t,void(this.b=~~e)):arguments.length<2?n instanceof mn?new mn(n.r,n.g,n.b):_n(""+n,mn,cn):new mn(n,t,e)}function Mn(n){return new mn(n>>16,n>>8&255,255&n)}function xn(n){return Mn(n)+""}function bn(n){return 16>n?"0"+Math.max(0,n).toString(16):Math.min(255,n).toString(16)}function _n(n,t,e){var r,i,u,o=0,a=0,l=0;if(r=/([a-z]+)\((.*)\)/.exec(n=n.toLowerCase()))switch(i=r[2].split(","),r[1]){case"hsl":return e(parseFloat(i[0]),parseFloat(i[1])/100,parseFloat(i[2])/100);case"rgb":return t(Nn(i[0]),Nn(i[1]),Nn(i[2]))}return(u=ua.get(n))?t(u.r,u.g,u.b):(null==n||"#"!==n.charAt(0)||isNaN(u=parseInt(n.slice(1),16))||(4===n.length?(o=(3840&u)>>4,o=o>>4|o,a=240&u,a=a>>4|a,l=15&u,l=l<<4|l):7===n.length&&(o=(16711680&u)>>16,a=(65280&u)>>8,l=255&u)),t(o,a,l))}function wn(n,t,e){var r,i,u=Math.min(n/=255,t/=255,e/=255),o=Math.max(n,t,e),a=o-u,l=(o+u)/2;return a?(i=.5>l?a/(o+u):a/(2-o-u),r=n==o?(t-e)/a+(e>t?6:0):t==o?(e-n)/a+2:(n-t)/a+4,r*=60):(r=NaN,i=l>0&&1>l?0:r),new ln(r,i,l)}function Sn(n,t,e){n=kn(n),t=kn(t),e=kn(e);var r=dn((.4124564*n+.3575761*t+.1804375*e)/na),i=dn((.2126729*n+.7151522*t+.072175*e)/ta),u=dn((.0193339*n+.119192*t+.9503041*e)/ea);return hn(116*i-16,500*(r-i),200*(i-u))}function kn(n){return(n/=255)<=.04045?n/12.92:Math.pow((n+.055)/1.055,2.4)}function Nn(n){var t=parseFloat(n);return"%"===n.charAt(n.length-1)?Math.round(2.55*t):t}function En(n){return"function"==typeof n?n:function(){return n}}function An(n){return function(t,e,r){return 2===arguments.length&&"function"==typeof e&&(r=e,e=null),Cn(t,e,n,r)}}function Cn(n,t,e,r){function i(){var n,t=l.status;if(!t&&Ln(l)||t>=200&&300>t||304===t){try{n=e.call(u,l)}catch(r){return void o.error.call(u,r)}o.load.call(u,n)}else o.error.call(u,l)}var u={},o=ao.dispatch("beforesend","progress","load","error"),a={},l=new XMLHttpRequest,c=null;return!this.XDomainRequest||"withCredentials"in l||!/^(http(s)?:)?\/\//.test(n)||(l=new XDomainRequest),"onload"in l?l.onload=l.onerror=i:l.onreadystatechange=function(){l.readyState>3&&i()},l.onprogress=function(n){var t=ao.event;ao.event=n;try{o.progress.call(u,l)}finally{ao.event=t}},u.header=function(n,t){return n=(n+"").toLowerCase(),arguments.length<2?a[n]:(null==t?delete a[n]:a[n]=t+"",u)},u.mimeType=function(n){return arguments.length?(t=null==n?null:n+"",u):t},u.responseType=function(n){return arguments.length?(c=n,u):c},u.response=function(n){return e=n,u},["get","post"].forEach(function(n){u[n]=function(){return u.send.apply(u,[n].concat(co(arguments)))}}),u.send=function(e,r,i){if(2===arguments.length&&"function"==typeof r&&(i=r,r=null),l.open(e,n,!0),null==t||"accept"in a||(a.accept=t+",*/*"),l.setRequestHeader)for(var f in a)l.setRequestHeader(f,a[f]);return null!=t&&l.overrideMimeType&&l.overrideMimeType(t),null!=c&&(l.responseType=c),null!=i&&u.on("error",i).on("load",function(n){i(null,n)}),o.beforesend.call(u,l),l.send(null==r?null:r),u},u.abort=function(){return l.abort(),u},ao.rebind(u,o,"on"),null==r?u:u.get(zn(r))}function zn(n){return 1===n.length?function(t,e){n(null==t?e:null)}:n}function Ln(n){var t=n.responseType;return t&&"text"!==t?n.response:n.responseText}function qn(n,t,e){var r=arguments.length;2>r&&(t=0),3>r&&(e=Date.now());var i=e+t,u={c:n,t:i,n:null};return aa?aa.n=u:oa=u,aa=u,la||(ca=clearTimeout(ca),la=1,fa(Tn)),u}function Tn(){var n=Rn(),t=Dn()-n;t>24?(isFinite(t)&&(clearTimeout(ca),ca=setTimeout(Tn,t)),la=0):(la=1,fa(Tn))}function Rn(){for(var n=Date.now(),t=oa;t;)n>=t.t&&t.c(n-t.t)&&(t.c=null),t=t.n;return n}function Dn(){for(var n,t=oa,e=1/0;t;)t.c?(t.t<e&&(e=t.t),t=(n=t).n):t=n?n.n=t.n:oa=t.n;return aa=n,e}function Pn(n,t){return t-(n?Math.ceil(Math.log(n)/Math.LN10):1)}function Un(n,t){var e=Math.pow(10,3*xo(8-t));return{scale:t>8?function(n){return n/e}:function(n){return n*e},symbol:n}}function jn(n){var t=n.decimal,e=n.thousands,r=n.grouping,i=n.currency,u=r&&e?function(n,t){for(var i=n.length,u=[],o=0,a=r[0],l=0;i>0&&a>0&&(l+a+1>t&&(a=Math.max(1,t-l)),u.push(n.substring(i-=a,i+a)),!((l+=a+1)>t));)a=r[o=(o+1)%r.length];return u.reverse().join(e)}:m;return function(n){var e=ha.exec(n),r=e[1]||" ",o=e[2]||">",a=e[3]||"-",l=e[4]||"",c=e[5],f=+e[6],s=e[7],h=e[8],p=e[9],g=1,v="",d="",y=!1,m=!0;switch(h&&(h=+h.substring(1)),(c||"0"===r&&"="===o)&&(c=r="0",o="="),p){case"n":s=!0,p="g";break;case"%":g=100,d="%",p="f";break;case"p":g=100,d="%",p="r";break;case"b":case"o":case"x":case"X":"#"===l&&(v="0"+p.toLowerCase());case"c":m=!1;case"d":y=!0,h=0;break;case"s":g=-1,p="r"}"$"===l&&(v=i[0],d=i[1]),"r"!=p||h||(p="g"),null!=h&&("g"==p?h=Math.max(1,Math.min(21,h)):"e"!=p&&"f"!=p||(h=Math.max(0,Math.min(20,h)))),p=pa.get(p)||Fn;var M=c&&s;return function(n){var e=d;if(y&&n%1)return"";var i=0>n||0===n&&0>1/n?(n=-n,"-"):"-"===a?"":a;if(0>g){var l=ao.formatPrefix(n,h);n=l.scale(n),e=l.symbol+d}else n*=g;n=p(n,h);var x,b,_=n.lastIndexOf(".");if(0>_){var w=m?n.lastIndexOf("e"):-1;0>w?(x=n,b=""):(x=n.substring(0,w),b=n.substring(w))}else x=n.substring(0,_),b=t+n.substring(_+1);!c&&s&&(x=u(x,1/0));var S=v.length+x.length+b.length+(M?0:i.length),k=f>S?new Array(S=f-S+1).join(r):"";return M&&(x=u(k+x,k.length?f-b.length:1/0)),i+=v,n=x+b,("<"===o?i+n+k:">"===o?k+i+n:"^"===o?k.substring(0,S>>=1)+i+n+k.substring(S):i+(M?n:k+n))+e}}}function Fn(n){return n+""}function Hn(){this._=new Date(arguments.length>1?Date.UTC.apply(this,arguments):arguments[0])}function On(n,t,e){function r(t){var e=n(t),r=u(e,1);return r-t>t-e?e:r}function i(e){return t(e=n(new va(e-1)),1),e}function u(n,e){return t(n=new va(+n),e),n}function o(n,r,u){var o=i(n),a=[];if(u>1)for(;r>o;)e(o)%u||a.push(new Date(+o)),t(o,1);else for(;r>o;)a.push(new Date(+o)),t(o,1);return a}function a(n,t,e){try{va=Hn;var r=new Hn;return r._=n,o(r,t,e)}finally{va=Date}}n.floor=n,n.round=r,n.ceil=i,n.offset=u,n.range=o;var l=n.utc=In(n);return l.floor=l,l.round=In(r),l.ceil=In(i),l.offset=In(u),l.range=a,n}function In(n){return function(t,e){try{va=Hn;var r=new Hn;return r._=t,n(r,e)._}finally{va=Date}}}function Yn(n){function t(n){function t(t){for(var e,i,u,o=[],a=-1,l=0;++a<r;)37===n.charCodeAt(a)&&(o.push(n.slice(l,a)),null!=(i=ya[e=n.charAt(++a)])&&(e=n.charAt(++a)),(u=A[e])&&(e=u(t,null==i?"e"===e?" ":"0":i)),o.push(e),l=a+1);return o.push(n.slice(l,a)),o.join("")}var r=n.length;return t.parse=function(t){var r={y:1900,m:0,d:1,H:0,M:0,S:0,L:0,Z:null},i=e(r,n,t,0);if(i!=t.length)return null;"p"in r&&(r.H=r.H%12+12*r.p);var u=null!=r.Z&&va!==Hn,o=new(u?Hn:va);return"j"in r?o.setFullYear(r.y,0,r.j):"W"in r||"U"in r?("w"in r||(r.w="W"in r?1:0),o.setFullYear(r.y,0,1),o.setFullYear(r.y,0,"W"in r?(r.w+6)%7+7*r.W-(o.getDay()+5)%7:r.w+7*r.U-(o.getDay()+6)%7)):o.setFullYear(r.y,r.m,r.d),o.setHours(r.H+(r.Z/100|0),r.M+r.Z%100,r.S,r.L),u?o._:o},t.toString=function(){return n},t}function e(n,t,e,r){for(var i,u,o,a=0,l=t.length,c=e.length;l>a;){if(r>=c)return-1;if(i=t.charCodeAt(a++),37===i){if(o=t.charAt(a++),u=C[o in ya?t.charAt(a++):o],!u||(r=u(n,e,r))<0)return-1}else if(i!=e.charCodeAt(r++))return-1}return r}function r(n,t,e){_.lastIndex=0;var r=_.exec(t.slice(e));return r?(n.w=w.get(r[0].toLowerCase()),e+r[0].length):-1}function i(n,t,e){x.lastIndex=0;var r=x.exec(t.slice(e));return r?(n.w=b.get(r[0].toLowerCase()),e+r[0].length):-1}function u(n,t,e){N.lastIndex=0;var r=N.exec(t.slice(e));return r?(n.m=E.get(r[0].toLowerCase()),e+r[0].length):-1}function o(n,t,e){S.lastIndex=0;var r=S.exec(t.slice(e));return r?(n.m=k.get(r[0].toLowerCase()),e+r[0].length):-1}function a(n,t,r){return e(n,A.c.toString(),t,r)}function l(n,t,r){return e(n,A.x.toString(),t,r)}function c(n,t,r){return e(n,A.X.toString(),t,r)}function f(n,t,e){var r=M.get(t.slice(e,e+=2).toLowerCase());return null==r?-1:(n.p=r,e)}var s=n.dateTime,h=n.date,p=n.time,g=n.periods,v=n.days,d=n.shortDays,y=n.months,m=n.shortMonths;t.utc=function(n){function e(n){try{va=Hn;var t=new va;return t._=n,r(t)}finally{va=Date}}var r=t(n);return e.parse=function(n){try{va=Hn;var t=r.parse(n);return t&&t._}finally{va=Date}},e.toString=r.toString,e},t.multi=t.utc.multi=ct;var M=ao.map(),x=Vn(v),b=Xn(v),_=Vn(d),w=Xn(d),S=Vn(y),k=Xn(y),N=Vn(m),E=Xn(m);g.forEach(function(n,t){M.set(n.toLowerCase(),t)});var A={a:function(n){return d[n.getDay()]},A:function(n){return v[n.getDay()]},b:function(n){return m[n.getMonth()]},B:function(n){return y[n.getMonth()]},c:t(s),d:function(n,t){return Zn(n.getDate(),t,2)},e:function(n,t){return Zn(n.getDate(),t,2)},H:function(n,t){return Zn(n.getHours(),t,2)},I:function(n,t){return Zn(n.getHours()%12||12,t,2)},j:function(n,t){return Zn(1+ga.dayOfYear(n),t,3)},L:function(n,t){return Zn(n.getMilliseconds(),t,3)},m:function(n,t){return Zn(n.getMonth()+1,t,2)},M:function(n,t){return Zn(n.getMinutes(),t,2)},p:function(n){return g[+(n.getHours()>=12)]},S:function(n,t){return Zn(n.getSeconds(),t,2)},U:function(n,t){return Zn(ga.sundayOfYear(n),t,2)},w:function(n){return n.getDay()},W:function(n,t){return Zn(ga.mondayOfYear(n),t,2)},x:t(h),X:t(p),y:function(n,t){return Zn(n.getFullYear()%100,t,2)},Y:function(n,t){return Zn(n.getFullYear()%1e4,t,4)},Z:at,"%":function(){return"%"}},C={a:r,A:i,b:u,B:o,c:a,d:tt,e:tt,H:rt,I:rt,j:et,L:ot,m:nt,M:it,p:f,S:ut,U:Bn,w:$n,W:Wn,x:l,X:c,y:Gn,Y:Jn,Z:Kn,"%":lt};return t}function Zn(n,t,e){var r=0>n?"-":"",i=(r?-n:n)+"",u=i.length;return r+(e>u?new Array(e-u+1).join(t)+i:i)}function Vn(n){return new RegExp("^(?:"+n.map(ao.requote).join("|")+")","i")}function Xn(n){for(var t=new c,e=-1,r=n.length;++e<r;)t.set(n[e].toLowerCase(),e);return t}function $n(n,t,e){ma.lastIndex=0;var r=ma.exec(t.slice(e,e+1));return r?(n.w=+r[0],e+r[0].length):-1}function Bn(n,t,e){ma.lastIndex=0;var r=ma.exec(t.slice(e));return r?(n.U=+r[0],e+r[0].length):-1}function Wn(n,t,e){ma.lastIndex=0;var r=ma.exec(t.slice(e));return r?(n.W=+r[0],e+r[0].length):-1}function Jn(n,t,e){ma.lastIndex=0;var r=ma.exec(t.slice(e,e+4));return r?(n.y=+r[0],e+r[0].length):-1}function Gn(n,t,e){ma.lastIndex=0;var r=ma.exec(t.slice(e,e+2));return r?(n.y=Qn(+r[0]),e+r[0].length):-1}function Kn(n,t,e){return/^[+-]\d{4}$/.test(t=t.slice(e,e+5))?(n.Z=-t,e+5):-1}function Qn(n){return n+(n>68?1900:2e3)}function nt(n,t,e){ma.lastIndex=0;var r=ma.exec(t.slice(e,e+2));return r?(n.m=r[0]-1,e+r[0].length):-1}function tt(n,t,e){ma.lastIndex=0;var r=ma.exec(t.slice(e,e+2));return r?(n.d=+r[0],e+r[0].length):-1}function et(n,t,e){ma.lastIndex=0;var r=ma.exec(t.slice(e,e+3));return r?(n.j=+r[0],e+r[0].length):-1}function rt(n,t,e){ma.lastIndex=0;var r=ma.exec(t.slice(e,e+2));return r?(n.H=+r[0],e+r[0].length):-1}function it(n,t,e){ma.lastIndex=0;var r=ma.exec(t.slice(e,e+2));return r?(n.M=+r[0],e+r[0].length):-1}function ut(n,t,e){ma.lastIndex=0;var r=ma.exec(t.slice(e,e+2));return r?(n.S=+r[0],e+r[0].length):-1}function ot(n,t,e){ma.lastIndex=0;var r=ma.exec(t.slice(e,e+3));return r?(n.L=+r[0],e+r[0].length):-1}function at(n){var t=n.getTimezoneOffset(),e=t>0?"-":"+",r=xo(t)/60|0,i=xo(t)%60;return e+Zn(r,"0",2)+Zn(i,"0",2)}function lt(n,t,e){Ma.lastIndex=0;var r=Ma.exec(t.slice(e,e+1));return r?e+r[0].length:-1}function ct(n){for(var t=n.length,e=-1;++e<t;)n[e][0]=this(n[e][0]);return function(t){for(var e=0,r=n[e];!r[1](t);)r=n[++e];return r[0](t)}}function ft(){}function st(n,t,e){var r=e.s=n+t,i=r-n,u=r-i;e.t=n-u+(t-i)}function ht(n,t){n&&wa.hasOwnProperty(n.type)&&wa[n.type](n,t)}function pt(n,t,e){var r,i=-1,u=n.length-e;for(t.lineStart();++i<u;)r=n[i],t.point(r[0],r[1],r[2]);t.lineEnd()}function gt(n,t){var e=-1,r=n.length;for(t.polygonStart();++e<r;)pt(n[e],t,1);t.polygonEnd()}function vt(){function n(n,t){n*=Yo,t=t*Yo/2+Fo/4;var e=n-r,o=e>=0?1:-1,a=o*e,l=Math.cos(t),c=Math.sin(t),f=u*c,s=i*l+f*Math.cos(a),h=f*o*Math.sin(a);ka.add(Math.atan2(h,s)),r=n,i=l,u=c}var t,e,r,i,u;Na.point=function(o,a){Na.point=n,r=(t=o)*Yo,i=Math.cos(a=(e=a)*Yo/2+Fo/4),u=Math.sin(a)},Na.lineEnd=function(){n(t,e)}}function dt(n){var t=n[0],e=n[1],r=Math.cos(e);return[r*Math.cos(t),r*Math.sin(t),Math.sin(e)]}function yt(n,t){return n[0]*t[0]+n[1]*t[1]+n[2]*t[2]}function mt(n,t){return[n[1]*t[2]-n[2]*t[1],n[2]*t[0]-n[0]*t[2],n[0]*t[1]-n[1]*t[0]]}function Mt(n,t){n[0]+=t[0],n[1]+=t[1],n[2]+=t[2]}function xt(n,t){return[n[0]*t,n[1]*t,n[2]*t]}function bt(n){var t=Math.sqrt(n[0]*n[0]+n[1]*n[1]+n[2]*n[2]);n[0]/=t,n[1]/=t,n[2]/=t}function _t(n){return[Math.atan2(n[1],n[0]),tn(n[2])]}function wt(n,t){return xo(n[0]-t[0])<Uo&&xo(n[1]-t[1])<Uo}function St(n,t){n*=Yo;var e=Math.cos(t*=Yo);kt(e*Math.cos(n),e*Math.sin(n),Math.sin(t))}function kt(n,t,e){++Ea,Ca+=(n-Ca)/Ea,za+=(t-za)/Ea,La+=(e-La)/Ea}function Nt(){function n(n,i){n*=Yo;var u=Math.cos(i*=Yo),o=u*Math.cos(n),a=u*Math.sin(n),l=Math.sin(i),c=Math.atan2(Math.sqrt((c=e*l-r*a)*c+(c=r*o-t*l)*c+(c=t*a-e*o)*c),t*o+e*a+r*l);Aa+=c,qa+=c*(t+(t=o)),Ta+=c*(e+(e=a)),Ra+=c*(r+(r=l)),kt(t,e,r)}var t,e,r;ja.point=function(i,u){i*=Yo;var o=Math.cos(u*=Yo);t=o*Math.cos(i),e=o*Math.sin(i),r=Math.sin(u),ja.point=n,kt(t,e,r)}}function Et(){ja.point=St}function At(){function n(n,t){n*=Yo;var e=Math.cos(t*=Yo),o=e*Math.cos(n),a=e*Math.sin(n),l=Math.sin(t),c=i*l-u*a,f=u*o-r*l,s=r*a-i*o,h=Math.sqrt(c*c+f*f+s*s),p=r*o+i*a+u*l,g=h&&-nn(p)/h,v=Math.atan2(h,p);Da+=g*c,Pa+=g*f,Ua+=g*s,Aa+=v,qa+=v*(r+(r=o)),Ta+=v*(i+(i=a)),Ra+=v*(u+(u=l)),kt(r,i,u)}var t,e,r,i,u;ja.point=function(o,a){t=o,e=a,ja.point=n,o*=Yo;var l=Math.cos(a*=Yo);r=l*Math.cos(o),i=l*Math.sin(o),u=Math.sin(a),kt(r,i,u)},ja.lineEnd=function(){n(t,e),ja.lineEnd=Et,ja.point=St}}function Ct(n,t){function e(e,r){return e=n(e,r),t(e[0],e[1])}return n.invert&&t.invert&&(e.invert=function(e,r){return e=t.invert(e,r),e&&n.invert(e[0],e[1])}),e}function zt(){return!0}function Lt(n,t,e,r,i){var u=[],o=[];if(n.forEach(function(n){if(!((t=n.length-1)<=0)){var t,e=n[0],r=n[t];if(wt(e,r)){i.lineStart();for(var a=0;t>a;++a)i.point((e=n[a])[0],e[1]);return void i.lineEnd()}var l=new Tt(e,n,null,!0),c=new Tt(e,null,l,!1);l.o=c,u.push(l),o.push(c),l=new Tt(r,n,null,!1),c=new Tt(r,null,l,!0),l.o=c,u.push(l),o.push(c)}}),o.sort(t),qt(u),qt(o),u.length){for(var a=0,l=e,c=o.length;c>a;++a)o[a].e=l=!l;for(var f,s,h=u[0];;){for(var p=h,g=!0;p.v;)if((p=p.n)===h)return;f=p.z,i.lineStart();do{if(p.v=p.o.v=!0,p.e){if(g)for(var a=0,c=f.length;c>a;++a)i.point((s=f[a])[0],s[1]);else r(p.x,p.n.x,1,i);p=p.n}else{if(g){f=p.p.z;for(var a=f.length-1;a>=0;--a)i.point((s=f[a])[0],s[1])}else r(p.x,p.p.x,-1,i);p=p.p}p=p.o,f=p.z,g=!g}while(!p.v);i.lineEnd()}}}function qt(n){if(t=n.length){for(var t,e,r=0,i=n[0];++r<t;)i.n=e=n[r],e.p=i,i=e;i.n=e=n[0],e.p=i}}function Tt(n,t,e,r){this.x=n,this.z=t,this.o=e,this.e=r,this.v=!1,this.n=this.p=null}function Rt(n,t,e,r){return function(i,u){function o(t,e){var r=i(t,e);n(t=r[0],e=r[1])&&u.point(t,e)}function a(n,t){var e=i(n,t);d.point(e[0],e[1])}function l(){m.point=a,d.lineStart()}function c(){m.point=o,d.lineEnd()}function f(n,t){v.push([n,t]);var e=i(n,t);x.point(e[0],e[1])}function s(){x.lineStart(),v=[]}function h(){f(v[0][0],v[0][1]),x.lineEnd();var n,t=x.clean(),e=M.buffer(),r=e.length;if(v.pop(),g.push(v),v=null,r)if(1&t){n=e[0];var i,r=n.length-1,o=-1;if(r>0){for(b||(u.polygonStart(),b=!0),u.lineStart();++o<r;)u.point((i=n[o])[0],i[1]);u.lineEnd()}}else r>1&&2&t&&e.push(e.pop().concat(e.shift())),p.push(e.filter(Dt))}var p,g,v,d=t(u),y=i.invert(r[0],r[1]),m={point:o,lineStart:l,lineEnd:c,polygonStart:function(){m.point=f,m.lineStart=s,m.lineEnd=h,p=[],g=[]},polygonEnd:function(){m.point=o,m.lineStart=l,m.lineEnd=c,p=ao.merge(p);var n=Ot(y,g);p.length?(b||(u.polygonStart(),b=!0),Lt(p,Ut,n,e,u)):n&&(b||(u.polygonStart(),b=!0),u.lineStart(),e(null,null,1,u),u.lineEnd()),b&&(u.polygonEnd(),b=!1),p=g=null},sphere:function(){u.polygonStart(),u.lineStart(),e(null,null,1,u),u.lineEnd(),u.polygonEnd()}},M=Pt(),x=t(M),b=!1;return m}}function Dt(n){return n.length>1}function Pt(){var n,t=[];return{lineStart:function(){t.push(n=[])},point:function(t,e){n.push([t,e])},lineEnd:b,buffer:function(){var e=t;return t=[],n=null,e},rejoin:function(){t.length>1&&t.push(t.pop().concat(t.shift()))}}}function Ut(n,t){return((n=n.x)[0]<0?n[1]-Io-Uo:Io-n[1])-((t=t.x)[0]<0?t[1]-Io-Uo:Io-t[1])}function jt(n){var t,e=NaN,r=NaN,i=NaN;return{lineStart:function(){n.lineStart(),t=1},point:function(u,o){var a=u>0?Fo:-Fo,l=xo(u-e);xo(l-Fo)<Uo?(n.point(e,r=(r+o)/2>0?Io:-Io),n.point(i,r),n.lineEnd(),n.lineStart(),n.point(a,r),n.point(u,r),t=0):i!==a&&l>=Fo&&(xo(e-i)<Uo&&(e-=i*Uo),xo(u-a)<Uo&&(u-=a*Uo),r=Ft(e,r,u,o),n.point(i,r),n.lineEnd(),n.lineStart(),n.point(a,r),t=0),n.point(e=u,r=o),i=a},lineEnd:function(){n.lineEnd(),e=r=NaN},clean:function(){return 2-t}}}function Ft(n,t,e,r){var i,u,o=Math.sin(n-e);return xo(o)>Uo?Math.atan((Math.sin(t)*(u=Math.cos(r))*Math.sin(e)-Math.sin(r)*(i=Math.cos(t))*Math.sin(n))/(i*u*o)):(t+r)/2}function Ht(n,t,e,r){var i;if(null==n)i=e*Io,r.point(-Fo,i),r.point(0,i),r.point(Fo,i),r.point(Fo,0),r.point(Fo,-i),r.point(0,-i),r.point(-Fo,-i),r.point(-Fo,0),r.point(-Fo,i);else if(xo(n[0]-t[0])>Uo){var u=n[0]<t[0]?Fo:-Fo;i=e*u/2,r.point(-u,i),r.point(0,i),r.point(u,i)}else r.point(t[0],t[1])}function Ot(n,t){var e=n[0],r=n[1],i=[Math.sin(e),-Math.cos(e),0],u=0,o=0;ka.reset();for(var a=0,l=t.length;l>a;++a){var c=t[a],f=c.length;if(f)for(var s=c[0],h=s[0],p=s[1]/2+Fo/4,g=Math.sin(p),v=Math.cos(p),d=1;;){d===f&&(d=0),n=c[d];var y=n[0],m=n[1]/2+Fo/4,M=Math.sin(m),x=Math.cos(m),b=y-h,_=b>=0?1:-1,w=_*b,S=w>Fo,k=g*M;if(ka.add(Math.atan2(k*_*Math.sin(w),v*x+k*Math.cos(w))),u+=S?b+_*Ho:b,S^h>=e^y>=e){var N=mt(dt(s),dt(n));bt(N);var E=mt(i,N);bt(E);var A=(S^b>=0?-1:1)*tn(E[2]);(r>A||r===A&&(N[0]||N[1]))&&(o+=S^b>=0?1:-1)}if(!d++)break;h=y,g=M,v=x,s=n}}return(-Uo>u||Uo>u&&-Uo>ka)^1&o}function It(n){function t(n,t){return Math.cos(n)*Math.cos(t)>u}function e(n){var e,u,l,c,f;return{lineStart:function(){c=l=!1,f=1},point:function(s,h){var p,g=[s,h],v=t(s,h),d=o?v?0:i(s,h):v?i(s+(0>s?Fo:-Fo),h):0;if(!e&&(c=l=v)&&n.lineStart(),v!==l&&(p=r(e,g),(wt(e,p)||wt(g,p))&&(g[0]+=Uo,g[1]+=Uo,v=t(g[0],g[1]))),v!==l)f=0,v?(n.lineStart(),p=r(g,e),n.point(p[0],p[1])):(p=r(e,g),n.point(p[0],p[1]),n.lineEnd()),e=p;else if(a&&e&&o^v){var y;d&u||!(y=r(g,e,!0))||(f=0,o?(n.lineStart(),n.point(y[0][0],y[0][1]),n.point(y[1][0],y[1][1]),n.lineEnd()):(n.point(y[1][0],y[1][1]),n.lineEnd(),n.lineStart(),n.point(y[0][0],y[0][1])))}!v||e&&wt(e,g)||n.point(g[0],g[1]),e=g,l=v,u=d},lineEnd:function(){l&&n.lineEnd(),e=null},clean:function(){return f|(c&&l)<<1}}}function r(n,t,e){var r=dt(n),i=dt(t),o=[1,0,0],a=mt(r,i),l=yt(a,a),c=a[0],f=l-c*c;if(!f)return!e&&n;var s=u*l/f,h=-u*c/f,p=mt(o,a),g=xt(o,s),v=xt(a,h);Mt(g,v);var d=p,y=yt(g,d),m=yt(d,d),M=y*y-m*(yt(g,g)-1);if(!(0>M)){var x=Math.sqrt(M),b=xt(d,(-y-x)/m);if(Mt(b,g),b=_t(b),!e)return b;var _,w=n[0],S=t[0],k=n[1],N=t[1];w>S&&(_=w,w=S,S=_);var E=S-w,A=xo(E-Fo)<Uo,C=A||Uo>E;if(!A&&k>N&&(_=k,k=N,N=_),C?A?k+N>0^b[1]<(xo(b[0]-w)<Uo?k:N):k<=b[1]&&b[1]<=N:E>Fo^(w<=b[0]&&b[0]<=S)){var z=xt(d,(-y+x)/m);return Mt(z,g),[b,_t(z)]}}}function i(t,e){var r=o?n:Fo-n,i=0;return-r>t?i|=1:t>r&&(i|=2),-r>e?i|=4:e>r&&(i|=8),i}var u=Math.cos(n),o=u>0,a=xo(u)>Uo,l=ve(n,6*Yo);return Rt(t,e,l,o?[0,-n]:[-Fo,n-Fo])}function Yt(n,t,e,r){return function(i){var u,o=i.a,a=i.b,l=o.x,c=o.y,f=a.x,s=a.y,h=0,p=1,g=f-l,v=s-c;if(u=n-l,g||!(u>0)){if(u/=g,0>g){if(h>u)return;p>u&&(p=u)}else if(g>0){if(u>p)return;u>h&&(h=u)}if(u=e-l,g||!(0>u)){if(u/=g,0>g){if(u>p)return;u>h&&(h=u)}else if(g>0){if(h>u)return;p>u&&(p=u)}if(u=t-c,v||!(u>0)){if(u/=v,0>v){if(h>u)return;p>u&&(p=u)}else if(v>0){if(u>p)return;u>h&&(h=u)}if(u=r-c,v||!(0>u)){if(u/=v,0>v){if(u>p)return;u>h&&(h=u)}else if(v>0){if(h>u)return;p>u&&(p=u)}return h>0&&(i.a={x:l+h*g,y:c+h*v}),1>p&&(i.b={x:l+p*g,y:c+p*v}),i}}}}}}function Zt(n,t,e,r){function i(r,i){return xo(r[0]-n)<Uo?i>0?0:3:xo(r[0]-e)<Uo?i>0?2:1:xo(r[1]-t)<Uo?i>0?1:0:i>0?3:2}function u(n,t){return o(n.x,t.x)}function o(n,t){var e=i(n,1),r=i(t,1);return e!==r?e-r:0===e?t[1]-n[1]:1===e?n[0]-t[0]:2===e?n[1]-t[1]:t[0]-n[0]}return function(a){function l(n){for(var t=0,e=d.length,r=n[1],i=0;e>i;++i)for(var u,o=1,a=d[i],l=a.length,c=a[0];l>o;++o)u=a[o],c[1]<=r?u[1]>r&&Q(c,u,n)>0&&++t:u[1]<=r&&Q(c,u,n)<0&&--t,c=u;return 0!==t}function c(u,a,l,c){var f=0,s=0;if(null==u||(f=i(u,l))!==(s=i(a,l))||o(u,a)<0^l>0){do c.point(0===f||3===f?n:e,f>1?r:t);while((f=(f+l+4)%4)!==s)}else c.point(a[0],a[1])}function f(i,u){return i>=n&&e>=i&&u>=t&&r>=u}function s(n,t){f(n,t)&&a.point(n,t)}function h(){C.point=g,d&&d.push(y=[]),S=!0,w=!1,b=_=NaN}function p(){v&&(g(m,M),x&&w&&E.rejoin(),v.push(E.buffer())),C.point=s,w&&a.lineEnd()}function g(n,t){n=Math.max(-Ha,Math.min(Ha,n)),t=Math.max(-Ha,Math.min(Ha,t));var e=f(n,t);if(d&&y.push([n,t]),S)m=n,M=t,x=e,S=!1,e&&(a.lineStart(),a.point(n,t));else if(e&&w)a.point(n,t);else{var r={a:{x:b,y:_},b:{x:n,y:t}};A(r)?(w||(a.lineStart(),a.point(r.a.x,r.a.y)),a.point(r.b.x,r.b.y),e||a.lineEnd(),k=!1):e&&(a.lineStart(),a.point(n,t),k=!1)}b=n,_=t,w=e}var v,d,y,m,M,x,b,_,w,S,k,N=a,E=Pt(),A=Yt(n,t,e,r),C={point:s,lineStart:h,lineEnd:p,polygonStart:function(){a=E,v=[],d=[],k=!0},polygonEnd:function(){a=N,v=ao.merge(v);var t=l([n,r]),e=k&&t,i=v.length;(e||i)&&(a.polygonStart(),e&&(a.lineStart(),c(null,null,1,a),a.lineEnd()),i&&Lt(v,u,t,c,a),a.polygonEnd()),v=d=y=null}};return C}}function Vt(n){var t=0,e=Fo/3,r=ae(n),i=r(t,e);return i.parallels=function(n){return arguments.length?r(t=n[0]*Fo/180,e=n[1]*Fo/180):[t/Fo*180,e/Fo*180]},i}function Xt(n,t){function e(n,t){var e=Math.sqrt(u-2*i*Math.sin(t))/i;return[e*Math.sin(n*=i),o-e*Math.cos(n)]}var r=Math.sin(n),i=(r+Math.sin(t))/2,u=1+r*(2*i-r),o=Math.sqrt(u)/i;return e.invert=function(n,t){var e=o-t;return[Math.atan2(n,e)/i,tn((u-(n*n+e*e)*i*i)/(2*i))]},e}function $t(){function n(n,t){Ia+=i*n-r*t,r=n,i=t}var t,e,r,i;$a.point=function(u,o){$a.point=n,t=r=u,e=i=o},$a.lineEnd=function(){n(t,e)}}function Bt(n,t){Ya>n&&(Ya=n),n>Va&&(Va=n),Za>t&&(Za=t),t>Xa&&(Xa=t)}function Wt(){function n(n,t){o.push("M",n,",",t,u)}function t(n,t){o.push("M",n,",",t),a.point=e}function e(n,t){o.push("L",n,",",t)}function r(){a.point=n}function i(){o.push("Z")}var u=Jt(4.5),o=[],a={point:n,lineStart:function(){a.point=t},lineEnd:r,polygonStart:function(){a.lineEnd=i},polygonEnd:function(){a.lineEnd=r,a.point=n},pointRadius:function(n){return u=Jt(n),a},result:function(){if(o.length){var n=o.join("");return o=[],n}}};return a}function Jt(n){return"m0,"+n+"a"+n+","+n+" 0 1,1 0,"+-2*n+"a"+n+","+n+" 0 1,1 0,"+2*n+"z"}function Gt(n,t){Ca+=n,za+=t,++La}function Kt(){function n(n,r){var i=n-t,u=r-e,o=Math.sqrt(i*i+u*u);qa+=o*(t+n)/2,Ta+=o*(e+r)/2,Ra+=o,Gt(t=n,e=r)}var t,e;Wa.point=function(r,i){Wa.point=n,Gt(t=r,e=i)}}function Qt(){Wa.point=Gt}function ne(){function n(n,t){var e=n-r,u=t-i,o=Math.sqrt(e*e+u*u);qa+=o*(r+n)/2,Ta+=o*(i+t)/2,Ra+=o,o=i*n-r*t,Da+=o*(r+n),Pa+=o*(i+t),Ua+=3*o,Gt(r=n,i=t)}var t,e,r,i;Wa.point=function(u,o){Wa.point=n,Gt(t=r=u,e=i=o)},Wa.lineEnd=function(){n(t,e)}}function te(n){function t(t,e){n.moveTo(t+o,e),n.arc(t,e,o,0,Ho)}function e(t,e){n.moveTo(t,e),a.point=r}function r(t,e){n.lineTo(t,e)}function i(){a.point=t}function u(){n.closePath()}var o=4.5,a={point:t,lineStart:function(){a.point=e},lineEnd:i,polygonStart:function(){a.lineEnd=u},polygonEnd:function(){a.lineEnd=i,a.point=t},pointRadius:function(n){return o=n,a},result:b};return a}function ee(n){function t(n){return(a?r:e)(n)}function e(t){return ue(t,function(e,r){e=n(e,r),t.point(e[0],e[1])})}function r(t){function e(e,r){e=n(e,r),t.point(e[0],e[1])}function r(){M=NaN,S.point=u,t.lineStart()}function u(e,r){var u=dt([e,r]),o=n(e,r);i(M,x,m,b,_,w,M=o[0],x=o[1],m=e,b=u[0],_=u[1],w=u[2],a,t),t.point(M,x)}function o(){S.point=e,t.lineEnd()}function l(){
+r(),S.point=c,S.lineEnd=f}function c(n,t){u(s=n,h=t),p=M,g=x,v=b,d=_,y=w,S.point=u}function f(){i(M,x,m,b,_,w,p,g,s,v,d,y,a,t),S.lineEnd=o,o()}var s,h,p,g,v,d,y,m,M,x,b,_,w,S={point:e,lineStart:r,lineEnd:o,polygonStart:function(){t.polygonStart(),S.lineStart=l},polygonEnd:function(){t.polygonEnd(),S.lineStart=r}};return S}function i(t,e,r,a,l,c,f,s,h,p,g,v,d,y){var m=f-t,M=s-e,x=m*m+M*M;if(x>4*u&&d--){var b=a+p,_=l+g,w=c+v,S=Math.sqrt(b*b+_*_+w*w),k=Math.asin(w/=S),N=xo(xo(w)-1)<Uo||xo(r-h)<Uo?(r+h)/2:Math.atan2(_,b),E=n(N,k),A=E[0],C=E[1],z=A-t,L=C-e,q=M*z-m*L;(q*q/x>u||xo((m*z+M*L)/x-.5)>.3||o>a*p+l*g+c*v)&&(i(t,e,r,a,l,c,A,C,N,b/=S,_/=S,w,d,y),y.point(A,C),i(A,C,N,b,_,w,f,s,h,p,g,v,d,y))}}var u=.5,o=Math.cos(30*Yo),a=16;return t.precision=function(n){return arguments.length?(a=(u=n*n)>0&&16,t):Math.sqrt(u)},t}function re(n){var t=ee(function(t,e){return n([t*Zo,e*Zo])});return function(n){return le(t(n))}}function ie(n){this.stream=n}function ue(n,t){return{point:t,sphere:function(){n.sphere()},lineStart:function(){n.lineStart()},lineEnd:function(){n.lineEnd()},polygonStart:function(){n.polygonStart()},polygonEnd:function(){n.polygonEnd()}}}function oe(n){return ae(function(){return n})()}function ae(n){function t(n){return n=a(n[0]*Yo,n[1]*Yo),[n[0]*h+l,c-n[1]*h]}function e(n){return n=a.invert((n[0]-l)/h,(c-n[1])/h),n&&[n[0]*Zo,n[1]*Zo]}function r(){a=Ct(o=se(y,M,x),u);var n=u(v,d);return l=p-n[0]*h,c=g+n[1]*h,i()}function i(){return f&&(f.valid=!1,f=null),t}var u,o,a,l,c,f,s=ee(function(n,t){return n=u(n,t),[n[0]*h+l,c-n[1]*h]}),h=150,p=480,g=250,v=0,d=0,y=0,M=0,x=0,b=Fa,_=m,w=null,S=null;return t.stream=function(n){return f&&(f.valid=!1),f=le(b(o,s(_(n)))),f.valid=!0,f},t.clipAngle=function(n){return arguments.length?(b=null==n?(w=n,Fa):It((w=+n)*Yo),i()):w},t.clipExtent=function(n){return arguments.length?(S=n,_=n?Zt(n[0][0],n[0][1],n[1][0],n[1][1]):m,i()):S},t.scale=function(n){return arguments.length?(h=+n,r()):h},t.translate=function(n){return arguments.length?(p=+n[0],g=+n[1],r()):[p,g]},t.center=function(n){return arguments.length?(v=n[0]%360*Yo,d=n[1]%360*Yo,r()):[v*Zo,d*Zo]},t.rotate=function(n){return arguments.length?(y=n[0]%360*Yo,M=n[1]%360*Yo,x=n.length>2?n[2]%360*Yo:0,r()):[y*Zo,M*Zo,x*Zo]},ao.rebind(t,s,"precision"),function(){return u=n.apply(this,arguments),t.invert=u.invert&&e,r()}}function le(n){return ue(n,function(t,e){n.point(t*Yo,e*Yo)})}function ce(n,t){return[n,t]}function fe(n,t){return[n>Fo?n-Ho:-Fo>n?n+Ho:n,t]}function se(n,t,e){return n?t||e?Ct(pe(n),ge(t,e)):pe(n):t||e?ge(t,e):fe}function he(n){return function(t,e){return t+=n,[t>Fo?t-Ho:-Fo>t?t+Ho:t,e]}}function pe(n){var t=he(n);return t.invert=he(-n),t}function ge(n,t){function e(n,t){var e=Math.cos(t),a=Math.cos(n)*e,l=Math.sin(n)*e,c=Math.sin(t),f=c*r+a*i;return[Math.atan2(l*u-f*o,a*r-c*i),tn(f*u+l*o)]}var r=Math.cos(n),i=Math.sin(n),u=Math.cos(t),o=Math.sin(t);return e.invert=function(n,t){var e=Math.cos(t),a=Math.cos(n)*e,l=Math.sin(n)*e,c=Math.sin(t),f=c*u-l*o;return[Math.atan2(l*u+c*o,a*r+f*i),tn(f*r-a*i)]},e}function ve(n,t){var e=Math.cos(n),r=Math.sin(n);return function(i,u,o,a){var l=o*t;null!=i?(i=de(e,i),u=de(e,u),(o>0?u>i:i>u)&&(i+=o*Ho)):(i=n+o*Ho,u=n-.5*l);for(var c,f=i;o>0?f>u:u>f;f-=l)a.point((c=_t([e,-r*Math.cos(f),-r*Math.sin(f)]))[0],c[1])}}function de(n,t){var e=dt(t);e[0]-=n,bt(e);var r=nn(-e[1]);return((-e[2]<0?-r:r)+2*Math.PI-Uo)%(2*Math.PI)}function ye(n,t,e){var r=ao.range(n,t-Uo,e).concat(t);return function(n){return r.map(function(t){return[n,t]})}}function me(n,t,e){var r=ao.range(n,t-Uo,e).concat(t);return function(n){return r.map(function(t){return[t,n]})}}function Me(n){return n.source}function xe(n){return n.target}function be(n,t,e,r){var i=Math.cos(t),u=Math.sin(t),o=Math.cos(r),a=Math.sin(r),l=i*Math.cos(n),c=i*Math.sin(n),f=o*Math.cos(e),s=o*Math.sin(e),h=2*Math.asin(Math.sqrt(on(r-t)+i*o*on(e-n))),p=1/Math.sin(h),g=h?function(n){var t=Math.sin(n*=h)*p,e=Math.sin(h-n)*p,r=e*l+t*f,i=e*c+t*s,o=e*u+t*a;return[Math.atan2(i,r)*Zo,Math.atan2(o,Math.sqrt(r*r+i*i))*Zo]}:function(){return[n*Zo,t*Zo]};return g.distance=h,g}function _e(){function n(n,i){var u=Math.sin(i*=Yo),o=Math.cos(i),a=xo((n*=Yo)-t),l=Math.cos(a);Ja+=Math.atan2(Math.sqrt((a=o*Math.sin(a))*a+(a=r*u-e*o*l)*a),e*u+r*o*l),t=n,e=u,r=o}var t,e,r;Ga.point=function(i,u){t=i*Yo,e=Math.sin(u*=Yo),r=Math.cos(u),Ga.point=n},Ga.lineEnd=function(){Ga.point=Ga.lineEnd=b}}function we(n,t){function e(t,e){var r=Math.cos(t),i=Math.cos(e),u=n(r*i);return[u*i*Math.sin(t),u*Math.sin(e)]}return e.invert=function(n,e){var r=Math.sqrt(n*n+e*e),i=t(r),u=Math.sin(i),o=Math.cos(i);return[Math.atan2(n*u,r*o),Math.asin(r&&e*u/r)]},e}function Se(n,t){function e(n,t){o>0?-Io+Uo>t&&(t=-Io+Uo):t>Io-Uo&&(t=Io-Uo);var e=o/Math.pow(i(t),u);return[e*Math.sin(u*n),o-e*Math.cos(u*n)]}var r=Math.cos(n),i=function(n){return Math.tan(Fo/4+n/2)},u=n===t?Math.sin(n):Math.log(r/Math.cos(t))/Math.log(i(t)/i(n)),o=r*Math.pow(i(n),u)/u;return u?(e.invert=function(n,t){var e=o-t,r=K(u)*Math.sqrt(n*n+e*e);return[Math.atan2(n,e)/u,2*Math.atan(Math.pow(o/r,1/u))-Io]},e):Ne}function ke(n,t){function e(n,t){var e=u-t;return[e*Math.sin(i*n),u-e*Math.cos(i*n)]}var r=Math.cos(n),i=n===t?Math.sin(n):(r-Math.cos(t))/(t-n),u=r/i+n;return xo(i)<Uo?ce:(e.invert=function(n,t){var e=u-t;return[Math.atan2(n,e)/i,u-K(i)*Math.sqrt(n*n+e*e)]},e)}function Ne(n,t){return[n,Math.log(Math.tan(Fo/4+t/2))]}function Ee(n){var t,e=oe(n),r=e.scale,i=e.translate,u=e.clipExtent;return e.scale=function(){var n=r.apply(e,arguments);return n===e?t?e.clipExtent(null):e:n},e.translate=function(){var n=i.apply(e,arguments);return n===e?t?e.clipExtent(null):e:n},e.clipExtent=function(n){var o=u.apply(e,arguments);if(o===e){if(t=null==n){var a=Fo*r(),l=i();u([[l[0]-a,l[1]-a],[l[0]+a,l[1]+a]])}}else t&&(o=null);return o},e.clipExtent(null)}function Ae(n,t){return[Math.log(Math.tan(Fo/4+t/2)),-n]}function Ce(n){return n[0]}function ze(n){return n[1]}function Le(n){for(var t=n.length,e=[0,1],r=2,i=2;t>i;i++){for(;r>1&&Q(n[e[r-2]],n[e[r-1]],n[i])<=0;)--r;e[r++]=i}return e.slice(0,r)}function qe(n,t){return n[0]-t[0]||n[1]-t[1]}function Te(n,t,e){return(e[0]-t[0])*(n[1]-t[1])<(e[1]-t[1])*(n[0]-t[0])}function Re(n,t,e,r){var i=n[0],u=e[0],o=t[0]-i,a=r[0]-u,l=n[1],c=e[1],f=t[1]-l,s=r[1]-c,h=(a*(l-c)-s*(i-u))/(s*o-a*f);return[i+h*o,l+h*f]}function De(n){var t=n[0],e=n[n.length-1];return!(t[0]-e[0]||t[1]-e[1])}function Pe(){rr(this),this.edge=this.site=this.circle=null}function Ue(n){var t=cl.pop()||new Pe;return t.site=n,t}function je(n){Be(n),ol.remove(n),cl.push(n),rr(n)}function Fe(n){var t=n.circle,e=t.x,r=t.cy,i={x:e,y:r},u=n.P,o=n.N,a=[n];je(n);for(var l=u;l.circle&&xo(e-l.circle.x)<Uo&&xo(r-l.circle.cy)<Uo;)u=l.P,a.unshift(l),je(l),l=u;a.unshift(l),Be(l);for(var c=o;c.circle&&xo(e-c.circle.x)<Uo&&xo(r-c.circle.cy)<Uo;)o=c.N,a.push(c),je(c),c=o;a.push(c),Be(c);var f,s=a.length;for(f=1;s>f;++f)c=a[f],l=a[f-1],nr(c.edge,l.site,c.site,i);l=a[0],c=a[s-1],c.edge=Ke(l.site,c.site,null,i),$e(l),$e(c)}function He(n){for(var t,e,r,i,u=n.x,o=n.y,a=ol._;a;)if(r=Oe(a,o)-u,r>Uo)a=a.L;else{if(i=u-Ie(a,o),!(i>Uo)){r>-Uo?(t=a.P,e=a):i>-Uo?(t=a,e=a.N):t=e=a;break}if(!a.R){t=a;break}a=a.R}var l=Ue(n);if(ol.insert(t,l),t||e){if(t===e)return Be(t),e=Ue(t.site),ol.insert(l,e),l.edge=e.edge=Ke(t.site,l.site),$e(t),void $e(e);if(!e)return void(l.edge=Ke(t.site,l.site));Be(t),Be(e);var c=t.site,f=c.x,s=c.y,h=n.x-f,p=n.y-s,g=e.site,v=g.x-f,d=g.y-s,y=2*(h*d-p*v),m=h*h+p*p,M=v*v+d*d,x={x:(d*m-p*M)/y+f,y:(h*M-v*m)/y+s};nr(e.edge,c,g,x),l.edge=Ke(c,n,null,x),e.edge=Ke(n,g,null,x),$e(t),$e(e)}}function Oe(n,t){var e=n.site,r=e.x,i=e.y,u=i-t;if(!u)return r;var o=n.P;if(!o)return-(1/0);e=o.site;var a=e.x,l=e.y,c=l-t;if(!c)return a;var f=a-r,s=1/u-1/c,h=f/c;return s?(-h+Math.sqrt(h*h-2*s*(f*f/(-2*c)-l+c/2+i-u/2)))/s+r:(r+a)/2}function Ie(n,t){var e=n.N;if(e)return Oe(e,t);var r=n.site;return r.y===t?r.x:1/0}function Ye(n){this.site=n,this.edges=[]}function Ze(n){for(var t,e,r,i,u,o,a,l,c,f,s=n[0][0],h=n[1][0],p=n[0][1],g=n[1][1],v=ul,d=v.length;d--;)if(u=v[d],u&&u.prepare())for(a=u.edges,l=a.length,o=0;l>o;)f=a[o].end(),r=f.x,i=f.y,c=a[++o%l].start(),t=c.x,e=c.y,(xo(r-t)>Uo||xo(i-e)>Uo)&&(a.splice(o,0,new tr(Qe(u.site,f,xo(r-s)<Uo&&g-i>Uo?{x:s,y:xo(t-s)<Uo?e:g}:xo(i-g)<Uo&&h-r>Uo?{x:xo(e-g)<Uo?t:h,y:g}:xo(r-h)<Uo&&i-p>Uo?{x:h,y:xo(t-h)<Uo?e:p}:xo(i-p)<Uo&&r-s>Uo?{x:xo(e-p)<Uo?t:s,y:p}:null),u.site,null)),++l)}function Ve(n,t){return t.angle-n.angle}function Xe(){rr(this),this.x=this.y=this.arc=this.site=this.cy=null}function $e(n){var t=n.P,e=n.N;if(t&&e){var r=t.site,i=n.site,u=e.site;if(r!==u){var o=i.x,a=i.y,l=r.x-o,c=r.y-a,f=u.x-o,s=u.y-a,h=2*(l*s-c*f);if(!(h>=-jo)){var p=l*l+c*c,g=f*f+s*s,v=(s*p-c*g)/h,d=(l*g-f*p)/h,s=d+a,y=fl.pop()||new Xe;y.arc=n,y.site=i,y.x=v+o,y.y=s+Math.sqrt(v*v+d*d),y.cy=s,n.circle=y;for(var m=null,M=ll._;M;)if(y.y<M.y||y.y===M.y&&y.x<=M.x){if(!M.L){m=M.P;break}M=M.L}else{if(!M.R){m=M;break}M=M.R}ll.insert(m,y),m||(al=y)}}}}function Be(n){var t=n.circle;t&&(t.P||(al=t.N),ll.remove(t),fl.push(t),rr(t),n.circle=null)}function We(n){for(var t,e=il,r=Yt(n[0][0],n[0][1],n[1][0],n[1][1]),i=e.length;i--;)t=e[i],(!Je(t,n)||!r(t)||xo(t.a.x-t.b.x)<Uo&&xo(t.a.y-t.b.y)<Uo)&&(t.a=t.b=null,e.splice(i,1))}function Je(n,t){var e=n.b;if(e)return!0;var r,i,u=n.a,o=t[0][0],a=t[1][0],l=t[0][1],c=t[1][1],f=n.l,s=n.r,h=f.x,p=f.y,g=s.x,v=s.y,d=(h+g)/2,y=(p+v)/2;if(v===p){if(o>d||d>=a)return;if(h>g){if(u){if(u.y>=c)return}else u={x:d,y:l};e={x:d,y:c}}else{if(u){if(u.y<l)return}else u={x:d,y:c};e={x:d,y:l}}}else if(r=(h-g)/(v-p),i=y-r*d,-1>r||r>1)if(h>g){if(u){if(u.y>=c)return}else u={x:(l-i)/r,y:l};e={x:(c-i)/r,y:c}}else{if(u){if(u.y<l)return}else u={x:(c-i)/r,y:c};e={x:(l-i)/r,y:l}}else if(v>p){if(u){if(u.x>=a)return}else u={x:o,y:r*o+i};e={x:a,y:r*a+i}}else{if(u){if(u.x<o)return}else u={x:a,y:r*a+i};e={x:o,y:r*o+i}}return n.a=u,n.b=e,!0}function Ge(n,t){this.l=n,this.r=t,this.a=this.b=null}function Ke(n,t,e,r){var i=new Ge(n,t);return il.push(i),e&&nr(i,n,t,e),r&&nr(i,t,n,r),ul[n.i].edges.push(new tr(i,n,t)),ul[t.i].edges.push(new tr(i,t,n)),i}function Qe(n,t,e){var r=new Ge(n,null);return r.a=t,r.b=e,il.push(r),r}function nr(n,t,e,r){n.a||n.b?n.l===e?n.b=r:n.a=r:(n.a=r,n.l=t,n.r=e)}function tr(n,t,e){var r=n.a,i=n.b;this.edge=n,this.site=t,this.angle=e?Math.atan2(e.y-t.y,e.x-t.x):n.l===t?Math.atan2(i.x-r.x,r.y-i.y):Math.atan2(r.x-i.x,i.y-r.y)}function er(){this._=null}function rr(n){n.U=n.C=n.L=n.R=n.P=n.N=null}function ir(n,t){var e=t,r=t.R,i=e.U;i?i.L===e?i.L=r:i.R=r:n._=r,r.U=i,e.U=r,e.R=r.L,e.R&&(e.R.U=e),r.L=e}function ur(n,t){var e=t,r=t.L,i=e.U;i?i.L===e?i.L=r:i.R=r:n._=r,r.U=i,e.U=r,e.L=r.R,e.L&&(e.L.U=e),r.R=e}function or(n){for(;n.L;)n=n.L;return n}function ar(n,t){var e,r,i,u=n.sort(lr).pop();for(il=[],ul=new Array(n.length),ol=new er,ll=new er;;)if(i=al,u&&(!i||u.y<i.y||u.y===i.y&&u.x<i.x))u.x===e&&u.y===r||(ul[u.i]=new Ye(u),He(u),e=u.x,r=u.y),u=n.pop();else{if(!i)break;Fe(i.arc)}t&&(We(t),Ze(t));var o={cells:ul,edges:il};return ol=ll=il=ul=null,o}function lr(n,t){return t.y-n.y||t.x-n.x}function cr(n,t,e){return(n.x-e.x)*(t.y-n.y)-(n.x-t.x)*(e.y-n.y)}function fr(n){return n.x}function sr(n){return n.y}function hr(){return{leaf:!0,nodes:[],point:null,x:null,y:null}}function pr(n,t,e,r,i,u){if(!n(t,e,r,i,u)){var o=.5*(e+i),a=.5*(r+u),l=t.nodes;l[0]&&pr(n,l[0],e,r,o,a),l[1]&&pr(n,l[1],o,r,i,a),l[2]&&pr(n,l[2],e,a,o,u),l[3]&&pr(n,l[3],o,a,i,u)}}function gr(n,t,e,r,i,u,o){var a,l=1/0;return function c(n,f,s,h,p){if(!(f>u||s>o||r>h||i>p)){if(g=n.point){var g,v=t-n.x,d=e-n.y,y=v*v+d*d;if(l>y){var m=Math.sqrt(l=y);r=t-m,i=e-m,u=t+m,o=e+m,a=g}}for(var M=n.nodes,x=.5*(f+h),b=.5*(s+p),_=t>=x,w=e>=b,S=w<<1|_,k=S+4;k>S;++S)if(n=M[3&S])switch(3&S){case 0:c(n,f,s,x,b);break;case 1:c(n,x,s,h,b);break;case 2:c(n,f,b,x,p);break;case 3:c(n,x,b,h,p)}}}(n,r,i,u,o),a}function vr(n,t){n=ao.rgb(n),t=ao.rgb(t);var e=n.r,r=n.g,i=n.b,u=t.r-e,o=t.g-r,a=t.b-i;return function(n){return"#"+bn(Math.round(e+u*n))+bn(Math.round(r+o*n))+bn(Math.round(i+a*n))}}function dr(n,t){var e,r={},i={};for(e in n)e in t?r[e]=Mr(n[e],t[e]):i[e]=n[e];for(e in t)e in n||(i[e]=t[e]);return function(n){for(e in r)i[e]=r[e](n);return i}}function yr(n,t){return n=+n,t=+t,function(e){return n*(1-e)+t*e}}function mr(n,t){var e,r,i,u=hl.lastIndex=pl.lastIndex=0,o=-1,a=[],l=[];for(n+="",t+="";(e=hl.exec(n))&&(r=pl.exec(t));)(i=r.index)>u&&(i=t.slice(u,i),a[o]?a[o]+=i:a[++o]=i),(e=e[0])===(r=r[0])?a[o]?a[o]+=r:a[++o]=r:(a[++o]=null,l.push({i:o,x:yr(e,r)})),u=pl.lastIndex;return u<t.length&&(i=t.slice(u),a[o]?a[o]+=i:a[++o]=i),a.length<2?l[0]?(t=l[0].x,function(n){return t(n)+""}):function(){return t}:(t=l.length,function(n){for(var e,r=0;t>r;++r)a[(e=l[r]).i]=e.x(n);return a.join("")})}function Mr(n,t){for(var e,r=ao.interpolators.length;--r>=0&&!(e=ao.interpolators[r](n,t)););return e}function xr(n,t){var e,r=[],i=[],u=n.length,o=t.length,a=Math.min(n.length,t.length);for(e=0;a>e;++e)r.push(Mr(n[e],t[e]));for(;u>e;++e)i[e]=n[e];for(;o>e;++e)i[e]=t[e];return function(n){for(e=0;a>e;++e)i[e]=r[e](n);return i}}function br(n){return function(t){return 0>=t?0:t>=1?1:n(t)}}function _r(n){return function(t){return 1-n(1-t)}}function wr(n){return function(t){return.5*(.5>t?n(2*t):2-n(2-2*t))}}function Sr(n){return n*n}function kr(n){return n*n*n}function Nr(n){if(0>=n)return 0;if(n>=1)return 1;var t=n*n,e=t*n;return 4*(.5>n?e:3*(n-t)+e-.75)}function Er(n){return function(t){return Math.pow(t,n)}}function Ar(n){return 1-Math.cos(n*Io)}function Cr(n){return Math.pow(2,10*(n-1))}function zr(n){return 1-Math.sqrt(1-n*n)}function Lr(n,t){var e;return arguments.length<2&&(t=.45),arguments.length?e=t/Ho*Math.asin(1/n):(n=1,e=t/4),function(r){return 1+n*Math.pow(2,-10*r)*Math.sin((r-e)*Ho/t)}}function qr(n){return n||(n=1.70158),function(t){return t*t*((n+1)*t-n)}}function Tr(n){return 1/2.75>n?7.5625*n*n:2/2.75>n?7.5625*(n-=1.5/2.75)*n+.75:2.5/2.75>n?7.5625*(n-=2.25/2.75)*n+.9375:7.5625*(n-=2.625/2.75)*n+.984375}function Rr(n,t){n=ao.hcl(n),t=ao.hcl(t);var e=n.h,r=n.c,i=n.l,u=t.h-e,o=t.c-r,a=t.l-i;return isNaN(o)&&(o=0,r=isNaN(r)?t.c:r),isNaN(u)?(u=0,e=isNaN(e)?t.h:e):u>180?u-=360:-180>u&&(u+=360),function(n){return sn(e+u*n,r+o*n,i+a*n)+""}}function Dr(n,t){n=ao.hsl(n),t=ao.hsl(t);var e=n.h,r=n.s,i=n.l,u=t.h-e,o=t.s-r,a=t.l-i;return isNaN(o)&&(o=0,r=isNaN(r)?t.s:r),isNaN(u)?(u=0,e=isNaN(e)?t.h:e):u>180?u-=360:-180>u&&(u+=360),function(n){return cn(e+u*n,r+o*n,i+a*n)+""}}function Pr(n,t){n=ao.lab(n),t=ao.lab(t);var e=n.l,r=n.a,i=n.b,u=t.l-e,o=t.a-r,a=t.b-i;return function(n){return pn(e+u*n,r+o*n,i+a*n)+""}}function Ur(n,t){return t-=n,function(e){return Math.round(n+t*e)}}function jr(n){var t=[n.a,n.b],e=[n.c,n.d],r=Hr(t),i=Fr(t,e),u=Hr(Or(e,t,-i))||0;t[0]*e[1]<e[0]*t[1]&&(t[0]*=-1,t[1]*=-1,r*=-1,i*=-1),this.rotate=(r?Math.atan2(t[1],t[0]):Math.atan2(-e[0],e[1]))*Zo,this.translate=[n.e,n.f],this.scale=[r,u],this.skew=u?Math.atan2(i,u)*Zo:0}function Fr(n,t){return n[0]*t[0]+n[1]*t[1]}function Hr(n){var t=Math.sqrt(Fr(n,n));return t&&(n[0]/=t,n[1]/=t),t}function Or(n,t,e){return n[0]+=e*t[0],n[1]+=e*t[1],n}function Ir(n){return n.length?n.pop()+",":""}function Yr(n,t,e,r){if(n[0]!==t[0]||n[1]!==t[1]){var i=e.push("translate(",null,",",null,")");r.push({i:i-4,x:yr(n[0],t[0])},{i:i-2,x:yr(n[1],t[1])})}else(t[0]||t[1])&&e.push("translate("+t+")")}function Zr(n,t,e,r){n!==t?(n-t>180?t+=360:t-n>180&&(n+=360),r.push({i:e.push(Ir(e)+"rotate(",null,")")-2,x:yr(n,t)})):t&&e.push(Ir(e)+"rotate("+t+")")}function Vr(n,t,e,r){n!==t?r.push({i:e.push(Ir(e)+"skewX(",null,")")-2,x:yr(n,t)}):t&&e.push(Ir(e)+"skewX("+t+")")}function Xr(n,t,e,r){if(n[0]!==t[0]||n[1]!==t[1]){var i=e.push(Ir(e)+"scale(",null,",",null,")");r.push({i:i-4,x:yr(n[0],t[0])},{i:i-2,x:yr(n[1],t[1])})}else 1===t[0]&&1===t[1]||e.push(Ir(e)+"scale("+t+")")}function $r(n,t){var e=[],r=[];return n=ao.transform(n),t=ao.transform(t),Yr(n.translate,t.translate,e,r),Zr(n.rotate,t.rotate,e,r),Vr(n.skew,t.skew,e,r),Xr(n.scale,t.scale,e,r),n=t=null,function(n){for(var t,i=-1,u=r.length;++i<u;)e[(t=r[i]).i]=t.x(n);return e.join("")}}function Br(n,t){return t=(t-=n=+n)||1/t,function(e){return(e-n)/t}}function Wr(n,t){return t=(t-=n=+n)||1/t,function(e){return Math.max(0,Math.min(1,(e-n)/t))}}function Jr(n){for(var t=n.source,e=n.target,r=Kr(t,e),i=[t];t!==r;)t=t.parent,i.push(t);for(var u=i.length;e!==r;)i.splice(u,0,e),e=e.parent;return i}function Gr(n){for(var t=[],e=n.parent;null!=e;)t.push(n),n=e,e=e.parent;return t.push(n),t}function Kr(n,t){if(n===t)return n;for(var e=Gr(n),r=Gr(t),i=e.pop(),u=r.pop(),o=null;i===u;)o=i,i=e.pop(),u=r.pop();return o}function Qr(n){n.fixed|=2}function ni(n){n.fixed&=-7}function ti(n){n.fixed|=4,n.px=n.x,n.py=n.y}function ei(n){n.fixed&=-5}function ri(n,t,e){var r=0,i=0;if(n.charge=0,!n.leaf)for(var u,o=n.nodes,a=o.length,l=-1;++l<a;)u=o[l],null!=u&&(ri(u,t,e),n.charge+=u.charge,r+=u.charge*u.cx,i+=u.charge*u.cy);if(n.point){n.leaf||(n.point.x+=Math.random()-.5,n.point.y+=Math.random()-.5);var c=t*e[n.point.index];n.charge+=n.pointCharge=c,r+=c*n.point.x,i+=c*n.point.y}n.cx=r/n.charge,n.cy=i/n.charge}function ii(n,t){return ao.rebind(n,t,"sort","children","value"),n.nodes=n,n.links=fi,n}function ui(n,t){for(var e=[n];null!=(n=e.pop());)if(t(n),(i=n.children)&&(r=i.length))for(var r,i;--r>=0;)e.push(i[r])}function oi(n,t){for(var e=[n],r=[];null!=(n=e.pop());)if(r.push(n),(u=n.children)&&(i=u.length))for(var i,u,o=-1;++o<i;)e.push(u[o]);for(;null!=(n=r.pop());)t(n)}function ai(n){return n.children}function li(n){return n.value}function ci(n,t){return t.value-n.value}function fi(n){return ao.merge(n.map(function(n){return(n.children||[]).map(function(t){return{source:n,target:t}})}))}function si(n){return n.x}function hi(n){return n.y}function pi(n,t,e){n.y0=t,n.y=e}function gi(n){return ao.range(n.length)}function vi(n){for(var t=-1,e=n[0].length,r=[];++t<e;)r[t]=0;return r}function di(n){for(var t,e=1,r=0,i=n[0][1],u=n.length;u>e;++e)(t=n[e][1])>i&&(r=e,i=t);return r}function yi(n){return n.reduce(mi,0)}function mi(n,t){return n+t[1]}function Mi(n,t){return xi(n,Math.ceil(Math.log(t.length)/Math.LN2+1))}function xi(n,t){for(var e=-1,r=+n[0],i=(n[1]-r)/t,u=[];++e<=t;)u[e]=i*e+r;return u}function bi(n){return[ao.min(n),ao.max(n)]}function _i(n,t){return n.value-t.value}function wi(n,t){var e=n._pack_next;n._pack_next=t,t._pack_prev=n,t._pack_next=e,e._pack_prev=t}function Si(n,t){n._pack_next=t,t._pack_prev=n}function ki(n,t){var e=t.x-n.x,r=t.y-n.y,i=n.r+t.r;return.999*i*i>e*e+r*r}function Ni(n){function t(n){f=Math.min(n.x-n.r,f),s=Math.max(n.x+n.r,s),h=Math.min(n.y-n.r,h),p=Math.max(n.y+n.r,p)}if((e=n.children)&&(c=e.length)){var e,r,i,u,o,a,l,c,f=1/0,s=-(1/0),h=1/0,p=-(1/0);if(e.forEach(Ei),r=e[0],r.x=-r.r,r.y=0,t(r),c>1&&(i=e[1],i.x=i.r,i.y=0,t(i),c>2))for(u=e[2],zi(r,i,u),t(u),wi(r,u),r._pack_prev=u,wi(u,i),i=r._pack_next,o=3;c>o;o++){zi(r,i,u=e[o]);var g=0,v=1,d=1;for(a=i._pack_next;a!==i;a=a._pack_next,v++)if(ki(a,u)){g=1;break}if(1==g)for(l=r._pack_prev;l!==a._pack_prev&&!ki(l,u);l=l._pack_prev,d++);g?(d>v||v==d&&i.r<r.r?Si(r,i=a):Si(r=l,i),o--):(wi(r,u),i=u,t(u))}var y=(f+s)/2,m=(h+p)/2,M=0;for(o=0;c>o;o++)u=e[o],u.x-=y,u.y-=m,M=Math.max(M,u.r+Math.sqrt(u.x*u.x+u.y*u.y));n.r=M,e.forEach(Ai)}}function Ei(n){n._pack_next=n._pack_prev=n}function Ai(n){delete n._pack_next,delete n._pack_prev}function Ci(n,t,e,r){var i=n.children;if(n.x=t+=r*n.x,n.y=e+=r*n.y,n.r*=r,i)for(var u=-1,o=i.length;++u<o;)Ci(i[u],t,e,r)}function zi(n,t,e){var r=n.r+e.r,i=t.x-n.x,u=t.y-n.y;if(r&&(i||u)){var o=t.r+e.r,a=i*i+u*u;o*=o,r*=r;var l=.5+(r-o)/(2*a),c=Math.sqrt(Math.max(0,2*o*(r+a)-(r-=a)*r-o*o))/(2*a);e.x=n.x+l*i+c*u,e.y=n.y+l*u-c*i}else e.x=n.x+r,e.y=n.y}function Li(n,t){return n.parent==t.parent?1:2}function qi(n){var t=n.children;return t.length?t[0]:n.t}function Ti(n){var t,e=n.children;return(t=e.length)?e[t-1]:n.t}function Ri(n,t,e){var r=e/(t.i-n.i);t.c-=r,t.s+=e,n.c+=r,t.z+=e,t.m+=e}function Di(n){for(var t,e=0,r=0,i=n.children,u=i.length;--u>=0;)t=i[u],t.z+=e,t.m+=e,e+=t.s+(r+=t.c)}function Pi(n,t,e){return n.a.parent===t.parent?n.a:e}function Ui(n){return 1+ao.max(n,function(n){return n.y})}function ji(n){return n.reduce(function(n,t){return n+t.x},0)/n.length}function Fi(n){var t=n.children;return t&&t.length?Fi(t[0]):n}function Hi(n){var t,e=n.children;return e&&(t=e.length)?Hi(e[t-1]):n}function Oi(n){return{x:n.x,y:n.y,dx:n.dx,dy:n.dy}}function Ii(n,t){var e=n.x+t[3],r=n.y+t[0],i=n.dx-t[1]-t[3],u=n.dy-t[0]-t[2];return 0>i&&(e+=i/2,i=0),0>u&&(r+=u/2,u=0),{x:e,y:r,dx:i,dy:u}}function Yi(n){var t=n[0],e=n[n.length-1];return e>t?[t,e]:[e,t]}function Zi(n){return n.rangeExtent?n.rangeExtent():Yi(n.range())}function Vi(n,t,e,r){var i=e(n[0],n[1]),u=r(t[0],t[1]);return function(n){return u(i(n))}}function Xi(n,t){var e,r=0,i=n.length-1,u=n[r],o=n[i];return u>o&&(e=r,r=i,i=e,e=u,u=o,o=e),n[r]=t.floor(u),n[i]=t.ceil(o),n}function $i(n){return n?{floor:function(t){return Math.floor(t/n)*n},ceil:function(t){return Math.ceil(t/n)*n}}:Sl}function Bi(n,t,e,r){var i=[],u=[],o=0,a=Math.min(n.length,t.length)-1;for(n[a]<n[0]&&(n=n.slice().reverse(),t=t.slice().reverse());++o<=a;)i.push(e(n[o-1],n[o])),u.push(r(t[o-1],t[o]));return function(t){var e=ao.bisect(n,t,1,a)-1;return u[e](i[e](t))}}function Wi(n,t,e,r){function i(){var i=Math.min(n.length,t.length)>2?Bi:Vi,l=r?Wr:Br;return o=i(n,t,l,e),a=i(t,n,l,Mr),u}function u(n){return o(n)}var o,a;return u.invert=function(n){return a(n)},u.domain=function(t){return arguments.length?(n=t.map(Number),i()):n},u.range=function(n){return arguments.length?(t=n,i()):t},u.rangeRound=function(n){return u.range(n).interpolate(Ur)},u.clamp=function(n){return arguments.length?(r=n,i()):r},u.interpolate=function(n){return arguments.length?(e=n,i()):e},u.ticks=function(t){return Qi(n,t)},u.tickFormat=function(t,e){return nu(n,t,e)},u.nice=function(t){return Gi(n,t),i()},u.copy=function(){return Wi(n,t,e,r)},i()}function Ji(n,t){return ao.rebind(n,t,"range","rangeRound","interpolate","clamp")}function Gi(n,t){return Xi(n,$i(Ki(n,t)[2])),Xi(n,$i(Ki(n,t)[2])),n}function Ki(n,t){null==t&&(t=10);var e=Yi(n),r=e[1]-e[0],i=Math.pow(10,Math.floor(Math.log(r/t)/Math.LN10)),u=t/r*i;return.15>=u?i*=10:.35>=u?i*=5:.75>=u&&(i*=2),e[0]=Math.ceil(e[0]/i)*i,e[1]=Math.floor(e[1]/i)*i+.5*i,e[2]=i,e}function Qi(n,t){return ao.range.apply(ao,Ki(n,t))}function nu(n,t,e){var r=Ki(n,t);if(e){var i=ha.exec(e);if(i.shift(),"s"===i[8]){var u=ao.formatPrefix(Math.max(xo(r[0]),xo(r[1])));return i[7]||(i[7]="."+tu(u.scale(r[2]))),i[8]="f",e=ao.format(i.join("")),function(n){return e(u.scale(n))+u.symbol}}i[7]||(i[7]="."+eu(i[8],r)),e=i.join("")}else e=",."+tu(r[2])+"f";return ao.format(e)}function tu(n){return-Math.floor(Math.log(n)/Math.LN10+.01)}function eu(n,t){var e=tu(t[2]);return n in kl?Math.abs(e-tu(Math.max(xo(t[0]),xo(t[1]))))+ +("e"!==n):e-2*("%"===n)}function ru(n,t,e,r){function i(n){return(e?Math.log(0>n?0:n):-Math.log(n>0?0:-n))/Math.log(t)}function u(n){return e?Math.pow(t,n):-Math.pow(t,-n)}function o(t){return n(i(t))}return o.invert=function(t){return u(n.invert(t))},o.domain=function(t){return arguments.length?(e=t[0]>=0,n.domain((r=t.map(Number)).map(i)),o):r},o.base=function(e){return arguments.length?(t=+e,n.domain(r.map(i)),o):t},o.nice=function(){var t=Xi(r.map(i),e?Math:El);return n.domain(t),r=t.map(u),o},o.ticks=function(){var n=Yi(r),o=[],a=n[0],l=n[1],c=Math.floor(i(a)),f=Math.ceil(i(l)),s=t%1?2:t;if(isFinite(f-c)){if(e){for(;f>c;c++)for(var h=1;s>h;h++)o.push(u(c)*h);o.push(u(c))}else for(o.push(u(c));c++<f;)for(var h=s-1;h>0;h--)o.push(u(c)*h);for(c=0;o[c]<a;c++);for(f=o.length;o[f-1]>l;f--);o=o.slice(c,f)}return o},o.tickFormat=function(n,e){if(!arguments.length)return Nl;arguments.length<2?e=Nl:"function"!=typeof e&&(e=ao.format(e));var r=Math.max(1,t*n/o.ticks().length);return function(n){var o=n/u(Math.round(i(n)));return t-.5>o*t&&(o*=t),r>=o?e(n):""}},o.copy=function(){return ru(n.copy(),t,e,r)},Ji(o,n)}function iu(n,t,e){function r(t){return n(i(t))}var i=uu(t),u=uu(1/t);return r.invert=function(t){return u(n.invert(t))},r.domain=function(t){return arguments.length?(n.domain((e=t.map(Number)).map(i)),r):e},r.ticks=function(n){return Qi(e,n)},r.tickFormat=function(n,t){return nu(e,n,t)},r.nice=function(n){return r.domain(Gi(e,n))},r.exponent=function(o){return arguments.length?(i=uu(t=o),u=uu(1/t),n.domain(e.map(i)),r):t},r.copy=function(){return iu(n.copy(),t,e)},Ji(r,n)}function uu(n){return function(t){return 0>t?-Math.pow(-t,n):Math.pow(t,n)}}function ou(n,t){function e(e){return u[((i.get(e)||("range"===t.t?i.set(e,n.push(e)):NaN))-1)%u.length]}function r(t,e){return ao.range(n.length).map(function(n){return t+e*n})}var i,u,o;return e.domain=function(r){if(!arguments.length)return n;n=[],i=new c;for(var u,o=-1,a=r.length;++o<a;)i.has(u=r[o])||i.set(u,n.push(u));return e[t.t].apply(e,t.a)},e.range=function(n){return arguments.length?(u=n,o=0,t={t:"range",a:arguments},e):u},e.rangePoints=function(i,a){arguments.length<2&&(a=0);var l=i[0],c=i[1],f=n.length<2?(l=(l+c)/2,0):(c-l)/(n.length-1+a);return u=r(l+f*a/2,f),o=0,t={t:"rangePoints",a:arguments},e},e.rangeRoundPoints=function(i,a){arguments.length<2&&(a=0);var l=i[0],c=i[1],f=n.length<2?(l=c=Math.round((l+c)/2),0):(c-l)/(n.length-1+a)|0;return u=r(l+Math.round(f*a/2+(c-l-(n.length-1+a)*f)/2),f),o=0,t={t:"rangeRoundPoints",a:arguments},e},e.rangeBands=function(i,a,l){arguments.length<2&&(a=0),arguments.length<3&&(l=a);var c=i[1]<i[0],f=i[c-0],s=i[1-c],h=(s-f)/(n.length-a+2*l);return u=r(f+h*l,h),c&&u.reverse(),o=h*(1-a),t={t:"rangeBands",a:arguments},e},e.rangeRoundBands=function(i,a,l){arguments.length<2&&(a=0),arguments.length<3&&(l=a);var c=i[1]<i[0],f=i[c-0],s=i[1-c],h=Math.floor((s-f)/(n.length-a+2*l));return u=r(f+Math.round((s-f-(n.length-a)*h)/2),h),c&&u.reverse(),o=Math.round(h*(1-a)),t={t:"rangeRoundBands",a:arguments},e},e.rangeBand=function(){return o},e.rangeExtent=function(){return Yi(t.a[0])},e.copy=function(){return ou(n,t)},e.domain(n)}function au(n,t){function u(){var e=0,r=t.length;for(a=[];++e<r;)a[e-1]=ao.quantile(n,e/r);return o}function o(n){return isNaN(n=+n)?void 0:t[ao.bisect(a,n)]}var a;return o.domain=function(t){return arguments.length?(n=t.map(r).filter(i).sort(e),u()):n},o.range=function(n){return arguments.length?(t=n,u()):t},o.quantiles=function(){return a},o.invertExtent=function(e){return e=t.indexOf(e),0>e?[NaN,NaN]:[e>0?a[e-1]:n[0],e<a.length?a[e]:n[n.length-1]]},o.copy=function(){return au(n,t)},u()}function lu(n,t,e){function r(t){return e[Math.max(0,Math.min(o,Math.floor(u*(t-n))))]}function i(){return u=e.length/(t-n),o=e.length-1,r}var u,o;return r.domain=function(e){return arguments.length?(n=+e[0],t=+e[e.length-1],i()):[n,t]},r.range=function(n){return arguments.length?(e=n,i()):e},r.invertExtent=function(t){return t=e.indexOf(t),t=0>t?NaN:t/u+n,[t,t+1/u]},r.copy=function(){return lu(n,t,e)},i()}function cu(n,t){function e(e){return e>=e?t[ao.bisect(n,e)]:void 0}return e.domain=function(t){return arguments.length?(n=t,e):n},e.range=function(n){return arguments.length?(t=n,e):t},e.invertExtent=function(e){return e=t.indexOf(e),[n[e-1],n[e]]},e.copy=function(){return cu(n,t)},e}function fu(n){function t(n){return+n}return t.invert=t,t.domain=t.range=function(e){return arguments.length?(n=e.map(t),t):n},t.ticks=function(t){return Qi(n,t)},t.tickFormat=function(t,e){return nu(n,t,e)},t.copy=function(){return fu(n)},t}function su(){return 0}function hu(n){return n.innerRadius}function pu(n){return n.outerRadius}function gu(n){return n.startAngle}function vu(n){return n.endAngle}function du(n){return n&&n.padAngle}function yu(n,t,e,r){return(n-e)*t-(t-r)*n>0?0:1}function mu(n,t,e,r,i){var u=n[0]-t[0],o=n[1]-t[1],a=(i?r:-r)/Math.sqrt(u*u+o*o),l=a*o,c=-a*u,f=n[0]+l,s=n[1]+c,h=t[0]+l,p=t[1]+c,g=(f+h)/2,v=(s+p)/2,d=h-f,y=p-s,m=d*d+y*y,M=e-r,x=f*p-h*s,b=(0>y?-1:1)*Math.sqrt(Math.max(0,M*M*m-x*x)),_=(x*y-d*b)/m,w=(-x*d-y*b)/m,S=(x*y+d*b)/m,k=(-x*d+y*b)/m,N=_-g,E=w-v,A=S-g,C=k-v;return N*N+E*E>A*A+C*C&&(_=S,w=k),[[_-l,w-c],[_*e/M,w*e/M]]}function Mu(n){function t(t){function o(){c.push("M",u(n(f),a))}for(var l,c=[],f=[],s=-1,h=t.length,p=En(e),g=En(r);++s<h;)i.call(this,l=t[s],s)?f.push([+p.call(this,l,s),+g.call(this,l,s)]):f.length&&(o(),f=[]);return f.length&&o(),c.length?c.join(""):null}var e=Ce,r=ze,i=zt,u=xu,o=u.key,a=.7;return t.x=function(n){return arguments.length?(e=n,t):e},t.y=function(n){return arguments.length?(r=n,t):r},t.defined=function(n){return arguments.length?(i=n,t):i},t.interpolate=function(n){return arguments.length?(o="function"==typeof n?u=n:(u=Tl.get(n)||xu).key,t):o},t.tension=function(n){return arguments.length?(a=n,t):a},t}function xu(n){return n.length>1?n.join("L"):n+"Z"}function bu(n){return n.join("L")+"Z"}function _u(n){for(var t=0,e=n.length,r=n[0],i=[r[0],",",r[1]];++t<e;)i.push("H",(r[0]+(r=n[t])[0])/2,"V",r[1]);return e>1&&i.push("H",r[0]),i.join("")}function wu(n){for(var t=0,e=n.length,r=n[0],i=[r[0],",",r[1]];++t<e;)i.push("V",(r=n[t])[1],"H",r[0]);return i.join("")}function Su(n){for(var t=0,e=n.length,r=n[0],i=[r[0],",",r[1]];++t<e;)i.push("H",(r=n[t])[0],"V",r[1]);return i.join("")}function ku(n,t){return n.length<4?xu(n):n[1]+Au(n.slice(1,-1),Cu(n,t))}function Nu(n,t){return n.length<3?bu(n):n[0]+Au((n.push(n[0]),n),Cu([n[n.length-2]].concat(n,[n[1]]),t))}function Eu(n,t){return n.length<3?xu(n):n[0]+Au(n,Cu(n,t))}function Au(n,t){if(t.length<1||n.length!=t.length&&n.length!=t.length+2)return xu(n);var e=n.length!=t.length,r="",i=n[0],u=n[1],o=t[0],a=o,l=1;if(e&&(r+="Q"+(u[0]-2*o[0]/3)+","+(u[1]-2*o[1]/3)+","+u[0]+","+u[1],i=n[1],l=2),t.length>1){a=t[1],u=n[l],l++,r+="C"+(i[0]+o[0])+","+(i[1]+o[1])+","+(u[0]-a[0])+","+(u[1]-a[1])+","+u[0]+","+u[1];for(var c=2;c<t.length;c++,l++)u=n[l],a=t[c],r+="S"+(u[0]-a[0])+","+(u[1]-a[1])+","+u[0]+","+u[1]}if(e){var f=n[l];r+="Q"+(u[0]+2*a[0]/3)+","+(u[1]+2*a[1]/3)+","+f[0]+","+f[1]}return r}function Cu(n,t){for(var e,r=[],i=(1-t)/2,u=n[0],o=n[1],a=1,l=n.length;++a<l;)e=u,u=o,o=n[a],r.push([i*(o[0]-e[0]),i*(o[1]-e[1])]);return r}function zu(n){if(n.length<3)return xu(n);var t=1,e=n.length,r=n[0],i=r[0],u=r[1],o=[i,i,i,(r=n[1])[0]],a=[u,u,u,r[1]],l=[i,",",u,"L",Ru(Pl,o),",",Ru(Pl,a)];for(n.push(n[e-1]);++t<=e;)r=n[t],o.shift(),o.push(r[0]),a.shift(),a.push(r[1]),Du(l,o,a);return n.pop(),l.push("L",r),l.join("")}function Lu(n){if(n.length<4)return xu(n);for(var t,e=[],r=-1,i=n.length,u=[0],o=[0];++r<3;)t=n[r],u.push(t[0]),o.push(t[1]);for(e.push(Ru(Pl,u)+","+Ru(Pl,o)),--r;++r<i;)t=n[r],u.shift(),u.push(t[0]),o.shift(),o.push(t[1]),Du(e,u,o);return e.join("")}function qu(n){for(var t,e,r=-1,i=n.length,u=i+4,o=[],a=[];++r<4;)e=n[r%i],o.push(e[0]),a.push(e[1]);for(t=[Ru(Pl,o),",",Ru(Pl,a)],--r;++r<u;)e=n[r%i],o.shift(),o.push(e[0]),a.shift(),a.push(e[1]),Du(t,o,a);return t.join("")}function Tu(n,t){var e=n.length-1;if(e)for(var r,i,u=n[0][0],o=n[0][1],a=n[e][0]-u,l=n[e][1]-o,c=-1;++c<=e;)r=n[c],i=c/e,r[0]=t*r[0]+(1-t)*(u+i*a),r[1]=t*r[1]+(1-t)*(o+i*l);return zu(n)}function Ru(n,t){return n[0]*t[0]+n[1]*t[1]+n[2]*t[2]+n[3]*t[3]}function Du(n,t,e){n.push("C",Ru(Rl,t),",",Ru(Rl,e),",",Ru(Dl,t),",",Ru(Dl,e),",",Ru(Pl,t),",",Ru(Pl,e))}function Pu(n,t){return(t[1]-n[1])/(t[0]-n[0])}function Uu(n){for(var t=0,e=n.length-1,r=[],i=n[0],u=n[1],o=r[0]=Pu(i,u);++t<e;)r[t]=(o+(o=Pu(i=u,u=n[t+1])))/2;return r[t]=o,r}function ju(n){for(var t,e,r,i,u=[],o=Uu(n),a=-1,l=n.length-1;++a<l;)t=Pu(n[a],n[a+1]),xo(t)<Uo?o[a]=o[a+1]=0:(e=o[a]/t,r=o[a+1]/t,i=e*e+r*r,i>9&&(i=3*t/Math.sqrt(i),o[a]=i*e,o[a+1]=i*r));for(a=-1;++a<=l;)i=(n[Math.min(l,a+1)][0]-n[Math.max(0,a-1)][0])/(6*(1+o[a]*o[a])),u.push([i||0,o[a]*i||0]);return u}function Fu(n){return n.length<3?xu(n):n[0]+Au(n,ju(n))}function Hu(n){for(var t,e,r,i=-1,u=n.length;++i<u;)t=n[i],e=t[0],r=t[1]-Io,t[0]=e*Math.cos(r),t[1]=e*Math.sin(r);return n}function Ou(n){function t(t){function l(){v.push("M",a(n(y),s),f,c(n(d.reverse()),s),"Z")}for(var h,p,g,v=[],d=[],y=[],m=-1,M=t.length,x=En(e),b=En(i),_=e===r?function(){
+return p}:En(r),w=i===u?function(){return g}:En(u);++m<M;)o.call(this,h=t[m],m)?(d.push([p=+x.call(this,h,m),g=+b.call(this,h,m)]),y.push([+_.call(this,h,m),+w.call(this,h,m)])):d.length&&(l(),d=[],y=[]);return d.length&&l(),v.length?v.join(""):null}var e=Ce,r=Ce,i=0,u=ze,o=zt,a=xu,l=a.key,c=a,f="L",s=.7;return t.x=function(n){return arguments.length?(e=r=n,t):r},t.x0=function(n){return arguments.length?(e=n,t):e},t.x1=function(n){return arguments.length?(r=n,t):r},t.y=function(n){return arguments.length?(i=u=n,t):u},t.y0=function(n){return arguments.length?(i=n,t):i},t.y1=function(n){return arguments.length?(u=n,t):u},t.defined=function(n){return arguments.length?(o=n,t):o},t.interpolate=function(n){return arguments.length?(l="function"==typeof n?a=n:(a=Tl.get(n)||xu).key,c=a.reverse||a,f=a.closed?"M":"L",t):l},t.tension=function(n){return arguments.length?(s=n,t):s},t}function Iu(n){return n.radius}function Yu(n){return[n.x,n.y]}function Zu(n){return function(){var t=n.apply(this,arguments),e=t[0],r=t[1]-Io;return[e*Math.cos(r),e*Math.sin(r)]}}function Vu(){return 64}function Xu(){return"circle"}function $u(n){var t=Math.sqrt(n/Fo);return"M0,"+t+"A"+t+","+t+" 0 1,1 0,"+-t+"A"+t+","+t+" 0 1,1 0,"+t+"Z"}function Bu(n){return function(){var t,e,r;(t=this[n])&&(r=t[e=t.active])&&(r.timer.c=null,r.timer.t=NaN,--t.count?delete t[e]:delete this[n],t.active+=.5,r.event&&r.event.interrupt.call(this,this.__data__,r.index))}}function Wu(n,t,e){return ko(n,Yl),n.namespace=t,n.id=e,n}function Ju(n,t,e,r){var i=n.id,u=n.namespace;return Y(n,"function"==typeof e?function(n,o,a){n[u][i].tween.set(t,r(e.call(n,n.__data__,o,a)))}:(e=r(e),function(n){n[u][i].tween.set(t,e)}))}function Gu(n){return null==n&&(n=""),function(){this.textContent=n}}function Ku(n){return null==n?"__transition__":"__transition_"+n+"__"}function Qu(n,t,e,r,i){function u(n){var t=v.delay;return f.t=t+l,n>=t?o(n-t):void(f.c=o)}function o(e){var i=g.active,u=g[i];u&&(u.timer.c=null,u.timer.t=NaN,--g.count,delete g[i],u.event&&u.event.interrupt.call(n,n.__data__,u.index));for(var o in g)if(r>+o){var c=g[o];c.timer.c=null,c.timer.t=NaN,--g.count,delete g[o]}f.c=a,qn(function(){return f.c&&a(e||1)&&(f.c=null,f.t=NaN),1},0,l),g.active=r,v.event&&v.event.start.call(n,n.__data__,t),p=[],v.tween.forEach(function(e,r){(r=r.call(n,n.__data__,t))&&p.push(r)}),h=v.ease,s=v.duration}function a(i){for(var u=i/s,o=h(u),a=p.length;a>0;)p[--a].call(n,o);return u>=1?(v.event&&v.event.end.call(n,n.__data__,t),--g.count?delete g[r]:delete n[e],1):void 0}var l,f,s,h,p,g=n[e]||(n[e]={active:0,count:0}),v=g[r];v||(l=i.time,f=qn(u,0,l),v=g[r]={tween:new c,time:l,timer:f,delay:i.delay,duration:i.duration,ease:i.ease,index:t},i=null,++g.count)}function no(n,t,e){n.attr("transform",function(n){var r=t(n);return"translate("+(isFinite(r)?r:e(n))+",0)"})}function to(n,t,e){n.attr("transform",function(n){var r=t(n);return"translate(0,"+(isFinite(r)?r:e(n))+")"})}function eo(n){return n.toISOString()}function ro(n,t,e){function r(t){return n(t)}function i(n,e){var r=n[1]-n[0],i=r/e,u=ao.bisect(Kl,i);return u==Kl.length?[t.year,Ki(n.map(function(n){return n/31536e6}),e)[2]]:u?t[i/Kl[u-1]<Kl[u]/i?u-1:u]:[tc,Ki(n,e)[2]]}return r.invert=function(t){return io(n.invert(t))},r.domain=function(t){return arguments.length?(n.domain(t),r):n.domain().map(io)},r.nice=function(n,t){function e(e){return!isNaN(e)&&!n.range(e,io(+e+1),t).length}var u=r.domain(),o=Yi(u),a=null==n?i(o,10):"number"==typeof n&&i(o,n);return a&&(n=a[0],t=a[1]),r.domain(Xi(u,t>1?{floor:function(t){for(;e(t=n.floor(t));)t=io(t-1);return t},ceil:function(t){for(;e(t=n.ceil(t));)t=io(+t+1);return t}}:n))},r.ticks=function(n,t){var e=Yi(r.domain()),u=null==n?i(e,10):"number"==typeof n?i(e,n):!n.range&&[{range:n},t];return u&&(n=u[0],t=u[1]),n.range(e[0],io(+e[1]+1),1>t?1:t)},r.tickFormat=function(){return e},r.copy=function(){return ro(n.copy(),t,e)},Ji(r,n)}function io(n){return new Date(n)}function uo(n){return JSON.parse(n.responseText)}function oo(n){var t=fo.createRange();return t.selectNode(fo.body),t.createContextualFragment(n.responseText)}var ao={version:"3.5.17"},lo=[].slice,co=function(n){return lo.call(n)},fo=this.document;if(fo)try{co(fo.documentElement.childNodes)[0].nodeType}catch(so){co=function(n){for(var t=n.length,e=new Array(t);t--;)e[t]=n[t];return e}}if(Date.now||(Date.now=function(){return+new Date}),fo)try{fo.createElement("DIV").style.setProperty("opacity",0,"")}catch(ho){var po=this.Element.prototype,go=po.setAttribute,vo=po.setAttributeNS,yo=this.CSSStyleDeclaration.prototype,mo=yo.setProperty;po.setAttribute=function(n,t){go.call(this,n,t+"")},po.setAttributeNS=function(n,t,e){vo.call(this,n,t,e+"")},yo.setProperty=function(n,t,e){mo.call(this,n,t+"",e)}}ao.ascending=e,ao.descending=function(n,t){return n>t?-1:t>n?1:t>=n?0:NaN},ao.min=function(n,t){var e,r,i=-1,u=n.length;if(1===arguments.length){for(;++i<u;)if(null!=(r=n[i])&&r>=r){e=r;break}for(;++i<u;)null!=(r=n[i])&&e>r&&(e=r)}else{for(;++i<u;)if(null!=(r=t.call(n,n[i],i))&&r>=r){e=r;break}for(;++i<u;)null!=(r=t.call(n,n[i],i))&&e>r&&(e=r)}return e},ao.max=function(n,t){var e,r,i=-1,u=n.length;if(1===arguments.length){for(;++i<u;)if(null!=(r=n[i])&&r>=r){e=r;break}for(;++i<u;)null!=(r=n[i])&&r>e&&(e=r)}else{for(;++i<u;)if(null!=(r=t.call(n,n[i],i))&&r>=r){e=r;break}for(;++i<u;)null!=(r=t.call(n,n[i],i))&&r>e&&(e=r)}return e},ao.extent=function(n,t){var e,r,i,u=-1,o=n.length;if(1===arguments.length){for(;++u<o;)if(null!=(r=n[u])&&r>=r){e=i=r;break}for(;++u<o;)null!=(r=n[u])&&(e>r&&(e=r),r>i&&(i=r))}else{for(;++u<o;)if(null!=(r=t.call(n,n[u],u))&&r>=r){e=i=r;break}for(;++u<o;)null!=(r=t.call(n,n[u],u))&&(e>r&&(e=r),r>i&&(i=r))}return[e,i]},ao.sum=function(n,t){var e,r=0,u=n.length,o=-1;if(1===arguments.length)for(;++o<u;)i(e=+n[o])&&(r+=e);else for(;++o<u;)i(e=+t.call(n,n[o],o))&&(r+=e);return r},ao.mean=function(n,t){var e,u=0,o=n.length,a=-1,l=o;if(1===arguments.length)for(;++a<o;)i(e=r(n[a]))?u+=e:--l;else for(;++a<o;)i(e=r(t.call(n,n[a],a)))?u+=e:--l;return l?u/l:void 0},ao.quantile=function(n,t){var e=(n.length-1)*t+1,r=Math.floor(e),i=+n[r-1],u=e-r;return u?i+u*(n[r]-i):i},ao.median=function(n,t){var u,o=[],a=n.length,l=-1;if(1===arguments.length)for(;++l<a;)i(u=r(n[l]))&&o.push(u);else for(;++l<a;)i(u=r(t.call(n,n[l],l)))&&o.push(u);return o.length?ao.quantile(o.sort(e),.5):void 0},ao.variance=function(n,t){var e,u,o=n.length,a=0,l=0,c=-1,f=0;if(1===arguments.length)for(;++c<o;)i(e=r(n[c]))&&(u=e-a,a+=u/++f,l+=u*(e-a));else for(;++c<o;)i(e=r(t.call(n,n[c],c)))&&(u=e-a,a+=u/++f,l+=u*(e-a));return f>1?l/(f-1):void 0},ao.deviation=function(){var n=ao.variance.apply(this,arguments);return n?Math.sqrt(n):n};var Mo=u(e);ao.bisectLeft=Mo.left,ao.bisect=ao.bisectRight=Mo.right,ao.bisector=function(n){return u(1===n.length?function(t,r){return e(n(t),r)}:n)},ao.shuffle=function(n,t,e){(u=arguments.length)<3&&(e=n.length,2>u&&(t=0));for(var r,i,u=e-t;u;)i=Math.random()*u--|0,r=n[u+t],n[u+t]=n[i+t],n[i+t]=r;return n},ao.permute=function(n,t){for(var e=t.length,r=new Array(e);e--;)r[e]=n[t[e]];return r},ao.pairs=function(n){for(var t,e=0,r=n.length-1,i=n[0],u=new Array(0>r?0:r);r>e;)u[e]=[t=i,i=n[++e]];return u},ao.transpose=function(n){if(!(i=n.length))return[];for(var t=-1,e=ao.min(n,o),r=new Array(e);++t<e;)for(var i,u=-1,a=r[t]=new Array(i);++u<i;)a[u]=n[u][t];return r},ao.zip=function(){return ao.transpose(arguments)},ao.keys=function(n){var t=[];for(var e in n)t.push(e);return t},ao.values=function(n){var t=[];for(var e in n)t.push(n[e]);return t},ao.entries=function(n){var t=[];for(var e in n)t.push({key:e,value:n[e]});return t},ao.merge=function(n){for(var t,e,r,i=n.length,u=-1,o=0;++u<i;)o+=n[u].length;for(e=new Array(o);--i>=0;)for(r=n[i],t=r.length;--t>=0;)e[--o]=r[t];return e};var xo=Math.abs;ao.range=function(n,t,e){if(arguments.length<3&&(e=1,arguments.length<2&&(t=n,n=0)),(t-n)/e===1/0)throw new Error("infinite range");var r,i=[],u=a(xo(e)),o=-1;if(n*=u,t*=u,e*=u,0>e)for(;(r=n+e*++o)>t;)i.push(r/u);else for(;(r=n+e*++o)<t;)i.push(r/u);return i},ao.map=function(n,t){var e=new c;if(n instanceof c)n.forEach(function(n,t){e.set(n,t)});else if(Array.isArray(n)){var r,i=-1,u=n.length;if(1===arguments.length)for(;++i<u;)e.set(i,n[i]);else for(;++i<u;)e.set(t.call(n,r=n[i],i),r)}else for(var o in n)e.set(o,n[o]);return e};var bo="__proto__",_o="\x00";l(c,{has:h,get:function(n){return this._[f(n)]},set:function(n,t){return this._[f(n)]=t},remove:p,keys:g,values:function(){var n=[];for(var t in this._)n.push(this._[t]);return n},entries:function(){var n=[];for(var t in this._)n.push({key:s(t),value:this._[t]});return n},size:v,empty:d,forEach:function(n){for(var t in this._)n.call(this,s(t),this._[t])}}),ao.nest=function(){function n(t,o,a){if(a>=u.length)return r?r.call(i,o):e?o.sort(e):o;for(var l,f,s,h,p=-1,g=o.length,v=u[a++],d=new c;++p<g;)(h=d.get(l=v(f=o[p])))?h.push(f):d.set(l,[f]);return t?(f=t(),s=function(e,r){f.set(e,n(t,r,a))}):(f={},s=function(e,r){f[e]=n(t,r,a)}),d.forEach(s),f}function t(n,e){if(e>=u.length)return n;var r=[],i=o[e++];return n.forEach(function(n,i){r.push({key:n,values:t(i,e)})}),i?r.sort(function(n,t){return i(n.key,t.key)}):r}var e,r,i={},u=[],o=[];return i.map=function(t,e){return n(e,t,0)},i.entries=function(e){return t(n(ao.map,e,0),0)},i.key=function(n){return u.push(n),i},i.sortKeys=function(n){return o[u.length-1]=n,i},i.sortValues=function(n){return e=n,i},i.rollup=function(n){return r=n,i},i},ao.set=function(n){var t=new y;if(n)for(var e=0,r=n.length;r>e;++e)t.add(n[e]);return t},l(y,{has:h,add:function(n){return this._[f(n+="")]=!0,n},remove:p,values:g,size:v,empty:d,forEach:function(n){for(var t in this._)n.call(this,s(t))}}),ao.behavior={},ao.rebind=function(n,t){for(var e,r=1,i=arguments.length;++r<i;)n[e=arguments[r]]=M(n,t,t[e]);return n};var wo=["webkit","ms","moz","Moz","o","O"];ao.dispatch=function(){for(var n=new _,t=-1,e=arguments.length;++t<e;)n[arguments[t]]=w(n);return n},_.prototype.on=function(n,t){var e=n.indexOf("."),r="";if(e>=0&&(r=n.slice(e+1),n=n.slice(0,e)),n)return arguments.length<2?this[n].on(r):this[n].on(r,t);if(2===arguments.length){if(null==t)for(n in this)this.hasOwnProperty(n)&&this[n].on(r,null);return this}},ao.event=null,ao.requote=function(n){return n.replace(So,"\\$&")};var So=/[\\\^\$\*\+\?\|\[\]\(\)\.\{\}]/g,ko={}.__proto__?function(n,t){n.__proto__=t}:function(n,t){for(var e in t)n[e]=t[e]},No=function(n,t){return t.querySelector(n)},Eo=function(n,t){return t.querySelectorAll(n)},Ao=function(n,t){var e=n.matches||n[x(n,"matchesSelector")];return(Ao=function(n,t){return e.call(n,t)})(n,t)};"function"==typeof Sizzle&&(No=function(n,t){return Sizzle(n,t)[0]||null},Eo=Sizzle,Ao=Sizzle.matchesSelector),ao.selection=function(){return ao.select(fo.documentElement)};var Co=ao.selection.prototype=[];Co.select=function(n){var t,e,r,i,u=[];n=A(n);for(var o=-1,a=this.length;++o<a;){u.push(t=[]),t.parentNode=(r=this[o]).parentNode;for(var l=-1,c=r.length;++l<c;)(i=r[l])?(t.push(e=n.call(i,i.__data__,l,o)),e&&"__data__"in i&&(e.__data__=i.__data__)):t.push(null)}return E(u)},Co.selectAll=function(n){var t,e,r=[];n=C(n);for(var i=-1,u=this.length;++i<u;)for(var o=this[i],a=-1,l=o.length;++a<l;)(e=o[a])&&(r.push(t=co(n.call(e,e.__data__,a,i))),t.parentNode=e);return E(r)};var zo="http://www.w3.org/1999/xhtml",Lo={svg:"http://www.w3.org/2000/svg",xhtml:zo,xlink:"http://www.w3.org/1999/xlink",xml:"http://www.w3.org/XML/1998/namespace",xmlns:"http://www.w3.org/2000/xmlns/"};ao.ns={prefix:Lo,qualify:function(n){var t=n.indexOf(":"),e=n;return t>=0&&"xmlns"!==(e=n.slice(0,t))&&(n=n.slice(t+1)),Lo.hasOwnProperty(e)?{space:Lo[e],local:n}:n}},Co.attr=function(n,t){if(arguments.length<2){if("string"==typeof n){var e=this.node();return n=ao.ns.qualify(n),n.local?e.getAttributeNS(n.space,n.local):e.getAttribute(n)}for(t in n)this.each(z(t,n[t]));return this}return this.each(z(n,t))},Co.classed=function(n,t){if(arguments.length<2){if("string"==typeof n){var e=this.node(),r=(n=T(n)).length,i=-1;if(t=e.classList){for(;++i<r;)if(!t.contains(n[i]))return!1}else for(t=e.getAttribute("class");++i<r;)if(!q(n[i]).test(t))return!1;return!0}for(t in n)this.each(R(t,n[t]));return this}return this.each(R(n,t))},Co.style=function(n,e,r){var i=arguments.length;if(3>i){if("string"!=typeof n){2>i&&(e="");for(r in n)this.each(P(r,n[r],e));return this}if(2>i){var u=this.node();return t(u).getComputedStyle(u,null).getPropertyValue(n)}r=""}return this.each(P(n,e,r))},Co.property=function(n,t){if(arguments.length<2){if("string"==typeof n)return this.node()[n];for(t in n)this.each(U(t,n[t]));return this}return this.each(U(n,t))},Co.text=function(n){return arguments.length?this.each("function"==typeof n?function(){var t=n.apply(this,arguments);this.textContent=null==t?"":t}:null==n?function(){this.textContent=""}:function(){this.textContent=n}):this.node().textContent},Co.html=function(n){return arguments.length?this.each("function"==typeof n?function(){var t=n.apply(this,arguments);this.innerHTML=null==t?"":t}:null==n?function(){this.innerHTML=""}:function(){this.innerHTML=n}):this.node().innerHTML},Co.append=function(n){return n=j(n),this.select(function(){return this.appendChild(n.apply(this,arguments))})},Co.insert=function(n,t){return n=j(n),t=A(t),this.select(function(){return this.insertBefore(n.apply(this,arguments),t.apply(this,arguments)||null)})},Co.remove=function(){return this.each(F)},Co.data=function(n,t){function e(n,e){var r,i,u,o=n.length,s=e.length,h=Math.min(o,s),p=new Array(s),g=new Array(s),v=new Array(o);if(t){var d,y=new c,m=new Array(o);for(r=-1;++r<o;)(i=n[r])&&(y.has(d=t.call(i,i.__data__,r))?v[r]=i:y.set(d,i),m[r]=d);for(r=-1;++r<s;)(i=y.get(d=t.call(e,u=e[r],r)))?i!==!0&&(p[r]=i,i.__data__=u):g[r]=H(u),y.set(d,!0);for(r=-1;++r<o;)r in m&&y.get(m[r])!==!0&&(v[r]=n[r])}else{for(r=-1;++r<h;)i=n[r],u=e[r],i?(i.__data__=u,p[r]=i):g[r]=H(u);for(;s>r;++r)g[r]=H(e[r]);for(;o>r;++r)v[r]=n[r]}g.update=p,g.parentNode=p.parentNode=v.parentNode=n.parentNode,a.push(g),l.push(p),f.push(v)}var r,i,u=-1,o=this.length;if(!arguments.length){for(n=new Array(o=(r=this[0]).length);++u<o;)(i=r[u])&&(n[u]=i.__data__);return n}var a=Z([]),l=E([]),f=E([]);if("function"==typeof n)for(;++u<o;)e(r=this[u],n.call(r,r.parentNode.__data__,u));else for(;++u<o;)e(r=this[u],n);return l.enter=function(){return a},l.exit=function(){return f},l},Co.datum=function(n){return arguments.length?this.property("__data__",n):this.property("__data__")},Co.filter=function(n){var t,e,r,i=[];"function"!=typeof n&&(n=O(n));for(var u=0,o=this.length;o>u;u++){i.push(t=[]),t.parentNode=(e=this[u]).parentNode;for(var a=0,l=e.length;l>a;a++)(r=e[a])&&n.call(r,r.__data__,a,u)&&t.push(r)}return E(i)},Co.order=function(){for(var n=-1,t=this.length;++n<t;)for(var e,r=this[n],i=r.length-1,u=r[i];--i>=0;)(e=r[i])&&(u&&u!==e.nextSibling&&u.parentNode.insertBefore(e,u),u=e);return this},Co.sort=function(n){n=I.apply(this,arguments);for(var t=-1,e=this.length;++t<e;)this[t].sort(n);return this.order()},Co.each=function(n){return Y(this,function(t,e,r){n.call(t,t.__data__,e,r)})},Co.call=function(n){var t=co(arguments);return n.apply(t[0]=this,t),this},Co.empty=function(){return!this.node()},Co.node=function(){for(var n=0,t=this.length;t>n;n++)for(var e=this[n],r=0,i=e.length;i>r;r++){var u=e[r];if(u)return u}return null},Co.size=function(){var n=0;return Y(this,function(){++n}),n};var qo=[];ao.selection.enter=Z,ao.selection.enter.prototype=qo,qo.append=Co.append,qo.empty=Co.empty,qo.node=Co.node,qo.call=Co.call,qo.size=Co.size,qo.select=function(n){for(var t,e,r,i,u,o=[],a=-1,l=this.length;++a<l;){r=(i=this[a]).update,o.push(t=[]),t.parentNode=i.parentNode;for(var c=-1,f=i.length;++c<f;)(u=i[c])?(t.push(r[c]=e=n.call(i.parentNode,u.__data__,c,a)),e.__data__=u.__data__):t.push(null)}return E(o)},qo.insert=function(n,t){return arguments.length<2&&(t=V(this)),Co.insert.call(this,n,t)},ao.select=function(t){var e;return"string"==typeof t?(e=[No(t,fo)],e.parentNode=fo.documentElement):(e=[t],e.parentNode=n(t)),E([e])},ao.selectAll=function(n){var t;return"string"==typeof n?(t=co(Eo(n,fo)),t.parentNode=fo.documentElement):(t=co(n),t.parentNode=null),E([t])},Co.on=function(n,t,e){var r=arguments.length;if(3>r){if("string"!=typeof n){2>r&&(t=!1);for(e in n)this.each(X(e,n[e],t));return this}if(2>r)return(r=this.node()["__on"+n])&&r._;e=!1}return this.each(X(n,t,e))};var To=ao.map({mouseenter:"mouseover",mouseleave:"mouseout"});fo&&To.forEach(function(n){"on"+n in fo&&To.remove(n)});var Ro,Do=0;ao.mouse=function(n){return J(n,k())};var Po=this.navigator&&/WebKit/.test(this.navigator.userAgent)?-1:0;ao.touch=function(n,t,e){if(arguments.length<3&&(e=t,t=k().changedTouches),t)for(var r,i=0,u=t.length;u>i;++i)if((r=t[i]).identifier===e)return J(n,r)},ao.behavior.drag=function(){function n(){this.on("mousedown.drag",u).on("touchstart.drag",o)}function e(n,t,e,u,o){return function(){function a(){var n,e,r=t(h,v);r&&(n=r[0]-M[0],e=r[1]-M[1],g|=n|e,M=r,p({type:"drag",x:r[0]+c[0],y:r[1]+c[1],dx:n,dy:e}))}function l(){t(h,v)&&(y.on(u+d,null).on(o+d,null),m(g),p({type:"dragend"}))}var c,f=this,s=ao.event.target.correspondingElement||ao.event.target,h=f.parentNode,p=r.of(f,arguments),g=0,v=n(),d=".drag"+(null==v?"":"-"+v),y=ao.select(e(s)).on(u+d,a).on(o+d,l),m=W(s),M=t(h,v);i?(c=i.apply(f,arguments),c=[c.x-M[0],c.y-M[1]]):c=[0,0],p({type:"dragstart"})}}var r=N(n,"drag","dragstart","dragend"),i=null,u=e(b,ao.mouse,t,"mousemove","mouseup"),o=e(G,ao.touch,m,"touchmove","touchend");return n.origin=function(t){return arguments.length?(i=t,n):i},ao.rebind(n,r,"on")},ao.touches=function(n,t){return arguments.length<2&&(t=k().touches),t?co(t).map(function(t){var e=J(n,t);return e.identifier=t.identifier,e}):[]};var Uo=1e-6,jo=Uo*Uo,Fo=Math.PI,Ho=2*Fo,Oo=Ho-Uo,Io=Fo/2,Yo=Fo/180,Zo=180/Fo,Vo=Math.SQRT2,Xo=2,$o=4;ao.interpolateZoom=function(n,t){var e,r,i=n[0],u=n[1],o=n[2],a=t[0],l=t[1],c=t[2],f=a-i,s=l-u,h=f*f+s*s;if(jo>h)r=Math.log(c/o)/Vo,e=function(n){return[i+n*f,u+n*s,o*Math.exp(Vo*n*r)]};else{var p=Math.sqrt(h),g=(c*c-o*o+$o*h)/(2*o*Xo*p),v=(c*c-o*o-$o*h)/(2*c*Xo*p),d=Math.log(Math.sqrt(g*g+1)-g),y=Math.log(Math.sqrt(v*v+1)-v);r=(y-d)/Vo,e=function(n){var t=n*r,e=rn(d),a=o/(Xo*p)*(e*un(Vo*t+d)-en(d));return[i+a*f,u+a*s,o*e/rn(Vo*t+d)]}}return e.duration=1e3*r,e},ao.behavior.zoom=function(){function n(n){n.on(L,s).on(Wo+".zoom",p).on("dblclick.zoom",g).on(R,h)}function e(n){return[(n[0]-k.x)/k.k,(n[1]-k.y)/k.k]}function r(n){return[n[0]*k.k+k.x,n[1]*k.k+k.y]}function i(n){k.k=Math.max(A[0],Math.min(A[1],n))}function u(n,t){t=r(t),k.x+=n[0]-t[0],k.y+=n[1]-t[1]}function o(t,e,r,o){t.__chart__={x:k.x,y:k.y,k:k.k},i(Math.pow(2,o)),u(d=e,r),t=ao.select(t),C>0&&(t=t.transition().duration(C)),t.call(n.event)}function a(){b&&b.domain(x.range().map(function(n){return(n-k.x)/k.k}).map(x.invert)),w&&w.domain(_.range().map(function(n){return(n-k.y)/k.k}).map(_.invert))}function l(n){z++||n({type:"zoomstart"})}function c(n){a(),n({type:"zoom",scale:k.k,translate:[k.x,k.y]})}function f(n){--z||(n({type:"zoomend"}),d=null)}function s(){function n(){a=1,u(ao.mouse(i),h),c(o)}function r(){s.on(q,null).on(T,null),p(a),f(o)}var i=this,o=D.of(i,arguments),a=0,s=ao.select(t(i)).on(q,n).on(T,r),h=e(ao.mouse(i)),p=W(i);Il.call(i),l(o)}function h(){function n(){var n=ao.touches(g);return p=k.k,n.forEach(function(n){n.identifier in d&&(d[n.identifier]=e(n))}),n}function t(){var t=ao.event.target;ao.select(t).on(x,r).on(b,a),_.push(t);for(var e=ao.event.changedTouches,i=0,u=e.length;u>i;++i)d[e[i].identifier]=null;var l=n(),c=Date.now();if(1===l.length){if(500>c-M){var f=l[0];o(g,f,d[f.identifier],Math.floor(Math.log(k.k)/Math.LN2)+1),S()}M=c}else if(l.length>1){var f=l[0],s=l[1],h=f[0]-s[0],p=f[1]-s[1];y=h*h+p*p}}function r(){var n,t,e,r,o=ao.touches(g);Il.call(g);for(var a=0,l=o.length;l>a;++a,r=null)if(e=o[a],r=d[e.identifier]){if(t)break;n=e,t=r}if(r){var f=(f=e[0]-n[0])*f+(f=e[1]-n[1])*f,s=y&&Math.sqrt(f/y);n=[(n[0]+e[0])/2,(n[1]+e[1])/2],t=[(t[0]+r[0])/2,(t[1]+r[1])/2],i(s*p)}M=null,u(n,t),c(v)}function a(){if(ao.event.touches.length){for(var t=ao.event.changedTouches,e=0,r=t.length;r>e;++e)delete d[t[e].identifier];for(var i in d)return void n()}ao.selectAll(_).on(m,null),w.on(L,s).on(R,h),N(),f(v)}var p,g=this,v=D.of(g,arguments),d={},y=0,m=".zoom-"+ao.event.changedTouches[0].identifier,x="touchmove"+m,b="touchend"+m,_=[],w=ao.select(g),N=W(g);t(),l(v),w.on(L,null).on(R,t)}function p(){var n=D.of(this,arguments);m?clearTimeout(m):(Il.call(this),v=e(d=y||ao.mouse(this)),l(n)),m=setTimeout(function(){m=null,f(n)},50),S(),i(Math.pow(2,.002*Bo())*k.k),u(d,v),c(n)}function g(){var n=ao.mouse(this),t=Math.log(k.k)/Math.LN2;o(this,n,e(n),ao.event.shiftKey?Math.ceil(t)-1:Math.floor(t)+1)}var v,d,y,m,M,x,b,_,w,k={x:0,y:0,k:1},E=[960,500],A=Jo,C=250,z=0,L="mousedown.zoom",q="mousemove.zoom",T="mouseup.zoom",R="touchstart.zoom",D=N(n,"zoomstart","zoom","zoomend");return Wo||(Wo="onwheel"in fo?(Bo=function(){return-ao.event.deltaY*(ao.event.deltaMode?120:1)},"wheel"):"onmousewheel"in fo?(Bo=function(){return ao.event.wheelDelta},"mousewheel"):(Bo=function(){return-ao.event.detail},"MozMousePixelScroll")),n.event=function(n){n.each(function(){var n=D.of(this,arguments),t=k;Hl?ao.select(this).transition().each("start.zoom",function(){k=this.__chart__||{x:0,y:0,k:1},l(n)}).tween("zoom:zoom",function(){var e=E[0],r=E[1],i=d?d[0]:e/2,u=d?d[1]:r/2,o=ao.interpolateZoom([(i-k.x)/k.k,(u-k.y)/k.k,e/k.k],[(i-t.x)/t.k,(u-t.y)/t.k,e/t.k]);return function(t){var r=o(t),a=e/r[2];this.__chart__=k={x:i-r[0]*a,y:u-r[1]*a,k:a},c(n)}}).each("interrupt.zoom",function(){f(n)}).each("end.zoom",function(){f(n)}):(this.__chart__=k,l(n),c(n),f(n))})},n.translate=function(t){return arguments.length?(k={x:+t[0],y:+t[1],k:k.k},a(),n):[k.x,k.y]},n.scale=function(t){return arguments.length?(k={x:k.x,y:k.y,k:null},i(+t),a(),n):k.k},n.scaleExtent=function(t){return arguments.length?(A=null==t?Jo:[+t[0],+t[1]],n):A},n.center=function(t){return arguments.length?(y=t&&[+t[0],+t[1]],n):y},n.size=function(t){return arguments.length?(E=t&&[+t[0],+t[1]],n):E},n.duration=function(t){return arguments.length?(C=+t,n):C},n.x=function(t){return arguments.length?(b=t,x=t.copy(),k={x:0,y:0,k:1},n):b},n.y=function(t){return arguments.length?(w=t,_=t.copy(),k={x:0,y:0,k:1},n):w},ao.rebind(n,D,"on")};var Bo,Wo,Jo=[0,1/0];ao.color=an,an.prototype.toString=function(){return this.rgb()+""},ao.hsl=ln;var Go=ln.prototype=new an;Go.brighter=function(n){return n=Math.pow(.7,arguments.length?n:1),new ln(this.h,this.s,this.l/n)},Go.darker=function(n){return n=Math.pow(.7,arguments.length?n:1),new ln(this.h,this.s,n*this.l)},Go.rgb=function(){return cn(this.h,this.s,this.l)},ao.hcl=fn;var Ko=fn.prototype=new an;Ko.brighter=function(n){return new fn(this.h,this.c,Math.min(100,this.l+Qo*(arguments.length?n:1)))},Ko.darker=function(n){return new fn(this.h,this.c,Math.max(0,this.l-Qo*(arguments.length?n:1)))},Ko.rgb=function(){return sn(this.h,this.c,this.l).rgb()},ao.lab=hn;var Qo=18,na=.95047,ta=1,ea=1.08883,ra=hn.prototype=new an;ra.brighter=function(n){return new hn(Math.min(100,this.l+Qo*(arguments.length?n:1)),this.a,this.b)},ra.darker=function(n){return new hn(Math.max(0,this.l-Qo*(arguments.length?n:1)),this.a,this.b)},ra.rgb=function(){return pn(this.l,this.a,this.b)},ao.rgb=mn;var ia=mn.prototype=new an;ia.brighter=function(n){n=Math.pow(.7,arguments.length?n:1);var t=this.r,e=this.g,r=this.b,i=30;return t||e||r?(t&&i>t&&(t=i),e&&i>e&&(e=i),r&&i>r&&(r=i),new mn(Math.min(255,t/n),Math.min(255,e/n),Math.min(255,r/n))):new mn(i,i,i)},ia.darker=function(n){return n=Math.pow(.7,arguments.length?n:1),new mn(n*this.r,n*this.g,n*this.b)},ia.hsl=function(){return wn(this.r,this.g,this.b)},ia.toString=function(){return"#"+bn(this.r)+bn(this.g)+bn(this.b)};var ua=ao.map({aliceblue:15792383,antiquewhite:16444375,aqua:65535,aquamarine:8388564,azure:15794175,beige:16119260,bisque:16770244,black:0,blanchedalmond:16772045,blue:255,blueviolet:9055202,brown:10824234,burlywood:14596231,cadetblue:6266528,chartreuse:8388352,chocolate:13789470,coral:16744272,cornflowerblue:6591981,cornsilk:16775388,crimson:14423100,cyan:65535,darkblue:139,darkcyan:35723,darkgoldenrod:12092939,darkgray:11119017,darkgreen:25600,darkgrey:11119017,darkkhaki:12433259,darkmagenta:9109643,darkolivegreen:5597999,darkorange:16747520,darkorchid:10040012,darkred:9109504,darksalmon:15308410,darkseagreen:9419919,darkslateblue:4734347,darkslategray:3100495,darkslategrey:3100495,darkturquoise:52945,darkviolet:9699539,deeppink:16716947,deepskyblue:49151,dimgray:6908265,dimgrey:6908265,dodgerblue:2003199,firebrick:11674146,floralwhite:16775920,forestgreen:2263842,fuchsia:16711935,gainsboro:14474460,ghostwhite:16316671,gold:16766720,goldenrod:14329120,gray:8421504,green:32768,greenyellow:11403055,grey:8421504,honeydew:15794160,hotpink:16738740,indianred:13458524,indigo:4915330,ivory:16777200,khaki:15787660,lavender:15132410,lavenderblush:16773365,lawngreen:8190976,lemonchiffon:16775885,lightblue:11393254,lightcoral:15761536,lightcyan:14745599,lightgoldenrodyellow:16448210,lightgray:13882323,lightgreen:9498256,lightgrey:13882323,lightpink:16758465,lightsalmon:16752762,lightseagreen:2142890,lightskyblue:8900346,lightslategray:7833753,lightslategrey:7833753,lightsteelblue:11584734,lightyellow:16777184,lime:65280,limegreen:3329330,linen:16445670,magenta:16711935,maroon:8388608,mediumaquamarine:6737322,mediumblue:205,mediumorchid:12211667,mediumpurple:9662683,mediumseagreen:3978097,mediumslateblue:8087790,mediumspringgreen:64154,mediumturquoise:4772300,mediumvioletred:13047173,midnightblue:1644912,mintcream:16121850,mistyrose:16770273,moccasin:16770229,navajowhite:16768685,navy:128,oldlace:16643558,olive:8421376,olivedrab:7048739,orange:16753920,orangered:16729344,orchid:14315734,palegoldenrod:15657130,palegreen:10025880,paleturquoise:11529966,palevioletred:14381203,papayawhip:16773077,peachpuff:16767673,peru:13468991,pink:16761035,plum:14524637,powderblue:11591910,purple:8388736,rebeccapurple:6697881,red:16711680,rosybrown:12357519,royalblue:4286945,saddlebrown:9127187,salmon:16416882,sandybrown:16032864,seagreen:3050327,seashell:16774638,sienna:10506797,silver:12632256,skyblue:8900331,slateblue:6970061,slategray:7372944,slategrey:7372944,snow:16775930,springgreen:65407,steelblue:4620980,tan:13808780,teal:32896,thistle:14204888,tomato:16737095,turquoise:4251856,violet:15631086,wheat:16113331,white:16777215,whitesmoke:16119285,yellow:16776960,yellowgreen:10145074});ua.forEach(function(n,t){ua.set(n,Mn(t))}),ao.functor=En,ao.xhr=An(m),ao.dsv=function(n,t){function e(n,e,u){arguments.length<3&&(u=e,e=null);var o=Cn(n,t,null==e?r:i(e),u);return o.row=function(n){return arguments.length?o.response(null==(e=n)?r:i(n)):e},o}function r(n){return e.parse(n.responseText)}function i(n){return function(t){return e.parse(t.responseText,n)}}function u(t){return t.map(o).join(n)}function o(n){return a.test(n)?'"'+n.replace(/\"/g,'""')+'"':n}var a=new RegExp('["'+n+"\n]"),l=n.charCodeAt(0);return e.parse=function(n,t){var r;return e.parseRows(n,function(n,e){if(r)return r(n,e-1);var i=new Function("d","return {"+n.map(function(n,t){return JSON.stringify(n)+": d["+t+"]"}).join(",")+"}");r=t?function(n,e){return t(i(n),e)}:i})},e.parseRows=function(n,t){function e(){if(f>=c)return o;if(i)return i=!1,u;var t=f;if(34===n.charCodeAt(t)){for(var e=t;e++<c;)if(34===n.charCodeAt(e)){if(34!==n.charCodeAt(e+1))break;++e}f=e+2;var r=n.charCodeAt(e+1);return 13===r?(i=!0,10===n.charCodeAt(e+2)&&++f):10===r&&(i=!0),n.slice(t+1,e).replace(/""/g,'"')}for(;c>f;){var r=n.charCodeAt(f++),a=1;if(10===r)i=!0;else if(13===r)i=!0,10===n.charCodeAt(f)&&(++f,++a);else if(r!==l)continue;return n.slice(t,f-a)}return n.slice(t)}for(var r,i,u={},o={},a=[],c=n.length,f=0,s=0;(r=e())!==o;){for(var h=[];r!==u&&r!==o;)h.push(r),r=e();t&&null==(h=t(h,s++))||a.push(h)}return a},e.format=function(t){if(Array.isArray(t[0]))return e.formatRows(t);var r=new y,i=[];return t.forEach(function(n){for(var t in n)r.has(t)||i.push(r.add(t))}),[i.map(o).join(n)].concat(t.map(function(t){return i.map(function(n){return o(t[n])}).join(n)})).join("\n")},e.formatRows=function(n){return n.map(u).join("\n")},e},ao.csv=ao.dsv(",","text/csv"),ao.tsv=ao.dsv("	","text/tab-separated-values");var oa,aa,la,ca,fa=this[x(this,"requestAnimationFrame")]||function(n){setTimeout(n,17)};ao.timer=function(){qn.apply(this,arguments)},ao.timer.flush=function(){Rn(),Dn()},ao.round=function(n,t){return t?Math.round(n*(t=Math.pow(10,t)))/t:Math.round(n)};var sa=["y","z","a","f","p","n","\xb5","m","","k","M","G","T","P","E","Z","Y"].map(Un);ao.formatPrefix=function(n,t){var e=0;return(n=+n)&&(0>n&&(n*=-1),t&&(n=ao.round(n,Pn(n,t))),e=1+Math.floor(1e-12+Math.log(n)/Math.LN10),e=Math.max(-24,Math.min(24,3*Math.floor((e-1)/3)))),sa[8+e/3]};var ha=/(?:([^{])?([<>=^]))?([+\- ])?([$#])?(0)?(\d+)?(,)?(\.-?\d+)?([a-z%])?/i,pa=ao.map({b:function(n){return n.toString(2)},c:function(n){return String.fromCharCode(n)},o:function(n){return n.toString(8)},x:function(n){return n.toString(16)},X:function(n){return n.toString(16).toUpperCase()},g:function(n,t){return n.toPrecision(t)},e:function(n,t){return n.toExponential(t)},f:function(n,t){return n.toFixed(t)},r:function(n,t){return(n=ao.round(n,Pn(n,t))).toFixed(Math.max(0,Math.min(20,Pn(n*(1+1e-15),t))))}}),ga=ao.time={},va=Date;Hn.prototype={getDate:function(){return this._.getUTCDate()},getDay:function(){return this._.getUTCDay()},getFullYear:function(){return this._.getUTCFullYear()},getHours:function(){return this._.getUTCHours()},getMilliseconds:function(){return this._.getUTCMilliseconds()},getMinutes:function(){return this._.getUTCMinutes()},getMonth:function(){return this._.getUTCMonth()},getSeconds:function(){return this._.getUTCSeconds()},getTime:function(){return this._.getTime()},getTimezoneOffset:function(){return 0},valueOf:function(){return this._.valueOf()},setDate:function(){da.setUTCDate.apply(this._,arguments)},setDay:function(){da.setUTCDay.apply(this._,arguments)},setFullYear:function(){da.setUTCFullYear.apply(this._,arguments)},setHours:function(){da.setUTCHours.apply(this._,arguments)},setMilliseconds:function(){da.setUTCMilliseconds.apply(this._,arguments)},setMinutes:function(){da.setUTCMinutes.apply(this._,arguments)},setMonth:function(){da.setUTCMonth.apply(this._,arguments)},setSeconds:function(){da.setUTCSeconds.apply(this._,arguments)},setTime:function(){da.setTime.apply(this._,arguments)}};var da=Date.prototype;ga.year=On(function(n){return n=ga.day(n),n.setMonth(0,1),n},function(n,t){n.setFullYear(n.getFullYear()+t)},function(n){return n.getFullYear()}),ga.years=ga.year.range,ga.years.utc=ga.year.utc.range,ga.day=On(function(n){var t=new va(2e3,0);return t.setFullYear(n.getFullYear(),n.getMonth(),n.getDate()),t},function(n,t){n.setDate(n.getDate()+t)},function(n){return n.getDate()-1}),ga.days=ga.day.range,ga.days.utc=ga.day.utc.range,ga.dayOfYear=function(n){var t=ga.year(n);return Math.floor((n-t-6e4*(n.getTimezoneOffset()-t.getTimezoneOffset()))/864e5)},["sunday","monday","tuesday","wednesday","thursday","friday","saturday"].forEach(function(n,t){t=7-t;var e=ga[n]=On(function(n){return(n=ga.day(n)).setDate(n.getDate()-(n.getDay()+t)%7),n},function(n,t){n.setDate(n.getDate()+7*Math.floor(t))},function(n){var e=ga.year(n).getDay();return Math.floor((ga.dayOfYear(n)+(e+t)%7)/7)-(e!==t)});ga[n+"s"]=e.range,ga[n+"s"].utc=e.utc.range,ga[n+"OfYear"]=function(n){var e=ga.year(n).getDay();return Math.floor((ga.dayOfYear(n)+(e+t)%7)/7)}}),ga.week=ga.sunday,ga.weeks=ga.sunday.range,ga.weeks.utc=ga.sunday.utc.range,ga.weekOfYear=ga.sundayOfYear;var ya={"-":"",_:" ",0:"0"},ma=/^\s*\d+/,Ma=/^%/;ao.locale=function(n){return{numberFormat:jn(n),timeFormat:Yn(n)}};var xa=ao.locale({decimal:".",thousands:",",grouping:[3],currency:["$",""],dateTime:"%a %b %e %X %Y",date:"%m/%d/%Y",time:"%H:%M:%S",periods:["AM","PM"],days:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],
+shortDays:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],months:["January","February","March","April","May","June","July","August","September","October","November","December"],shortMonths:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"]});ao.format=xa.numberFormat,ao.geo={},ft.prototype={s:0,t:0,add:function(n){st(n,this.t,ba),st(ba.s,this.s,this),this.s?this.t+=ba.t:this.s=ba.t},reset:function(){this.s=this.t=0},valueOf:function(){return this.s}};var ba=new ft;ao.geo.stream=function(n,t){n&&_a.hasOwnProperty(n.type)?_a[n.type](n,t):ht(n,t)};var _a={Feature:function(n,t){ht(n.geometry,t)},FeatureCollection:function(n,t){for(var e=n.features,r=-1,i=e.length;++r<i;)ht(e[r].geometry,t)}},wa={Sphere:function(n,t){t.sphere()},Point:function(n,t){n=n.coordinates,t.point(n[0],n[1],n[2])},MultiPoint:function(n,t){for(var e=n.coordinates,r=-1,i=e.length;++r<i;)n=e[r],t.point(n[0],n[1],n[2])},LineString:function(n,t){pt(n.coordinates,t,0)},MultiLineString:function(n,t){for(var e=n.coordinates,r=-1,i=e.length;++r<i;)pt(e[r],t,0)},Polygon:function(n,t){gt(n.coordinates,t)},MultiPolygon:function(n,t){for(var e=n.coordinates,r=-1,i=e.length;++r<i;)gt(e[r],t)},GeometryCollection:function(n,t){for(var e=n.geometries,r=-1,i=e.length;++r<i;)ht(e[r],t)}};ao.geo.area=function(n){return Sa=0,ao.geo.stream(n,Na),Sa};var Sa,ka=new ft,Na={sphere:function(){Sa+=4*Fo},point:b,lineStart:b,lineEnd:b,polygonStart:function(){ka.reset(),Na.lineStart=vt},polygonEnd:function(){var n=2*ka;Sa+=0>n?4*Fo+n:n,Na.lineStart=Na.lineEnd=Na.point=b}};ao.geo.bounds=function(){function n(n,t){M.push(x=[f=n,h=n]),s>t&&(s=t),t>p&&(p=t)}function t(t,e){var r=dt([t*Yo,e*Yo]);if(y){var i=mt(y,r),u=[i[1],-i[0],0],o=mt(u,i);bt(o),o=_t(o);var l=t-g,c=l>0?1:-1,v=o[0]*Zo*c,d=xo(l)>180;if(d^(v>c*g&&c*t>v)){var m=o[1]*Zo;m>p&&(p=m)}else if(v=(v+360)%360-180,d^(v>c*g&&c*t>v)){var m=-o[1]*Zo;s>m&&(s=m)}else s>e&&(s=e),e>p&&(p=e);d?g>t?a(f,t)>a(f,h)&&(h=t):a(t,h)>a(f,h)&&(f=t):h>=f?(f>t&&(f=t),t>h&&(h=t)):t>g?a(f,t)>a(f,h)&&(h=t):a(t,h)>a(f,h)&&(f=t)}else n(t,e);y=r,g=t}function e(){b.point=t}function r(){x[0]=f,x[1]=h,b.point=n,y=null}function i(n,e){if(y){var r=n-g;m+=xo(r)>180?r+(r>0?360:-360):r}else v=n,d=e;Na.point(n,e),t(n,e)}function u(){Na.lineStart()}function o(){i(v,d),Na.lineEnd(),xo(m)>Uo&&(f=-(h=180)),x[0]=f,x[1]=h,y=null}function a(n,t){return(t-=n)<0?t+360:t}function l(n,t){return n[0]-t[0]}function c(n,t){return t[0]<=t[1]?t[0]<=n&&n<=t[1]:n<t[0]||t[1]<n}var f,s,h,p,g,v,d,y,m,M,x,b={point:n,lineStart:e,lineEnd:r,polygonStart:function(){b.point=i,b.lineStart=u,b.lineEnd=o,m=0,Na.polygonStart()},polygonEnd:function(){Na.polygonEnd(),b.point=n,b.lineStart=e,b.lineEnd=r,0>ka?(f=-(h=180),s=-(p=90)):m>Uo?p=90:-Uo>m&&(s=-90),x[0]=f,x[1]=h}};return function(n){p=h=-(f=s=1/0),M=[],ao.geo.stream(n,b);var t=M.length;if(t){M.sort(l);for(var e,r=1,i=M[0],u=[i];t>r;++r)e=M[r],c(e[0],i)||c(e[1],i)?(a(i[0],e[1])>a(i[0],i[1])&&(i[1]=e[1]),a(e[0],i[1])>a(i[0],i[1])&&(i[0]=e[0])):u.push(i=e);for(var o,e,g=-(1/0),t=u.length-1,r=0,i=u[t];t>=r;i=e,++r)e=u[r],(o=a(i[1],e[0]))>g&&(g=o,f=e[0],h=i[1])}return M=x=null,f===1/0||s===1/0?[[NaN,NaN],[NaN,NaN]]:[[f,s],[h,p]]}}(),ao.geo.centroid=function(n){Ea=Aa=Ca=za=La=qa=Ta=Ra=Da=Pa=Ua=0,ao.geo.stream(n,ja);var t=Da,e=Pa,r=Ua,i=t*t+e*e+r*r;return jo>i&&(t=qa,e=Ta,r=Ra,Uo>Aa&&(t=Ca,e=za,r=La),i=t*t+e*e+r*r,jo>i)?[NaN,NaN]:[Math.atan2(e,t)*Zo,tn(r/Math.sqrt(i))*Zo]};var Ea,Aa,Ca,za,La,qa,Ta,Ra,Da,Pa,Ua,ja={sphere:b,point:St,lineStart:Nt,lineEnd:Et,polygonStart:function(){ja.lineStart=At},polygonEnd:function(){ja.lineStart=Nt}},Fa=Rt(zt,jt,Ht,[-Fo,-Fo/2]),Ha=1e9;ao.geo.clipExtent=function(){var n,t,e,r,i,u,o={stream:function(n){return i&&(i.valid=!1),i=u(n),i.valid=!0,i},extent:function(a){return arguments.length?(u=Zt(n=+a[0][0],t=+a[0][1],e=+a[1][0],r=+a[1][1]),i&&(i.valid=!1,i=null),o):[[n,t],[e,r]]}};return o.extent([[0,0],[960,500]])},(ao.geo.conicEqualArea=function(){return Vt(Xt)}).raw=Xt,ao.geo.albers=function(){return ao.geo.conicEqualArea().rotate([96,0]).center([-.6,38.7]).parallels([29.5,45.5]).scale(1070)},ao.geo.albersUsa=function(){function n(n){var u=n[0],o=n[1];return t=null,e(u,o),t||(r(u,o),t)||i(u,o),t}var t,e,r,i,u=ao.geo.albers(),o=ao.geo.conicEqualArea().rotate([154,0]).center([-2,58.5]).parallels([55,65]),a=ao.geo.conicEqualArea().rotate([157,0]).center([-3,19.9]).parallels([8,18]),l={point:function(n,e){t=[n,e]}};return n.invert=function(n){var t=u.scale(),e=u.translate(),r=(n[0]-e[0])/t,i=(n[1]-e[1])/t;return(i>=.12&&.234>i&&r>=-.425&&-.214>r?o:i>=.166&&.234>i&&r>=-.214&&-.115>r?a:u).invert(n)},n.stream=function(n){var t=u.stream(n),e=o.stream(n),r=a.stream(n);return{point:function(n,i){t.point(n,i),e.point(n,i),r.point(n,i)},sphere:function(){t.sphere(),e.sphere(),r.sphere()},lineStart:function(){t.lineStart(),e.lineStart(),r.lineStart()},lineEnd:function(){t.lineEnd(),e.lineEnd(),r.lineEnd()},polygonStart:function(){t.polygonStart(),e.polygonStart(),r.polygonStart()},polygonEnd:function(){t.polygonEnd(),e.polygonEnd(),r.polygonEnd()}}},n.precision=function(t){return arguments.length?(u.precision(t),o.precision(t),a.precision(t),n):u.precision()},n.scale=function(t){return arguments.length?(u.scale(t),o.scale(.35*t),a.scale(t),n.translate(u.translate())):u.scale()},n.translate=function(t){if(!arguments.length)return u.translate();var c=u.scale(),f=+t[0],s=+t[1];return e=u.translate(t).clipExtent([[f-.455*c,s-.238*c],[f+.455*c,s+.238*c]]).stream(l).point,r=o.translate([f-.307*c,s+.201*c]).clipExtent([[f-.425*c+Uo,s+.12*c+Uo],[f-.214*c-Uo,s+.234*c-Uo]]).stream(l).point,i=a.translate([f-.205*c,s+.212*c]).clipExtent([[f-.214*c+Uo,s+.166*c+Uo],[f-.115*c-Uo,s+.234*c-Uo]]).stream(l).point,n},n.scale(1070)};var Oa,Ia,Ya,Za,Va,Xa,$a={point:b,lineStart:b,lineEnd:b,polygonStart:function(){Ia=0,$a.lineStart=$t},polygonEnd:function(){$a.lineStart=$a.lineEnd=$a.point=b,Oa+=xo(Ia/2)}},Ba={point:Bt,lineStart:b,lineEnd:b,polygonStart:b,polygonEnd:b},Wa={point:Gt,lineStart:Kt,lineEnd:Qt,polygonStart:function(){Wa.lineStart=ne},polygonEnd:function(){Wa.point=Gt,Wa.lineStart=Kt,Wa.lineEnd=Qt}};ao.geo.path=function(){function n(n){return n&&("function"==typeof a&&u.pointRadius(+a.apply(this,arguments)),o&&o.valid||(o=i(u)),ao.geo.stream(n,o)),u.result()}function t(){return o=null,n}var e,r,i,u,o,a=4.5;return n.area=function(n){return Oa=0,ao.geo.stream(n,i($a)),Oa},n.centroid=function(n){return Ca=za=La=qa=Ta=Ra=Da=Pa=Ua=0,ao.geo.stream(n,i(Wa)),Ua?[Da/Ua,Pa/Ua]:Ra?[qa/Ra,Ta/Ra]:La?[Ca/La,za/La]:[NaN,NaN]},n.bounds=function(n){return Va=Xa=-(Ya=Za=1/0),ao.geo.stream(n,i(Ba)),[[Ya,Za],[Va,Xa]]},n.projection=function(n){return arguments.length?(i=(e=n)?n.stream||re(n):m,t()):e},n.context=function(n){return arguments.length?(u=null==(r=n)?new Wt:new te(n),"function"!=typeof a&&u.pointRadius(a),t()):r},n.pointRadius=function(t){return arguments.length?(a="function"==typeof t?t:(u.pointRadius(+t),+t),n):a},n.projection(ao.geo.albersUsa()).context(null)},ao.geo.transform=function(n){return{stream:function(t){var e=new ie(t);for(var r in n)e[r]=n[r];return e}}},ie.prototype={point:function(n,t){this.stream.point(n,t)},sphere:function(){this.stream.sphere()},lineStart:function(){this.stream.lineStart()},lineEnd:function(){this.stream.lineEnd()},polygonStart:function(){this.stream.polygonStart()},polygonEnd:function(){this.stream.polygonEnd()}},ao.geo.projection=oe,ao.geo.projectionMutator=ae,(ao.geo.equirectangular=function(){return oe(ce)}).raw=ce.invert=ce,ao.geo.rotation=function(n){function t(t){return t=n(t[0]*Yo,t[1]*Yo),t[0]*=Zo,t[1]*=Zo,t}return n=se(n[0]%360*Yo,n[1]*Yo,n.length>2?n[2]*Yo:0),t.invert=function(t){return t=n.invert(t[0]*Yo,t[1]*Yo),t[0]*=Zo,t[1]*=Zo,t},t},fe.invert=ce,ao.geo.circle=function(){function n(){var n="function"==typeof r?r.apply(this,arguments):r,t=se(-n[0]*Yo,-n[1]*Yo,0).invert,i=[];return e(null,null,1,{point:function(n,e){i.push(n=t(n,e)),n[0]*=Zo,n[1]*=Zo}}),{type:"Polygon",coordinates:[i]}}var t,e,r=[0,0],i=6;return n.origin=function(t){return arguments.length?(r=t,n):r},n.angle=function(r){return arguments.length?(e=ve((t=+r)*Yo,i*Yo),n):t},n.precision=function(r){return arguments.length?(e=ve(t*Yo,(i=+r)*Yo),n):i},n.angle(90)},ao.geo.distance=function(n,t){var e,r=(t[0]-n[0])*Yo,i=n[1]*Yo,u=t[1]*Yo,o=Math.sin(r),a=Math.cos(r),l=Math.sin(i),c=Math.cos(i),f=Math.sin(u),s=Math.cos(u);return Math.atan2(Math.sqrt((e=s*o)*e+(e=c*f-l*s*a)*e),l*f+c*s*a)},ao.geo.graticule=function(){function n(){return{type:"MultiLineString",coordinates:t()}}function t(){return ao.range(Math.ceil(u/d)*d,i,d).map(h).concat(ao.range(Math.ceil(c/y)*y,l,y).map(p)).concat(ao.range(Math.ceil(r/g)*g,e,g).filter(function(n){return xo(n%d)>Uo}).map(f)).concat(ao.range(Math.ceil(a/v)*v,o,v).filter(function(n){return xo(n%y)>Uo}).map(s))}var e,r,i,u,o,a,l,c,f,s,h,p,g=10,v=g,d=90,y=360,m=2.5;return n.lines=function(){return t().map(function(n){return{type:"LineString",coordinates:n}})},n.outline=function(){return{type:"Polygon",coordinates:[h(u).concat(p(l).slice(1),h(i).reverse().slice(1),p(c).reverse().slice(1))]}},n.extent=function(t){return arguments.length?n.majorExtent(t).minorExtent(t):n.minorExtent()},n.majorExtent=function(t){return arguments.length?(u=+t[0][0],i=+t[1][0],c=+t[0][1],l=+t[1][1],u>i&&(t=u,u=i,i=t),c>l&&(t=c,c=l,l=t),n.precision(m)):[[u,c],[i,l]]},n.minorExtent=function(t){return arguments.length?(r=+t[0][0],e=+t[1][0],a=+t[0][1],o=+t[1][1],r>e&&(t=r,r=e,e=t),a>o&&(t=a,a=o,o=t),n.precision(m)):[[r,a],[e,o]]},n.step=function(t){return arguments.length?n.majorStep(t).minorStep(t):n.minorStep()},n.majorStep=function(t){return arguments.length?(d=+t[0],y=+t[1],n):[d,y]},n.minorStep=function(t){return arguments.length?(g=+t[0],v=+t[1],n):[g,v]},n.precision=function(t){return arguments.length?(m=+t,f=ye(a,o,90),s=me(r,e,m),h=ye(c,l,90),p=me(u,i,m),n):m},n.majorExtent([[-180,-90+Uo],[180,90-Uo]]).minorExtent([[-180,-80-Uo],[180,80+Uo]])},ao.geo.greatArc=function(){function n(){return{type:"LineString",coordinates:[t||r.apply(this,arguments),e||i.apply(this,arguments)]}}var t,e,r=Me,i=xe;return n.distance=function(){return ao.geo.distance(t||r.apply(this,arguments),e||i.apply(this,arguments))},n.source=function(e){return arguments.length?(r=e,t="function"==typeof e?null:e,n):r},n.target=function(t){return arguments.length?(i=t,e="function"==typeof t?null:t,n):i},n.precision=function(){return arguments.length?n:0},n},ao.geo.interpolate=function(n,t){return be(n[0]*Yo,n[1]*Yo,t[0]*Yo,t[1]*Yo)},ao.geo.length=function(n){return Ja=0,ao.geo.stream(n,Ga),Ja};var Ja,Ga={sphere:b,point:b,lineStart:_e,lineEnd:b,polygonStart:b,polygonEnd:b},Ka=we(function(n){return Math.sqrt(2/(1+n))},function(n){return 2*Math.asin(n/2)});(ao.geo.azimuthalEqualArea=function(){return oe(Ka)}).raw=Ka;var Qa=we(function(n){var t=Math.acos(n);return t&&t/Math.sin(t)},m);(ao.geo.azimuthalEquidistant=function(){return oe(Qa)}).raw=Qa,(ao.geo.conicConformal=function(){return Vt(Se)}).raw=Se,(ao.geo.conicEquidistant=function(){return Vt(ke)}).raw=ke;var nl=we(function(n){return 1/n},Math.atan);(ao.geo.gnomonic=function(){return oe(nl)}).raw=nl,Ne.invert=function(n,t){return[n,2*Math.atan(Math.exp(t))-Io]},(ao.geo.mercator=function(){return Ee(Ne)}).raw=Ne;var tl=we(function(){return 1},Math.asin);(ao.geo.orthographic=function(){return oe(tl)}).raw=tl;var el=we(function(n){return 1/(1+n)},function(n){return 2*Math.atan(n)});(ao.geo.stereographic=function(){return oe(el)}).raw=el,Ae.invert=function(n,t){return[-t,2*Math.atan(Math.exp(n))-Io]},(ao.geo.transverseMercator=function(){var n=Ee(Ae),t=n.center,e=n.rotate;return n.center=function(n){return n?t([-n[1],n[0]]):(n=t(),[n[1],-n[0]])},n.rotate=function(n){return n?e([n[0],n[1],n.length>2?n[2]+90:90]):(n=e(),[n[0],n[1],n[2]-90])},e([0,0,90])}).raw=Ae,ao.geom={},ao.geom.hull=function(n){function t(n){if(n.length<3)return[];var t,i=En(e),u=En(r),o=n.length,a=[],l=[];for(t=0;o>t;t++)a.push([+i.call(this,n[t],t),+u.call(this,n[t],t),t]);for(a.sort(qe),t=0;o>t;t++)l.push([a[t][0],-a[t][1]]);var c=Le(a),f=Le(l),s=f[0]===c[0],h=f[f.length-1]===c[c.length-1],p=[];for(t=c.length-1;t>=0;--t)p.push(n[a[c[t]][2]]);for(t=+s;t<f.length-h;++t)p.push(n[a[f[t]][2]]);return p}var e=Ce,r=ze;return arguments.length?t(n):(t.x=function(n){return arguments.length?(e=n,t):e},t.y=function(n){return arguments.length?(r=n,t):r},t)},ao.geom.polygon=function(n){return ko(n,rl),n};var rl=ao.geom.polygon.prototype=[];rl.area=function(){for(var n,t=-1,e=this.length,r=this[e-1],i=0;++t<e;)n=r,r=this[t],i+=n[1]*r[0]-n[0]*r[1];return.5*i},rl.centroid=function(n){var t,e,r=-1,i=this.length,u=0,o=0,a=this[i-1];for(arguments.length||(n=-1/(6*this.area()));++r<i;)t=a,a=this[r],e=t[0]*a[1]-a[0]*t[1],u+=(t[0]+a[0])*e,o+=(t[1]+a[1])*e;return[u*n,o*n]},rl.clip=function(n){for(var t,e,r,i,u,o,a=De(n),l=-1,c=this.length-De(this),f=this[c-1];++l<c;){for(t=n.slice(),n.length=0,i=this[l],u=t[(r=t.length-a)-1],e=-1;++e<r;)o=t[e],Te(o,f,i)?(Te(u,f,i)||n.push(Re(u,o,f,i)),n.push(o)):Te(u,f,i)&&n.push(Re(u,o,f,i)),u=o;a&&n.push(n[0]),f=i}return n};var il,ul,ol,al,ll,cl=[],fl=[];Ye.prototype.prepare=function(){for(var n,t=this.edges,e=t.length;e--;)n=t[e].edge,n.b&&n.a||t.splice(e,1);return t.sort(Ve),t.length},tr.prototype={start:function(){return this.edge.l===this.site?this.edge.a:this.edge.b},end:function(){return this.edge.l===this.site?this.edge.b:this.edge.a}},er.prototype={insert:function(n,t){var e,r,i;if(n){if(t.P=n,t.N=n.N,n.N&&(n.N.P=t),n.N=t,n.R){for(n=n.R;n.L;)n=n.L;n.L=t}else n.R=t;e=n}else this._?(n=or(this._),t.P=null,t.N=n,n.P=n.L=t,e=n):(t.P=t.N=null,this._=t,e=null);for(t.L=t.R=null,t.U=e,t.C=!0,n=t;e&&e.C;)r=e.U,e===r.L?(i=r.R,i&&i.C?(e.C=i.C=!1,r.C=!0,n=r):(n===e.R&&(ir(this,e),n=e,e=n.U),e.C=!1,r.C=!0,ur(this,r))):(i=r.L,i&&i.C?(e.C=i.C=!1,r.C=!0,n=r):(n===e.L&&(ur(this,e),n=e,e=n.U),e.C=!1,r.C=!0,ir(this,r))),e=n.U;this._.C=!1},remove:function(n){n.N&&(n.N.P=n.P),n.P&&(n.P.N=n.N),n.N=n.P=null;var t,e,r,i=n.U,u=n.L,o=n.R;if(e=u?o?or(o):u:o,i?i.L===n?i.L=e:i.R=e:this._=e,u&&o?(r=e.C,e.C=n.C,e.L=u,u.U=e,e!==o?(i=e.U,e.U=n.U,n=e.R,i.L=n,e.R=o,o.U=e):(e.U=i,i=e,n=e.R)):(r=n.C,n=e),n&&(n.U=i),!r){if(n&&n.C)return void(n.C=!1);do{if(n===this._)break;if(n===i.L){if(t=i.R,t.C&&(t.C=!1,i.C=!0,ir(this,i),t=i.R),t.L&&t.L.C||t.R&&t.R.C){t.R&&t.R.C||(t.L.C=!1,t.C=!0,ur(this,t),t=i.R),t.C=i.C,i.C=t.R.C=!1,ir(this,i),n=this._;break}}else if(t=i.L,t.C&&(t.C=!1,i.C=!0,ur(this,i),t=i.L),t.L&&t.L.C||t.R&&t.R.C){t.L&&t.L.C||(t.R.C=!1,t.C=!0,ir(this,t),t=i.L),t.C=i.C,i.C=t.L.C=!1,ur(this,i),n=this._;break}t.C=!0,n=i,i=i.U}while(!n.C);n&&(n.C=!1)}}},ao.geom.voronoi=function(n){function t(n){var t=new Array(n.length),r=a[0][0],i=a[0][1],u=a[1][0],o=a[1][1];return ar(e(n),a).cells.forEach(function(e,a){var l=e.edges,c=e.site,f=t[a]=l.length?l.map(function(n){var t=n.start();return[t.x,t.y]}):c.x>=r&&c.x<=u&&c.y>=i&&c.y<=o?[[r,o],[u,o],[u,i],[r,i]]:[];f.point=n[a]}),t}function e(n){return n.map(function(n,t){return{x:Math.round(u(n,t)/Uo)*Uo,y:Math.round(o(n,t)/Uo)*Uo,i:t}})}var r=Ce,i=ze,u=r,o=i,a=sl;return n?t(n):(t.links=function(n){return ar(e(n)).edges.filter(function(n){return n.l&&n.r}).map(function(t){return{source:n[t.l.i],target:n[t.r.i]}})},t.triangles=function(n){var t=[];return ar(e(n)).cells.forEach(function(e,r){for(var i,u,o=e.site,a=e.edges.sort(Ve),l=-1,c=a.length,f=a[c-1].edge,s=f.l===o?f.r:f.l;++l<c;)i=f,u=s,f=a[l].edge,s=f.l===o?f.r:f.l,r<u.i&&r<s.i&&cr(o,u,s)<0&&t.push([n[r],n[u.i],n[s.i]])}),t},t.x=function(n){return arguments.length?(u=En(r=n),t):r},t.y=function(n){return arguments.length?(o=En(i=n),t):i},t.clipExtent=function(n){return arguments.length?(a=null==n?sl:n,t):a===sl?null:a},t.size=function(n){return arguments.length?t.clipExtent(n&&[[0,0],n]):a===sl?null:a&&a[1]},t)};var sl=[[-1e6,-1e6],[1e6,1e6]];ao.geom.delaunay=function(n){return ao.geom.voronoi().triangles(n)},ao.geom.quadtree=function(n,t,e,r,i){function u(n){function u(n,t,e,r,i,u,o,a){if(!isNaN(e)&&!isNaN(r))if(n.leaf){var l=n.x,f=n.y;if(null!=l)if(xo(l-e)+xo(f-r)<.01)c(n,t,e,r,i,u,o,a);else{var s=n.point;n.x=n.y=n.point=null,c(n,s,l,f,i,u,o,a),c(n,t,e,r,i,u,o,a)}else n.x=e,n.y=r,n.point=t}else c(n,t,e,r,i,u,o,a)}function c(n,t,e,r,i,o,a,l){var c=.5*(i+a),f=.5*(o+l),s=e>=c,h=r>=f,p=h<<1|s;n.leaf=!1,n=n.nodes[p]||(n.nodes[p]=hr()),s?i=c:a=c,h?o=f:l=f,u(n,t,e,r,i,o,a,l)}var f,s,h,p,g,v,d,y,m,M=En(a),x=En(l);if(null!=t)v=t,d=e,y=r,m=i;else if(y=m=-(v=d=1/0),s=[],h=[],g=n.length,o)for(p=0;g>p;++p)f=n[p],f.x<v&&(v=f.x),f.y<d&&(d=f.y),f.x>y&&(y=f.x),f.y>m&&(m=f.y),s.push(f.x),h.push(f.y);else for(p=0;g>p;++p){var b=+M(f=n[p],p),_=+x(f,p);v>b&&(v=b),d>_&&(d=_),b>y&&(y=b),_>m&&(m=_),s.push(b),h.push(_)}var w=y-v,S=m-d;w>S?m=d+w:y=v+S;var k=hr();if(k.add=function(n){u(k,n,+M(n,++p),+x(n,p),v,d,y,m)},k.visit=function(n){pr(n,k,v,d,y,m)},k.find=function(n){return gr(k,n[0],n[1],v,d,y,m)},p=-1,null==t){for(;++p<g;)u(k,n[p],s[p],h[p],v,d,y,m);--p}else n.forEach(k.add);return s=h=n=f=null,k}var o,a=Ce,l=ze;return(o=arguments.length)?(a=fr,l=sr,3===o&&(i=e,r=t,e=t=0),u(n)):(u.x=function(n){return arguments.length?(a=n,u):a},u.y=function(n){return arguments.length?(l=n,u):l},u.extent=function(n){return arguments.length?(null==n?t=e=r=i=null:(t=+n[0][0],e=+n[0][1],r=+n[1][0],i=+n[1][1]),u):null==t?null:[[t,e],[r,i]]},u.size=function(n){return arguments.length?(null==n?t=e=r=i=null:(t=e=0,r=+n[0],i=+n[1]),u):null==t?null:[r-t,i-e]},u)},ao.interpolateRgb=vr,ao.interpolateObject=dr,ao.interpolateNumber=yr,ao.interpolateString=mr;var hl=/[-+]?(?:\d+\.?\d*|\.?\d+)(?:[eE][-+]?\d+)?/g,pl=new RegExp(hl.source,"g");ao.interpolate=Mr,ao.interpolators=[function(n,t){var e=typeof t;return("string"===e?ua.has(t.toLowerCase())||/^(#|rgb\(|hsl\()/i.test(t)?vr:mr:t instanceof an?vr:Array.isArray(t)?xr:"object"===e&&isNaN(t)?dr:yr)(n,t)}],ao.interpolateArray=xr;var gl=function(){return m},vl=ao.map({linear:gl,poly:Er,quad:function(){return Sr},cubic:function(){return kr},sin:function(){return Ar},exp:function(){return Cr},circle:function(){return zr},elastic:Lr,back:qr,bounce:function(){return Tr}}),dl=ao.map({"in":m,out:_r,"in-out":wr,"out-in":function(n){return wr(_r(n))}});ao.ease=function(n){var t=n.indexOf("-"),e=t>=0?n.slice(0,t):n,r=t>=0?n.slice(t+1):"in";return e=vl.get(e)||gl,r=dl.get(r)||m,br(r(e.apply(null,lo.call(arguments,1))))},ao.interpolateHcl=Rr,ao.interpolateHsl=Dr,ao.interpolateLab=Pr,ao.interpolateRound=Ur,ao.transform=function(n){var t=fo.createElementNS(ao.ns.prefix.svg,"g");return(ao.transform=function(n){if(null!=n){t.setAttribute("transform",n);var e=t.transform.baseVal.consolidate()}return new jr(e?e.matrix:yl)})(n)},jr.prototype.toString=function(){return"translate("+this.translate+")rotate("+this.rotate+")skewX("+this.skew+")scale("+this.scale+")"};var yl={a:1,b:0,c:0,d:1,e:0,f:0};ao.interpolateTransform=$r,ao.layout={},ao.layout.bundle=function(){return function(n){for(var t=[],e=-1,r=n.length;++e<r;)t.push(Jr(n[e]));return t}},ao.layout.chord=function(){function n(){var n,c,s,h,p,g={},v=[],d=ao.range(u),y=[];for(e=[],r=[],n=0,h=-1;++h<u;){for(c=0,p=-1;++p<u;)c+=i[h][p];v.push(c),y.push(ao.range(u)),n+=c}for(o&&d.sort(function(n,t){return o(v[n],v[t])}),a&&y.forEach(function(n,t){n.sort(function(n,e){return a(i[t][n],i[t][e])})}),n=(Ho-f*u)/n,c=0,h=-1;++h<u;){for(s=c,p=-1;++p<u;){var m=d[h],M=y[m][p],x=i[m][M],b=c,_=c+=x*n;g[m+"-"+M]={index:m,subindex:M,startAngle:b,endAngle:_,value:x}}r[m]={index:m,startAngle:s,endAngle:c,value:v[m]},c+=f}for(h=-1;++h<u;)for(p=h-1;++p<u;){var w=g[h+"-"+p],S=g[p+"-"+h];(w.value||S.value)&&e.push(w.value<S.value?{source:S,target:w}:{source:w,target:S})}l&&t()}function t(){e.sort(function(n,t){return l((n.source.value+n.target.value)/2,(t.source.value+t.target.value)/2)})}var e,r,i,u,o,a,l,c={},f=0;return c.matrix=function(n){return arguments.length?(u=(i=n)&&i.length,e=r=null,c):i},c.padding=function(n){return arguments.length?(f=n,e=r=null,c):f},c.sortGroups=function(n){return arguments.length?(o=n,e=r=null,c):o},c.sortSubgroups=function(n){return arguments.length?(a=n,e=null,c):a},c.sortChords=function(n){return arguments.length?(l=n,e&&t(),c):l},c.chords=function(){return e||n(),e},c.groups=function(){return r||n(),r},c},ao.layout.force=function(){function n(n){return function(t,e,r,i){if(t.point!==n){var u=t.cx-n.x,o=t.cy-n.y,a=i-e,l=u*u+o*o;if(l>a*a/y){if(v>l){var c=t.charge/l;n.px-=u*c,n.py-=o*c}return!0}if(t.point&&l&&v>l){var c=t.pointCharge/l;n.px-=u*c,n.py-=o*c}}return!t.charge}}function t(n){n.px=ao.event.x,n.py=ao.event.y,l.resume()}var e,r,i,u,o,a,l={},c=ao.dispatch("start","tick","end"),f=[1,1],s=.9,h=ml,p=Ml,g=-30,v=xl,d=.1,y=.64,M=[],x=[];return l.tick=function(){if((i*=.99)<.005)return e=null,c.end({type:"end",alpha:i=0}),!0;var t,r,l,h,p,v,y,m,b,_=M.length,w=x.length;for(r=0;w>r;++r)l=x[r],h=l.source,p=l.target,m=p.x-h.x,b=p.y-h.y,(v=m*m+b*b)&&(v=i*o[r]*((v=Math.sqrt(v))-u[r])/v,m*=v,b*=v,p.x-=m*(y=h.weight+p.weight?h.weight/(h.weight+p.weight):.5),p.y-=b*y,h.x+=m*(y=1-y),h.y+=b*y);if((y=i*d)&&(m=f[0]/2,b=f[1]/2,r=-1,y))for(;++r<_;)l=M[r],l.x+=(m-l.x)*y,l.y+=(b-l.y)*y;if(g)for(ri(t=ao.geom.quadtree(M),i,a),r=-1;++r<_;)(l=M[r]).fixed||t.visit(n(l));for(r=-1;++r<_;)l=M[r],l.fixed?(l.x=l.px,l.y=l.py):(l.x-=(l.px-(l.px=l.x))*s,l.y-=(l.py-(l.py=l.y))*s);c.tick({type:"tick",alpha:i})},l.nodes=function(n){return arguments.length?(M=n,l):M},l.links=function(n){return arguments.length?(x=n,l):x},l.size=function(n){return arguments.length?(f=n,l):f},l.linkDistance=function(n){return arguments.length?(h="function"==typeof n?n:+n,l):h},l.distance=l.linkDistance,l.linkStrength=function(n){return arguments.length?(p="function"==typeof n?n:+n,l):p},l.friction=function(n){return arguments.length?(s=+n,l):s},l.charge=function(n){return arguments.length?(g="function"==typeof n?n:+n,l):g},l.chargeDistance=function(n){return arguments.length?(v=n*n,l):Math.sqrt(v)},l.gravity=function(n){return arguments.length?(d=+n,l):d},l.theta=function(n){return arguments.length?(y=n*n,l):Math.sqrt(y)},l.alpha=function(n){return arguments.length?(n=+n,i?n>0?i=n:(e.c=null,e.t=NaN,e=null,c.end({type:"end",alpha:i=0})):n>0&&(c.start({type:"start",alpha:i=n}),e=qn(l.tick)),l):i},l.start=function(){function n(n,r){if(!e){for(e=new Array(i),l=0;i>l;++l)e[l]=[];for(l=0;c>l;++l){var u=x[l];e[u.source.index].push(u.target),e[u.target.index].push(u.source)}}for(var o,a=e[t],l=-1,f=a.length;++l<f;)if(!isNaN(o=a[l][n]))return o;return Math.random()*r}var t,e,r,i=M.length,c=x.length,s=f[0],v=f[1];for(t=0;i>t;++t)(r=M[t]).index=t,r.weight=0;for(t=0;c>t;++t)r=x[t],"number"==typeof r.source&&(r.source=M[r.source]),"number"==typeof r.target&&(r.target=M[r.target]),++r.source.weight,++r.target.weight;for(t=0;i>t;++t)r=M[t],isNaN(r.x)&&(r.x=n("x",s)),isNaN(r.y)&&(r.y=n("y",v)),isNaN(r.px)&&(r.px=r.x),isNaN(r.py)&&(r.py=r.y);if(u=[],"function"==typeof h)for(t=0;c>t;++t)u[t]=+h.call(this,x[t],t);else for(t=0;c>t;++t)u[t]=h;if(o=[],"function"==typeof p)for(t=0;c>t;++t)o[t]=+p.call(this,x[t],t);else for(t=0;c>t;++t)o[t]=p;if(a=[],"function"==typeof g)for(t=0;i>t;++t)a[t]=+g.call(this,M[t],t);else for(t=0;i>t;++t)a[t]=g;return l.resume()},l.resume=function(){return l.alpha(.1)},l.stop=function(){return l.alpha(0)},l.drag=function(){return r||(r=ao.behavior.drag().origin(m).on("dragstart.force",Qr).on("drag.force",t).on("dragend.force",ni)),arguments.length?void this.on("mouseover.force",ti).on("mouseout.force",ei).call(r):r},ao.rebind(l,c,"on")};var ml=20,Ml=1,xl=1/0;ao.layout.hierarchy=function(){function n(i){var u,o=[i],a=[];for(i.depth=0;null!=(u=o.pop());)if(a.push(u),(c=e.call(n,u,u.depth))&&(l=c.length)){for(var l,c,f;--l>=0;)o.push(f=c[l]),f.parent=u,f.depth=u.depth+1;r&&(u.value=0),u.children=c}else r&&(u.value=+r.call(n,u,u.depth)||0),delete u.children;return oi(i,function(n){var e,i;t&&(e=n.children)&&e.sort(t),r&&(i=n.parent)&&(i.value+=n.value)}),a}var t=ci,e=ai,r=li;return n.sort=function(e){return arguments.length?(t=e,n):t},n.children=function(t){return arguments.length?(e=t,n):e},n.value=function(t){return arguments.length?(r=t,n):r},n.revalue=function(t){return r&&(ui(t,function(n){n.children&&(n.value=0)}),oi(t,function(t){var e;t.children||(t.value=+r.call(n,t,t.depth)||0),(e=t.parent)&&(e.value+=t.value)})),t},n},ao.layout.partition=function(){function n(t,e,r,i){var u=t.children;if(t.x=e,t.y=t.depth*i,t.dx=r,t.dy=i,u&&(o=u.length)){var o,a,l,c=-1;for(r=t.value?r/t.value:0;++c<o;)n(a=u[c],e,l=a.value*r,i),e+=l}}function t(n){var e=n.children,r=0;if(e&&(i=e.length))for(var i,u=-1;++u<i;)r=Math.max(r,t(e[u]));return 1+r}function e(e,u){var o=r.call(this,e,u);return n(o[0],0,i[0],i[1]/t(o[0])),o}var r=ao.layout.hierarchy(),i=[1,1];return e.size=function(n){return arguments.length?(i=n,e):i},ii(e,r)},ao.layout.pie=function(){function n(o){var a,l=o.length,c=o.map(function(e,r){return+t.call(n,e,r)}),f=+("function"==typeof r?r.apply(this,arguments):r),s=("function"==typeof i?i.apply(this,arguments):i)-f,h=Math.min(Math.abs(s)/l,+("function"==typeof u?u.apply(this,arguments):u)),p=h*(0>s?-1:1),g=ao.sum(c),v=g?(s-l*p)/g:0,d=ao.range(l),y=[];return null!=e&&d.sort(e===bl?function(n,t){return c[t]-c[n]}:function(n,t){return e(o[n],o[t])}),d.forEach(function(n){y[n]={data:o[n],value:a=c[n],startAngle:f,endAngle:f+=a*v+p,padAngle:h}}),y}var t=Number,e=bl,r=0,i=Ho,u=0;return n.value=function(e){return arguments.length?(t=e,n):t},n.sort=function(t){return arguments.length?(e=t,n):e},n.startAngle=function(t){return arguments.length?(r=t,n):r},n.endAngle=function(t){return arguments.length?(i=t,n):i},n.padAngle=function(t){return arguments.length?(u=t,n):u},n};var bl={};ao.layout.stack=function(){function n(a,l){if(!(h=a.length))return a;var c=a.map(function(e,r){return t.call(n,e,r)}),f=c.map(function(t){return t.map(function(t,e){return[u.call(n,t,e),o.call(n,t,e)]})}),s=e.call(n,f,l);c=ao.permute(c,s),f=ao.permute(f,s);var h,p,g,v,d=r.call(n,f,l),y=c[0].length;for(g=0;y>g;++g)for(i.call(n,c[0][g],v=d[g],f[0][g][1]),p=1;h>p;++p)i.call(n,c[p][g],v+=f[p-1][g][1],f[p][g][1]);return a}var t=m,e=gi,r=vi,i=pi,u=si,o=hi;return n.values=function(e){return arguments.length?(t=e,n):t},n.order=function(t){return arguments.length?(e="function"==typeof t?t:_l.get(t)||gi,n):e},n.offset=function(t){return arguments.length?(r="function"==typeof t?t:wl.get(t)||vi,n):r},n.x=function(t){return arguments.length?(u=t,n):u},n.y=function(t){return arguments.length?(o=t,n):o},n.out=function(t){return arguments.length?(i=t,n):i},n};var _l=ao.map({"inside-out":function(n){var t,e,r=n.length,i=n.map(di),u=n.map(yi),o=ao.range(r).sort(function(n,t){return i[n]-i[t]}),a=0,l=0,c=[],f=[];for(t=0;r>t;++t)e=o[t],l>a?(a+=u[e],c.push(e)):(l+=u[e],f.push(e));return f.reverse().concat(c)},reverse:function(n){return ao.range(n.length).reverse()},"default":gi}),wl=ao.map({silhouette:function(n){var t,e,r,i=n.length,u=n[0].length,o=[],a=0,l=[];for(e=0;u>e;++e){for(t=0,r=0;i>t;t++)r+=n[t][e][1];r>a&&(a=r),o.push(r)}for(e=0;u>e;++e)l[e]=(a-o[e])/2;return l},wiggle:function(n){var t,e,r,i,u,o,a,l,c,f=n.length,s=n[0],h=s.length,p=[];for(p[0]=l=c=0,e=1;h>e;++e){for(t=0,i=0;f>t;++t)i+=n[t][e][1];for(t=0,u=0,a=s[e][0]-s[e-1][0];f>t;++t){for(r=0,o=(n[t][e][1]-n[t][e-1][1])/(2*a);t>r;++r)o+=(n[r][e][1]-n[r][e-1][1])/a;u+=o*n[t][e][1]}p[e]=l-=i?u/i*a:0,c>l&&(c=l)}for(e=0;h>e;++e)p[e]-=c;return p},expand:function(n){var t,e,r,i=n.length,u=n[0].length,o=1/i,a=[];for(e=0;u>e;++e){for(t=0,r=0;i>t;t++)r+=n[t][e][1];if(r)for(t=0;i>t;t++)n[t][e][1]/=r;else for(t=0;i>t;t++)n[t][e][1]=o}for(e=0;u>e;++e)a[e]=0;return a},zero:vi});ao.layout.histogram=function(){function n(n,u){for(var o,a,l=[],c=n.map(e,this),f=r.call(this,c,u),s=i.call(this,f,c,u),u=-1,h=c.length,p=s.length-1,g=t?1:1/h;++u<p;)o=l[u]=[],o.dx=s[u+1]-(o.x=s[u]),o.y=0;if(p>0)for(u=-1;++u<h;)a=c[u],a>=f[0]&&a<=f[1]&&(o=l[ao.bisect(s,a,1,p)-1],o.y+=g,o.push(n[u]));return l}var t=!0,e=Number,r=bi,i=Mi;return n.value=function(t){return arguments.length?(e=t,n):e},n.range=function(t){return arguments.length?(r=En(t),n):r},n.bins=function(t){return arguments.length?(i="number"==typeof t?function(n){return xi(n,t)}:En(t),n):i},n.frequency=function(e){return arguments.length?(t=!!e,n):t},n},ao.layout.pack=function(){function n(n,u){var o=e.call(this,n,u),a=o[0],l=i[0],c=i[1],f=null==t?Math.sqrt:"function"==typeof t?t:function(){return t};if(a.x=a.y=0,oi(a,function(n){n.r=+f(n.value)}),oi(a,Ni),r){var s=r*(t?1:Math.max(2*a.r/l,2*a.r/c))/2;oi(a,function(n){n.r+=s}),oi(a,Ni),oi(a,function(n){n.r-=s})}return Ci(a,l/2,c/2,t?1:1/Math.max(2*a.r/l,2*a.r/c)),o}var t,e=ao.layout.hierarchy().sort(_i),r=0,i=[1,1];return n.size=function(t){return arguments.length?(i=t,n):i},n.radius=function(e){return arguments.length?(t=null==e||"function"==typeof e?e:+e,n):t},n.padding=function(t){return arguments.length?(r=+t,n):r},ii(n,e)},ao.layout.tree=function(){function n(n,i){var f=o.call(this,n,i),s=f[0],h=t(s);if(oi(h,e),h.parent.m=-h.z,ui(h,r),c)ui(s,u);else{var p=s,g=s,v=s;ui(s,function(n){n.x<p.x&&(p=n),n.x>g.x&&(g=n),n.depth>v.depth&&(v=n)});var d=a(p,g)/2-p.x,y=l[0]/(g.x+a(g,p)/2+d),m=l[1]/(v.depth||1);ui(s,function(n){n.x=(n.x+d)*y,n.y=n.depth*m})}return f}function t(n){for(var t,e={A:null,children:[n]},r=[e];null!=(t=r.pop());)for(var i,u=t.children,o=0,a=u.length;a>o;++o)r.push((u[o]=i={_:u[o],parent:t,children:(i=u[o].children)&&i.slice()||[],A:null,a:null,z:0,m:0,c:0,s:0,t:null,i:o}).a=i);return e.children[0]}function e(n){var t=n.children,e=n.parent.children,r=n.i?e[n.i-1]:null;if(t.length){Di(n);var u=(t[0].z+t[t.length-1].z)/2;r?(n.z=r.z+a(n._,r._),n.m=n.z-u):n.z=u}else r&&(n.z=r.z+a(n._,r._));n.parent.A=i(n,r,n.parent.A||e[0])}function r(n){n._.x=n.z+n.parent.m,n.m+=n.parent.m}function i(n,t,e){if(t){for(var r,i=n,u=n,o=t,l=i.parent.children[0],c=i.m,f=u.m,s=o.m,h=l.m;o=Ti(o),i=qi(i),o&&i;)l=qi(l),u=Ti(u),u.a=n,r=o.z+s-i.z-c+a(o._,i._),r>0&&(Ri(Pi(o,n,e),n,r),c+=r,f+=r),s+=o.m,c+=i.m,h+=l.m,f+=u.m;o&&!Ti(u)&&(u.t=o,u.m+=s-f),i&&!qi(l)&&(l.t=i,l.m+=c-h,e=n)}return e}function u(n){n.x*=l[0],n.y=n.depth*l[1]}var o=ao.layout.hierarchy().sort(null).value(null),a=Li,l=[1,1],c=null;return n.separation=function(t){return arguments.length?(a=t,n):a},n.size=function(t){return arguments.length?(c=null==(l=t)?u:null,n):c?null:l},n.nodeSize=function(t){return arguments.length?(c=null==(l=t)?null:u,n):c?l:null},ii(n,o)},ao.layout.cluster=function(){function n(n,u){var o,a=t.call(this,n,u),l=a[0],c=0;oi(l,function(n){var t=n.children;t&&t.length?(n.x=ji(t),n.y=Ui(t)):(n.x=o?c+=e(n,o):0,n.y=0,o=n)});var f=Fi(l),s=Hi(l),h=f.x-e(f,s)/2,p=s.x+e(s,f)/2;return oi(l,i?function(n){n.x=(n.x-l.x)*r[0],n.y=(l.y-n.y)*r[1]}:function(n){n.x=(n.x-h)/(p-h)*r[0],n.y=(1-(l.y?n.y/l.y:1))*r[1]}),a}var t=ao.layout.hierarchy().sort(null).value(null),e=Li,r=[1,1],i=!1;return n.separation=function(t){return arguments.length?(e=t,n):e},n.size=function(t){return arguments.length?(i=null==(r=t),n):i?null:r},n.nodeSize=function(t){return arguments.length?(i=null!=(r=t),n):i?r:null},ii(n,t)},ao.layout.treemap=function(){function n(n,t){for(var e,r,i=-1,u=n.length;++i<u;)r=(e=n[i]).value*(0>t?0:t),e.area=isNaN(r)||0>=r?0:r}function t(e){var u=e.children;if(u&&u.length){var o,a,l,c=s(e),f=[],h=u.slice(),g=1/0,v="slice"===p?c.dx:"dice"===p?c.dy:"slice-dice"===p?1&e.depth?c.dy:c.dx:Math.min(c.dx,c.dy);for(n(h,c.dx*c.dy/e.value),f.area=0;(l=h.length)>0;)f.push(o=h[l-1]),f.area+=o.area,"squarify"!==p||(a=r(f,v))<=g?(h.pop(),g=a):(f.area-=f.pop().area,i(f,v,c,!1),v=Math.min(c.dx,c.dy),f.length=f.area=0,g=1/0);f.length&&(i(f,v,c,!0),f.length=f.area=0),u.forEach(t)}}function e(t){var r=t.children;if(r&&r.length){var u,o=s(t),a=r.slice(),l=[];for(n(a,o.dx*o.dy/t.value),l.area=0;u=a.pop();)l.push(u),l.area+=u.area,null!=u.z&&(i(l,u.z?o.dx:o.dy,o,!a.length),l.length=l.area=0);r.forEach(e)}}function r(n,t){for(var e,r=n.area,i=0,u=1/0,o=-1,a=n.length;++o<a;)(e=n[o].area)&&(u>e&&(u=e),e>i&&(i=e));return r*=r,t*=t,r?Math.max(t*i*g/r,r/(t*u*g)):1/0}function i(n,t,e,r){var i,u=-1,o=n.length,a=e.x,c=e.y,f=t?l(n.area/t):0;
+if(t==e.dx){for((r||f>e.dy)&&(f=e.dy);++u<o;)i=n[u],i.x=a,i.y=c,i.dy=f,a+=i.dx=Math.min(e.x+e.dx-a,f?l(i.area/f):0);i.z=!0,i.dx+=e.x+e.dx-a,e.y+=f,e.dy-=f}else{for((r||f>e.dx)&&(f=e.dx);++u<o;)i=n[u],i.x=a,i.y=c,i.dx=f,c+=i.dy=Math.min(e.y+e.dy-c,f?l(i.area/f):0);i.z=!1,i.dy+=e.y+e.dy-c,e.x+=f,e.dx-=f}}function u(r){var i=o||a(r),u=i[0];return u.x=u.y=0,u.value?(u.dx=c[0],u.dy=c[1]):u.dx=u.dy=0,o&&a.revalue(u),n([u],u.dx*u.dy/u.value),(o?e:t)(u),h&&(o=i),i}var o,a=ao.layout.hierarchy(),l=Math.round,c=[1,1],f=null,s=Oi,h=!1,p="squarify",g=.5*(1+Math.sqrt(5));return u.size=function(n){return arguments.length?(c=n,u):c},u.padding=function(n){function t(t){var e=n.call(u,t,t.depth);return null==e?Oi(t):Ii(t,"number"==typeof e?[e,e,e,e]:e)}function e(t){return Ii(t,n)}if(!arguments.length)return f;var r;return s=null==(f=n)?Oi:"function"==(r=typeof n)?t:"number"===r?(n=[n,n,n,n],e):e,u},u.round=function(n){return arguments.length?(l=n?Math.round:Number,u):l!=Number},u.sticky=function(n){return arguments.length?(h=n,o=null,u):h},u.ratio=function(n){return arguments.length?(g=n,u):g},u.mode=function(n){return arguments.length?(p=n+"",u):p},ii(u,a)},ao.random={normal:function(n,t){var e=arguments.length;return 2>e&&(t=1),1>e&&(n=0),function(){var e,r,i;do e=2*Math.random()-1,r=2*Math.random()-1,i=e*e+r*r;while(!i||i>1);return n+t*e*Math.sqrt(-2*Math.log(i)/i)}},logNormal:function(){var n=ao.random.normal.apply(ao,arguments);return function(){return Math.exp(n())}},bates:function(n){var t=ao.random.irwinHall(n);return function(){return t()/n}},irwinHall:function(n){return function(){for(var t=0,e=0;n>e;e++)t+=Math.random();return t}}},ao.scale={};var Sl={floor:m,ceil:m};ao.scale.linear=function(){return Wi([0,1],[0,1],Mr,!1)};var kl={s:1,g:1,p:1,r:1,e:1};ao.scale.log=function(){return ru(ao.scale.linear().domain([0,1]),10,!0,[1,10])};var Nl=ao.format(".0e"),El={floor:function(n){return-Math.ceil(-n)},ceil:function(n){return-Math.floor(-n)}};ao.scale.pow=function(){return iu(ao.scale.linear(),1,[0,1])},ao.scale.sqrt=function(){return ao.scale.pow().exponent(.5)},ao.scale.ordinal=function(){return ou([],{t:"range",a:[[]]})},ao.scale.category10=function(){return ao.scale.ordinal().range(Al)},ao.scale.category20=function(){return ao.scale.ordinal().range(Cl)},ao.scale.category20b=function(){return ao.scale.ordinal().range(zl)},ao.scale.category20c=function(){return ao.scale.ordinal().range(Ll)};var Al=[2062260,16744206,2924588,14034728,9725885,9197131,14907330,8355711,12369186,1556175].map(xn),Cl=[2062260,11454440,16744206,16759672,2924588,10018698,14034728,16750742,9725885,12955861,9197131,12885140,14907330,16234194,8355711,13092807,12369186,14408589,1556175,10410725].map(xn),zl=[3750777,5395619,7040719,10264286,6519097,9216594,11915115,13556636,9202993,12426809,15186514,15190932,8666169,11356490,14049643,15177372,8077683,10834324,13528509,14589654].map(xn),Ll=[3244733,7057110,10406625,13032431,15095053,16616764,16625259,16634018,3253076,7652470,10607003,13101504,7695281,10394312,12369372,14342891,6513507,9868950,12434877,14277081].map(xn);ao.scale.quantile=function(){return au([],[])},ao.scale.quantize=function(){return lu(0,1,[0,1])},ao.scale.threshold=function(){return cu([.5],[0,1])},ao.scale.identity=function(){return fu([0,1])},ao.svg={},ao.svg.arc=function(){function n(){var n=Math.max(0,+e.apply(this,arguments)),c=Math.max(0,+r.apply(this,arguments)),f=o.apply(this,arguments)-Io,s=a.apply(this,arguments)-Io,h=Math.abs(s-f),p=f>s?0:1;if(n>c&&(g=c,c=n,n=g),h>=Oo)return t(c,p)+(n?t(n,1-p):"")+"Z";var g,v,d,y,m,M,x,b,_,w,S,k,N=0,E=0,A=[];if((y=(+l.apply(this,arguments)||0)/2)&&(d=u===ql?Math.sqrt(n*n+c*c):+u.apply(this,arguments),p||(E*=-1),c&&(E=tn(d/c*Math.sin(y))),n&&(N=tn(d/n*Math.sin(y)))),c){m=c*Math.cos(f+E),M=c*Math.sin(f+E),x=c*Math.cos(s-E),b=c*Math.sin(s-E);var C=Math.abs(s-f-2*E)<=Fo?0:1;if(E&&yu(m,M,x,b)===p^C){var z=(f+s)/2;m=c*Math.cos(z),M=c*Math.sin(z),x=b=null}}else m=M=0;if(n){_=n*Math.cos(s-N),w=n*Math.sin(s-N),S=n*Math.cos(f+N),k=n*Math.sin(f+N);var L=Math.abs(f-s+2*N)<=Fo?0:1;if(N&&yu(_,w,S,k)===1-p^L){var q=(f+s)/2;_=n*Math.cos(q),w=n*Math.sin(q),S=k=null}}else _=w=0;if(h>Uo&&(g=Math.min(Math.abs(c-n)/2,+i.apply(this,arguments)))>.001){v=c>n^p?0:1;var T=g,R=g;if(Fo>h){var D=null==S?[_,w]:null==x?[m,M]:Re([m,M],[S,k],[x,b],[_,w]),P=m-D[0],U=M-D[1],j=x-D[0],F=b-D[1],H=1/Math.sin(Math.acos((P*j+U*F)/(Math.sqrt(P*P+U*U)*Math.sqrt(j*j+F*F)))/2),O=Math.sqrt(D[0]*D[0]+D[1]*D[1]);R=Math.min(g,(n-O)/(H-1)),T=Math.min(g,(c-O)/(H+1))}if(null!=x){var I=mu(null==S?[_,w]:[S,k],[m,M],c,T,p),Y=mu([x,b],[_,w],c,T,p);g===T?A.push("M",I[0],"A",T,",",T," 0 0,",v," ",I[1],"A",c,",",c," 0 ",1-p^yu(I[1][0],I[1][1],Y[1][0],Y[1][1]),",",p," ",Y[1],"A",T,",",T," 0 0,",v," ",Y[0]):A.push("M",I[0],"A",T,",",T," 0 1,",v," ",Y[0])}else A.push("M",m,",",M);if(null!=S){var Z=mu([m,M],[S,k],n,-R,p),V=mu([_,w],null==x?[m,M]:[x,b],n,-R,p);g===R?A.push("L",V[0],"A",R,",",R," 0 0,",v," ",V[1],"A",n,",",n," 0 ",p^yu(V[1][0],V[1][1],Z[1][0],Z[1][1]),",",1-p," ",Z[1],"A",R,",",R," 0 0,",v," ",Z[0]):A.push("L",V[0],"A",R,",",R," 0 0,",v," ",Z[0])}else A.push("L",_,",",w)}else A.push("M",m,",",M),null!=x&&A.push("A",c,",",c," 0 ",C,",",p," ",x,",",b),A.push("L",_,",",w),null!=S&&A.push("A",n,",",n," 0 ",L,",",1-p," ",S,",",k);return A.push("Z"),A.join("")}function t(n,t){return"M0,"+n+"A"+n+","+n+" 0 1,"+t+" 0,"+-n+"A"+n+","+n+" 0 1,"+t+" 0,"+n}var e=hu,r=pu,i=su,u=ql,o=gu,a=vu,l=du;return n.innerRadius=function(t){return arguments.length?(e=En(t),n):e},n.outerRadius=function(t){return arguments.length?(r=En(t),n):r},n.cornerRadius=function(t){return arguments.length?(i=En(t),n):i},n.padRadius=function(t){return arguments.length?(u=t==ql?ql:En(t),n):u},n.startAngle=function(t){return arguments.length?(o=En(t),n):o},n.endAngle=function(t){return arguments.length?(a=En(t),n):a},n.padAngle=function(t){return arguments.length?(l=En(t),n):l},n.centroid=function(){var n=(+e.apply(this,arguments)+ +r.apply(this,arguments))/2,t=(+o.apply(this,arguments)+ +a.apply(this,arguments))/2-Io;return[Math.cos(t)*n,Math.sin(t)*n]},n};var ql="auto";ao.svg.line=function(){return Mu(m)};var Tl=ao.map({linear:xu,"linear-closed":bu,step:_u,"step-before":wu,"step-after":Su,basis:zu,"basis-open":Lu,"basis-closed":qu,bundle:Tu,cardinal:Eu,"cardinal-open":ku,"cardinal-closed":Nu,monotone:Fu});Tl.forEach(function(n,t){t.key=n,t.closed=/-closed$/.test(n)});var Rl=[0,2/3,1/3,0],Dl=[0,1/3,2/3,0],Pl=[0,1/6,2/3,1/6];ao.svg.line.radial=function(){var n=Mu(Hu);return n.radius=n.x,delete n.x,n.angle=n.y,delete n.y,n},wu.reverse=Su,Su.reverse=wu,ao.svg.area=function(){return Ou(m)},ao.svg.area.radial=function(){var n=Ou(Hu);return n.radius=n.x,delete n.x,n.innerRadius=n.x0,delete n.x0,n.outerRadius=n.x1,delete n.x1,n.angle=n.y,delete n.y,n.startAngle=n.y0,delete n.y0,n.endAngle=n.y1,delete n.y1,n},ao.svg.chord=function(){function n(n,a){var l=t(this,u,n,a),c=t(this,o,n,a);return"M"+l.p0+r(l.r,l.p1,l.a1-l.a0)+(e(l,c)?i(l.r,l.p1,l.r,l.p0):i(l.r,l.p1,c.r,c.p0)+r(c.r,c.p1,c.a1-c.a0)+i(c.r,c.p1,l.r,l.p0))+"Z"}function t(n,t,e,r){var i=t.call(n,e,r),u=a.call(n,i,r),o=l.call(n,i,r)-Io,f=c.call(n,i,r)-Io;return{r:u,a0:o,a1:f,p0:[u*Math.cos(o),u*Math.sin(o)],p1:[u*Math.cos(f),u*Math.sin(f)]}}function e(n,t){return n.a0==t.a0&&n.a1==t.a1}function r(n,t,e){return"A"+n+","+n+" 0 "+ +(e>Fo)+",1 "+t}function i(n,t,e,r){return"Q 0,0 "+r}var u=Me,o=xe,a=Iu,l=gu,c=vu;return n.radius=function(t){return arguments.length?(a=En(t),n):a},n.source=function(t){return arguments.length?(u=En(t),n):u},n.target=function(t){return arguments.length?(o=En(t),n):o},n.startAngle=function(t){return arguments.length?(l=En(t),n):l},n.endAngle=function(t){return arguments.length?(c=En(t),n):c},n},ao.svg.diagonal=function(){function n(n,i){var u=t.call(this,n,i),o=e.call(this,n,i),a=(u.y+o.y)/2,l=[u,{x:u.x,y:a},{x:o.x,y:a},o];return l=l.map(r),"M"+l[0]+"C"+l[1]+" "+l[2]+" "+l[3]}var t=Me,e=xe,r=Yu;return n.source=function(e){return arguments.length?(t=En(e),n):t},n.target=function(t){return arguments.length?(e=En(t),n):e},n.projection=function(t){return arguments.length?(r=t,n):r},n},ao.svg.diagonal.radial=function(){var n=ao.svg.diagonal(),t=Yu,e=n.projection;return n.projection=function(n){return arguments.length?e(Zu(t=n)):t},n},ao.svg.symbol=function(){function n(n,r){return(Ul.get(t.call(this,n,r))||$u)(e.call(this,n,r))}var t=Xu,e=Vu;return n.type=function(e){return arguments.length?(t=En(e),n):t},n.size=function(t){return arguments.length?(e=En(t),n):e},n};var Ul=ao.map({circle:$u,cross:function(n){var t=Math.sqrt(n/5)/2;return"M"+-3*t+","+-t+"H"+-t+"V"+-3*t+"H"+t+"V"+-t+"H"+3*t+"V"+t+"H"+t+"V"+3*t+"H"+-t+"V"+t+"H"+-3*t+"Z"},diamond:function(n){var t=Math.sqrt(n/(2*Fl)),e=t*Fl;return"M0,"+-t+"L"+e+",0 0,"+t+" "+-e+",0Z"},square:function(n){var t=Math.sqrt(n)/2;return"M"+-t+","+-t+"L"+t+","+-t+" "+t+","+t+" "+-t+","+t+"Z"},"triangle-down":function(n){var t=Math.sqrt(n/jl),e=t*jl/2;return"M0,"+e+"L"+t+","+-e+" "+-t+","+-e+"Z"},"triangle-up":function(n){var t=Math.sqrt(n/jl),e=t*jl/2;return"M0,"+-e+"L"+t+","+e+" "+-t+","+e+"Z"}});ao.svg.symbolTypes=Ul.keys();var jl=Math.sqrt(3),Fl=Math.tan(30*Yo);Co.transition=function(n){for(var t,e,r=Hl||++Zl,i=Ku(n),u=[],o=Ol||{time:Date.now(),ease:Nr,delay:0,duration:250},a=-1,l=this.length;++a<l;){u.push(t=[]);for(var c=this[a],f=-1,s=c.length;++f<s;)(e=c[f])&&Qu(e,f,i,r,o),t.push(e)}return Wu(u,i,r)},Co.interrupt=function(n){return this.each(null==n?Il:Bu(Ku(n)))};var Hl,Ol,Il=Bu(Ku()),Yl=[],Zl=0;Yl.call=Co.call,Yl.empty=Co.empty,Yl.node=Co.node,Yl.size=Co.size,ao.transition=function(n,t){return n&&n.transition?Hl?n.transition(t):n:ao.selection().transition(n)},ao.transition.prototype=Yl,Yl.select=function(n){var t,e,r,i=this.id,u=this.namespace,o=[];n=A(n);for(var a=-1,l=this.length;++a<l;){o.push(t=[]);for(var c=this[a],f=-1,s=c.length;++f<s;)(r=c[f])&&(e=n.call(r,r.__data__,f,a))?("__data__"in r&&(e.__data__=r.__data__),Qu(e,f,u,i,r[u][i]),t.push(e)):t.push(null)}return Wu(o,u,i)},Yl.selectAll=function(n){var t,e,r,i,u,o=this.id,a=this.namespace,l=[];n=C(n);for(var c=-1,f=this.length;++c<f;)for(var s=this[c],h=-1,p=s.length;++h<p;)if(r=s[h]){u=r[a][o],e=n.call(r,r.__data__,h,c),l.push(t=[]);for(var g=-1,v=e.length;++g<v;)(i=e[g])&&Qu(i,g,a,o,u),t.push(i)}return Wu(l,a,o)},Yl.filter=function(n){var t,e,r,i=[];"function"!=typeof n&&(n=O(n));for(var u=0,o=this.length;o>u;u++){i.push(t=[]);for(var e=this[u],a=0,l=e.length;l>a;a++)(r=e[a])&&n.call(r,r.__data__,a,u)&&t.push(r)}return Wu(i,this.namespace,this.id)},Yl.tween=function(n,t){var e=this.id,r=this.namespace;return arguments.length<2?this.node()[r][e].tween.get(n):Y(this,null==t?function(t){t[r][e].tween.remove(n)}:function(i){i[r][e].tween.set(n,t)})},Yl.attr=function(n,t){function e(){this.removeAttribute(a)}function r(){this.removeAttributeNS(a.space,a.local)}function i(n){return null==n?e:(n+="",function(){var t,e=this.getAttribute(a);return e!==n&&(t=o(e,n),function(n){this.setAttribute(a,t(n))})})}function u(n){return null==n?r:(n+="",function(){var t,e=this.getAttributeNS(a.space,a.local);return e!==n&&(t=o(e,n),function(n){this.setAttributeNS(a.space,a.local,t(n))})})}if(arguments.length<2){for(t in n)this.attr(t,n[t]);return this}var o="transform"==n?$r:Mr,a=ao.ns.qualify(n);return Ju(this,"attr."+n,t,a.local?u:i)},Yl.attrTween=function(n,t){function e(n,e){var r=t.call(this,n,e,this.getAttribute(i));return r&&function(n){this.setAttribute(i,r(n))}}function r(n,e){var r=t.call(this,n,e,this.getAttributeNS(i.space,i.local));return r&&function(n){this.setAttributeNS(i.space,i.local,r(n))}}var i=ao.ns.qualify(n);return this.tween("attr."+n,i.local?r:e)},Yl.style=function(n,e,r){function i(){this.style.removeProperty(n)}function u(e){return null==e?i:(e+="",function(){var i,u=t(this).getComputedStyle(this,null).getPropertyValue(n);return u!==e&&(i=Mr(u,e),function(t){this.style.setProperty(n,i(t),r)})})}var o=arguments.length;if(3>o){if("string"!=typeof n){2>o&&(e="");for(r in n)this.style(r,n[r],e);return this}r=""}return Ju(this,"style."+n,e,u)},Yl.styleTween=function(n,e,r){function i(i,u){var o=e.call(this,i,u,t(this).getComputedStyle(this,null).getPropertyValue(n));return o&&function(t){this.style.setProperty(n,o(t),r)}}return arguments.length<3&&(r=""),this.tween("style."+n,i)},Yl.text=function(n){return Ju(this,"text",n,Gu)},Yl.remove=function(){var n=this.namespace;return this.each("end.transition",function(){var t;this[n].count<2&&(t=this.parentNode)&&t.removeChild(this)})},Yl.ease=function(n){var t=this.id,e=this.namespace;return arguments.length<1?this.node()[e][t].ease:("function"!=typeof n&&(n=ao.ease.apply(ao,arguments)),Y(this,function(r){r[e][t].ease=n}))},Yl.delay=function(n){var t=this.id,e=this.namespace;return arguments.length<1?this.node()[e][t].delay:Y(this,"function"==typeof n?function(r,i,u){r[e][t].delay=+n.call(r,r.__data__,i,u)}:(n=+n,function(r){r[e][t].delay=n}))},Yl.duration=function(n){var t=this.id,e=this.namespace;return arguments.length<1?this.node()[e][t].duration:Y(this,"function"==typeof n?function(r,i,u){r[e][t].duration=Math.max(1,n.call(r,r.__data__,i,u))}:(n=Math.max(1,n),function(r){r[e][t].duration=n}))},Yl.each=function(n,t){var e=this.id,r=this.namespace;if(arguments.length<2){var i=Ol,u=Hl;try{Hl=e,Y(this,function(t,i,u){Ol=t[r][e],n.call(t,t.__data__,i,u)})}finally{Ol=i,Hl=u}}else Y(this,function(i){var u=i[r][e];(u.event||(u.event=ao.dispatch("start","end","interrupt"))).on(n,t)});return this},Yl.transition=function(){for(var n,t,e,r,i=this.id,u=++Zl,o=this.namespace,a=[],l=0,c=this.length;c>l;l++){a.push(n=[]);for(var t=this[l],f=0,s=t.length;s>f;f++)(e=t[f])&&(r=e[o][i],Qu(e,f,o,u,{time:r.time,ease:r.ease,delay:r.delay+r.duration,duration:r.duration})),n.push(e)}return Wu(a,o,u)},ao.svg.axis=function(){function n(n){n.each(function(){var n,c=ao.select(this),f=this.__chart__||e,s=this.__chart__=e.copy(),h=null==l?s.ticks?s.ticks.apply(s,a):s.domain():l,p=null==t?s.tickFormat?s.tickFormat.apply(s,a):m:t,g=c.selectAll(".tick").data(h,s),v=g.enter().insert("g",".domain").attr("class","tick").style("opacity",Uo),d=ao.transition(g.exit()).style("opacity",Uo).remove(),y=ao.transition(g.order()).style("opacity",1),M=Math.max(i,0)+o,x=Zi(s),b=c.selectAll(".domain").data([0]),_=(b.enter().append("path").attr("class","domain"),ao.transition(b));v.append("line"),v.append("text");var w,S,k,N,E=v.select("line"),A=y.select("line"),C=g.select("text").text(p),z=v.select("text"),L=y.select("text"),q="top"===r||"left"===r?-1:1;if("bottom"===r||"top"===r?(n=no,w="x",k="y",S="x2",N="y2",C.attr("dy",0>q?"0em":".71em").style("text-anchor","middle"),_.attr("d","M"+x[0]+","+q*u+"V0H"+x[1]+"V"+q*u)):(n=to,w="y",k="x",S="y2",N="x2",C.attr("dy",".32em").style("text-anchor",0>q?"end":"start"),_.attr("d","M"+q*u+","+x[0]+"H0V"+x[1]+"H"+q*u)),E.attr(N,q*i),z.attr(k,q*M),A.attr(S,0).attr(N,q*i),L.attr(w,0).attr(k,q*M),s.rangeBand){var T=s,R=T.rangeBand()/2;f=s=function(n){return T(n)+R}}else f.rangeBand?f=s:d.call(n,s,f);v.call(n,f,s),y.call(n,s,s)})}var t,e=ao.scale.linear(),r=Vl,i=6,u=6,o=3,a=[10],l=null;return n.scale=function(t){return arguments.length?(e=t,n):e},n.orient=function(t){return arguments.length?(r=t in Xl?t+"":Vl,n):r},n.ticks=function(){return arguments.length?(a=co(arguments),n):a},n.tickValues=function(t){return arguments.length?(l=t,n):l},n.tickFormat=function(e){return arguments.length?(t=e,n):t},n.tickSize=function(t){var e=arguments.length;return e?(i=+t,u=+arguments[e-1],n):i},n.innerTickSize=function(t){return arguments.length?(i=+t,n):i},n.outerTickSize=function(t){return arguments.length?(u=+t,n):u},n.tickPadding=function(t){return arguments.length?(o=+t,n):o},n.tickSubdivide=function(){return arguments.length&&n},n};var Vl="bottom",Xl={top:1,right:1,bottom:1,left:1};ao.svg.brush=function(){function n(t){t.each(function(){var t=ao.select(this).style("pointer-events","all").style("-webkit-tap-highlight-color","rgba(0,0,0,0)").on("mousedown.brush",u).on("touchstart.brush",u),o=t.selectAll(".background").data([0]);o.enter().append("rect").attr("class","background").style("visibility","hidden").style("cursor","crosshair"),t.selectAll(".extent").data([0]).enter().append("rect").attr("class","extent").style("cursor","move");var a=t.selectAll(".resize").data(v,m);a.exit().remove(),a.enter().append("g").attr("class",function(n){return"resize "+n}).style("cursor",function(n){return $l[n]}).append("rect").attr("x",function(n){return/[ew]$/.test(n)?-3:null}).attr("y",function(n){return/^[ns]/.test(n)?-3:null}).attr("width",6).attr("height",6).style("visibility","hidden"),a.style("display",n.empty()?"none":null);var l,s=ao.transition(t),h=ao.transition(o);c&&(l=Zi(c),h.attr("x",l[0]).attr("width",l[1]-l[0]),r(s)),f&&(l=Zi(f),h.attr("y",l[0]).attr("height",l[1]-l[0]),i(s)),e(s)})}function e(n){n.selectAll(".resize").attr("transform",function(n){return"translate("+s[+/e$/.test(n)]+","+h[+/^s/.test(n)]+")"})}function r(n){n.select(".extent").attr("x",s[0]),n.selectAll(".extent,.n>rect,.s>rect").attr("width",s[1]-s[0])}function i(n){n.select(".extent").attr("y",h[0]),n.selectAll(".extent,.e>rect,.w>rect").attr("height",h[1]-h[0])}function u(){function u(){32==ao.event.keyCode&&(C||(M=null,L[0]-=s[1],L[1]-=h[1],C=2),S())}function v(){32==ao.event.keyCode&&2==C&&(L[0]+=s[1],L[1]+=h[1],C=0,S())}function d(){var n=ao.mouse(b),t=!1;x&&(n[0]+=x[0],n[1]+=x[1]),C||(ao.event.altKey?(M||(M=[(s[0]+s[1])/2,(h[0]+h[1])/2]),L[0]=s[+(n[0]<M[0])],L[1]=h[+(n[1]<M[1])]):M=null),E&&y(n,c,0)&&(r(k),t=!0),A&&y(n,f,1)&&(i(k),t=!0),t&&(e(k),w({type:"brush",mode:C?"move":"resize"}))}function y(n,t,e){var r,i,u=Zi(t),l=u[0],c=u[1],f=L[e],v=e?h:s,d=v[1]-v[0];return C&&(l-=f,c-=d+f),r=(e?g:p)?Math.max(l,Math.min(c,n[e])):n[e],C?i=(r+=f)+d:(M&&(f=Math.max(l,Math.min(c,2*M[e]-r))),r>f?(i=r,r=f):i=f),v[0]!=r||v[1]!=i?(e?a=null:o=null,v[0]=r,v[1]=i,!0):void 0}function m(){d(),k.style("pointer-events","all").selectAll(".resize").style("display",n.empty()?"none":null),ao.select("body").style("cursor",null),q.on("mousemove.brush",null).on("mouseup.brush",null).on("touchmove.brush",null).on("touchend.brush",null).on("keydown.brush",null).on("keyup.brush",null),z(),w({type:"brushend"})}var M,x,b=this,_=ao.select(ao.event.target),w=l.of(b,arguments),k=ao.select(b),N=_.datum(),E=!/^(n|s)$/.test(N)&&c,A=!/^(e|w)$/.test(N)&&f,C=_.classed("extent"),z=W(b),L=ao.mouse(b),q=ao.select(t(b)).on("keydown.brush",u).on("keyup.brush",v);if(ao.event.changedTouches?q.on("touchmove.brush",d).on("touchend.brush",m):q.on("mousemove.brush",d).on("mouseup.brush",m),k.interrupt().selectAll("*").interrupt(),C)L[0]=s[0]-L[0],L[1]=h[0]-L[1];else if(N){var T=+/w$/.test(N),R=+/^n/.test(N);x=[s[1-T]-L[0],h[1-R]-L[1]],L[0]=s[T],L[1]=h[R]}else ao.event.altKey&&(M=L.slice());k.style("pointer-events","none").selectAll(".resize").style("display",null),ao.select("body").style("cursor",_.style("cursor")),w({type:"brushstart"}),d()}var o,a,l=N(n,"brushstart","brush","brushend"),c=null,f=null,s=[0,0],h=[0,0],p=!0,g=!0,v=Bl[0];return n.event=function(n){n.each(function(){var n=l.of(this,arguments),t={x:s,y:h,i:o,j:a},e=this.__chart__||t;this.__chart__=t,Hl?ao.select(this).transition().each("start.brush",function(){o=e.i,a=e.j,s=e.x,h=e.y,n({type:"brushstart"})}).tween("brush:brush",function(){var e=xr(s,t.x),r=xr(h,t.y);return o=a=null,function(i){s=t.x=e(i),h=t.y=r(i),n({type:"brush",mode:"resize"})}}).each("end.brush",function(){o=t.i,a=t.j,n({type:"brush",mode:"resize"}),n({type:"brushend"})}):(n({type:"brushstart"}),n({type:"brush",mode:"resize"}),n({type:"brushend"}))})},n.x=function(t){return arguments.length?(c=t,v=Bl[!c<<1|!f],n):c},n.y=function(t){return arguments.length?(f=t,v=Bl[!c<<1|!f],n):f},n.clamp=function(t){return arguments.length?(c&&f?(p=!!t[0],g=!!t[1]):c?p=!!t:f&&(g=!!t),n):c&&f?[p,g]:c?p:f?g:null},n.extent=function(t){var e,r,i,u,l;return arguments.length?(c&&(e=t[0],r=t[1],f&&(e=e[0],r=r[0]),o=[e,r],c.invert&&(e=c(e),r=c(r)),e>r&&(l=e,e=r,r=l),e==s[0]&&r==s[1]||(s=[e,r])),f&&(i=t[0],u=t[1],c&&(i=i[1],u=u[1]),a=[i,u],f.invert&&(i=f(i),u=f(u)),i>u&&(l=i,i=u,u=l),i==h[0]&&u==h[1]||(h=[i,u])),n):(c&&(o?(e=o[0],r=o[1]):(e=s[0],r=s[1],c.invert&&(e=c.invert(e),r=c.invert(r)),e>r&&(l=e,e=r,r=l))),f&&(a?(i=a[0],u=a[1]):(i=h[0],u=h[1],f.invert&&(i=f.invert(i),u=f.invert(u)),i>u&&(l=i,i=u,u=l))),c&&f?[[e,i],[r,u]]:c?[e,r]:f&&[i,u])},n.clear=function(){return n.empty()||(s=[0,0],h=[0,0],o=a=null),n},n.empty=function(){return!!c&&s[0]==s[1]||!!f&&h[0]==h[1]},ao.rebind(n,l,"on")};var $l={n:"ns-resize",e:"ew-resize",s:"ns-resize",w:"ew-resize",nw:"nwse-resize",ne:"nesw-resize",se:"nwse-resize",sw:"nesw-resize"},Bl=[["n","e","s","w","nw","ne","se","sw"],["e","w"],["n","s"],[]],Wl=ga.format=xa.timeFormat,Jl=Wl.utc,Gl=Jl("%Y-%m-%dT%H:%M:%S.%LZ");Wl.iso=Date.prototype.toISOString&&+new Date("2000-01-01T00:00:00.000Z")?eo:Gl,eo.parse=function(n){var t=new Date(n);return isNaN(t)?null:t},eo.toString=Gl.toString,ga.second=On(function(n){return new va(1e3*Math.floor(n/1e3))},function(n,t){n.setTime(n.getTime()+1e3*Math.floor(t))},function(n){return n.getSeconds()}),ga.seconds=ga.second.range,ga.seconds.utc=ga.second.utc.range,ga.minute=On(function(n){return new va(6e4*Math.floor(n/6e4))},function(n,t){n.setTime(n.getTime()+6e4*Math.floor(t))},function(n){return n.getMinutes()}),ga.minutes=ga.minute.range,ga.minutes.utc=ga.minute.utc.range,ga.hour=On(function(n){var t=n.getTimezoneOffset()/60;return new va(36e5*(Math.floor(n/36e5-t)+t))},function(n,t){n.setTime(n.getTime()+36e5*Math.floor(t))},function(n){return n.getHours()}),ga.hours=ga.hour.range,ga.hours.utc=ga.hour.utc.range,ga.month=On(function(n){return n=ga.day(n),n.setDate(1),n},function(n,t){n.setMonth(n.getMonth()+t)},function(n){return n.getMonth()}),ga.months=ga.month.range,ga.months.utc=ga.month.utc.range;var Kl=[1e3,5e3,15e3,3e4,6e4,3e5,9e5,18e5,36e5,108e5,216e5,432e5,864e5,1728e5,6048e5,2592e6,7776e6,31536e6],Ql=[[ga.second,1],[ga.second,5],[ga.second,15],[ga.second,30],[ga.minute,1],[ga.minute,5],[ga.minute,15],[ga.minute,30],[ga.hour,1],[ga.hour,3],[ga.hour,6],[ga.hour,12],[ga.day,1],[ga.day,2],[ga.week,1],[ga.month,1],[ga.month,3],[ga.year,1]],nc=Wl.multi([[".%L",function(n){return n.getMilliseconds()}],[":%S",function(n){return n.getSeconds()}],["%I:%M",function(n){return n.getMinutes()}],["%I %p",function(n){return n.getHours()}],["%a %d",function(n){return n.getDay()&&1!=n.getDate()}],["%b %d",function(n){return 1!=n.getDate()}],["%B",function(n){return n.getMonth()}],["%Y",zt]]),tc={range:function(n,t,e){return ao.range(Math.ceil(n/e)*e,+t,e).map(io)},floor:m,ceil:m};Ql.year=ga.year,ga.scale=function(){return ro(ao.scale.linear(),Ql,nc)};var ec=Ql.map(function(n){return[n[0].utc,n[1]]}),rc=Jl.multi([[".%L",function(n){return n.getUTCMilliseconds()}],[":%S",function(n){return n.getUTCSeconds()}],["%I:%M",function(n){return n.getUTCMinutes()}],["%I %p",function(n){return n.getUTCHours()}],["%a %d",function(n){return n.getUTCDay()&&1!=n.getUTCDate()}],["%b %d",function(n){return 1!=n.getUTCDate()}],["%B",function(n){return n.getUTCMonth()}],["%Y",zt]]);ec.year=ga.year.utc,ga.scale.utc=function(){return ro(ao.scale.linear(),ec,rc)},ao.text=An(function(n){return n.responseText}),ao.json=function(n,t){return Cn(n,"application/json",uo,t)},ao.html=function(n,t){return Cn(n,"text/html",oo,t)},ao.xml=An(function(n){return n.responseXML}),"function"==typeof define&&define.amd?(this.d3=ao,define(ao)):"object"==typeof module&&module.exports?module.exports=ao:this.d3=ao}();},{}],
+2:[function(require,module,exports){
+"use strict";
+
+var d3 = require('d3');
+
+
+//aigner: functions for drawing expand- and collapse-symbols
+function drawExpandSymbol(aCircle, line1, line2)
+{        
+     aCircle = aCircle
+        .attr("r", 10)
+        .style("stroke", "black")
+        .style("stroke-width", 2)
+        .style("fill", "green")
+        .style("fill-opacity", .6)
+    line1 = line1
+        .attr("x1", parseFloat(aCircle.attr("cx"))-5)
+        .attr("y1", parseFloat(aCircle.attr("cy")))
+        .attr("x2", parseFloat(aCircle.attr("cx"))+5)
+        .attr("y2", parseFloat(aCircle.attr("cy")))
+        .style("stroke", "black")
+        .style("stroke-width", 2);
+    line2 = line2
+        .attr("x1", parseFloat(aCircle.attr("cx")))
+        .attr("y1", parseFloat(aCircle.attr("cy"))-5)
+        .attr("x2", parseFloat(aCircle.attr("cx")))
+        .attr("y2", parseFloat(aCircle.attr("cy"))+5)
+        .style("stroke", "black")
+        .style("stroke-width", 2);
+}
+function drawRemoveSymbol(anXdsm, aCircle, aMinus)
+{        
+     var xOffset=150;
+     var yOffset=12;
+     aCircle = aCircle
+        .attr("cx", anXdsm.svg.attr("width")-xOffset)
+        .attr("cy", yOffset)
+        .attr("r", 10)
+		.classed("remCircle",true)
+    aMinus = aMinus
+        .attr("x1", anXdsm.svg.attr("width")-xOffset+5)
+        .attr("y1", yOffset)
+        .attr("x2", anXdsm.svg.attr("width")-xOffset-5)
+        .attr("y2", yOffset)
+		.classed("remMinus",true)
+}
+d3.contextMenu = function (menu, openCallback) {
+
+	// create the div element that will hold the context menu
+	d3.selectAll('.d3-context-menu').data([1])
+		.enter()
+		.append('div')
+		.attr('class', 'd3-context-menu');
+
+	// close menu
+	d3.select('body').on('click.d3-context-menu', function() {
+		d3.select('.d3-context-menu').style('display', 'none');
+	});
+
+	// this gets executed when a contextmenu event occurs
+	return function(data, index) {	
+		var elm = this;
+
+		d3.selectAll('.d3-context-menu').html('');
+		var list = d3.selectAll('.d3-context-menu').append('ul');
+	       	list.selectAll('li').data(menu).enter()
+			.append('li')
+			.html(function(d) {
+				return d.title;
+			})
+			.on('mousedown', function(d, i) {
+				d.onMouseDown(elm, data, index);
+			})
+			.on('mouseup', function(d, i) {
+				d.onMouseUp(elm, data, index);
+				d3.select('.d3-context-menu').style('display', 'none');
+			})
+            .on('mouseenter',function(d,i){
+                d.onMouseOver(elm,data,index);
+                if(d.childrenItems.length>0 )
+                     {
+                      d3.select(this).selectAll("ul").remove(); 
+                      d3.select(this)
+                        .append("ul")
+                        .selectAll("li")
+                           .data(d.childrenItems)
+                            .enter().append("li")
+                              .text(function(d) { return d.title; })
+                         .on("mouseenter", function(d,i){
+                                d.onMouseOver(elm,data,index);
+                            })
+                         .on('click',  function(d, i) {
+                                d.onMouseClick(elm, d, index);
+                            })
+                         .on('mouseleave',function(d,i){
+                            
+                            });
+                     }
+                 else
+                     return false;
+            })
+            .on('mouseleave',function(d,i){
+                d3.select(this).selectAll("ul").style('display', 'none')                  
+            });
+        
+          
+
+		// the openCallback allows an action to fire before the menu is displayed
+		// an example usage would be closing a tooltip
+		if (openCallback) openCallback(data, index);
+
+		// display context menu
+		d3.select('.d3-context-menu')
+			.style('left', (d3.event.pageX - 2) + 'px')
+			.style('top', (d3.event.pageY - 2) + 'px')
+			.style('display', 'block');
+
+		d3.event.preventDefault();
+	};
+};
+
+//aigner: Include function
+function include(arr,obj) {
+		return (arr.indexOf(obj) != -1);
+}
+
+function makeKadmosMenu(theGraphs,currentView,currentID)
+{
+	var imageWidth = 200;
+	var imageHeight = 150;
+	var padding = 10;
+	var rectHeight = 70;
+	var imgSize = 40;
+	var visPackDiv = d3.select("body").append("div").attr("class","vispackDiv");
+	var visPackSvg = visPackDiv.append("svg")
+		.attr("class","visPackSvg")
+		.attr("width",imageWidth*5+40)
+		.attr("height",imageHeight+40)
+		.attr("transform", "translate("
+		  + String(10) + "," + String(10) + ")")			  
+	
+	
+	var defs = visPackSvg.append("defs");
+	var filter = defs.append("filter")
+		.attr("id", "drop-shadow")
+		.attr("height", "130%")
+	filter.append("feColorMatrix")
+		.attr("values", "0.2 0 0 0 0 0 0.2 0 0 0 0 0 0.2 0 0 0 0 0 1 0")
+		.attr("result", "matrixOut")
+	filter.append("feGaussianBlur")
+		.attr("in", "matrixOut")
+		.attr("stdDeviation", 5)
+		.attr("result", "blur")
+	filter.append("feOffset")
+		.attr("in", "blur")
+		.attr("dx", 5)
+		.attr("dy", 5)
+		.attr("result", "offsetBlur")
+	var feMerge = filter.append("feMerge");
+	feMerge.append("feMergeNode")
+		.attr("in", "offsetBlur")
+	feMerge.append("feMergeNode")
+		.attr("in", "SourceGraphic");
+	
+	var visPackFrame = visPackSvg.append("rect")
+		.attr("width",imageWidth*5+12)
+		.attr("height",imageHeight)
+		.attr("fill", "white")
+		.style("filter", "url(#drop-shadow)")
+	
+	var imgs = visPackSvg.selectAll("image").data([0]);
+		imgs.enter()
+		.append("svg:image")
+		.attr("x",5)
+		.attr("xlink:href", "file:../supportFiles/include/KADMOS_VisualizationPack_Icon.png")
+		.attr("width", imageWidth)
+		.attr("height", imageHeight)
+		.attr("position", "relative")
+		
+	var offset_tmp = 860;
+	visPackSvg.append("text")
+		.attr("transform", "translate("
+		  + String(210) + "," + String(35) + ")")
+		.attr("font-family","Arial")
+		.attr("font-size","32pt")
+		.attr("fill","#666666")
+		.text("KADMOS Visualization Package")
+	
+	
+	var acknGroup = visPackSvg.append("g").attr("class","acknGroup").classed("acknGroup",true)
+	var acknRect = acknGroup.append("rect").classed("ackn",true)
+		.attr("height", 30)
+		.attr("transform", "translate("
+		  + String(offset_tmp) + "," + String(2) + ")")
+	acknGroup.append("text")
+		.attr("transform", "translate("
+		  + String(offset_tmp+padding/2) + "," + String(20) + ")")
+		.attr("text-anchor", "front")
+		.attr("font-family","Arial")
+		.attr("font-size","12pt")
+		.attr("fill","white")
+		.text("Acknowledgements")
+	acknRect = acknRect.attr("width", function(d) {return this.parentNode.getBBox().width+padding;})
+	acknRect = acknRect.classed("VisPackMenu",true)
+	acknGroup = acknGroup.on("mouseover", function(){d3.select(this).style("cursor", "pointer")})
+	.on("click",function(){window.open("../supportFiles/include/acknowledgements.html", '_blank');})
+
+	var acknGroup2 = visPackSvg.append("g").attr("class","acknGroup2")
+		.attr("transform", "translate("
+		  + String(offset_tmp) + "," + String(40+padding) + ")")
+    acknGroup2.append("text")
+		.classed("acknText",true)
+		.attr("dy", "0em")
+		.text("Copyright:")
+	acknGroup2.append("text")
+		.classed("acknText",true)
+		.attr("dy", "1.5em")
+		.text("B. Aigner")
+	var imgs = visPackSvg.selectAll("img").data([0]);
+		imgs.enter()
+		.append("svg:image")
+		.attr("xlink:href", "file:../supportFiles/include/RWTH_Logo.png")
+		.attr("x", String(offset_tmp+85))
+		.attr("y", "3em")
+		.attr("width", "60")
+		.attr("height", "40");
+	acknGroup2.append("text")
+		.classed("acknText",true)
+		.attr("dy", "3.2em")
+		.text("I. van Gent")
+	var imgs = visPackSvg.selectAll("img").data([0]);
+		imgs.enter()
+		.append("svg:image")
+		.attr("xlink:href", "file:../supportFiles/include/TUDelft_Logo.png")
+		.attr("x", String(offset_tmp+85))
+		.attr("y", "4.7em")
+		.attr("width", "60")
+		.attr("height", "40");
+
+	
+	var ul = d3.select("body").append("div").attr("class","newDiv").append("ul")
+	function makeViewButtons(graphs_tmp,aName, visFile)
+	{
+		var dropdown1 = ul.append("li").on("mouseover", function(){d3.select(this).style("cursor", "default")})
+		dropdown1.append("a").text(aName)
+		dropdown1.append("img").attr("src","../supportFiles/include/AGILE_Icon.png")
+			.attr("align","left")
+			.style("margin-left","6px")
+			.style("margin-right","0px")
+			.style("margin-top","6px")
+			.style("margin-bottom","6px")
+			.attr("height","42")
+			.attr("width","42")
+		var links = dropdown1.append("ul");
+		for (var i=0; i < graphs_tmp.length; i++)
+		{
+			makeDropDown(graphs_tmp[i],visFile,links,aName)
+		}
+	}
+	function makeDropDown(theData,file,theLinks,aName)
+	{	
+		var linkLi = theLinks.append("li");
+		var link = linkLi.append("a").text(theData.description)
+		if (theData.id == currentID && currentView == aName)
+		{
+			link
+			 .on("mouseover", function(){
+				 d3.select(this).style("cursor", "default")})
+		    linkLi.style("background","#888")
+		}
+		else
+		{
+			link
+			 .on("mouseover", function(){d3.select(this).style("cursor", "pointer")})
+			 .on("click", function(){
+				window.location.replace("../supportFiles/"+file, '_blank');
+				window.localStorage.setItem("graphID", theData.id);})
+		}
+		
+		
+	}
+	makeViewButtons(theGraphs,"XDSM","xdsm.html");
+	makeViewButtons(theGraphs,"Edge Bundles","edgeBundles.html");
+	makeViewButtons(theGraphs,"Sankey Diagram","sankeyDiagram.html");
+}
+//#####################################################################//
+
+function showRightClickOption()
+{
+	var optionGroupDiv = d3.select("body").append("div").attr("class","optionDiv")
+		.style("left",(d3.event.pageX) + "px")
+		.style("top",(d3.event.pageY - 28) + "px")
+		.style("position", "absolute");
+	var optionGroupSvg = optionGroupDiv.append("svg").attr("class","optionGroupSvg");
+	var optionGroup = optionGroupSvg.append("g").attr("class","optionGroup");
+	var optionGroupRect = optionGroup.append("rect")
+		.transition().delay(400)
+		.attr("height", 26)
+		.attr("fill", "#f2f2f2")
+		.style("border-radius", "4px")
+		.style("border", "1px solid #d4d4d4")
+		.attr("fill-opacity", 1.)
+		.attr("width", 130)
+		.attr("stroke", "black")
+		.attr("stroke-width", 1)
+	var optionText = optionGroup.append("text")
+		.transition().delay(400)
+		.attr("transform", "translate(10,18)")
+		.attr("font-family","Arial")
+		.attr("font-size","8pt")
+		.attr("fill","black")
+		.attr("fill-opacity",1.)
+		.text("Click right for options")
+}
+function hideRightClickOption()
+{
+	d3.selectAll(".optionDiv").remove()
+}
+
+//aigner: Function creates a table
+function tabulate(aTable,data,columns) {
+	var thead = aTable.append('thead');
+	var	tbody = aTable.append('tbody');  
+
+	// create a row for each object in the data
+	var rows = tbody.selectAll('tr')
+	  .data(data)
+	  .enter()
+	  .append('tr');
+
+	// create a cell in each row for each column
+	var cells = rows.selectAll('td')
+	  .data(function (row) {
+		return columns.map(function (column) {
+		  return {column: column, value: row[column]};
+		});
+	  })
+	  .enter()
+	  .append('td')
+		.html(function (d) { return d.value; });
+
+	return aTable;
+}
+
+//aigner: Move to front function
+d3.selection.prototype.moveToFront = function() {  
+  return this.each(function(){
+	this.parentNode.appendChild(this);
+  });
+};
+//aigner: Move to back function
+d3.selection.prototype.moveToBack = function() {  
+	return this.each(function() { 
+		var firstChild = this.parentNode.firstChild; 
+		if (firstChild) { 
+			this.parentNode.insertBefore(this, firstChild); 
+		} 
+	});
+};
+
+//get the current graph ID from the KADMOS visualiazation package's starting page
+var graphID = "01";
+if (window.localStorage.getItem("graphID"))
+{
+	graphID=window.localStorage.getItem("graphID");
+}
+var jsonFile = "json/xdsm_"+graphID+".json";
+
+//Get graph info from graphs.json file
+var graphs;
+var currentGraph;
+var varCategories; 
+d3.json("json/graphs.json", function(error, aGraphInfo) 
+{	
+	if (error) {throw error;}	
+	graphs =  aGraphInfo.graphs;
+	for (var i=0;i<graphs.length;i++)
+	{
+		if (graphs[i].id==graphID)
+		{
+			currentGraph = graphs[i]
+		}
+	}
+	
+	varCategories =  aGraphInfo.categories;
+})
+
+
+//aigner: biHisankey functions (Source: http://bl.ocks.org/Neilos/584b9a5d44d5fe00f779)
+d3.biHiSankey = function () {
+  "use strict";
+
+  var biHiSankey = {},
+    nodeWidth = 24,
+    nodeSpacing = 8,
+    linkSpacing = 5,
+    arrowheadScaleFactor = 0, // Specifies the proportion of a link's stroke width to be allowed for the marker at the end of the link.
+    size = [1, 1], // default to one pixel by one pixel
+    nodes = [],
+    nodeMap = {},
+    parentNodes = [],
+    leafNodes = [],
+    links = [],
+    xScaleFactor = 1,
+    yScaleFactor = 1,
+    defaultLinkCurvature = 0.5;
+
+  function center(node) {
+    return node.y + node.height / 2;
+  }
+
+  function value(link) {
+    return link.value;
+  }
+
+  function initializeNodeArrayProperties(node) {
+    node.sourceLinks = [];
+    node.rightLinks = [];
+    node.targetLinks = [];
+    node.leftLinks = [];
+    node.connectedNodes = [];
+    node.children = [];
+    node.ancestors = [];
+  }
+  // generates the nodeMap {"1": <node1>, "2": <node2>}
+  // and initializes the array properties of each node
+  function initializeNodeMap() {
+    nodes.forEach(function (node) {
+      nodeMap[node.id] = node;
+      initializeNodeArrayProperties(node);
+    });
+  }
+
+  function computeLeafNodes() {
+    leafNodes = nodes.filter(function (node) {
+      return !node.children.length;
+    });
+  }
+
+  function computeParentNodes() {
+    parentNodes = nodes.filter(function (node) {
+      return node.children.length;
+    });
+  }
+
+  function addAncestorsToChildren(node) {
+    node.children.forEach(function (child) {
+      child.ancestors = child.ancestors.concat(this.ancestors.concat([this]));
+      addAncestorsToChildren(child);
+    }, node);
+  }
+
+  // generate hierarchical connections between parent and child nodes
+  function computeNodeHierarchy() {
+    var parent,
+        rootNodes = [];
+
+    nodes.forEach(function (node) {
+      parent = null;
+      if (parent) {
+        node.parent = parent;
+        parent.children.push(node);
+      } else {
+        node.parent = null;
+        rootNodes.push(node);
+      }
+    });
+
+    computeLeafNodes();
+    computeParentNodes();
+
+    rootNodes.forEach(function (rNode) {
+      addAncestorsToChildren(rNode);
+    });
+  }
+
+  // Populate the sourceLinks and targetLinks for each node.
+  function computeNodeLinks() {
+    var sourceNode, targetNode;
+    links.forEach(function (link) {
+      sourceNode = nodeMap[link.source] || link.source;
+      targetNode = nodeMap[link.target] || link.target;
+      link.id = link.source + '-' + link.target;
+      link.source = sourceNode;
+      link.target = targetNode;
+      sourceNode.sourceLinks.push(link);
+      targetNode.targetLinks.push(link);
+    });
+  }
+
+  function visible(linkCollection) {
+    return linkCollection.filter(function (link) {
+      return link.source.state === "collapsed" && link.target.state === "collapsed";
+    });
+  }
+
+  // When child nodes are collapsed into their parents (or higher ancestors)
+  // the links between the child nodes should be represented by links
+  // between the containing ancestors. This function adds those extra links.
+  function computeAncestorLinks() {
+    // Leaf nodes are never parents of other nodes
+    // Duplicate source and target links between a leaf node and another leaf node
+    // and add to the leaf nodes' parents
+    leafNodes.forEach(function (leafNode) {
+      leafNode.sourceLinks.forEach(function (sourceLink) {
+        var ancestorTargets,
+        target = sourceLink.target;
+        if (leafNodes.indexOf(target) >= 0) {
+          ancestorTargets = target.ancestors.filter(function (tAncestor) {
+            return leafNode.ancestors.indexOf(tAncestor) < 0;
+          });
+          ancestorTargets.forEach(function (ancestorTarget) {
+            var ancestorLink = { source: leafNode,
+                                target: ancestorTarget,
+                                value: sourceLink.value,
+                                id: leafNode.id + "-" + ancestorTarget.id };
+
+            leafNode.sourceLinks.push(ancestorLink);
+            ancestorTarget.targetLinks.push(ancestorLink);
+            links.push(ancestorLink);
+          });
+        }
+      });
+
+      leafNode.targetLinks.forEach(function (targetLink) {
+        var ancestorSources, source = targetLink.source;
+        if (leafNodes.indexOf(source) >= 0) {
+          ancestorSources = source.ancestors.filter(function (sAncestor) {
+            return leafNode.ancestors.indexOf(sAncestor) < 0;
+          });
+          ancestorSources.forEach(function (ancestorSource) {
+            var ancestorLink = { source: ancestorSource,
+                                target: leafNode,
+                                value: targetLink.value,
+                                id: ancestorSource.id + "-" + leafNode.id };
+            ancestorSource.sourceLinks.push(ancestorLink);
+            leafNode.targetLinks.push(ancestorLink);
+            links.push(ancestorLink);
+          });
+        }
+      });
+    });
+
+    // Add links between parents (for when both parents are in collapsed state)
+    parentNodes.forEach(function (parentNode) {
+      parentNode.sourceLinks.forEach(function (sourceLink) {
+        var ancestorTargets, target = sourceLink.target;
+        if (leafNodes.indexOf(target) >= 0) {
+          ancestorTargets = target.ancestors.filter(function (tAncestor) {
+            return parentNode.ancestors.indexOf(tAncestor) < 0;
+          });
+          ancestorTargets.forEach(function (ancestorTarget) {
+            var ancestorLink = { source: parentNode,
+                                target: ancestorTarget,
+                                value: sourceLink.value,
+                                id: parentNode.id + "-" + ancestorTarget.id };
+
+            parentNode.sourceLinks.push(ancestorLink);
+            ancestorTarget.targetLinks.push(ancestorLink);
+            links.push(ancestorLink);
+          });
+        }
+      });
+    });
+  }
+
+  // To reduce clutter in the diagram merge links that are from the
+  // same source to the same target by creating a new link
+  // with a value equal to the sum of the values of the merged links
+  function mergeLinks() {
+    var linkGroups = d3.nest()
+      .key(function (link) { return link.source.id + "->" + link.target.id; })
+      .entries(links)
+      .map(function (object) { return object.values; });
+
+    links = linkGroups.map(function (linkGroup) {
+      return linkGroup.reduce(function (previousLink, currentLink) {
+        return {
+          "source": previousLink.source,
+          "target": previousLink.target,
+          "id": d3.min([previousLink.id, currentLink.id]),
+          "value": previousLink.value + currentLink.value
+        };
+      });
+    });
+  }
+
+  function nodeHeight(sideLinks) {
+    var spacing = Math.max(sideLinks.length - 1, 0) * linkSpacing,
+        scaledValueSum = d3.sum(sideLinks, value) * yScaleFactor;
+    return scaledValueSum + spacing;
+  }
+
+  // Compute the value of each node by summing the associated links.
+  // Compute the number of spaces between the links
+  // Compute the number of source links for later decrementing
+  function computeNodeValues() {
+    nodes.forEach(function (node) {
+      node.value = Math.max(
+        d3.sum(node.leftLinks, value),
+        d3.sum(node.rightLinks, value)
+      );
+      node.inputs = d3.sum(visible(node.targetLinks), value);
+      node.outputs = d3.sum(visible(node.sourceLinks), value);
+      node.height = Math.max(nodeHeight(visible(node.leftLinks)), nodeHeight(visible(node.rightLinks)));
+      node.linkSpaceCount = Math.max(Math.max(node.leftLinks.length, node.rightLinks.length) - 1, 0);
+    });
+  }
+
+  function computeConnectedNodes() {
+    var sourceNode, targetNode;
+    links.forEach(function (link) {
+      sourceNode = link.source;
+      targetNode = link.target;
+      if (sourceNode.connectedNodes.indexOf(targetNode) < 0) {
+        sourceNode.connectedNodes.push(targetNode);
+      }
+      if (targetNode.connectedNodes.indexOf(sourceNode) < 0) {
+        targetNode.connectedNodes.push(sourceNode);
+      }
+    });
+  }
+
+  function sourceAndTargetNodesWithSameX() {
+    var nodeArray = [];
+    links.filter(function (link) {
+      return link.target.x === link.source.x;
+    }).forEach(function (link) {
+      if (nodeArray.indexOf(link.target) < 0) {
+        nodeArray.push(link.target);
+      }
+    });
+    return nodeArray;
+  }
+
+  function compressInXDirection() {
+    var connectedNodesXPositions,
+        nodesByXPosition = d3.nest()
+          .key(function (node) { return node.x; })
+          .sortKeys(d3.ascending)
+          .entries(nodes)
+          .map(function (object) { return object.values; });
+
+    nodesByXPosition.forEach(function (xnodes) {
+      xnodes.forEach(function (node) {
+        connectedNodesXPositions = node.connectedNodes.map(function (connectedNode) {
+          return connectedNode.x;
+        });
+        // keep decrementing the x value of the node
+        // unless it would have the same x value as one of its source or target nodes
+        // or node.x is already 0
+        while (node.x > 0 && connectedNodesXPositions.indexOf(node.x - 1) < 0) {
+          node.x -= 1;
+        }
+      });
+    });
+  }
+
+  function scaleNodeXPositions() {
+    var minX = d3.min(nodes, function (node) { return node.x; }),
+        maxX = d3.max(nodes, function (node) { return node.x; }) - minX;
+    xScaleFactor = (size[0] - nodeWidth) / maxX;
+
+    nodes.forEach(function (node) {
+      node.x *= xScaleFactor;
+    });
+  }
+
+  function computeNodeXPositions() {
+    var remainingNodes = nodes,
+        nextNodes,
+        x = 0,
+        addToNextNodes = function (link) {
+          if (nextNodes.indexOf(link.target) < 0 && link.target.x === this.x) {
+            nextNodes.push(link.target);
+          }
+        },
+        setValues = function (node) {
+          node.x = x;
+          node.width = nodeWidth;
+          node.sourceLinks.forEach(addToNextNodes, node);
+        };
+
+    while (remainingNodes.length) {
+      nextNodes = [];
+      remainingNodes.forEach(setValues);
+      if (nextNodes.length) {
+        remainingNodes = nextNodes;
+      } else {
+        remainingNodes = sourceAndTargetNodesWithSameX();
+      }
+      x += 1;
+    }
+
+    compressInXDirection();
+    scaleNodeXPositions();
+  }
+
+  function computeLeftAndRightLinks() {
+    var source, target;
+    nodes.forEach(function (node) {
+      node.rightLinks = [];
+      node.leftLinks = [];
+    });
+    links.forEach(function (link) {
+      source = link.source;
+      target = link.target;
+      if (source.x < target.x) {
+        source.rightLinks.push(link);
+        target.leftLinks.push(link);
+        link.direction = 1;
+      } else {
+        source.leftLinks.push(link);
+        target.rightLinks.push(link);
+        link.direction = -1;
+      }
+    });
+  }
+
+  function adjustTop(adjustment) {
+    nodes.forEach(function (node) {
+      node.y -= adjustment;
+    });
+  }
+
+  function computeNodeYPositions(iterations) {
+    var minY,
+        alpha,
+        nodesByXPosition = d3.nest()
+          .key(function (node) { return node.x; })
+          .sortKeys(d3.ascending)
+          .entries(nodes)
+          .map(function (object) { return object.values; });
+
+    function calculateYScaleFactor() {
+      var linkSpacesCount, nodeValueSum, discretionaryY;
+      yScaleFactor = d3.min(nodesByXPosition, function (nodes) {
+        linkSpacesCount = d3.sum(nodes, function (node) {
+          return node.linkSpaceCount;
+        });
+        nodeValueSum = d3.sum(nodes, function (node) {
+          return node.value;
+        });
+        discretionaryY = (size[1]
+                        - (nodes.length - 1) * nodeSpacing
+                        - linkSpacesCount * linkSpacing);
+
+        return  discretionaryY / nodeValueSum;
+      });
+
+      // Fat links are those with lengths less than about 4 times their heights
+      // Fat links don't bend well
+      // Test that yScaleFactor is not so big that it causes "fat" links; adjust yScaleFactor accordingly
+      links.forEach(function (link) {
+        var linkLength = Math.abs(link.source.x - link.target.x),
+            linkHeight = link.value * yScaleFactor;
+        if (linkLength / linkHeight < 4) {
+          yScaleFactor = 0.25 * linkLength / link.value;
+        }
+      });
+    }
+
+    function initializeNodeYPosition() {
+      nodesByXPosition.forEach(function (nodes) {
+        nodes.forEach(function (node, i) {
+          node.y = i;
+          node.heightAllowance = node.value * yScaleFactor + linkSpacing * node.linkSpaceCount;
+        });
+      });
+    }
+
+    function calculateLinkThickness() {
+      links.forEach(function (link) {
+        link.thickness = link.value * yScaleFactor;
+      });
+    }
+
+    function relaxLeftToRight(alpha) {
+      function weightedSource(link) {
+        return center(link.source) * link.value;
+      }
+
+      nodesByXPosition.forEach(function (nodes) {
+        nodes.forEach(function (node) {
+          if (node.rightLinks.length) {
+            var y = d3.sum(node.rightLinks, weightedSource) / d3.sum(node.rightLinks, value);
+            node.y += (y - center(node)) * alpha;
+          }
+        });
+      });
+    }
+
+    function relaxRightToLeft(alpha) {
+      function weightedTarget(link) {
+        return center(link.target) * link.value;
+      }
+
+      nodesByXPosition.slice().reverse().forEach(function (nodes) {
+        nodes.forEach(function (node) {
+          if (node.leftLinks.length) {
+            var y = d3.sum(node.leftLinks, weightedTarget) / d3.sum(node.leftLinks, value);
+            node.y += (y - center(node)) * alpha;
+          }
+        });
+      });
+    }
+
+    function resolveCollisions() {
+      function ascendingYPosition(a, b) {
+        return a.y - b.y;
+      }
+
+      nodesByXPosition.forEach(function (nodes) {
+        var node,
+            dy,
+            y0 = 0,
+            n = nodes.length,
+            i;
+
+        nodes.sort(ascendingYPosition);
+
+        // Push any overlapping nodes down.
+        for (i = 0; i < n; ++i) {
+          node = nodes[i];
+          dy = y0 - node.y;
+          if (dy > 0) {
+            node.y += dy;
+          }
+          y0 = node.y + node.heightAllowance + nodeSpacing;
+        }
+
+        // If the bottommost node goes outside the bounds, push it back up.
+        dy = y0 - nodeSpacing - size[1];
+        if (dy > 0) {
+          node.y -= dy;
+          y0 = node.y;
+
+          // Push any overlapping nodes back up.
+          for (i = n - 2; i >= 0; --i) {
+            node = nodes[i];
+            dy = node.y + node.heightAllowance + nodeSpacing - y0;
+            if (dy > 0) {
+              node.y -= dy;
+            }
+            y0 = node.y;
+          }
+        }
+      });
+    }
+
+    calculateYScaleFactor();
+    initializeNodeYPosition();
+    calculateLinkThickness();
+    resolveCollisions();
+
+    for (alpha = 1; iterations > 0; --iterations) {
+      alpha *= 0.99;
+      relaxRightToLeft(alpha);
+      resolveCollisions();
+      relaxLeftToRight(alpha);
+      resolveCollisions();
+    }
+
+    minY = d3.min(nodes, function (node) { return node.y; });
+    adjustTop(minY);
+  }
+
+  function computeLinkYPositions() {
+
+    function ascendingLeftNodeYPosition(a, b) {
+      var aLeftNode = (a.direction > 0) ? a.source : a.target,
+          bLeftNode = (b.direction > 0) ? b.source : b.target;
+      return aLeftNode.y - bLeftNode.y;
+    }
+
+    function ascendingRightNodeYPosition(a, b) {
+      var aRightNode = (a.direction > 0) ? a.target : a.source,
+          bRightNode = (b.direction > 0) ? b.target : b.source;
+      return aRightNode.y - bRightNode.y;
+    }
+
+    nodes.forEach(function (node) {
+      node.rightLinks.sort(ascendingRightNodeYPosition);
+      node.leftLinks.sort(ascendingLeftNodeYPosition);
+    });
+
+    nodes.forEach(function (node) {
+      var rightY = 0, leftY = 0;
+
+      node.rightLinks.forEach(function (link) {
+        if (link.direction > 0) {
+          link.sourceY = rightY;
+          if (link.target.state === "collapsed") {
+            rightY += link.thickness + linkSpacing;
+          }
+        }
+        else {
+          link.targetY = rightY;
+          if (link.source.state === "collapsed") {
+            rightY += link.thickness + linkSpacing;
+          }
+        }
+      });
+
+      node.leftLinks.forEach(function (link) {
+        if (link.direction < 0) {
+          link.sourceY = leftY;
+          if (link.target.state === "collapsed") {
+            leftY += link.thickness + linkSpacing;
+          }
+        }
+        else {
+          link.targetY = leftY;
+          if (link.source.state === "collapsed") {
+            leftY += link.thickness + linkSpacing;
+          }
+        }
+      });
+
+    });
+  }
+
+
+  biHiSankey.arrowheadScaleFactor = function (_) {
+    if (!arguments.length) { return arrowheadScaleFactor; }
+    arrowheadScaleFactor = +_;
+    return biHiSankey;
+  };
+
+  biHiSankey.collapsedNodes = function () {
+    return nodes.filter(function (node) { return node.state === "collapsed"; });
+  };
+
+  biHiSankey.connected = function (nodeA, nodeB) {
+    return nodeA.connectedNodes.indexOf(nodeB) >= 0;
+  };
+
+  biHiSankey.expandedNodes = function () {
+    return nodes.filter(function (node) { return node.state === "expanded"; });
+  };
+
+  biHiSankey.layout = function (iterations) {
+    computeNodeXPositions();
+    computeLeftAndRightLinks();
+    computeNodeValues();
+    computeNodeYPositions(iterations);
+    computeNodeValues();
+    computeLinkYPositions();
+    return biHiSankey;
+  };
+
+  biHiSankey.link = function () {
+    var curvature = defaultLinkCurvature;
+
+    function leftToRightLink(link) {
+      var arrowHeadLength = link.thickness * arrowheadScaleFactor,
+          straightSectionLength = (3 * link.thickness / 4) - arrowHeadLength,
+          x0 = link.source.x + link.source.width,
+          x1 = x0 + arrowHeadLength / 2,
+          x4 = link.target.x - straightSectionLength - arrowHeadLength,
+          xi = d3.interpolateNumber(x0, x4),
+          x2 = xi(curvature),
+          x3 = xi(1 - curvature),
+          y0 = link.source.y + link.sourceY + link.thickness / 2,
+          y1 = link.target.y + link.targetY + link.thickness / 2;
+      return "M" + x0 + "," + y0
+           + "L" + x1 + "," + y0
+           + "C" + x2 + "," + y0
+           + " " + x3 + "," + y1
+           + " " + x4 + "," + y1
+           + "L" + (x4 + straightSectionLength) + "," + y1;
+    }
+
+    function rightToLeftLink(link) {
+      var arrowHeadLength = link.thickness * arrowheadScaleFactor,
+          straightSectionLength = link.thickness / 4,
+          x0 = link.source.x,
+          x1 = x0 - arrowHeadLength / 2,
+          x4 = link.target.x + link.target.width + straightSectionLength + arrowHeadLength,
+          xi = d3.interpolateNumber(x0, x4),
+          x2 = xi(curvature),
+          x3 = xi(1 - curvature),
+          y0 = link.source.y + link.sourceY + link.thickness / 2,
+          y1 = link.target.y + link.targetY + link.thickness / 2;
+      return "M" + x0 + "," + y0
+           + "L" + x1 + "," + y0
+           + "C" + x2 + "," + y0
+           + " " + x3 + "," + y1
+           + " " + x4 + "," + y1
+           + "L" + (x4 - straightSectionLength) + "," + y1;
+    }
+
+    function link(d) {
+      if (d.source.x < d.target.x) {
+        return leftToRightLink(d);
+      }
+      return rightToLeftLink(d);
+    }
+
+    link.curvature = function (_) {
+      if (!arguments.length) { return curvature; }
+      curvature = +_;
+      return link;
+    };
+
+    return link;
+  };
+
+  biHiSankey.links = function (_) {
+    if (!arguments.length) { return links; }
+    links = _.filter(function (link) {
+      return link.source !== link.target; // filter out links that go nowhere
+    });
+    return biHiSankey;
+  };
+
+  biHiSankey.linkSpacing = function (_) {
+    if (!arguments.length) { return linkSpacing; }
+    linkSpacing = +_;
+    return biHiSankey;
+  };
+
+  biHiSankey.nodes = function (_) {
+    if (!arguments.length) { return nodes; }
+    nodes = _;
+    return biHiSankey;
+  };
+
+  biHiSankey.nodeWidth = function (_) {
+    if (!arguments.length) { return nodeWidth; }
+    nodeWidth = +_;
+    return biHiSankey;
+  };
+
+  biHiSankey.nodeSpacing = function (_) {
+    if (!arguments.length) { return nodeSpacing; }
+    nodeSpacing = +_;
+    return biHiSankey;
+  };
+
+  biHiSankey.relayout = function () {
+    computeLeftAndRightLinks();
+    computeNodeValues();
+    computeLinkYPositions();
+    return biHiSankey;
+  };
+
+  biHiSankey.size = function (_) {
+    if (!arguments.length) { return size; }
+    size = _;
+    return biHiSankey;
+  };
+
+  biHiSankey.visibleLinks = function () {
+    return visible(links);
+  };
+
+  biHiSankey.initializeNodes = function (callback) {
+    initializeNodeMap();
+    computeNodeHierarchy();
+    computeNodeLinks();
+    computeAncestorLinks();
+    mergeLinks();
+    computeConnectedNodes();
+    nodes.forEach(callback);
+    return biHiSankey;
+  };
+
+  return biHiSankey;
+};
+
+
+'use strict';
+
+var svg, tooltip, biHiSankey, path, defs, colorScale, isTransitioning;
+
+var OPACITY = {
+    NODE_DEFAULT: 0.9,
+    NODE_FADED: 0.1,
+    NODE_HIGHLIGHT: 0.8,
+    LINK_DEFAULT: 0.6,
+    LINK_FADED: 0.05,
+    LINK_HIGHLIGHT: 0.9
+  },
+  LINK_COLOR = "#b3b3b3",
+  INFLOW_COLOR = "#CC0000",
+  OUTFLOW_COLOR = "#99CC00",
+  NODE_WIDTH = 36,
+  COLLAPSER = {
+    RADIUS: NODE_WIDTH / 2,
+    SPACING: 2
+  },
+  OUTER_MARGIN = 10,
+  MARGIN = {
+    TOP: 2 * (COLLAPSER.RADIUS + OUTER_MARGIN),
+    RIGHT: OUTER_MARGIN,
+    BOTTOM: OUTER_MARGIN,
+    LEFT: OUTER_MARGIN
+  },
+  TRANSITION_DURATION = 400,
+  HEIGHT = 2000 - MARGIN.TOP - MARGIN.BOTTOM,
+  WIDTH = 960 - MARGIN.LEFT - MARGIN.RIGHT,
+  LAYOUT_INTERATIONS = 32,
+  REFRESH_INTERVAL = 7000;
+
+var formatNumber = function (d) {
+  var numberFormat = d3.format(",.0f"); // zero decimal places
+  return  numberFormat(d) + " connections";
+},
+
+formatFlow = function (d) {
+  var flowFormat = d3.format(",.0f"); // zero decimal places with sign
+  return flowFormat(Math.abs(d));
+},
+
+// Used when temporarily disabling user interractions to allow animations to complete
+disableUserInterractions = function (time) {
+  isTransitioning = true;
+  setTimeout(function(){
+    isTransitioning = false;
+  }, time);
+},
+
+hideTooltip = function () {
+  return tooltip.transition()
+    .duration(TRANSITION_DURATION)
+    .style("opacity", 0);
+},
+
+showTooltip = function () {
+  return tooltip
+    .style("left", d3.event.pageX + "px")
+    .style("top", d3.event.pageY + 15 + "px")
+    .transition()
+      .duration(TRANSITION_DURATION)
+      .style("opacity", 1);
+};
+
+colorScale = d3.scale.category10(),
+
+svg = d3.select("body").append("svg")
+        .attr("width", WIDTH + MARGIN.LEFT + MARGIN.RIGHT)
+        .attr("height", HEIGHT + MARGIN.TOP + MARGIN.BOTTOM)
+      .append("g")
+        .attr("transform", "translate(" + MARGIN.LEFT + "," + MARGIN.TOP + ")");
+
+svg.append("g").attr("id", "links");
+svg.append("g").attr("id", "nodes");
+svg.append("g").attr("id", "collapsers");
+
+tooltip = d3.select("body").append("div").attr("id", "tooltip");
+
+tooltip.style("opacity", 0)
+    .append("p")
+      .attr("class", "value");
+
+biHiSankey = d3.biHiSankey();
+
+// Set the biHiSankey diagram properties
+biHiSankey
+  .nodeWidth(NODE_WIDTH)
+  .nodeSpacing(10)
+  .linkSpacing(4)
+  .arrowheadScaleFactor(0.5) // Specifies that 0.5 of the link's stroke WIDTH should be allowed for the marker at the end of the link.
+  .size([WIDTH, HEIGHT]);
+
+path = biHiSankey.link().curvature(0.45);
+
+defs = svg.append("defs");
+
+defs.append("marker")
+  .style("fill", LINK_COLOR)
+  .attr("id", "arrowHead")
+  .attr("viewBox", "0 0 6 10")
+  .attr("refX", "1")
+  .attr("refY", "5")
+  .attr("markerUnits", "strokeWidth")
+  .attr("markerWidth", "1")
+  .attr("markerHeight", "1")
+  .attr("orient", "auto")
+  .append("path")
+    .attr("d", "M 0 0 L 1 0 L 6 5 L 1 10 L 0 10 z");
+
+defs.append("marker")
+  .style("fill", OUTFLOW_COLOR)
+  .attr("id", "arrowHeadInflow")
+  .attr("viewBox", "0 0 6 10")
+  .attr("refX", "1")
+  .attr("refY", "5")
+  .attr("markerUnits", "strokeWidth")
+  .attr("markerWidth", "1")
+  .attr("markerHeight", "1")
+  .attr("orient", "auto")
+  .append("path")
+    .attr("d", "M 0 0 L 1 0 L 6 5 L 1 10 L 0 10 z");
+
+defs.append("marker")
+  .style("fill", INFLOW_COLOR)
+  .attr("id", "arrowHeadOutlow")
+  .attr("viewBox", "0 0 6 10")
+  .attr("refX", "1")
+  .attr("refY", "5")
+  .attr("markerUnits", "strokeWidth")
+  .attr("markerWidth", "1")
+  .attr("markerHeight", "1")
+  .attr("orient", "auto")
+  .append("path")
+    .attr("d", "M 0 0 L 1 0 L 6 5 L 1 10 L 0 10 z");
+
+function update() {
+  var link, linkEnter, node, nodeEnter, collapser, collapserEnter;
+
+  function dragmove(node) {
+	 hideRightClickOption();
+    node.x = Math.max(0, Math.min(WIDTH - node.width, d3.event.x));
+    node.y = Math.max(0, Math.min(HEIGHT - node.height, d3.event.y));
+    d3.select(this).attr("transform", "translate(" + node.x + "," + node.y + ")");
+    biHiSankey.relayout();
+    svg.selectAll(".node").selectAll("rect").attr("height", function (d) { return d.height; });
+    link.attr("d", path);
+  }
+
+  function containChildren(node) {
+    node.children.forEach(function (child) {
+      child.state = "contained";
+      child.parent = this;
+      child._parent = null;
+      containChildren(child);
+    }, node);
+  }
+
+  function expand(node) {
+    node.state = "expanded";
+    node.children.forEach(function (child) {
+      child.state = "collapsed";
+      child._parent = this;
+      child.parent = null;
+      containChildren(child);
+    }, node);
+  }
+
+  function collapse(node) {
+    node.state = "collapsed";
+    containChildren(node);
+  }
+
+  function restoreLinksAndNodes() {
+    link
+      .style("stroke", LINK_COLOR)
+      .style("marker-end", function () { return 'url(#arrowHead)'; })
+      .transition()
+        .duration(TRANSITION_DURATION)
+        .style("opacity", OPACITY.LINK_DEFAULT);
+	
+
+    node
+      .selectAll("rect")
+        .style("fill", function (d) {
+          d.color = colorScale(d.name.replace(/ .*/, ""));
+          return d.color;
+        })
+        .style("stroke", function (d) {
+          return d3.rgb(colorScale(d.name.replace(/ .*/, ""))).darker(0.1);
+        })
+        .style("fill-opacity", OPACITY.NODE_DEFAULT);
+
+    node.filter(function (n) { return n.state === "collapsed"; })
+      .transition()
+        .duration(TRANSITION_DURATION)
+        .style("opacity", OPACITY.NODE_DEFAULT);
+  }
+
+  function showHideChildren(node) {
+    disableUserInterractions(2 * TRANSITION_DURATION);
+    hideTooltip();
+    if (node.state === "collapsed") { expand(node); }
+    else { collapse(node); }
+
+    biHiSankey.relayout();
+    update();
+    link.attr("d", path);
+    restoreLinksAndNodes();
+  }
+
+  function highlightConnected(g) {
+    link.filter(function (d) { return d.source === g; })
+      .style("marker-end", function () { return 'url(#arrowHeadInflow)'; })
+      .style("stroke", OUTFLOW_COLOR)
+      .style("opacity", OPACITY.LINK_DEFAULT);
+
+    link.filter(function (d) { return d.target === g; })
+      .style("marker-end", function () { return 'url(#arrowHeadOutlow)'; })
+      .style("stroke", INFLOW_COLOR)
+      .style("opacity", OPACITY.LINK_DEFAULT);
+	  
+	link.forEach(function (aLink) {
+      aLink.moveToFront;
+    });
+  }
+
+  function fadeUnconnected(g) {
+    link.filter(function (d) { return d.source !== g && d.target !== g; })
+      .style("marker-end", function () { return 'url(#arrowHead)'; })
+      .transition()
+        .duration(TRANSITION_DURATION)
+        .style("opacity", OPACITY.LINK_FADED);
+
+    node.filter(function (d) {
+      return (d.name === g.name) ? false : !biHiSankey.connected(d, g);
+    }).transition()
+      .duration(TRANSITION_DURATION)
+      .style("opacity", OPACITY.NODE_FADED);
+  }
+
+  link = svg.select("#links").selectAll("path.link")
+    .data(biHiSankey.visibleLinks(), function (d) { return d.id; });
+
+  link.transition()
+    .duration(TRANSITION_DURATION)
+    .style("stroke-WIDTH", function (d) { return Math.max(1, d.thickness); })
+    .attr("d", path)
+    .style("opacity", OPACITY.LINK_DEFAULT);
+
+
+  link.exit().remove();
+
+
+  linkEnter = link.enter().append("path")
+    .attr("class", "link")
+    .style("fill", "none");
+
+  linkEnter.on('mouseenter', function (d) {
+    if (!isTransitioning) {
+      showTooltip().select(".value").text(function () {
+        if (d.direction > 0) {
+          return d.source.name + " → " + d.target.name + "\n" + formatNumber(d.value);
+        }
+        return d.target.name + " ← " + d.source.name + "\n" + formatNumber(d.value);
+      });
+
+      d3.select(this)
+        .style("stroke", LINK_COLOR)
+        .transition()
+          .duration(TRANSITION_DURATION / 2)
+          .style("opacity", OPACITY.LINK_HIGHLIGHT);
+    }
+  });
+
+  linkEnter.on('mouseleave', function () {
+    if (!isTransitioning) {
+      hideTooltip();
+
+      d3.select(this)
+        .style("stroke", LINK_COLOR)
+        .transition()
+          .duration(TRANSITION_DURATION / 2)
+          .style("opacity", OPACITY.LINK_DEFAULT);
+    }
+  });
+  
+  
+	function showLinkTree(aLink,aVarCategory)
+	{
+		var theSchema;
+		$.ajax({
+		  dataType: "json",
+		  url: "json/"+aVarCategory+".json",
+		  async: false,
+		  success: function(data){theSchema = JSON.parse(JSON.stringify(data))}
+		});
+		var name_tmp = "Variable flow: " + aLink.__data__.source.name +  "  →  " + aLink.__data__.target.name
+		createTreeLayout(name_tmp,theSchema,aLink.__data__.name,link);
+	}
+	
+	function showEdgeTable(aLink)
+	{						
+		var edgeTableDiv = d3.select("body").append("div").attr("class","edgeTableDiv")
+			.style('left', (d3.event.pageX - 2) + 'px')
+			.style('top', (d3.event.pageY - 2) + 'px')
+			.style("position", "absolute")
+		var edgeTableGroup = edgeTableDiv.append("g").attr("class","edgeTableGroup")
+		
+		//Drag Function for edge table
+		var xPos_init = d3.event.x - 2;
+		var yPos_init = d3.event.y - 2;
+		var xOffset_tmp;
+		var yOffset_tmp;
+		var drag = d3.behavior.drag()
+			.on("dragstart", dragstarted)
+			.on("drag", dragged)
+			.on("dragend", dragended);
+		function dragstarted() {				
+		  xOffset_tmp = xPos_init-d3.event.sourceEvent.clientX;
+		  yOffset_tmp = yPos_init-d3.event.sourceEvent.clientY;
+		}
+		function dragged() {
+			 d3.select(this)
+				.style("left",(d3.event.x+xOffset_tmp) + "px")
+				.style("top",(d3.event.y+yOffset_tmp) + "px")
+		}
+		function dragended() {
+		  xPos_init = d3.event.sourceEvent.clientX+xOffset_tmp;
+		  yPos_init = d3.event.sourceEvent.clientY+yOffset_tmp;
+		}
+		edgeTableDiv.call(drag);
+		
+		var headLine = "Edge Information (" + aLink.from + " - " + aLink.to + ")";
+
+		var tabRemoveSVG = edgeTableGroup.append("svg")
+			.attr("width",String(headLine.length*12+"pt"))
+			.attr("height",26)
+		tabRemoveSVG.append("rect")
+			.attr("width", "100%")
+			.attr("height", "100%")
+			.attr("fill", "white");
+		var tabRemoveSymbol = tabRemoveSVG.append("g");
+		tabRemoveSymbol = tabRemoveSymbol
+			.attr("class", "tabRemoveSymbol")
+			.attr("transform", "translate(26,0)")
+		var circle = tabRemoveSymbol.append("circle")
+			.classed("remCircle",true)
+		var minus = tabRemoveSymbol.append("line").classed("remMinus",true)
+		var cx = -20;
+		var cy = 12;
+		circle = circle
+			.attr("cx", cx+5)
+			.attr("cy", cy)
+			.attr("r", 10)
+		minus = minus
+			.attr("x1", cx)
+			.attr("y1", cy)
+			.attr("x2", cx+10)
+			.attr("y2", cy)
+			
+		tabRemoveSVG.append("text").attr("class","tabRemoveText")
+			.attr("transform", "translate(26,20)")
+			.attr("fill", "black")
+			.style("font-family", "Arial")
+			.style("font-size", "16pt")
+			.style("font-weight", "bold")
+			.text(headLine);
+		
+		tabRemoveSymbol
+			.on("mouseover", function(){
+				d3.select(this).style("cursor", "pointer")
+				circle.style("fill", "red").style("fill-opacity", .8);
+				})
+			.on("mouseout", function(){circle.style("fill", "red").style("fill-opacity", .6)})
+		tabRemoveSymbol.on("click", function(d)
+		{
+			edgeTableDiv.remove();
+		})
+					
+		var anEdgeNameSplit = aLink.name.split(',')
+		var numberOfconnections = anEdgeNameSplit.length;
+		var theLeafNodes = [];
+		var dimension=0;
+		var nullDim=false;
+		var undefinedLeafs;
+		var treeData;
+		$.ajax({
+		  dataType: "json",
+		  url: "json/"+varCategories[0].name+"_"+graphID+".json",
+		  async: false,
+		  success: function(data){treeData = JSON.parse(JSON.stringify(data))}
+		});
+		var pipeData = aLink.name;
+		getPrunedLeafNodes("/"+treeData.name+"/", treeData.children, pipeData, theLeafNodes)
+		var undefLeafsNumber=0;
+		var defLeafsNumber=0;
+		for (var k=0;k<theLeafNodes.length;k++)
+		{
+			if (theLeafNodes[k].dimension!=null){dimension = dimension+theLeafNodes[k].dimension}
+			else{nullDim=true}
+			if (theLeafNodes[k].value.includes("could not be found")||theLeafNodes[k].value.includes("unknown"))
+			{
+				if (undefLeafsNumber==0){undefinedLeafs += theLeafNodes[k].xPath;}
+				else {undefinedLeafs += "," + theLeafNodes[k].xPath;}
+				undefLeafsNumber ++;
+			}
+			else
+			{
+				defLeafsNumber++;
+			}
+		}		
+		//Render data for table
+		var data = [];
+		data.push({ "name" : "Total number of connections", "value" : numberOfconnections })
+		data.push({ "name" : "Number of referenced connections", "value" : defLeafsNumber })
+		data.push({ "name" : "Dimension of referenced connections", "value" : String(dimension) })
+		if (undefinedLeafs)
+		{
+			data.push({ "name" : "Number of unreferenced connections", "value" :  undefLeafsNumber})					
+		}
+		var table = edgeTableGroup.append('table');
+		tabulate(table,data,['name', 'value']); // 2 column table
+		if (undefinedLeafs)
+		{
+			var undefLeafTreeSVG = edgeTableGroup.append("svg")
+				.attr("transform", "translate(0,20)")
+				.attr("width",String(headLine.length*9.5+"pt"))
+				.attr("height",50)
+			undefLeafTreeSVG.append("rect")
+				.attr("width", "100%")
+				.attr("height", "100%")
+				.attr("fill", "white");
+			var expandSymbol = undefLeafTreeSVG.append("g")
+				.attr("class", "newExpandSymbol")
+				.attr("transform", "translate(38,12)");
+			var expandRect = expandSymbol.append("rect")
+				.attr("x",-28)
+				.attr("height", 50)
+				.attr("fill", "#666666")
+				.attr("stroke", "none")
+				.attr("stroke-width", 2)
+				.attr("fill-opacity", 1)
+			var expCircle = expandSymbol.append("circle")
+				.attr("cx", -26)
+				.attr("cy", 0);
+			var expLine1 = expandSymbol.append("line");
+			var expLine2 = expandSymbol.append("line");
+			drawExpandSymbol(expCircle,expLine1,expLine2);
+				expCircle = expCircle.attr("fill", "white");
+			expandSymbol
+				.on("mouseover", function(){
+					d3.select(this).style("cursor", "pointer")			
+					expCircle.style("fill", "green").style("fill-opacity", .8);
+				})
+				.on("mouseout", function(){
+					expCircle.style("fill", "green").style("fill-opacity", .6);
+				})
+			undefLeafTreeSVG.append("text").attr("class","tabRemoveText")
+				.attr("transform", "translate(26,20)")
+				.attr("fill", "black")
+				.style("font-family", "Arial")
+				.style("font-size", "16pt")
+				.style("font-weight", "bold")
+				.text("Show unreferenced connections as tree");
+			expandSymbol.on("mousedown", function(){
+				var name_tmp = "Unref. connections: " + aLink.source.name +  "  →  " + aLink.target.name
+				createTreeLayout(name_tmp,treeData,aLink.name,link);
+			})
+		}
+		
+	}
+	
+	//linkMenu --> functions for right click options
+	var linkChildrenItems = [];
+	for (var j=0; j< varCategories.length; j++)
+	{
+		linkChildrenItems.push({title: 'according to ' + varCategories[j].description,
+								identifier: varCategories[j].name+"_"+graphID,
+								onMouseClick: function(elm, data, i) {showLinkTree(elm,data.identifier)},
+								onMouseOver: function(elm,data,i){}});
+	}
+	var linkMenu = [
+	{
+		title: 'Show edge info',
+		onMouseDown: function(elm, k, i) {
+			showEdgeTable(k)
+		},
+		onMouseUp: function(elm, k, i) {
+		},
+		onMouseOver: function(elm, d, i) {
+		},
+		childrenItems: []
+	},
+	{
+		title: 'Show variable tree...',
+		onMouseDown: function(elm, k, i) {
+		},
+		onMouseUp: function(elm, k, i) {
+		},
+		onMouseOver: function(elm, d, i) {
+		},
+		childrenItems: linkChildrenItems
+	}
+	]
+
+	var thisLink = d3.select(this);
+	linkEnter.on('contextmenu', d3.contextMenu(linkMenu))
+
+  linkEnter.sort(function (a, b) { return b.thickness - a.thickness; })
+    .classed("leftToRight", function (d) {
+      return d.direction > 0;
+    })
+    .classed("rightToLeft", function (d) {
+      return d.direction < 0;
+    })
+    .style("marker-end", function () {
+      return 'url(#arrowHead)';
+    })
+    .style("stroke", LINK_COLOR)
+    .style("opacity", 0)
+    .transition()
+      .delay(TRANSITION_DURATION)
+      .duration(TRANSITION_DURATION)
+      .attr("d", path)
+      .style("stroke-WIDTH", function (d) { return Math.max(1, d.thickness); })
+      .style("opacity", OPACITY.LINK_DEFAULT);
+
+
+  node = svg.select("#nodes").selectAll(".node")
+      .data(biHiSankey.collapsedNodes(), function (d) { return d.id; });
+
+
+  node.transition()
+    .duration(TRANSITION_DURATION)
+    .attr("transform", function (d) { return "translate(" + d.x + "," + d.y + ")"; })
+    .style("opacity", OPACITY.NODE_DEFAULT)
+    .select("rect")
+      
+	  .style("stroke", function(d) { 
+		  return d3.rgb(d.color).darker(2); })
+      .style("stroke-WIDTH", "1px")
+      .attr("height", function (d) { return d.height; })
+      .attr("width", biHiSankey.nodeWidth());
+
+
+  node.exit()
+    .transition()
+      .duration(TRANSITION_DURATION)
+      .attr("transform", function (d) {
+        var collapsedAncestor, endX, endY;
+        collapsedAncestor = d.ancestors.filter(function (a) {
+          return a.state === "collapsed";
+        })[0];
+        endX = collapsedAncestor ? collapsedAncestor.x : d.x;
+        endY = collapsedAncestor ? collapsedAncestor.y : d.y;
+        return "translate(" + endX + "," + endY + ")";
+      })
+      .remove();
+
+
+  nodeEnter = node.enter().append("g").attr("class", "node");
+
+  nodeEnter
+    .attr("transform", function (d) {
+      var startX = d._parent ? d._parent.x : d.x,
+          startY = d._parent ? d._parent.y : d.y;
+      return "translate(" + startX + "," + startY + ")";
+    })
+    .style("opacity", 1e-6)
+    .transition()
+      .duration(TRANSITION_DURATION)
+      .style("opacity", OPACITY.NODE_DEFAULT)
+      .attr("transform", function (d) { return "translate(" + d.x + "," + d.y + ")"; });
+
+  nodeEnter.append("text");
+  nodeEnter.append("rect")
+    .style("fill", function(d) { 
+		  return d.color = colorScale(d.name.replace(/ .*/, "")); })
+	  .style("stroke", function(d) { 
+		  return d3.rgb(d.color).darker(2); })
+    .style("stroke-WIDTH", "1px")
+    .attr("height", function (d) { return d.height; })
+    .attr("width", biHiSankey.nodeWidth());
+
+  node.on("mouseenter", function (g) {
+	  //showRightClickOption();
+    if (!isTransitioning) {
+      restoreLinksAndNodes();
+      highlightConnected(g);
+      fadeUnconnected(g);
+
+      d3.select(this).select("rect")
+        .style("stroke", function (d) {
+          return d3.rgb(d.color).darker(0.1);
+        })
+        .style("fill-opacity", OPACITY.LINK_DEFAULT);
+
+      tooltip
+        .style("left", g.x + MARGIN.LEFT + "px")
+        .style("top", g.y + g.height + MARGIN.TOP + 15 + "px")
+        .transition()
+          .duration(TRANSITION_DURATION)
+          .style("opacity", 1).select(".value")
+          .text(function () {
+            var additionalInstructions = g.children.length ? "\n(Double click to expand)" : "";
+            return g.name + "\nInputs: " + formatFlow(g.inputs) + "\nOutputs: " + formatFlow(g.outputs);
+          });
+    }
+  });
+
+  node.on("mouseleave", function () {
+    if (!isTransitioning) {
+      hideTooltip();
+      restoreLinksAndNodes();
+    }
+	hideRightClickOption();
+  });
+
+  node.filter(function (d) { return d.children.length; })
+    .on("dblclick", showHideChildren);
+	
+	
+	//aigner: Right click options for tools
+	//##############################################################################################################################
+	
+	//aigner: Table for competence/tool information
+	//############################################################
+	function showToolTable(aTool)
+		{						
+			var toolTableDiv = d3.select("body").append("div").attr("class","toolTableDiv")
+				.style('left', (d3.event.x - 2) + 'px')
+				.style('top', (d3.event.y - 2) + 'px')
+				.style("position", "absolute")
+			var toolTableGroup = toolTableDiv.append("g").attr("class","toolTableGroup")
+			
+			//Drag Function for variable table
+			var xPos_init = d3.event.x - 2;
+			var yPos_init = d3.event.y - 2;
+			var xOffset_tmp;
+			var yOffset_tmp;
+			var drag = d3.behavior.drag()
+				.on("dragstart", dragstarted)
+				.on("drag", dragged)
+				.on("dragend", dragended);
+			function dragstarted() {				
+			  xOffset_tmp = xPos_init-d3.event.sourceEvent.clientX;
+			  yOffset_tmp = yPos_init-d3.event.sourceEvent.clientY;
+			}
+			function dragged() {
+				 d3.select(this)
+					.style("left",(d3.event.x+xOffset_tmp) + "px")
+					.style("top",(d3.event.y+yOffset_tmp) + "px")
+			}
+			function dragended() {
+			  xPos_init = d3.event.sourceEvent.clientX+xOffset_tmp;
+			  yPos_init = d3.event.sourceEvent.clientY+yOffset_tmp;
+			}
+			toolTableDiv.call(drag);
+			
+			var aToolNameSplit = aTool.name.split(': ')			
+			var headLine;
+			if (aToolNameSplit.length>1){headLine = "Competence Information: (" + aToolNameSplit[1] + ")";}
+			else {headLine = "Competence Information: (" + aToolNameSplit[0] + ")";}
+
+			var tabRemoveSVG = toolTableGroup.append("svg")
+				.attr("width",800)
+				.attr("height",26)
+			var tabRemoveRect = tabRemoveSVG.append("rect")
+				.attr("width", "100%")
+				.attr("height", "100%")
+				.attr("fill", "white");
+			var tabRemoveSymbol = tabRemoveSVG.append("g");
+			tabRemoveSymbol = tabRemoveSymbol
+				.attr("class", "tabRemoveSymbol")
+				.attr("transform", "translate(26,0)")
+			var circle = tabRemoveSymbol.append("circle")
+				.classed("remCircle",true)
+			var minus = tabRemoveSymbol.append("line").classed("remMinus",true)
+			var cx = -20;
+			var cy = 12;
+			circle = circle
+				.attr("cx", cx+5)
+				.attr("cy", cy)
+				.attr("r", 10)
+			minus = minus
+				.attr("x1", cx)
+				.attr("y1", cy)
+				.attr("x2", cx+10)
+				.attr("y2", cy)
+				
+			tabRemoveSVG.append("text").attr("class","tabRemoveText")
+				.attr("transform", "translate(26,20)")
+				.attr("fill", "black")
+				.style("font-family", "Arial")
+				.style("font-size", "16pt")
+				.style("font-weight", "bold")
+				.text(headLine);
+			
+			tabRemoveSymbol
+				.on("mouseover", function(){
+					d3.select(this).style("cursor", "pointer")
+					circle.style("fill", "red").style("fill-opacity", .8);
+					})
+				.on("mouseout", function(){circle.style("fill", "red").style("fill-opacity", .6)})
+			tabRemoveSymbol.on("click", function(d)
+			{
+				toolTableDiv.remove();
+			})
+			
+		
+			var data = [];
+			// render the table(s)
+			if (aTool.metadata.length==0)
+			{
+				data.push({ "name" : "NO TOOL METADATA AVAILABLE", "value" : "..." })
+			}
+			for (var j=0; j < aTool.metadata.length;j++)
+			{
+				var metaData = aTool.metadata[j]
+				for(var key in metaData){
+				  data.push({ "name" : key, "value" : metaData[key] })
+				}
+				
+			}
+			var table = toolTableGroup.append('table');
+			tabulate(table,data,['name', 'value']); // 2 column table
+		}
+	//############################################################
+	
+	//aigner: Creation of input/output tree
+	//############################################################
+	function showIOTree(categoryName, theNode, io)
+	{	
+		var links = d3.selectAll(".link");
+		var array="";
+		var name_tmp = "";
+		links.each(function(theLink)
+		{		
+			if (io=="in")
+			{
+				if (theLink.to == theNode.id)
+				{
+					array = array + ", " + theLink.name;
+				}
+				name_tmp = "Input tree view:" + theNode.id;
+			}
+			else if (io=="out")
+			{
+				if (theLink.from == theNode.id)
+				{
+					array = array + ", " + theLink.name;
+				}
+				name_tmp = "Output tree view:" + theNode.id;
+			}
+		})
+		
+		var theSchema;
+		$.ajax({
+		  dataType: "json",
+		  url: "json/"+categoryName+".json",
+		  async: false,
+		  success: function(data){theSchema = JSON.parse(JSON.stringify(data))}
+		});
+		createTreeLayout(name_tmp,theSchema,array,link)
+	}
+	//############################################################
+
+	var inputChildrenitems = [];
+	var outputChildrenitems = [];
+	var inputChildrenitems = [];
+	var outputChildrenitems = [];
+	for (var j=0; j< varCategories.length; j++)
+	{
+		inputChildrenitems.push({title: 'according to ' + varCategories[j].description,
+								 identifier: varCategories[j].name+"_"+graphID,
+								 onMouseClick: function(elm, data, i) {showIOTree(data.identifier,elm.__data__,"in")},
+								 onMouseOver: function(elm,data,i){}});
+		outputChildrenitems.push({title: 'according to ' + varCategories[j].description,
+								 identifier: varCategories[j].name+"_"+graphID,
+								 onMouseClick: function(elm, data, i) {showIOTree(data.identifier,elm.__data__,"out")},
+								 onMouseOver: function(elm,data,i){}});
+	}
+	//menu --> functions for right click options
+	var toolMenu = [
+	{
+		title: 'Show competence info',
+		onMouseDown: function(elm, k, i) {
+			showToolTable(k);
+		},
+		onMouseUp: function(elm, k, i) {
+		},
+		onMouseOver: function(elm, d, i) {
+		},
+		childrenItems: []
+	},
+	{
+		title: 'Show input variable tree...',
+		onMouseDown: function(elm, k, i) {
+		},
+		onMouseUp: function(elm, k, i) {
+		},
+		onMouseOver: function(elm, d, i) {
+		},
+		childrenItems: inputChildrenitems
+	},
+	{
+		title: 'Show output variable tree...',
+		onMouseDown: function(elm, k, i) {
+		},
+		onMouseUp: function(elm, k, i) {
+		},
+		onMouseOver: function(elm, d, i) {
+		},
+		childrenItems: outputChildrenitems
+	}
+	]
+	//##############################################################################################################################
+	
+	node.on('contextmenu', d3.contextMenu(toolMenu));
+	
+  // allow nodes to be dragged to new positions
+  node.call(d3.behavior.drag()
+    .origin(function (d) 
+	{ 
+		return d; 
+	})
+    .on("dragstart", function () { 
+		hideRightClickOption();
+		this.parentNode.appendChild(this); })
+    .on("drag", dragmove));
+
+  // add in the text for the nodes
+  node.filter(function (d) { return d.value !== 0; })
+    .select("text")
+      .attr("x", -6)
+      .attr("y", function (d) { return d.height / 2; })
+      .attr("dy", ".35em")
+      .attr("text-anchor", "end")
+      .attr("transform", null)
+      .text(function (d) { return d.name; })
+    .filter(function (d) { return d.x < WIDTH / 2; })
+      .attr("x", 6 + biHiSankey.nodeWidth())
+      .attr("text-anchor", "start");
+
+
+  collapser = svg.select("#collapsers").selectAll(".collapser")
+    .data(biHiSankey.expandedNodes(), function (d) { return d.id; });
+
+
+  collapserEnter = collapser.enter().append("g").attr("class", "collapser");
+
+  collapserEnter.append("circle")
+    .attr("r", COLLAPSER.RADIUS)
+    .style("fill", function (d) {
+      d.color = colorScale(d.name.replace(/ .*/, ""));
+      return d.color;
+    });
+
+  collapserEnter
+    .style("opacity", OPACITY.NODE_DEFAULT)
+    .attr("transform", function (d) {
+      return "translate(" + (d.x + d.width / 2) + "," + (d.y + COLLAPSER.RADIUS) + ")";
+    });
+
+  collapserEnter.on("dblclick", showHideChildren);
+
+  collapser.select("circle")
+    .attr("r", COLLAPSER.RADIUS);
+
+  collapser.transition()
+    .delay(TRANSITION_DURATION)
+    .duration(TRANSITION_DURATION)
+    .attr("transform", function (d, i) {
+      return "translate("
+        + (COLLAPSER.RADIUS + i * 2 * (COLLAPSER.RADIUS + COLLAPSER.SPACING))
+        + ","
+        + (-COLLAPSER.RADIUS - OUTER_MARGIN)
+        + ")";
+    });
+
+  collapser.on("mouseenter", function (g) {
+    if (!isTransitioning) {
+      showTooltip().select(".value")
+        .text(function () {
+          return g.name + "\n(Double click to collapse)";
+        });
+
+      d3.select(this)
+        .style("opacity", OPACITY.NODE_HIGHLIGHT)
+        .select("circle")
+
+      node.filter(function (d) {
+        return d.ancestors.indexOf(g) >= 0;
+      }).style("opacity", OPACITY.NODE_HIGHLIGHT)
+        .select("rect")
+    }
+  });
+
+  collapser.on("mouseleave", function (g) {
+    if (!isTransitioning) {
+      hideTooltip();
+      d3.select(this)
+        .style("opacity", OPACITY.NODE_DEFAULT)
+        .select("circle")
+
+      node.filter(function (d) {
+        return d.ancestors.indexOf(g) >= 0;
+      }).style("opacity", OPACITY.NODE_DEFAULT)
+        .select("rect")
+    }
+  });
+
+  collapser.exit().remove();
+
+}
+
+function prune_schema(parentXPath, objArray, xPathList) 
+{ 
+	var firstElement = "/"+xPathList.split("/")[1]+"/";
+	for (var i = 0; i < objArray.length; ++i) 
+	{
+		var obj = objArray[i];
+		var objXPath;
+		
+		//aigner: If object has children append a "/" as xPath separator
+		//else append comma as indicator for last element in the xPath
+		if (obj.children){objXPath = parentXPath+objArray[i].name+"/";}
+		else{objXPath =  parentXPath+objArray[i].name;}
+		var objXPathFromFirst = objXPath.split(firstElement);
+		
+		// console.log("Current node ->")
+		// console.log(firstElement+objXPathFromFirst[1])
+		// console.log(xPathList)
+								
+		var delete_it = true;
+		if(objXPathFromFirst[1]==undefined)
+		{
+			delete_it = false;
+		}
+		else
+		{
+			if (include(xPathList, firstElement+objXPathFromFirst[1]))
+			{
+				delete_it = false;
+			}
+		}
+		if (delete_it==true)
+		{
+			// console.log("delete ->")
+			// console.log( objXPathFromFirst[1])
+			// console.log(xPathList)
+			
+			objArray.splice(i, 1);
+			i--;
+		}
+		else
+		{
+			// console.log("do not delete ->")
+			// console.log(objXPath);
+			if (obj.children)
+			{
+				if (obj.children.length==0)
+				{
+					objArray.splice(i, 1);
+					i--;
+					prune_schema(parentXPath, objArray, xPathList)
+				}
+				else{prune_schema(objXPath, obj.children, xPathList);}
+				
+			}
+		}
+	}
+}
+function getPrunedLeafNodes(parentXPath, objArray, xPathList, leafNodes) 
+{ 
+	var firstElement = "/"+xPathList.split("/")[1]+"/";
+	for (var i = 0; i < objArray.length; ++i) 
+	{
+		var obj = objArray[i];
+		var objXPath;
+		
+		//aigner: If object has children append a "/" as xPath separator
+		//else append comma as indicator for last element in the xPath
+		if (obj.children){objXPath = parentXPath+objArray[i].name+"/";}
+		else{objXPath =  parentXPath+objArray[i].name;}
+		var objXPathFromFirst = objXPath.split(firstElement);
+		
+		// console.log("Current node ->")
+		// console.log(firstElement+objXPathFromFirst[1])
+		// console.log(xPathList)
+								
+		var delete_it = true;
+		if(objXPathFromFirst[1]==undefined)
+		{
+			delete_it = false;
+		}
+		else
+		{
+			if (include(xPathList, firstElement+objXPathFromFirst[1]))
+			{
+				delete_it = false;
+			}
+		}
+		if (delete_it==true)
+		{
+			// console.log("delete ->")
+			// console.log( objXPathFromFirst[1])
+			// console.log(xPathList)
+			
+			objArray.splice(i, 1);
+			i--;
+		}
+		else
+		{
+			// console.log("do not delete ->")
+			// console.log(objXPath);
+			if (obj.children)
+			{
+				if (obj.children.length==0)
+				{
+					objArray.splice(i, 1);
+					i--;
+					getPrunedLeafNodes(parentXPath, objArray, xPathList, leafNodes)
+				}
+				else{getPrunedLeafNodes(objXPath, obj.children, xPathList, leafNodes);}
+			}
+			else 
+			{
+				obj.xPath = objXPath;
+				leafNodes.push(obj);
+			};
+		}
+	}
+}
+function clean_tree(objArray)
+{
+	for (var i = 0; i < objArray.length; ++i) 
+	{
+		var obj = objArray[i];
+		if (obj.children)
+		{
+			if (obj.children.length==0)
+			{
+				objArray.splice(i, 1);
+				i--;
+			}
+			clean_tree(obj.children);
+		}
+	}
+}
+function countElements(node, counter) 
+{
+	counter ++;
+	if (node.children)
+	{
+		if (node.children.length !== 0)
+		{
+			node.children.forEach(function(n)
+			{
+				counter = countElements(n, counter);
+			});
+		}
+	}
+	return counter;
+}
+function createTreeLayout(theName,schema,theLinks,theAllLinks)
+{	
+	var treeData = (JSON.parse(JSON.stringify(schema)));
+		
+	if (theLinks)
+	{
+		prune_schema("/"+treeData.name+"/", treeData.children, theLinks);
+		//aigner: count all descendants of a node
+		var firstEl = theLinks.split("/")[1];
+		if(firstEl != treeData.name)
+		{
+			var cleanOperations = countElements(treeData,0)
+			for (var i=0; i<cleanOperations; i++){clean_tree(treeData.children);}
+		}
+	}
+		
+		
+	var width= 1000;
+	var height= 500;
+	var xOffset = 10;
+	var xOffset2 = 100;	
+	
+	// Calculate total nodes, max label length
+	var totalNodes = 0;
+	var maxLabelLength = 0;
+	// variables for drag/drop
+	var selectedNode = null;
+	var draggingNode = null;
+	// Misc. variables
+	var i = 0;
+	var duration = 500;
+	var root;
+	
+
+	// size of the diagram
+	var viewerWidth = width/3;
+	var viewerHeight = height+50;
+
+	var tree = d3.layout.tree()
+		.size([viewerHeight, viewerWidth])
+
+	// define a d3 diagonal projection for use by the node paths later on.
+	var diagonal = d3.svg.diagonal()
+		.projection(function(d) {
+			return [d.y+xOffset, d.x];
+		});
+
+	// A recursive helper function for performing some setup by walking through all nodes
+
+	function visit(parent, visitFn, childrenFn) {
+		if (!parent) return;
+
+		visitFn(parent);
+
+		var children = childrenFn(parent);
+		if (children) {
+			var count = children.length;
+			for (var i = 0; i < count; i++) {
+				visit(children[i], visitFn, childrenFn);
+			}
+		}
+	}
+
+	// Call visit function to establish maxLabelLength
+	visit(treeData, function(d) {
+		totalNodes++;
+		maxLabelLength = Math.max(d.name.length, maxLabelLength);
+	}, function(d) {
+		return d.children && d.children.length > 0 ? d.children : null;
+	});
+	
+	function getMaxLength(data)
+	{
+		var maxLen=0;;
+		for (var i = 0; i < data.length; i++)
+		{
+			maxLen = Math.max(data[i].name.length, maxLen);
+		}
+		for (var i = 0; i < data.length; i++)
+		{
+			data[i].labelLength = maxLen;
+			if (data[i].children)
+			{getMaxLength(data[i].children);}
+			if (data[i]._children)
+			{getMaxLength(data[i]._children);}
+		}
+		
+	}
+	if(treeData._children)
+	{getMaxLength(treeData._children);}
+	if(treeData.children)
+	{getMaxLength(treeData.children);}
+	treeData.labelLength = treeData.name.length;
+
+
+	// Collapse the node and all it's children
+	function collapse(d) {
+	  if(d.children) {
+		d._children = d.children
+		d._children.forEach(collapse)
+		d.children = null
+	  }
+	}
+	// Collapse the node and all it's children
+	function expand(d) {
+	  if(d._children) {
+		d.children = d._children
+		d.children.forEach(expand)
+		d._children = null
+	  }
+	}
+	// Toggle children on click.
+	function click(d) 
+	{
+		if (d.children) {
+			d._children = d.children;
+			d.children = null;
+		} else 
+		{
+			d.children = d._children;
+			d._children = null;
+		}
+		update(d,theAllLinks);
+	}
+	// Collapse/expand entire tree on double-click
+	function dblclick(d) 
+	{
+		if(d.children) 
+		{
+			collapse(d);
+		}
+		else if(d._children)
+		{
+			expand(d);
+		}
+		update(d,theAllLinks);
+	}	
+
+	
+	//aigner: Here the tree layout is created
+	var treeLayoutdiv = d3.select("body").append("div").attr("class","treeDiv_"+theName)
+							.style("left",(d3.event.pageX) + "px")
+							.style("top",(d3.event.pageY - 28) + "px")
+							.style("position", "absolute")
+							.on("mousedown", function(d) {
+								d3.select(this).moveToFront();
+							})
+							
+	var treeLayoutSVG = treeLayoutdiv.append("svg").attr("class","treeLayoutSVG")
+	var treeGroup = treeLayoutSVG.append("g").attr("class","treeGroup").style("position","absolute")
+					.attr("transform", "translate(50,0)");
+	var margin = {top: 20, right: 90, bottom: 20, left: 90},
+				  width = 960 - margin.left - margin.right,
+				  height = 500 - margin.top - margin.bottom;
+
+	// append the svg object to the body of the page
+	// appends a 'group' element to 'svg'
+	// moves the 'group' element to the top left margin
+	var offset_tmp = 60;
+	treeLayoutSVG = treeLayoutSVG.attr("width", width + 1.2*margin.right + margin.left+offset_tmp)
+			 .attr("height", height + margin.top + margin.bottom+offset_tmp);
+	treeLayoutdiv = treeLayoutdiv.attr("width", width + 1.2*margin.right + margin.left+offset_tmp)
+			 .attr("height", height + margin.top + margin.bottom+offset_tmp);
+	treeGroup = treeGroup
+		.attr("width", width + margin.right + margin.left)
+		.attr("height", height + margin.top + margin.bottom);
+		
+	
+	//Drag Function for treeLayout
+	var xPos_init = d3.event.x - 2;
+	var yPos_init = d3.event.y - 2;
+	var xOffset_tmp;
+	var yOffset_tmp;
+	var drag = d3.behavior.drag()
+		.on("dragstart", dragstarted)
+		.on("drag", dragged)
+		.on("dragend", dragended);
+	function dragstarted() {				
+	  xOffset_tmp = xPos_init-d3.event.sourceEvent.clientX;
+	  yOffset_tmp = yPos_init-d3.event.sourceEvent.clientY;
+	}
+	function dragged() {
+		 d3.select(this)
+			.style("left",(d3.event.x+xOffset_tmp) + "px")
+			.style("top",(d3.event.y+yOffset_tmp) + "px")
+	}
+	function dragended() {
+	  xPos_init = d3.event.sourceEvent.clientX+xOffset_tmp;
+	  yPos_init = d3.event.sourceEvent.clientY+yOffset_tmp;
+	}
+	treeLayoutdiv.call(drag);
+
+	
+	var frame = treeGroup.append("rect")
+		.attr("class","treeFrame")
+		.attr("stroke-width", 1)
+		.attr("stroke", "white")
+		.attr("fill-opacity", .8);
+	
+	var removeSymbol = treeGroup.append("g").attr("class", "remove"+d3.event.pageX+"_"+d3.event.pageX)
+		
+	
+	var r=8;
+	var cx=r+2;
+	var cy=r+2;
+	var circle = removeSymbol.append("circle")
+		.attr("cx", cx)
+		.attr("cy", cy)
+		.attr("r", r)
+		.style("stroke", "black")
+		.style("stroke-width", 1.5)
+		.style("fill", "red")
+		.style("fill-opacity", .6)
+	var minus = removeSymbol.append("line")
+		.attr("x1", cx+r/2)
+		.attr("y1", cy)
+		.attr("x2", cx-r/2)
+		.attr("y2", cy)
+		.style("stroke", "black")
+		.style("stroke-width", 1.5);
+		
+	removeSymbol
+		.on("mouseover", function(){circle.style("fill", "red").style("fill-opacity", .8);})
+		.on("mouseout", function(){circle.style("fill", "red").style("fill-opacity", .6)})
+		.on("mousedown",function()
+		{
+			circle.style("fill", "darkred").style("fill-opacity",1);
+		})
+		.on("mouseup",function()
+		{
+			treeLayoutdiv.remove();
+		})
+
+	
+	// Define the root
+	root = treeData;
+	root.x0 = 0;
+	root.y0 = 0;
+	
+	// Append a group which holds all nodes and which the zoom Listener can act upon.
+	var svgGroup_xOff = root.name.length*10+50
+	var svgGroup = treeGroup.append("g")
+		.attr("class","tree_"+theName)
+		.attr("transform", "translate("+ svgGroup_xOff + "," + String(margin.top+10) + ")");
+	
+	collapse(root);
+	update(root,theAllLinks);
+	
+	var frametext = treeGroup.append("text")
+		.attr("class", "frametext")
+		.attr("x",30)
+		.attr("y",15)
+		.attr("text-anchor","start")
+		.attr("font-family","Arial")
+		.attr("font-size","18px")
+		.attr("font-weight","bold")
+		.text(theName)
+	
+	function update(source,allLinks) 
+	{
+		// Compute the new height, function counts total children of root node and sets tree height accordingly.
+		// This prevents the layout looking squashed when new nodes are made visible or looking sparse when nodes are removed
+		// This makes the layout more consistent.
+		var levelWidth = [1];
+		var levelLength = [1];
+		var childCount = function(level, n) {
+
+			if (n.children && n.children.length > 0) {
+				if (levelWidth.length <= level + 1) levelWidth.push(0);
+				
+				levelWidth[level + 1] += n.children.length;
+				n.children.forEach(function(d) {
+					childCount(level + 1, d);
+				});
+			}
+		};
+		childCount(0, root);
+
+		var newHeight = d3.max(levelWidth) * 60; // 20 pixels per line
+		var newWidth = viewerWidth+300;
+		
+		//BENNI: fill in viewerHeight instead of newHeight for other expanding/collapsing beaviour
+		tree = tree.size([newHeight, newWidth]);
+		
+		frame = frame.attr("width",newWidth)
+			.attr("height",newHeight+60)
+			.attr("fill","white");
+			
+		
+		
+		// Compute the new tree layout.
+		var nodes = tree.nodes(root),
+			links = tree.links(nodes);
+			
+			
+		//aigner: count all descendants of a node
+		function countDescendants(node, counter) 
+		{
+			if (node._children)
+			{
+				node._children.forEach(function(n)
+				{
+					counter = countDescendants(n, counter);
+				});
+			}
+			else if (node.children)
+			{
+				node.children.forEach(function(n)
+				{
+					counter = countDescendants(n, counter);
+				});
+			}
+			else
+			{
+				counter ++;
+			}
+			return counter;
+		}
+		
+		
+		var depths = [];
+		var labelLength = [];
+		nodes.forEach(function(d) 
+		{				
+			//aigner: If node is collapsed show number of ancestors
+			if (d._children)
+			{
+				d._childrenNum = countDescendants(d, 0);
+				d.text = d.name + " (" + d._childrenNum + ")";
+			}
+			else 
+			{
+				d.text = d.name
+			}
+			
+			//aigner: Find maximum labelLength for each level
+			if (!depths.includes(d.depth))
+			{
+				depths.push(d.depth);
+				labelLength.push(d.text.length);
+			}
+			else
+			{
+				if (d.depth!=0){labelLength[depths.indexOf(d.depth)] = Math.max(d.text.length, labelLength[depths.indexOf(d.depth)]);}
+			}
+		});
+		// Set widths between levels based on labelLength of each level.
+		var newWidth=0;	
+		var depth_tmp = 0;			
+		nodes.forEach(function(d) 
+		{
+			if (d.parent)
+			{
+				d.y = d.parent.y+(labelLength[depths.indexOf(d.depth)])*10+50;
+			}
+			else{d.y=0}
+			
+			
+			if (newWidth<d.y)
+			{newWidth=d.y;}
+			
+			// console.log("##############")
+			// console.log(d.name)
+			// console.log("x = " + d.x)
+			// console.log("y = " + d.y)
+			// console.log("depth = " + depths.indexOf(d.depth))
+			// console.log("##############")
+		});	
+		
+
+		// console.log(depths)		
+		// console.log(labelLength)		
+		
+		//aigner: Adjust height and width of the frame
+		treeLayoutdiv = treeLayoutdiv.attr("height", newHeight + margin.top + margin.bottom+offset_tmp)
+		treeLayoutdiv = treeLayoutdiv.attr("width", newWidth + margin.top + margin.bottom +300+maxLabelLength*25+offset_tmp)
+		treeLayoutSVG = treeLayoutSVG.attr("height", newHeight + margin.top + margin.bottom+offset_tmp)
+		treeLayoutSVG = treeLayoutSVG.attr("width", newWidth + margin.top + margin.bottom +300+maxLabelLength*25+offset_tmp)
+		frame = frame.attr("height", newHeight + margin.top + margin.bottom)
+		frame = frame.attr("width", newWidth + margin.top + margin.bottom+300+maxLabelLength*15)
+
+		
+
+		// Update the nodes…
+		var treeNode = svgGroup.selectAll("g.treeNode")
+			.data(nodes, function(d) {
+				return d.id || (d.id = ++i);
+			});
+
+		var dblclick_timer = false;
+		// Enter any new nodes at the parent's previous position.
+		var nodeEnter = treeNode.enter().append('g')
+		  .attr('class', 'treeNode')
+		  .attr("transform", function(d) {
+			return "translate(" + source.y0 + "," + source.x0 + ")";
+		})
+		.on("click", function(d) {
+			// if double click timer is active, this click is the double click
+			if ( dblclick_timer )
+			{
+				clearTimeout(dblclick_timer)
+				dblclick_timer = false
+				// double click code code comes here
+				//console.log("DOUBLE CLICK")
+				dblclick(d);
+			}
+			// otherwise, what to do after single click (double click has timed out)
+			else dblclick_timer = setTimeout( function(){
+				dblclick_timer = false
+				// single click code code comes here
+				//console.log("SINGLE CLICK")
+				click(d);
+			}, 250)
+		})
+			
+		
+
+		nodeEnter.append("circle")
+			.attr('class', 'nodeCircle')
+			.attr("r", 0)
+			.style("fill", function(d) {
+				return d._children ? "lightsteelblue" : "#fff";
+			})
+			.style("stroke", function(d) {
+				if(d.pipeLineIn && !d.pipeLineOut){
+					//console.log(d);
+					return '#CC0000'}
+				else if(!d.pipeLineIn && d.pipeLineOut){
+					//console.log(d);
+					return '#99CC00'}
+			})
+			.attr("cx", function(d) {return xOffset});
+
+		nodeEnter.append("text")
+			.attr("x", function(d) 
+			{
+					return d.children || d._children ? -10+xOffset : 10+xOffset;
+			})
+			.attr("dy", ".35em")
+			.attr('class', 'nodeText')
+			.attr("text-anchor", function(d) {
+				return d.children || d._children ? "end" : "start";
+			})
+			.text(function(d) {
+				return d.text;
+			})
+			.style("fill-opacity", 0)
+			
+
+		// Update the text to reflect whether node has children or not.
+		treeNode.select('text')
+			.attr("x", function(d) {
+				return d.children || d._children ? -10+xOffset : 10+xOffset;
+			})
+			.attr("text-anchor", function(d) {
+				return d.children || d._children ? "end" : "start";
+			})
+			.text(function(d) {
+				return d.text;
+			});
+
+		// Change the circle fill depending on whether it has children and is collapsed
+		treeNode.select("circle.nodeCircle")
+			.attr("r", 4.5)
+			.style("fill", function(d) {
+				return d._children ? "lightsteelblue" : "#fff";
+			});					
+					
+		// UPDATE		
+		// Transition nodes to their new position.
+		var nodeUpdate = treeNode.transition()
+			.duration(duration)
+			.attr("transform", function(d) {
+				return "translate(" + d.y + "," + d.x + ")";
+			});
+
+		// Fade the text in
+		nodeUpdate.select("text")
+			.style("fill-opacity", 1);
+		
+		
+			
+		
+		function showVariableTable(aVariable)
+		{					
+			var varTableDiv = d3.select("body").append("div").attr("class","varTableDiv_"+theName+"_"+aVariable.name)
+				.style('left', (d3.event.pageX - 2) + 'px')
+				.style('top', (d3.event.pageY - 2) + 'px')
+				.style("position", "absolute")
+				.on("mousedown", function(d) {
+					d3.select(this).moveToFront();
+				})
+			var varTableGroup = varTableDiv.append("g").attr("class","varTableGroup")
+			
+			//Drag Function for node table
+			var xPos_init = d3.event.x - 2;
+			var yPos_init = d3.event.y - 2;
+			var xOffset_tmp;
+			var yOffset_tmp;
+			var drag = d3.behavior.drag()
+				.on("dragstart", dragstarted)
+				.on("drag", dragged)
+				.on("dragend", dragended);
+			function dragstarted() {				
+			  xOffset_tmp = xPos_init-d3.event.sourceEvent.clientX;
+			  yOffset_tmp = yPos_init-d3.event.sourceEvent.clientY;
+			}
+			function dragged() {
+				 d3.select(this)
+					.style("left",(d3.event.x+xOffset_tmp) + "px")
+					.style("top",(d3.event.y+yOffset_tmp) + "px")
+			}
+			function dragended() {
+			  xPos_init = d3.event.sourceEvent.clientX+xOffset_tmp;
+			  yPos_init = d3.event.sourceEvent.clientY+yOffset_tmp;
+			}
+			varTableDiv.call(drag);
+			
+			var headLine = "Node Information (" + theName + ")";
+			var tabRemoveSVG = varTableGroup.append("svg")
+				.attr("width",String(headLine.length*9.5+"pt"))
+				.attr("height",26)
+			tabRemoveSVG.append("rect")
+				.attr("width", "100%")
+				.attr("height", "100%")
+				.attr("fill", "white");
+			var tabRemoveSymbol = tabRemoveSVG.append("g");
+			tabRemoveSymbol = tabRemoveSymbol
+				.attr("class", "tabRemoveSymbol")
+				.attr("transform", "translate(26,0)")
+			var circle = tabRemoveSymbol.append("circle")
+				.classed("remCircle",true)
+			var minus = tabRemoveSymbol.append("line").classed("remMinus",true)
+			var cx = -20;
+			var cy = 12;
+			circle = circle
+				.attr("cx", cx+5)
+				.attr("cy", cy)
+				.attr("r", 10)
+			minus = minus
+				.attr("x1", cx)
+				.attr("y1", cy)
+				.attr("x2", cx+10)
+				.attr("y2", cy)
+				
+			
+			tabRemoveSVG.append("text").attr("class","tabRemoveText")
+				.attr("transform", "translate(26,20)")
+				.attr("fill", "black")
+				.style("font-family", "Arial")
+				.style("font-size", "16pt")
+				.style("font-weight", "bold")
+				.text(headLine);
+			
+			
+			tabRemoveSymbol
+				.on("mouseover", function(){
+					d3.select(this).style("cursor", "pointer")
+					circle.style("fill", "red").style("fill-opacity", .8);
+					})
+				.on("mouseout", function(){circle.style("fill", "red").style("fill-opacity", .6)})
+			tabRemoveSymbol.on("click", function(d)
+			{
+				varTableDiv.remove();
+			})
+			
+			var data = [];
+			// render the table(s)
+			data.push({ "name" : "Name", "value" : "\""+aVariable.name+"\"" })
+			
+			function getNodeXPath(strWrapper,aNode) 
+			{
+			  strWrapper.val = "/"+aNode.name+strWrapper.val;
+			  if (!aNode.parent) 
+			  {
+				return strWrapper;
+			  }
+			  else 
+			  {
+				
+				return getNodeXPath(strWrapper, aNode.parent);
+			  }
+			}
+			var xPath_tmp = getNodeXPath({ val : '' }, aVariable).val;
+			data.push({ "name" : "xPath", "value" : xPath_tmp })
+			if (aVariable.type){data.push({ "name" : "Type", "value" : aVariable.type })}
+			if (aVariable.level){data.push({ "name" : "Level", "value" : aVariable.level })}
+			if (aVariable.children || aVariable._children)
+			{
+				var childrenNum=0;
+				if (aVariable.children){childrenNum=childrenNum+aVariable.children.length}
+				if (aVariable._children){childrenNum=childrenNum+aVariable._children.length}
+				data.push({ "name" : "Number of children", "value" : childrenNum })
+			}
+			if (aVariable.dimension){data.push({ "name" : "Dimension", "value" : aVariable.dimension })}
+			else if(aVariable.dimension===null){data.push({ "name" : "Dimension", "value" : "undefined" })}
+			if (aVariable.value){data.push({ "name" : "Value(s)", "value" : aVariable.value })}
+			var table = varTableGroup.append('table');
+			tabulate(table,data,['name', 'value']); // 2 column table
+		}
+		
+		//Highlight function, that shows usage of a node in the XDSM
+		function highlight(data,aText)
+		{
+			aText = "/"+data.name+aText;
+			if (data.parent){highlight(data.parent,aText)}
+			else
+			{
+				var allLinks_tmp = allLinks[0];
+				allLinks_tmp.forEach(function(p) {
+					var firstElement_tmp = p.__data__.name.split("/")[1]
+					var text_fromFirst = "/"+firstElement_tmp+aText.split(firstElement_tmp)[1]
+					if (include(p.__data__.name,text_fromFirst))
+					{
+						d3.select(p).style("opacity", .8);			
+					}
+					else
+					{
+						d3.select(p).style("opacity", 0);			
+					}
+				});
+			}
+		}
+		
+		//Function writeTreeToXML goes through tree nodes and puts the into an xml document
+		function writeTreeToXML(aNode,anXMLDoc,anXPath)
+		{
+			//Variable "children" 
+			//--> One children variable, no matter whether a node has "_children" (collapsed) or "children" (expanded)
+			var children;
+			if (aNode._children){children = aNode._children;}
+			else if (aNode.children){children = aNode.children;}
+			
+			//Get current xml element with its xPath
+			var element = anXMLDoc.evaluate(anXPath,anXMLDoc, null, XPathResult.FIRST_ORDERED_NODE_TYPE, null ).singleNodeValue;
+			if (element != null) {element.value = '...';}
+			
+			//If a node has children (collapsed or expanded), loop through them
+			if (children)
+			{
+				for (var i=0; i < children.length;i++)
+				{
+					//Name of the new XML element --> childName
+					var child = children[i];
+					var childName = child.name.split(/[\[\]]+/);//Split childName at "[]" which is the uID 
+					var cleanChildName = childName[0].split(/[\+\*\^\-\ \#]+/);//Split childName all special characters
+					var newNode = anXMLDoc.createElement(String(cleanChildName[0]));
+					
+					//The children are appended to the xPath --> newXPath
+					var newXPath = anXPath+"/"+cleanChildName[0];
+					
+					//If childName contains a uID, make the uID an attribute
+					if (childName[1])
+					{
+						if (parseInt(childName[1]))
+						{
+							var dummyID = childName[1];
+							newNode.setAttribute("dummyID", dummyID)
+							newXPath = newXPath+"[@dummyID='"+dummyID+"']";
+						}
+						else
+						{
+							var uID = childName[1];
+							newNode.setAttribute("uID", uID)
+							newXPath = newXPath+"[@uID='"+uID+"']";
+						}
+					}
+					if (cleanChildName.length>1) {newNode.setAttribute("elementName", childName[0])};
+					
+					//Append the newNode to the xml structure
+					element.appendChild(newNode);
+					
+					
+					
+					////aigner: Sorting of XML elements according to "uID"
+					// var items = element.children;
+					// var itemsArr = [];
+					// for (var j in items) {
+						// if (items[j].nodeType == 1) { // get rid of the whitespace text nodes
+							// itemsArr.push(items[j]);
+						// }
+					// }
+					// itemsArr.sort(function(a,b){
+						// if (a.getAttribute("uID") < b.getAttribute("uID"))
+							// return -1;
+						// if (a.getAttribute("uID") > b.getAttribute("uID"))
+							// return 1;
+						// return 0;
+						// });
+
+					// for (j = 0; j < itemsArr.length; ++j) {
+					  // element.appendChild(itemsArr[j]);
+					// }
+					
+					//call function writeTreeToXML recursively for all children
+					writeTreeToXML(child,anXMLDoc,newXPath)
+				}
+			}
+			else
+			{
+				if (aNode.value){element.innerHTML = String(aNode.value);}
+				else{element.innerHTML = " ";}
+			}
+			//return the xml document
+			return anXMLDoc;
+		}
+		
+		function removeAttributeInAllElements(aDocument,attribute)
+		{
+		  var matchingElements = [];
+		  var allElements = aDocument.getElementsByTagName('*');
+		  for (var i = 0, n = allElements.length; i < n; i++)
+		  {
+			if (allElements[i].getAttribute(attribute) !== null)
+			{
+				allElements[i].removeAttribute(attribute);
+			}
+		  }
+		  return matchingElements;
+		}
+		
+		function putAncestorsInXMLString(strWrapper, aNode)
+		{
+			//Name of the new XML element
+			var nodeName = aNode.name.split(/[\[\]]+/);//Split name at "[]" which is the uID 
+			var cleanNodeName = nodeName[0].split(/[\+\*\^\-\ \#]+/);//Split nodeName all special characters
+			//If nodeName contains a uID, make the uID an attribute
+			if (nodeName[1])
+			{
+				var uID = nodeName[1];
+				strWrapper.val = "<"+cleanNodeName[0]+" uID='"+ uID +"'>"+strWrapper.val+"</"+cleanNodeName[0]+">";;
+			}
+			else
+			{
+				strWrapper.val = "<"+cleanNodeName[0]+">"+strWrapper.val+"</"+cleanNodeName[0]+">";;
+			}
+			var aParent = aNode.parent;
+			if (aParent)
+			{
+				return putAncestorsInXMLString(strWrapper, aParent);
+			}
+			else 
+			{
+				return strWrapper;
+			}
+		}
+		
+		function putAncestorsInXPath(strWrapper, aNode)
+		{
+			//Name of the new XML element
+			var nodeName = aNode.name.split(/[\[\]]+/);//Split name at "[]" which is the uID 
+			var cleanNodeName = nodeName[0].split(/[\+\*\^\-\ \#]+/);//Split nodeName all special characters
+			//If nodeName contains a uID, make the uID an attribute
+			if (nodeName[1])
+			{
+				var uID = nodeName[1];
+				strWrapper.val = "/"+cleanNodeName[0]+"[@uID='"+uID+"']"+strWrapper.val;
+			}
+			else
+			{
+				strWrapper.val = "/"+cleanNodeName[0]+strWrapper.val;
+			}
+			var aParent = aNode.parent;
+			if (aParent)
+			{
+				return putAncestorsInXPath(strWrapper, aParent);
+			}
+			else 
+			{
+				return strWrapper;
+			}
+		}
+		
+		// Function to download data to a file
+		function download(filename, text) {
+			var element = document.createElement('a');
+			element.setAttribute('href', 'data:text/plain;charset=utf-8,' + encodeURIComponent(text));
+			element.setAttribute('download', filename);
+
+			element.style.display = 'none';
+			document.body.appendChild(element);
+
+			element.click();
+
+			document.body.removeChild(element);
+		}
+		
+		//menu --> functions for right click options
+		var nodeMenu = [
+		{
+			title: 'Show node information',
+			onMouseDown: function(elm, d, i) {
+				showVariableTable(d);
+			},
+			onMouseUp: function(elm, d, i) {},
+			onMouseOver: function(elm, d, i) {},
+			childrenItems: []
+		},
+		{
+			title: 'Show usage of node in diagram',
+			onMouseDown: function(elm, d, i) {
+				d3.selectAll(".treeFrame").attr("fill-opacity", .5);
+				d3.selectAll(".nodeText").style("fill-opacity", 0.5);					
+				var theText="";
+				highlight(d,theText);
+			},
+			onMouseUp: function(elm, d, i) {				
+				d3.selectAll(".link").style("opacity",.6)
+				d3.selectAll(".treeFrame").attr("fill-opacity", .8);
+				d3.selectAll(".nodeText").style("fill-opacity", 1);					
+			},
+			onMouseOver: function(elm, d, i) {
+			},
+			childrenItems: []
+		},
+		{
+			title: 'Copy x-path to clipboard',
+			onMouseDown: function(elm, d, i) {
+				function copyToClipboard(text) 
+				{
+					window.prompt("Copy to clipboard: Ctrl+C, Enter", text);
+				}
+				function copyXPathToClipboard(data,aText)
+				{
+					aText = "/"+data.name+aText;
+					if (data.parent){copyXPathToClipboard(data.parent,aText)}
+					else{copyToClipboard(aText);}
+				}
+				var copyText="";
+				copyXPathToClipboard(d,copyText);
+				d3.select('.d3-context-menu').style('display', 'none');
+			},
+			onMouseUp: function(elm, d, i) {
+			},
+			onMouseOver: function(elm, d, i) {
+			},
+			childrenItems: []
+		},
+		{
+			title: 'Download full tree as XML-file',
+			onMouseDown: function(elm, d, i) {
+				//Begin xml structure with the first element
+				var xmlString = "<"+nodes[0].name+">"+"</"+nodes[0].name+">";
+				//Create a new xml document
+				var parser = new DOMParser();
+				var xmlDocument = parser.parseFromString(xmlString, "text/xml"); //important to use "text/xml"
+				//Get initial xPath of the tree and pass it to the function "writeTreeToXML"
+				var initialXPath = "/"+nodes[0].name;								
+				writeTreeToXML(nodes[0],xmlDocument,initialXPath);
+				//remove all attributes dummyID
+				removeAttributeInAllElements(xmlDocument,'dummyID');
+				//Make the xml document a string
+				var serializer = new XMLSerializer();
+				var xmlString = serializer.serializeToString(xmlDocument);
+				xmlString = vkbeautify.xml(xmlString);														
+				//Download a document with the xml-schema
+				download(theName+'_full.xml',xmlString);						
+			},
+			onMouseUp: function(elm, d, i) {
+			},
+			onMouseOver: function(elm, d, i) {
+			},
+			childrenItems: []
+		},
+		{
+			title: 'Download tree as XML-file from current node',
+			onMouseDown: function(elm, d, i) {
+				var xmlString = putAncestorsInXMLString({ val : '' }, d).val;
+				var initialXPath = putAncestorsInXPath({ val : '' }, d).val;												
+				//Create a new xml document
+				var parser = new DOMParser();
+				var xmlDocument = parser.parseFromString(xmlString, "text/xml"); //important to use "text/xml"
+				//Get initial xPath of the tree and pass it to the function "writeCurrentTreeToXML"
+				writeTreeToXML(d,xmlDocument,initialXPath);
+				//remove all attributes dummyID
+				removeAttributeInAllElements(xmlDocument,'dummyID');
+				//Make the xml document a string
+				var serializer = new XMLSerializer();
+				xmlString = serializer.serializeToString(xmlDocument);
+				xmlString = vkbeautify.xml(xmlString);														
+				//Download a document with the xml-schema
+				download(theName+"_"+d.name+'.xml',xmlString);						
+			},
+			onMouseUp: function(elm, d, i) {
+			},
+			onMouseOver: function(elm, d, i) {
+			},
+			childrenItems: []
+		}
+		]
+		
+		
+		nodeEnter = nodeEnter
+					.on('contextmenu', d3.contextMenu(nodeMenu));
+		
+		
+		// Remove any exiting nodes
+		var nodeExit = treeNode.exit().transition()
+		  .duration(duration)
+		  .attr("transform", function(d) {
+			  return "translate(" + source.y + "," + source.x + ")";
+		  })
+		  .remove();
+
+		// Update the links…
+		var link = svgGroup.selectAll("path.treeLink")
+			.data(links, function(d) {
+				return d.target.id;
+			});
+
+		// Enter any new links at the parent's previous position.
+		link.enter().insert("path", "g")
+			.attr("class", "treeLink")
+			.attr("d", function(d) {
+				var o = {
+					x: source.x0,
+					y: source.y0
+				};
+				return diagonal({
+					source: o,
+					target: o
+				});
+			});
+
+		// Transition links to their new position.
+		link.transition()
+			.duration(duration)
+			.attr("d", diagonal);
+
+		// Transition exiting nodes to the parent's new position.
+		link.exit().transition()
+			.duration(duration)
+			.attr("d", function(d) {
+				var o = {
+					x: source.x,
+					y: source.y
+				};
+				return diagonal({
+					source: o,
+					target: o
+				});
+			})
+			.remove();
+		
+		// Stash the old positions for transition.
+		nodes.forEach(function(d) {						
+			d.x0 = d.x;
+			d.y0 = d.y;
+		});
+	}
+}
+
+d3.json(jsonFile, function(error, graph) {
+	var theNodes = graph.nodes
+	var theLinks = graph.edges
+	theLinks.forEach(function (link) {
+	  link.source = link.from;
+	  link.target = link.to;
+	  link.value = link.name.split(",").length
+	});
+	
+	
+	//aigner: Tree option menu to select which kind of tree view the user wants to see
+	//#####################################################################//
+	function showFullTree(categoryName)
+	{
+		var theSchema;
+		$.ajax({
+		  dataType: "json",
+		  url: "json/"+categoryName+".json",
+		  async: false,
+		  success: function(data){theSchema = JSON.parse(JSON.stringify(data))}
+		});
+		var name_tmp = "Full tree view";
+		var emptyArray="";
+		var allLinks = d3.selectAll(".link");
+		createTreeLayout(name_tmp,theSchema,emptyArray,allLinks);
+	}
+	
+	var childrenItems = [];
+	for (var j=0; j< varCategories.length; j++)
+	{
+		childrenItems.push({title: 'according to ' + varCategories[j].description,
+					   identifier: varCategories[j].name+"_"+graphID,
+                       onMouseClick: function(elm, d, i) {showFullTree(d.identifier)},
+					   onMouseOver: function(elm,d,i){}})
+	}
+	var treeOptionMenu = [
+	{
+		title: 'Show variable tree...',
+		onMouseDown: function(elm, d, i) {
+		},
+		onMouseUp: function(elm, d, i) {
+		},
+		onMouseOver: function(elm, d, i) {
+		},
+		childrenItems: childrenItems
+	}
+	]
+	//#####################################################################//
+	
+	makeKadmosMenu(graphs,"Sankey Diagram",graphID);
+	
+	//aigner: treeLayout in the bottom
+	//################################################################################################//		
+	//aigner: tree layout is done	
+	var emptyArray;
+	var expandSymbolDiv = d3.select("body").append("div").attr("class","expandSymbolDiv");
+	var expandSymbolSvg = expandSymbolDiv.append("svg").attr("width",400).attr("height",100);
+	var expandSymbol = expandSymbolSvg.append("g")
+		.attr("class", "newExpandSymbol")
+		.attr("transform", "translate(38,12)");
+	var expandRect = expandSymbol.append("rect")
+		.attr("x",-28)
+		.attr("height", 50)
+		.attr("fill", "#666666")
+		.attr("stroke", "none")
+		.attr("stroke-width", 2)
+		.attr("fill-opacity", 1)
+	var expCircle = expandSymbol.append("circle")
+		.attr("cx", -10)
+		.attr("cy", 25);
+	var expLine1 = expandSymbol.append("line");
+	var expLine2 = expandSymbol.append("line");
+	drawExpandSymbol(expCircle,expLine1,expLine2);
+		expCircle = expCircle.attr("fill", "white");
+	expandSymbol.append("text")
+		.attr("transform", "translate(15,35)")
+		.attr("font-family","Arial")
+		.attr("font-size","24pt")
+		.attr("fill","white")
+		.text("Show full variable tree")
+	expandRect.attr("width", function(d) {return this.parentNode.getBBox().width+40})
+	expandSymbol
+		.on("mouseover", function(){
+			d3.select(this).style("cursor", "pointer")			
+			expCircle.style("fill", "green").style("fill-opacity", .8);
+			expandRect.style("fill", "#4677f8");
+			showRightClickOption();
+		})
+		.on("mouseout", function(){
+			expCircle.style("fill", "green").style("fill-opacity", .6);
+			expandRect.style("fill", "#666666");
+			hideRightClickOption();
+		})
+		.on('contextmenu', d3.contextMenu(treeOptionMenu))
+	//################################################################################################//
+	
+	d3.select(".expandSymbolDiv").moveToBack()
+	d3.select(".newDiv").moveToBack()
+	d3.select(".vispackDiv").moveToBack()
+	
+	biHiSankey
+	  .nodes(theNodes)
+	  .links(theLinks)
+	  .initializeNodes(function (node) {
+		node.state = node.parent ? "contained" : "collapsed";
+	  })
+	  .layout(LAYOUT_INTERATIONS);
+
+	disableUserInterractions(2 * TRANSITION_DURATION);
+	
+	update();
+});
+//#####################################################################//
+
+},{"d3":1}]},{},[2]);
\ No newline at end of file
diff --git a/kadmos/external/D3_vispack/KADMOS_VisualizationPackage_170530/supportFiles/xdsm.html b/kadmos/external/D3_vispack/KADMOS_VisualizationPackage_170530/supportFiles/xdsm.html
new file mode 100644
index 000000000..f1e098cee
--- /dev/null
+++ b/kadmos/external/D3_vispack/KADMOS_VisualizationPackage_170530/supportFiles/xdsm.html
@@ -0,0 +1,379 @@
+<!doctype html>
+<html class="js" lang="">
+<style>
+/*
+* XDSMjs
+* Copyright 2016 Rémi Lafage
+*/
+
+/* Component types */
+.xdsm .user {
+visibility: hidden;
+}
+
+.xdsm .coordinator {
+fill: #FFFFFF;
+stroke: black;
+stroke-width: 1px;
+}
+
+.xdsm .optimization {
+fill: #CCCCFF;
+stroke: black;
+stroke-width: 1px;
+}
+
+.xdsm .converger {
+fill: #FFE5CC;
+stroke: black;
+stroke-width: 1px;
+}
+
+.xdsm .doe {
+fill: #FFFCCC;
+stroke: black;
+stroke-width: 1px;
+}
+
+.xdsm .rcganalysis {
+fill: #E5DEB3;
+stroke: black;
+stroke-width: 1px;
+}
+
+.xdsm .precouplinganalysis {
+fill: #BCE4FA;
+stroke: black;
+stroke-width: 1px;
+}
+
+.xdsm .preiteratoranalysis {
+fill: #BCE4FA;
+stroke: black;
+stroke-width: 1px;
+}
+
+.xdsm .postiteratoranalysis {
+fill: #BCE4FA;
+stroke: black;
+stroke-width: 1px;
+}
+
+.xdsm .coupledanalysis {
+fill: #CCFFCC;
+stroke: black;
+stroke-width: 1px;
+}
+
+.xdsm .postcouplinganalysis {
+fill: #F2CCD9;
+stroke: black;
+stroke-width: 1px;
+}
+
+.xdsm .consistencyconstraintfunction {
+fill: #F2CCD9;
+stroke: black;
+stroke-width: 1px;
+}
+
+.xdsm .lp_optimization {
+fill: #CCCCFF;
+stroke: black;
+stroke-width: 1px;
+}
+
+.xdsm .analysis {
+fill: #CCFFCC;
+stroke: black;
+stroke-width: 1px;
+}
+
+.xdsm .mdo {
+fill: #FFCCCC;
+stroke: black;
+stroke-width: 1px;
+}
+
+.xdsm .function {
+fill: #F2CCD9;
+stroke: black;
+stroke-width: 1px;
+}
+
+.xdsm .mda {
+fill: #FFE5CC;
+stroke: black;
+stroke-width: 1px;
+}
+
+.xdsm .metamodel {
+fill: #FFFCCC;
+stroke: black;
+stroke-width: 1px;
+}
+
+/* Title */
+.xdsm g.title text {
+display: block;
+font-size: 2em;
+margin-top: 0.67em;
+margin-bottom: 0.67em;
+margin-left: 0;
+margin-right: 0;
+font-family:Arial;
+}
+.xdsm g.title rect {
+fill: none;
+}
+
+
+/* Text Default */
+.xdsm text {
+fill: black;
+stroke: none;
+font-size: 16pt;
+font-family:Arial;
+}
+.xdsm tspan.sub {
+font-size: small;
+font-family:Arial;
+}
+.xdsm tspan.sup {
+font-size: small;
+font-family:Arial;
+}
+
+/* Data */
+.xdsm .dataInter polygon {
+fill: #E5E5E5;
+stroke: black;
+stroke-width: 1px;
+}
+
+.xdsm .dataIO polygon {
+fill: #FFFFFF;
+stroke: black;
+stroke-width: 1px;
+}
+
+/* Dataflow */
+.xdsm g.dataflow {
+fill: none;
+stroke: grey;
+stroke-width: 8px;
+}
+
+/* Workflow */
+.xdsm g.workflow {
+fill: none;
+stroke: black;
+stroke-width: 2px;
+}
+
+/* Tooltip */
+div.tooltip {
+position: absolute;
+text-align: center;
+font-size: 16pt;
+padding: 10px;
+background: lightsteelblue;
+border: 0px;
+border-radius: 8px;
+pointer-events: none;
+}
+
+div.treeDiv {
+position: absolute;
+}
+
+div.contextDiv {
+position: absolute;
+}
+
+sub, sup {
+/* Specified in % so that the sup/sup is the right size relative to the surrounding text */
+font-size: 75%;
+/* Zero out the line-height so that it doesn't interfere with the positioning that follows */
+line-height: 0;
+/* Where the magic happens: makes all browsers position the sup/sup properly, relative to the surrounding text */
+position: relative;
+/* Note that if you're using Eric Meyer's reset.css, this is already set and you can remove this rule */
+vertical-align: baseline;
+}
+
+sup {
+/* Move the superscripted text up */
+top: -0.5em;
+}
+
+sub {
+/* Move the subscripted text down, but only half as far down as the superscript moved up */
+bottom: -0.5em;
+}
+
+/* Aigner: New styles for tree layout */
+.node {
+cursor: pointer;
+}
+
+.overlay{
+background-color:#FFF;
+}
+
+.node circle {
+fill: #fff;
+stroke: #3399FF;
+stroke-width: 1.5px;
+}
+
+.node text {
+font-size:16pt; 
+font-family:Arial;
+}
+
+.link {
+fill: none;
+stroke: #ccc;
+stroke-width: 1.5px;
+}
+
+.d3-context-menu {
+	position: absolute;
+	display: none;
+	background-color: #f2f2f2;
+	border-radius: 4px;
+	font-family: Arial;
+	font-size: 16pt;
+	width: 350px;
+	border: 1px solid #d4d4d4;
+	z-index:1200;
+}
+.d3-context-menu ul {
+	list-style-type: none;
+	margin: 4px 0px;
+	padding: 0px;
+	cursor: default;
+}
+.d3-context-menu ul li {
+	padding: 4px 16px;
+}
+.d3-context-menu ul li:hover {
+	background-color: #3399FF;
+}
+.d3-context-menu ul li > ul {
+    position: absolute; 
+    background-color: #f2f2f2; 
+    top: 0;
+	min-width: 350px;
+    left: 350px; 
+    z-index: -1; 
+} 
+
+.d3-context-menu ul li > ul li:hover 
+{ 
+    background-color: #3399FF;
+	color: #fefefe;
+}
+
+.ackn {
+fill: #666666;
+stroke: #666666;
+stroke-width: 2.0;
+}
+
+.acknGroup:hover .ackn{
+fill: #3399FF;
+stroke: #3399FF;
+}
+
+.newDiv {
+	position:relative;
+	top: -100px;
+	left: 220px;
+	background-color: none;
+}
+.newDiv a {
+    text-decoration: none;
+    color: white;
+    font-family: Arial;
+    font-size: 20pt;
+    padding-top: 12px;
+    padding-right: 12px;
+    padding-bottom: 12px;
+    padding-left: 6px;
+    display:inline-block;
+}
+.newDiv ul {
+  display:  inline-block;;
+  margin: 0;
+  padding: 0;
+  background-color: #666666;
+}
+.newDiv ul li {display: inline-block;}
+.newDiv ul li:hover {background: #888;}
+.newDiv ul li:hover ul {display: block;}
+.newDiv ul li ul {
+  position: absolute;
+  min-width: 200px;
+  display: none;
+}
+.newDiv ul li ul li { 
+  background: #555; 
+  display: block;
+}
+.newDiv ul li ul li a {
+	display:block !important
+} 
+.newDiv ul li ul li:hover {background: #3399FF;}
+
+table {
+	width: 800px;
+	table-layout:fixed;
+}
+
+table, th, td {
+	font-family: Arial;
+    font-size: 16pt;
+	background-color: white;
+    border: 2pt solid darkgrey;
+    border-collapse: collapse;
+	text-align: left;
+	word-wrap:break-word;
+}
+}
+th, td {
+    padding-top: 6px;
+    padding-right: 20px;
+    padding-bottom: 6px;
+    padding-left: 20px;
+	min-width: 100px;
+	max-width: 400px;
+}
+
+.remCircle {
+	stroke: black;
+	stroke-width: 2;
+	fill: red;
+	fill-opacity: .6
+}
+.remMinus {
+	stroke: black;
+	stroke-width: 2;
+}
+
+.acknText {
+font-family: Arial;
+font-size: 12pt;
+fill: #666666;
+}
+
+</style>
+    <head>
+		<meta charset="utf-8">
+		<title>KADMOS XDSM View</title>
+    </head>
+    <body>
+		<script src="xdsm.js"></script>
+    </body>
+</html>
diff --git a/kadmos/external/D3_vispack/KADMOS_VisualizationPackage_170530/supportFiles/xdsm.js b/kadmos/external/D3_vispack/KADMOS_VisualizationPackage_170530/supportFiles/xdsm.js
new file mode 100644
index 000000000..f577b9f47
--- /dev/null
+++ b/kadmos/external/D3_vispack/KADMOS_VisualizationPackage_170530/supportFiles/xdsm.js
@@ -0,0 +1,19906 @@
+(function() {
+/*! jQuery v3.2.0 | (c) JS Foundation and other contributors | jquery.org/license */
+!function(a,b){"use strict";"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){"use strict";var c=[],d=a.document,e=Object.getPrototypeOf,f=c.slice,g=c.concat,h=c.push,i=c.indexOf,j={},k=j.toString,l=j.hasOwnProperty,m=l.toString,n=m.call(Object),o={};function p(a,b){b=b||d;var c=b.createElement("script");c.text=a,b.head.appendChild(c).parentNode.removeChild(c)}var q="3.2.0",r=function(a,b){return new r.fn.init(a,b)},s=/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,t=/^-ms-/,u=/-([a-z])/g,v=function(a,b){return b.toUpperCase()};r.fn=r.prototype={jquery:q,constructor:r,length:0,toArray:function(){return f.call(this)},get:function(a){return null==a?f.call(this):a<0?this[a+this.length]:this[a]},pushStack:function(a){var b=r.merge(this.constructor(),a);return b.prevObject=this,b},each:function(a){return r.each(this,a)},map:function(a){return this.pushStack(r.map(this,function(b,c){return a.call(b,c,b)}))},slice:function(){return this.pushStack(f.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:h,sort:c.sort,splice:c.splice},r.extend=r.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||r.isFunction(g)||(g={}),h===i&&(g=this,h--);h<i;h++)if(null!=(a=arguments[h]))for(b in a)c=g[b],d=a[b],g!==d&&(j&&d&&(r.isPlainObject(d)||(e=Array.isArray(d)))?(e?(e=!1,f=c&&Array.isArray(c)?c:[]):f=c&&r.isPlainObject(c)?c:{},g[b]=r.extend(j,f,d)):void 0!==d&&(g[b]=d));return g},r.extend({expando:"jQuery"+(q+Math.random()).replace(/\D/g,""),isReady:!0,error:function(a){throw new Error(a)},noop:function(){},isFunction:function(a){return"function"===r.type(a)},isWindow:function(a){return null!=a&&a===a.window},isNumeric:function(a){var b=r.type(a);return("number"===b||"string"===b)&&!isNaN(a-parseFloat(a))},isPlainObject:function(a){var b,c;return!(!a||"[object Object]"!==k.call(a))&&(!(b=e(a))||(c=l.call(b,"constructor")&&b.constructor,"function"==typeof c&&m.call(c)===n))},isEmptyObject:function(a){var b;for(b in a)return!1;return!0},type:function(a){return null==a?a+"":"object"==typeof a||"function"==typeof a?j[k.call(a)]||"object":typeof a},globalEval:function(a){p(a)},camelCase:function(a){return a.replace(t,"ms-").replace(u,v)},each:function(a,b){var c,d=0;if(w(a)){for(c=a.length;d<c;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(s,"")},makeArray:function(a,b){var c=b||[];return null!=a&&(w(Object(a))?r.merge(c,"string"==typeof a?[a]:a):h.call(c,a)),c},inArray:function(a,b,c){return null==b?-1:i.call(b,a,c)},merge:function(a,b){for(var c=+b.length,d=0,e=a.length;d<c;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),d!==h&&e.push(a[f]);return e},map:function(a,b,c){var d,e,f=0,h=[];if(w(a))for(d=a.length;f<d;f++)e=b(a[f],f,c),null!=e&&h.push(e);else for(f in a)e=b(a[f],f,c),null!=e&&h.push(e);return g.apply([],h)},guid:1,proxy:function(a,b){var c,d,e;if("string"==typeof b&&(c=a[b],b=a,a=c),r.isFunction(a))return d=f.call(arguments,2),e=function(){return a.apply(b||this,d.concat(f.call(arguments)))},e.guid=a.guid=a.guid||r.guid++,e},now:Date.now,support:o}),"function"==typeof Symbol&&(r.fn[Symbol.iterator]=c[Symbol.iterator]),r.each("Boolean Number String Function Array Date RegExp Object Error Symbol".split(" "),function(a,b){j["[object "+b+"]"]=b.toLowerCase()});function w(a){var b=!!a&&"length"in a&&a.length,c=r.type(a);return"function"!==c&&!r.isWindow(a)&&("array"===c||0===b||"number"==typeof b&&b>0&&b-1 in a)}var x=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=ha(),z=ha(),A=ha(),B=function(a,b){return a===b&&(l=!0),0},C={}.hasOwnProperty,D=[],E=D.pop,F=D.push,G=D.push,H=D.slice,I=function(a,b){for(var c=0,d=a.length;c<d;c++)if(a[c]===b)return c;return-1},J="checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped",K="[\\x20\\t\\r\\n\\f]",L="(?:\\\\.|[\\w-]|[^\0-\\xa0])+",M="\\["+K+"*("+L+")(?:"+K+"*([*^$|!~]?=)"+K+"*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|("+L+"))|)"+K+"*\\]",N=":("+L+")(?:\\((('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|((?:\\\\.|[^\\\\()[\\]]|"+M+")*)|.*)\\)|)",O=new RegExp(K+"+","g"),P=new RegExp("^"+K+"+|((?:^|[^\\\\])(?:\\\\.)*)"+K+"+$","g"),Q=new RegExp("^"+K+"*,"+K+"*"),R=new RegExp("^"+K+"*([>+~]|"+K+")"+K+"*"),S=new RegExp("="+K+"*([^\\]'\"]*?)"+K+"*\\]","g"),T=new RegExp(N),U=new RegExp("^"+L+"$"),V={ID:new RegExp("^#("+L+")"),CLASS:new RegExp("^\\.("+L+")"),TAG:new RegExp("^("+L+"|[*])"),ATTR:new RegExp("^"+M),PSEUDO:new RegExp("^"+N),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+K+"*(even|odd|(([+-]|)(\\d*)n|)"+K+"*(?:([+-]|)"+K+"*(\\d+)|))"+K+"*\\)|)","i"),bool:new RegExp("^(?:"+J+")$","i"),needsContext:new RegExp("^"+K+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+K+"*((?:-\\d)?\\d*)"+K+"*\\)|)(?=[^-]|$)","i")},W=/^(?:input|select|textarea|button)$/i,X=/^h\d$/i,Y=/^[^{]+\{\s*\[native \w/,Z=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,$=/[+~]/,_=new RegExp("\\\\([\\da-f]{1,6}"+K+"?|("+K+")|.)","ig"),aa=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)},ba=/([\0-\x1f\x7f]|^-?\d)|^-$|[^\0-\x1f\x7f-\uFFFF\w-]/g,ca=function(a,b){return b?"\0"===a?"\ufffd":a.slice(0,-1)+"\\"+a.charCodeAt(a.length-1).toString(16)+" ":"\\"+a},da=function(){m()},ea=ta(function(a){return a.disabled===!0&&("form"in a||"label"in a)},{dir:"parentNode",next:"legend"});try{G.apply(D=H.call(v.childNodes),v.childNodes),D[v.childNodes.length].nodeType}catch(fa){G={apply:D.length?function(a,b){F.apply(a,H.call(b))}:function(a,b){var c=a.length,d=0;while(a[c++]=b[d++]);a.length=c-1}}}function ga(a,b,d,e){var f,h,j,k,l,o,r,s=b&&b.ownerDocument,w=b?b.nodeType:9;if(d=d||[],"string"!=typeof a||!a||1!==w&&9!==w&&11!==w)return d;if(!e&&((b?b.ownerDocument||b:v)!==n&&m(b),b=b||n,p)){if(11!==w&&(l=Z.exec(a)))if(f=l[1]){if(9===w){if(!(j=b.getElementById(f)))return d;if(j.id===f)return d.push(j),d}else if(s&&(j=s.getElementById(f))&&t(b,j)&&j.id===f)return d.push(j),d}else{if(l[2])return G.apply(d,b.getElementsByTagName(a)),d;if((f=l[3])&&c.getElementsByClassName&&b.getElementsByClassName)return G.apply(d,b.getElementsByClassName(f)),d}if(c.qsa&&!A[a+" "]&&(!q||!q.test(a))){if(1!==w)s=b,r=a;else if("object"!==b.nodeName.toLowerCase()){(k=b.getAttribute("id"))?k=k.replace(ba,ca):b.setAttribute("id",k=u),o=g(a),h=o.length;while(h--)o[h]="#"+k+" "+sa(o[h]);r=o.join(","),s=$.test(a)&&qa(b.parentNode)||b}if(r)try{return G.apply(d,s.querySelectorAll(r)),d}catch(x){}finally{k===u&&b.removeAttribute("id")}}}return i(a.replace(P,"$1"),b,d,e)}function ha(){var a=[];function b(c,e){return a.push(c+" ")>d.cacheLength&&delete b[a.shift()],b[c+" "]=e}return b}function ia(a){return a[u]=!0,a}function ja(a){var b=n.createElement("fieldset");try{return!!a(b)}catch(c){return!1}finally{b.parentNode&&b.parentNode.removeChild(b),b=null}}function ka(a,b){var c=a.split("|"),e=c.length;while(e--)d.attrHandle[c[e]]=b}function la(a,b){var c=b&&a,d=c&&1===a.nodeType&&1===b.nodeType&&a.sourceIndex-b.sourceIndex;if(d)return d;if(c)while(c=c.nextSibling)if(c===b)return-1;return a?1:-1}function ma(a){return function(b){var c=b.nodeName.toLowerCase();return"input"===c&&b.type===a}}function na(a){return function(b){var c=b.nodeName.toLowerCase();return("input"===c||"button"===c)&&b.type===a}}function oa(a){return function(b){return"form"in b?b.parentNode&&b.disabled===!1?"label"in b?"label"in b.parentNode?b.parentNode.disabled===a:b.disabled===a:b.isDisabled===a||b.isDisabled!==!a&&ea(b)===a:b.disabled===a:"label"in b&&b.disabled===a}}function pa(a){return ia(function(b){return b=+b,ia(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 qa(a){return a&&"undefined"!=typeof a.getElementsByTagName&&a}c=ga.support={},f=ga.isXML=function(a){var b=a&&(a.ownerDocument||a).documentElement;return!!b&&"HTML"!==b.nodeName},m=ga.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),v!==n&&(e=n.defaultView)&&e.top!==e&&(e.addEventListener?e.addEventListener("unload",da,!1):e.attachEvent&&e.attachEvent("onunload",da)),c.attributes=ja(function(a){return a.className="i",!a.getAttribute("className")}),c.getElementsByTagName=ja(function(a){return a.appendChild(n.createComment("")),!a.getElementsByTagName("*").length}),c.getElementsByClassName=Y.test(n.getElementsByClassName),c.getById=ja(function(a){return o.appendChild(a).id=u,!n.getElementsByName||!n.getElementsByName(u).length}),c.getById?(d.filter.ID=function(a){var b=a.replace(_,aa);return function(a){return a.getAttribute("id")===b}},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(_,aa);return function(a){var c="undefined"!=typeof a.getAttributeNode&&a.getAttributeNode("id");return c&&c.value===b}},d.find.ID=function(a,b){if("undefined"!=typeof b.getElementById&&p){var c,d,e,f=b.getElementById(a);if(f){if(c=f.getAttributeNode("id"),c&&c.value===a)return[f];e=b.getElementsByName(a),d=0;while(f=e[d++])if(c=f.getAttributeNode("id"),c&&c.value===a)return[f]}return[]}}),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){if("undefined"!=typeof b.getElementsByClassName&&p)return b.getElementsByClassName(a)},r=[],q=[],(c.qsa=Y.test(n.querySelectorAll))&&(ja(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("[*^$]="+K+"*(?:''|\"\")"),a.querySelectorAll("[selected]").length||q.push("\\["+K+"*(?:value|"+J+")"),a.querySelectorAll("[id~="+u+"-]").length||q.push("~="),a.querySelectorAll(":checked").length||q.push(":checked"),a.querySelectorAll("a#"+u+"+*").length||q.push(".#.+[+~]")}),ja(function(a){a.innerHTML="<a href='' disabled='disabled'></a><select disabled='disabled'><option/></select>";var b=n.createElement("input");b.setAttribute("type","hidden"),a.appendChild(b).setAttribute("name","D"),a.querySelectorAll("[name=d]").length&&q.push("name"+K+"*[*^$|!~]?="),2!==a.querySelectorAll(":enabled").length&&q.push(":enabled",":disabled"),o.appendChild(a).disabled=!0,2!==a.querySelectorAll(":disabled").length&&q.push(":enabled",":disabled"),a.querySelectorAll("*,:x"),q.push(",.*:")})),(c.matchesSelector=Y.test(s=o.matches||o.webkitMatchesSelector||o.mozMatchesSelector||o.oMatchesSelector||o.msMatchesSelector))&&ja(function(a){c.disconnectedMatch=s.call(a,"*"),s.call(a,"[s!='']:x"),r.push("!=",N)}),q=q.length&&new RegExp(q.join("|")),r=r.length&&new RegExp(r.join("|")),b=Y.test(o.compareDocumentPosition),t=b||Y.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?I(k,a)-I(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?I(k,a)-I(k,b):0;if(e===f)return la(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?la(g[d],h[d]):g[d]===v?-1:h[d]===v?1:0},n):n},ga.matches=function(a,b){return ga(a,null,null,b)},ga.matchesSelector=function(a,b){if((a.ownerDocument||a)!==n&&m(a),b=b.replace(S,"='$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 ga(b,n,null,[a]).length>0},ga.contains=function(a,b){return(a.ownerDocument||a)!==n&&m(a),t(a,b)},ga.attr=function(a,b){(a.ownerDocument||a)!==n&&m(a);var e=d.attrHandle[b.toLowerCase()],f=e&&C.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},ga.escape=function(a){return(a+"").replace(ba,ca)},ga.error=function(a){throw new Error("Syntax error, unrecognized expression: "+a)},ga.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=ga.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=ga.selectors={cacheLength:50,createPseudo:ia,match:V,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(_,aa),a[3]=(a[3]||a[4]||a[5]||"").replace(_,aa),"~="===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]||ga.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]&&ga.error(a[0]),a},PSEUDO:function(a){var b,c=!a[6]&&a[2];return V.CHILD.test(a[0])?null:(a[3]?a[2]=a[4]||a[5]||"":c&&T.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(_,aa).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("(^|"+K+")"+a+"("+K+"|$)"))&&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=ga.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(O," ")+" ").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),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()]||ga.error("unsupported pseudo: "+a);return e[u]?e(b):e.length>1?(c=[a,a,"",b],d.setFilters.hasOwnProperty(a.toLowerCase())?ia(function(a,c){var d,f=e(a,b),g=f.length;while(g--)d=I(a,f[g]),a[d]=!(c[d]=f[g])}):function(a){return e(a,0,c)}):e}},pseudos:{not:ia(function(a){var b=[],c=[],d=h(a.replace(P,"$1"));return d[u]?ia(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:ia(function(a){return function(b){return ga(a,b).length>0}}),contains:ia(function(a){return a=a.replace(_,aa),function(b){return(b.textContent||b.innerText||e(b)).indexOf(a)>-1}}),lang:ia(function(a){return U.test(a||"")||ga.error("unsupported lang: "+a),a=a.replace(_,aa).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:oa(!1),disabled:oa(!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 X.test(a.nodeName)},input:function(a){return W.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:pa(function(){return[0]}),last:pa(function(a,b){return[b-1]}),eq:pa(function(a,b,c){return[c<0?c+b:c]}),even:pa(function(a,b){for(var c=0;c<b;c+=2)a.push(c);return a}),odd:pa(function(a,b){for(var c=1;c<b;c+=2)a.push(c);return a}),lt:pa(function(a,b,c){for(var d=c<0?c+b:c;--d>=0;)a.push(d);return a}),gt:pa(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]=ma(b);for(b in{submit:!0,reset:!0})d.pseudos[b]=na(b);function ra(){}ra.prototype=d.filters=d.pseudos,d.setFilters=new ra,g=ga.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=Q.exec(h))||(e&&(h=h.slice(e[0].length)||h),i.push(f=[])),c=!1,(e=R.exec(h))&&(c=e.shift(),f.push({value:c,type:e[0].replace(P," ")}),h=h.slice(c.length));for(g in d.filter)!(e=V[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?ga.error(a):z(a,i).slice(0)};function sa(a){for(var b=0,c=a.length,d="";b<c;b++)d+=a[b].value;return d}function ta(a,b,c){var d=b.dir,e=b.next,f=e||d,g=c&&"parentNode"===f,h=x++;return b.first?function(b,c,e){while(b=b[d])if(1===b.nodeType||g)return a(b,c,e);return!1}:function(b,c,i){var j,k,l,m=[w,h];if(i){while(b=b[d])if((1===b.nodeType||g)&&a(b,c,i))return!0}else while(b=b[d])if(1===b.nodeType||g)if(l=b[u]||(b[u]={}),k=l[b.uniqueID]||(l[b.uniqueID]={}),e&&e===b.nodeName.toLowerCase())b=b[d]||b;else{if((j=k[f])&&j[0]===w&&j[1]===h)return m[2]=j[2];if(k[f]=m,m[2]=a(b,c,i))return!0}return!1}}function ua(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 va(a,b,c){for(var d=0,e=b.length;d<e;d++)ga(a,b[d],c);return c}function wa(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 xa(a,b,c,d,e,f){return d&&!d[u]&&(d=xa(d)),e&&!e[u]&&(e=xa(e,f)),ia(function(f,g,h,i){var j,k,l,m=[],n=[],o=g.length,p=f||va(b||"*",h.nodeType?[h]:h,[]),q=!a||!f&&b?p:wa(p,m,a,h,i),r=c?e||(f?a:o||d)?[]:g:q;if(c&&c(q,r,h,i),d){j=wa(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?I(f,l):m[k])>-1&&(f[j]=!(g[j]=l))}}else r=wa(r===g?r.splice(o,r.length):r),e?e(null,g,r,i):G.apply(g,r)})}function ya(a){for(var b,c,e,f=a.length,g=d.relative[a[0].type],h=g||d.relative[" "],i=g?1:0,k=ta(function(a){return a===b},h,!0),l=ta(function(a){return I(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=[ta(ua(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 xa(i>1&&ua(m),i>1&&sa(a.slice(0,i-1).concat({value:" "===a[i-2].type?"*":""})).replace(P,"$1"),c,i<e&&ya(a.slice(i,e)),e<f&&ya(a=a.slice(e)),e<f&&sa(a))}m.push(c)}return ua(m)}function za(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]=E.call(i));u=wa(u)}G.apply(i,u),k&&!f&&u.length>0&&r+b.length>1&&ga.uniqueSort(i)}return k&&(w=y,j=v),t};return c?ia(f):f}return h=ga.compile=function(a,b){var c,d=[],e=[],f=A[a+" "];if(!f){b||(b=g(a)),c=b.length;while(c--)f=ya(b[c]),f[u]?d.push(f):e.push(f);f=A(a,za(e,d)),f.selector=a}return f},i=ga.select=function(a,b,c,e){var f,i,j,k,l,m="function"==typeof a&&a,n=!e&&g(a=m.selector||a);if(c=c||[],1===n.length){if(i=n[0]=n[0].slice(0),i.length>2&&"ID"===(j=i[0]).type&&9===b.nodeType&&p&&d.relative[i[1].type]){if(b=(d.find.ID(j.matches[0].replace(_,aa),b)||[])[0],!b)return c;m&&(b=b.parentNode),a=a.slice(i.shift().value.length)}f=V.needsContext.test(a)?0:i.length;while(f--){if(j=i[f],d.relative[k=j.type])break;if((l=d.find[k])&&(e=l(j.matches[0].replace(_,aa),$.test(i[0].type)&&qa(b.parentNode)||b))){if(i.splice(f,1),a=e.length&&sa(i),!a)return G.apply(c,e),c;break}}}return(m||h(a,n))(e,b,!p,c,!b||$.test(a)&&qa(b.parentNode)||b),c},c.sortStable=u.split("").sort(B).join("")===u,c.detectDuplicates=!!l,m(),c.sortDetached=ja(function(a){return 1&a.compareDocumentPosition(n.createElement("fieldset"))}),ja(function(a){return a.innerHTML="<a href='#'></a>","#"===a.firstChild.getAttribute("href")})||ka("type|href|height|width",function(a,b,c){if(!c)return a.getAttribute(b,"type"===b.toLowerCase()?1:2)}),c.attributes&&ja(function(a){return a.innerHTML="<input/>",a.firstChild.setAttribute("value",""),""===a.firstChild.getAttribute("value")})||ka("value",function(a,b,c){if(!c&&"input"===a.nodeName.toLowerCase())return a.defaultValue}),ja(function(a){return null==a.getAttribute("disabled")})||ka(J,function(a,b,c){var d;if(!c)return a[b]===!0?b.toLowerCase():(d=a.getAttributeNode(b))&&d.specified?d.value:null}),ga}(a);r.find=x,r.expr=x.selectors,r.expr[":"]=r.expr.pseudos,r.uniqueSort=r.unique=x.uniqueSort,r.text=x.getText,r.isXMLDoc=x.isXML,r.contains=x.contains,r.escapeSelector=x.escape;var y=function(a,b,c){var d=[],e=void 0!==c;while((a=a[b])&&9!==a.nodeType)if(1===a.nodeType){if(e&&r(a).is(c))break;d.push(a)}return d},z=function(a,b){for(var c=[];a;a=a.nextSibling)1===a.nodeType&&a!==b&&c.push(a);return c},A=r.expr.match.needsContext;function B(a,b){return a.nodeName&&a.nodeName.toLowerCase()===b.toLowerCase()}var C=/^<([a-z][^\/\0>:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i,D=/^.[^:#\[\.,]*$/;function E(a,b,c){return r.isFunction(b)?r.grep(a,function(a,d){return!!b.call(a,d,a)!==c}):b.nodeType?r.grep(a,function(a){return a===b!==c}):"string"!=typeof b?r.grep(a,function(a){return i.call(b,a)>-1!==c}):D.test(b)?r.filter(b,a,c):(b=r.filter(b,a),r.grep(a,function(a){return i.call(b,a)>-1!==c&&1===a.nodeType}))}r.filter=function(a,b,c){var d=b[0];return c&&(a=":not("+a+")"),1===b.length&&1===d.nodeType?r.find.matchesSelector(d,a)?[d]:[]:r.find.matches(a,r.grep(b,function(a){return 1===a.nodeType}))},r.fn.extend({find:function(a){var b,c,d=this.length,e=this;if("string"!=typeof a)return this.pushStack(r(a).filter(function(){for(b=0;b<d;b++)if(r.contains(e[b],this))return!0}));for(c=this.pushStack([]),b=0;b<d;b++)r.find(a,e[b],c);return d>1?r.uniqueSort(c):c},filter:function(a){return this.pushStack(E(this,a||[],!1))},not:function(a){return this.pushStack(E(this,a||[],!0))},is:function(a){return!!E(this,"string"==typeof a&&A.test(a)?r(a):a||[],!1).length}});var F,G=/^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]+))$/,H=r.fn.init=function(a,b,c){var e,f;if(!a)return this;if(c=c||F,"string"==typeof a){if(e="<"===a[0]&&">"===a[a.length-1]&&a.length>=3?[null,a,null]:G.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 r?b[0]:b,r.merge(this,r.parseHTML(e[1],b&&b.nodeType?b.ownerDocument||b:d,!0)),C.test(e[1])&&r.isPlainObject(b))for(e in b)r.isFunction(this[e])?this[e](b[e]):this.attr(e,b[e]);return this}return f=d.getElementById(e[2]),f&&(this[0]=f,this.length=1),this}return a.nodeType?(this[0]=a,this.length=1,this):r.isFunction(a)?void 0!==c.ready?c.ready(a):a(r):r.makeArray(a,this)};H.prototype=r.fn,F=r(d);var I=/^(?:parents|prev(?:Until|All))/,J={children:!0,contents:!0,next:!0,prev:!0};r.fn.extend({has:function(a){var b=r(a,this),c=b.length;return this.filter(function(){for(var a=0;a<c;a++)if(r.contains(this,b[a]))return!0})},closest:function(a,b){var c,d=0,e=this.length,f=[],g="string"!=typeof a&&r(a);if(!A.test(a))for(;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&&r.find.matchesSelector(c,a))){f.push(c);break}return this.pushStack(f.length>1?r.uniqueSort(f):f)},index:function(a){return a?"string"==typeof a?i.call(r(a),this[0]):i.call(this,a.jquery?a[0]:a):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(a,b){return this.pushStack(r.uniqueSort(r.merge(this.get(),r(a,b))))},addBack:function(a){return this.add(null==a?this.prevObject:this.prevObject.filter(a))}});function K(a,b){while((a=a[b])&&1!==a.nodeType);return a}r.each({parent:function(a){var b=a.parentNode;return b&&11!==b.nodeType?b:null},parents:function(a){return y(a,"parentNode")},parentsUntil:function(a,b,c){return y(a,"parentNode",c)},next:function(a){return K(a,"nextSibling")},prev:function(a){return K(a,"previousSibling")},nextAll:function(a){return y(a,"nextSibling")},prevAll:function(a){return y(a,"previousSibling")},nextUntil:function(a,b,c){return y(a,"nextSibling",c)},prevUntil:function(a,b,c){return y(a,"previousSibling",c)},siblings:function(a){return z((a.parentNode||{}).firstChild,a)},children:function(a){return z(a.firstChild)},contents:function(a){return B(a,"iframe")?a.contentDocument:(B(a,"template")&&(a=a.content||a),r.merge([],a.childNodes))}},function(a,b){r.fn[a]=function(c,d){var e=r.map(this,b,c);return"Until"!==a.slice(-5)&&(d=c),d&&"string"==typeof d&&(e=r.filter(d,e)),this.length>1&&(J[a]||r.uniqueSort(e),I.test(a)&&e.reverse()),this.pushStack(e)}});var L=/[^\x20\t\r\n\f]+/g;function M(a){var b={};return r.each(a.match(L)||[],function(a,c){b[c]=!0}),b}r.Callbacks=function(a){a="string"==typeof a?M(a):r.extend({},a);var b,c,d,e,f=[],g=[],h=-1,i=function(){for(e=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){r.each(b,function(b,c){r.isFunction(c)?a.unique&&j.has(c)||f.push(c):c&&c.length&&"string"!==r.type(c)&&d(c)})}(arguments),c&&!b&&i()),this},remove:function(){return r.each(arguments,function(a,b){var c;while((c=r.inArray(b,f,c))>-1)f.splice(c,1),c<=h&&h--}),this},has:function(a){return a?r.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=g=[],c||b||(f=c=""),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};function N(a){return a}function O(a){throw a}function P(a,b,c,d){var e;try{a&&r.isFunction(e=a.promise)?e.call(a).done(b).fail(c):a&&r.isFunction(e=a.then)?e.call(a,b,c):b.apply(void 0,[a].slice(d))}catch(a){c.apply(void 0,[a])}}r.extend({Deferred:function(b){var c=[["notify","progress",r.Callbacks("memory"),r.Callbacks("memory"),2],["resolve","done",r.Callbacks("once memory"),r.Callbacks("once memory"),0,"resolved"],["reject","fail",r.Callbacks("once memory"),r.Callbacks("once memory"),1,"rejected"]],d="pending",e={state:function(){return d},always:function(){return f.done(arguments).fail(arguments),this},"catch":function(a){return e.then(null,a)},pipe:function(){var a=arguments;return r.Deferred(function(b){r.each(c,function(c,d){var e=r.isFunction(a[d[4]])&&a[d[4]];f[d[1]](function(){var a=e&&e.apply(this,arguments);a&&r.isFunction(a.promise)?a.promise().progress(b.notify).done(b.resolve).fail(b.reject):b[d[0]+"With"](this,e?[a]:arguments)})}),a=null}).promise()},then:function(b,d,e){var f=0;function g(b,c,d,e){return function(){var h=this,i=arguments,j=function(){var a,j;if(!(b<f)){if(a=d.apply(h,i),a===c.promise())throw new TypeError("Thenable self-resolution");j=a&&("object"==typeof a||"function"==typeof a)&&a.then,r.isFunction(j)?e?j.call(a,g(f,c,N,e),g(f,c,O,e)):(f++,j.call(a,g(f,c,N,e),g(f,c,O,e),g(f,c,N,c.notifyWith))):(d!==N&&(h=void 0,i=[a]),(e||c.resolveWith)(h,i))}},k=e?j:function(){try{j()}catch(a){r.Deferred.exceptionHook&&r.Deferred.exceptionHook(a,k.stackTrace),b+1>=f&&(d!==O&&(h=void 0,i=[a]),c.rejectWith(h,i))}};b?k():(r.Deferred.getStackHook&&(k.stackTrace=r.Deferred.getStackHook()),a.setTimeout(k))}}return r.Deferred(function(a){c[0][3].add(g(0,a,r.isFunction(e)?e:N,a.notifyWith)),c[1][3].add(g(0,a,r.isFunction(b)?b:N)),c[2][3].add(g(0,a,r.isFunction(d)?d:O))}).promise()},promise:function(a){return null!=a?r.extend(a,e):e}},f={};return r.each(c,function(a,b){var g=b[2],h=b[5];e[b[1]]=g.add,h&&g.add(function(){d=h},c[3-a][2].disable,c[0][2].lock),g.add(b[3].fire),f[b[0]]=function(){return f[b[0]+"With"](this===f?void 0:this,arguments),this},f[b[0]+"With"]=g.fireWith}),e.promise(f),b&&b.call(f,f),f},when:function(a){var b=arguments.length,c=b,d=Array(c),e=f.call(arguments),g=r.Deferred(),h=function(a){return function(c){d[a]=this,e[a]=arguments.length>1?f.call(arguments):c,--b||g.resolveWith(d,e)}};if(b<=1&&(P(a,g.done(h(c)).resolve,g.reject,!b),"pending"===g.state()||r.isFunction(e[c]&&e[c].then)))return g.then();while(c--)P(e[c],h(c),g.reject);return g.promise()}});var Q=/^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/;r.Deferred.exceptionHook=function(b,c){a.console&&a.console.warn&&b&&Q.test(b.name)&&a.console.warn("jQuery.Deferred exception: "+b.message,b.stack,c)},r.readyException=function(b){a.setTimeout(function(){throw b})};var R=r.Deferred();r.fn.ready=function(a){return R.then(a)["catch"](function(a){r.readyException(a)}),this},r.extend({isReady:!1,readyWait:1,ready:function(a){(a===!0?--r.readyWait:r.isReady)||(r.isReady=!0,a!==!0&&--r.readyWait>0||R.resolveWith(d,[r]))}}),r.ready.then=R.then;function S(){d.removeEventListener("DOMContentLoaded",S),
+a.removeEventListener("load",S),r.ready()}"complete"===d.readyState||"loading"!==d.readyState&&!d.documentElement.doScroll?a.setTimeout(r.ready):(d.addEventListener("DOMContentLoaded",S),a.addEventListener("load",S));var T=function(a,b,c,d,e,f,g){var h=0,i=a.length,j=null==c;if("object"===r.type(c)){e=!0;for(h in c)T(a,b,h,c[h],!0,f,g)}else if(void 0!==d&&(e=!0,r.isFunction(d)||(g=!0),j&&(g?(b.call(a,d),b=null):(j=b,b=function(a,b,c){return j.call(r(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},U=function(a){return 1===a.nodeType||9===a.nodeType||!+a.nodeType};function V(){this.expando=r.expando+V.uid++}V.uid=1,V.prototype={cache:function(a){var b=a[this.expando];return b||(b={},U(a)&&(a.nodeType?a[this.expando]=b:Object.defineProperty(a,this.expando,{value:b,configurable:!0}))),b},set:function(a,b,c){var d,e=this.cache(a);if("string"==typeof b)e[r.camelCase(b)]=c;else for(d in b)e[r.camelCase(d)]=b[d];return e},get:function(a,b){return void 0===b?this.cache(a):a[this.expando]&&a[this.expando][r.camelCase(b)]},access:function(a,b,c){return void 0===b||b&&"string"==typeof b&&void 0===c?this.get(a,b):(this.set(a,b,c),void 0!==c?c:b)},remove:function(a,b){var c,d=a[this.expando];if(void 0!==d){if(void 0!==b){Array.isArray(b)?b=b.map(r.camelCase):(b=r.camelCase(b),b=b in d?[b]:b.match(L)||[]),c=b.length;while(c--)delete d[b[c]]}(void 0===b||r.isEmptyObject(d))&&(a.nodeType?a[this.expando]=void 0:delete a[this.expando])}},hasData:function(a){var b=a[this.expando];return void 0!==b&&!r.isEmptyObject(b)}};var W=new V,X=new V,Y=/^(?:\{[\w\W]*\}|\[[\w\W]*\])$/,Z=/[A-Z]/g;function $(a){return"true"===a||"false"!==a&&("null"===a?null:a===+a+""?+a:Y.test(a)?JSON.parse(a):a)}function _(a,b,c){var d;if(void 0===c&&1===a.nodeType)if(d="data-"+b.replace(Z,"-$&").toLowerCase(),c=a.getAttribute(d),"string"==typeof c){try{c=$(c)}catch(e){}X.set(a,b,c)}else c=void 0;return c}r.extend({hasData:function(a){return X.hasData(a)||W.hasData(a)},data:function(a,b,c){return X.access(a,b,c)},removeData:function(a,b){X.remove(a,b)},_data:function(a,b,c){return W.access(a,b,c)},_removeData:function(a,b){W.remove(a,b)}}),r.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=X.get(f),1===f.nodeType&&!W.get(f,"hasDataAttrs"))){c=g.length;while(c--)g[c]&&(d=g[c].name,0===d.indexOf("data-")&&(d=r.camelCase(d.slice(5)),_(f,d,e[d])));W.set(f,"hasDataAttrs",!0)}return e}return"object"==typeof a?this.each(function(){X.set(this,a)}):T(this,function(b){var c;if(f&&void 0===b){if(c=X.get(f,a),void 0!==c)return c;if(c=_(f,a),void 0!==c)return c}else this.each(function(){X.set(this,a,b)})},null,b,arguments.length>1,null,!0)},removeData:function(a){return this.each(function(){X.remove(this,a)})}}),r.extend({queue:function(a,b,c){var d;if(a)return b=(b||"fx")+"queue",d=W.get(a,b),c&&(!d||Array.isArray(c)?d=W.access(a,b,r.makeArray(c)):d.push(c)),d||[]},dequeue:function(a,b){b=b||"fx";var c=r.queue(a,b),d=c.length,e=c.shift(),f=r._queueHooks(a,b),g=function(){r.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 W.get(a,c)||W.access(a,c,{empty:r.Callbacks("once memory").add(function(){W.remove(a,[b+"queue",c])})})}}),r.fn.extend({queue:function(a,b){var c=2;return"string"!=typeof a&&(b=a,a="fx",c--),arguments.length<c?r.queue(this[0],a):void 0===b?this:this.each(function(){var c=r.queue(this,a,b);r._queueHooks(this,a),"fx"===a&&"inprogress"!==c[0]&&r.dequeue(this,a)})},dequeue:function(a){return this.each(function(){r.dequeue(this,a)})},clearQueue:function(a){return this.queue(a||"fx",[])},promise:function(a,b){var c,d=1,e=r.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=W.get(f[g],a+"queueHooks"),c&&c.empty&&(d++,c.empty.add(h));return h(),e.promise(b)}});var aa=/[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/.source,ba=new RegExp("^(?:([+-])=|)("+aa+")([a-z%]*)$","i"),ca=["Top","Right","Bottom","Left"],da=function(a,b){return a=b||a,"none"===a.style.display||""===a.style.display&&r.contains(a.ownerDocument,a)&&"none"===r.css(a,"display")},ea=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};function fa(a,b,c,d){var e,f=1,g=20,h=d?function(){return d.cur()}:function(){return r.css(a,b,"")},i=h(),j=c&&c[3]||(r.cssNumber[b]?"":"px"),k=(r.cssNumber[b]||"px"!==j&&+i)&&ba.exec(r.css(a,b));if(k&&k[3]!==j){j=j||k[3],c=c||[],k=+i||1;do f=f||".5",k/=f,r.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 ga={};function ha(a){var b,c=a.ownerDocument,d=a.nodeName,e=ga[d];return e?e:(b=c.body.appendChild(c.createElement(d)),e=r.css(b,"display"),b.parentNode.removeChild(b),"none"===e&&(e="block"),ga[d]=e,e)}function ia(a,b){for(var c,d,e=[],f=0,g=a.length;f<g;f++)d=a[f],d.style&&(c=d.style.display,b?("none"===c&&(e[f]=W.get(d,"display")||null,e[f]||(d.style.display="")),""===d.style.display&&da(d)&&(e[f]=ha(d))):"none"!==c&&(e[f]="none",W.set(d,"display",c)));for(f=0;f<g;f++)null!=e[f]&&(a[f].style.display=e[f]);return a}r.fn.extend({show:function(){return ia(this,!0)},hide:function(){return ia(this)},toggle:function(a){return"boolean"==typeof a?a?this.show():this.hide():this.each(function(){da(this)?r(this).show():r(this).hide()})}});var ja=/^(?:checkbox|radio)$/i,ka=/<([a-z][^\/\0>\x20\t\r\n\f]+)/i,la=/^$|\/(?:java|ecma)script/i,ma={option:[1,"<select multiple='multiple'>","</select>"],thead:[1,"<table>","</table>"],col:[2,"<table><colgroup>","</colgroup></table>"],tr:[2,"<table><tbody>","</tbody></table>"],td:[3,"<table><tbody><tr>","</tr></tbody></table>"],_default:[0,"",""]};ma.optgroup=ma.option,ma.tbody=ma.tfoot=ma.colgroup=ma.caption=ma.thead,ma.th=ma.td;function na(a,b){var c;return c="undefined"!=typeof a.getElementsByTagName?a.getElementsByTagName(b||"*"):"undefined"!=typeof a.querySelectorAll?a.querySelectorAll(b||"*"):[],void 0===b||b&&B(a,b)?r.merge([a],c):c}function oa(a,b){for(var c=0,d=a.length;c<d;c++)W.set(a[c],"globalEval",!b||W.get(b[c],"globalEval"))}var pa=/<|&#?\w+;/;function qa(a,b,c,d,e){for(var f,g,h,i,j,k,l=b.createDocumentFragment(),m=[],n=0,o=a.length;n<o;n++)if(f=a[n],f||0===f)if("object"===r.type(f))r.merge(m,f.nodeType?[f]:f);else if(pa.test(f)){g=g||l.appendChild(b.createElement("div")),h=(ka.exec(f)||["",""])[1].toLowerCase(),i=ma[h]||ma._default,g.innerHTML=i[1]+r.htmlPrefilter(f)+i[2],k=i[0];while(k--)g=g.lastChild;r.merge(m,g.childNodes),g=l.firstChild,g.textContent=""}else m.push(b.createTextNode(f));l.textContent="",n=0;while(f=m[n++])if(d&&r.inArray(f,d)>-1)e&&e.push(f);else if(j=r.contains(f.ownerDocument,f),g=na(l.appendChild(f),"script"),j&&oa(g),c){k=0;while(f=g[k++])la.test(f.type||"")&&c.push(f)}return l}!function(){var a=d.createDocumentFragment(),b=a.appendChild(d.createElement("div")),c=d.createElement("input");c.setAttribute("type","radio"),c.setAttribute("checked","checked"),c.setAttribute("name","t"),b.appendChild(c),o.checkClone=b.cloneNode(!0).cloneNode(!0).lastChild.checked,b.innerHTML="<textarea>x</textarea>",o.noCloneChecked=!!b.cloneNode(!0).lastChild.defaultValue}();var ra=d.documentElement,sa=/^key/,ta=/^(?:mouse|pointer|contextmenu|drag|drop)|click/,ua=/^([^.]*)(?:\.(.+)|)/;function va(){return!0}function wa(){return!1}function xa(){try{return d.activeElement}catch(a){}}function ya(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)ya(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=wa;else if(!e)return a;return 1===f&&(g=e,e=function(a){return r().off(a),g.apply(this,arguments)},e.guid=g.guid||(g.guid=r.guid++)),a.each(function(){r.event.add(this,b,e,d,c)})}r.event={global:{},add:function(a,b,c,d,e){var f,g,h,i,j,k,l,m,n,o,p,q=W.get(a);if(q){c.handler&&(f=c,c=f.handler,e=f.selector),e&&r.find.matchesSelector(ra,e),c.guid||(c.guid=r.guid++),(i=q.events)||(i=q.events={}),(g=q.handle)||(g=q.handle=function(b){return"undefined"!=typeof r&&r.event.triggered!==b.type?r.event.dispatch.apply(a,arguments):void 0}),b=(b||"").match(L)||[""],j=b.length;while(j--)h=ua.exec(b[j])||[],n=p=h[1],o=(h[2]||"").split(".").sort(),n&&(l=r.event.special[n]||{},n=(e?l.delegateType:l.bindType)||n,l=r.event.special[n]||{},k=r.extend({type:n,origType:p,data:d,handler:c,guid:c.guid,selector:e,needsContext:e&&r.expr.match.needsContext.test(e),namespace:o.join(".")},f),(m=i[n])||(m=i[n]=[],m.delegateCount=0,l.setup&&l.setup.call(a,d,o,g)!==!1||a.addEventListener&&a.addEventListener(n,g)),l.add&&(l.add.call(a,k),k.handler.guid||(k.handler.guid=c.guid)),e?m.splice(m.delegateCount++,0,k):m.push(k),r.event.global[n]=!0)}},remove:function(a,b,c,d,e){var f,g,h,i,j,k,l,m,n,o,p,q=W.hasData(a)&&W.get(a);if(q&&(i=q.events)){b=(b||"").match(L)||[""],j=b.length;while(j--)if(h=ua.exec(b[j])||[],n=p=h[1],o=(h[2]||"").split(".").sort(),n){l=r.event.special[n]||{},n=(d?l.delegateType:l.bindType)||n,m=i[n]||[],h=h[2]&&new RegExp("(^|\\.)"+o.join("\\.(?:.*\\.|)")+"(\\.|$)"),g=f=m.length;while(f--)k=m[f],!e&&p!==k.origType||c&&c.guid!==k.guid||h&&!h.test(k.namespace)||d&&d!==k.selector&&("**"!==d||!k.selector)||(m.splice(f,1),k.selector&&m.delegateCount--,l.remove&&l.remove.call(a,k));g&&!m.length&&(l.teardown&&l.teardown.call(a,o,q.handle)!==!1||r.removeEvent(a,n,q.handle),delete i[n])}else for(n in i)r.event.remove(a,n+b[j],c,d,!0);r.isEmptyObject(i)&&W.remove(a,"handle events")}},dispatch:function(a){var b=r.event.fix(a),c,d,e,f,g,h,i=new Array(arguments.length),j=(W.get(this,"events")||{})[b.type]||[],k=r.event.special[b.type]||{};for(i[0]=b,c=1;c<arguments.length;c++)i[c]=arguments[c];if(b.delegateTarget=this,!k.preDispatch||k.preDispatch.call(this,b)!==!1){h=r.event.handlers.call(this,b,j),c=0;while((f=h[c++])&&!b.isPropagationStopped()){b.currentTarget=f.elem,d=0;while((g=f.handlers[d++])&&!b.isImmediatePropagationStopped())b.rnamespace&&!b.rnamespace.test(g.namespace)||(b.handleObj=g,b.data=g.data,e=((r.event.special[g.origType]||{}).handle||g.handler).apply(f.elem,i),void 0!==e&&(b.result=e)===!1&&(b.preventDefault(),b.stopPropagation()))}return k.postDispatch&&k.postDispatch.call(this,b),b.result}},handlers:function(a,b){var c,d,e,f,g,h=[],i=b.delegateCount,j=a.target;if(i&&j.nodeType&&!("click"===a.type&&a.button>=1))for(;j!==this;j=j.parentNode||this)if(1===j.nodeType&&("click"!==a.type||j.disabled!==!0)){for(f=[],g={},c=0;c<i;c++)d=b[c],e=d.selector+" ",void 0===g[e]&&(g[e]=d.needsContext?r(e,this).index(j)>-1:r.find(e,this,null,[j]).length),g[e]&&f.push(d);f.length&&h.push({elem:j,handlers:f})}return j=this,i<b.length&&h.push({elem:j,handlers:b.slice(i)}),h},addProp:function(a,b){Object.defineProperty(r.Event.prototype,a,{enumerable:!0,configurable:!0,get:r.isFunction(b)?function(){if(this.originalEvent)return b(this.originalEvent)}:function(){if(this.originalEvent)return this.originalEvent[a]},set:function(b){Object.defineProperty(this,a,{enumerable:!0,configurable:!0,writable:!0,value:b})}})},fix:function(a){return a[r.expando]?a:new r.Event(a)},special:{load:{noBubble:!0},focus:{trigger:function(){if(this!==xa()&&this.focus)return this.focus(),!1},delegateType:"focusin"},blur:{trigger:function(){if(this===xa()&&this.blur)return this.blur(),!1},delegateType:"focusout"},click:{trigger:function(){if(ja.test(this.type)&&this.click&&B(this,"input"))return this.click(),!1},_default:function(a){return B(a.target,"a")}},beforeunload:{postDispatch:function(a){void 0!==a.result&&a.originalEvent&&(a.originalEvent.returnValue=a.result)}}}},r.removeEvent=function(a,b,c){a.removeEventListener&&a.removeEventListener(b,c)},r.Event=function(a,b){return this instanceof r.Event?(a&&a.type?(this.originalEvent=a,this.type=a.type,this.isDefaultPrevented=a.defaultPrevented||void 0===a.defaultPrevented&&a.returnValue===!1?va:wa,this.target=a.target&&3===a.target.nodeType?a.target.parentNode:a.target,this.currentTarget=a.currentTarget,this.relatedTarget=a.relatedTarget):this.type=a,b&&r.extend(this,b),this.timeStamp=a&&a.timeStamp||r.now(),void(this[r.expando]=!0)):new r.Event(a,b)},r.Event.prototype={constructor:r.Event,isDefaultPrevented:wa,isPropagationStopped:wa,isImmediatePropagationStopped:wa,isSimulated:!1,preventDefault:function(){var a=this.originalEvent;this.isDefaultPrevented=va,a&&!this.isSimulated&&a.preventDefault()},stopPropagation:function(){var a=this.originalEvent;this.isPropagationStopped=va,a&&!this.isSimulated&&a.stopPropagation()},stopImmediatePropagation:function(){var a=this.originalEvent;this.isImmediatePropagationStopped=va,a&&!this.isSimulated&&a.stopImmediatePropagation(),this.stopPropagation()}},r.each({altKey:!0,bubbles:!0,cancelable:!0,changedTouches:!0,ctrlKey:!0,detail:!0,eventPhase:!0,metaKey:!0,pageX:!0,pageY:!0,shiftKey:!0,view:!0,"char":!0,charCode:!0,key:!0,keyCode:!0,button:!0,buttons:!0,clientX:!0,clientY:!0,offsetX:!0,offsetY:!0,pointerId:!0,pointerType:!0,screenX:!0,screenY:!0,targetTouches:!0,toElement:!0,touches:!0,which:function(a){var b=a.button;return null==a.which&&sa.test(a.type)?null!=a.charCode?a.charCode:a.keyCode:!a.which&&void 0!==b&&ta.test(a.type)?1&b?1:2&b?3:4&b?2:0:a.which}},r.event.addProp),r.each({mouseenter:"mouseover",mouseleave:"mouseout",pointerenter:"pointerover",pointerleave:"pointerout"},function(a,b){r.event.special[a]={delegateType:b,bindType:b,handle:function(a){var c,d=this,e=a.relatedTarget,f=a.handleObj;return e&&(e===d||r.contains(d,e))||(a.type=f.origType,c=f.handler.apply(this,arguments),a.type=b),c}}}),r.fn.extend({on:function(a,b,c,d){return ya(this,a,b,c,d)},one:function(a,b,c,d){return ya(this,a,b,c,d,1)},off:function(a,b,c){var d,e;if(a&&a.preventDefault&&a.handleObj)return d=a.handleObj,r(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=wa),this.each(function(){r.event.remove(this,a,c,b)})}});var za=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([a-z][^\/\0>\x20\t\r\n\f]*)[^>]*)\/>/gi,Aa=/<script|<style|<link/i,Ba=/checked\s*(?:[^=]|=\s*.checked.)/i,Ca=/^true\/(.*)/,Da=/^\s*<!(?:\[CDATA\[|--)|(?:\]\]|--)>\s*$/g;function Ea(a,b){return B(a,"table")&&B(11!==b.nodeType?b:b.firstChild,"tr")?r(">tbody",a)[0]||a:a}function Fa(a){return a.type=(null!==a.getAttribute("type"))+"/"+a.type,a}function Ga(a){var b=Ca.exec(a.type);return b?a.type=b[1]:a.removeAttribute("type"),a}function Ha(a,b){var c,d,e,f,g,h,i,j;if(1===b.nodeType){if(W.hasData(a)&&(f=W.access(a),g=W.set(b,f),j=f.events)){delete g.handle,g.events={};for(e in j)for(c=0,d=j[e].length;c<d;c++)r.event.add(b,e,j[e][c])}X.hasData(a)&&(h=X.access(a),i=r.extend({},h),X.set(b,i))}}function Ia(a,b){var c=b.nodeName.toLowerCase();"input"===c&&ja.test(a.type)?b.checked=a.checked:"input"!==c&&"textarea"!==c||(b.defaultValue=a.defaultValue)}function Ja(a,b,c,d){b=g.apply([],b);var e,f,h,i,j,k,l=0,m=a.length,n=m-1,q=b[0],s=r.isFunction(q);if(s||m>1&&"string"==typeof q&&!o.checkClone&&Ba.test(q))return a.each(function(e){var f=a.eq(e);s&&(b[0]=q.call(this,e,f.html())),Ja(f,b,c,d)});if(m&&(e=qa(b,a[0].ownerDocument,!1,a,d),f=e.firstChild,1===e.childNodes.length&&(e=f),f||d)){for(h=r.map(na(e,"script"),Fa),i=h.length;l<m;l++)j=e,l!==n&&(j=r.clone(j,!0,!0),i&&r.merge(h,na(j,"script"))),c.call(a[l],j,l);if(i)for(k=h[h.length-1].ownerDocument,r.map(h,Ga),l=0;l<i;l++)j=h[l],la.test(j.type||"")&&!W.access(j,"globalEval")&&r.contains(k,j)&&(j.src?r._evalUrl&&r._evalUrl(j.src):p(j.textContent.replace(Da,""),k))}return a}function Ka(a,b,c){for(var d,e=b?r.filter(b,a):a,f=0;null!=(d=e[f]);f++)c||1!==d.nodeType||r.cleanData(na(d)),d.parentNode&&(c&&r.contains(d.ownerDocument,d)&&oa(na(d,"script")),d.parentNode.removeChild(d));return a}r.extend({htmlPrefilter:function(a){return a.replace(za,"<$1></$2>")},clone:function(a,b,c){var d,e,f,g,h=a.cloneNode(!0),i=r.contains(a.ownerDocument,a);if(!(o.noCloneChecked||1!==a.nodeType&&11!==a.nodeType||r.isXMLDoc(a)))for(g=na(h),f=na(a),d=0,e=f.length;d<e;d++)Ia(f[d],g[d]);if(b)if(c)for(f=f||na(a),g=g||na(h),d=0,e=f.length;d<e;d++)Ha(f[d],g[d]);else Ha(a,h);return g=na(h,"script"),g.length>0&&oa(g,!i&&na(a,"script")),h},cleanData:function(a){for(var b,c,d,e=r.event.special,f=0;void 0!==(c=a[f]);f++)if(U(c)){if(b=c[W.expando]){if(b.events)for(d in b.events)e[d]?r.event.remove(c,d):r.removeEvent(c,d,b.handle);c[W.expando]=void 0}c[X.expando]&&(c[X.expando]=void 0)}}}),r.fn.extend({detach:function(a){return Ka(this,a,!0)},remove:function(a){return Ka(this,a)},text:function(a){return T(this,function(a){return void 0===a?r.text(this):this.empty().each(function(){1!==this.nodeType&&11!==this.nodeType&&9!==this.nodeType||(this.textContent=a)})},null,a,arguments.length)},append:function(){return Ja(this,arguments,function(a){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var b=Ea(this,a);b.appendChild(a)}})},prepend:function(){return Ja(this,arguments,function(a){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var b=Ea(this,a);b.insertBefore(a,b.firstChild)}})},before:function(){return Ja(this,arguments,function(a){this.parentNode&&this.parentNode.insertBefore(a,this)})},after:function(){return Ja(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&&(r.cleanData(na(a,!1)),a.textContent="");return this},clone:function(a,b){return a=null!=a&&a,b=null==b?a:b,this.map(function(){return r.clone(this,a,b)})},html:function(a){return T(this,function(a){var b=this[0]||{},c=0,d=this.length;if(void 0===a&&1===b.nodeType)return b.innerHTML;if("string"==typeof a&&!Aa.test(a)&&!ma[(ka.exec(a)||["",""])[1].toLowerCase()]){a=r.htmlPrefilter(a);try{for(;c<d;c++)b=this[c]||{},1===b.nodeType&&(r.cleanData(na(b,!1)),b.innerHTML=a);b=0}catch(e){}}b&&this.empty().append(a)},null,a,arguments.length)},replaceWith:function(){var a=[];return Ja(this,arguments,function(b){var c=this.parentNode;r.inArray(this,a)<0&&(r.cleanData(na(this)),c&&c.replaceChild(b,this))},a)}}),r.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(a,b){r.fn[a]=function(a){for(var c,d=[],e=r(a),f=e.length-1,g=0;g<=f;g++)c=g===f?this:this.clone(!0),r(e[g])[b](c),h.apply(d,c.get());return this.pushStack(d)}});var La=/^margin/,Ma=new RegExp("^("+aa+")(?!px)[a-z%]+$","i"),Na=function(b){var c=b.ownerDocument.defaultView;return c&&c.opener||(c=a),c.getComputedStyle(b)};!function(){function b(){if(i){i.style.cssText="box-sizing:border-box;position:relative;display:block;margin:auto;border:1px;padding:1px;top:1%;width:50%",i.innerHTML="",ra.appendChild(h);var b=a.getComputedStyle(i);c="1%"!==b.top,g="2px"===b.marginLeft,e="4px"===b.width,i.style.marginRight="50%",f="4px"===b.marginRight,ra.removeChild(h),i=null}}var c,e,f,g,h=d.createElement("div"),i=d.createElement("div");i.style&&(i.style.backgroundClip="content-box",i.cloneNode(!0).style.backgroundClip="",o.clearCloneStyle="content-box"===i.style.backgroundClip,h.style.cssText="border:0;width:8px;height:0;top:0;left:-9999px;padding:0;margin-top:1px;position:absolute",h.appendChild(i),r.extend(o,{pixelPosition:function(){return b(),c},boxSizingReliable:function(){return b(),e},pixelMarginRight:function(){return b(),f},reliableMarginLeft:function(){return b(),g}}))}();function Oa(a,b,c){var d,e,f,g,h=a.style;return c=c||Na(a),c&&(g=c.getPropertyValue(b)||c[b],""!==g||r.contains(a.ownerDocument,a)||(g=r.style(a,b)),!o.pixelMarginRight()&&Ma.test(g)&&La.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}function Pa(a,b){return{get:function(){return a()?void delete this.get:(this.get=b).apply(this,arguments)}}}var Qa=/^(none|table(?!-c[ea]).+)/,Ra=/^--/,Sa={position:"absolute",visibility:"hidden",display:"block"},Ta={letterSpacing:"0",fontWeight:"400"},Ua=["Webkit","Moz","ms"],Va=d.createElement("div").style;function Wa(a){if(a in Va)return a;var b=a[0].toUpperCase()+a.slice(1),c=Ua.length;while(c--)if(a=Ua[c]+b,a in Va)return a}function Xa(a){var b=r.cssProps[a];return b||(b=r.cssProps[a]=Wa(a)||a),b}function Ya(a,b,c){var d=ba.exec(b);return d?Math.max(0,d[2]-(c||0))+(d[3]||"px"):b}function Za(a,b,c,d,e){var f,g=0;for(f=c===(d?"border":"content")?4:"width"===b?1:0;f<4;f+=2)"margin"===c&&(g+=r.css(a,c+ca[f],!0,e)),d?("content"===c&&(g-=r.css(a,"padding"+ca[f],!0,e)),"margin"!==c&&(g-=r.css(a,"border"+ca[f]+"Width",!0,e))):(g+=r.css(a,"padding"+ca[f],!0,e),"padding"!==c&&(g+=r.css(a,"border"+ca[f]+"Width",!0,e)));return g}function $a(a,b,c){var d,e=Na(a),f=Oa(a,b,e),g="border-box"===r.css(a,"boxSizing",!1,e);return Ma.test(f)?f:(d=g&&(o.boxSizingReliable()||f===a.style[b]),f=parseFloat(f)||0,f+Za(a,b,c||(g?"border":"content"),d,e)+"px")}r.extend({cssHooks:{opacity:{get:function(a,b){if(b){var c=Oa(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":"cssFloat"},style:function(a,b,c,d){if(a&&3!==a.nodeType&&8!==a.nodeType&&a.style){var e,f,g,h=r.camelCase(b),i=Ra.test(b),j=a.style;return i||(b=Xa(h)),g=r.cssHooks[b]||r.cssHooks[h],void 0===c?g&&"get"in g&&void 0!==(e=g.get(a,!1,d))?e:j[b]:(f=typeof c,"string"===f&&(e=ba.exec(c))&&e[1]&&(c=fa(a,b,e),f="number"),null!=c&&c===c&&("number"===f&&(c+=e&&e[3]||(r.cssNumber[h]?"":"px")),o.clearCloneStyle||""!==c||0!==b.indexOf("background")||(j[b]="inherit"),g&&"set"in g&&void 0===(c=g.set(a,c,d))||(i?j.setProperty(b,c):j[b]=c)),void 0)}},css:function(a,b,c,d){var e,f,g,h=r.camelCase(b),i=Ra.test(b);return i||(b=Xa(h)),g=r.cssHooks[b]||r.cssHooks[h],g&&"get"in g&&(e=g.get(a,!0,c)),void 0===e&&(e=Oa(a,b,d)),"normal"===e&&b in Ta&&(e=Ta[b]),""===c||c?(f=parseFloat(e),c===!0||isFinite(f)?f||0:e):e}}),r.each(["height","width"],function(a,b){r.cssHooks[b]={get:function(a,c,d){if(c)return!Qa.test(r.css(a,"display"))||a.getClientRects().length&&a.getBoundingClientRect().width?$a(a,b,d):ea(a,Sa,function(){return $a(a,b,d)})},set:function(a,c,d){var e,f=d&&Na(a),g=d&&Za(a,b,d,"border-box"===r.css(a,"boxSizing",!1,f),f);return g&&(e=ba.exec(c))&&"px"!==(e[3]||"px")&&(a.style[b]=c,c=r.css(a,b)),Ya(a,c,g)}}}),r.cssHooks.marginLeft=Pa(o.reliableMarginLeft,function(a,b){if(b)return(parseFloat(Oa(a,"marginLeft"))||a.getBoundingClientRect().left-ea(a,{marginLeft:0},function(){return a.getBoundingClientRect().left}))+"px"}),r.each({margin:"",padding:"",border:"Width"},function(a,b){r.cssHooks[a+b]={expand:function(c){for(var d=0,e={},f="string"==typeof c?c.split(" "):[c];d<4;d++)e[a+ca[d]+b]=f[d]||f[d-2]||f[0];return e}},La.test(a)||(r.cssHooks[a+b].set=Ya)}),r.fn.extend({css:function(a,b){return T(this,function(a,b,c){var d,e,f={},g=0;if(Array.isArray(b)){for(d=Na(a),e=b.length;g<e;g++)f[b[g]]=r.css(a,b[g],!1,d);return f}return void 0!==c?r.style(a,b,c):r.css(a,b)},a,b,arguments.length>1)}});function _a(a,b,c,d,e){return new _a.prototype.init(a,b,c,d,e)}r.Tween=_a,_a.prototype={constructor:_a,init:function(a,b,c,d,e,f){this.elem=a,this.prop=c,this.easing=e||r.easing._default,this.options=b,this.start=this.now=this.cur(),this.end=d,this.unit=f||(r.cssNumber[c]?"":"px")},cur:function(){var a=_a.propHooks[this.prop];return a&&a.get?a.get(this):_a.propHooks._default.get(this)},run:function(a){var b,c=_a.propHooks[this.prop];return this.options.duration?this.pos=b=r.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):_a.propHooks._default.set(this),this}},_a.prototype.init.prototype=_a.prototype,_a.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=r.css(a.elem,a.prop,""),b&&"auto"!==b?b:0)},set:function(a){r.fx.step[a.prop]?r.fx.step[a.prop](a):1!==a.elem.nodeType||null==a.elem.style[r.cssProps[a.prop]]&&!r.cssHooks[a.prop]?a.elem[a.prop]=a.now:r.style(a.elem,a.prop,a.now+a.unit)}}},_a.propHooks.scrollTop=_a.propHooks.scrollLeft={set:function(a){a.elem.nodeType&&a.elem.parentNode&&(a.elem[a.prop]=a.now)}},r.easing={linear:function(a){return a},swing:function(a){return.5-Math.cos(a*Math.PI)/2},_default:"swing"},r.fx=_a.prototype.init,r.fx.step={};var ab,bb,cb=/^(?:toggle|show|hide)$/,db=/queueHooks$/;function eb(){bb&&(d.hidden===!1&&a.requestAnimationFrame?a.requestAnimationFrame(eb):a.setTimeout(eb,r.fx.interval),r.fx.tick())}function fb(){return a.setTimeout(function(){ab=void 0}),ab=r.now()}function gb(a,b){var c,d=0,e={height:a};for(b=b?1:0;d<4;d+=2-b)c=ca[d],e["margin"+c]=e["padding"+c]=a;return b&&(e.opacity=e.width=a),e}function hb(a,b,c){for(var d,e=(kb.tweeners[b]||[]).concat(kb.tweeners["*"]),f=0,g=e.length;f<g;f++)if(d=e[f].call(c,b,a))return d}function ib(a,b,c){var d,e,f,g,h,i,j,k,l="width"in b||"height"in b,m=this,n={},o=a.style,p=a.nodeType&&da(a),q=W.get(a,"fxshow");c.queue||(g=r._queueHooks(a,"fx"),null==g.unqueued&&(g.unqueued=0,h=g.empty.fire,g.empty.fire=function(){g.unqueued||h()}),g.unqueued++,m.always(function(){m.always(function(){g.unqueued--,r.queue(a,"fx").length||g.empty.fire()})}));for(d in b)if(e=b[d],cb.test(e)){if(delete b[d],f=f||"toggle"===e,e===(p?"hide":"show")){if("show"!==e||!q||void 0===q[d])continue;p=!0}n[d]=q&&q[d]||r.style(a,d)}if(i=!r.isEmptyObject(b),i||!r.isEmptyObject(n)){l&&1===a.nodeType&&(c.overflow=[o.overflow,o.overflowX,o.overflowY],j=q&&q.display,null==j&&(j=W.get(a,"display")),k=r.css(a,"display"),"none"===k&&(j?k=j:(ia([a],!0),j=a.style.display||j,k=r.css(a,"display"),ia([a]))),("inline"===k||"inline-block"===k&&null!=j)&&"none"===r.css(a,"float")&&(i||(m.done(function(){o.display=j}),null==j&&(k=o.display,j="none"===k?"":k)),o.display="inline-block")),c.overflow&&(o.overflow="hidden",m.always(function(){o.overflow=c.overflow[0],o.overflowX=c.overflow[1],o.overflowY=c.overflow[2]})),i=!1;for(d in n)i||(q?"hidden"in q&&(p=q.hidden):q=W.access(a,"fxshow",{display:j}),f&&(q.hidden=!p),p&&ia([a],!0),m.done(function(){p||ia([a]),W.remove(a,"fxshow");for(d in n)r.style(a,d,n[d])})),i=hb(p?q[d]:0,d,m),d in q||(q[d]=i.start,p&&(i.end=i.start,i.start=0))}}function jb(a,b){var c,d,e,f,g;for(c in a)if(d=r.camelCase(c),e=b[d],f=a[c],Array.isArray(f)&&(e=f[1],f=a[c]=f[0]),c!==d&&(a[d]=f,delete a[c]),g=r.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 kb(a,b,c){var d,e,f=0,g=kb.prefilters.length,h=r.Deferred().always(function(){delete i.elem}),i=function(){if(e)return!1;for(var b=ab||fb(),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:(i||h.notifyWith(a,[j,1,0]),h.resolveWith(a,[j]),!1)},j=h.promise({elem:a,props:r.extend({},b),opts:r.extend(!0,{specialEasing:{},easing:r.easing._default},c),originalProperties:b,originalOptions:c,startTime:ab||fb(),duration:c.duration,tweens:[],createTween:function(b,c){var d=r.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(jb(k,j.opts.specialEasing);f<g;f++)if(d=kb.prefilters[f].call(j,a,k,j.opts))return r.isFunction(d.stop)&&(r._queueHooks(j.elem,j.opts.queue).stop=r.proxy(d.stop,d)),d;return r.map(k,hb,j),r.isFunction(j.opts.start)&&j.opts.start.call(a,j),j.progress(j.opts.progress).done(j.opts.done,j.opts.complete).fail(j.opts.fail).always(j.opts.always),r.fx.timer(r.extend(i,{elem:a,anim:j,queue:j.opts.queue})),j}r.Animation=r.extend(kb,{tweeners:{"*":[function(a,b){var c=this.createTween(a,b);return fa(c.elem,a,ba.exec(b),c),c}]},tweener:function(a,b){r.isFunction(a)?(b=a,a=["*"]):a=a.match(L);for(var c,d=0,e=a.length;d<e;d++)c=a[d],kb.tweeners[c]=kb.tweeners[c]||[],kb.tweeners[c].unshift(b)},prefilters:[ib],prefilter:function(a,b){b?kb.prefilters.unshift(a):kb.prefilters.push(a)}}),r.speed=function(a,b,c){var d=a&&"object"==typeof a?r.extend({},a):{complete:c||!c&&b||r.isFunction(a)&&a,duration:a,easing:c&&b||b&&!r.isFunction(b)&&b};return r.fx.off?d.duration=0:"number"!=typeof d.duration&&(d.duration in r.fx.speeds?d.duration=r.fx.speeds[d.duration]:d.duration=r.fx.speeds._default),null!=d.queue&&d.queue!==!0||(d.queue="fx"),d.old=d.complete,d.complete=function(){r.isFunction(d.old)&&d.old.call(this),d.queue&&r.dequeue(this,d.queue)},d},r.fn.extend({fadeTo:function(a,b,c,d){return this.filter(da).css("opacity",0).show().end().animate({opacity:b},a,c,d)},animate:function(a,b,c,d){var e=r.isEmptyObject(a),f=r.speed(b,c,d),g=function(){var b=kb(this,r.extend({},a),f);(e||W.get(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=r.timers,g=W.get(this);if(e)g[e]&&g[e].stop&&d(g[e]);else for(e in g)g[e]&&g[e].stop&&db.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||r.dequeue(this,a)})},finish:function(a){return a!==!1&&(a=a||"fx"),this.each(function(){var b,c=W.get(this),d=c[a+"queue"],e=c[a+"queueHooks"],f=r.timers,g=d?d.length:0;for(c.finish=!0,r.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})}}),r.each(["toggle","show","hide"],function(a,b){var c=r.fn[b];r.fn[b]=function(a,d,e){return null==a||"boolean"==typeof a?c.apply(this,arguments):this.animate(gb(b,!0),a,d,e)}}),r.each({slideDown:gb("show"),slideUp:gb("hide"),slideToggle:gb("toggle"),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"},fadeToggle:{opacity:"toggle"}},function(a,b){r.fn[a]=function(a,c,d){return this.animate(b,a,c,d)}}),r.timers=[],r.fx.tick=function(){var a,b=0,c=r.timers;for(ab=r.now();b<c.length;b++)a=c[b],a()||c[b]!==a||c.splice(b--,1);c.length||r.fx.stop(),ab=void 0},r.fx.timer=function(a){r.timers.push(a),r.fx.start()},r.fx.interval=13,r.fx.start=function(){bb||(bb=!0,eb())},r.fx.stop=function(){bb=null},r.fx.speeds={slow:600,fast:200,_default:400},r.fn.delay=function(b,c){return b=r.fx?r.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=d.createElement("input"),b=d.createElement("select"),c=b.appendChild(d.createElement("option"));a.type="checkbox",o.checkOn=""!==a.value,o.optSelected=c.selected,a=d.createElement("input"),a.value="t",a.type="radio",o.radioValue="t"===a.value}();var lb,mb=r.expr.attrHandle;r.fn.extend({attr:function(a,b){return T(this,r.attr,a,b,arguments.length>1)},removeAttr:function(a){return this.each(function(){r.removeAttr(this,a)})}}),r.extend({attr:function(a,b,c){var d,e,f=a.nodeType;if(3!==f&&8!==f&&2!==f)return"undefined"==typeof a.getAttribute?r.prop(a,b,c):(1===f&&r.isXMLDoc(a)||(e=r.attrHooks[b.toLowerCase()]||(r.expr.match.bool.test(b)?lb:void 0)),void 0!==c?null===c?void r.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=r.find.attr(a,b),null==d?void 0:d));
+},attrHooks:{type:{set:function(a,b){if(!o.radioValue&&"radio"===b&&B(a,"input")){var c=a.value;return a.setAttribute("type",b),c&&(a.value=c),b}}}},removeAttr:function(a,b){var c,d=0,e=b&&b.match(L);if(e&&1===a.nodeType)while(c=e[d++])a.removeAttribute(c)}}),lb={set:function(a,b,c){return b===!1?r.removeAttr(a,c):a.setAttribute(c,c),c}},r.each(r.expr.match.bool.source.match(/\w+/g),function(a,b){var c=mb[b]||r.find.attr;mb[b]=function(a,b,d){var e,f,g=b.toLowerCase();return d||(f=mb[g],mb[g]=e,e=null!=c(a,b,d)?g:null,mb[g]=f),e}});var nb=/^(?:input|select|textarea|button)$/i,ob=/^(?:a|area)$/i;r.fn.extend({prop:function(a,b){return T(this,r.prop,a,b,arguments.length>1)},removeProp:function(a){return this.each(function(){delete this[r.propFix[a]||a]})}}),r.extend({prop:function(a,b,c){var d,e,f=a.nodeType;if(3!==f&&8!==f&&2!==f)return 1===f&&r.isXMLDoc(a)||(b=r.propFix[b]||b,e=r.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=r.find.attr(a,"tabindex");return b?parseInt(b,10):nb.test(a.nodeName)||ob.test(a.nodeName)&&a.href?0:-1}}},propFix:{"for":"htmlFor","class":"className"}}),o.optSelected||(r.propHooks.selected={get:function(a){var b=a.parentNode;return b&&b.parentNode&&b.parentNode.selectedIndex,null},set:function(a){var b=a.parentNode;b&&(b.selectedIndex,b.parentNode&&b.parentNode.selectedIndex)}}),r.each(["tabIndex","readOnly","maxLength","cellSpacing","cellPadding","rowSpan","colSpan","useMap","frameBorder","contentEditable"],function(){r.propFix[this.toLowerCase()]=this});function pb(a){var b=a.match(L)||[];return b.join(" ")}function qb(a){return a.getAttribute&&a.getAttribute("class")||""}r.fn.extend({addClass:function(a){var b,c,d,e,f,g,h,i=0;if(r.isFunction(a))return this.each(function(b){r(this).addClass(a.call(this,b,qb(this)))});if("string"==typeof a&&a){b=a.match(L)||[];while(c=this[i++])if(e=qb(c),d=1===c.nodeType&&" "+pb(e)+" "){g=0;while(f=b[g++])d.indexOf(" "+f+" ")<0&&(d+=f+" ");h=pb(d),e!==h&&c.setAttribute("class",h)}}return this},removeClass:function(a){var b,c,d,e,f,g,h,i=0;if(r.isFunction(a))return this.each(function(b){r(this).removeClass(a.call(this,b,qb(this)))});if(!arguments.length)return this.attr("class","");if("string"==typeof a&&a){b=a.match(L)||[];while(c=this[i++])if(e=qb(c),d=1===c.nodeType&&" "+pb(e)+" "){g=0;while(f=b[g++])while(d.indexOf(" "+f+" ")>-1)d=d.replace(" "+f+" "," ");h=pb(d),e!==h&&c.setAttribute("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):r.isFunction(a)?this.each(function(c){r(this).toggleClass(a.call(this,c,qb(this),b),b)}):this.each(function(){var b,d,e,f;if("string"===c){d=0,e=r(this),f=a.match(L)||[];while(b=f[d++])e.hasClass(b)?e.removeClass(b):e.addClass(b)}else void 0!==a&&"boolean"!==c||(b=qb(this),b&&W.set(this,"__className__",b),this.setAttribute&&this.setAttribute("class",b||a===!1?"":W.get(this,"__className__")||""))})},hasClass:function(a){var b,c,d=0;b=" "+a+" ";while(c=this[d++])if(1===c.nodeType&&(" "+pb(qb(c))+" ").indexOf(b)>-1)return!0;return!1}});var rb=/\r/g;r.fn.extend({val:function(a){var b,c,d,e=this[0];{if(arguments.length)return d=r.isFunction(a),this.each(function(c){var e;1===this.nodeType&&(e=d?a.call(this,c,r(this).val()):a,null==e?e="":"number"==typeof e?e+="":Array.isArray(e)&&(e=r.map(e,function(a){return null==a?"":a+""})),b=r.valHooks[this.type]||r.valHooks[this.nodeName.toLowerCase()],b&&"set"in b&&void 0!==b.set(this,e,"value")||(this.value=e))});if(e)return b=r.valHooks[e.type]||r.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)}}}),r.extend({valHooks:{option:{get:function(a){var b=r.find.attr(a,"value");return null!=b?b:pb(r.text(a))}},select:{get:function(a){var b,c,d,e=a.options,f=a.selectedIndex,g="select-one"===a.type,h=g?null:[],i=g?f+1:e.length;for(d=f<0?i:g?f:0;d<i;d++)if(c=e[d],(c.selected||d===f)&&!c.disabled&&(!c.parentNode.disabled||!B(c.parentNode,"optgroup"))){if(b=r(c).val(),g)return b;h.push(b)}return h},set:function(a,b){var c,d,e=a.options,f=r.makeArray(b),g=e.length;while(g--)d=e[g],(d.selected=r.inArray(r.valHooks.option.get(d),f)>-1)&&(c=!0);return c||(a.selectedIndex=-1),f}}}}),r.each(["radio","checkbox"],function(){r.valHooks[this]={set:function(a,b){if(Array.isArray(b))return a.checked=r.inArray(r(a).val(),b)>-1}},o.checkOn||(r.valHooks[this].get=function(a){return null===a.getAttribute("value")?"on":a.value})});var sb=/^(?:focusinfocus|focusoutblur)$/;r.extend(r.event,{trigger:function(b,c,e,f){var g,h,i,j,k,m,n,o=[e||d],p=l.call(b,"type")?b.type:b,q=l.call(b,"namespace")?b.namespace.split("."):[];if(h=i=e=e||d,3!==e.nodeType&&8!==e.nodeType&&!sb.test(p+r.event.triggered)&&(p.indexOf(".")>-1&&(q=p.split("."),p=q.shift(),q.sort()),k=p.indexOf(":")<0&&"on"+p,b=b[r.expando]?b:new r.Event(p,"object"==typeof b&&b),b.isTrigger=f?2:3,b.namespace=q.join("."),b.rnamespace=b.namespace?new RegExp("(^|\\.)"+q.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,b.result=void 0,b.target||(b.target=e),c=null==c?[b]:r.makeArray(c,[b]),n=r.event.special[p]||{},f||!n.trigger||n.trigger.apply(e,c)!==!1)){if(!f&&!n.noBubble&&!r.isWindow(e)){for(j=n.delegateType||p,sb.test(j+p)||(h=h.parentNode);h;h=h.parentNode)o.push(h),i=h;i===(e.ownerDocument||d)&&o.push(i.defaultView||i.parentWindow||a)}g=0;while((h=o[g++])&&!b.isPropagationStopped())b.type=g>1?j:n.bindType||p,m=(W.get(h,"events")||{})[b.type]&&W.get(h,"handle"),m&&m.apply(h,c),m=k&&h[k],m&&m.apply&&U(h)&&(b.result=m.apply(h,c),b.result===!1&&b.preventDefault());return b.type=p,f||b.isDefaultPrevented()||n._default&&n._default.apply(o.pop(),c)!==!1||!U(e)||k&&r.isFunction(e[p])&&!r.isWindow(e)&&(i=e[k],i&&(e[k]=null),r.event.triggered=p,e[p](),r.event.triggered=void 0,i&&(e[k]=i)),b.result}},simulate:function(a,b,c){var d=r.extend(new r.Event,c,{type:a,isSimulated:!0});r.event.trigger(d,null,b)}}),r.fn.extend({trigger:function(a,b){return this.each(function(){r.event.trigger(a,b,this)})},triggerHandler:function(a,b){var c=this[0];if(c)return r.event.trigger(a,b,c,!0)}}),r.each("blur focus focusin focusout resize scroll click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup contextmenu".split(" "),function(a,b){r.fn[b]=function(a,c){return arguments.length>0?this.on(b,null,a,c):this.trigger(b)}}),r.fn.extend({hover:function(a,b){return this.mouseenter(a).mouseleave(b||a)}}),o.focusin="onfocusin"in a,o.focusin||r.each({focus:"focusin",blur:"focusout"},function(a,b){var c=function(a){r.event.simulate(b,a.target,r.event.fix(a))};r.event.special[b]={setup:function(){var d=this.ownerDocument||this,e=W.access(d,b);e||d.addEventListener(a,c,!0),W.access(d,b,(e||0)+1)},teardown:function(){var d=this.ownerDocument||this,e=W.access(d,b)-1;e?W.access(d,b,e):(d.removeEventListener(a,c,!0),W.remove(d,b))}}});var tb=a.location,ub=r.now(),vb=/\?/;r.parseXML=function(b){var c;if(!b||"string"!=typeof b)return null;try{c=(new a.DOMParser).parseFromString(b,"text/xml")}catch(d){c=void 0}return c&&!c.getElementsByTagName("parsererror").length||r.error("Invalid XML: "+b),c};var wb=/\[\]$/,xb=/\r?\n/g,yb=/^(?:submit|button|image|reset|file)$/i,zb=/^(?:input|select|textarea|keygen)/i;function Ab(a,b,c,d){var e;if(Array.isArray(b))r.each(b,function(b,e){c||wb.test(a)?d(a,e):Ab(a+"["+("object"==typeof e&&null!=e?b:"")+"]",e,c,d)});else if(c||"object"!==r.type(b))d(a,b);else for(e in b)Ab(a+"["+e+"]",b[e],c,d)}r.param=function(a,b){var c,d=[],e=function(a,b){var c=r.isFunction(b)?b():b;d[d.length]=encodeURIComponent(a)+"="+encodeURIComponent(null==c?"":c)};if(Array.isArray(a)||a.jquery&&!r.isPlainObject(a))r.each(a,function(){e(this.name,this.value)});else for(c in a)Ab(c,a[c],b,e);return d.join("&")},r.fn.extend({serialize:function(){return r.param(this.serializeArray())},serializeArray:function(){return this.map(function(){var a=r.prop(this,"elements");return a?r.makeArray(a):this}).filter(function(){var a=this.type;return this.name&&!r(this).is(":disabled")&&zb.test(this.nodeName)&&!yb.test(a)&&(this.checked||!ja.test(a))}).map(function(a,b){var c=r(this).val();return null==c?null:Array.isArray(c)?r.map(c,function(a){return{name:b.name,value:a.replace(xb,"\r\n")}}):{name:b.name,value:c.replace(xb,"\r\n")}}).get()}});var Bb=/%20/g,Cb=/#.*$/,Db=/([?&])_=[^&]*/,Eb=/^(.*?):[ \t]*([^\r\n]*)$/gm,Fb=/^(?:about|app|app-storage|.+-extension|file|res|widget):$/,Gb=/^(?:GET|HEAD)$/,Hb=/^\/\//,Ib={},Jb={},Kb="*/".concat("*"),Lb=d.createElement("a");Lb.href=tb.href;function Mb(a){return function(b,c){"string"!=typeof b&&(c=b,b="*");var d,e=0,f=b.toLowerCase().match(L)||[];if(r.isFunction(c))while(d=f[e++])"+"===d[0]?(d=d.slice(1)||"*",(a[d]=a[d]||[]).unshift(c)):(a[d]=a[d]||[]).push(c)}}function Nb(a,b,c,d){var e={},f=a===Jb;function g(h){var i;return e[h]=!0,r.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 Ob(a,b){var c,d,e=r.ajaxSettings.flatOptions||{};for(c in b)void 0!==b[c]&&((e[c]?a:d||(d={}))[c]=b[c]);return d&&r.extend(!0,a,d),a}function Pb(a,b,c){var d,e,f,g,h=a.contents,i=a.dataTypes;while("*"===i[0])i.shift(),void 0===d&&(d=a.mimeType||b.getResponseHeader("Content-Type"));if(d)for(e in h)if(h[e]&&h[e].test(d)){i.unshift(e);break}if(i[0]in c)f=i[0];else{for(e in c){if(!i[0]||a.converters[e+" "+i[0]]){f=e;break}g||(g=e)}f=f||g}if(f)return f!==i[0]&&i.unshift(f),c[f]}function Qb(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}}r.extend({active:0,lastModified:{},etag:{},ajaxSettings:{url:tb.href,type:"GET",isLocal:Fb.test(tb.protocol),global:!0,processData:!0,async:!0,contentType:"application/x-www-form-urlencoded; charset=UTF-8",accepts:{"*":Kb,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":JSON.parse,"text xml":r.parseXML},flatOptions:{url:!0,context:!0}},ajaxSetup:function(a,b){return b?Ob(Ob(a,r.ajaxSettings),b):Ob(r.ajaxSettings,a)},ajaxPrefilter:Mb(Ib),ajaxTransport:Mb(Jb),ajax:function(b,c){"object"==typeof b&&(c=b,b=void 0),c=c||{};var e,f,g,h,i,j,k,l,m,n,o=r.ajaxSetup({},c),p=o.context||o,q=o.context&&(p.nodeType||p.jquery)?r(p):r.event,s=r.Deferred(),t=r.Callbacks("once memory"),u=o.statusCode||{},v={},w={},x="canceled",y={readyState:0,getResponseHeader:function(a){var b;if(k){if(!h){h={};while(b=Eb.exec(g))h[b[1].toLowerCase()]=b[2]}b=h[a.toLowerCase()]}return null==b?null:b},getAllResponseHeaders:function(){return k?g:null},setRequestHeader:function(a,b){return null==k&&(a=w[a.toLowerCase()]=w[a.toLowerCase()]||a,v[a]=b),this},overrideMimeType:function(a){return null==k&&(o.mimeType=a),this},statusCode:function(a){var b;if(a)if(k)y.always(a[y.status]);else for(b in a)u[b]=[u[b],a[b]];return this},abort:function(a){var b=a||x;return e&&e.abort(b),A(0,b),this}};if(s.promise(y),o.url=((b||o.url||tb.href)+"").replace(Hb,tb.protocol+"//"),o.type=c.method||c.type||o.method||o.type,o.dataTypes=(o.dataType||"*").toLowerCase().match(L)||[""],null==o.crossDomain){j=d.createElement("a");try{j.href=o.url,j.href=j.href,o.crossDomain=Lb.protocol+"//"+Lb.host!=j.protocol+"//"+j.host}catch(z){o.crossDomain=!0}}if(o.data&&o.processData&&"string"!=typeof o.data&&(o.data=r.param(o.data,o.traditional)),Nb(Ib,o,c,y),k)return y;l=r.event&&o.global,l&&0===r.active++&&r.event.trigger("ajaxStart"),o.type=o.type.toUpperCase(),o.hasContent=!Gb.test(o.type),f=o.url.replace(Cb,""),o.hasContent?o.data&&o.processData&&0===(o.contentType||"").indexOf("application/x-www-form-urlencoded")&&(o.data=o.data.replace(Bb,"+")):(n=o.url.slice(f.length),o.data&&(f+=(vb.test(f)?"&":"?")+o.data,delete o.data),o.cache===!1&&(f=f.replace(Db,"$1"),n=(vb.test(f)?"&":"?")+"_="+ub++ +n),o.url=f+n),o.ifModified&&(r.lastModified[f]&&y.setRequestHeader("If-Modified-Since",r.lastModified[f]),r.etag[f]&&y.setRequestHeader("If-None-Match",r.etag[f])),(o.data&&o.hasContent&&o.contentType!==!1||c.contentType)&&y.setRequestHeader("Content-Type",o.contentType),y.setRequestHeader("Accept",o.dataTypes[0]&&o.accepts[o.dataTypes[0]]?o.accepts[o.dataTypes[0]]+("*"!==o.dataTypes[0]?", "+Kb+"; q=0.01":""):o.accepts["*"]);for(m in o.headers)y.setRequestHeader(m,o.headers[m]);if(o.beforeSend&&(o.beforeSend.call(p,y,o)===!1||k))return y.abort();if(x="abort",t.add(o.complete),y.done(o.success),y.fail(o.error),e=Nb(Jb,o,c,y)){if(y.readyState=1,l&&q.trigger("ajaxSend",[y,o]),k)return y;o.async&&o.timeout>0&&(i=a.setTimeout(function(){y.abort("timeout")},o.timeout));try{k=!1,e.send(v,A)}catch(z){if(k)throw z;A(-1,z)}}else A(-1,"No Transport");function A(b,c,d,h){var j,m,n,v,w,x=c;k||(k=!0,i&&a.clearTimeout(i),e=void 0,g=h||"",y.readyState=b>0?4:0,j=b>=200&&b<300||304===b,d&&(v=Pb(o,y,d)),v=Qb(o,v,y,j),j?(o.ifModified&&(w=y.getResponseHeader("Last-Modified"),w&&(r.lastModified[f]=w),w=y.getResponseHeader("etag"),w&&(r.etag[f]=w)),204===b||"HEAD"===o.type?x="nocontent":304===b?x="notmodified":(x=v.state,m=v.data,n=v.error,j=!n)):(n=x,!b&&x||(x="error",b<0&&(b=0))),y.status=b,y.statusText=(c||x)+"",j?s.resolveWith(p,[m,x,y]):s.rejectWith(p,[y,x,n]),y.statusCode(u),u=void 0,l&&q.trigger(j?"ajaxSuccess":"ajaxError",[y,o,j?m:n]),t.fireWith(p,[y,x]),l&&(q.trigger("ajaxComplete",[y,o]),--r.active||r.event.trigger("ajaxStop")))}return y},getJSON:function(a,b,c){return r.get(a,b,c,"json")},getScript:function(a,b){return r.get(a,void 0,b,"script")}}),r.each(["get","post"],function(a,b){r[b]=function(a,c,d,e){return r.isFunction(c)&&(e=e||d,d=c,c=void 0),r.ajax(r.extend({url:a,type:b,dataType:e,data:c,success:d},r.isPlainObject(a)&&a))}}),r._evalUrl=function(a){return r.ajax({url:a,type:"GET",dataType:"script",cache:!0,async:!1,global:!1,"throws":!0})},r.fn.extend({wrapAll:function(a){var b;return this[0]&&(r.isFunction(a)&&(a=a.call(this[0])),b=r(a,this[0].ownerDocument).eq(0).clone(!0),this[0].parentNode&&b.insertBefore(this[0]),b.map(function(){var a=this;while(a.firstElementChild)a=a.firstElementChild;return a}).append(this)),this},wrapInner:function(a){return r.isFunction(a)?this.each(function(b){r(this).wrapInner(a.call(this,b))}):this.each(function(){var b=r(this),c=b.contents();c.length?c.wrapAll(a):b.append(a)})},wrap:function(a){var b=r.isFunction(a);return this.each(function(c){r(this).wrapAll(b?a.call(this,c):a)})},unwrap:function(a){return this.parent(a).not("body").each(function(){r(this).replaceWith(this.childNodes)}),this}}),r.expr.pseudos.hidden=function(a){return!r.expr.pseudos.visible(a)},r.expr.pseudos.visible=function(a){return!!(a.offsetWidth||a.offsetHeight||a.getClientRects().length)},r.ajaxSettings.xhr=function(){try{return new a.XMLHttpRequest}catch(b){}};var Rb={0:200,1223:204},Sb=r.ajaxSettings.xhr();o.cors=!!Sb&&"withCredentials"in Sb,o.ajax=Sb=!!Sb,r.ajaxTransport(function(b){var c,d;if(o.cors||Sb&&!b.crossDomain)return{send:function(e,f){var g,h=b.xhr();if(h.open(b.type,b.url,b.async,b.username,b.password),b.xhrFields)for(g in b.xhrFields)h[g]=b.xhrFields[g];b.mimeType&&h.overrideMimeType&&h.overrideMimeType(b.mimeType),b.crossDomain||e["X-Requested-With"]||(e["X-Requested-With"]="XMLHttpRequest");for(g in e)h.setRequestHeader(g,e[g]);c=function(a){return function(){c&&(c=d=h.onload=h.onerror=h.onabort=h.onreadystatechange=null,"abort"===a?h.abort():"error"===a?"number"!=typeof h.status?f(0,"error"):f(h.status,h.statusText):f(Rb[h.status]||h.status,h.statusText,"text"!==(h.responseType||"text")||"string"!=typeof h.responseText?{binary:h.response}:{text:h.responseText},h.getAllResponseHeaders()))}},h.onload=c(),d=h.onerror=c("error"),void 0!==h.onabort?h.onabort=d:h.onreadystatechange=function(){4===h.readyState&&a.setTimeout(function(){c&&d()})},c=c("abort");try{h.send(b.hasContent&&b.data||null)}catch(i){if(c)throw i}},abort:function(){c&&c()}}}),r.ajaxPrefilter(function(a){a.crossDomain&&(a.contents.script=!1)}),r.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 r.globalEval(a),a}}}),r.ajaxPrefilter("script",function(a){void 0===a.cache&&(a.cache=!1),a.crossDomain&&(a.type="GET")}),r.ajaxTransport("script",function(a){if(a.crossDomain){var b,c;return{send:function(e,f){b=r("<script>").prop({charset:a.scriptCharset,src:a.url}).on("load error",c=function(a){b.remove(),c=null,a&&f("error"===a.type?404:200,a.type)}),d.head.appendChild(b[0])},abort:function(){c&&c()}}}});var Tb=[],Ub=/(=)\?(?=&|$)|\?\?/;r.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var a=Tb.pop()||r.expando+"_"+ub++;return this[a]=!0,a}}),r.ajaxPrefilter("json jsonp",function(b,c,d){var e,f,g,h=b.jsonp!==!1&&(Ub.test(b.url)?"url":"string"==typeof b.data&&0===(b.contentType||"").indexOf("application/x-www-form-urlencoded")&&Ub.test(b.data)&&"data");if(h||"jsonp"===b.dataTypes[0])return e=b.jsonpCallback=r.isFunction(b.jsonpCallback)?b.jsonpCallback():b.jsonpCallback,h?b[h]=b[h].replace(Ub,"$1"+e):b.jsonp!==!1&&(b.url+=(vb.test(b.url)?"&":"?")+b.jsonp+"="+e),b.converters["script json"]=function(){return g||r.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?r(a).removeProp(e):a[e]=f,b[e]&&(b.jsonpCallback=c.jsonpCallback,Tb.push(e)),g&&r.isFunction(f)&&f(g[0]),g=f=void 0}),"script"}),o.createHTMLDocument=function(){var a=d.implementation.createHTMLDocument("").body;return a.innerHTML="<form></form><form></form>",2===a.childNodes.length}(),r.parseHTML=function(a,b,c){if("string"!=typeof a)return[];"boolean"==typeof b&&(c=b,b=!1);var e,f,g;return b||(o.createHTMLDocument?(b=d.implementation.createHTMLDocument(""),e=b.createElement("base"),e.href=d.location.href,b.head.appendChild(e)):b=d),f=C.exec(a),g=!c&&[],f?[b.createElement(f[1])]:(f=qa([a],b,g),g&&g.length&&r(g).remove(),r.merge([],f.childNodes))},r.fn.load=function(a,b,c){var d,e,f,g=this,h=a.indexOf(" ");return h>-1&&(d=pb(a.slice(h)),a=a.slice(0,h)),r.isFunction(b)?(c=b,b=void 0):b&&"object"==typeof b&&(e="POST"),g.length>0&&r.ajax({url:a,type:e||"GET",dataType:"html",data:b}).done(function(a){f=arguments,g.html(d?r("<div>").append(r.parseHTML(a)).find(d):a)}).always(c&&function(a,b){g.each(function(){c.apply(this,f||[a.responseText,b,a])})}),this},r.each(["ajaxStart","ajaxStop","ajaxComplete","ajaxError","ajaxSuccess","ajaxSend"],function(a,b){r.fn[b]=function(a){return this.on(b,a)}}),r.expr.pseudos.animated=function(a){return r.grep(r.timers,function(b){return a===b.elem}).length},r.offset={setOffset:function(a,b,c){var d,e,f,g,h,i,j,k=r.css(a,"position"),l=r(a),m={};"static"===k&&(a.style.position="relative"),h=l.offset(),f=r.css(a,"top"),i=r.css(a,"left"),j=("absolute"===k||"fixed"===k)&&(f+i).indexOf("auto")>-1,j?(d=l.position(),g=d.top,e=d.left):(g=parseFloat(f)||0,e=parseFloat(i)||0),r.isFunction(b)&&(b=b.call(a,c,r.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)}},r.fn.extend({offset:function(a){if(arguments.length)return void 0===a?this:this.each(function(b){r.offset.setOffset(this,a,b)});var b,c,d,e,f=this[0];if(f)return f.getClientRects().length?(d=f.getBoundingClientRect(),b=f.ownerDocument,c=b.documentElement,e=b.defaultView,{top:d.top+e.pageYOffset-c.clientTop,left:d.left+e.pageXOffset-c.clientLeft}):{top:0,left:0}},position:function(){if(this[0]){var a,b,c=this[0],d={top:0,left:0};return"fixed"===r.css(c,"position")?b=c.getBoundingClientRect():(a=this.offsetParent(),b=this.offset(),B(a[0],"html")||(d=a.offset()),d={top:d.top+r.css(a[0],"borderTopWidth",!0),left:d.left+r.css(a[0],"borderLeftWidth",!0)}),{top:b.top-d.top-r.css(c,"marginTop",!0),left:b.left-d.left-r.css(c,"marginLeft",!0)}}},offsetParent:function(){return this.map(function(){var a=this.offsetParent;while(a&&"static"===r.css(a,"position"))a=a.offsetParent;return a||ra})}}),r.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(a,b){var c="pageYOffset"===b;r.fn[a]=function(d){return T(this,function(a,d,e){var f;return r.isWindow(a)?f=a:9===a.nodeType&&(f=a.defaultView),void 0===e?f?f[b]:a[d]:void(f?f.scrollTo(c?f.pageXOffset:e,c?e:f.pageYOffset):a[d]=e)},a,d,arguments.length)}}),r.each(["top","left"],function(a,b){r.cssHooks[b]=Pa(o.pixelPosition,function(a,c){if(c)return c=Oa(a,b),Ma.test(c)?r(a).position()[b]+"px":c})}),r.each({Height:"height",Width:"width"},function(a,b){r.each({padding:"inner"+a,content:b,"":"outer"+a},function(c,d){r.fn[d]=function(e,f){var g=arguments.length&&(c||"boolean"!=typeof e),h=c||(e===!0||f===!0?"margin":"border");return T(this,function(b,c,e){var f;return r.isWindow(b)?0===d.indexOf("outer")?b["inner"+a]:b.document.documentElement["client"+a]:9===b.nodeType?(f=b.documentElement,Math.max(b.body["scroll"+a],f["scroll"+a],b.body["offset"+a],f["offset"+a],f["client"+a])):void 0===e?r.css(b,c,h):r.style(b,c,e,h)},b,g?e:void 0,g)}})}),r.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)},holdReady:function(a){a?r.readyWait++:r.ready(!0)}}),r.isArray=Array.isArray,r.parseJSON=JSON.parse,r.nodeName=B,"function"==typeof define&&define.amd&&define("jquery",[],function(){return r});var Vb=a.jQuery,Wb=a.$;return r.noConflict=function(b){return a.$===r&&(a.$=Wb),b&&a.jQuery===r&&(a.jQuery=Vb),r},b||(a.jQuery=a.$=r),r});
+
+function createShiftArr(step) {
+
+	var space = '    ';
+	
+	if ( isNaN(parseInt(step)) ) {  // argument is string
+		space = step;
+	} else { // argument is integer
+		switch(step) {
+			case 1: space = ' '; break;
+			case 2: space = '  '; break;
+			case 3: space = '   '; break;
+			case 4: space = '    '; break;
+			case 5: space = '     '; break;
+			case 6: space = '      '; break;
+			case 7: space = '       '; break;
+			case 8: space = '        '; break;
+			case 9: space = '         '; break;
+			case 10: space = '          '; break;
+			case 11: space = '           '; break;
+			case 12: space = '            '; break;
+		}
+	}
+
+	var shift = ['\n']; // array of shifts
+	for(ix=0;ix<100;ix++){
+		shift.push(shift[ix]+space); 
+	}
+	return shift;
+}
+
+function vkbeautify(){
+	this.step = '    '; // 4 spaces
+	this.shift = createShiftArr(this.step);
+};
+
+vkbeautify.prototype.xml = function(text,step) {
+
+	var ar = text.replace(/>\s{0,}</g,"><")
+				 .replace(/</g,"~::~<")
+				 .replace(/\s*xmlns\:/g,"~::~xmlns:")
+				 .replace(/\s*xmlns\=/g,"~::~xmlns=")
+				 .split('~::~'),
+		len = ar.length,
+		inComment = false,
+		deep = 0,
+		str = '',
+		ix = 0,
+		shift = step ? createShiftArr(step) : this.shift;
+
+		for(ix=0;ix<len;ix++) {
+			// start comment or <![CDATA[...]]> or <!DOCTYPE //
+			if(ar[ix].search(/<!/) > -1) { 
+				str += shift[deep]+ar[ix];
+				inComment = true; 
+				// end comment  or <![CDATA[...]]> //
+				if(ar[ix].search(/-->/) > -1 || ar[ix].search(/\]>/) > -1 || ar[ix].search(/!DOCTYPE/) > -1 ) { 
+					inComment = false; 
+				}
+			} else 
+			// end comment  or <![CDATA[...]]> //
+			if(ar[ix].search(/-->/) > -1 || ar[ix].search(/\]>/) > -1) { 
+				str += ar[ix];
+				inComment = false; 
+			} else 
+			// <elm></elm> //
+			if( /^<\w/.exec(ar[ix-1]) && /^<\/\w/.exec(ar[ix]) &&
+				/^<[\w:\-\.\,]+/.exec(ar[ix-1]) == /^<\/[\w:\-\.\,]+/.exec(ar[ix])[0].replace('/','')) { 
+				str += ar[ix];
+				if(!inComment) deep--;
+			} else
+			 // <elm> //
+			if(ar[ix].search(/<\w/) > -1 && ar[ix].search(/<\//) == -1 && ar[ix].search(/\/>/) == -1 ) {
+				str = !inComment ? str += shift[deep++]+ar[ix] : str += ar[ix];
+			} else 
+			 // <elm>...</elm> //
+			if(ar[ix].search(/<\w/) > -1 && ar[ix].search(/<\//) > -1) {
+				str = !inComment ? str += shift[deep]+ar[ix] : str += ar[ix];
+			} else 
+			// </elm> //
+			if(ar[ix].search(/<\//) > -1) { 
+				str = !inComment ? str += shift[--deep]+ar[ix] : str += ar[ix];
+			} else 
+			// <elm/> //
+			if(ar[ix].search(/\/>/) > -1 ) { 
+				str = !inComment ? str += shift[deep]+ar[ix] : str += ar[ix];
+			} else 
+			// <? xml ... ?> //
+			if(ar[ix].search(/<\?/) > -1) { 
+				str += shift[deep]+ar[ix];
+			} else 
+			// xmlns //
+			if( ar[ix].search(/xmlns\:/) > -1  || ar[ix].search(/xmlns\=/) > -1) { 
+				str += shift[deep]+ar[ix];
+			} 
+			
+			else {
+				str += ar[ix];
+			}
+		}
+		
+	return  (str[0] == '\n') ? str.slice(1) : str;
+}
+
+vkbeautify.prototype.json = function(text,step) {
+
+	var step = step ? step : this.step;
+	
+	if (typeof JSON === 'undefined' ) return text; 
+	
+	if ( typeof text === "string" ) return JSON.stringify(JSON.parse(text), null, step);
+	if ( typeof text === "object" ) return JSON.stringify(text, null, step);
+		
+	return text; // text is not string nor object
+}
+
+vkbeautify.prototype.css = function(text, step) {
+
+	var ar = text.replace(/\s{1,}/g,' ')
+				.replace(/\{/g,"{~::~")
+				.replace(/\}/g,"~::~}~::~")
+				.replace(/\;/g,";~::~")
+				.replace(/\/\*/g,"~::~/*")
+				.replace(/\*\//g,"*/~::~")
+				.replace(/~::~\s{0,}~::~/g,"~::~")
+				.split('~::~'),
+		len = ar.length,
+		deep = 0,
+		str = '',
+		ix = 0,
+		shift = step ? createShiftArr(step) : this.shift;
+		
+		for(ix=0;ix<len;ix++) {
+
+			if( /\{/.exec(ar[ix]))  { 
+				str += shift[deep++]+ar[ix];
+			} else 
+			if( /\}/.exec(ar[ix]))  { 
+				str += shift[--deep]+ar[ix];
+			} else
+			if( /\*\\/.exec(ar[ix]))  { 
+				str += shift[deep]+ar[ix];
+			}
+			else {
+				str += shift[deep]+ar[ix];
+			}
+		}
+		return str.replace(/^\n{1,}/,'');
+}
+
+//----------------------------------------------------------------------------
+
+function isSubquery(str, parenthesisLevel) {
+	return  parenthesisLevel - (str.replace(/\(/g,'').length - str.replace(/\)/g,'').length )
+}
+
+function split_sql(str, tab) {
+
+	return str.replace(/\s{1,}/g," ")
+
+				.replace(/ AND /ig,"~::~"+tab+tab+"AND ")
+				.replace(/ BETWEEN /ig,"~::~"+tab+"BETWEEN ")
+				.replace(/ CASE /ig,"~::~"+tab+"CASE ")
+				.replace(/ ELSE /ig,"~::~"+tab+"ELSE ")
+				.replace(/ END /ig,"~::~"+tab+"END ")
+				.replace(/ FROM /ig,"~::~FROM ")
+				.replace(/ GROUP\s{1,}BY/ig,"~::~GROUP BY ")
+				.replace(/ HAVING /ig,"~::~HAVING ")
+				//.replace(/ SET /ig," SET~::~")
+				.replace(/ IN /ig," IN ")
+				
+				.replace(/ JOIN /ig,"~::~JOIN ")
+				.replace(/ CROSS~::~{1,}JOIN /ig,"~::~CROSS JOIN ")
+				.replace(/ INNER~::~{1,}JOIN /ig,"~::~INNER JOIN ")
+				.replace(/ LEFT~::~{1,}JOIN /ig,"~::~LEFT JOIN ")
+				.replace(/ RIGHT~::~{1,}JOIN /ig,"~::~RIGHT JOIN ")
+				
+				.replace(/ ON /ig,"~::~"+tab+"ON ")
+				.replace(/ OR /ig,"~::~"+tab+tab+"OR ")
+				.replace(/ ORDER\s{1,}BY/ig,"~::~ORDER BY ")
+				.replace(/ OVER /ig,"~::~"+tab+"OVER ")
+
+				.replace(/\(\s{0,}SELECT /ig,"~::~(SELECT ")
+				.replace(/\)\s{0,}SELECT /ig,")~::~SELECT ")
+				
+				.replace(/ THEN /ig," THEN~::~"+tab+"")
+				.replace(/ UNION /ig,"~::~UNION~::~")
+				.replace(/ USING /ig,"~::~USING ")
+				.replace(/ WHEN /ig,"~::~"+tab+"WHEN ")
+				.replace(/ WHERE /ig,"~::~WHERE ")
+				.replace(/ WITH /ig,"~::~WITH ")
+				
+				//.replace(/\,\s{0,}\(/ig,",~::~( ")
+				//.replace(/\,/ig,",~::~"+tab+tab+"")
+
+				.replace(/ ALL /ig," ALL ")
+				.replace(/ AS /ig," AS ")
+				.replace(/ ASC /ig," ASC ")	
+				.replace(/ DESC /ig," DESC ")	
+				.replace(/ DISTINCT /ig," DISTINCT ")
+				.replace(/ EXISTS /ig," EXISTS ")
+				.replace(/ NOT /ig," NOT ")
+				.replace(/ NULL /ig," NULL ")
+				.replace(/ LIKE /ig," LIKE ")
+				.replace(/\s{0,}SELECT /ig,"SELECT ")
+				.replace(/\s{0,}UPDATE /ig,"UPDATE ")
+				.replace(/ SET /ig," SET ")
+							
+				.replace(/~::~{1,}/g,"~::~")
+				.split('~::~');
+}
+
+vkbeautify.prototype.sql = function(text,step) {
+
+	var ar_by_quote = text.replace(/\s{1,}/g," ")
+							.replace(/\'/ig,"~::~\'")
+							.split('~::~'),
+		len = ar_by_quote.length,
+		ar = [],
+		deep = 0,
+		tab = this.step,//+this.step,
+		inComment = true,
+		inQuote = false,
+		parenthesisLevel = 0,
+		str = '',
+		ix = 0,
+		shift = step ? createShiftArr(step) : this.shift;;
+
+		for(ix=0;ix<len;ix++) {
+			if(ix%2) {
+				ar = ar.concat(ar_by_quote[ix]);
+			} else {
+				ar = ar.concat(split_sql(ar_by_quote[ix], tab) );
+			}
+		}
+		
+		len = ar.length;
+		for(ix=0;ix<len;ix++) {
+			
+			parenthesisLevel = isSubquery(ar[ix], parenthesisLevel);
+			
+			if( /\s{0,}\s{0,}SELECT\s{0,}/.exec(ar[ix]))  { 
+				ar[ix] = ar[ix].replace(/\,/g,",\n"+tab+tab+"")
+			} 
+			
+			if( /\s{0,}\s{0,}SET\s{0,}/.exec(ar[ix]))  { 
+				ar[ix] = ar[ix].replace(/\,/g,",\n"+tab+tab+"")
+			} 
+			
+			if( /\s{0,}\(\s{0,}SELECT\s{0,}/.exec(ar[ix]))  { 
+				deep++;
+				str += shift[deep]+ar[ix];
+			} else 
+			if( /\'/.exec(ar[ix]) )  { 
+				if(parenthesisLevel<1 && deep) {
+					deep--;
+				}
+				str += ar[ix];
+			}
+			else  { 
+				str += shift[deep]+ar[ix];
+				if(parenthesisLevel<1 && deep) {
+					deep--;
+				}
+			} 
+			var junk = 0;
+		}
+
+		str = str.replace(/^\n{1,}/,'').replace(/\n{1,}/g,"\n");
+		return str;
+}
+
+
+vkbeautify.prototype.xmlmin = function(text, preserveComments) {
+
+	var str = preserveComments ? text
+							   : text.replace(/\<![ \r\n\t]*(--([^\-]|[\r\n]|-[^\-])*--[ \r\n\t]*)\>/g,"")
+									 .replace(/[ \r\n\t]{1,}xmlns/g, ' xmlns');
+	return  str.replace(/>\s{0,}</g,"><"); 
+}
+
+vkbeautify.prototype.jsonmin = function(text) {
+
+	if (typeof JSON === 'undefined' ) return text; 
+	
+	return JSON.stringify(JSON.parse(text), null, 0); 
+				
+}
+
+vkbeautify.prototype.cssmin = function(text, preserveComments) {
+	
+	var str = preserveComments ? text
+							   : text.replace(/\/\*([^*]|[\r\n]|(\*+([^*/]|[\r\n])))*\*+\//g,"") ;
+
+	return str.replace(/\s{1,}/g,' ')
+			  .replace(/\{\s{1,}/g,"{")
+			  .replace(/\}\s{1,}/g,"}")
+			  .replace(/\;\s{1,}/g,";")
+			  .replace(/\/\*\s{1,}/g,"/*")
+			  .replace(/\*\/\s{1,}/g,"*/");
+}
+
+vkbeautify.prototype.sqlmin = function(text) {
+	return text.replace(/\s{1,}/g," ").replace(/\s{1,}\(/,"(").replace(/\s{1,}\)/,")");
+}
+
+window.vkbeautify = new vkbeautify();
+
+})();
+
+
+(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){
+// https://d3js.org Version 4.3.0. Copyright 2016 Mike Bostock.
+(function (global, factory) {
+  typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports) :
+  typeof define === 'function' && define.amd ? define(['exports'], factory) :
+  (factory((global.d3 = global.d3 || {})));
+}(this, (function (exports) { 'use strict';
+
+var version = "4.3.0";
+
+var ascending = function(a, b) {
+  return a < b ? -1 : a > b ? 1 : a >= b ? 0 : NaN;
+};
+
+var bisector = function(compare) {
+  if (compare.length === 1) compare = ascendingComparator(compare);
+  return {
+    left: function(a, x, lo, hi) {
+      if (lo == null) lo = 0;
+      if (hi == null) hi = a.length;
+      while (lo < hi) {
+        var mid = lo + hi >>> 1;
+        if (compare(a[mid], x) < 0) lo = mid + 1;
+        else hi = mid;
+      }
+      return lo;
+    },
+    right: function(a, x, lo, hi) {
+      if (lo == null) lo = 0;
+      if (hi == null) hi = a.length;
+      while (lo < hi) {
+        var mid = lo + hi >>> 1;
+        if (compare(a[mid], x) > 0) hi = mid;
+        else lo = mid + 1;
+      }
+      return lo;
+    }
+  };
+};
+
+function ascendingComparator(f) {
+  return function(d, x) {
+    return ascending(f(d), x);
+  };
+}
+
+var ascendingBisect = bisector(ascending);
+var bisectRight = ascendingBisect.right;
+var bisectLeft = ascendingBisect.left;
+
+var descending = function(a, b) {
+  return b < a ? -1 : b > a ? 1 : b >= a ? 0 : NaN;
+};
+
+var number = function(x) {
+  return x === null ? NaN : +x;
+};
+
+var variance = function(array, f) {
+  var n = array.length,
+      m = 0,
+      a,
+      d,
+      s = 0,
+      i = -1,
+      j = 0;
+
+  if (f == null) {
+    while (++i < n) {
+      if (!isNaN(a = number(array[i]))) {
+        d = a - m;
+        m += d / ++j;
+        s += d * (a - m);
+      }
+    }
+  }
+
+  else {
+    while (++i < n) {
+      if (!isNaN(a = number(f(array[i], i, array)))) {
+        d = a - m;
+        m += d / ++j;
+        s += d * (a - m);
+      }
+    }
+  }
+
+  if (j > 1) return s / (j - 1);
+};
+
+var deviation = function(array, f) {
+  var v = variance(array, f);
+  return v ? Math.sqrt(v) : v;
+};
+
+var extent = function(array, f) {
+  var i = -1,
+      n = array.length,
+      a,
+      b,
+      c;
+
+  if (f == null) {
+    while (++i < n) if ((b = array[i]) != null && b >= b) { a = c = b; break; }
+    while (++i < n) if ((b = array[i]) != null) {
+      if (a > b) a = b;
+      if (c < b) c = b;
+    }
+  }
+
+  else {
+    while (++i < n) if ((b = f(array[i], i, array)) != null && b >= b) { a = c = b; break; }
+    while (++i < n) if ((b = f(array[i], i, array)) != null) {
+      if (a > b) a = b;
+      if (c < b) c = b;
+    }
+  }
+
+  return [a, c];
+};
+
+var array = Array.prototype;
+
+var slice = array.slice;
+var map = array.map;
+
+var constant$1 = function(x) {
+  return function() {
+    return x;
+  };
+};
+
+var identity = function(x) {
+  return x;
+};
+
+var range = function(start, stop, step) {
+  start = +start, stop = +stop, step = (n = arguments.length) < 2 ? (stop = start, start = 0, 1) : n < 3 ? 1 : +step;
+
+  var i = -1,
+      n = Math.max(0, Math.ceil((stop - start) / step)) | 0,
+      range = new Array(n);
+
+  while (++i < n) {
+    range[i] = start + i * step;
+  }
+
+  return range;
+};
+
+var e10 = Math.sqrt(50);
+var e5 = Math.sqrt(10);
+var e2 = Math.sqrt(2);
+
+var ticks = function(start, stop, count) {
+  var step = tickStep(start, stop, count);
+  return range(
+    Math.ceil(start / step) * step,
+    Math.floor(stop / step) * step + step / 2, // inclusive
+    step
+  );
+};
+
+function tickStep(start, stop, count) {
+  var step0 = Math.abs(stop - start) / Math.max(0, count),
+      step1 = Math.pow(10, Math.floor(Math.log(step0) / Math.LN10)),
+      error = step0 / step1;
+  if (error >= e10) step1 *= 10;
+  else if (error >= e5) step1 *= 5;
+  else if (error >= e2) step1 *= 2;
+  return stop < start ? -step1 : step1;
+}
+
+var sturges = function(values) {
+  return Math.ceil(Math.log(values.length) / Math.LN2) + 1;
+};
+
+var histogram = function() {
+  var value = identity,
+      domain = extent,
+      threshold = sturges;
+
+  function histogram(data) {
+    var i,
+        n = data.length,
+        x,
+        values = new Array(n);
+
+    for (i = 0; i < n; ++i) {
+      values[i] = value(data[i], i, data);
+    }
+
+    var xz = domain(values),
+        x0 = xz[0],
+        x1 = xz[1],
+        tz = threshold(values, x0, x1);
+
+    // Convert number of thresholds into uniform thresholds.
+    if (!Array.isArray(tz)) tz = ticks(x0, x1, tz);
+
+    // Remove any thresholds outside the domain.
+    var m = tz.length;
+    while (tz[0] <= x0) tz.shift(), --m;
+    while (tz[m - 1] >= x1) tz.pop(), --m;
+
+    var bins = new Array(m + 1),
+        bin;
+
+    // Initialize bins.
+    for (i = 0; i <= m; ++i) {
+      bin = bins[i] = [];
+      bin.x0 = i > 0 ? tz[i - 1] : x0;
+      bin.x1 = i < m ? tz[i] : x1;
+    }
+
+    // Assign data to bins by value, ignoring any outside the domain.
+    for (i = 0; i < n; ++i) {
+      x = values[i];
+      if (x0 <= x && x <= x1) {
+        bins[bisectRight(tz, x, 0, m)].push(data[i]);
+      }
+    }
+
+    return bins;
+  }
+
+  histogram.value = function(_) {
+    return arguments.length ? (value = typeof _ === "function" ? _ : constant$1(_), histogram) : value;
+  };
+
+  histogram.domain = function(_) {
+    return arguments.length ? (domain = typeof _ === "function" ? _ : constant$1([_[0], _[1]]), histogram) : domain;
+  };
+
+  histogram.thresholds = function(_) {
+    return arguments.length ? (threshold = typeof _ === "function" ? _ : Array.isArray(_) ? constant$1(slice.call(_)) : constant$1(_), histogram) : threshold;
+  };
+
+  return histogram;
+};
+
+var threshold = function(array, p, f) {
+  if (f == null) f = number;
+  if (!(n = array.length)) return;
+  if ((p = +p) <= 0 || n < 2) return +f(array[0], 0, array);
+  if (p >= 1) return +f(array[n - 1], n - 1, array);
+  var n,
+      h = (n - 1) * p,
+      i = Math.floor(h),
+      a = +f(array[i], i, array),
+      b = +f(array[i + 1], i + 1, array);
+  return a + (b - a) * (h - i);
+};
+
+var freedmanDiaconis = function(values, min, max) {
+  values = map.call(values, number).sort(ascending);
+  return Math.ceil((max - min) / (2 * (threshold(values, 0.75) - threshold(values, 0.25)) * Math.pow(values.length, -1 / 3)));
+};
+
+var scott = function(values, min, max) {
+  return Math.ceil((max - min) / (3.5 * deviation(values) * Math.pow(values.length, -1 / 3)));
+};
+
+var max = function(array, f) {
+  var i = -1,
+      n = array.length,
+      a,
+      b;
+
+  if (f == null) {
+    while (++i < n) if ((b = array[i]) != null && b >= b) { a = b; break; }
+    while (++i < n) if ((b = array[i]) != null && b > a) a = b;
+  }
+
+  else {
+    while (++i < n) if ((b = f(array[i], i, array)) != null && b >= b) { a = b; break; }
+    while (++i < n) if ((b = f(array[i], i, array)) != null && b > a) a = b;
+  }
+
+  return a;
+};
+
+var mean = function(array, f) {
+  var s = 0,
+      n = array.length,
+      a,
+      i = -1,
+      j = n;
+
+  if (f == null) {
+    while (++i < n) if (!isNaN(a = number(array[i]))) s += a; else --j;
+  }
+
+  else {
+    while (++i < n) if (!isNaN(a = number(f(array[i], i, array)))) s += a; else --j;
+  }
+
+  if (j) return s / j;
+};
+
+var median = function(array, f) {
+  var numbers = [],
+      n = array.length,
+      a,
+      i = -1;
+
+  if (f == null) {
+    while (++i < n) if (!isNaN(a = number(array[i]))) numbers.push(a);
+  }
+
+  else {
+    while (++i < n) if (!isNaN(a = number(f(array[i], i, array)))) numbers.push(a);
+  }
+
+  return threshold(numbers.sort(ascending), 0.5);
+};
+
+var merge = function(arrays) {
+  var n = arrays.length,
+      m,
+      i = -1,
+      j = 0,
+      merged,
+      array;
+
+  while (++i < n) j += arrays[i].length;
+  merged = new Array(j);
+
+  while (--n >= 0) {
+    array = arrays[n];
+    m = array.length;
+    while (--m >= 0) {
+      merged[--j] = array[m];
+    }
+  }
+
+  return merged;
+};
+
+var min = function(array, f) {
+  var i = -1,
+      n = array.length,
+      a,
+      b;
+
+  if (f == null) {
+    while (++i < n) if ((b = array[i]) != null && b >= b) { a = b; break; }
+    while (++i < n) if ((b = array[i]) != null && a > b) a = b;
+  }
+
+  else {
+    while (++i < n) if ((b = f(array[i], i, array)) != null && b >= b) { a = b; break; }
+    while (++i < n) if ((b = f(array[i], i, array)) != null && a > b) a = b;
+  }
+
+  return a;
+};
+
+var pairs = function(array) {
+  var i = 0, n = array.length - 1, p = array[0], pairs = new Array(n < 0 ? 0 : n);
+  while (i < n) pairs[i] = [p, p = array[++i]];
+  return pairs;
+};
+
+var permute = function(array, indexes) {
+  var i = indexes.length, permutes = new Array(i);
+  while (i--) permutes[i] = array[indexes[i]];
+  return permutes;
+};
+
+var scan = function(array, compare) {
+  if (!(n = array.length)) return;
+  var i = 0,
+      n,
+      j = 0,
+      xi,
+      xj = array[j];
+
+  if (!compare) compare = ascending;
+
+  while (++i < n) if (compare(xi = array[i], xj) < 0 || compare(xj, xj) !== 0) xj = xi, j = i;
+
+  if (compare(xj, xj) === 0) return j;
+};
+
+var shuffle = function(array, i0, i1) {
+  var m = (i1 == null ? array.length : i1) - (i0 = i0 == null ? 0 : +i0),
+      t,
+      i;
+
+  while (m) {
+    i = Math.random() * m-- | 0;
+    t = array[m + i0];
+    array[m + i0] = array[i + i0];
+    array[i + i0] = t;
+  }
+
+  return array;
+};
+
+var sum = function(array, f) {
+  var s = 0,
+      n = array.length,
+      a,
+      i = -1;
+
+  if (f == null) {
+    while (++i < n) if (a = +array[i]) s += a; // Note: zero and null are equivalent.
+  }
+
+  else {
+    while (++i < n) if (a = +f(array[i], i, array)) s += a;
+  }
+
+  return s;
+};
+
+var transpose = function(matrix) {
+  if (!(n = matrix.length)) return [];
+  for (var i = -1, m = min(matrix, length), transpose = new Array(m); ++i < m;) {
+    for (var j = -1, n, row = transpose[i] = new Array(n); ++j < n;) {
+      row[j] = matrix[j][i];
+    }
+  }
+  return transpose;
+};
+
+function length(d) {
+  return d.length;
+}
+
+var zip = function() {
+  return transpose(arguments);
+};
+
+var prefix = "$";
+
+function Map() {}
+
+Map.prototype = map$1.prototype = {
+  constructor: Map,
+  has: function(key) {
+    return (prefix + key) in this;
+  },
+  get: function(key) {
+    return this[prefix + key];
+  },
+  set: function(key, value) {
+    this[prefix + key] = value;
+    return this;
+  },
+  remove: function(key) {
+    var property = prefix + key;
+    return property in this && delete this[property];
+  },
+  clear: function() {
+    for (var property in this) if (property[0] === prefix) delete this[property];
+  },
+  keys: function() {
+    var keys = [];
+    for (var property in this) if (property[0] === prefix) keys.push(property.slice(1));
+    return keys;
+  },
+  values: function() {
+    var values = [];
+    for (var property in this) if (property[0] === prefix) values.push(this[property]);
+    return values;
+  },
+  entries: function() {
+    var entries = [];
+    for (var property in this) if (property[0] === prefix) entries.push({key: property.slice(1), value: this[property]});
+    return entries;
+  },
+  size: function() {
+    var size = 0;
+    for (var property in this) if (property[0] === prefix) ++size;
+    return size;
+  },
+  empty: function() {
+    for (var property in this) if (property[0] === prefix) return false;
+    return true;
+  },
+  each: function(f) {
+    for (var property in this) if (property[0] === prefix) f(this[property], property.slice(1), this);
+  }
+};
+
+function map$1(object, f) {
+  var map = new Map;
+
+  // Copy constructor.
+  if (object instanceof Map) object.each(function(value, key) { map.set(key, value); });
+
+  // Index array by numeric index or specified key function.
+  else if (Array.isArray(object)) {
+    var i = -1,
+        n = object.length,
+        o;
+
+    if (f == null) while (++i < n) map.set(i, object[i]);
+    else while (++i < n) map.set(f(o = object[i], i, object), o);
+  }
+
+  // Convert object to map.
+  else if (object) for (var key in object) map.set(key, object[key]);
+
+  return map;
+}
+
+var nest = function() {
+  var keys = [],
+      sortKeys = [],
+      sortValues,
+      rollup,
+      nest;
+
+  function apply(array, depth, createResult, setResult) {
+    if (depth >= keys.length) return rollup != null
+        ? rollup(array) : (sortValues != null
+        ? array.sort(sortValues)
+        : array);
+
+    var i = -1,
+        n = array.length,
+        key = keys[depth++],
+        keyValue,
+        value,
+        valuesByKey = map$1(),
+        values,
+        result = createResult();
+
+    while (++i < n) {
+      if (values = valuesByKey.get(keyValue = key(value = array[i]) + "")) {
+        values.push(value);
+      } else {
+        valuesByKey.set(keyValue, [value]);
+      }
+    }
+
+    valuesByKey.each(function(values, key) {
+      setResult(result, key, apply(values, depth, createResult, setResult));
+    });
+
+    return result;
+  }
+
+  function entries(map, depth) {
+    if (++depth > keys.length) return map;
+    var array, sortKey = sortKeys[depth - 1];
+    if (rollup != null && depth >= keys.length) array = map.entries();
+    else array = [], map.each(function(v, k) { array.push({key: k, values: entries(v, depth)}); });
+    return sortKey != null ? array.sort(function(a, b) { return sortKey(a.key, b.key); }) : array;
+  }
+
+  return nest = {
+    object: function(array) { return apply(array, 0, createObject, setObject); },
+    map: function(array) { return apply(array, 0, createMap, setMap); },
+    entries: function(array) { return entries(apply(array, 0, createMap, setMap), 0); },
+    key: function(d) { keys.push(d); return nest; },
+    sortKeys: function(order) { sortKeys[keys.length - 1] = order; return nest; },
+    sortValues: function(order) { sortValues = order; return nest; },
+    rollup: function(f) { rollup = f; return nest; }
+  };
+};
+
+function createObject() {
+  return {};
+}
+
+function setObject(object, key, value) {
+  object[key] = value;
+}
+
+function createMap() {
+  return map$1();
+}
+
+function setMap(map, key, value) {
+  map.set(key, value);
+}
+
+function Set() {}
+
+var proto = map$1.prototype;
+
+Set.prototype = set.prototype = {
+  constructor: Set,
+  has: proto.has,
+  add: function(value) {
+    value += "";
+    this[prefix + value] = value;
+    return this;
+  },
+  remove: proto.remove,
+  clear: proto.clear,
+  values: proto.keys,
+  size: proto.size,
+  empty: proto.empty,
+  each: proto.each
+};
+
+function set(object, f) {
+  var set = new Set;
+
+  // Copy constructor.
+  if (object instanceof Set) object.each(function(value) { set.add(value); });
+
+  // Otherwise, assume it’s an array.
+  else if (object) {
+    var i = -1, n = object.length;
+    if (f == null) while (++i < n) set.add(object[i]);
+    else while (++i < n) set.add(f(object[i], i, object));
+  }
+
+  return set;
+}
+
+var keys = function(map) {
+  var keys = [];
+  for (var key in map) keys.push(key);
+  return keys;
+};
+
+var values = function(map) {
+  var values = [];
+  for (var key in map) values.push(map[key]);
+  return values;
+};
+
+var entries = function(map) {
+  var entries = [];
+  for (var key in map) entries.push({key: key, value: map[key]});
+  return entries;
+};
+
+var uniform = function(min, max) {
+  min = min == null ? 0 : +min;
+  max = max == null ? 1 : +max;
+  if (arguments.length === 1) max = min, min = 0;
+  else max -= min;
+  return function() {
+    return Math.random() * max + min;
+  };
+};
+
+var normal = function(mu, sigma) {
+  var x, r;
+  mu = mu == null ? 0 : +mu;
+  sigma = sigma == null ? 1 : +sigma;
+  return function() {
+    var y;
+
+    // If available, use the second previously-generated uniform random.
+    if (x != null) y = x, x = null;
+
+    // Otherwise, generate a new x and y.
+    else do {
+      x = Math.random() * 2 - 1;
+      y = Math.random() * 2 - 1;
+      r = x * x + y * y;
+    } while (!r || r > 1);
+
+    return mu + sigma * y * Math.sqrt(-2 * Math.log(r) / r);
+  };
+};
+
+var logNormal = function() {
+  var randomNormal = normal.apply(this, arguments);
+  return function() {
+    return Math.exp(randomNormal());
+  };
+};
+
+var irwinHall = function(n) {
+  return function() {
+    for (var sum = 0, i = 0; i < n; ++i) sum += Math.random();
+    return sum;
+  };
+};
+
+var bates = function(n) {
+  var randomIrwinHall = irwinHall(n);
+  return function() {
+    return randomIrwinHall() / n;
+  };
+};
+
+var exponential = function(lambda) {
+  return function() {
+    return -Math.log(1 - Math.random()) / lambda;
+  };
+};
+
+function linear(t) {
+  return +t;
+}
+
+function quadIn(t) {
+  return t * t;
+}
+
+function quadOut(t) {
+  return t * (2 - t);
+}
+
+function quadInOut(t) {
+  return ((t *= 2) <= 1 ? t * t : --t * (2 - t) + 1) / 2;
+}
+
+function cubicIn(t) {
+  return t * t * t;
+}
+
+function cubicOut(t) {
+  return --t * t * t + 1;
+}
+
+function cubicInOut(t) {
+  return ((t *= 2) <= 1 ? t * t * t : (t -= 2) * t * t + 2) / 2;
+}
+
+var exponent = 3;
+
+var polyIn = (function custom(e) {
+  e = +e;
+
+  function polyIn(t) {
+    return Math.pow(t, e);
+  }
+
+  polyIn.exponent = custom;
+
+  return polyIn;
+})(exponent);
+
+var polyOut = (function custom(e) {
+  e = +e;
+
+  function polyOut(t) {
+    return 1 - Math.pow(1 - t, e);
+  }
+
+  polyOut.exponent = custom;
+
+  return polyOut;
+})(exponent);
+
+var polyInOut = (function custom(e) {
+  e = +e;
+
+  function polyInOut(t) {
+    return ((t *= 2) <= 1 ? Math.pow(t, e) : 2 - Math.pow(2 - t, e)) / 2;
+  }
+
+  polyInOut.exponent = custom;
+
+  return polyInOut;
+})(exponent);
+
+var pi = Math.PI;
+var halfPi = pi / 2;
+
+function sinIn(t) {
+  return 1 - Math.cos(t * halfPi);
+}
+
+function sinOut(t) {
+  return Math.sin(t * halfPi);
+}
+
+function sinInOut(t) {
+  return (1 - Math.cos(pi * t)) / 2;
+}
+
+function expIn(t) {
+  return Math.pow(2, 10 * t - 10);
+}
+
+function expOut(t) {
+  return 1 - Math.pow(2, -10 * t);
+}
+
+function expInOut(t) {
+  return ((t *= 2) <= 1 ? Math.pow(2, 10 * t - 10) : 2 - Math.pow(2, 10 - 10 * t)) / 2;
+}
+
+function circleIn(t) {
+  return 1 - Math.sqrt(1 - t * t);
+}
+
+function circleOut(t) {
+  return Math.sqrt(1 - --t * t);
+}
+
+function circleInOut(t) {
+  return ((t *= 2) <= 1 ? 1 - Math.sqrt(1 - t * t) : Math.sqrt(1 - (t -= 2) * t) + 1) / 2;
+}
+
+var b1 = 4 / 11;
+var b2 = 6 / 11;
+var b3 = 8 / 11;
+var b4 = 3 / 4;
+var b5 = 9 / 11;
+var b6 = 10 / 11;
+var b7 = 15 / 16;
+var b8 = 21 / 22;
+var b9 = 63 / 64;
+var b0 = 1 / b1 / b1;
+
+function bounceIn(t) {
+  return 1 - bounceOut(1 - t);
+}
+
+function bounceOut(t) {
+  return (t = +t) < b1 ? b0 * t * t : t < b3 ? b0 * (t -= b2) * t + b4 : t < b6 ? b0 * (t -= b5) * t + b7 : b0 * (t -= b8) * t + b9;
+}
+
+function bounceInOut(t) {
+  return ((t *= 2) <= 1 ? 1 - bounceOut(1 - t) : bounceOut(t - 1) + 1) / 2;
+}
+
+var overshoot = 1.70158;
+
+var backIn = (function custom(s) {
+  s = +s;
+
+  function backIn(t) {
+    return t * t * ((s + 1) * t - s);
+  }
+
+  backIn.overshoot = custom;
+
+  return backIn;
+})(overshoot);
+
+var backOut = (function custom(s) {
+  s = +s;
+
+  function backOut(t) {
+    return --t * t * ((s + 1) * t + s) + 1;
+  }
+
+  backOut.overshoot = custom;
+
+  return backOut;
+})(overshoot);
+
+var backInOut = (function custom(s) {
+  s = +s;
+
+  function backInOut(t) {
+    return ((t *= 2) < 1 ? t * t * ((s + 1) * t - s) : (t -= 2) * t * ((s + 1) * t + s) + 2) / 2;
+  }
+
+  backInOut.overshoot = custom;
+
+  return backInOut;
+})(overshoot);
+
+var tau = 2 * Math.PI;
+var amplitude = 1;
+var period = 0.3;
+
+var elasticIn = (function custom(a, p) {
+  var s = Math.asin(1 / (a = Math.max(1, a))) * (p /= tau);
+
+  function elasticIn(t) {
+    return a * Math.pow(2, 10 * --t) * Math.sin((s - t) / p);
+  }
+
+  elasticIn.amplitude = function(a) { return custom(a, p * tau); };
+  elasticIn.period = function(p) { return custom(a, p); };
+
+  return elasticIn;
+})(amplitude, period);
+
+var elasticOut = (function custom(a, p) {
+  var s = Math.asin(1 / (a = Math.max(1, a))) * (p /= tau);
+
+  function elasticOut(t) {
+    return 1 - a * Math.pow(2, -10 * (t = +t)) * Math.sin((t + s) / p);
+  }
+
+  elasticOut.amplitude = function(a) { return custom(a, p * tau); };
+  elasticOut.period = function(p) { return custom(a, p); };
+
+  return elasticOut;
+})(amplitude, period);
+
+var elasticInOut = (function custom(a, p) {
+  var s = Math.asin(1 / (a = Math.max(1, a))) * (p /= tau);
+
+  function elasticInOut(t) {
+    return ((t = t * 2 - 1) < 0
+        ? a * Math.pow(2, 10 * t) * Math.sin((s - t) / p)
+        : 2 - a * Math.pow(2, -10 * t) * Math.sin((s + t) / p)) / 2;
+  }
+
+  elasticInOut.amplitude = function(a) { return custom(a, p * tau); };
+  elasticInOut.period = function(p) { return custom(a, p); };
+
+  return elasticInOut;
+})(amplitude, period);
+
+var area = function(polygon) {
+  var i = -1,
+      n = polygon.length,
+      a,
+      b = polygon[n - 1],
+      area = 0;
+
+  while (++i < n) {
+    a = b;
+    b = polygon[i];
+    area += a[1] * b[0] - a[0] * b[1];
+  }
+
+  return area / 2;
+};
+
+var centroid = function(polygon) {
+  var i = -1,
+      n = polygon.length,
+      x = 0,
+      y = 0,
+      a,
+      b = polygon[n - 1],
+      c,
+      k = 0;
+
+  while (++i < n) {
+    a = b;
+    b = polygon[i];
+    k += c = a[0] * b[1] - b[0] * a[1];
+    x += (a[0] + b[0]) * c;
+    y += (a[1] + b[1]) * c;
+  }
+
+  return k *= 3, [x / k, y / k];
+};
+
+// Returns the 2D cross product of AB and AC vectors, i.e., the z-component of
+// the 3D cross product in a quadrant I Cartesian coordinate system (+x is
+// right, +y is up). Returns a positive value if ABC is counter-clockwise,
+// negative if clockwise, and zero if the points are collinear.
+var cross = function(a, b, c) {
+  return (b[0] - a[0]) * (c[1] - a[1]) - (b[1] - a[1]) * (c[0] - a[0]);
+};
+
+function lexicographicOrder(a, b) {
+  return a[0] - b[0] || a[1] - b[1];
+}
+
+// Computes the upper convex hull per the monotone chain algorithm.
+// Assumes points.length >= 3, is sorted by x, unique in y.
+// Returns an array of indices into points in left-to-right order.
+function computeUpperHullIndexes(points) {
+  var n = points.length,
+      indexes = [0, 1],
+      size = 2;
+
+  for (var i = 2; i < n; ++i) {
+    while (size > 1 && cross(points[indexes[size - 2]], points[indexes[size - 1]], points[i]) <= 0) --size;
+    indexes[size++] = i;
+  }
+
+  return indexes.slice(0, size); // remove popped points
+}
+
+var hull = function(points) {
+  if ((n = points.length) < 3) return null;
+
+  var i,
+      n,
+      sortedPoints = new Array(n),
+      flippedPoints = new Array(n);
+
+  for (i = 0; i < n; ++i) sortedPoints[i] = [+points[i][0], +points[i][1], i];
+  sortedPoints.sort(lexicographicOrder);
+  for (i = 0; i < n; ++i) flippedPoints[i] = [sortedPoints[i][0], -sortedPoints[i][1]];
+
+  var upperIndexes = computeUpperHullIndexes(sortedPoints),
+      lowerIndexes = computeUpperHullIndexes(flippedPoints);
+
+  // Construct the hull polygon, removing possible duplicate endpoints.
+  var skipLeft = lowerIndexes[0] === upperIndexes[0],
+      skipRight = lowerIndexes[lowerIndexes.length - 1] === upperIndexes[upperIndexes.length - 1],
+      hull = [];
+
+  // Add upper hull in right-to-l order.
+  // Then add lower hull in left-to-right order.
+  for (i = upperIndexes.length - 1; i >= 0; --i) hull.push(points[sortedPoints[upperIndexes[i]][2]]);
+  for (i = +skipLeft; i < lowerIndexes.length - skipRight; ++i) hull.push(points[sortedPoints[lowerIndexes[i]][2]]);
+
+  return hull;
+};
+
+var contains = function(polygon, point) {
+  var n = polygon.length,
+      p = polygon[n - 1],
+      x = point[0], y = point[1],
+      x0 = p[0], y0 = p[1],
+      x1, y1,
+      inside = false;
+
+  for (var i = 0; i < n; ++i) {
+    p = polygon[i], x1 = p[0], y1 = p[1];
+    if (((y1 > y) !== (y0 > y)) && (x < (x0 - x1) * (y - y1) / (y0 - y1) + x1)) inside = !inside;
+    x0 = x1, y0 = y1;
+  }
+
+  return inside;
+};
+
+var length$1 = function(polygon) {
+  var i = -1,
+      n = polygon.length,
+      b = polygon[n - 1],
+      xa,
+      ya,
+      xb = b[0],
+      yb = b[1],
+      perimeter = 0;
+
+  while (++i < n) {
+    xa = xb;
+    ya = yb;
+    b = polygon[i];
+    xb = b[0];
+    yb = b[1];
+    xa -= xb;
+    ya -= yb;
+    perimeter += Math.sqrt(xa * xa + ya * ya);
+  }
+
+  return perimeter;
+};
+
+var pi$1 = Math.PI;
+var tau$1 = 2 * pi$1;
+var epsilon = 1e-6;
+var tauEpsilon = tau$1 - epsilon;
+
+function Path() {
+  this._x0 = this._y0 = // start of current subpath
+  this._x1 = this._y1 = null; // end of current subpath
+  this._ = [];
+}
+
+function path() {
+  return new Path;
+}
+
+Path.prototype = path.prototype = {
+  constructor: Path,
+  moveTo: function(x, y) {
+    this._.push("M", this._x0 = this._x1 = +x, ",", this._y0 = this._y1 = +y);
+  },
+  closePath: function() {
+    if (this._x1 !== null) {
+      this._x1 = this._x0, this._y1 = this._y0;
+      this._.push("Z");
+    }
+  },
+  lineTo: function(x, y) {
+    this._.push("L", this._x1 = +x, ",", this._y1 = +y);
+  },
+  quadraticCurveTo: function(x1, y1, x, y) {
+    this._.push("Q", +x1, ",", +y1, ",", this._x1 = +x, ",", this._y1 = +y);
+  },
+  bezierCurveTo: function(x1, y1, x2, y2, x, y) {
+    this._.push("C", +x1, ",", +y1, ",", +x2, ",", +y2, ",", this._x1 = +x, ",", this._y1 = +y);
+  },
+  arcTo: function(x1, y1, x2, y2, r) {
+    x1 = +x1, y1 = +y1, x2 = +x2, y2 = +y2, r = +r;
+    var x0 = this._x1,
+        y0 = this._y1,
+        x21 = x2 - x1,
+        y21 = y2 - y1,
+        x01 = x0 - x1,
+        y01 = y0 - y1,
+        l01_2 = x01 * x01 + y01 * y01;
+
+    // Is the radius negative? Error.
+    if (r < 0) throw new Error("negative radius: " + r);
+
+    // Is this path empty? Move to (x1,y1).
+    if (this._x1 === null) {
+      this._.push(
+        "M", this._x1 = x1, ",", this._y1 = y1
+      );
+    }
+
+    // Or, is (x1,y1) coincident with (x0,y0)? Do nothing.
+    else if (!(l01_2 > epsilon)) {}
+
+    // Or, are (x0,y0), (x1,y1) and (x2,y2) collinear?
+    // Equivalently, is (x1,y1) coincident with (x2,y2)?
+    // Or, is the radius zero? Line to (x1,y1).
+    else if (!(Math.abs(y01 * x21 - y21 * x01) > epsilon) || !r) {
+      this._.push(
+        "L", this._x1 = x1, ",", this._y1 = y1
+      );
+    }
+
+    // Otherwise, draw an arc!
+    else {
+      var x20 = x2 - x0,
+          y20 = y2 - y0,
+          l21_2 = x21 * x21 + y21 * y21,
+          l20_2 = x20 * x20 + y20 * y20,
+          l21 = Math.sqrt(l21_2),
+          l01 = Math.sqrt(l01_2),
+          l = r * Math.tan((pi$1 - Math.acos((l21_2 + l01_2 - l20_2) / (2 * l21 * l01))) / 2),
+          t01 = l / l01,
+          t21 = l / l21;
+
+      // If the start tangent is not coincident with (x0,y0), line to.
+      if (Math.abs(t01 - 1) > epsilon) {
+        this._.push(
+          "L", x1 + t01 * x01, ",", y1 + t01 * y01
+        );
+      }
+
+      this._.push(
+        "A", r, ",", r, ",0,0,", +(y01 * x20 > x01 * y20), ",", this._x1 = x1 + t21 * x21, ",", this._y1 = y1 + t21 * y21
+      );
+    }
+  },
+  arc: function(x, y, r, a0, a1, ccw) {
+    x = +x, y = +y, r = +r;
+    var dx = r * Math.cos(a0),
+        dy = r * Math.sin(a0),
+        x0 = x + dx,
+        y0 = y + dy,
+        cw = 1 ^ ccw,
+        da = ccw ? a0 - a1 : a1 - a0;
+
+    // Is the radius negative? Error.
+    if (r < 0) throw new Error("negative radius: " + r);
+
+    // Is this path empty? Move to (x0,y0).
+    if (this._x1 === null) {
+      this._.push(
+        "M", x0, ",", y0
+      );
+    }
+
+    // Or, is (x0,y0) not coincident with the previous point? Line to (x0,y0).
+    else if (Math.abs(this._x1 - x0) > epsilon || Math.abs(this._y1 - y0) > epsilon) {
+      this._.push(
+        "L", x0, ",", y0
+      );
+    }
+
+    // Is this arc empty? We’re done.
+    if (!r) return;
+
+    // Is this a complete circle? Draw two arcs to complete the circle.
+    if (da > tauEpsilon) {
+      this._.push(
+        "A", r, ",", r, ",0,1,", cw, ",", x - dx, ",", y - dy,
+        "A", r, ",", r, ",0,1,", cw, ",", this._x1 = x0, ",", this._y1 = y0
+      );
+    }
+
+    // Otherwise, draw an arc!
+    else {
+      if (da < 0) da = da % tau$1 + tau$1;
+      this._.push(
+        "A", r, ",", r, ",0,", +(da >= pi$1), ",", cw, ",", this._x1 = x + r * Math.cos(a1), ",", this._y1 = y + r * Math.sin(a1)
+      );
+    }
+  },
+  rect: function(x, y, w, h) {
+    this._.push("M", this._x0 = this._x1 = +x, ",", this._y0 = this._y1 = +y, "h", +w, "v", +h, "h", -w, "Z");
+  },
+  toString: function() {
+    return this._.join("");
+  }
+};
+
+var tree_add = function(d) {
+  var x = +this._x.call(null, d),
+      y = +this._y.call(null, d);
+  return add(this.cover(x, y), x, y, d);
+};
+
+function add(tree, x, y, d) {
+  if (isNaN(x) || isNaN(y)) return tree; // ignore invalid points
+
+  var parent,
+      node = tree._root,
+      leaf = {data: d},
+      x0 = tree._x0,
+      y0 = tree._y0,
+      x1 = tree._x1,
+      y1 = tree._y1,
+      xm,
+      ym,
+      xp,
+      yp,
+      right,
+      bottom,
+      i,
+      j;
+
+  // If the tree is empty, initialize the root as a leaf.
+  if (!node) return tree._root = leaf, tree;
+
+  // Find the existing leaf for the new point, or add it.
+  while (node.length) {
+    if (right = x >= (xm = (x0 + x1) / 2)) x0 = xm; else x1 = xm;
+    if (bottom = y >= (ym = (y0 + y1) / 2)) y0 = ym; else y1 = ym;
+    if (parent = node, !(node = node[i = bottom << 1 | right])) return parent[i] = leaf, tree;
+  }
+
+  // Is the new point is exactly coincident with the existing point?
+  xp = +tree._x.call(null, node.data);
+  yp = +tree._y.call(null, node.data);
+  if (x === xp && y === yp) return leaf.next = node, parent ? parent[i] = leaf : tree._root = leaf, tree;
+
+  // Otherwise, split the leaf node until the old and new point are separated.
+  do {
+    parent = parent ? parent[i] = new Array(4) : tree._root = new Array(4);
+    if (right = x >= (xm = (x0 + x1) / 2)) x0 = xm; else x1 = xm;
+    if (bottom = y >= (ym = (y0 + y1) / 2)) y0 = ym; else y1 = ym;
+  } while ((i = bottom << 1 | right) === (j = (yp >= ym) << 1 | (xp >= xm)));
+  return parent[j] = node, parent[i] = leaf, tree;
+}
+
+function addAll(data) {
+  var d, i, n = data.length,
+      x,
+      y,
+      xz = new Array(n),
+      yz = new Array(n),
+      x0 = Infinity,
+      y0 = Infinity,
+      x1 = -Infinity,
+      y1 = -Infinity;
+
+  // Compute the points and their extent.
+  for (i = 0; i < n; ++i) {
+    if (isNaN(x = +this._x.call(null, d = data[i])) || isNaN(y = +this._y.call(null, d))) continue;
+    xz[i] = x;
+    yz[i] = y;
+    if (x < x0) x0 = x;
+    if (x > x1) x1 = x;
+    if (y < y0) y0 = y;
+    if (y > y1) y1 = y;
+  }
+
+  // If there were no (valid) points, inherit the existing extent.
+  if (x1 < x0) x0 = this._x0, x1 = this._x1;
+  if (y1 < y0) y0 = this._y0, y1 = this._y1;
+
+  // Expand the tree to cover the new points.
+  this.cover(x0, y0).cover(x1, y1);
+
+  // Add the new points.
+  for (i = 0; i < n; ++i) {
+    add(this, xz[i], yz[i], data[i]);
+  }
+
+  return this;
+}
+
+var tree_cover = function(x, y) {
+  if (isNaN(x = +x) || isNaN(y = +y)) return this; // ignore invalid points
+
+  var x0 = this._x0,
+      y0 = this._y0,
+      x1 = this._x1,
+      y1 = this._y1;
+
+  // If the quadtree has no extent, initialize them.
+  // Integer extent are necessary so that if we later double the extent,
+  // the existing quadrant boundaries don’t change due to floating point error!
+  if (isNaN(x0)) {
+    x1 = (x0 = Math.floor(x)) + 1;
+    y1 = (y0 = Math.floor(y)) + 1;
+  }
+
+  // Otherwise, double repeatedly to cover.
+  else if (x0 > x || x > x1 || y0 > y || y > y1) {
+    var z = x1 - x0,
+        node = this._root,
+        parent,
+        i;
+
+    switch (i = (y < (y0 + y1) / 2) << 1 | (x < (x0 + x1) / 2)) {
+      case 0: {
+        do parent = new Array(4), parent[i] = node, node = parent;
+        while (z *= 2, x1 = x0 + z, y1 = y0 + z, x > x1 || y > y1);
+        break;
+      }
+      case 1: {
+        do parent = new Array(4), parent[i] = node, node = parent;
+        while (z *= 2, x0 = x1 - z, y1 = y0 + z, x0 > x || y > y1);
+        break;
+      }
+      case 2: {
+        do parent = new Array(4), parent[i] = node, node = parent;
+        while (z *= 2, x1 = x0 + z, y0 = y1 - z, x > x1 || y0 > y);
+        break;
+      }
+      case 3: {
+        do parent = new Array(4), parent[i] = node, node = parent;
+        while (z *= 2, x0 = x1 - z, y0 = y1 - z, x0 > x || y0 > y);
+        break;
+      }
+    }
+
+    if (this._root && this._root.length) this._root = node;
+  }
+
+  // If the quadtree covers the point already, just return.
+  else return this;
+
+  this._x0 = x0;
+  this._y0 = y0;
+  this._x1 = x1;
+  this._y1 = y1;
+  return this;
+};
+
+var tree_data = function() {
+  var data = [];
+  this.visit(function(node) {
+    if (!node.length) do data.push(node.data); while (node = node.next)
+  });
+  return data;
+};
+
+var tree_extent = function(_) {
+  return arguments.length
+      ? this.cover(+_[0][0], +_[0][1]).cover(+_[1][0], +_[1][1])
+      : isNaN(this._x0) ? undefined : [[this._x0, this._y0], [this._x1, this._y1]];
+};
+
+var Quad = function(node, x0, y0, x1, y1) {
+  this.node = node;
+  this.x0 = x0;
+  this.y0 = y0;
+  this.x1 = x1;
+  this.y1 = y1;
+};
+
+var tree_find = function(x, y, radius) {
+  var data,
+      x0 = this._x0,
+      y0 = this._y0,
+      x1,
+      y1,
+      x2,
+      y2,
+      x3 = this._x1,
+      y3 = this._y1,
+      quads = [],
+      node = this._root,
+      q,
+      i;
+
+  if (node) quads.push(new Quad(node, x0, y0, x3, y3));
+  if (radius == null) radius = Infinity;
+  else {
+    x0 = x - radius, y0 = y - radius;
+    x3 = x + radius, y3 = y + radius;
+    radius *= radius;
+  }
+
+  while (q = quads.pop()) {
+
+    // Stop searching if this quadrant can’t contain a closer node.
+    if (!(node = q.node)
+        || (x1 = q.x0) > x3
+        || (y1 = q.y0) > y3
+        || (x2 = q.x1) < x0
+        || (y2 = q.y1) < y0) continue;
+
+    // Bisect the current quadrant.
+    if (node.length) {
+      var xm = (x1 + x2) / 2,
+          ym = (y1 + y2) / 2;
+
+      quads.push(
+        new Quad(node[3], xm, ym, x2, y2),
+        new Quad(node[2], x1, ym, xm, y2),
+        new Quad(node[1], xm, y1, x2, ym),
+        new Quad(node[0], x1, y1, xm, ym)
+      );
+
+      // Visit the closest quadrant first.
+      if (i = (y >= ym) << 1 | (x >= xm)) {
+        q = quads[quads.length - 1];
+        quads[quads.length - 1] = quads[quads.length - 1 - i];
+        quads[quads.length - 1 - i] = q;
+      }
+    }
+
+    // Visit this point. (Visiting coincident points isn’t necessary!)
+    else {
+      var dx = x - +this._x.call(null, node.data),
+          dy = y - +this._y.call(null, node.data),
+          d2 = dx * dx + dy * dy;
+      if (d2 < radius) {
+        var d = Math.sqrt(radius = d2);
+        x0 = x - d, y0 = y - d;
+        x3 = x + d, y3 = y + d;
+        data = node.data;
+      }
+    }
+  }
+
+  return data;
+};
+
+var tree_remove = function(d) {
+  if (isNaN(x = +this._x.call(null, d)) || isNaN(y = +this._y.call(null, d))) return this; // ignore invalid points
+
+  var parent,
+      node = this._root,
+      retainer,
+      previous,
+      next,
+      x0 = this._x0,
+      y0 = this._y0,
+      x1 = this._x1,
+      y1 = this._y1,
+      x,
+      y,
+      xm,
+      ym,
+      right,
+      bottom,
+      i,
+      j;
+
+  // If the tree is empty, initialize the root as a leaf.
+  if (!node) return this;
+
+  // Find the leaf node for the point.
+  // While descending, also retain the deepest parent with a non-removed sibling.
+  if (node.length) while (true) {
+    if (right = x >= (xm = (x0 + x1) / 2)) x0 = xm; else x1 = xm;
+    if (bottom = y >= (ym = (y0 + y1) / 2)) y0 = ym; else y1 = ym;
+    if (!(parent = node, node = node[i = bottom << 1 | right])) return this;
+    if (!node.length) break;
+    if (parent[(i + 1) & 3] || parent[(i + 2) & 3] || parent[(i + 3) & 3]) retainer = parent, j = i;
+  }
+
+  // Find the point to remove.
+  while (node.data !== d) if (!(previous = node, node = node.next)) return this;
+  if (next = node.next) delete node.next;
+
+  // If there are multiple coincident points, remove just the point.
+  if (previous) return (next ? previous.next = next : delete previous.next), this;
+
+  // If this is the root point, remove it.
+  if (!parent) return this._root = next, this;
+
+  // Remove this leaf.
+  next ? parent[i] = next : delete parent[i];
+
+  // If the parent now contains exactly one leaf, collapse superfluous parents.
+  if ((node = parent[0] || parent[1] || parent[2] || parent[3])
+      && node === (parent[3] || parent[2] || parent[1] || parent[0])
+      && !node.length) {
+    if (retainer) retainer[j] = node;
+    else this._root = node;
+  }
+
+  return this;
+};
+
+function removeAll(data) {
+  for (var i = 0, n = data.length; i < n; ++i) this.remove(data[i]);
+  return this;
+}
+
+var tree_root = function() {
+  return this._root;
+};
+
+var tree_size = function() {
+  var size = 0;
+  this.visit(function(node) {
+    if (!node.length) do ++size; while (node = node.next)
+  });
+  return size;
+};
+
+var tree_visit = function(callback) {
+  var quads = [], q, node = this._root, child, x0, y0, x1, y1;
+  if (node) quads.push(new Quad(node, this._x0, this._y0, this._x1, this._y1));
+  while (q = quads.pop()) {
+    if (!callback(node = q.node, x0 = q.x0, y0 = q.y0, x1 = q.x1, y1 = q.y1) && node.length) {
+      var xm = (x0 + x1) / 2, ym = (y0 + y1) / 2;
+      if (child = node[3]) quads.push(new Quad(child, xm, ym, x1, y1));
+      if (child = node[2]) quads.push(new Quad(child, x0, ym, xm, y1));
+      if (child = node[1]) quads.push(new Quad(child, xm, y0, x1, ym));
+      if (child = node[0]) quads.push(new Quad(child, x0, y0, xm, ym));
+    }
+  }
+  return this;
+};
+
+var tree_visitAfter = function(callback) {
+  var quads = [], next = [], q;
+  if (this._root) quads.push(new Quad(this._root, this._x0, this._y0, this._x1, this._y1));
+  while (q = quads.pop()) {
+    var node = q.node;
+    if (node.length) {
+      var child, x0 = q.x0, y0 = q.y0, x1 = q.x1, y1 = q.y1, xm = (x0 + x1) / 2, ym = (y0 + y1) / 2;
+      if (child = node[0]) quads.push(new Quad(child, x0, y0, xm, ym));
+      if (child = node[1]) quads.push(new Quad(child, xm, y0, x1, ym));
+      if (child = node[2]) quads.push(new Quad(child, x0, ym, xm, y1));
+      if (child = node[3]) quads.push(new Quad(child, xm, ym, x1, y1));
+    }
+    next.push(q);
+  }
+  while (q = next.pop()) {
+    callback(q.node, q.x0, q.y0, q.x1, q.y1);
+  }
+  return this;
+};
+
+function defaultX(d) {
+  return d[0];
+}
+
+var tree_x = function(_) {
+  return arguments.length ? (this._x = _, this) : this._x;
+};
+
+function defaultY(d) {
+  return d[1];
+}
+
+var tree_y = function(_) {
+  return arguments.length ? (this._y = _, this) : this._y;
+};
+
+function quadtree(nodes, x, y) {
+  var tree = new Quadtree(x == null ? defaultX : x, y == null ? defaultY : y, NaN, NaN, NaN, NaN);
+  return nodes == null ? tree : tree.addAll(nodes);
+}
+
+function Quadtree(x, y, x0, y0, x1, y1) {
+  this._x = x;
+  this._y = y;
+  this._x0 = x0;
+  this._y0 = y0;
+  this._x1 = x1;
+  this._y1 = y1;
+  this._root = undefined;
+}
+
+function leaf_copy(leaf) {
+  var copy = {data: leaf.data}, next = copy;
+  while (leaf = leaf.next) next = next.next = {data: leaf.data};
+  return copy;
+}
+
+var treeProto = quadtree.prototype = Quadtree.prototype;
+
+treeProto.copy = function() {
+  var copy = new Quadtree(this._x, this._y, this._x0, this._y0, this._x1, this._y1),
+      node = this._root,
+      nodes,
+      child;
+
+  if (!node) return copy;
+
+  if (!node.length) return copy._root = leaf_copy(node), copy;
+
+  nodes = [{source: node, target: copy._root = new Array(4)}];
+  while (node = nodes.pop()) {
+    for (var i = 0; i < 4; ++i) {
+      if (child = node.source[i]) {
+        if (child.length) nodes.push({source: child, target: node.target[i] = new Array(4)});
+        else node.target[i] = leaf_copy(child);
+      }
+    }
+  }
+
+  return copy;
+};
+
+treeProto.add = tree_add;
+treeProto.addAll = addAll;
+treeProto.cover = tree_cover;
+treeProto.data = tree_data;
+treeProto.extent = tree_extent;
+treeProto.find = tree_find;
+treeProto.remove = tree_remove;
+treeProto.removeAll = removeAll;
+treeProto.root = tree_root;
+treeProto.size = tree_size;
+treeProto.visit = tree_visit;
+treeProto.visitAfter = tree_visitAfter;
+treeProto.x = tree_x;
+treeProto.y = tree_y;
+
+var slice$1 = [].slice;
+
+var noabort = {};
+
+function Queue(size) {
+  if (!(size >= 1)) throw new Error;
+  this._size = size;
+  this._call =
+  this._error = null;
+  this._tasks = [];
+  this._data = [];
+  this._waiting =
+  this._active =
+  this._ended =
+  this._start = 0; // inside a synchronous task callback?
+}
+
+Queue.prototype = queue.prototype = {
+  constructor: Queue,
+  defer: function(callback) {
+    if (typeof callback !== "function" || this._call) throw new Error;
+    if (this._error != null) return this;
+    var t = slice$1.call(arguments, 1);
+    t.push(callback);
+    ++this._waiting, this._tasks.push(t);
+    poke(this);
+    return this;
+  },
+  abort: function() {
+    if (this._error == null) abort(this, new Error("abort"));
+    return this;
+  },
+  await: function(callback) {
+    if (typeof callback !== "function" || this._call) throw new Error;
+    this._call = function(error, results) { callback.apply(null, [error].concat(results)); };
+    maybeNotify(this);
+    return this;
+  },
+  awaitAll: function(callback) {
+    if (typeof callback !== "function" || this._call) throw new Error;
+    this._call = callback;
+    maybeNotify(this);
+    return this;
+  }
+};
+
+function poke(q) {
+  if (!q._start) {
+    try { start(q); } // let the current task complete
+    catch (e) {
+      if (q._tasks[q._ended + q._active - 1]) abort(q, e); // task errored synchronously
+      else if (!q._data) throw e; // await callback errored synchronously
+    }
+  }
+}
+
+function start(q) {
+  while (q._start = q._waiting && q._active < q._size) {
+    var i = q._ended + q._active,
+        t = q._tasks[i],
+        j = t.length - 1,
+        c = t[j];
+    t[j] = end(q, i);
+    --q._waiting, ++q._active;
+    t = c.apply(null, t);
+    if (!q._tasks[i]) continue; // task finished synchronously
+    q._tasks[i] = t || noabort;
+  }
+}
+
+function end(q, i) {
+  return function(e, r) {
+    if (!q._tasks[i]) return; // ignore multiple callbacks
+    --q._active, ++q._ended;
+    q._tasks[i] = null;
+    if (q._error != null) return; // ignore secondary errors
+    if (e != null) {
+      abort(q, e);
+    } else {
+      q._data[i] = r;
+      if (q._waiting) poke(q);
+      else maybeNotify(q);
+    }
+  };
+}
+
+function abort(q, e) {
+  var i = q._tasks.length, t;
+  q._error = e; // ignore active callbacks
+  q._data = undefined; // allow gc
+  q._waiting = NaN; // prevent starting
+
+  while (--i >= 0) {
+    if (t = q._tasks[i]) {
+      q._tasks[i] = null;
+      if (t.abort) {
+        try { t.abort(); }
+        catch (e) { /* ignore */ }
+      }
+    }
+  }
+
+  q._active = NaN; // allow notification
+  maybeNotify(q);
+}
+
+function maybeNotify(q) {
+  if (!q._active && q._call) {
+    var d = q._data;
+    q._data = undefined; // allow gc
+    q._call(q._error, d);
+  }
+}
+
+function queue(concurrency) {
+  return new Queue(arguments.length ? +concurrency : Infinity);
+}
+
+var constant$2 = function(x) {
+  return function constant() {
+    return x;
+  };
+};
+
+var epsilon$1 = 1e-12;
+var pi$2 = Math.PI;
+var halfPi$1 = pi$2 / 2;
+var tau$2 = 2 * pi$2;
+
+function arcInnerRadius(d) {
+  return d.innerRadius;
+}
+
+function arcOuterRadius(d) {
+  return d.outerRadius;
+}
+
+function arcStartAngle(d) {
+  return d.startAngle;
+}
+
+function arcEndAngle(d) {
+  return d.endAngle;
+}
+
+function arcPadAngle(d) {
+  return d && d.padAngle; // Note: optional!
+}
+
+function asin(x) {
+  return x >= 1 ? halfPi$1 : x <= -1 ? -halfPi$1 : Math.asin(x);
+}
+
+function intersect(x0, y0, x1, y1, x2, y2, x3, y3) {
+  var x10 = x1 - x0, y10 = y1 - y0,
+      x32 = x3 - x2, y32 = y3 - y2,
+      t = (x32 * (y0 - y2) - y32 * (x0 - x2)) / (y32 * x10 - x32 * y10);
+  return [x0 + t * x10, y0 + t * y10];
+}
+
+// Compute perpendicular offset line of length rc.
+// http://mathworld.wolfram.com/Circle-LineIntersection.html
+function cornerTangents(x0, y0, x1, y1, r1, rc, cw) {
+  var x01 = x0 - x1,
+      y01 = y0 - y1,
+      lo = (cw ? rc : -rc) / Math.sqrt(x01 * x01 + y01 * y01),
+      ox = lo * y01,
+      oy = -lo * x01,
+      x11 = x0 + ox,
+      y11 = y0 + oy,
+      x10 = x1 + ox,
+      y10 = y1 + oy,
+      x00 = (x11 + x10) / 2,
+      y00 = (y11 + y10) / 2,
+      dx = x10 - x11,
+      dy = y10 - y11,
+      d2 = dx * dx + dy * dy,
+      r = r1 - rc,
+      D = x11 * y10 - x10 * y11,
+      d = (dy < 0 ? -1 : 1) * Math.sqrt(Math.max(0, r * r * d2 - D * D)),
+      cx0 = (D * dy - dx * d) / d2,
+      cy0 = (-D * dx - dy * d) / d2,
+      cx1 = (D * dy + dx * d) / d2,
+      cy1 = (-D * dx + dy * d) / d2,
+      dx0 = cx0 - x00,
+      dy0 = cy0 - y00,
+      dx1 = cx1 - x00,
+      dy1 = cy1 - y00;
+
+  // Pick the closer of the two intersection points.
+  // TODO Is there a faster way to determine which intersection to use?
+  if (dx0 * dx0 + dy0 * dy0 > dx1 * dx1 + dy1 * dy1) cx0 = cx1, cy0 = cy1;
+
+  return {
+    cx: cx0,
+    cy: cy0,
+    x01: -ox,
+    y01: -oy,
+    x11: cx0 * (r1 / r - 1),
+    y11: cy0 * (r1 / r - 1)
+  };
+}
+
+var arc = function() {
+  var innerRadius = arcInnerRadius,
+      outerRadius = arcOuterRadius,
+      cornerRadius = constant$2(0),
+      padRadius = null,
+      startAngle = arcStartAngle,
+      endAngle = arcEndAngle,
+      padAngle = arcPadAngle,
+      context = null;
+
+  function arc() {
+    var buffer,
+        r,
+        r0 = +innerRadius.apply(this, arguments),
+        r1 = +outerRadius.apply(this, arguments),
+        a0 = startAngle.apply(this, arguments) - halfPi$1,
+        a1 = endAngle.apply(this, arguments) - halfPi$1,
+        da = Math.abs(a1 - a0),
+        cw = a1 > a0;
+
+    if (!context) context = buffer = path();
+
+    // Ensure that the outer radius is always larger than the inner radius.
+    if (r1 < r0) r = r1, r1 = r0, r0 = r;
+
+    // Is it a point?
+    if (!(r1 > epsilon$1)) context.moveTo(0, 0);
+
+    // Or is it a circle or annulus?
+    else if (da > tau$2 - epsilon$1) {
+      context.moveTo(r1 * Math.cos(a0), r1 * Math.sin(a0));
+      context.arc(0, 0, r1, a0, a1, !cw);
+      if (r0 > epsilon$1) {
+        context.moveTo(r0 * Math.cos(a1), r0 * Math.sin(a1));
+        context.arc(0, 0, r0, a1, a0, cw);
+      }
+    }
+
+    // Or is it a circular or annular sector?
+    else {
+      var a01 = a0,
+          a11 = a1,
+          a00 = a0,
+          a10 = a1,
+          da0 = da,
+          da1 = da,
+          ap = padAngle.apply(this, arguments) / 2,
+          rp = (ap > epsilon$1) && (padRadius ? +padRadius.apply(this, arguments) : Math.sqrt(r0 * r0 + r1 * r1)),
+          rc = Math.min(Math.abs(r1 - r0) / 2, +cornerRadius.apply(this, arguments)),
+          rc0 = rc,
+          rc1 = rc,
+          t0,
+          t1;
+
+      // Apply padding? Note that since r1 ≥ r0, da1 ≥ da0.
+      if (rp > epsilon$1) {
+        var p0 = asin(rp / r0 * Math.sin(ap)),
+            p1 = asin(rp / r1 * Math.sin(ap));
+        if ((da0 -= p0 * 2) > epsilon$1) p0 *= (cw ? 1 : -1), a00 += p0, a10 -= p0;
+        else da0 = 0, a00 = a10 = (a0 + a1) / 2;
+        if ((da1 -= p1 * 2) > epsilon$1) p1 *= (cw ? 1 : -1), a01 += p1, a11 -= p1;
+        else da1 = 0, a01 = a11 = (a0 + a1) / 2;
+      }
+
+      var x01 = r1 * Math.cos(a01),
+          y01 = r1 * Math.sin(a01),
+          x10 = r0 * Math.cos(a10),
+          y10 = r0 * Math.sin(a10);
+
+      // Apply rounded corners?
+      if (rc > epsilon$1) {
+        var x11 = r1 * Math.cos(a11),
+            y11 = r1 * Math.sin(a11),
+            x00 = r0 * Math.cos(a00),
+            y00 = r0 * Math.sin(a00);
+
+        // Restrict the corner radius according to the sector angle.
+        if (da < pi$2) {
+          var oc = da0 > epsilon$1 ? intersect(x01, y01, x00, y00, x11, y11, x10, y10) : [x10, y10],
+              ax = x01 - oc[0],
+              ay = y01 - oc[1],
+              bx = x11 - oc[0],
+              by = y11 - oc[1],
+              kc = 1 / Math.sin(Math.acos((ax * bx + ay * by) / (Math.sqrt(ax * ax + ay * ay) * Math.sqrt(bx * bx + by * by))) / 2),
+              lc = Math.sqrt(oc[0] * oc[0] + oc[1] * oc[1]);
+          rc0 = Math.min(rc, (r0 - lc) / (kc - 1));
+          rc1 = Math.min(rc, (r1 - lc) / (kc + 1));
+        }
+      }
+
+      // Is the sector collapsed to a line?
+      if (!(da1 > epsilon$1)) context.moveTo(x01, y01);
+
+      // Does the sector’s outer ring have rounded corners?
+      else if (rc1 > epsilon$1) {
+        t0 = cornerTangents(x00, y00, x01, y01, r1, rc1, cw);
+        t1 = cornerTangents(x11, y11, x10, y10, r1, rc1, cw);
+
+        context.moveTo(t0.cx + t0.x01, t0.cy + t0.y01);
+
+        // Have the corners merged?
+        if (rc1 < rc) context.arc(t0.cx, t0.cy, rc1, Math.atan2(t0.y01, t0.x01), Math.atan2(t1.y01, t1.x01), !cw);
+
+        // Otherwise, draw the two corners and the ring.
+        else {
+          context.arc(t0.cx, t0.cy, rc1, Math.atan2(t0.y01, t0.x01), Math.atan2(t0.y11, t0.x11), !cw);
+          context.arc(0, 0, r1, Math.atan2(t0.cy + t0.y11, t0.cx + t0.x11), Math.atan2(t1.cy + t1.y11, t1.cx + t1.x11), !cw);
+          context.arc(t1.cx, t1.cy, rc1, Math.atan2(t1.y11, t1.x11), Math.atan2(t1.y01, t1.x01), !cw);
+        }
+      }
+
+      // Or is the outer ring just a circular arc?
+      else context.moveTo(x01, y01), context.arc(0, 0, r1, a01, a11, !cw);
+
+      // Is there no inner ring, and it’s a circular sector?
+      // Or perhaps it’s an annular sector collapsed due to padding?
+      if (!(r0 > epsilon$1) || !(da0 > epsilon$1)) context.lineTo(x10, y10);
+
+      // Does the sector’s inner ring (or point) have rounded corners?
+      else if (rc0 > epsilon$1) {
+        t0 = cornerTangents(x10, y10, x11, y11, r0, -rc0, cw);
+        t1 = cornerTangents(x01, y01, x00, y00, r0, -rc0, cw);
+
+        context.lineTo(t0.cx + t0.x01, t0.cy + t0.y01);
+
+        // Have the corners merged?
+        if (rc0 < rc) context.arc(t0.cx, t0.cy, rc0, Math.atan2(t0.y01, t0.x01), Math.atan2(t1.y01, t1.x01), !cw);
+
+        // Otherwise, draw the two corners and the ring.
+        else {
+          context.arc(t0.cx, t0.cy, rc0, Math.atan2(t0.y01, t0.x01), Math.atan2(t0.y11, t0.x11), !cw);
+          context.arc(0, 0, r0, Math.atan2(t0.cy + t0.y11, t0.cx + t0.x11), Math.atan2(t1.cy + t1.y11, t1.cx + t1.x11), cw);
+          context.arc(t1.cx, t1.cy, rc0, Math.atan2(t1.y11, t1.x11), Math.atan2(t1.y01, t1.x01), !cw);
+        }
+      }
+
+      // Or is the inner ring just a circular arc?
+      else context.arc(0, 0, r0, a10, a00, cw);
+    }
+
+    context.closePath();
+
+    if (buffer) return context = null, buffer + "" || null;
+  }
+
+  arc.centroid = function() {
+    var r = (+innerRadius.apply(this, arguments) + +outerRadius.apply(this, arguments)) / 2,
+        a = (+startAngle.apply(this, arguments) + +endAngle.apply(this, arguments)) / 2 - pi$2 / 2;
+    return [Math.cos(a) * r, Math.sin(a) * r];
+  };
+
+  arc.innerRadius = function(_) {
+    return arguments.length ? (innerRadius = typeof _ === "function" ? _ : constant$2(+_), arc) : innerRadius;
+  };
+
+  arc.outerRadius = function(_) {
+    return arguments.length ? (outerRadius = typeof _ === "function" ? _ : constant$2(+_), arc) : outerRadius;
+  };
+
+  arc.cornerRadius = function(_) {
+    return arguments.length ? (cornerRadius = typeof _ === "function" ? _ : constant$2(+_), arc) : cornerRadius;
+  };
+
+  arc.padRadius = function(_) {
+    return arguments.length ? (padRadius = _ == null ? null : typeof _ === "function" ? _ : constant$2(+_), arc) : padRadius;
+  };
+
+  arc.startAngle = function(_) {
+    return arguments.length ? (startAngle = typeof _ === "function" ? _ : constant$2(+_), arc) : startAngle;
+  };
+
+  arc.endAngle = function(_) {
+    return arguments.length ? (endAngle = typeof _ === "function" ? _ : constant$2(+_), arc) : endAngle;
+  };
+
+  arc.padAngle = function(_) {
+    return arguments.length ? (padAngle = typeof _ === "function" ? _ : constant$2(+_), arc) : padAngle;
+  };
+
+  arc.context = function(_) {
+    return arguments.length ? ((context = _ == null ? null : _), arc) : context;
+  };
+
+  return arc;
+};
+
+function Linear(context) {
+  this._context = context;
+}
+
+Linear.prototype = {
+  areaStart: function() {
+    this._line = 0;
+  },
+  areaEnd: function() {
+    this._line = NaN;
+  },
+  lineStart: function() {
+    this._point = 0;
+  },
+  lineEnd: function() {
+    if (this._line || (this._line !== 0 && this._point === 1)) this._context.closePath();
+    this._line = 1 - this._line;
+  },
+  point: function(x, y) {
+    x = +x, y = +y;
+    switch (this._point) {
+      case 0: this._point = 1; this._line ? this._context.lineTo(x, y) : this._context.moveTo(x, y); break;
+      case 1: this._point = 2; // proceed
+      default: this._context.lineTo(x, y); break;
+    }
+  }
+};
+
+var curveLinear = function(context) {
+  return new Linear(context);
+};
+
+function x(p) {
+  return p[0];
+}
+
+function y(p) {
+  return p[1];
+}
+
+var line = function() {
+  var x$$1 = x,
+      y$$1 = y,
+      defined = constant$2(true),
+      context = null,
+      curve = curveLinear,
+      output = null;
+
+  function line(data) {
+    var i,
+        n = data.length,
+        d,
+        defined0 = false,
+        buffer;
+
+    if (context == null) output = curve(buffer = path());
+
+    for (i = 0; i <= n; ++i) {
+      if (!(i < n && defined(d = data[i], i, data)) === defined0) {
+        if (defined0 = !defined0) output.lineStart();
+        else output.lineEnd();
+      }
+      if (defined0) output.point(+x$$1(d, i, data), +y$$1(d, i, data));
+    }
+
+    if (buffer) return output = null, buffer + "" || null;
+  }
+
+  line.x = function(_) {
+    return arguments.length ? (x$$1 = typeof _ === "function" ? _ : constant$2(+_), line) : x$$1;
+  };
+
+  line.y = function(_) {
+    return arguments.length ? (y$$1 = typeof _ === "function" ? _ : constant$2(+_), line) : y$$1;
+  };
+
+  line.defined = function(_) {
+    return arguments.length ? (defined = typeof _ === "function" ? _ : constant$2(!!_), line) : defined;
+  };
+
+  line.curve = function(_) {
+    return arguments.length ? (curve = _, context != null && (output = curve(context)), line) : curve;
+  };
+
+  line.context = function(_) {
+    return arguments.length ? (_ == null ? context = output = null : output = curve(context = _), line) : context;
+  };
+
+  return line;
+};
+
+var area$1 = function() {
+  var x0 = x,
+      x1 = null,
+      y0 = constant$2(0),
+      y1 = y,
+      defined = constant$2(true),
+      context = null,
+      curve = curveLinear,
+      output = null;
+
+  function area(data) {
+    var i,
+        j,
+        k,
+        n = data.length,
+        d,
+        defined0 = false,
+        buffer,
+        x0z = new Array(n),
+        y0z = new Array(n);
+
+    if (context == null) output = curve(buffer = path());
+
+    for (i = 0; i <= n; ++i) {
+      if (!(i < n && defined(d = data[i], i, data)) === defined0) {
+        if (defined0 = !defined0) {
+          j = i;
+          output.areaStart();
+          output.lineStart();
+        } else {
+          output.lineEnd();
+          output.lineStart();
+          for (k = i - 1; k >= j; --k) {
+            output.point(x0z[k], y0z[k]);
+          }
+          output.lineEnd();
+          output.areaEnd();
+        }
+      }
+      if (defined0) {
+        x0z[i] = +x0(d, i, data), y0z[i] = +y0(d, i, data);
+        output.point(x1 ? +x1(d, i, data) : x0z[i], y1 ? +y1(d, i, data) : y0z[i]);
+      }
+    }
+
+    if (buffer) return output = null, buffer + "" || null;
+  }
+
+  function arealine() {
+    return line().defined(defined).curve(curve).context(context);
+  }
+
+  area.x = function(_) {
+    return arguments.length ? (x0 = typeof _ === "function" ? _ : constant$2(+_), x1 = null, area) : x0;
+  };
+
+  area.x0 = function(_) {
+    return arguments.length ? (x0 = typeof _ === "function" ? _ : constant$2(+_), area) : x0;
+  };
+
+  area.x1 = function(_) {
+    return arguments.length ? (x1 = _ == null ? null : typeof _ === "function" ? _ : constant$2(+_), area) : x1;
+  };
+
+  area.y = function(_) {
+    return arguments.length ? (y0 = typeof _ === "function" ? _ : constant$2(+_), y1 = null, area) : y0;
+  };
+
+  area.y0 = function(_) {
+    return arguments.length ? (y0 = typeof _ === "function" ? _ : constant$2(+_), area) : y0;
+  };
+
+  area.y1 = function(_) {
+    return arguments.length ? (y1 = _ == null ? null : typeof _ === "function" ? _ : constant$2(+_), area) : y1;
+  };
+
+  area.lineX0 =
+  area.lineY0 = function() {
+    return arealine().x(x0).y(y0);
+  };
+
+  area.lineY1 = function() {
+    return arealine().x(x0).y(y1);
+  };
+
+  area.lineX1 = function() {
+    return arealine().x(x1).y(y0);
+  };
+
+  area.defined = function(_) {
+    return arguments.length ? (defined = typeof _ === "function" ? _ : constant$2(!!_), area) : defined;
+  };
+
+  area.curve = function(_) {
+    return arguments.length ? (curve = _, context != null && (output = curve(context)), area) : curve;
+  };
+
+  area.context = function(_) {
+    return arguments.length ? (_ == null ? context = output = null : output = curve(context = _), area) : context;
+  };
+
+  return area;
+};
+
+var descending$1 = function(a, b) {
+  return b < a ? -1 : b > a ? 1 : b >= a ? 0 : NaN;
+};
+
+var identity$1 = function(d) {
+  return d;
+};
+
+var pie = function() {
+  var value = identity$1,
+      sortValues = descending$1,
+      sort = null,
+      startAngle = constant$2(0),
+      endAngle = constant$2(tau$2),
+      padAngle = constant$2(0);
+
+  function pie(data) {
+    var i,
+        n = data.length,
+        j,
+        k,
+        sum = 0,
+        index = new Array(n),
+        arcs = new Array(n),
+        a0 = +startAngle.apply(this, arguments),
+        da = Math.min(tau$2, Math.max(-tau$2, endAngle.apply(this, arguments) - a0)),
+        a1,
+        p = Math.min(Math.abs(da) / n, padAngle.apply(this, arguments)),
+        pa = p * (da < 0 ? -1 : 1),
+        v;
+
+    for (i = 0; i < n; ++i) {
+      if ((v = arcs[index[i] = i] = +value(data[i], i, data)) > 0) {
+        sum += v;
+      }
+    }
+
+    // Optionally sort the arcs by previously-computed values or by data.
+    if (sortValues != null) index.sort(function(i, j) { return sortValues(arcs[i], arcs[j]); });
+    else if (sort != null) index.sort(function(i, j) { return sort(data[i], data[j]); });
+
+    // Compute the arcs! They are stored in the original data's order.
+    for (i = 0, k = sum ? (da - n * pa) / sum : 0; i < n; ++i, a0 = a1) {
+      j = index[i], v = arcs[j], a1 = a0 + (v > 0 ? v * k : 0) + pa, arcs[j] = {
+        data: data[j],
+        index: i,
+        value: v,
+        startAngle: a0,
+        endAngle: a1,
+        padAngle: p
+      };
+    }
+
+    return arcs;
+  }
+
+  pie.value = function(_) {
+    return arguments.length ? (value = typeof _ === "function" ? _ : constant$2(+_), pie) : value;
+  };
+
+  pie.sortValues = function(_) {
+    return arguments.length ? (sortValues = _, sort = null, pie) : sortValues;
+  };
+
+  pie.sort = function(_) {
+    return arguments.length ? (sort = _, sortValues = null, pie) : sort;
+  };
+
+  pie.startAngle = function(_) {
+    return arguments.length ? (startAngle = typeof _ === "function" ? _ : constant$2(+_), pie) : startAngle;
+  };
+
+  pie.endAngle = function(_) {
+    return arguments.length ? (endAngle = typeof _ === "function" ? _ : constant$2(+_), pie) : endAngle;
+  };
+
+  pie.padAngle = function(_) {
+    return arguments.length ? (padAngle = typeof _ === "function" ? _ : constant$2(+_), pie) : padAngle;
+  };
+
+  return pie;
+};
+
+var curveRadialLinear = curveRadial(curveLinear);
+
+function Radial(curve) {
+  this._curve = curve;
+}
+
+Radial.prototype = {
+  areaStart: function() {
+    this._curve.areaStart();
+  },
+  areaEnd: function() {
+    this._curve.areaEnd();
+  },
+  lineStart: function() {
+    this._curve.lineStart();
+  },
+  lineEnd: function() {
+    this._curve.lineEnd();
+  },
+  point: function(a, r) {
+    this._curve.point(r * Math.sin(a), r * -Math.cos(a));
+  }
+};
+
+function curveRadial(curve) {
+
+  function radial(context) {
+    return new Radial(curve(context));
+  }
+
+  radial._curve = curve;
+
+  return radial;
+}
+
+function radialLine(l) {
+  var c = l.curve;
+
+  l.angle = l.x, delete l.x;
+  l.radius = l.y, delete l.y;
+
+  l.curve = function(_) {
+    return arguments.length ? c(curveRadial(_)) : c()._curve;
+  };
+
+  return l;
+}
+
+var radialLine$1 = function() {
+  return radialLine(line().curve(curveRadialLinear));
+};
+
+var radialArea = function() {
+  var a = area$1().curve(curveRadialLinear),
+      c = a.curve,
+      x0 = a.lineX0,
+      x1 = a.lineX1,
+      y0 = a.lineY0,
+      y1 = a.lineY1;
+
+  a.angle = a.x, delete a.x;
+  a.startAngle = a.x0, delete a.x0;
+  a.endAngle = a.x1, delete a.x1;
+  a.radius = a.y, delete a.y;
+  a.innerRadius = a.y0, delete a.y0;
+  a.outerRadius = a.y1, delete a.y1;
+  a.lineStartAngle = function() { return radialLine(x0()); }, delete a.lineX0;
+  a.lineEndAngle = function() { return radialLine(x1()); }, delete a.lineX1;
+  a.lineInnerRadius = function() { return radialLine(y0()); }, delete a.lineY0;
+  a.lineOuterRadius = function() { return radialLine(y1()); }, delete a.lineY1;
+
+  a.curve = function(_) {
+    return arguments.length ? c(curveRadial(_)) : c()._curve;
+  };
+
+  return a;
+};
+
+var circle = {
+  draw: function(context, size) {
+    var r = Math.sqrt(size / pi$2);
+    context.moveTo(r, 0);
+    context.arc(0, 0, r, 0, tau$2);
+  }
+};
+
+var cross$1 = {
+  draw: function(context, size) {
+    var r = Math.sqrt(size / 5) / 2;
+    context.moveTo(-3 * r, -r);
+    context.lineTo(-r, -r);
+    context.lineTo(-r, -3 * r);
+    context.lineTo(r, -3 * r);
+    context.lineTo(r, -r);
+    context.lineTo(3 * r, -r);
+    context.lineTo(3 * r, r);
+    context.lineTo(r, r);
+    context.lineTo(r, 3 * r);
+    context.lineTo(-r, 3 * r);
+    context.lineTo(-r, r);
+    context.lineTo(-3 * r, r);
+    context.closePath();
+  }
+};
+
+var tan30 = Math.sqrt(1 / 3);
+var tan30_2 = tan30 * 2;
+
+var diamond = {
+  draw: function(context, size) {
+    var y = Math.sqrt(size / tan30_2),
+        x = y * tan30;
+    context.moveTo(0, -y);
+    context.lineTo(x, 0);
+    context.lineTo(0, y);
+    context.lineTo(-x, 0);
+    context.closePath();
+  }
+};
+
+var ka = 0.89081309152928522810;
+var kr = Math.sin(pi$2 / 10) / Math.sin(7 * pi$2 / 10);
+var kx = Math.sin(tau$2 / 10) * kr;
+var ky = -Math.cos(tau$2 / 10) * kr;
+
+var star = {
+  draw: function(context, size) {
+    var r = Math.sqrt(size * ka),
+        x = kx * r,
+        y = ky * r;
+    context.moveTo(0, -r);
+    context.lineTo(x, y);
+    for (var i = 1; i < 5; ++i) {
+      var a = tau$2 * i / 5,
+          c = Math.cos(a),
+          s = Math.sin(a);
+      context.lineTo(s * r, -c * r);
+      context.lineTo(c * x - s * y, s * x + c * y);
+    }
+    context.closePath();
+  }
+};
+
+var square = {
+  draw: function(context, size) {
+    var w = Math.sqrt(size),
+        x = -w / 2;
+    context.rect(x, x, w, w);
+  }
+};
+
+var sqrt3 = Math.sqrt(3);
+
+var triangle = {
+  draw: function(context, size) {
+    var y = -Math.sqrt(size / (sqrt3 * 3));
+    context.moveTo(0, y * 2);
+    context.lineTo(-sqrt3 * y, -y);
+    context.lineTo(sqrt3 * y, -y);
+    context.closePath();
+  }
+};
+
+var c = -0.5;
+var s = Math.sqrt(3) / 2;
+var k = 1 / Math.sqrt(12);
+var a = (k / 2 + 1) * 3;
+
+var wye = {
+  draw: function(context, size) {
+    var r = Math.sqrt(size / a),
+        x0 = r / 2,
+        y0 = r * k,
+        x1 = x0,
+        y1 = r * k + r,
+        x2 = -x1,
+        y2 = y1;
+    context.moveTo(x0, y0);
+    context.lineTo(x1, y1);
+    context.lineTo(x2, y2);
+    context.lineTo(c * x0 - s * y0, s * x0 + c * y0);
+    context.lineTo(c * x1 - s * y1, s * x1 + c * y1);
+    context.lineTo(c * x2 - s * y2, s * x2 + c * y2);
+    context.lineTo(c * x0 + s * y0, c * y0 - s * x0);
+    context.lineTo(c * x1 + s * y1, c * y1 - s * x1);
+    context.lineTo(c * x2 + s * y2, c * y2 - s * x2);
+    context.closePath();
+  }
+};
+
+var symbols = [
+  circle,
+  cross$1,
+  diamond,
+  square,
+  star,
+  triangle,
+  wye
+];
+
+var symbol = function() {
+  var type = constant$2(circle),
+      size = constant$2(64),
+      context = null;
+
+  function symbol() {
+    var buffer;
+    if (!context) context = buffer = path();
+    type.apply(this, arguments).draw(context, +size.apply(this, arguments));
+    if (buffer) return context = null, buffer + "" || null;
+  }
+
+  symbol.type = function(_) {
+    return arguments.length ? (type = typeof _ === "function" ? _ : constant$2(_), symbol) : type;
+  };
+
+  symbol.size = function(_) {
+    return arguments.length ? (size = typeof _ === "function" ? _ : constant$2(+_), symbol) : size;
+  };
+
+  symbol.context = function(_) {
+    return arguments.length ? (context = _ == null ? null : _, symbol) : context;
+  };
+
+  return symbol;
+};
+
+var noop = function() {};
+
+function point(that, x, y) {
+  that._context.bezierCurveTo(
+    (2 * that._x0 + that._x1) / 3,
+    (2 * that._y0 + that._y1) / 3,
+    (that._x0 + 2 * that._x1) / 3,
+    (that._y0 + 2 * that._y1) / 3,
+    (that._x0 + 4 * that._x1 + x) / 6,
+    (that._y0 + 4 * that._y1 + y) / 6
+  );
+}
+
+function Basis(context) {
+  this._context = context;
+}
+
+Basis.prototype = {
+  areaStart: function() {
+    this._line = 0;
+  },
+  areaEnd: function() {
+    this._line = NaN;
+  },
+  lineStart: function() {
+    this._x0 = this._x1 =
+    this._y0 = this._y1 = NaN;
+    this._point = 0;
+  },
+  lineEnd: function() {
+    switch (this._point) {
+      case 3: point(this, this._x1, this._y1); // proceed
+      case 2: this._context.lineTo(this._x1, this._y1); break;
+    }
+    if (this._line || (this._line !== 0 && this._point === 1)) this._context.closePath();
+    this._line = 1 - this._line;
+  },
+  point: function(x, y) {
+    x = +x, y = +y;
+    switch (this._point) {
+      case 0: this._point = 1; this._line ? this._context.lineTo(x, y) : this._context.moveTo(x, y); break;
+      case 1: this._point = 2; break;
+      case 2: this._point = 3; this._context.lineTo((5 * this._x0 + this._x1) / 6, (5 * this._y0 + this._y1) / 6); // proceed
+      default: point(this, x, y); break;
+    }
+    this._x0 = this._x1, this._x1 = x;
+    this._y0 = this._y1, this._y1 = y;
+  }
+};
+
+var basis = function(context) {
+  return new Basis(context);
+};
+
+function BasisClosed(context) {
+  this._context = context;
+}
+
+BasisClosed.prototype = {
+  areaStart: noop,
+  areaEnd: noop,
+  lineStart: function() {
+    this._x0 = this._x1 = this._x2 = this._x3 = this._x4 =
+    this._y0 = this._y1 = this._y2 = this._y3 = this._y4 = NaN;
+    this._point = 0;
+  },
+  lineEnd: function() {
+    switch (this._point) {
+      case 1: {
+        this._context.moveTo(this._x2, this._y2);
+        this._context.closePath();
+        break;
+      }
+      case 2: {
+        this._context.moveTo((this._x2 + 2 * this._x3) / 3, (this._y2 + 2 * this._y3) / 3);
+        this._context.lineTo((this._x3 + 2 * this._x2) / 3, (this._y3 + 2 * this._y2) / 3);
+        this._context.closePath();
+        break;
+      }
+      case 3: {
+        this.point(this._x2, this._y2);
+        this.point(this._x3, this._y3);
+        this.point(this._x4, this._y4);
+        break;
+      }
+    }
+  },
+  point: function(x, y) {
+    x = +x, y = +y;
+    switch (this._point) {
+      case 0: this._point = 1; this._x2 = x, this._y2 = y; break;
+      case 1: this._point = 2; this._x3 = x, this._y3 = y; break;
+      case 2: this._point = 3; this._x4 = x, this._y4 = y; this._context.moveTo((this._x0 + 4 * this._x1 + x) / 6, (this._y0 + 4 * this._y1 + y) / 6); break;
+      default: point(this, x, y); break;
+    }
+    this._x0 = this._x1, this._x1 = x;
+    this._y0 = this._y1, this._y1 = y;
+  }
+};
+
+var basisClosed = function(context) {
+  return new BasisClosed(context);
+};
+
+function BasisOpen(context) {
+  this._context = context;
+}
+
+BasisOpen.prototype = {
+  areaStart: function() {
+    this._line = 0;
+  },
+  areaEnd: function() {
+    this._line = NaN;
+  },
+  lineStart: function() {
+    this._x0 = this._x1 =
+    this._y0 = this._y1 = NaN;
+    this._point = 0;
+  },
+  lineEnd: function() {
+    if (this._line || (this._line !== 0 && this._point === 3)) this._context.closePath();
+    this._line = 1 - this._line;
+  },
+  point: function(x, y) {
+    x = +x, y = +y;
+    switch (this._point) {
+      case 0: this._point = 1; break;
+      case 1: this._point = 2; break;
+      case 2: this._point = 3; var x0 = (this._x0 + 4 * this._x1 + x) / 6, y0 = (this._y0 + 4 * this._y1 + y) / 6; this._line ? this._context.lineTo(x0, y0) : this._context.moveTo(x0, y0); break;
+      case 3: this._point = 4; // proceed
+      default: point(this, x, y); break;
+    }
+    this._x0 = this._x1, this._x1 = x;
+    this._y0 = this._y1, this._y1 = y;
+  }
+};
+
+var basisOpen = function(context) {
+  return new BasisOpen(context);
+};
+
+function Bundle(context, beta) {
+  this._basis = new Basis(context);
+  this._beta = beta;
+}
+
+Bundle.prototype = {
+  lineStart: function() {
+    this._x = [];
+    this._y = [];
+    this._basis.lineStart();
+  },
+  lineEnd: function() {
+    var x = this._x,
+        y = this._y,
+        j = x.length - 1;
+
+    if (j > 0) {
+      var x0 = x[0],
+          y0 = y[0],
+          dx = x[j] - x0,
+          dy = y[j] - y0,
+          i = -1,
+          t;
+
+      while (++i <= j) {
+        t = i / j;
+        this._basis.point(
+          this._beta * x[i] + (1 - this._beta) * (x0 + t * dx),
+          this._beta * y[i] + (1 - this._beta) * (y0 + t * dy)
+        );
+      }
+    }
+
+    this._x = this._y = null;
+    this._basis.lineEnd();
+  },
+  point: function(x, y) {
+    this._x.push(+x);
+    this._y.push(+y);
+  }
+};
+
+var bundle = (function custom(beta) {
+
+  function bundle(context) {
+    return beta === 1 ? new Basis(context) : new Bundle(context, beta);
+  }
+
+  bundle.beta = function(beta) {
+    return custom(+beta);
+  };
+
+  return bundle;
+})(0.85);
+
+function point$1(that, x, y) {
+  that._context.bezierCurveTo(
+    that._x1 + that._k * (that._x2 - that._x0),
+    that._y1 + that._k * (that._y2 - that._y0),
+    that._x2 + that._k * (that._x1 - x),
+    that._y2 + that._k * (that._y1 - y),
+    that._x2,
+    that._y2
+  );
+}
+
+function Cardinal(context, tension) {
+  this._context = context;
+  this._k = (1 - tension) / 6;
+}
+
+Cardinal.prototype = {
+  areaStart: function() {
+    this._line = 0;
+  },
+  areaEnd: function() {
+    this._line = NaN;
+  },
+  lineStart: function() {
+    this._x0 = this._x1 = this._x2 =
+    this._y0 = this._y1 = this._y2 = NaN;
+    this._point = 0;
+  },
+  lineEnd: function() {
+    switch (this._point) {
+      case 2: this._context.lineTo(this._x2, this._y2); break;
+      case 3: point$1(this, this._x1, this._y1); break;
+    }
+    if (this._line || (this._line !== 0 && this._point === 1)) this._context.closePath();
+    this._line = 1 - this._line;
+  },
+  point: function(x, y) {
+    x = +x, y = +y;
+    switch (this._point) {
+      case 0: this._point = 1; this._line ? this._context.lineTo(x, y) : this._context.moveTo(x, y); break;
+      case 1: this._point = 2; this._x1 = x, this._y1 = y; break;
+      case 2: this._point = 3; // proceed
+      default: point$1(this, x, y); break;
+    }
+    this._x0 = this._x1, this._x1 = this._x2, this._x2 = x;
+    this._y0 = this._y1, this._y1 = this._y2, this._y2 = y;
+  }
+};
+
+var cardinal = (function custom(tension) {
+
+  function cardinal(context) {
+    return new Cardinal(context, tension);
+  }
+
+  cardinal.tension = function(tension) {
+    return custom(+tension);
+  };
+
+  return cardinal;
+})(0);
+
+function CardinalClosed(context, tension) {
+  this._context = context;
+  this._k = (1 - tension) / 6;
+}
+
+CardinalClosed.prototype = {
+  areaStart: noop,
+  areaEnd: noop,
+  lineStart: function() {
+    this._x0 = this._x1 = this._x2 = this._x3 = this._x4 = this._x5 =
+    this._y0 = this._y1 = this._y2 = this._y3 = this._y4 = this._y5 = NaN;
+    this._point = 0;
+  },
+  lineEnd: function() {
+    switch (this._point) {
+      case 1: {
+        this._context.moveTo(this._x3, this._y3);
+        this._context.closePath();
+        break;
+      }
+      case 2: {
+        this._context.lineTo(this._x3, this._y3);
+        this._context.closePath();
+        break;
+      }
+      case 3: {
+        this.point(this._x3, this._y3);
+        this.point(this._x4, this._y4);
+        this.point(this._x5, this._y5);
+        break;
+      }
+    }
+  },
+  point: function(x, y) {
+    x = +x, y = +y;
+    switch (this._point) {
+      case 0: this._point = 1; this._x3 = x, this._y3 = y; break;
+      case 1: this._point = 2; this._context.moveTo(this._x4 = x, this._y4 = y); break;
+      case 2: this._point = 3; this._x5 = x, this._y5 = y; break;
+      default: point$1(this, x, y); break;
+    }
+    this._x0 = this._x1, this._x1 = this._x2, this._x2 = x;
+    this._y0 = this._y1, this._y1 = this._y2, this._y2 = y;
+  }
+};
+
+var cardinalClosed = (function custom(tension) {
+
+  function cardinal(context) {
+    return new CardinalClosed(context, tension);
+  }
+
+  cardinal.tension = function(tension) {
+    return custom(+tension);
+  };
+
+  return cardinal;
+})(0);
+
+function CardinalOpen(context, tension) {
+  this._context = context;
+  this._k = (1 - tension) / 6;
+}
+
+CardinalOpen.prototype = {
+  areaStart: function() {
+    this._line = 0;
+  },
+  areaEnd: function() {
+    this._line = NaN;
+  },
+  lineStart: function() {
+    this._x0 = this._x1 = this._x2 =
+    this._y0 = this._y1 = this._y2 = NaN;
+    this._point = 0;
+  },
+  lineEnd: function() {
+    if (this._line || (this._line !== 0 && this._point === 3)) this._context.closePath();
+    this._line = 1 - this._line;
+  },
+  point: function(x, y) {
+    x = +x, y = +y;
+    switch (this._point) {
+      case 0: this._point = 1; break;
+      case 1: this._point = 2; break;
+      case 2: this._point = 3; this._line ? this._context.lineTo(this._x2, this._y2) : this._context.moveTo(this._x2, this._y2); break;
+      case 3: this._point = 4; // proceed
+      default: point$1(this, x, y); break;
+    }
+    this._x0 = this._x1, this._x1 = this._x2, this._x2 = x;
+    this._y0 = this._y1, this._y1 = this._y2, this._y2 = y;
+  }
+};
+
+var cardinalOpen = (function custom(tension) {
+
+  function cardinal(context) {
+    return new CardinalOpen(context, tension);
+  }
+
+  cardinal.tension = function(tension) {
+    return custom(+tension);
+  };
+
+  return cardinal;
+})(0);
+
+function point$2(that, x, y) {
+  var x1 = that._x1,
+      y1 = that._y1,
+      x2 = that._x2,
+      y2 = that._y2;
+
+  if (that._l01_a > epsilon$1) {
+    var a = 2 * that._l01_2a + 3 * that._l01_a * that._l12_a + that._l12_2a,
+        n = 3 * that._l01_a * (that._l01_a + that._l12_a);
+    x1 = (x1 * a - that._x0 * that._l12_2a + that._x2 * that._l01_2a) / n;
+    y1 = (y1 * a - that._y0 * that._l12_2a + that._y2 * that._l01_2a) / n;
+  }
+
+  if (that._l23_a > epsilon$1) {
+    var b = 2 * that._l23_2a + 3 * that._l23_a * that._l12_a + that._l12_2a,
+        m = 3 * that._l23_a * (that._l23_a + that._l12_a);
+    x2 = (x2 * b + that._x1 * that._l23_2a - x * that._l12_2a) / m;
+    y2 = (y2 * b + that._y1 * that._l23_2a - y * that._l12_2a) / m;
+  }
+
+  that._context.bezierCurveTo(x1, y1, x2, y2, that._x2, that._y2);
+}
+
+function CatmullRom(context, alpha) {
+  this._context = context;
+  this._alpha = alpha;
+}
+
+CatmullRom.prototype = {
+  areaStart: function() {
+    this._line = 0;
+  },
+  areaEnd: function() {
+    this._line = NaN;
+  },
+  lineStart: function() {
+    this._x0 = this._x1 = this._x2 =
+    this._y0 = this._y1 = this._y2 = NaN;
+    this._l01_a = this._l12_a = this._l23_a =
+    this._l01_2a = this._l12_2a = this._l23_2a =
+    this._point = 0;
+  },
+  lineEnd: function() {
+    switch (this._point) {
+      case 2: this._context.lineTo(this._x2, this._y2); break;
+      case 3: this.point(this._x2, this._y2); break;
+    }
+    if (this._line || (this._line !== 0 && this._point === 1)) this._context.closePath();
+    this._line = 1 - this._line;
+  },
+  point: function(x, y) {
+    x = +x, y = +y;
+
+    if (this._point) {
+      var x23 = this._x2 - x,
+          y23 = this._y2 - y;
+      this._l23_a = Math.sqrt(this._l23_2a = Math.pow(x23 * x23 + y23 * y23, this._alpha));
+    }
+
+    switch (this._point) {
+      case 0: this._point = 1; this._line ? this._context.lineTo(x, y) : this._context.moveTo(x, y); break;
+      case 1: this._point = 2; break;
+      case 2: this._point = 3; // proceed
+      default: point$2(this, x, y); break;
+    }
+
+    this._l01_a = this._l12_a, this._l12_a = this._l23_a;
+    this._l01_2a = this._l12_2a, this._l12_2a = this._l23_2a;
+    this._x0 = this._x1, this._x1 = this._x2, this._x2 = x;
+    this._y0 = this._y1, this._y1 = this._y2, this._y2 = y;
+  }
+};
+
+var catmullRom = (function custom(alpha) {
+
+  function catmullRom(context) {
+    return alpha ? new CatmullRom(context, alpha) : new Cardinal(context, 0);
+  }
+
+  catmullRom.alpha = function(alpha) {
+    return custom(+alpha);
+  };
+
+  return catmullRom;
+})(0.5);
+
+function CatmullRomClosed(context, alpha) {
+  this._context = context;
+  this._alpha = alpha;
+}
+
+CatmullRomClosed.prototype = {
+  areaStart: noop,
+  areaEnd: noop,
+  lineStart: function() {
+    this._x0 = this._x1 = this._x2 = this._x3 = this._x4 = this._x5 =
+    this._y0 = this._y1 = this._y2 = this._y3 = this._y4 = this._y5 = NaN;
+    this._l01_a = this._l12_a = this._l23_a =
+    this._l01_2a = this._l12_2a = this._l23_2a =
+    this._point = 0;
+  },
+  lineEnd: function() {
+    switch (this._point) {
+      case 1: {
+        this._context.moveTo(this._x3, this._y3);
+        this._context.closePath();
+        break;
+      }
+      case 2: {
+        this._context.lineTo(this._x3, this._y3);
+        this._context.closePath();
+        break;
+      }
+      case 3: {
+        this.point(this._x3, this._y3);
+        this.point(this._x4, this._y4);
+        this.point(this._x5, this._y5);
+        break;
+      }
+    }
+  },
+  point: function(x, y) {
+    x = +x, y = +y;
+
+    if (this._point) {
+      var x23 = this._x2 - x,
+          y23 = this._y2 - y;
+      this._l23_a = Math.sqrt(this._l23_2a = Math.pow(x23 * x23 + y23 * y23, this._alpha));
+    }
+
+    switch (this._point) {
+      case 0: this._point = 1; this._x3 = x, this._y3 = y; break;
+      case 1: this._point = 2; this._context.moveTo(this._x4 = x, this._y4 = y); break;
+      case 2: this._point = 3; this._x5 = x, this._y5 = y; break;
+      default: point$2(this, x, y); break;
+    }
+
+    this._l01_a = this._l12_a, this._l12_a = this._l23_a;
+    this._l01_2a = this._l12_2a, this._l12_2a = this._l23_2a;
+    this._x0 = this._x1, this._x1 = this._x2, this._x2 = x;
+    this._y0 = this._y1, this._y1 = this._y2, this._y2 = y;
+  }
+};
+
+var catmullRomClosed = (function custom(alpha) {
+
+  function catmullRom(context) {
+    return alpha ? new CatmullRomClosed(context, alpha) : new CardinalClosed(context, 0);
+  }
+
+  catmullRom.alpha = function(alpha) {
+    return custom(+alpha);
+  };
+
+  return catmullRom;
+})(0.5);
+
+function CatmullRomOpen(context, alpha) {
+  this._context = context;
+  this._alpha = alpha;
+}
+
+CatmullRomOpen.prototype = {
+  areaStart: function() {
+    this._line = 0;
+  },
+  areaEnd: function() {
+    this._line = NaN;
+  },
+  lineStart: function() {
+    this._x0 = this._x1 = this._x2 =
+    this._y0 = this._y1 = this._y2 = NaN;
+    this._l01_a = this._l12_a = this._l23_a =
+    this._l01_2a = this._l12_2a = this._l23_2a =
+    this._point = 0;
+  },
+  lineEnd: function() {
+    if (this._line || (this._line !== 0 && this._point === 3)) this._context.closePath();
+    this._line = 1 - this._line;
+  },
+  point: function(x, y) {
+    x = +x, y = +y;
+
+    if (this._point) {
+      var x23 = this._x2 - x,
+          y23 = this._y2 - y;
+      this._l23_a = Math.sqrt(this._l23_2a = Math.pow(x23 * x23 + y23 * y23, this._alpha));
+    }
+
+    switch (this._point) {
+      case 0: this._point = 1; break;
+      case 1: this._point = 2; break;
+      case 2: this._point = 3; this._line ? this._context.lineTo(this._x2, this._y2) : this._context.moveTo(this._x2, this._y2); break;
+      case 3: this._point = 4; // proceed
+      default: point$2(this, x, y); break;
+    }
+
+    this._l01_a = this._l12_a, this._l12_a = this._l23_a;
+    this._l01_2a = this._l12_2a, this._l12_2a = this._l23_2a;
+    this._x0 = this._x1, this._x1 = this._x2, this._x2 = x;
+    this._y0 = this._y1, this._y1 = this._y2, this._y2 = y;
+  }
+};
+
+var catmullRomOpen = (function custom(alpha) {
+
+  function catmullRom(context) {
+    return alpha ? new CatmullRomOpen(context, alpha) : new CardinalOpen(context, 0);
+  }
+
+  catmullRom.alpha = function(alpha) {
+    return custom(+alpha);
+  };
+
+  return catmullRom;
+})(0.5);
+
+function LinearClosed(context) {
+  this._context = context;
+}
+
+LinearClosed.prototype = {
+  areaStart: noop,
+  areaEnd: noop,
+  lineStart: function() {
+    this._point = 0;
+  },
+  lineEnd: function() {
+    if (this._point) this._context.closePath();
+  },
+  point: function(x, y) {
+    x = +x, y = +y;
+    if (this._point) this._context.lineTo(x, y);
+    else this._point = 1, this._context.moveTo(x, y);
+  }
+};
+
+var linearClosed = function(context) {
+  return new LinearClosed(context);
+};
+
+function sign(x) {
+  return x < 0 ? -1 : 1;
+}
+
+// Calculate the slopes of the tangents (Hermite-type interpolation) based on
+// the following paper: Steffen, M. 1990. A Simple Method for Monotonic
+// Interpolation in One Dimension. Astronomy and Astrophysics, Vol. 239, NO.
+// NOV(II), P. 443, 1990.
+function slope3(that, x2, y2) {
+  var h0 = that._x1 - that._x0,
+      h1 = x2 - that._x1,
+      s0 = (that._y1 - that._y0) / (h0 || h1 < 0 && -0),
+      s1 = (y2 - that._y1) / (h1 || h0 < 0 && -0),
+      p = (s0 * h1 + s1 * h0) / (h0 + h1);
+  return (sign(s0) + sign(s1)) * Math.min(Math.abs(s0), Math.abs(s1), 0.5 * Math.abs(p)) || 0;
+}
+
+// Calculate a one-sided slope.
+function slope2(that, t) {
+  var h = that._x1 - that._x0;
+  return h ? (3 * (that._y1 - that._y0) / h - t) / 2 : t;
+}
+
+// According to https://en.wikipedia.org/wiki/Cubic_Hermite_spline#Representations
+// "you can express cubic Hermite interpolation in terms of cubic Bézier curves
+// with respect to the four values p0, p0 + m0 / 3, p1 - m1 / 3, p1".
+function point$3(that, t0, t1) {
+  var x0 = that._x0,
+      y0 = that._y0,
+      x1 = that._x1,
+      y1 = that._y1,
+      dx = (x1 - x0) / 3;
+  that._context.bezierCurveTo(x0 + dx, y0 + dx * t0, x1 - dx, y1 - dx * t1, x1, y1);
+}
+
+function MonotoneX(context) {
+  this._context = context;
+}
+
+MonotoneX.prototype = {
+  areaStart: function() {
+    this._line = 0;
+  },
+  areaEnd: function() {
+    this._line = NaN;
+  },
+  lineStart: function() {
+    this._x0 = this._x1 =
+    this._y0 = this._y1 =
+    this._t0 = NaN;
+    this._point = 0;
+  },
+  lineEnd: function() {
+    switch (this._point) {
+      case 2: this._context.lineTo(this._x1, this._y1); break;
+      case 3: point$3(this, this._t0, slope2(this, this._t0)); break;
+    }
+    if (this._line || (this._line !== 0 && this._point === 1)) this._context.closePath();
+    this._line = 1 - this._line;
+  },
+  point: function(x, y) {
+    var t1 = NaN;
+
+    x = +x, y = +y;
+    if (x === this._x1 && y === this._y1) return; // Ignore coincident points.
+    switch (this._point) {
+      case 0: this._point = 1; this._line ? this._context.lineTo(x, y) : this._context.moveTo(x, y); break;
+      case 1: this._point = 2; break;
+      case 2: this._point = 3; point$3(this, slope2(this, t1 = slope3(this, x, y)), t1); break;
+      default: point$3(this, this._t0, t1 = slope3(this, x, y)); break;
+    }
+
+    this._x0 = this._x1, this._x1 = x;
+    this._y0 = this._y1, this._y1 = y;
+    this._t0 = t1;
+  }
+};
+
+function MonotoneY(context) {
+  this._context = new ReflectContext(context);
+}
+
+(MonotoneY.prototype = Object.create(MonotoneX.prototype)).point = function(x, y) {
+  MonotoneX.prototype.point.call(this, y, x);
+};
+
+function ReflectContext(context) {
+  this._context = context;
+}
+
+ReflectContext.prototype = {
+  moveTo: function(x, y) { this._context.moveTo(y, x); },
+  closePath: function() { this._context.closePath(); },
+  lineTo: function(x, y) { this._context.lineTo(y, x); },
+  bezierCurveTo: function(x1, y1, x2, y2, x, y) { this._context.bezierCurveTo(y1, x1, y2, x2, y, x); }
+};
+
+function monotoneX(context) {
+  return new MonotoneX(context);
+}
+
+function monotoneY(context) {
+  return new MonotoneY(context);
+}
+
+function Natural(context) {
+  this._context = context;
+}
+
+Natural.prototype = {
+  areaStart: function() {
+    this._line = 0;
+  },
+  areaEnd: function() {
+    this._line = NaN;
+  },
+  lineStart: function() {
+    this._x = [];
+    this._y = [];
+  },
+  lineEnd: function() {
+    var x = this._x,
+        y = this._y,
+        n = x.length;
+
+    if (n) {
+      this._line ? this._context.lineTo(x[0], y[0]) : this._context.moveTo(x[0], y[0]);
+      if (n === 2) {
+        this._context.lineTo(x[1], y[1]);
+      } else {
+        var px = controlPoints(x),
+            py = controlPoints(y);
+        for (var i0 = 0, i1 = 1; i1 < n; ++i0, ++i1) {
+          this._context.bezierCurveTo(px[0][i0], py[0][i0], px[1][i0], py[1][i0], x[i1], y[i1]);
+        }
+      }
+    }
+
+    if (this._line || (this._line !== 0 && n === 1)) this._context.closePath();
+    this._line = 1 - this._line;
+    this._x = this._y = null;
+  },
+  point: function(x, y) {
+    this._x.push(+x);
+    this._y.push(+y);
+  }
+};
+
+// See https://www.particleincell.com/2012/bezier-splines/ for derivation.
+function controlPoints(x) {
+  var i,
+      n = x.length - 1,
+      m,
+      a = new Array(n),
+      b = new Array(n),
+      r = new Array(n);
+  a[0] = 0, b[0] = 2, r[0] = x[0] + 2 * x[1];
+  for (i = 1; i < n - 1; ++i) a[i] = 1, b[i] = 4, r[i] = 4 * x[i] + 2 * x[i + 1];
+  a[n - 1] = 2, b[n - 1] = 7, r[n - 1] = 8 * x[n - 1] + x[n];
+  for (i = 1; i < n; ++i) m = a[i] / b[i - 1], b[i] -= m, r[i] -= m * r[i - 1];
+  a[n - 1] = r[n - 1] / b[n - 1];
+  for (i = n - 2; i >= 0; --i) a[i] = (r[i] - a[i + 1]) / b[i];
+  b[n - 1] = (x[n] + a[n - 1]) / 2;
+  for (i = 0; i < n - 1; ++i) b[i] = 2 * x[i + 1] - a[i + 1];
+  return [a, b];
+}
+
+var natural = function(context) {
+  return new Natural(context);
+};
+
+function Step(context, t) {
+  this._context = context;
+  this._t = t;
+}
+
+Step.prototype = {
+  areaStart: function() {
+    this._line = 0;
+  },
+  areaEnd: function() {
+    this._line = NaN;
+  },
+  lineStart: function() {
+    this._x = this._y = NaN;
+    this._point = 0;
+  },
+  lineEnd: function() {
+    if (0 < this._t && this._t < 1 && this._point === 2) this._context.lineTo(this._x, this._y);
+    if (this._line || (this._line !== 0 && this._point === 1)) this._context.closePath();
+    if (this._line >= 0) this._t = 1 - this._t, this._line = 1 - this._line;
+  },
+  point: function(x, y) {
+    x = +x, y = +y;
+    switch (this._point) {
+      case 0: this._point = 1; this._line ? this._context.lineTo(x, y) : this._context.moveTo(x, y); break;
+      case 1: this._point = 2; // proceed
+      default: {
+        if (this._t <= 0) {
+          this._context.lineTo(this._x, y);
+          this._context.lineTo(x, y);
+        } else {
+          var x1 = this._x * (1 - this._t) + x * this._t;
+          this._context.lineTo(x1, this._y);
+          this._context.lineTo(x1, y);
+        }
+        break;
+      }
+    }
+    this._x = x, this._y = y;
+  }
+};
+
+var step = function(context) {
+  return new Step(context, 0.5);
+};
+
+function stepBefore(context) {
+  return new Step(context, 0);
+}
+
+function stepAfter(context) {
+  return new Step(context, 1);
+}
+
+var slice$2 = Array.prototype.slice;
+
+var none = function(series, order) {
+  if (!((n = series.length) > 1)) return;
+  for (var i = 1, s0, s1 = series[order[0]], n, m = s1.length; i < n; ++i) {
+    s0 = s1, s1 = series[order[i]];
+    for (var j = 0; j < m; ++j) {
+      s1[j][1] += s1[j][0] = isNaN(s0[j][1]) ? s0[j][0] : s0[j][1];
+    }
+  }
+};
+
+var none$1 = function(series) {
+  var n = series.length, o = new Array(n);
+  while (--n >= 0) o[n] = n;
+  return o;
+};
+
+function stackValue(d, key) {
+  return d[key];
+}
+
+var stack = function() {
+  var keys = constant$2([]),
+      order = none$1,
+      offset = none,
+      value = stackValue;
+
+  function stack(data) {
+    var kz = keys.apply(this, arguments),
+        i,
+        m = data.length,
+        n = kz.length,
+        sz = new Array(n),
+        oz;
+
+    for (i = 0; i < n; ++i) {
+      for (var ki = kz[i], si = sz[i] = new Array(m), j = 0, sij; j < m; ++j) {
+        si[j] = sij = [0, +value(data[j], ki, j, data)];
+        sij.data = data[j];
+      }
+      si.key = ki;
+    }
+
+    for (i = 0, oz = order(sz); i < n; ++i) {
+      sz[oz[i]].index = i;
+    }
+
+    offset(sz, oz);
+    return sz;
+  }
+
+  stack.keys = function(_) {
+    return arguments.length ? (keys = typeof _ === "function" ? _ : constant$2(slice$2.call(_)), stack) : keys;
+  };
+
+  stack.value = function(_) {
+    return arguments.length ? (value = typeof _ === "function" ? _ : constant$2(+_), stack) : value;
+  };
+
+  stack.order = function(_) {
+    return arguments.length ? (order = _ == null ? none$1 : typeof _ === "function" ? _ : constant$2(slice$2.call(_)), stack) : order;
+  };
+
+  stack.offset = function(_) {
+    return arguments.length ? (offset = _ == null ? none : _, stack) : offset;
+  };
+
+  return stack;
+};
+
+var expand = function(series, order) {
+  if (!((n = series.length) > 0)) return;
+  for (var i, n, j = 0, m = series[0].length, y; j < m; ++j) {
+    for (y = i = 0; i < n; ++i) y += series[i][j][1] || 0;
+    if (y) for (i = 0; i < n; ++i) series[i][j][1] /= y;
+  }
+  none(series, order);
+};
+
+var silhouette = function(series, order) {
+  if (!((n = series.length) > 0)) return;
+  for (var j = 0, s0 = series[order[0]], n, m = s0.length; j < m; ++j) {
+    for (var i = 0, y = 0; i < n; ++i) y += series[i][j][1] || 0;
+    s0[j][1] += s0[j][0] = -y / 2;
+  }
+  none(series, order);
+};
+
+var wiggle = function(series, order) {
+  if (!((n = series.length) > 0) || !((m = (s0 = series[order[0]]).length) > 0)) return;
+  for (var y = 0, j = 1, s0, m, n; j < m; ++j) {
+    for (var i = 0, s1 = 0, s2 = 0; i < n; ++i) {
+      var si = series[order[i]],
+          sij0 = si[j][1] || 0,
+          sij1 = si[j - 1][1] || 0,
+          s3 = (sij0 - sij1) / 2;
+      for (var k = 0; k < i; ++k) {
+        var sk = series[order[k]],
+            skj0 = sk[j][1] || 0,
+            skj1 = sk[j - 1][1] || 0;
+        s3 += skj0 - skj1;
+      }
+      s1 += sij0, s2 += s3 * sij0;
+    }
+    s0[j - 1][1] += s0[j - 1][0] = y;
+    if (s1) y -= s2 / s1;
+  }
+  s0[j - 1][1] += s0[j - 1][0] = y;
+  none(series, order);
+};
+
+var ascending$1 = function(series) {
+  var sums = series.map(sum$1);
+  return none$1(series).sort(function(a, b) { return sums[a] - sums[b]; });
+};
+
+function sum$1(series) {
+  var s = 0, i = -1, n = series.length, v;
+  while (++i < n) if (v = +series[i][1]) s += v;
+  return s;
+}
+
+var descending$2 = function(series) {
+  return ascending$1(series).reverse();
+};
+
+var insideOut = function(series) {
+  var n = series.length,
+      i,
+      j,
+      sums = series.map(sum$1),
+      order = none$1(series).sort(function(a, b) { return sums[b] - sums[a]; }),
+      top = 0,
+      bottom = 0,
+      tops = [],
+      bottoms = [];
+
+  for (i = 0; i < n; ++i) {
+    j = order[i];
+    if (top < bottom) {
+      top += sums[j];
+      tops.push(j);
+    } else {
+      bottom += sums[j];
+      bottoms.push(j);
+    }
+  }
+
+  return bottoms.reverse().concat(tops);
+};
+
+var reverse = function(series) {
+  return none$1(series).reverse();
+};
+
+var define = function(constructor, factory, prototype) {
+  constructor.prototype = factory.prototype = prototype;
+  prototype.constructor = constructor;
+};
+
+function extend(parent, definition) {
+  var prototype = Object.create(parent.prototype);
+  for (var key in definition) prototype[key] = definition[key];
+  return prototype;
+}
+
+function Color() {}
+
+var darker = 0.7;
+var brighter = 1 / darker;
+
+var reHex3 = /^#([0-9a-f]{3})$/;
+var reHex6 = /^#([0-9a-f]{6})$/;
+var reRgbInteger = /^rgb\(\s*([-+]?\d+)\s*,\s*([-+]?\d+)\s*,\s*([-+]?\d+)\s*\)$/;
+var reRgbPercent = /^rgb\(\s*([-+]?\d+(?:\.\d+)?)%\s*,\s*([-+]?\d+(?:\.\d+)?)%\s*,\s*([-+]?\d+(?:\.\d+)?)%\s*\)$/;
+var reRgbaInteger = /^rgba\(\s*([-+]?\d+)\s*,\s*([-+]?\d+)\s*,\s*([-+]?\d+)\s*,\s*([-+]?\d+(?:\.\d+)?)\s*\)$/;
+var reRgbaPercent = /^rgba\(\s*([-+]?\d+(?:\.\d+)?)%\s*,\s*([-+]?\d+(?:\.\d+)?)%\s*,\s*([-+]?\d+(?:\.\d+)?)%\s*,\s*([-+]?\d+(?:\.\d+)?)\s*\)$/;
+var reHslPercent = /^hsl\(\s*([-+]?\d+(?:\.\d+)?)\s*,\s*([-+]?\d+(?:\.\d+)?)%\s*,\s*([-+]?\d+(?:\.\d+)?)%\s*\)$/;
+var reHslaPercent = /^hsla\(\s*([-+]?\d+(?:\.\d+)?)\s*,\s*([-+]?\d+(?:\.\d+)?)%\s*,\s*([-+]?\d+(?:\.\d+)?)%\s*,\s*([-+]?\d+(?:\.\d+)?)\s*\)$/;
+
+var named = {
+  aliceblue: 0xf0f8ff,
+  antiquewhite: 0xfaebd7,
+  aqua: 0x00ffff,
+  aquamarine: 0x7fffd4,
+  azure: 0xf0ffff,
+  beige: 0xf5f5dc,
+  bisque: 0xffe4c4,
+  black: 0x000000,
+  blanchedalmond: 0xffebcd,
+  blue: 0x0000ff,
+  blueviolet: 0x8a2be2,
+  brown: 0xa52a2a,
+  burlywood: 0xdeb887,
+  cadetblue: 0x5f9ea0,
+  chartreuse: 0x7fff00,
+  chocolate: 0xd2691e,
+  coral: 0xff7f50,
+  cornflowerblue: 0x6495ed,
+  cornsilk: 0xfff8dc,
+  crimson: 0xdc143c,
+  cyan: 0x00ffff,
+  darkblue: 0x00008b,
+  darkcyan: 0x008b8b,
+  darkgoldenrod: 0xb8860b,
+  darkgray: 0xa9a9a9,
+  darkgreen: 0x006400,
+  darkgrey: 0xa9a9a9,
+  darkkhaki: 0xbdb76b,
+  darkmagenta: 0x8b008b,
+  darkolivegreen: 0x556b2f,
+  darkorange: 0xff8c00,
+  darkorchid: 0x9932cc,
+  darkred: 0x8b0000,
+  darksalmon: 0xe9967a,
+  darkseagreen: 0x8fbc8f,
+  darkslateblue: 0x483d8b,
+  darkslategray: 0x2f4f4f,
+  darkslategrey: 0x2f4f4f,
+  darkturquoise: 0x00ced1,
+  darkviolet: 0x9400d3,
+  deeppink: 0xff1493,
+  deepskyblue: 0x00bfff,
+  dimgray: 0x696969,
+  dimgrey: 0x696969,
+  dodgerblue: 0x1e90ff,
+  firebrick: 0xb22222,
+  floralwhite: 0xfffaf0,
+  forestgreen: 0x228b22,
+  fuchsia: 0xff00ff,
+  gainsboro: 0xdcdcdc,
+  ghostwhite: 0xf8f8ff,
+  gold: 0xffd700,
+  goldenrod: 0xdaa520,
+  gray: 0x808080,
+  green: 0x008000,
+  greenyellow: 0xadff2f,
+  grey: 0x808080,
+  honeydew: 0xf0fff0,
+  hotpink: 0xff69b4,
+  indianred: 0xcd5c5c,
+  indigo: 0x4b0082,
+  ivory: 0xfffff0,
+  khaki: 0xf0e68c,
+  lavender: 0xe6e6fa,
+  lavenderblush: 0xfff0f5,
+  lawngreen: 0x7cfc00,
+  lemonchiffon: 0xfffacd,
+  lightblue: 0xadd8e6,
+  lightcoral: 0xf08080,
+  lightcyan: 0xe0ffff,
+  lightgoldenrodyellow: 0xfafad2,
+  lightgray: 0xd3d3d3,
+  lightgreen: 0x90ee90,
+  lightgrey: 0xd3d3d3,
+  lightpink: 0xffb6c1,
+  lightsalmon: 0xffa07a,
+  lightseagreen: 0x20b2aa,
+  lightskyblue: 0x87cefa,
+  lightslategray: 0x778899,
+  lightslategrey: 0x778899,
+  lightsteelblue: 0xb0c4de,
+  lightyellow: 0xffffe0,
+  lime: 0x00ff00,
+  limegreen: 0x32cd32,
+  linen: 0xfaf0e6,
+  magenta: 0xff00ff,
+  maroon: 0x800000,
+  mediumaquamarine: 0x66cdaa,
+  mediumblue: 0x0000cd,
+  mediumorchid: 0xba55d3,
+  mediumpurple: 0x9370db,
+  mediumseagreen: 0x3cb371,
+  mediumslateblue: 0x7b68ee,
+  mediumspringgreen: 0x00fa9a,
+  mediumturquoise: 0x48d1cc,
+  mediumvioletred: 0xc71585,
+  midnightblue: 0x191970,
+  mintcream: 0xf5fffa,
+  mistyrose: 0xffe4e1,
+  moccasin: 0xffe4b5,
+  navajowhite: 0xffdead,
+  navy: 0x000080,
+  oldlace: 0xfdf5e6,
+  olive: 0x808000,
+  olivedrab: 0x6b8e23,
+  orange: 0xffa500,
+  orangered: 0xff4500,
+  orchid: 0xda70d6,
+  palegoldenrod: 0xeee8aa,
+  palegreen: 0x98fb98,
+  paleturquoise: 0xafeeee,
+  palevioletred: 0xdb7093,
+  papayawhip: 0xffefd5,
+  peachpuff: 0xffdab9,
+  peru: 0xcd853f,
+  pink: 0xffc0cb,
+  plum: 0xdda0dd,
+  powderblue: 0xb0e0e6,
+  purple: 0x800080,
+  rebeccapurple: 0x663399,
+  red: 0xff0000,
+  rosybrown: 0xbc8f8f,
+  royalblue: 0x4169e1,
+  saddlebrown: 0x8b4513,
+  salmon: 0xfa8072,
+  sandybrown: 0xf4a460,
+  seagreen: 0x2e8b57,
+  seashell: 0xfff5ee,
+  sienna: 0xa0522d,
+  silver: 0xc0c0c0,
+  skyblue: 0x87ceeb,
+  slateblue: 0x6a5acd,
+  slategray: 0x708090,
+  slategrey: 0x708090,
+  snow: 0xfffafa,
+  springgreen: 0x00ff7f,
+  steelblue: 0x4682b4,
+  tan: 0xd2b48c,
+  teal: 0x008080,
+  thistle: 0xd8bfd8,
+  tomato: 0xff6347,
+  turquoise: 0x40e0d0,
+  violet: 0xee82ee,
+  wheat: 0xf5deb3,
+  white: 0xffffff,
+  whitesmoke: 0xf5f5f5,
+  yellow: 0xffff00,
+  yellowgreen: 0x9acd32
+};
+
+define(Color, color, {
+  displayable: function() {
+    return this.rgb().displayable();
+  },
+  toString: function() {
+    return this.rgb() + "";
+  }
+});
+
+function color(format) {
+  var m;
+  format = (format + "").trim().toLowerCase();
+  return (m = reHex3.exec(format)) ? (m = parseInt(m[1], 16), new Rgb((m >> 8 & 0xf) | (m >> 4 & 0x0f0), (m >> 4 & 0xf) | (m & 0xf0), ((m & 0xf) << 4) | (m & 0xf), 1)) // #f00
+      : (m = reHex6.exec(format)) ? rgbn(parseInt(m[1], 16)) // #ff0000
+      : (m = reRgbInteger.exec(format)) ? new Rgb(m[1], m[2], m[3], 1) // rgb(255, 0, 0)
+      : (m = reRgbPercent.exec(format)) ? new Rgb(m[1] * 255 / 100, m[2] * 255 / 100, m[3] * 255 / 100, 1) // rgb(100%, 0%, 0%)
+      : (m = reRgbaInteger.exec(format)) ? rgba(m[1], m[2], m[3], m[4]) // rgba(255, 0, 0, 1)
+      : (m = reRgbaPercent.exec(format)) ? rgba(m[1] * 255 / 100, m[2] * 255 / 100, m[3] * 255 / 100, m[4]) // rgb(100%, 0%, 0%, 1)
+      : (m = reHslPercent.exec(format)) ? hsla(m[1], m[2] / 100, m[3] / 100, 1) // hsl(120, 50%, 50%)
+      : (m = reHslaPercent.exec(format)) ? hsla(m[1], m[2] / 100, m[3] / 100, m[4]) // hsla(120, 50%, 50%, 1)
+      : named.hasOwnProperty(format) ? rgbn(named[format])
+      : format === "transparent" ? new Rgb(NaN, NaN, NaN, 0)
+      : null;
+}
+
+function rgbn(n) {
+  return new Rgb(n >> 16 & 0xff, n >> 8 & 0xff, n & 0xff, 1);
+}
+
+function rgba(r, g, b, a) {
+  if (a <= 0) r = g = b = NaN;
+  return new Rgb(r, g, b, a);
+}
+
+function rgbConvert(o) {
+  if (!(o instanceof Color)) o = color(o);
+  if (!o) return new Rgb;
+  o = o.rgb();
+  return new Rgb(o.r, o.g, o.b, o.opacity);
+}
+
+function rgb(r, g, b, opacity) {
+  return arguments.length === 1 ? rgbConvert(r) : new Rgb(r, g, b, opacity == null ? 1 : opacity);
+}
+
+function Rgb(r, g, b, opacity) {
+  this.r = +r;
+  this.g = +g;
+  this.b = +b;
+  this.opacity = +opacity;
+}
+
+define(Rgb, rgb, extend(Color, {
+  brighter: function(k) {
+    k = k == null ? brighter : Math.pow(brighter, k);
+    return new Rgb(this.r * k, this.g * k, this.b * k, this.opacity);
+  },
+  darker: function(k) {
+    k = k == null ? darker : Math.pow(darker, k);
+    return new Rgb(this.r * k, this.g * k, this.b * k, this.opacity);
+  },
+  rgb: function() {
+    return this;
+  },
+  displayable: function() {
+    return (0 <= this.r && this.r <= 255)
+        && (0 <= this.g && this.g <= 255)
+        && (0 <= this.b && this.b <= 255)
+        && (0 <= this.opacity && this.opacity <= 1);
+  },
+  toString: function() {
+    var a = this.opacity; a = isNaN(a) ? 1 : Math.max(0, Math.min(1, a));
+    return (a === 1 ? "rgb(" : "rgba(")
+        + Math.max(0, Math.min(255, Math.round(this.r) || 0)) + ", "
+        + Math.max(0, Math.min(255, Math.round(this.g) || 0)) + ", "
+        + Math.max(0, Math.min(255, Math.round(this.b) || 0))
+        + (a === 1 ? ")" : ", " + a + ")");
+  }
+}));
+
+function hsla(h, s, l, a) {
+  if (a <= 0) h = s = l = NaN;
+  else if (l <= 0 || l >= 1) h = s = NaN;
+  else if (s <= 0) h = NaN;
+  return new Hsl(h, s, l, a);
+}
+
+function hslConvert(o) {
+  if (o instanceof Hsl) return new Hsl(o.h, o.s, o.l, o.opacity);
+  if (!(o instanceof Color)) o = color(o);
+  if (!o) return new Hsl;
+  if (o instanceof Hsl) return o;
+  o = o.rgb();
+  var r = o.r / 255,
+      g = o.g / 255,
+      b = o.b / 255,
+      min = Math.min(r, g, b),
+      max = Math.max(r, g, b),
+      h = NaN,
+      s = max - min,
+      l = (max + min) / 2;
+  if (s) {
+    if (r === max) h = (g - b) / s + (g < b) * 6;
+    else if (g === max) h = (b - r) / s + 2;
+    else h = (r - g) / s + 4;
+    s /= l < 0.5 ? max + min : 2 - max - min;
+    h *= 60;
+  } else {
+    s = l > 0 && l < 1 ? 0 : h;
+  }
+  return new Hsl(h, s, l, o.opacity);
+}
+
+function hsl(h, s, l, opacity) {
+  return arguments.length === 1 ? hslConvert(h) : new Hsl(h, s, l, opacity == null ? 1 : opacity);
+}
+
+function Hsl(h, s, l, opacity) {
+  this.h = +h;
+  this.s = +s;
+  this.l = +l;
+  this.opacity = +opacity;
+}
+
+define(Hsl, hsl, extend(Color, {
+  brighter: function(k) {
+    k = k == null ? brighter : Math.pow(brighter, k);
+    return new Hsl(this.h, this.s, this.l * k, this.opacity);
+  },
+  darker: function(k) {
+    k = k == null ? darker : Math.pow(darker, k);
+    return new Hsl(this.h, this.s, this.l * k, this.opacity);
+  },
+  rgb: function() {
+    var h = this.h % 360 + (this.h < 0) * 360,
+        s = isNaN(h) || isNaN(this.s) ? 0 : this.s,
+        l = this.l,
+        m2 = l + (l < 0.5 ? l : 1 - l) * s,
+        m1 = 2 * l - m2;
+    return new Rgb(
+      hsl2rgb(h >= 240 ? h - 240 : h + 120, m1, m2),
+      hsl2rgb(h, m1, m2),
+      hsl2rgb(h < 120 ? h + 240 : h - 120, m1, m2),
+      this.opacity
+    );
+  },
+  displayable: function() {
+    return (0 <= this.s && this.s <= 1 || isNaN(this.s))
+        && (0 <= this.l && this.l <= 1)
+        && (0 <= this.opacity && this.opacity <= 1);
+  }
+}));
+
+/* From FvD 13.37, CSS Color Module Level 3 */
+function hsl2rgb(h, m1, m2) {
+  return (h < 60 ? m1 + (m2 - m1) * h / 60
+      : h < 180 ? m2
+      : h < 240 ? m1 + (m2 - m1) * (240 - h) / 60
+      : m1) * 255;
+}
+
+var deg2rad = Math.PI / 180;
+var rad2deg = 180 / Math.PI;
+
+var Kn = 18;
+var Xn = 0.950470;
+var Yn = 1;
+var Zn = 1.088830;
+var t0 = 4 / 29;
+var t1 = 6 / 29;
+var t2 = 3 * t1 * t1;
+var t3 = t1 * t1 * t1;
+
+function labConvert(o) {
+  if (o instanceof Lab) return new Lab(o.l, o.a, o.b, o.opacity);
+  if (o instanceof Hcl) {
+    var h = o.h * deg2rad;
+    return new Lab(o.l, Math.cos(h) * o.c, Math.sin(h) * o.c, o.opacity);
+  }
+  if (!(o instanceof Rgb)) o = rgbConvert(o);
+  var b = rgb2xyz(o.r),
+      a = rgb2xyz(o.g),
+      l = rgb2xyz(o.b),
+      x = xyz2lab((0.4124564 * b + 0.3575761 * a + 0.1804375 * l) / Xn),
+      y = xyz2lab((0.2126729 * b + 0.7151522 * a + 0.0721750 * l) / Yn),
+      z = xyz2lab((0.0193339 * b + 0.1191920 * a + 0.9503041 * l) / Zn);
+  return new Lab(116 * y - 16, 500 * (x - y), 200 * (y - z), o.opacity);
+}
+
+function lab(l, a, b, opacity) {
+  return arguments.length === 1 ? labConvert(l) : new Lab(l, a, b, opacity == null ? 1 : opacity);
+}
+
+function Lab(l, a, b, opacity) {
+  this.l = +l;
+  this.a = +a;
+  this.b = +b;
+  this.opacity = +opacity;
+}
+
+define(Lab, lab, extend(Color, {
+  brighter: function(k) {
+    return new Lab(this.l + Kn * (k == null ? 1 : k), this.a, this.b, this.opacity);
+  },
+  darker: function(k) {
+    return new Lab(this.l - Kn * (k == null ? 1 : k), this.a, this.b, this.opacity);
+  },
+  rgb: function() {
+    var y = (this.l + 16) / 116,
+        x = isNaN(this.a) ? y : y + this.a / 500,
+        z = isNaN(this.b) ? y : y - this.b / 200;
+    y = Yn * lab2xyz(y);
+    x = Xn * lab2xyz(x);
+    z = Zn * lab2xyz(z);
+    return new Rgb(
+      xyz2rgb( 3.2404542 * x - 1.5371385 * y - 0.4985314 * z), // D65 -> sRGB
+      xyz2rgb(-0.9692660 * x + 1.8760108 * y + 0.0415560 * z),
+      xyz2rgb( 0.0556434 * x - 0.2040259 * y + 1.0572252 * z),
+      this.opacity
+    );
+  }
+}));
+
+function xyz2lab(t) {
+  return t > t3 ? Math.pow(t, 1 / 3) : t / t2 + t0;
+}
+
+function lab2xyz(t) {
+  return t > t1 ? t * t * t : t2 * (t - t0);
+}
+
+function xyz2rgb(x) {
+  return 255 * (x <= 0.0031308 ? 12.92 * x : 1.055 * Math.pow(x, 1 / 2.4) - 0.055);
+}
+
+function rgb2xyz(x) {
+  return (x /= 255) <= 0.04045 ? x / 12.92 : Math.pow((x + 0.055) / 1.055, 2.4);
+}
+
+function hclConvert(o) {
+  if (o instanceof Hcl) return new Hcl(o.h, o.c, o.l, o.opacity);
+  if (!(o instanceof Lab)) o = labConvert(o);
+  var h = Math.atan2(o.b, o.a) * rad2deg;
+  return new Hcl(h < 0 ? h + 360 : h, Math.sqrt(o.a * o.a + o.b * o.b), o.l, o.opacity);
+}
+
+function hcl(h, c, l, opacity) {
+  return arguments.length === 1 ? hclConvert(h) : new Hcl(h, c, l, opacity == null ? 1 : opacity);
+}
+
+function Hcl(h, c, l, opacity) {
+  this.h = +h;
+  this.c = +c;
+  this.l = +l;
+  this.opacity = +opacity;
+}
+
+define(Hcl, hcl, extend(Color, {
+  brighter: function(k) {
+    return new Hcl(this.h, this.c, this.l + Kn * (k == null ? 1 : k), this.opacity);
+  },
+  darker: function(k) {
+    return new Hcl(this.h, this.c, this.l - Kn * (k == null ? 1 : k), this.opacity);
+  },
+  rgb: function() {
+    return labConvert(this).rgb();
+  }
+}));
+
+var A = -0.14861;
+var B = +1.78277;
+var C = -0.29227;
+var D = -0.90649;
+var E = +1.97294;
+var ED = E * D;
+var EB = E * B;
+var BC_DA = B * C - D * A;
+
+function cubehelixConvert(o) {
+  if (o instanceof Cubehelix) return new Cubehelix(o.h, o.s, o.l, o.opacity);
+  if (!(o instanceof Rgb)) o = rgbConvert(o);
+  var r = o.r / 255,
+      g = o.g / 255,
+      b = o.b / 255,
+      l = (BC_DA * b + ED * r - EB * g) / (BC_DA + ED - EB),
+      bl = b - l,
+      k = (E * (g - l) - C * bl) / D,
+      s = Math.sqrt(k * k + bl * bl) / (E * l * (1 - l)), // NaN if l=0 or l=1
+      h = s ? Math.atan2(k, bl) * rad2deg - 120 : NaN;
+  return new Cubehelix(h < 0 ? h + 360 : h, s, l, o.opacity);
+}
+
+function cubehelix(h, s, l, opacity) {
+  return arguments.length === 1 ? cubehelixConvert(h) : new Cubehelix(h, s, l, opacity == null ? 1 : opacity);
+}
+
+function Cubehelix(h, s, l, opacity) {
+  this.h = +h;
+  this.s = +s;
+  this.l = +l;
+  this.opacity = +opacity;
+}
+
+define(Cubehelix, cubehelix, extend(Color, {
+  brighter: function(k) {
+    k = k == null ? brighter : Math.pow(brighter, k);
+    return new Cubehelix(this.h, this.s, this.l * k, this.opacity);
+  },
+  darker: function(k) {
+    k = k == null ? darker : Math.pow(darker, k);
+    return new Cubehelix(this.h, this.s, this.l * k, this.opacity);
+  },
+  rgb: function() {
+    var h = isNaN(this.h) ? 0 : (this.h + 120) * deg2rad,
+        l = +this.l,
+        a = isNaN(this.s) ? 0 : this.s * l * (1 - l),
+        cosh = Math.cos(h),
+        sinh = Math.sin(h);
+    return new Rgb(
+      255 * (l + a * (A * cosh + B * sinh)),
+      255 * (l + a * (C * cosh + D * sinh)),
+      255 * (l + a * (E * cosh)),
+      this.opacity
+    );
+  }
+}));
+
+function basis$1(t1, v0, v1, v2, v3) {
+  var t2 = t1 * t1, t3 = t2 * t1;
+  return ((1 - 3 * t1 + 3 * t2 - t3) * v0
+      + (4 - 6 * t2 + 3 * t3) * v1
+      + (1 + 3 * t1 + 3 * t2 - 3 * t3) * v2
+      + t3 * v3) / 6;
+}
+
+var basis$2 = function(values) {
+  var n = values.length - 1;
+  return function(t) {
+    var i = t <= 0 ? (t = 0) : t >= 1 ? (t = 1, n - 1) : Math.floor(t * n),
+        v1 = values[i],
+        v2 = values[i + 1],
+        v0 = i > 0 ? values[i - 1] : 2 * v1 - v2,
+        v3 = i < n - 1 ? values[i + 2] : 2 * v2 - v1;
+    return basis$1((t - i / n) * n, v0, v1, v2, v3);
+  };
+};
+
+var basisClosed$1 = function(values) {
+  var n = values.length;
+  return function(t) {
+    var i = Math.floor(((t %= 1) < 0 ? ++t : t) * n),
+        v0 = values[(i + n - 1) % n],
+        v1 = values[i % n],
+        v2 = values[(i + 1) % n],
+        v3 = values[(i + 2) % n];
+    return basis$1((t - i / n) * n, v0, v1, v2, v3);
+  };
+};
+
+var constant$3 = function(x) {
+  return function() {
+    return x;
+  };
+};
+
+function linear$1(a, d) {
+  return function(t) {
+    return a + t * d;
+  };
+}
+
+function exponential$1(a, b, y) {
+  return a = Math.pow(a, y), b = Math.pow(b, y) - a, y = 1 / y, function(t) {
+    return Math.pow(a + t * b, y);
+  };
+}
+
+function hue(a, b) {
+  var d = b - a;
+  return d ? linear$1(a, d > 180 || d < -180 ? d - 360 * Math.round(d / 360) : d) : constant$3(isNaN(a) ? b : a);
+}
+
+function gamma(y) {
+  return (y = +y) === 1 ? nogamma : function(a, b) {
+    return b - a ? exponential$1(a, b, y) : constant$3(isNaN(a) ? b : a);
+  };
+}
+
+function nogamma(a, b) {
+  var d = b - a;
+  return d ? linear$1(a, d) : constant$3(isNaN(a) ? b : a);
+}
+
+var interpolateRgb = (function rgbGamma(y) {
+  var color$$1 = gamma(y);
+
+  function rgb$$1(start, end) {
+    var r = color$$1((start = rgb(start)).r, (end = rgb(end)).r),
+        g = color$$1(start.g, end.g),
+        b = color$$1(start.b, end.b),
+        opacity = color$$1(start.opacity, end.opacity);
+    return function(t) {
+      start.r = r(t);
+      start.g = g(t);
+      start.b = b(t);
+      start.opacity = opacity(t);
+      return start + "";
+    };
+  }
+
+  rgb$$1.gamma = rgbGamma;
+
+  return rgb$$1;
+})(1);
+
+function rgbSpline(spline) {
+  return function(colors) {
+    var n = colors.length,
+        r = new Array(n),
+        g = new Array(n),
+        b = new Array(n),
+        i, color$$1;
+    for (i = 0; i < n; ++i) {
+      color$$1 = rgb(colors[i]);
+      r[i] = color$$1.r || 0;
+      g[i] = color$$1.g || 0;
+      b[i] = color$$1.b || 0;
+    }
+    r = spline(r);
+    g = spline(g);
+    b = spline(b);
+    color$$1.opacity = 1;
+    return function(t) {
+      color$$1.r = r(t);
+      color$$1.g = g(t);
+      color$$1.b = b(t);
+      return color$$1 + "";
+    };
+  };
+}
+
+var rgbBasis = rgbSpline(basis$2);
+var rgbBasisClosed = rgbSpline(basisClosed$1);
+
+var array$1 = function(a, b) {
+  var nb = b ? b.length : 0,
+      na = a ? Math.min(nb, a.length) : 0,
+      x = new Array(nb),
+      c = new Array(nb),
+      i;
+
+  for (i = 0; i < na; ++i) x[i] = interpolate(a[i], b[i]);
+  for (; i < nb; ++i) c[i] = b[i];
+
+  return function(t) {
+    for (i = 0; i < na; ++i) c[i] = x[i](t);
+    return c;
+  };
+};
+
+var date = function(a, b) {
+  var d = new Date;
+  return a = +a, b -= a, function(t) {
+    return d.setTime(a + b * t), d;
+  };
+};
+
+var interpolateNumber = function(a, b) {
+  return a = +a, b -= a, function(t) {
+    return a + b * t;
+  };
+};
+
+var object = function(a, b) {
+  var i = {},
+      c = {},
+      k;
+
+  if (a === null || typeof a !== "object") a = {};
+  if (b === null || typeof b !== "object") b = {};
+
+  for (k in b) {
+    if (k in a) {
+      i[k] = interpolate(a[k], b[k]);
+    } else {
+      c[k] = b[k];
+    }
+  }
+
+  return function(t) {
+    for (k in i) c[k] = i[k](t);
+    return c;
+  };
+};
+
+var reA = /[-+]?(?:\d+\.?\d*|\.?\d+)(?:[eE][-+]?\d+)?/g;
+var reB = new RegExp(reA.source, "g");
+
+function zero(b) {
+  return function() {
+    return b;
+  };
+}
+
+function one(b) {
+  return function(t) {
+    return b(t) + "";
+  };
+}
+
+var interpolateString = function(a, b) {
+  var bi = reA.lastIndex = reB.lastIndex = 0, // scan index for next number in b
+      am, // current match in a
+      bm, // current match in b
+      bs, // string preceding current number in b, if any
+      i = -1, // index in s
+      s = [], // string constants and placeholders
+      q = []; // number interpolators
+
+  // Coerce inputs to strings.
+  a = a + "", b = b + "";
+
+  // Interpolate pairs of numbers in a & b.
+  while ((am = reA.exec(a))
+      && (bm = reB.exec(b))) {
+    if ((bs = bm.index) > bi) { // a string precedes the next number in b
+      bs = b.slice(bi, bs);
+      if (s[i]) s[i] += bs; // coalesce with previous string
+      else s[++i] = bs;
+    }
+    if ((am = am[0]) === (bm = bm[0])) { // numbers in a & b match
+      if (s[i]) s[i] += bm; // coalesce with previous string
+      else s[++i] = bm;
+    } else { // interpolate non-matching numbers
+      s[++i] = null;
+      q.push({i: i, x: interpolateNumber(am, bm)});
+    }
+    bi = reB.lastIndex;
+  }
+
+  // Add remains of b.
+  if (bi < b.length) {
+    bs = b.slice(bi);
+    if (s[i]) s[i] += bs; // coalesce with previous string
+    else s[++i] = bs;
+  }
+
+  // Special optimization for only a single match.
+  // Otherwise, interpolate each of the numbers and rejoin the string.
+  return s.length < 2 ? (q[0]
+      ? one(q[0].x)
+      : zero(b))
+      : (b = q.length, function(t) {
+          for (var i = 0, o; i < b; ++i) s[(o = q[i]).i] = o.x(t);
+          return s.join("");
+        });
+};
+
+var interpolate = function(a, b) {
+  var t = typeof b, c;
+  return b == null || t === "boolean" ? constant$3(b)
+      : (t === "number" ? interpolateNumber
+      : t === "string" ? ((c = color(b)) ? (b = c, interpolateRgb) : interpolateString)
+      : b instanceof color ? interpolateRgb
+      : b instanceof Date ? date
+      : Array.isArray(b) ? array$1
+      : isNaN(b) ? object
+      : interpolateNumber)(a, b);
+};
+
+var interpolateRound = function(a, b) {
+  return a = +a, b -= a, function(t) {
+    return Math.round(a + b * t);
+  };
+};
+
+var degrees = 180 / Math.PI;
+
+var identity$2 = {
+  translateX: 0,
+  translateY: 0,
+  rotate: 0,
+  skewX: 0,
+  scaleX: 1,
+  scaleY: 1
+};
+
+var decompose = function(a, b, c, d, e, f) {
+  var scaleX, scaleY, skewX;
+  if (scaleX = Math.sqrt(a * a + b * b)) a /= scaleX, b /= scaleX;
+  if (skewX = a * c + b * d) c -= a * skewX, d -= b * skewX;
+  if (scaleY = Math.sqrt(c * c + d * d)) c /= scaleY, d /= scaleY, skewX /= scaleY;
+  if (a * d < b * c) a = -a, b = -b, skewX = -skewX, scaleX = -scaleX;
+  return {
+    translateX: e,
+    translateY: f,
+    rotate: Math.atan2(b, a) * degrees,
+    skewX: Math.atan(skewX) * degrees,
+    scaleX: scaleX,
+    scaleY: scaleY
+  };
+};
+
+var cssNode;
+var cssRoot;
+var cssView;
+var svgNode;
+
+function parseCss(value) {
+  if (value === "none") return identity$2;
+  if (!cssNode) cssNode = document.createElement("DIV"), cssRoot = document.documentElement, cssView = document.defaultView;
+  cssNode.style.transform = value;
+  value = cssView.getComputedStyle(cssRoot.appendChild(cssNode), null).getPropertyValue("transform");
+  cssRoot.removeChild(cssNode);
+  value = value.slice(7, -1).split(",");
+  return decompose(+value[0], +value[1], +value[2], +value[3], +value[4], +value[5]);
+}
+
+function parseSvg(value) {
+  if (value == null) return identity$2;
+  if (!svgNode) svgNode = document.createElementNS("http://www.w3.org/2000/svg", "g");
+  svgNode.setAttribute("transform", value);
+  if (!(value = svgNode.transform.baseVal.consolidate())) return identity$2;
+  value = value.matrix;
+  return decompose(value.a, value.b, value.c, value.d, value.e, value.f);
+}
+
+function interpolateTransform(parse, pxComma, pxParen, degParen) {
+
+  function pop(s) {
+    return s.length ? s.pop() + " " : "";
+  }
+
+  function translate(xa, ya, xb, yb, s, q) {
+    if (xa !== xb || ya !== yb) {
+      var i = s.push("translate(", null, pxComma, null, pxParen);
+      q.push({i: i - 4, x: interpolateNumber(xa, xb)}, {i: i - 2, x: interpolateNumber(ya, yb)});
+    } else if (xb || yb) {
+      s.push("translate(" + xb + pxComma + yb + pxParen);
+    }
+  }
+
+  function rotate(a, b, s, q) {
+    if (a !== b) {
+      if (a - b > 180) b += 360; else if (b - a > 180) a += 360; // shortest path
+      q.push({i: s.push(pop(s) + "rotate(", null, degParen) - 2, x: interpolateNumber(a, b)});
+    } else if (b) {
+      s.push(pop(s) + "rotate(" + b + degParen);
+    }
+  }
+
+  function skewX(a, b, s, q) {
+    if (a !== b) {
+      q.push({i: s.push(pop(s) + "skewX(", null, degParen) - 2, x: interpolateNumber(a, b)});
+    } else if (b) {
+      s.push(pop(s) + "skewX(" + b + degParen);
+    }
+  }
+
+  function scale(xa, ya, xb, yb, s, q) {
+    if (xa !== xb || ya !== yb) {
+      var i = s.push(pop(s) + "scale(", null, ",", null, ")");
+      q.push({i: i - 4, x: interpolateNumber(xa, xb)}, {i: i - 2, x: interpolateNumber(ya, yb)});
+    } else if (xb !== 1 || yb !== 1) {
+      s.push(pop(s) + "scale(" + xb + "," + yb + ")");
+    }
+  }
+
+  return function(a, b) {
+    var s = [], // string constants and placeholders
+        q = []; // number interpolators
+    a = parse(a), b = parse(b);
+    translate(a.translateX, a.translateY, b.translateX, b.translateY, s, q);
+    rotate(a.rotate, b.rotate, s, q);
+    skewX(a.skewX, b.skewX, s, q);
+    scale(a.scaleX, a.scaleY, b.scaleX, b.scaleY, s, q);
+    a = b = null; // gc
+    return function(t) {
+      var i = -1, n = q.length, o;
+      while (++i < n) s[(o = q[i]).i] = o.x(t);
+      return s.join("");
+    };
+  };
+}
+
+var interpolateTransformCss = interpolateTransform(parseCss, "px, ", "px)", "deg)");
+var interpolateTransformSvg = interpolateTransform(parseSvg, ", ", ")", ")");
+
+var rho = Math.SQRT2;
+var rho2 = 2;
+var rho4 = 4;
+var epsilon2 = 1e-12;
+
+function cosh(x) {
+  return ((x = Math.exp(x)) + 1 / x) / 2;
+}
+
+function sinh(x) {
+  return ((x = Math.exp(x)) - 1 / x) / 2;
+}
+
+function tanh(x) {
+  return ((x = Math.exp(2 * x)) - 1) / (x + 1);
+}
+
+// p0 = [ux0, uy0, w0]
+// p1 = [ux1, uy1, w1]
+var interpolateZoom = function(p0, p1) {
+  var ux0 = p0[0], uy0 = p0[1], w0 = p0[2],
+      ux1 = p1[0], uy1 = p1[1], w1 = p1[2],
+      dx = ux1 - ux0,
+      dy = uy1 - uy0,
+      d2 = dx * dx + dy * dy,
+      i,
+      S;
+
+  // Special case for u0 ≅ u1.
+  if (d2 < epsilon2) {
+    S = Math.log(w1 / w0) / rho;
+    i = function(t) {
+      return [
+        ux0 + t * dx,
+        uy0 + t * dy,
+        w0 * Math.exp(rho * t * S)
+      ];
+    };
+  }
+
+  // General case.
+  else {
+    var d1 = Math.sqrt(d2),
+        b0 = (w1 * w1 - w0 * w0 + rho4 * d2) / (2 * w0 * rho2 * d1),
+        b1 = (w1 * w1 - w0 * w0 - rho4 * d2) / (2 * w1 * rho2 * d1),
+        r0 = Math.log(Math.sqrt(b0 * b0 + 1) - b0),
+        r1 = Math.log(Math.sqrt(b1 * b1 + 1) - b1);
+    S = (r1 - r0) / rho;
+    i = function(t) {
+      var s = t * S,
+          coshr0 = cosh(r0),
+          u = w0 / (rho2 * d1) * (coshr0 * tanh(rho * s + r0) - sinh(r0));
+      return [
+        ux0 + u * dx,
+        uy0 + u * dy,
+        w0 * coshr0 / cosh(rho * s + r0)
+      ];
+    };
+  }
+
+  i.duration = S * 1000;
+
+  return i;
+};
+
+function hsl$1(hue$$1) {
+  return function(start, end) {
+    var h = hue$$1((start = hsl(start)).h, (end = hsl(end)).h),
+        s = nogamma(start.s, end.s),
+        l = nogamma(start.l, end.l),
+        opacity = nogamma(start.opacity, end.opacity);
+    return function(t) {
+      start.h = h(t);
+      start.s = s(t);
+      start.l = l(t);
+      start.opacity = opacity(t);
+      return start + "";
+    };
+  }
+}
+
+var hsl$2 = hsl$1(hue);
+var hslLong = hsl$1(nogamma);
+
+function lab$1(start, end) {
+  var l = nogamma((start = lab(start)).l, (end = lab(end)).l),
+      a = nogamma(start.a, end.a),
+      b = nogamma(start.b, end.b),
+      opacity = nogamma(start.opacity, end.opacity);
+  return function(t) {
+    start.l = l(t);
+    start.a = a(t);
+    start.b = b(t);
+    start.opacity = opacity(t);
+    return start + "";
+  };
+}
+
+function hcl$1(hue$$1) {
+  return function(start, end) {
+    var h = hue$$1((start = hcl(start)).h, (end = hcl(end)).h),
+        c = nogamma(start.c, end.c),
+        l = nogamma(start.l, end.l),
+        opacity = nogamma(start.opacity, end.opacity);
+    return function(t) {
+      start.h = h(t);
+      start.c = c(t);
+      start.l = l(t);
+      start.opacity = opacity(t);
+      return start + "";
+    };
+  }
+}
+
+var hcl$2 = hcl$1(hue);
+var hclLong = hcl$1(nogamma);
+
+function cubehelix$1(hue$$1) {
+  return (function cubehelixGamma(y) {
+    y = +y;
+
+    function cubehelix$$1(start, end) {
+      var h = hue$$1((start = cubehelix(start)).h, (end = cubehelix(end)).h),
+          s = nogamma(start.s, end.s),
+          l = nogamma(start.l, end.l),
+          opacity = nogamma(start.opacity, end.opacity);
+      return function(t) {
+        start.h = h(t);
+        start.s = s(t);
+        start.l = l(Math.pow(t, y));
+        start.opacity = opacity(t);
+        return start + "";
+      };
+    }
+
+    cubehelix$$1.gamma = cubehelixGamma;
+
+    return cubehelix$$1;
+  })(1);
+}
+
+var cubehelix$2 = cubehelix$1(hue);
+var cubehelixLong = cubehelix$1(nogamma);
+
+var quantize = function(interpolator, n) {
+  var samples = new Array(n);
+  for (var i = 0; i < n; ++i) samples[i] = interpolator(i / (n - 1));
+  return samples;
+};
+
+var noop$1 = {value: function() {}};
+
+function dispatch() {
+  for (var i = 0, n = arguments.length, _ = {}, t; i < n; ++i) {
+    if (!(t = arguments[i] + "") || (t in _)) throw new Error("illegal type: " + t);
+    _[t] = [];
+  }
+  return new Dispatch(_);
+}
+
+function Dispatch(_) {
+  this._ = _;
+}
+
+function parseTypenames(typenames, types) {
+  return typenames.trim().split(/^|\s+/).map(function(t) {
+    var name = "", i = t.indexOf(".");
+    if (i >= 0) name = t.slice(i + 1), t = t.slice(0, i);
+    if (t && !types.hasOwnProperty(t)) throw new Error("unknown type: " + t);
+    return {type: t, name: name};
+  });
+}
+
+Dispatch.prototype = dispatch.prototype = {
+  constructor: Dispatch,
+  on: function(typename, callback) {
+    var _ = this._,
+        T = parseTypenames(typename + "", _),
+        t,
+        i = -1,
+        n = T.length;
+
+    // If no callback was specified, return the callback of the given type and name.
+    if (arguments.length < 2) {
+      while (++i < n) if ((t = (typename = T[i]).type) && (t = get(_[t], typename.name))) return t;
+      return;
+    }
+
+    // If a type was specified, set the callback for the given type and name.
+    // Otherwise, if a null callback was specified, remove callbacks of the given name.
+    if (callback != null && typeof callback !== "function") throw new Error("invalid callback: " + callback);
+    while (++i < n) {
+      if (t = (typename = T[i]).type) _[t] = set$2(_[t], typename.name, callback);
+      else if (callback == null) for (t in _) _[t] = set$2(_[t], typename.name, null);
+    }
+
+    return this;
+  },
+  copy: function() {
+    var copy = {}, _ = this._;
+    for (var t in _) copy[t] = _[t].slice();
+    return new Dispatch(copy);
+  },
+  call: function(type, that) {
+    if ((n = arguments.length - 2) > 0) for (var args = new Array(n), i = 0, n, t; i < n; ++i) args[i] = arguments[i + 2];
+    if (!this._.hasOwnProperty(type)) throw new Error("unknown type: " + type);
+    for (t = this._[type], i = 0, n = t.length; i < n; ++i) t[i].value.apply(that, args);
+  },
+  apply: function(type, that, args) {
+    if (!this._.hasOwnProperty(type)) throw new Error("unknown type: " + type);
+    for (var t = this._[type], i = 0, n = t.length; i < n; ++i) t[i].value.apply(that, args);
+  }
+};
+
+function get(type, name) {
+  for (var i = 0, n = type.length, c; i < n; ++i) {
+    if ((c = type[i]).name === name) {
+      return c.value;
+    }
+  }
+}
+
+function set$2(type, name, callback) {
+  for (var i = 0, n = type.length; i < n; ++i) {
+    if (type[i].name === name) {
+      type[i] = noop$1, type = type.slice(0, i).concat(type.slice(i + 1));
+      break;
+    }
+  }
+  if (callback != null) type.push({name: name, value: callback});
+  return type;
+}
+
+function objectConverter(columns) {
+  return new Function("d", "return {" + columns.map(function(name, i) {
+    return JSON.stringify(name) + ": d[" + i + "]";
+  }).join(",") + "}");
+}
+
+function customConverter(columns, f) {
+  var object = objectConverter(columns);
+  return function(row, i) {
+    return f(object(row), i, columns);
+  };
+}
+
+// Compute unique columns in order of discovery.
+function inferColumns(rows) {
+  var columnSet = Object.create(null),
+      columns = [];
+
+  rows.forEach(function(row) {
+    for (var column in row) {
+      if (!(column in columnSet)) {
+        columns.push(columnSet[column] = column);
+      }
+    }
+  });
+
+  return columns;
+}
+
+var dsv = function(delimiter) {
+  var reFormat = new RegExp("[\"" + delimiter + "\n]"),
+      delimiterCode = delimiter.charCodeAt(0);
+
+  function parse(text, f) {
+    var convert, columns, rows = parseRows(text, function(row, i) {
+      if (convert) return convert(row, i - 1);
+      columns = row, convert = f ? customConverter(row, f) : objectConverter(row);
+    });
+    rows.columns = columns;
+    return rows;
+  }
+
+  function parseRows(text, f) {
+    var EOL = {}, // sentinel value for end-of-line
+        EOF = {}, // sentinel value for end-of-file
+        rows = [], // output rows
+        N = text.length,
+        I = 0, // current character index
+        n = 0, // the current line number
+        t, // the current token
+        eol; // is the current token followed by EOL?
+
+    function token() {
+      if (I >= N) return EOF; // special case: end of file
+      if (eol) return eol = false, EOL; // special case: end of line
+
+      // special case: quotes
+      var j = I, c;
+      if (text.charCodeAt(j) === 34) {
+        var i = j;
+        while (i++ < N) {
+          if (text.charCodeAt(i) === 34) {
+            if (text.charCodeAt(i + 1) !== 34) break;
+            ++i;
+          }
+        }
+        I = i + 2;
+        c = text.charCodeAt(i + 1);
+        if (c === 13) {
+          eol = true;
+          if (text.charCodeAt(i + 2) === 10) ++I;
+        } else if (c === 10) {
+          eol = true;
+        }
+        return text.slice(j + 1, i).replace(/""/g, "\"");
+      }
+
+      // common case: find next delimiter or newline
+      while (I < N) {
+        var k = 1;
+        c = text.charCodeAt(I++);
+        if (c === 10) eol = true; // \n
+        else if (c === 13) { eol = true; if (text.charCodeAt(I) === 10) ++I, ++k; } // \r|\r\n
+        else if (c !== delimiterCode) continue;
+        return text.slice(j, I - k);
+      }
+
+      // special case: last token before EOF
+      return text.slice(j);
+    }
+
+    while ((t = token()) !== EOF) {
+      var a = [];
+      while (t !== EOL && t !== EOF) {
+        a.push(t);
+        t = token();
+      }
+      if (f && (a = f(a, n++)) == null) continue;
+      rows.push(a);
+    }
+
+    return rows;
+  }
+
+  function format(rows, columns) {
+    if (columns == null) columns = inferColumns(rows);
+    return [columns.map(formatValue).join(delimiter)].concat(rows.map(function(row) {
+      return columns.map(function(column) {
+        return formatValue(row[column]);
+      }).join(delimiter);
+    })).join("\n");
+  }
+
+  function formatRows(rows) {
+    return rows.map(formatRow).join("\n");
+  }
+
+  function formatRow(row) {
+    return row.map(formatValue).join(delimiter);
+  }
+
+  function formatValue(text) {
+    return text == null ? ""
+        : reFormat.test(text += "") ? "\"" + text.replace(/\"/g, "\"\"") + "\""
+        : text;
+  }
+
+  return {
+    parse: parse,
+    parseRows: parseRows,
+    format: format,
+    formatRows: formatRows
+  };
+};
+
+var csv = dsv(",");
+
+var csvParse = csv.parse;
+var csvParseRows = csv.parseRows;
+var csvFormat = csv.format;
+var csvFormatRows = csv.formatRows;
+
+var tsv = dsv("\t");
+
+var tsvParse = tsv.parse;
+var tsvParseRows = tsv.parseRows;
+var tsvFormat = tsv.format;
+var tsvFormatRows = tsv.formatRows;
+
+var request = function(url, callback) {
+  var request,
+      event = dispatch("beforesend", "progress", "load", "error"),
+      mimeType,
+      headers = map$1(),
+      xhr = new XMLHttpRequest,
+      user = null,
+      password = null,
+      response,
+      responseType,
+      timeout = 0;
+
+  // If IE does not support CORS, use XDomainRequest.
+  if (typeof XDomainRequest !== "undefined"
+      && !("withCredentials" in xhr)
+      && /^(http(s)?:)?\/\//.test(url)) xhr = new XDomainRequest;
+
+  "onload" in xhr
+      ? xhr.onload = xhr.onerror = xhr.ontimeout = respond
+      : xhr.onreadystatechange = function(o) { xhr.readyState > 3 && respond(o); };
+
+  function respond(o) {
+    var status = xhr.status, result;
+    if (!status && hasResponse(xhr)
+        || status >= 200 && status < 300
+        || status === 304) {
+      if (response) {
+        try {
+          result = response.call(request, xhr);
+        } catch (e) {
+          event.call("error", request, e);
+          return;
+        }
+      } else {
+        result = xhr;
+      }
+      event.call("load", request, result);
+    } else {
+      event.call("error", request, o);
+    }
+  }
+
+  xhr.onprogress = function(e) {
+    event.call("progress", request, e);
+  };
+
+  request = {
+    header: function(name, value) {
+      name = (name + "").toLowerCase();
+      if (arguments.length < 2) return headers.get(name);
+      if (value == null) headers.remove(name);
+      else headers.set(name, value + "");
+      return request;
+    },
+
+    // If mimeType is non-null and no Accept header is set, a default is used.
+    mimeType: function(value) {
+      if (!arguments.length) return mimeType;
+      mimeType = value == null ? null : value + "";
+      return request;
+    },
+
+    // Specifies what type the response value should take;
+    // for instance, arraybuffer, blob, document, or text.
+    responseType: function(value) {
+      if (!arguments.length) return responseType;
+      responseType = value;
+      return request;
+    },
+
+    timeout: function(value) {
+      if (!arguments.length) return timeout;
+      timeout = +value;
+      return request;
+    },
+
+    user: function(value) {
+      return arguments.length < 1 ? user : (user = value == null ? null : value + "", request);
+    },
+
+    password: function(value) {
+      return arguments.length < 1 ? password : (password = value == null ? null : value + "", request);
+    },
+
+    // Specify how to convert the response content to a specific type;
+    // changes the callback value on "load" events.
+    response: function(value) {
+      response = value;
+      return request;
+    },
+
+    // Alias for send("GET", …).
+    get: function(data, callback) {
+      return request.send("GET", data, callback);
+    },
+
+    // Alias for send("POST", …).
+    post: function(data, callback) {
+      return request.send("POST", data, callback);
+    },
+
+    // If callback is non-null, it will be used for error and load events.
+    send: function(method, data, callback) {
+      xhr.open(method, url, true, user, password);
+      if (mimeType != null && !headers.has("accept")) headers.set("accept", mimeType + ",*/*");
+      if (xhr.setRequestHeader) headers.each(function(value, name) { xhr.setRequestHeader(name, value); });
+      if (mimeType != null && xhr.overrideMimeType) xhr.overrideMimeType(mimeType);
+      if (responseType != null) xhr.responseType = responseType;
+      if (timeout > 0) xhr.timeout = timeout;
+      if (callback == null && typeof data === "function") callback = data, data = null;
+      if (callback != null && callback.length === 1) callback = fixCallback(callback);
+      if (callback != null) request.on("error", callback).on("load", function(xhr) { callback(null, xhr); });
+      event.call("beforesend", request, xhr);
+      xhr.send(data == null ? null : data);
+      return request;
+    },
+
+    abort: function() {
+      xhr.abort();
+      return request;
+    },
+
+    on: function() {
+      var value = event.on.apply(event, arguments);
+      return value === event ? request : value;
+    }
+  };
+
+  if (callback != null) {
+    if (typeof callback !== "function") throw new Error("invalid callback: " + callback);
+    return request.get(callback);
+  }
+
+  return request;
+};
+
+function fixCallback(callback) {
+  return function(error, xhr) {
+    callback(error == null ? xhr : null);
+  };
+}
+
+function hasResponse(xhr) {
+  var type = xhr.responseType;
+  return type && type !== "text"
+      ? xhr.response // null on error
+      : xhr.responseText; // "" on error
+}
+
+var type = function(defaultMimeType, response) {
+  return function(url, callback) {
+    var r = request(url).mimeType(defaultMimeType).response(response);
+    if (callback != null) {
+      if (typeof callback !== "function") throw new Error("invalid callback: " + callback);
+      return r.get(callback);
+    }
+    return r;
+  };
+};
+
+var html = type("text/html", function(xhr) {
+  return document.createRange().createContextualFragment(xhr.responseText);
+});
+
+var json = type("application/json", function(xhr) {
+  return JSON.parse(xhr.responseText);
+});
+
+var text = type("text/plain", function(xhr) {
+  return xhr.responseText;
+});
+
+var xml = type("application/xml", function(xhr) {
+  var xml = xhr.responseXML;
+  if (!xml) throw new Error("parse error");
+  return xml;
+});
+
+var dsv$1 = function(defaultMimeType, parse) {
+  return function(url, row, callback) {
+    if (arguments.length < 3) callback = row, row = null;
+    var r = request(url).mimeType(defaultMimeType);
+    r.row = function(_) { return arguments.length ? r.response(responseOf(parse, row = _)) : row; };
+    r.row(row);
+    return callback ? r.get(callback) : r;
+  };
+};
+
+function responseOf(parse, row) {
+  return function(request$$1) {
+    return parse(request$$1.responseText, row);
+  };
+}
+
+var csv$1 = dsv$1("text/csv", csvParse);
+
+var tsv$1 = dsv$1("text/tab-separated-values", tsvParse);
+
+var frame = 0;
+var timeout = 0;
+var interval = 0;
+var pokeDelay = 1000;
+var taskHead;
+var taskTail;
+var clockLast = 0;
+var clockNow = 0;
+var clockSkew = 0;
+var clock = typeof performance === "object" && performance.now ? performance : Date;
+var setFrame = typeof requestAnimationFrame === "function" ? requestAnimationFrame : function(f) { setTimeout(f, 17); };
+
+function now() {
+  return clockNow || (setFrame(clearNow), clockNow = clock.now() + clockSkew);
+}
+
+function clearNow() {
+  clockNow = 0;
+}
+
+function Timer() {
+  this._call =
+  this._time =
+  this._next = null;
+}
+
+Timer.prototype = timer.prototype = {
+  constructor: Timer,
+  restart: function(callback, delay, time) {
+    if (typeof callback !== "function") throw new TypeError("callback is not a function");
+    time = (time == null ? now() : +time) + (delay == null ? 0 : +delay);
+    if (!this._next && taskTail !== this) {
+      if (taskTail) taskTail._next = this;
+      else taskHead = this;
+      taskTail = this;
+    }
+    this._call = callback;
+    this._time = time;
+    sleep();
+  },
+  stop: function() {
+    if (this._call) {
+      this._call = null;
+      this._time = Infinity;
+      sleep();
+    }
+  }
+};
+
+function timer(callback, delay, time) {
+  var t = new Timer;
+  t.restart(callback, delay, time);
+  return t;
+}
+
+function timerFlush() {
+  now(); // Get the current time, if not already set.
+  ++frame; // Pretend we’ve set an alarm, if we haven’t already.
+  var t = taskHead, e;
+  while (t) {
+    if ((e = clockNow - t._time) >= 0) t._call.call(null, e);
+    t = t._next;
+  }
+  --frame;
+}
+
+function wake() {
+  clockNow = (clockLast = clock.now()) + clockSkew;
+  frame = timeout = 0;
+  try {
+    timerFlush();
+  } finally {
+    frame = 0;
+    nap();
+    clockNow = 0;
+  }
+}
+
+function poke$1() {
+  var now = clock.now(), delay = now - clockLast;
+  if (delay > pokeDelay) clockSkew -= delay, clockLast = now;
+}
+
+function nap() {
+  var t0, t1 = taskHead, t2, time = Infinity;
+  while (t1) {
+    if (t1._call) {
+      if (time > t1._time) time = t1._time;
+      t0 = t1, t1 = t1._next;
+    } else {
+      t2 = t1._next, t1._next = null;
+      t1 = t0 ? t0._next = t2 : taskHead = t2;
+    }
+  }
+  taskTail = t0;
+  sleep(time);
+}
+
+function sleep(time) {
+  if (frame) return; // Soonest alarm already set, or will be.
+  if (timeout) timeout = clearTimeout(timeout);
+  var delay = time - clockNow;
+  if (delay > 24) {
+    if (time < Infinity) timeout = setTimeout(wake, delay);
+    if (interval) interval = clearInterval(interval);
+  } else {
+    if (!interval) interval = setInterval(poke$1, pokeDelay);
+    frame = 1, setFrame(wake);
+  }
+}
+
+var timeout$1 = function(callback, delay, time) {
+  var t = new Timer;
+  delay = delay == null ? 0 : +delay;
+  t.restart(function(elapsed) {
+    t.stop();
+    callback(elapsed + delay);
+  }, delay, time);
+  return t;
+};
+
+var interval$1 = function(callback, delay, time) {
+  var t = new Timer, total = delay;
+  if (delay == null) return t.restart(callback, delay, time), t;
+  delay = +delay, time = time == null ? now() : +time;
+  t.restart(function tick(elapsed) {
+    elapsed += total;
+    t.restart(tick, total += delay, time);
+    callback(elapsed);
+  }, delay, time);
+  return t;
+};
+
+var t0$1 = new Date;
+var t1$1 = new Date;
+
+function newInterval(floori, offseti, count, field) {
+
+  function interval(date) {
+    return floori(date = new Date(+date)), date;
+  }
+
+  interval.floor = interval;
+
+  interval.ceil = function(date) {
+    return floori(date = new Date(date - 1)), offseti(date, 1), floori(date), date;
+  };
+
+  interval.round = function(date) {
+    var d0 = interval(date),
+        d1 = interval.ceil(date);
+    return date - d0 < d1 - date ? d0 : d1;
+  };
+
+  interval.offset = function(date, step) {
+    return offseti(date = new Date(+date), step == null ? 1 : Math.floor(step)), date;
+  };
+
+  interval.range = function(start, stop, step) {
+    var range = [];
+    start = interval.ceil(start);
+    step = step == null ? 1 : Math.floor(step);
+    if (!(start < stop) || !(step > 0)) return range; // also handles Invalid Date
+    do range.push(new Date(+start)); while (offseti(start, step), floori(start), start < stop)
+    return range;
+  };
+
+  interval.filter = function(test) {
+    return newInterval(function(date) {
+      if (date >= date) while (floori(date), !test(date)) date.setTime(date - 1);
+    }, function(date, step) {
+      if (date >= date) while (--step >= 0) while (offseti(date, 1), !test(date)) {} // eslint-disable-line no-empty
+    });
+  };
+
+  if (count) {
+    interval.count = function(start, end) {
+      t0$1.setTime(+start), t1$1.setTime(+end);
+      floori(t0$1), floori(t1$1);
+      return Math.floor(count(t0$1, t1$1));
+    };
+
+    interval.every = function(step) {
+      step = Math.floor(step);
+      return !isFinite(step) || !(step > 0) ? null
+          : !(step > 1) ? interval
+          : interval.filter(field
+              ? function(d) { return field(d) % step === 0; }
+              : function(d) { return interval.count(0, d) % step === 0; });
+    };
+  }
+
+  return interval;
+}
+
+var millisecond = newInterval(function() {
+  // noop
+}, function(date, step) {
+  date.setTime(+date + step);
+}, function(start, end) {
+  return end - start;
+});
+
+// An optimized implementation for this simple case.
+millisecond.every = function(k) {
+  k = Math.floor(k);
+  if (!isFinite(k) || !(k > 0)) return null;
+  if (!(k > 1)) return millisecond;
+  return newInterval(function(date) {
+    date.setTime(Math.floor(date / k) * k);
+  }, function(date, step) {
+    date.setTime(+date + step * k);
+  }, function(start, end) {
+    return (end - start) / k;
+  });
+};
+
+var milliseconds = millisecond.range;
+
+var durationSecond = 1e3;
+var durationMinute = 6e4;
+var durationHour = 36e5;
+var durationDay = 864e5;
+var durationWeek = 6048e5;
+
+var second = newInterval(function(date) {
+  date.setTime(Math.floor(date / durationSecond) * durationSecond);
+}, function(date, step) {
+  date.setTime(+date + step * durationSecond);
+}, function(start, end) {
+  return (end - start) / durationSecond;
+}, function(date) {
+  return date.getUTCSeconds();
+});
+
+var seconds = second.range;
+
+var minute = newInterval(function(date) {
+  date.setTime(Math.floor(date / durationMinute) * durationMinute);
+}, function(date, step) {
+  date.setTime(+date + step * durationMinute);
+}, function(start, end) {
+  return (end - start) / durationMinute;
+}, function(date) {
+  return date.getMinutes();
+});
+
+var minutes = minute.range;
+
+var hour = newInterval(function(date) {
+  var offset = date.getTimezoneOffset() * durationMinute % durationHour;
+  if (offset < 0) offset += durationHour;
+  date.setTime(Math.floor((+date - offset) / durationHour) * durationHour + offset);
+}, function(date, step) {
+  date.setTime(+date + step * durationHour);
+}, function(start, end) {
+  return (end - start) / durationHour;
+}, function(date) {
+  return date.getHours();
+});
+
+var hours = hour.range;
+
+var day = newInterval(function(date) {
+  date.setHours(0, 0, 0, 0);
+}, function(date, step) {
+  date.setDate(date.getDate() + step);
+}, function(start, end) {
+  return (end - start - (end.getTimezoneOffset() - start.getTimezoneOffset()) * durationMinute) / durationDay;
+}, function(date) {
+  return date.getDate() - 1;
+});
+
+var days = day.range;
+
+function weekday(i) {
+  return newInterval(function(date) {
+    date.setDate(date.getDate() - (date.getDay() + 7 - i) % 7);
+    date.setHours(0, 0, 0, 0);
+  }, function(date, step) {
+    date.setDate(date.getDate() + step * 7);
+  }, function(start, end) {
+    return (end - start - (end.getTimezoneOffset() - start.getTimezoneOffset()) * durationMinute) / durationWeek;
+  });
+}
+
+var sunday = weekday(0);
+var monday = weekday(1);
+var tuesday = weekday(2);
+var wednesday = weekday(3);
+var thursday = weekday(4);
+var friday = weekday(5);
+var saturday = weekday(6);
+
+var sundays = sunday.range;
+var mondays = monday.range;
+var tuesdays = tuesday.range;
+var wednesdays = wednesday.range;
+var thursdays = thursday.range;
+var fridays = friday.range;
+var saturdays = saturday.range;
+
+var month = newInterval(function(date) {
+  date.setDate(1);
+  date.setHours(0, 0, 0, 0);
+}, function(date, step) {
+  date.setMonth(date.getMonth() + step);
+}, function(start, end) {
+  return end.getMonth() - start.getMonth() + (end.getFullYear() - start.getFullYear()) * 12;
+}, function(date) {
+  return date.getMonth();
+});
+
+var months = month.range;
+
+var year = newInterval(function(date) {
+  date.setMonth(0, 1);
+  date.setHours(0, 0, 0, 0);
+}, function(date, step) {
+  date.setFullYear(date.getFullYear() + step);
+}, function(start, end) {
+  return end.getFullYear() - start.getFullYear();
+}, function(date) {
+  return date.getFullYear();
+});
+
+// An optimized implementation for this simple case.
+year.every = function(k) {
+  return !isFinite(k = Math.floor(k)) || !(k > 0) ? null : newInterval(function(date) {
+    date.setFullYear(Math.floor(date.getFullYear() / k) * k);
+    date.setMonth(0, 1);
+    date.setHours(0, 0, 0, 0);
+  }, function(date, step) {
+    date.setFullYear(date.getFullYear() + step * k);
+  });
+};
+
+var years = year.range;
+
+var utcMinute = newInterval(function(date) {
+  date.setUTCSeconds(0, 0);
+}, function(date, step) {
+  date.setTime(+date + step * durationMinute);
+}, function(start, end) {
+  return (end - start) / durationMinute;
+}, function(date) {
+  return date.getUTCMinutes();
+});
+
+var utcMinutes = utcMinute.range;
+
+var utcHour = newInterval(function(date) {
+  date.setUTCMinutes(0, 0, 0);
+}, function(date, step) {
+  date.setTime(+date + step * durationHour);
+}, function(start, end) {
+  return (end - start) / durationHour;
+}, function(date) {
+  return date.getUTCHours();
+});
+
+var utcHours = utcHour.range;
+
+var utcDay = newInterval(function(date) {
+  date.setUTCHours(0, 0, 0, 0);
+}, function(date, step) {
+  date.setUTCDate(date.getUTCDate() + step);
+}, function(start, end) {
+  return (end - start) / durationDay;
+}, function(date) {
+  return date.getUTCDate() - 1;
+});
+
+var utcDays = utcDay.range;
+
+function utcWeekday(i) {
+  return newInterval(function(date) {
+    date.setUTCDate(date.getUTCDate() - (date.getUTCDay() + 7 - i) % 7);
+    date.setUTCHours(0, 0, 0, 0);
+  }, function(date, step) {
+    date.setUTCDate(date.getUTCDate() + step * 7);
+  }, function(start, end) {
+    return (end - start) / durationWeek;
+  });
+}
+
+var utcSunday = utcWeekday(0);
+var utcMonday = utcWeekday(1);
+var utcTuesday = utcWeekday(2);
+var utcWednesday = utcWeekday(3);
+var utcThursday = utcWeekday(4);
+var utcFriday = utcWeekday(5);
+var utcSaturday = utcWeekday(6);
+
+var utcSundays = utcSunday.range;
+var utcMondays = utcMonday.range;
+var utcTuesdays = utcTuesday.range;
+var utcWednesdays = utcWednesday.range;
+var utcThursdays = utcThursday.range;
+var utcFridays = utcFriday.range;
+var utcSaturdays = utcSaturday.range;
+
+var utcMonth = newInterval(function(date) {
+  date.setUTCDate(1);
+  date.setUTCHours(0, 0, 0, 0);
+}, function(date, step) {
+  date.setUTCMonth(date.getUTCMonth() + step);
+}, function(start, end) {
+  return end.getUTCMonth() - start.getUTCMonth() + (end.getUTCFullYear() - start.getUTCFullYear()) * 12;
+}, function(date) {
+  return date.getUTCMonth();
+});
+
+var utcMonths = utcMonth.range;
+
+var utcYear = newInterval(function(date) {
+  date.setUTCMonth(0, 1);
+  date.setUTCHours(0, 0, 0, 0);
+}, function(date, step) {
+  date.setUTCFullYear(date.getUTCFullYear() + step);
+}, function(start, end) {
+  return end.getUTCFullYear() - start.getUTCFullYear();
+}, function(date) {
+  return date.getUTCFullYear();
+});
+
+// An optimized implementation for this simple case.
+utcYear.every = function(k) {
+  return !isFinite(k = Math.floor(k)) || !(k > 0) ? null : newInterval(function(date) {
+    date.setUTCFullYear(Math.floor(date.getUTCFullYear() / k) * k);
+    date.setUTCMonth(0, 1);
+    date.setUTCHours(0, 0, 0, 0);
+  }, function(date, step) {
+    date.setUTCFullYear(date.getUTCFullYear() + step * k);
+  });
+};
+
+var utcYears = utcYear.range;
+
+// Computes the decimal coefficient and exponent of the specified number x with
+// significant digits p, where x is positive and p is in [1, 21] or undefined.
+// For example, formatDecimal(1.23) returns ["123", 0].
+var formatDecimal = function(x, p) {
+  if ((i = (x = p ? x.toExponential(p - 1) : x.toExponential()).indexOf("e")) < 0) return null; // NaN, ±Infinity
+  var i, coefficient = x.slice(0, i);
+
+  // The string returned by toExponential either has the form \d\.\d+e[-+]\d+
+  // (e.g., 1.2e+3) or the form \de[-+]\d+ (e.g., 1e+3).
+  return [
+    coefficient.length > 1 ? coefficient[0] + coefficient.slice(2) : coefficient,
+    +x.slice(i + 1)
+  ];
+};
+
+var exponent$1 = function(x) {
+  return x = formatDecimal(Math.abs(x)), x ? x[1] : NaN;
+};
+
+var formatGroup = function(grouping, thousands) {
+  return function(value, width) {
+    var i = value.length,
+        t = [],
+        j = 0,
+        g = grouping[0],
+        length = 0;
+
+    while (i > 0 && g > 0) {
+      if (length + g + 1 > width) g = Math.max(1, width - length);
+      t.push(value.substring(i -= g, i + g));
+      if ((length += g + 1) > width) break;
+      g = grouping[j = (j + 1) % grouping.length];
+    }
+
+    return t.reverse().join(thousands);
+  };
+};
+
+var formatDefault = function(x, p) {
+  x = x.toPrecision(p);
+
+  out: for (var n = x.length, i = 1, i0 = -1, i1; i < n; ++i) {
+    switch (x[i]) {
+      case ".": i0 = i1 = i; break;
+      case "0": if (i0 === 0) i0 = i; i1 = i; break;
+      case "e": break out;
+      default: if (i0 > 0) i0 = 0; break;
+    }
+  }
+
+  return i0 > 0 ? x.slice(0, i0) + x.slice(i1 + 1) : x;
+};
+
+var prefixExponent;
+
+var formatPrefixAuto = function(x, p) {
+  var d = formatDecimal(x, p);
+  if (!d) return x + "";
+  var coefficient = d[0],
+      exponent = d[1],
+      i = exponent - (prefixExponent = Math.max(-8, Math.min(8, Math.floor(exponent / 3))) * 3) + 1,
+      n = coefficient.length;
+  return i === n ? coefficient
+      : i > n ? coefficient + new Array(i - n + 1).join("0")
+      : i > 0 ? coefficient.slice(0, i) + "." + coefficient.slice(i)
+      : "0." + new Array(1 - i).join("0") + formatDecimal(x, Math.max(0, p + i - 1))[0]; // less than 1y!
+};
+
+var formatRounded = function(x, p) {
+  var d = formatDecimal(x, p);
+  if (!d) return x + "";
+  var coefficient = d[0],
+      exponent = d[1];
+  return exponent < 0 ? "0." + new Array(-exponent).join("0") + coefficient
+      : coefficient.length > exponent + 1 ? coefficient.slice(0, exponent + 1) + "." + coefficient.slice(exponent + 1)
+      : coefficient + new Array(exponent - coefficient.length + 2).join("0");
+};
+
+var formatTypes = {
+  "": formatDefault,
+  "%": function(x, p) { return (x * 100).toFixed(p); },
+  "b": function(x) { return Math.round(x).toString(2); },
+  "c": function(x) { return x + ""; },
+  "d": function(x) { return Math.round(x).toString(10); },
+  "e": function(x, p) { return x.toExponential(p); },
+  "f": function(x, p) { return x.toFixed(p); },
+  "g": function(x, p) { return x.toPrecision(p); },
+  "o": function(x) { return Math.round(x).toString(8); },
+  "p": function(x, p) { return formatRounded(x * 100, p); },
+  "r": formatRounded,
+  "s": formatPrefixAuto,
+  "X": function(x) { return Math.round(x).toString(16).toUpperCase(); },
+  "x": function(x) { return Math.round(x).toString(16); }
+};
+
+// [[fill]align][sign][symbol][0][width][,][.precision][type]
+var re = /^(?:(.)?([<>=^]))?([+\-\( ])?([$#])?(0)?(\d+)?(,)?(\.\d+)?([a-z%])?$/i;
+
+var formatSpecifier = function(specifier) {
+  return new FormatSpecifier(specifier);
+};
+
+function FormatSpecifier(specifier) {
+  if (!(match = re.exec(specifier))) throw new Error("invalid format: " + specifier);
+
+  var match,
+      fill = match[1] || " ",
+      align = match[2] || ">",
+      sign = match[3] || "-",
+      symbol = match[4] || "",
+      zero = !!match[5],
+      width = match[6] && +match[6],
+      comma = !!match[7],
+      precision = match[8] && +match[8].slice(1),
+      type = match[9] || "";
+
+  // The "n" type is an alias for ",g".
+  if (type === "n") comma = true, type = "g";
+
+  // Map invalid types to the default format.
+  else if (!formatTypes[type]) type = "";
+
+  // If zero fill is specified, padding goes after sign and before digits.
+  if (zero || (fill === "0" && align === "=")) zero = true, fill = "0", align = "=";
+
+  this.fill = fill;
+  this.align = align;
+  this.sign = sign;
+  this.symbol = symbol;
+  this.zero = zero;
+  this.width = width;
+  this.comma = comma;
+  this.precision = precision;
+  this.type = type;
+}
+
+FormatSpecifier.prototype.toString = function() {
+  return this.fill
+      + this.align
+      + this.sign
+      + this.symbol
+      + (this.zero ? "0" : "")
+      + (this.width == null ? "" : Math.max(1, this.width | 0))
+      + (this.comma ? "," : "")
+      + (this.precision == null ? "" : "." + Math.max(0, this.precision | 0))
+      + this.type;
+};
+
+var prefixes = ["y","z","a","f","p","n","\xB5","m","","k","M","G","T","P","E","Z","Y"];
+
+function identity$3(x) {
+  return x;
+}
+
+var formatLocale = function(locale) {
+  var group = locale.grouping && locale.thousands ? formatGroup(locale.grouping, locale.thousands) : identity$3,
+      currency = locale.currency,
+      decimal = locale.decimal;
+
+  function newFormat(specifier) {
+    specifier = formatSpecifier(specifier);
+
+    var fill = specifier.fill,
+        align = specifier.align,
+        sign = specifier.sign,
+        symbol = specifier.symbol,
+        zero = specifier.zero,
+        width = specifier.width,
+        comma = specifier.comma,
+        precision = specifier.precision,
+        type = specifier.type;
+
+    // Compute the prefix and suffix.
+    // For SI-prefix, the suffix is lazily computed.
+    var prefix = symbol === "$" ? currency[0] : symbol === "#" && /[boxX]/.test(type) ? "0" + type.toLowerCase() : "",
+        suffix = symbol === "$" ? currency[1] : /[%p]/.test(type) ? "%" : "";
+
+    // What format function should we use?
+    // Is this an integer type?
+    // Can this type generate exponential notation?
+    var formatType = formatTypes[type],
+        maybeSuffix = !type || /[defgprs%]/.test(type);
+
+    // Set the default precision if not specified,
+    // or clamp the specified precision to the supported range.
+    // For significant precision, it must be in [1, 21].
+    // For fixed precision, it must be in [0, 20].
+    precision = precision == null ? (type ? 6 : 12)
+        : /[gprs]/.test(type) ? Math.max(1, Math.min(21, precision))
+        : Math.max(0, Math.min(20, precision));
+
+    function format(value) {
+      var valuePrefix = prefix,
+          valueSuffix = suffix,
+          i, n, c;
+
+      if (type === "c") {
+        valueSuffix = formatType(value) + valueSuffix;
+        value = "";
+      } else {
+        value = +value;
+
+        // Convert negative to positive, and compute the prefix.
+        // Note that -0 is not less than 0, but 1 / -0 is!
+        var valueNegative = (value < 0 || 1 / value < 0) && (value *= -1, true);
+
+        // Perform the initial formatting.
+        value = formatType(value, precision);
+
+        // If the original value was negative, it may be rounded to zero during
+        // formatting; treat this as (positive) zero.
+        if (valueNegative) {
+          i = -1, n = value.length;
+          valueNegative = false;
+          while (++i < n) {
+            if (c = value.charCodeAt(i), (48 < c && c < 58)
+                || (type === "x" && 96 < c && c < 103)
+                || (type === "X" && 64 < c && c < 71)) {
+              valueNegative = true;
+              break;
+            }
+          }
+        }
+
+        // Compute the prefix and suffix.
+        valuePrefix = (valueNegative ? (sign === "(" ? sign : "-") : sign === "-" || sign === "(" ? "" : sign) + valuePrefix;
+        valueSuffix = valueSuffix + (type === "s" ? prefixes[8 + prefixExponent / 3] : "") + (valueNegative && sign === "(" ? ")" : "");
+
+        // Break the formatted value into the integer “value” part that can be
+        // grouped, and fractional or exponential “suffix” part that is not.
+        if (maybeSuffix) {
+          i = -1, n = value.length;
+          while (++i < n) {
+            if (c = value.charCodeAt(i), 48 > c || c > 57) {
+              valueSuffix = (c === 46 ? decimal + value.slice(i + 1) : value.slice(i)) + valueSuffix;
+              value = value.slice(0, i);
+              break;
+            }
+          }
+        }
+      }
+
+      // If the fill character is not "0", grouping is applied before padding.
+      if (comma && !zero) value = group(value, Infinity);
+
+      // Compute the padding.
+      var length = valuePrefix.length + value.length + valueSuffix.length,
+          padding = length < width ? new Array(width - length + 1).join(fill) : "";
+
+      // If the fill character is "0", grouping is applied after padding.
+      if (comma && zero) value = group(padding + value, padding.length ? width - valueSuffix.length : Infinity), padding = "";
+
+      // Reconstruct the final output based on the desired alignment.
+      switch (align) {
+        case "<": return valuePrefix + value + valueSuffix + padding;
+        case "=": return valuePrefix + padding + value + valueSuffix;
+        case "^": return padding.slice(0, length = padding.length >> 1) + valuePrefix + value + valueSuffix + padding.slice(length);
+      }
+      return padding + valuePrefix + value + valueSuffix;
+    }
+
+    format.toString = function() {
+      return specifier + "";
+    };
+
+    return format;
+  }
+
+  function formatPrefix(specifier, value) {
+    var f = newFormat((specifier = formatSpecifier(specifier), specifier.type = "f", specifier)),
+        e = Math.max(-8, Math.min(8, Math.floor(exponent$1(value) / 3))) * 3,
+        k = Math.pow(10, -e),
+        prefix = prefixes[8 + e / 3];
+    return function(value) {
+      return f(k * value) + prefix;
+    };
+  }
+
+  return {
+    format: newFormat,
+    formatPrefix: formatPrefix
+  };
+};
+
+var locale$1;
+
+
+
+defaultLocale({
+  decimal: ".",
+  thousands: ",",
+  grouping: [3],
+  currency: ["$", ""]
+});
+
+function defaultLocale(definition) {
+  locale$1 = formatLocale(definition);
+  exports.format = locale$1.format;
+  exports.formatPrefix = locale$1.formatPrefix;
+  return locale$1;
+}
+
+var precisionFixed = function(step) {
+  return Math.max(0, -exponent$1(Math.abs(step)));
+};
+
+var precisionPrefix = function(step, value) {
+  return Math.max(0, Math.max(-8, Math.min(8, Math.floor(exponent$1(value) / 3))) * 3 - exponent$1(Math.abs(step)));
+};
+
+var precisionRound = function(step, max) {
+  step = Math.abs(step), max = Math.abs(max) - step;
+  return Math.max(0, exponent$1(max) - exponent$1(step)) + 1;
+};
+
+function localDate(d) {
+  if (0 <= d.y && d.y < 100) {
+    var date = new Date(-1, d.m, d.d, d.H, d.M, d.S, d.L);
+    date.setFullYear(d.y);
+    return date;
+  }
+  return new Date(d.y, d.m, d.d, d.H, d.M, d.S, d.L);
+}
+
+function utcDate(d) {
+  if (0 <= d.y && d.y < 100) {
+    var date = new Date(Date.UTC(-1, d.m, d.d, d.H, d.M, d.S, d.L));
+    date.setUTCFullYear(d.y);
+    return date;
+  }
+  return new Date(Date.UTC(d.y, d.m, d.d, d.H, d.M, d.S, d.L));
+}
+
+function newYear(y) {
+  return {y: y, m: 0, d: 1, H: 0, M: 0, S: 0, L: 0};
+}
+
+function formatLocale$1(locale) {
+  var locale_dateTime = locale.dateTime,
+      locale_date = locale.date,
+      locale_time = locale.time,
+      locale_periods = locale.periods,
+      locale_weekdays = locale.days,
+      locale_shortWeekdays = locale.shortDays,
+      locale_months = locale.months,
+      locale_shortMonths = locale.shortMonths;
+
+  var periodRe = formatRe(locale_periods),
+      periodLookup = formatLookup(locale_periods),
+      weekdayRe = formatRe(locale_weekdays),
+      weekdayLookup = formatLookup(locale_weekdays),
+      shortWeekdayRe = formatRe(locale_shortWeekdays),
+      shortWeekdayLookup = formatLookup(locale_shortWeekdays),
+      monthRe = formatRe(locale_months),
+      monthLookup = formatLookup(locale_months),
+      shortMonthRe = formatRe(locale_shortMonths),
+      shortMonthLookup = formatLookup(locale_shortMonths);
+
+  var formats = {
+    "a": formatShortWeekday,
+    "A": formatWeekday,
+    "b": formatShortMonth,
+    "B": formatMonth,
+    "c": null,
+    "d": formatDayOfMonth,
+    "e": formatDayOfMonth,
+    "H": formatHour24,
+    "I": formatHour12,
+    "j": formatDayOfYear,
+    "L": formatMilliseconds,
+    "m": formatMonthNumber,
+    "M": formatMinutes,
+    "p": formatPeriod,
+    "S": formatSeconds,
+    "U": formatWeekNumberSunday,
+    "w": formatWeekdayNumber,
+    "W": formatWeekNumberMonday,
+    "x": null,
+    "X": null,
+    "y": formatYear,
+    "Y": formatFullYear,
+    "Z": formatZone,
+    "%": formatLiteralPercent
+  };
+
+  var utcFormats = {
+    "a": formatUTCShortWeekday,
+    "A": formatUTCWeekday,
+    "b": formatUTCShortMonth,
+    "B": formatUTCMonth,
+    "c": null,
+    "d": formatUTCDayOfMonth,
+    "e": formatUTCDayOfMonth,
+    "H": formatUTCHour24,
+    "I": formatUTCHour12,
+    "j": formatUTCDayOfYear,
+    "L": formatUTCMilliseconds,
+    "m": formatUTCMonthNumber,
+    "M": formatUTCMinutes,
+    "p": formatUTCPeriod,
+    "S": formatUTCSeconds,
+    "U": formatUTCWeekNumberSunday,
+    "w": formatUTCWeekdayNumber,
+    "W": formatUTCWeekNumberMonday,
+    "x": null,
+    "X": null,
+    "y": formatUTCYear,
+    "Y": formatUTCFullYear,
+    "Z": formatUTCZone,
+    "%": formatLiteralPercent
+  };
+
+  var parses = {
+    "a": parseShortWeekday,
+    "A": parseWeekday,
+    "b": parseShortMonth,
+    "B": parseMonth,
+    "c": parseLocaleDateTime,
+    "d": parseDayOfMonth,
+    "e": parseDayOfMonth,
+    "H": parseHour24,
+    "I": parseHour24,
+    "j": parseDayOfYear,
+    "L": parseMilliseconds,
+    "m": parseMonthNumber,
+    "M": parseMinutes,
+    "p": parsePeriod,
+    "S": parseSeconds,
+    "U": parseWeekNumberSunday,
+    "w": parseWeekdayNumber,
+    "W": parseWeekNumberMonday,
+    "x": parseLocaleDate,
+    "X": parseLocaleTime,
+    "y": parseYear,
+    "Y": parseFullYear,
+    "Z": parseZone,
+    "%": parseLiteralPercent
+  };
+
+  // These recursive directive definitions must be deferred.
+  formats.x = newFormat(locale_date, formats);
+  formats.X = newFormat(locale_time, formats);
+  formats.c = newFormat(locale_dateTime, formats);
+  utcFormats.x = newFormat(locale_date, utcFormats);
+  utcFormats.X = newFormat(locale_time, utcFormats);
+  utcFormats.c = newFormat(locale_dateTime, utcFormats);
+
+  function newFormat(specifier, formats) {
+    return function(date) {
+      var string = [],
+          i = -1,
+          j = 0,
+          n = specifier.length,
+          c,
+          pad,
+          format;
+
+      if (!(date instanceof Date)) date = new Date(+date);
+
+      while (++i < n) {
+        if (specifier.charCodeAt(i) === 37) {
+          string.push(specifier.slice(j, i));
+          if ((pad = pads[c = specifier.charAt(++i)]) != null) c = specifier.charAt(++i);
+          else pad = c === "e" ? " " : "0";
+          if (format = formats[c]) c = format(date, pad);
+          string.push(c);
+          j = i + 1;
+        }
+      }
+
+      string.push(specifier.slice(j, i));
+      return string.join("");
+    };
+  }
+
+  function newParse(specifier, newDate) {
+    return function(string) {
+      var d = newYear(1900),
+          i = parseSpecifier(d, specifier, string += "", 0);
+      if (i != string.length) return null;
+
+      // The am-pm flag is 0 for AM, and 1 for PM.
+      if ("p" in d) d.H = d.H % 12 + d.p * 12;
+
+      // Convert day-of-week and week-of-year to day-of-year.
+      if ("W" in d || "U" in d) {
+        if (!("w" in d)) d.w = "W" in d ? 1 : 0;
+        var day$$1 = "Z" in d ? utcDate(newYear(d.y)).getUTCDay() : newDate(newYear(d.y)).getDay();
+        d.m = 0;
+        d.d = "W" in d ? (d.w + 6) % 7 + d.W * 7 - (day$$1 + 5) % 7 : d.w + d.U * 7 - (day$$1 + 6) % 7;
+      }
+
+      // If a time zone is specified, all fields are interpreted as UTC and then
+      // offset according to the specified time zone.
+      if ("Z" in d) {
+        d.H += d.Z / 100 | 0;
+        d.M += d.Z % 100;
+        return utcDate(d);
+      }
+
+      // Otherwise, all fields are in local time.
+      return newDate(d);
+    };
+  }
+
+  function parseSpecifier(d, specifier, string, j) {
+    var i = 0,
+        n = specifier.length,
+        m = string.length,
+        c,
+        parse;
+
+    while (i < n) {
+      if (j >= m) return -1;
+      c = specifier.charCodeAt(i++);
+      if (c === 37) {
+        c = specifier.charAt(i++);
+        parse = parses[c in pads ? specifier.charAt(i++) : c];
+        if (!parse || ((j = parse(d, string, j)) < 0)) return -1;
+      } else if (c != string.charCodeAt(j++)) {
+        return -1;
+      }
+    }
+
+    return j;
+  }
+
+  function parsePeriod(d, string, i) {
+    var n = periodRe.exec(string.slice(i));
+    return n ? (d.p = periodLookup[n[0].toLowerCase()], i + n[0].length) : -1;
+  }
+
+  function parseShortWeekday(d, string, i) {
+    var n = shortWeekdayRe.exec(string.slice(i));
+    return n ? (d.w = shortWeekdayLookup[n[0].toLowerCase()], i + n[0].length) : -1;
+  }
+
+  function parseWeekday(d, string, i) {
+    var n = weekdayRe.exec(string.slice(i));
+    return n ? (d.w = weekdayLookup[n[0].toLowerCase()], i + n[0].length) : -1;
+  }
+
+  function parseShortMonth(d, string, i) {
+    var n = shortMonthRe.exec(string.slice(i));
+    return n ? (d.m = shortMonthLookup[n[0].toLowerCase()], i + n[0].length) : -1;
+  }
+
+  function parseMonth(d, string, i) {
+    var n = monthRe.exec(string.slice(i));
+    return n ? (d.m = monthLookup[n[0].toLowerCase()], i + n[0].length) : -1;
+  }
+
+  function parseLocaleDateTime(d, string, i) {
+    return parseSpecifier(d, locale_dateTime, string, i);
+  }
+
+  function parseLocaleDate(d, string, i) {
+    return parseSpecifier(d, locale_date, string, i);
+  }
+
+  function parseLocaleTime(d, string, i) {
+    return parseSpecifier(d, locale_time, string, i);
+  }
+
+  function formatShortWeekday(d) {
+    return locale_shortWeekdays[d.getDay()];
+  }
+
+  function formatWeekday(d) {
+    return locale_weekdays[d.getDay()];
+  }
+
+  function formatShortMonth(d) {
+    return locale_shortMonths[d.getMonth()];
+  }
+
+  function formatMonth(d) {
+    return locale_months[d.getMonth()];
+  }
+
+  function formatPeriod(d) {
+    return locale_periods[+(d.getHours() >= 12)];
+  }
+
+  function formatUTCShortWeekday(d) {
+    return locale_shortWeekdays[d.getUTCDay()];
+  }
+
+  function formatUTCWeekday(d) {
+    return locale_weekdays[d.getUTCDay()];
+  }
+
+  function formatUTCShortMonth(d) {
+    return locale_shortMonths[d.getUTCMonth()];
+  }
+
+  function formatUTCMonth(d) {
+    return locale_months[d.getUTCMonth()];
+  }
+
+  function formatUTCPeriod(d) {
+    return locale_periods[+(d.getUTCHours() >= 12)];
+  }
+
+  return {
+    format: function(specifier) {
+      var f = newFormat(specifier += "", formats);
+      f.toString = function() { return specifier; };
+      return f;
+    },
+    parse: function(specifier) {
+      var p = newParse(specifier += "", localDate);
+      p.toString = function() { return specifier; };
+      return p;
+    },
+    utcFormat: function(specifier) {
+      var f = newFormat(specifier += "", utcFormats);
+      f.toString = function() { return specifier; };
+      return f;
+    },
+    utcParse: function(specifier) {
+      var p = newParse(specifier, utcDate);
+      p.toString = function() { return specifier; };
+      return p;
+    }
+  };
+}
+
+var pads = {"-": "", "_": " ", "0": "0"};
+var numberRe = /^\s*\d+/;
+var percentRe = /^%/;
+var requoteRe = /[\\\^\$\*\+\?\|\[\]\(\)\.\{\}]/g;
+
+function pad(value, fill, width) {
+  var sign = value < 0 ? "-" : "",
+      string = (sign ? -value : value) + "",
+      length = string.length;
+  return sign + (length < width ? new Array(width - length + 1).join(fill) + string : string);
+}
+
+function requote(s) {
+  return s.replace(requoteRe, "\\$&");
+}
+
+function formatRe(names) {
+  return new RegExp("^(?:" + names.map(requote).join("|") + ")", "i");
+}
+
+function formatLookup(names) {
+  var map = {}, i = -1, n = names.length;
+  while (++i < n) map[names[i].toLowerCase()] = i;
+  return map;
+}
+
+function parseWeekdayNumber(d, string, i) {
+  var n = numberRe.exec(string.slice(i, i + 1));
+  return n ? (d.w = +n[0], i + n[0].length) : -1;
+}
+
+function parseWeekNumberSunday(d, string, i) {
+  var n = numberRe.exec(string.slice(i));
+  return n ? (d.U = +n[0], i + n[0].length) : -1;
+}
+
+function parseWeekNumberMonday(d, string, i) {
+  var n = numberRe.exec(string.slice(i));
+  return n ? (d.W = +n[0], i + n[0].length) : -1;
+}
+
+function parseFullYear(d, string, i) {
+  var n = numberRe.exec(string.slice(i, i + 4));
+  return n ? (d.y = +n[0], i + n[0].length) : -1;
+}
+
+function parseYear(d, string, i) {
+  var n = numberRe.exec(string.slice(i, i + 2));
+  return n ? (d.y = +n[0] + (+n[0] > 68 ? 1900 : 2000), i + n[0].length) : -1;
+}
+
+function parseZone(d, string, i) {
+  var n = /^(Z)|([+-]\d\d)(?:\:?(\d\d))?/.exec(string.slice(i, i + 6));
+  return n ? (d.Z = n[1] ? 0 : -(n[2] + (n[3] || "00")), i + n[0].length) : -1;
+}
+
+function parseMonthNumber(d, string, i) {
+  var n = numberRe.exec(string.slice(i, i + 2));
+  return n ? (d.m = n[0] - 1, i + n[0].length) : -1;
+}
+
+function parseDayOfMonth(d, string, i) {
+  var n = numberRe.exec(string.slice(i, i + 2));
+  return n ? (d.d = +n[0], i + n[0].length) : -1;
+}
+
+function parseDayOfYear(d, string, i) {
+  var n = numberRe.exec(string.slice(i, i + 3));
+  return n ? (d.m = 0, d.d = +n[0], i + n[0].length) : -1;
+}
+
+function parseHour24(d, string, i) {
+  var n = numberRe.exec(string.slice(i, i + 2));
+  return n ? (d.H = +n[0], i + n[0].length) : -1;
+}
+
+function parseMinutes(d, string, i) {
+  var n = numberRe.exec(string.slice(i, i + 2));
+  return n ? (d.M = +n[0], i + n[0].length) : -1;
+}
+
+function parseSeconds(d, string, i) {
+  var n = numberRe.exec(string.slice(i, i + 2));
+  return n ? (d.S = +n[0], i + n[0].length) : -1;
+}
+
+function parseMilliseconds(d, string, i) {
+  var n = numberRe.exec(string.slice(i, i + 3));
+  return n ? (d.L = +n[0], i + n[0].length) : -1;
+}
+
+function parseLiteralPercent(d, string, i) {
+  var n = percentRe.exec(string.slice(i, i + 1));
+  return n ? i + n[0].length : -1;
+}
+
+function formatDayOfMonth(d, p) {
+  return pad(d.getDate(), p, 2);
+}
+
+function formatHour24(d, p) {
+  return pad(d.getHours(), p, 2);
+}
+
+function formatHour12(d, p) {
+  return pad(d.getHours() % 12 || 12, p, 2);
+}
+
+function formatDayOfYear(d, p) {
+  return pad(1 + day.count(year(d), d), p, 3);
+}
+
+function formatMilliseconds(d, p) {
+  return pad(d.getMilliseconds(), p, 3);
+}
+
+function formatMonthNumber(d, p) {
+  return pad(d.getMonth() + 1, p, 2);
+}
+
+function formatMinutes(d, p) {
+  return pad(d.getMinutes(), p, 2);
+}
+
+function formatSeconds(d, p) {
+  return pad(d.getSeconds(), p, 2);
+}
+
+function formatWeekNumberSunday(d, p) {
+  return pad(sunday.count(year(d), d), p, 2);
+}
+
+function formatWeekdayNumber(d) {
+  return d.getDay();
+}
+
+function formatWeekNumberMonday(d, p) {
+  return pad(monday.count(year(d), d), p, 2);
+}
+
+function formatYear(d, p) {
+  return pad(d.getFullYear() % 100, p, 2);
+}
+
+function formatFullYear(d, p) {
+  return pad(d.getFullYear() % 10000, p, 4);
+}
+
+function formatZone(d) {
+  var z = d.getTimezoneOffset();
+  return (z > 0 ? "-" : (z *= -1, "+"))
+      + pad(z / 60 | 0, "0", 2)
+      + pad(z % 60, "0", 2);
+}
+
+function formatUTCDayOfMonth(d, p) {
+  return pad(d.getUTCDate(), p, 2);
+}
+
+function formatUTCHour24(d, p) {
+  return pad(d.getUTCHours(), p, 2);
+}
+
+function formatUTCHour12(d, p) {
+  return pad(d.getUTCHours() % 12 || 12, p, 2);
+}
+
+function formatUTCDayOfYear(d, p) {
+  return pad(1 + utcDay.count(utcYear(d), d), p, 3);
+}
+
+function formatUTCMilliseconds(d, p) {
+  return pad(d.getUTCMilliseconds(), p, 3);
+}
+
+function formatUTCMonthNumber(d, p) {
+  return pad(d.getUTCMonth() + 1, p, 2);
+}
+
+function formatUTCMinutes(d, p) {
+  return pad(d.getUTCMinutes(), p, 2);
+}
+
+function formatUTCSeconds(d, p) {
+  return pad(d.getUTCSeconds(), p, 2);
+}
+
+function formatUTCWeekNumberSunday(d, p) {
+  return pad(utcSunday.count(utcYear(d), d), p, 2);
+}
+
+function formatUTCWeekdayNumber(d) {
+  return d.getUTCDay();
+}
+
+function formatUTCWeekNumberMonday(d, p) {
+  return pad(utcMonday.count(utcYear(d), d), p, 2);
+}
+
+function formatUTCYear(d, p) {
+  return pad(d.getUTCFullYear() % 100, p, 2);
+}
+
+function formatUTCFullYear(d, p) {
+  return pad(d.getUTCFullYear() % 10000, p, 4);
+}
+
+function formatUTCZone() {
+  return "+0000";
+}
+
+function formatLiteralPercent() {
+  return "%";
+}
+
+var locale$2;
+
+
+
+
+
+defaultLocale$1({
+  dateTime: "%x, %X",
+  date: "%-m/%-d/%Y",
+  time: "%-I:%M:%S %p",
+  periods: ["AM", "PM"],
+  days: ["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"],
+  shortDays: ["Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"],
+  months: ["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"],
+  shortMonths: ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"]
+});
+
+function defaultLocale$1(definition) {
+  locale$2 = formatLocale$1(definition);
+  exports.timeFormat = locale$2.format;
+  exports.timeParse = locale$2.parse;
+  exports.utcFormat = locale$2.utcFormat;
+  exports.utcParse = locale$2.utcParse;
+  return locale$2;
+}
+
+var isoSpecifier = "%Y-%m-%dT%H:%M:%S.%LZ";
+
+function formatIsoNative(date) {
+  return date.toISOString();
+}
+
+var formatIso = Date.prototype.toISOString
+    ? formatIsoNative
+    : exports.utcFormat(isoSpecifier);
+
+function parseIsoNative(string) {
+  var date = new Date(string);
+  return isNaN(date) ? null : date;
+}
+
+var parseIso = +new Date("2000-01-01T00:00:00.000Z")
+    ? parseIsoNative
+    : exports.utcParse(isoSpecifier);
+
+var array$2 = Array.prototype;
+
+var map$3 = array$2.map;
+var slice$3 = array$2.slice;
+
+var implicit = {name: "implicit"};
+
+function ordinal(range) {
+  var index = map$1(),
+      domain = [],
+      unknown = implicit;
+
+  range = range == null ? [] : slice$3.call(range);
+
+  function scale(d) {
+    var key = d + "", i = index.get(key);
+    if (!i) {
+      if (unknown !== implicit) return unknown;
+      index.set(key, i = domain.push(d));
+    }
+    return range[(i - 1) % range.length];
+  }
+
+  scale.domain = function(_) {
+    if (!arguments.length) return domain.slice();
+    domain = [], index = map$1();
+    var i = -1, n = _.length, d, key;
+    while (++i < n) if (!index.has(key = (d = _[i]) + "")) index.set(key, domain.push(d));
+    return scale;
+  };
+
+  scale.range = function(_) {
+    return arguments.length ? (range = slice$3.call(_), scale) : range.slice();
+  };
+
+  scale.unknown = function(_) {
+    return arguments.length ? (unknown = _, scale) : unknown;
+  };
+
+  scale.copy = function() {
+    return ordinal()
+        .domain(domain)
+        .range(range)
+        .unknown(unknown);
+  };
+
+  return scale;
+}
+
+function band() {
+  var scale = ordinal().unknown(undefined),
+      domain = scale.domain,
+      ordinalRange = scale.range,
+      range$$1 = [0, 1],
+      step,
+      bandwidth,
+      round = false,
+      paddingInner = 0,
+      paddingOuter = 0,
+      align = 0.5;
+
+  delete scale.unknown;
+
+  function rescale() {
+    var n = domain().length,
+        reverse = range$$1[1] < range$$1[0],
+        start = range$$1[reverse - 0],
+        stop = range$$1[1 - reverse];
+    step = (stop - start) / Math.max(1, n - paddingInner + paddingOuter * 2);
+    if (round) step = Math.floor(step);
+    start += (stop - start - step * (n - paddingInner)) * align;
+    bandwidth = step * (1 - paddingInner);
+    if (round) start = Math.round(start), bandwidth = Math.round(bandwidth);
+    var values = range(n).map(function(i) { return start + step * i; });
+    return ordinalRange(reverse ? values.reverse() : values);
+  }
+
+  scale.domain = function(_) {
+    return arguments.length ? (domain(_), rescale()) : domain();
+  };
+
+  scale.range = function(_) {
+    return arguments.length ? (range$$1 = [+_[0], +_[1]], rescale()) : range$$1.slice();
+  };
+
+  scale.rangeRound = function(_) {
+    return range$$1 = [+_[0], +_[1]], round = true, rescale();
+  };
+
+  scale.bandwidth = function() {
+    return bandwidth;
+  };
+
+  scale.step = function() {
+    return step;
+  };
+
+  scale.round = function(_) {
+    return arguments.length ? (round = !!_, rescale()) : round;
+  };
+
+  scale.padding = function(_) {
+    return arguments.length ? (paddingInner = paddingOuter = Math.max(0, Math.min(1, _)), rescale()) : paddingInner;
+  };
+
+  scale.paddingInner = function(_) {
+    return arguments.length ? (paddingInner = Math.max(0, Math.min(1, _)), rescale()) : paddingInner;
+  };
+
+  scale.paddingOuter = function(_) {
+    return arguments.length ? (paddingOuter = Math.max(0, Math.min(1, _)), rescale()) : paddingOuter;
+  };
+
+  scale.align = function(_) {
+    return arguments.length ? (align = Math.max(0, Math.min(1, _)), rescale()) : align;
+  };
+
+  scale.copy = function() {
+    return band()
+        .domain(domain())
+        .range(range$$1)
+        .round(round)
+        .paddingInner(paddingInner)
+        .paddingOuter(paddingOuter)
+        .align(align);
+  };
+
+  return rescale();
+}
+
+function pointish(scale) {
+  var copy = scale.copy;
+
+  scale.padding = scale.paddingOuter;
+  delete scale.paddingInner;
+  delete scale.paddingOuter;
+
+  scale.copy = function() {
+    return pointish(copy());
+  };
+
+  return scale;
+}
+
+function point$4() {
+  return pointish(band().paddingInner(1));
+}
+
+var constant$4 = function(x) {
+  return function() {
+    return x;
+  };
+};
+
+var number$1 = function(x) {
+  return +x;
+};
+
+var unit = [0, 1];
+
+function deinterpolateLinear(a, b) {
+  return (b -= (a = +a))
+      ? function(x) { return (x - a) / b; }
+      : constant$4(b);
+}
+
+function deinterpolateClamp(deinterpolate) {
+  return function(a, b) {
+    var d = deinterpolate(a = +a, b = +b);
+    return function(x) { return x <= a ? 0 : x >= b ? 1 : d(x); };
+  };
+}
+
+function reinterpolateClamp(reinterpolate) {
+  return function(a, b) {
+    var r = reinterpolate(a = +a, b = +b);
+    return function(t) { return t <= 0 ? a : t >= 1 ? b : r(t); };
+  };
+}
+
+function bimap(domain, range$$1, deinterpolate, reinterpolate) {
+  var d0 = domain[0], d1 = domain[1], r0 = range$$1[0], r1 = range$$1[1];
+  if (d1 < d0) d0 = deinterpolate(d1, d0), r0 = reinterpolate(r1, r0);
+  else d0 = deinterpolate(d0, d1), r0 = reinterpolate(r0, r1);
+  return function(x) { return r0(d0(x)); };
+}
+
+function polymap(domain, range$$1, deinterpolate, reinterpolate) {
+  var j = Math.min(domain.length, range$$1.length) - 1,
+      d = new Array(j),
+      r = new Array(j),
+      i = -1;
+
+  // Reverse descending domains.
+  if (domain[j] < domain[0]) {
+    domain = domain.slice().reverse();
+    range$$1 = range$$1.slice().reverse();
+  }
+
+  while (++i < j) {
+    d[i] = deinterpolate(domain[i], domain[i + 1]);
+    r[i] = reinterpolate(range$$1[i], range$$1[i + 1]);
+  }
+
+  return function(x) {
+    var i = bisectRight(domain, x, 1, j) - 1;
+    return r[i](d[i](x));
+  };
+}
+
+function copy(source, target) {
+  return target
+      .domain(source.domain())
+      .range(source.range())
+      .interpolate(source.interpolate())
+      .clamp(source.clamp());
+}
+
+// deinterpolate(a, b)(x) takes a domain value x in [a,b] and returns the corresponding parameter t in [0,1].
+// reinterpolate(a, b)(t) takes a parameter t in [0,1] and returns the corresponding domain value x in [a,b].
+function continuous(deinterpolate, reinterpolate) {
+  var domain = unit,
+      range$$1 = unit,
+      interpolate$$1 = interpolate,
+      clamp = false,
+      piecewise,
+      output,
+      input;
+
+  function rescale() {
+    piecewise = Math.min(domain.length, range$$1.length) > 2 ? polymap : bimap;
+    output = input = null;
+    return scale;
+  }
+
+  function scale(x) {
+    return (output || (output = piecewise(domain, range$$1, clamp ? deinterpolateClamp(deinterpolate) : deinterpolate, interpolate$$1)))(+x);
+  }
+
+  scale.invert = function(y) {
+    return (input || (input = piecewise(range$$1, domain, deinterpolateLinear, clamp ? reinterpolateClamp(reinterpolate) : reinterpolate)))(+y);
+  };
+
+  scale.domain = function(_) {
+    return arguments.length ? (domain = map$3.call(_, number$1), rescale()) : domain.slice();
+  };
+
+  scale.range = function(_) {
+    return arguments.length ? (range$$1 = slice$3.call(_), rescale()) : range$$1.slice();
+  };
+
+  scale.rangeRound = function(_) {
+    return range$$1 = slice$3.call(_), interpolate$$1 = interpolateRound, rescale();
+  };
+
+  scale.clamp = function(_) {
+    return arguments.length ? (clamp = !!_, rescale()) : clamp;
+  };
+
+  scale.interpolate = function(_) {
+    return arguments.length ? (interpolate$$1 = _, rescale()) : interpolate$$1;
+  };
+
+  return rescale();
+}
+
+var tickFormat = function(domain, count, specifier) {
+  var start = domain[0],
+      stop = domain[domain.length - 1],
+      step = tickStep(start, stop, count == null ? 10 : count),
+      precision;
+  specifier = formatSpecifier(specifier == null ? ",f" : specifier);
+  switch (specifier.type) {
+    case "s": {
+      var value = Math.max(Math.abs(start), Math.abs(stop));
+      if (specifier.precision == null && !isNaN(precision = precisionPrefix(step, value))) specifier.precision = precision;
+      return exports.formatPrefix(specifier, value);
+    }
+    case "":
+    case "e":
+    case "g":
+    case "p":
+    case "r": {
+      if (specifier.precision == null && !isNaN(precision = precisionRound(step, Math.max(Math.abs(start), Math.abs(stop))))) specifier.precision = precision - (specifier.type === "e");
+      break;
+    }
+    case "f":
+    case "%": {
+      if (specifier.precision == null && !isNaN(precision = precisionFixed(step))) specifier.precision = precision - (specifier.type === "%") * 2;
+      break;
+    }
+  }
+  return exports.format(specifier);
+};
+
+function linearish(scale) {
+  var domain = scale.domain;
+
+  scale.ticks = function(count) {
+    var d = domain();
+    return ticks(d[0], d[d.length - 1], count == null ? 10 : count);
+  };
+
+  scale.tickFormat = function(count, specifier) {
+    return tickFormat(domain(), count, specifier);
+  };
+
+  scale.nice = function(count) {
+    var d = domain(),
+        i = d.length - 1,
+        n = count == null ? 10 : count,
+        start = d[0],
+        stop = d[i],
+        step = tickStep(start, stop, n);
+
+    if (step) {
+      step = tickStep(Math.floor(start / step) * step, Math.ceil(stop / step) * step, n);
+      d[0] = Math.floor(start / step) * step;
+      d[i] = Math.ceil(stop / step) * step;
+      domain(d);
+    }
+
+    return scale;
+  };
+
+  return scale;
+}
+
+function linear$2() {
+  var scale = continuous(deinterpolateLinear, interpolateNumber);
+
+  scale.copy = function() {
+    return copy(scale, linear$2());
+  };
+
+  return linearish(scale);
+}
+
+function identity$4() {
+  var domain = [0, 1];
+
+  function scale(x) {
+    return +x;
+  }
+
+  scale.invert = scale;
+
+  scale.domain = scale.range = function(_) {
+    return arguments.length ? (domain = map$3.call(_, number$1), scale) : domain.slice();
+  };
+
+  scale.copy = function() {
+    return identity$4().domain(domain);
+  };
+
+  return linearish(scale);
+}
+
+var nice = function(domain, interval) {
+  domain = domain.slice();
+
+  var i0 = 0,
+      i1 = domain.length - 1,
+      x0 = domain[i0],
+      x1 = domain[i1],
+      t;
+
+  if (x1 < x0) {
+    t = i0, i0 = i1, i1 = t;
+    t = x0, x0 = x1, x1 = t;
+  }
+
+  domain[i0] = interval.floor(x0);
+  domain[i1] = interval.ceil(x1);
+  return domain;
+};
+
+function deinterpolate(a, b) {
+  return (b = Math.log(b / a))
+      ? function(x) { return Math.log(x / a) / b; }
+      : constant$4(b);
+}
+
+function reinterpolate(a, b) {
+  return a < 0
+      ? function(t) { return -Math.pow(-b, t) * Math.pow(-a, 1 - t); }
+      : function(t) { return Math.pow(b, t) * Math.pow(a, 1 - t); };
+}
+
+function pow10(x) {
+  return isFinite(x) ? +("1e" + x) : x < 0 ? 0 : x;
+}
+
+function powp(base) {
+  return base === 10 ? pow10
+      : base === Math.E ? Math.exp
+      : function(x) { return Math.pow(base, x); };
+}
+
+function logp(base) {
+  return base === Math.E ? Math.log
+      : base === 10 && Math.log10
+      || base === 2 && Math.log2
+      || (base = Math.log(base), function(x) { return Math.log(x) / base; });
+}
+
+function reflect(f) {
+  return function(x) {
+    return -f(-x);
+  };
+}
+
+function log() {
+  var scale = continuous(deinterpolate, reinterpolate).domain([1, 10]),
+      domain = scale.domain,
+      base = 10,
+      logs = logp(10),
+      pows = powp(10);
+
+  function rescale() {
+    logs = logp(base), pows = powp(base);
+    if (domain()[0] < 0) logs = reflect(logs), pows = reflect(pows);
+    return scale;
+  }
+
+  scale.base = function(_) {
+    return arguments.length ? (base = +_, rescale()) : base;
+  };
+
+  scale.domain = function(_) {
+    return arguments.length ? (domain(_), rescale()) : domain();
+  };
+
+  scale.ticks = function(count) {
+    var d = domain(),
+        u = d[0],
+        v = d[d.length - 1],
+        r;
+
+    if (r = v < u) i = u, u = v, v = i;
+
+    var i = logs(u),
+        j = logs(v),
+        p,
+        k,
+        t,
+        n = count == null ? 10 : +count,
+        z = [];
+
+    if (!(base % 1) && j - i < n) {
+      i = Math.round(i) - 1, j = Math.round(j) + 1;
+      if (u > 0) for (; i < j; ++i) {
+        for (k = 1, p = pows(i); k < base; ++k) {
+          t = p * k;
+          if (t < u) continue;
+          if (t > v) break;
+          z.push(t);
+        }
+      } else for (; i < j; ++i) {
+        for (k = base - 1, p = pows(i); k >= 1; --k) {
+          t = p * k;
+          if (t < u) continue;
+          if (t > v) break;
+          z.push(t);
+        }
+      }
+    } else {
+      z = ticks(i, j, Math.min(j - i, n)).map(pows);
+    }
+
+    return r ? z.reverse() : z;
+  };
+
+  scale.tickFormat = function(count, specifier) {
+    if (specifier == null) specifier = base === 10 ? ".0e" : ",";
+    if (typeof specifier !== "function") specifier = exports.format(specifier);
+    if (count === Infinity) return specifier;
+    if (count == null) count = 10;
+    var k = Math.max(1, base * count / scale.ticks().length); // TODO fast estimate?
+    return function(d) {
+      var i = d / pows(Math.round(logs(d)));
+      if (i * base < base - 0.5) i *= base;
+      return i <= k ? specifier(d) : "";
+    };
+  };
+
+  scale.nice = function() {
+    return domain(nice(domain(), {
+      floor: function(x) { return pows(Math.floor(logs(x))); },
+      ceil: function(x) { return pows(Math.ceil(logs(x))); }
+    }));
+  };
+
+  scale.copy = function() {
+    return copy(scale, log().base(base));
+  };
+
+  return scale;
+}
+
+function raise(x, exponent) {
+  return x < 0 ? -Math.pow(-x, exponent) : Math.pow(x, exponent);
+}
+
+function pow() {
+  var exponent = 1,
+      scale = continuous(deinterpolate, reinterpolate),
+      domain = scale.domain;
+
+  function deinterpolate(a, b) {
+    return (b = raise(b, exponent) - (a = raise(a, exponent)))
+        ? function(x) { return (raise(x, exponent) - a) / b; }
+        : constant$4(b);
+  }
+
+  function reinterpolate(a, b) {
+    b = raise(b, exponent) - (a = raise(a, exponent));
+    return function(t) { return raise(a + b * t, 1 / exponent); };
+  }
+
+  scale.exponent = function(_) {
+    return arguments.length ? (exponent = +_, domain(domain())) : exponent;
+  };
+
+  scale.copy = function() {
+    return copy(scale, pow().exponent(exponent));
+  };
+
+  return linearish(scale);
+}
+
+function sqrt() {
+  return pow().exponent(0.5);
+}
+
+function quantile$$1() {
+  var domain = [],
+      range$$1 = [],
+      thresholds = [];
+
+  function rescale() {
+    var i = 0, n = Math.max(1, range$$1.length);
+    thresholds = new Array(n - 1);
+    while (++i < n) thresholds[i - 1] = threshold(domain, i / n);
+    return scale;
+  }
+
+  function scale(x) {
+    if (!isNaN(x = +x)) return range$$1[bisectRight(thresholds, x)];
+  }
+
+  scale.invertExtent = function(y) {
+    var i = range$$1.indexOf(y);
+    return i < 0 ? [NaN, NaN] : [
+      i > 0 ? thresholds[i - 1] : domain[0],
+      i < thresholds.length ? thresholds[i] : domain[domain.length - 1]
+    ];
+  };
+
+  scale.domain = function(_) {
+    if (!arguments.length) return domain.slice();
+    domain = [];
+    for (var i = 0, n = _.length, d; i < n; ++i) if (d = _[i], d != null && !isNaN(d = +d)) domain.push(d);
+    domain.sort(ascending);
+    return rescale();
+  };
+
+  scale.range = function(_) {
+    return arguments.length ? (range$$1 = slice$3.call(_), rescale()) : range$$1.slice();
+  };
+
+  scale.quantiles = function() {
+    return thresholds.slice();
+  };
+
+  scale.copy = function() {
+    return quantile$$1()
+        .domain(domain)
+        .range(range$$1);
+  };
+
+  return scale;
+}
+
+function quantize$1() {
+  var x0 = 0,
+      x1 = 1,
+      n = 1,
+      domain = [0.5],
+      range$$1 = [0, 1];
+
+  function scale(x) {
+    if (x <= x) return range$$1[bisectRight(domain, x, 0, n)];
+  }
+
+  function rescale() {
+    var i = -1;
+    domain = new Array(n);
+    while (++i < n) domain[i] = ((i + 1) * x1 - (i - n) * x0) / (n + 1);
+    return scale;
+  }
+
+  scale.domain = function(_) {
+    return arguments.length ? (x0 = +_[0], x1 = +_[1], rescale()) : [x0, x1];
+  };
+
+  scale.range = function(_) {
+    return arguments.length ? (n = (range$$1 = slice$3.call(_)).length - 1, rescale()) : range$$1.slice();
+  };
+
+  scale.invertExtent = function(y) {
+    var i = range$$1.indexOf(y);
+    return i < 0 ? [NaN, NaN]
+        : i < 1 ? [x0, domain[0]]
+        : i >= n ? [domain[n - 1], x1]
+        : [domain[i - 1], domain[i]];
+  };
+
+  scale.copy = function() {
+    return quantize$1()
+        .domain([x0, x1])
+        .range(range$$1);
+  };
+
+  return linearish(scale);
+}
+
+function threshold$1() {
+  var domain = [0.5],
+      range$$1 = [0, 1],
+      n = 1;
+
+  function scale(x) {
+    if (x <= x) return range$$1[bisectRight(domain, x, 0, n)];
+  }
+
+  scale.domain = function(_) {
+    return arguments.length ? (domain = slice$3.call(_), n = Math.min(domain.length, range$$1.length - 1), scale) : domain.slice();
+  };
+
+  scale.range = function(_) {
+    return arguments.length ? (range$$1 = slice$3.call(_), n = Math.min(domain.length, range$$1.length - 1), scale) : range$$1.slice();
+  };
+
+  scale.invertExtent = function(y) {
+    var i = range$$1.indexOf(y);
+    return [domain[i - 1], domain[i]];
+  };
+
+  scale.copy = function() {
+    return threshold$1()
+        .domain(domain)
+        .range(range$$1);
+  };
+
+  return scale;
+}
+
+var durationSecond$1 = 1000;
+var durationMinute$1 = durationSecond$1 * 60;
+var durationHour$1 = durationMinute$1 * 60;
+var durationDay$1 = durationHour$1 * 24;
+var durationWeek$1 = durationDay$1 * 7;
+var durationMonth = durationDay$1 * 30;
+var durationYear = durationDay$1 * 365;
+
+function date$1(t) {
+  return new Date(t);
+}
+
+function number$2(t) {
+  return t instanceof Date ? +t : +new Date(+t);
+}
+
+function calendar(year$$1, month$$1, week, day$$1, hour$$1, minute$$1, second$$1, millisecond$$1, format) {
+  var scale = continuous(deinterpolateLinear, interpolateNumber),
+      invert = scale.invert,
+      domain = scale.domain;
+
+  var formatMillisecond = format(".%L"),
+      formatSecond = format(":%S"),
+      formatMinute = format("%I:%M"),
+      formatHour = format("%I %p"),
+      formatDay = format("%a %d"),
+      formatWeek = format("%b %d"),
+      formatMonth = format("%B"),
+      formatYear = format("%Y");
+
+  var tickIntervals = [
+    [second$$1,  1,      durationSecond$1],
+    [second$$1,  5,  5 * durationSecond$1],
+    [second$$1, 15, 15 * durationSecond$1],
+    [second$$1, 30, 30 * durationSecond$1],
+    [minute$$1,  1,      durationMinute$1],
+    [minute$$1,  5,  5 * durationMinute$1],
+    [minute$$1, 15, 15 * durationMinute$1],
+    [minute$$1, 30, 30 * durationMinute$1],
+    [  hour$$1,  1,      durationHour$1  ],
+    [  hour$$1,  3,  3 * durationHour$1  ],
+    [  hour$$1,  6,  6 * durationHour$1  ],
+    [  hour$$1, 12, 12 * durationHour$1  ],
+    [   day$$1,  1,      durationDay$1   ],
+    [   day$$1,  2,  2 * durationDay$1   ],
+    [  week,  1,      durationWeek$1  ],
+    [ month$$1,  1,      durationMonth ],
+    [ month$$1,  3,  3 * durationMonth ],
+    [  year$$1,  1,      durationYear  ]
+  ];
+
+  function tickFormat(date) {
+    return (second$$1(date) < date ? formatMillisecond
+        : minute$$1(date) < date ? formatSecond
+        : hour$$1(date) < date ? formatMinute
+        : day$$1(date) < date ? formatHour
+        : month$$1(date) < date ? (week(date) < date ? formatDay : formatWeek)
+        : year$$1(date) < date ? formatMonth
+        : formatYear)(date);
+  }
+
+  function tickInterval(interval, start, stop, step) {
+    if (interval == null) interval = 10;
+
+    // If a desired tick count is specified, pick a reasonable tick interval
+    // based on the extent of the domain and a rough estimate of tick size.
+    // Otherwise, assume interval is already a time interval and use it.
+    if (typeof interval === "number") {
+      var target = Math.abs(stop - start) / interval,
+          i = bisector(function(i) { return i[2]; }).right(tickIntervals, target);
+      if (i === tickIntervals.length) {
+        step = tickStep(start / durationYear, stop / durationYear, interval);
+        interval = year$$1;
+      } else if (i) {
+        i = tickIntervals[target / tickIntervals[i - 1][2] < tickIntervals[i][2] / target ? i - 1 : i];
+        step = i[1];
+        interval = i[0];
+      } else {
+        step = tickStep(start, stop, interval);
+        interval = millisecond$$1;
+      }
+    }
+
+    return step == null ? interval : interval.every(step);
+  }
+
+  scale.invert = function(y) {
+    return new Date(invert(y));
+  };
+
+  scale.domain = function(_) {
+    return arguments.length ? domain(map$3.call(_, number$2)) : domain().map(date$1);
+  };
+
+  scale.ticks = function(interval, step) {
+    var d = domain(),
+        t0 = d[0],
+        t1 = d[d.length - 1],
+        r = t1 < t0,
+        t;
+    if (r) t = t0, t0 = t1, t1 = t;
+    t = tickInterval(interval, t0, t1, step);
+    t = t ? t.range(t0, t1 + 1) : []; // inclusive stop
+    return r ? t.reverse() : t;
+  };
+
+  scale.tickFormat = function(count, specifier) {
+    return specifier == null ? tickFormat : format(specifier);
+  };
+
+  scale.nice = function(interval, step) {
+    var d = domain();
+    return (interval = tickInterval(interval, d[0], d[d.length - 1], step))
+        ? domain(nice(d, interval))
+        : scale;
+  };
+
+  scale.copy = function() {
+    return copy(scale, calendar(year$$1, month$$1, week, day$$1, hour$$1, minute$$1, second$$1, millisecond$$1, format));
+  };
+
+  return scale;
+}
+
+var time = function() {
+  return calendar(year, month, sunday, day, hour, minute, second, millisecond, exports.timeFormat).domain([new Date(2000, 0, 1), new Date(2000, 0, 2)]);
+};
+
+var utcTime = function() {
+  return calendar(utcYear, utcMonth, utcSunday, utcDay, utcHour, utcMinute, second, millisecond, exports.utcFormat).domain([Date.UTC(2000, 0, 1), Date.UTC(2000, 0, 2)]);
+};
+
+var colors = function(s) {
+  return s.match(/.{6}/g).map(function(x) {
+    return "#" + x;
+  });
+};
+
+var category10 = colors("1f77b4ff7f0e2ca02cd627289467bd8c564be377c27f7f7fbcbd2217becf");
+
+var category20b = colors("393b795254a36b6ecf9c9ede6379398ca252b5cf6bcedb9c8c6d31bd9e39e7ba52e7cb94843c39ad494ad6616be7969c7b4173a55194ce6dbdde9ed6");
+
+var category20c = colors("3182bd6baed69ecae1c6dbefe6550dfd8d3cfdae6bfdd0a231a35474c476a1d99bc7e9c0756bb19e9ac8bcbddcdadaeb636363969696bdbdbdd9d9d9");
+
+var category20 = colors("1f77b4aec7e8ff7f0effbb782ca02c98df8ad62728ff98969467bdc5b0d58c564bc49c94e377c2f7b6d27f7f7fc7c7c7bcbd22dbdb8d17becf9edae5");
+
+var cubehelix$3 = cubehelixLong(cubehelix(300, 0.5, 0.0), cubehelix(-240, 0.5, 1.0));
+
+var warm = cubehelixLong(cubehelix(-100, 0.75, 0.35), cubehelix(80, 1.50, 0.8));
+
+var cool = cubehelixLong(cubehelix(260, 0.75, 0.35), cubehelix(80, 1.50, 0.8));
+
+var rainbow = cubehelix();
+
+var rainbow$1 = function(t) {
+  if (t < 0 || t > 1) t -= Math.floor(t);
+  var ts = Math.abs(t - 0.5);
+  rainbow.h = 360 * t - 100;
+  rainbow.s = 1.5 - 1.5 * ts;
+  rainbow.l = 0.8 - 0.9 * ts;
+  return rainbow + "";
+};
+
+function ramp(range) {
+  var n = range.length;
+  return function(t) {
+    return range[Math.max(0, Math.min(n - 1, Math.floor(t * n)))];
+  };
+}
+
+var viridis = ramp(colors("44015444025645045745055946075a46085c460a5d460b5e470d60470e6147106347116447136548146748166848176948186a481a6c481b6d481c6e481d6f481f70482071482173482374482475482576482677482878482979472a7a472c7a472d7b472e7c472f7d46307e46327e46337f463480453581453781453882443983443a83443b84433d84433e85423f854240864241864142874144874045884046883f47883f48893e49893e4a893e4c8a3d4d8a3d4e8a3c4f8a3c508b3b518b3b528b3a538b3a548c39558c39568c38588c38598c375a8c375b8d365c8d365d8d355e8d355f8d34608d34618d33628d33638d32648e32658e31668e31678e31688e30698e306a8e2f6b8e2f6c8e2e6d8e2e6e8e2e6f8e2d708e2d718e2c718e2c728e2c738e2b748e2b758e2a768e2a778e2a788e29798e297a8e297b8e287c8e287d8e277e8e277f8e27808e26818e26828e26828e25838e25848e25858e24868e24878e23888e23898e238a8d228b8d228c8d228d8d218e8d218f8d21908d21918c20928c20928c20938c1f948c1f958b1f968b1f978b1f988b1f998a1f9a8a1e9b8a1e9c891e9d891f9e891f9f881fa0881fa1881fa1871fa28720a38620a48621a58521a68522a78522a88423a98324aa8325ab8225ac8226ad8127ad8128ae8029af7f2ab07f2cb17e2db27d2eb37c2fb47c31b57b32b67a34b67935b77937b87838b9773aba763bbb753dbc743fbc7340bd7242be7144bf7046c06f48c16e4ac16d4cc26c4ec36b50c46a52c56954c56856c66758c7655ac8645cc8635ec96260ca6063cb5f65cb5e67cc5c69cd5b6ccd5a6ece5870cf5773d05675d05477d1537ad1517cd2507fd34e81d34d84d44b86d54989d5488bd6468ed64590d74393d74195d84098d83e9bd93c9dd93ba0da39a2da37a5db36a8db34aadc32addc30b0dd2fb2dd2db5de2bb8de29bade28bddf26c0df25c2df23c5e021c8e020cae11fcde11dd0e11cd2e21bd5e21ad8e219dae319dde318dfe318e2e418e5e419e7e419eae51aece51befe51cf1e51df4e61ef6e620f8e621fbe723fde725"));
+
+var magma = ramp(colors("00000401000501010601010802010902020b02020d03030f03031204041405041606051806051a07061c08071e0907200a08220b09240c09260d0a290e0b2b100b2d110c2f120d31130d34140e36150e38160f3b180f3d19103f1a10421c10441d11471e114920114b21114e22115024125325125527125829115a2a115c2c115f2d11612f116331116533106734106936106b38106c390f6e3b0f703d0f713f0f72400f74420f75440f764510774710784910784a10794c117a4e117b4f127b51127c52137c54137d56147d57157e59157e5a167e5c167f5d177f5f187f601880621980641a80651a80671b80681c816a1c816b1d816d1d816e1e81701f81721f817320817521817621817822817922827b23827c23827e24828025828125818326818426818627818827818928818b29818c29818e2a81902a81912b81932b80942c80962c80982d80992d809b2e7f9c2e7f9e2f7fa02f7fa1307ea3307ea5317ea6317da8327daa337dab337cad347cae347bb0357bb2357bb3367ab5367ab73779b83779ba3878bc3978bd3977bf3a77c03a76c23b75c43c75c53c74c73d73c83e73ca3e72cc3f71cd4071cf4070d0416fd2426fd3436ed5446dd6456cd8456cd9466bdb476adc4869de4968df4a68e04c67e24d66e34e65e44f64e55064e75263e85362e95462ea5661eb5760ec5860ed5a5fee5b5eef5d5ef05f5ef1605df2625df2645cf3655cf4675cf4695cf56b5cf66c5cf66e5cf7705cf7725cf8745cf8765cf9785df9795df97b5dfa7d5efa7f5efa815ffb835ffb8560fb8761fc8961fc8a62fc8c63fc8e64fc9065fd9266fd9467fd9668fd9869fd9a6afd9b6bfe9d6cfe9f6dfea16efea36ffea571fea772fea973feaa74feac76feae77feb078feb27afeb47bfeb67cfeb77efeb97ffebb81febd82febf84fec185fec287fec488fec68afec88cfeca8dfecc8ffecd90fecf92fed194fed395fed597fed799fed89afdda9cfddc9efddea0fde0a1fde2a3fde3a5fde5a7fde7a9fde9aafdebacfcecaefceeb0fcf0b2fcf2b4fcf4b6fcf6b8fcf7b9fcf9bbfcfbbdfcfdbf"));
+
+var inferno = ramp(colors("00000401000501010601010802010a02020c02020e03021004031204031405041706041907051b08051d09061f0a07220b07240c08260d08290e092b10092d110a30120a32140b34150b37160b39180c3c190c3e1b0c411c0c431e0c451f0c48210c4a230c4c240c4f260c51280b53290b552b0b572d0b592f0a5b310a5c320a5e340a5f3609613809623909633b09643d09653e0966400a67420a68440a68450a69470b6a490b6a4a0c6b4c0c6b4d0d6c4f0d6c510e6c520e6d540f6d550f6d57106e59106e5a116e5c126e5d126e5f136e61136e62146e64156e65156e67166e69166e6a176e6c186e6d186e6f196e71196e721a6e741a6e751b6e771c6d781c6d7a1d6d7c1d6d7d1e6d7f1e6c801f6c82206c84206b85216b87216b88226a8a226a8c23698d23698f24699025689225689326679526679727669827669a28659b29649d29649f2a63a02a63a22b62a32c61a52c60a62d60a82e5fa92e5eab2f5ead305dae305cb0315bb1325ab3325ab43359b63458b73557b93556ba3655bc3754bd3853bf3952c03a51c13a50c33b4fc43c4ec63d4dc73e4cc83f4bca404acb4149cc4248ce4347cf4446d04545d24644d34743d44842d54a41d74b3fd84c3ed94d3dda4e3cdb503bdd513ade5238df5337e05536e15635e25734e35933e45a31e55c30e65d2fe75e2ee8602de9612bea632aeb6429eb6628ec6726ed6925ee6a24ef6c23ef6e21f06f20f1711ff1731df2741cf3761bf37819f47918f57b17f57d15f67e14f68013f78212f78410f8850ff8870ef8890cf98b0bf98c0af98e09fa9008fa9207fa9407fb9606fb9706fb9906fb9b06fb9d07fc9f07fca108fca309fca50afca60cfca80dfcaa0ffcac11fcae12fcb014fcb216fcb418fbb61afbb81dfbba1ffbbc21fbbe23fac026fac228fac42afac62df9c72ff9c932f9cb35f8cd37f8cf3af7d13df7d340f6d543f6d746f5d949f5db4cf4dd4ff4df53f4e156f3e35af3e55df2e661f2e865f2ea69f1ec6df1ed71f1ef75f1f179f2f27df2f482f3f586f3f68af4f88ef5f992f6fa96f8fb9af9fc9dfafda1fcffa4"));
+
+var plasma = ramp(colors("0d088710078813078916078a19068c1b068d1d068e20068f2206902406912605912805922a05932c05942e05952f059631059733059735049837049938049a3a049a3c049b3e049c3f049c41049d43039e44039e46039f48039f4903a04b03a14c02a14e02a25002a25102a35302a35502a45601a45801a45901a55b01a55c01a65e01a66001a66100a76300a76400a76600a76700a86900a86a00a86c00a86e00a86f00a87100a87201a87401a87501a87701a87801a87a02a87b02a87d03a87e03a88004a88104a78305a78405a78606a68707a68808a68a09a58b0aa58d0ba58e0ca48f0da4910ea3920fa39410a29511a19613a19814a099159f9a169f9c179e9d189d9e199da01a9ca11b9ba21d9aa31e9aa51f99a62098a72197a82296aa2395ab2494ac2694ad2793ae2892b02991b12a90b22b8fb32c8eb42e8db52f8cb6308bb7318ab83289ba3388bb3488bc3587bd3786be3885bf3984c03a83c13b82c23c81c33d80c43e7fc5407ec6417dc7427cc8437bc9447aca457acb4679cc4778cc4977cd4a76ce4b75cf4c74d04d73d14e72d24f71d35171d45270d5536fd5546ed6556dd7566cd8576bd9586ada5a6ada5b69db5c68dc5d67dd5e66de5f65de6164df6263e06363e16462e26561e26660e3685fe4695ee56a5de56b5de66c5ce76e5be76f5ae87059e97158e97257ea7457eb7556eb7655ec7754ed7953ed7a52ee7b51ef7c51ef7e50f07f4ff0804ef1814df1834cf2844bf3854bf3874af48849f48948f58b47f58c46f68d45f68f44f79044f79143f79342f89441f89540f9973ff9983ef99a3efa9b3dfa9c3cfa9e3bfb9f3afba139fba238fca338fca537fca636fca835fca934fdab33fdac33fdae32fdaf31fdb130fdb22ffdb42ffdb52efeb72dfeb82cfeba2cfebb2bfebd2afebe2afec029fdc229fdc328fdc527fdc627fdc827fdca26fdcb26fccd25fcce25fcd025fcd225fbd324fbd524fbd724fad824fada24f9dc24f9dd25f8df25f8e125f7e225f7e425f6e626f6e826f5e926f5eb27f4ed27f3ee27f3f027f2f227f1f426f1f525f0f724f0f921"));
+
+function sequential(interpolator) {
+  var x0 = 0,
+      x1 = 1,
+      clamp = false;
+
+  function scale(x) {
+    var t = (x - x0) / (x1 - x0);
+    return interpolator(clamp ? Math.max(0, Math.min(1, t)) : t);
+  }
+
+  scale.domain = function(_) {
+    return arguments.length ? (x0 = +_[0], x1 = +_[1], scale) : [x0, x1];
+  };
+
+  scale.clamp = function(_) {
+    return arguments.length ? (clamp = !!_, scale) : clamp;
+  };
+
+  scale.interpolator = function(_) {
+    return arguments.length ? (interpolator = _, scale) : interpolator;
+  };
+
+  scale.copy = function() {
+    return sequential(interpolator).domain([x0, x1]).clamp(clamp);
+  };
+
+  return linearish(scale);
+}
+
+var xhtml = "http://www.w3.org/1999/xhtml";
+
+var namespaces = {
+  svg: "http://www.w3.org/2000/svg",
+  xhtml: xhtml,
+  xlink: "http://www.w3.org/1999/xlink",
+  xml: "http://www.w3.org/XML/1998/namespace",
+  xmlns: "http://www.w3.org/2000/xmlns/"
+};
+
+var namespace = function(name) {
+  var prefix = name += "", i = prefix.indexOf(":");
+  if (i >= 0 && (prefix = name.slice(0, i)) !== "xmlns") name = name.slice(i + 1);
+  return namespaces.hasOwnProperty(prefix) ? {space: namespaces[prefix], local: name} : name;
+};
+
+function creatorInherit(name) {
+  return function() {
+    var document = this.ownerDocument,
+        uri = this.namespaceURI;
+    return uri === xhtml && document.documentElement.namespaceURI === xhtml
+        ? document.createElement(name)
+        : document.createElementNS(uri, name);
+  };
+}
+
+function creatorFixed(fullname) {
+  return function() {
+    return this.ownerDocument.createElementNS(fullname.space, fullname.local);
+  };
+}
+
+var creator = function(name) {
+  var fullname = namespace(name);
+  return (fullname.local
+      ? creatorFixed
+      : creatorInherit)(fullname);
+};
+
+var nextId = 0;
+
+function local() {
+  return new Local;
+}
+
+function Local() {
+  this._ = "@" + (++nextId).toString(36);
+}
+
+Local.prototype = local.prototype = {
+  constructor: Local,
+  get: function(node) {
+    var id = this._;
+    while (!(id in node)) if (!(node = node.parentNode)) return;
+    return node[id];
+  },
+  set: function(node, value) {
+    return node[this._] = value;
+  },
+  remove: function(node) {
+    return this._ in node && delete node[this._];
+  },
+  toString: function() {
+    return this._;
+  }
+};
+
+var matcher = function(selector) {
+  return function() {
+    return this.matches(selector);
+  };
+};
+
+if (typeof document !== "undefined") {
+  var element = document.documentElement;
+  if (!element.matches) {
+    var vendorMatches = element.webkitMatchesSelector
+        || element.msMatchesSelector
+        || element.mozMatchesSelector
+        || element.oMatchesSelector;
+    matcher = function(selector) {
+      return function() {
+        return vendorMatches.call(this, selector);
+      };
+    };
+  }
+}
+
+var matcher$1 = matcher;
+
+var filterEvents = {};
+
+exports.event = null;
+
+if (typeof document !== "undefined") {
+  var element$1 = document.documentElement;
+  if (!("onmouseenter" in element$1)) {
+    filterEvents = {mouseenter: "mouseover", mouseleave: "mouseout"};
+  }
+}
+
+function filterContextListener(listener, index, group) {
+  listener = contextListener(listener, index, group);
+  return function(event) {
+    var related = event.relatedTarget;
+    if (!related || (related !== this && !(related.compareDocumentPosition(this) & 8))) {
+      listener.call(this, event);
+    }
+  };
+}
+
+function contextListener(listener, index, group) {
+  return function(event1) {
+    var event0 = exports.event; // Events can be reentrant (e.g., focus).
+    exports.event = event1;
+    try {
+      listener.call(this, this.__data__, index, group);
+    } finally {
+      exports.event = event0;
+    }
+  };
+}
+
+function parseTypenames$1(typenames) {
+  return typenames.trim().split(/^|\s+/).map(function(t) {
+    var name = "", i = t.indexOf(".");
+    if (i >= 0) name = t.slice(i + 1), t = t.slice(0, i);
+    return {type: t, name: name};
+  });
+}
+
+function onRemove(typename) {
+  return function() {
+    var on = this.__on;
+    if (!on) return;
+    for (var j = 0, i = -1, m = on.length, o; j < m; ++j) {
+      if (o = on[j], (!typename.type || o.type === typename.type) && o.name === typename.name) {
+        this.removeEventListener(o.type, o.listener, o.capture);
+      } else {
+        on[++i] = o;
+      }
+    }
+    if (++i) on.length = i;
+    else delete this.__on;
+  };
+}
+
+function onAdd(typename, value, capture) {
+  var wrap = filterEvents.hasOwnProperty(typename.type) ? filterContextListener : contextListener;
+  return function(d, i, group) {
+    var on = this.__on, o, listener = wrap(value, i, group);
+    if (on) for (var j = 0, m = on.length; j < m; ++j) {
+      if ((o = on[j]).type === typename.type && o.name === typename.name) {
+        this.removeEventListener(o.type, o.listener, o.capture);
+        this.addEventListener(o.type, o.listener = listener, o.capture = capture);
+        o.value = value;
+        return;
+      }
+    }
+    this.addEventListener(typename.type, listener, capture);
+    o = {type: typename.type, name: typename.name, value: value, listener: listener, capture: capture};
+    if (!on) this.__on = [o];
+    else on.push(o);
+  };
+}
+
+var selection_on = function(typename, value, capture) {
+  var typenames = parseTypenames$1(typename + ""), i, n = typenames.length, t;
+
+  if (arguments.length < 2) {
+    var on = this.node().__on;
+    if (on) for (var j = 0, m = on.length, o; j < m; ++j) {
+      for (i = 0, o = on[j]; i < n; ++i) {
+        if ((t = typenames[i]).type === o.type && t.name === o.name) {
+          return o.value;
+        }
+      }
+    }
+    return;
+  }
+
+  on = value ? onAdd : onRemove;
+  if (capture == null) capture = false;
+  for (i = 0; i < n; ++i) this.each(on(typenames[i], value, capture));
+  return this;
+};
+
+function customEvent(event1, listener, that, args) {
+  var event0 = exports.event;
+  event1.sourceEvent = exports.event;
+  exports.event = event1;
+  try {
+    return listener.apply(that, args);
+  } finally {
+    exports.event = event0;
+  }
+}
+
+var sourceEvent = function() {
+  var current = exports.event, source;
+  while (source = current.sourceEvent) current = source;
+  return current;
+};
+
+var point$5 = function(node, event) {
+  var svg = node.ownerSVGElement || node;
+
+  if (svg.createSVGPoint) {
+    var point = svg.createSVGPoint();
+    point.x = event.clientX, point.y = event.clientY;
+    point = point.matrixTransform(node.getScreenCTM().inverse());
+    return [point.x, point.y];
+  }
+
+  var rect = node.getBoundingClientRect();
+  return [event.clientX - rect.left - node.clientLeft, event.clientY - rect.top - node.clientTop];
+};
+
+var mouse = function(node) {
+  var event = sourceEvent();
+  if (event.changedTouches) event = event.changedTouches[0];
+  return point$5(node, event);
+};
+
+function none$2() {}
+
+var selector = function(selector) {
+  return selector == null ? none$2 : function() {
+    return this.querySelector(selector);
+  };
+};
+
+var selection_select = function(select) {
+  if (typeof select !== "function") select = selector(select);
+
+  for (var groups = this._groups, m = groups.length, subgroups = new Array(m), j = 0; j < m; ++j) {
+    for (var group = groups[j], n = group.length, subgroup = subgroups[j] = new Array(n), node, subnode, i = 0; i < n; ++i) {
+      if ((node = group[i]) && (subnode = select.call(node, node.__data__, i, group))) {
+        if ("__data__" in node) subnode.__data__ = node.__data__;
+        subgroup[i] = subnode;
+      }
+    }
+  }
+
+  return new Selection(subgroups, this._parents);
+};
+
+function empty() {
+  return [];
+}
+
+var selectorAll = function(selector) {
+  return selector == null ? empty : function() {
+    return this.querySelectorAll(selector);
+  };
+};
+
+var selection_selectAll = function(select) {
+  if (typeof select !== "function") select = selectorAll(select);
+
+  for (var groups = this._groups, m = groups.length, subgroups = [], parents = [], j = 0; j < m; ++j) {
+    for (var group = groups[j], n = group.length, node, i = 0; i < n; ++i) {
+      if (node = group[i]) {
+        subgroups.push(select.call(node, node.__data__, i, group));
+        parents.push(node);
+      }
+    }
+  }
+
+  return new Selection(subgroups, parents);
+};
+
+var selection_filter = function(match) {
+  if (typeof match !== "function") match = matcher$1(match);
+
+  for (var groups = this._groups, m = groups.length, subgroups = new Array(m), j = 0; j < m; ++j) {
+    for (var group = groups[j], n = group.length, subgroup = subgroups[j] = [], node, i = 0; i < n; ++i) {
+      if ((node = group[i]) && match.call(node, node.__data__, i, group)) {
+        subgroup.push(node);
+      }
+    }
+  }
+
+  return new Selection(subgroups, this._parents);
+};
+
+var sparse = function(update) {
+  return new Array(update.length);
+};
+
+var selection_enter = function() {
+  return new Selection(this._enter || this._groups.map(sparse), this._parents);
+};
+
+function EnterNode(parent, datum) {
+  this.ownerDocument = parent.ownerDocument;
+  this.namespaceURI = parent.namespaceURI;
+  this._next = null;
+  this._parent = parent;
+  this.__data__ = datum;
+}
+
+EnterNode.prototype = {
+  constructor: EnterNode,
+  appendChild: function(child) { return this._parent.insertBefore(child, this._next); },
+  insertBefore: function(child, next) { return this._parent.insertBefore(child, next); },
+  querySelector: function(selector) { return this._parent.querySelector(selector); },
+  querySelectorAll: function(selector) { return this._parent.querySelectorAll(selector); }
+};
+
+var constant$5 = function(x) {
+  return function() {
+    return x;
+  };
+};
+
+var keyPrefix = "$"; // Protect against keys like “__proto__”.
+
+function bindIndex(parent, group, enter, update, exit, data) {
+  var i = 0,
+      node,
+      groupLength = group.length,
+      dataLength = data.length;
+
+  // Put any non-null nodes that fit into update.
+  // Put any null nodes into enter.
+  // Put any remaining data into enter.
+  for (; i < dataLength; ++i) {
+    if (node = group[i]) {
+      node.__data__ = data[i];
+      update[i] = node;
+    } else {
+      enter[i] = new EnterNode(parent, data[i]);
+    }
+  }
+
+  // Put any non-null nodes that don’t fit into exit.
+  for (; i < groupLength; ++i) {
+    if (node = group[i]) {
+      exit[i] = node;
+    }
+  }
+}
+
+function bindKey(parent, group, enter, update, exit, data, key) {
+  var i,
+      node,
+      nodeByKeyValue = {},
+      groupLength = group.length,
+      dataLength = data.length,
+      keyValues = new Array(groupLength),
+      keyValue;
+
+  // Compute the key for each node.
+  // If multiple nodes have the same key, the duplicates are added to exit.
+  for (i = 0; i < groupLength; ++i) {
+    if (node = group[i]) {
+      keyValues[i] = keyValue = keyPrefix + key.call(node, node.__data__, i, group);
+      if (keyValue in nodeByKeyValue) {
+        exit[i] = node;
+      } else {
+        nodeByKeyValue[keyValue] = node;
+      }
+    }
+  }
+
+  // Compute the key for each datum.
+  // If there a node associated with this key, join and add it to update.
+  // If there is not (or the key is a duplicate), add it to enter.
+  for (i = 0; i < dataLength; ++i) {
+    keyValue = keyPrefix + key.call(parent, data[i], i, data);
+    if (node = nodeByKeyValue[keyValue]) {
+      update[i] = node;
+      node.__data__ = data[i];
+      nodeByKeyValue[keyValue] = null;
+    } else {
+      enter[i] = new EnterNode(parent, data[i]);
+    }
+  }
+
+  // Add any remaining nodes that were not bound to data to exit.
+  for (i = 0; i < groupLength; ++i) {
+    if ((node = group[i]) && (nodeByKeyValue[keyValues[i]] === node)) {
+      exit[i] = node;
+    }
+  }
+}
+
+var selection_data = function(value, key) {
+  if (!value) {
+    data = new Array(this.size()), j = -1;
+    this.each(function(d) { data[++j] = d; });
+    return data;
+  }
+
+  var bind = key ? bindKey : bindIndex,
+      parents = this._parents,
+      groups = this._groups;
+
+  if (typeof value !== "function") value = constant$5(value);
+
+  for (var m = groups.length, update = new Array(m), enter = new Array(m), exit = new Array(m), j = 0; j < m; ++j) {
+    var parent = parents[j],
+        group = groups[j],
+        groupLength = group.length,
+        data = value.call(parent, parent && parent.__data__, j, parents),
+        dataLength = data.length,
+        enterGroup = enter[j] = new Array(dataLength),
+        updateGroup = update[j] = new Array(dataLength),
+        exitGroup = exit[j] = new Array(groupLength);
+
+    bind(parent, group, enterGroup, updateGroup, exitGroup, data, key);
+
+    // Now connect the enter nodes to their following update node, such that
+    // appendChild can insert the materialized enter node before this node,
+    // rather than at the end of the parent node.
+    for (var i0 = 0, i1 = 0, previous, next; i0 < dataLength; ++i0) {
+      if (previous = enterGroup[i0]) {
+        if (i0 >= i1) i1 = i0 + 1;
+        while (!(next = updateGroup[i1]) && ++i1 < dataLength);
+        previous._next = next || null;
+      }
+    }
+  }
+
+  update = new Selection(update, parents);
+  update._enter = enter;
+  update._exit = exit;
+  return update;
+};
+
+var selection_exit = function() {
+  return new Selection(this._exit || this._groups.map(sparse), this._parents);
+};
+
+var selection_merge = function(selection) {
+
+  for (var groups0 = this._groups, groups1 = selection._groups, m0 = groups0.length, m1 = groups1.length, m = Math.min(m0, m1), merges = new Array(m0), j = 0; j < m; ++j) {
+    for (var group0 = groups0[j], group1 = groups1[j], n = group0.length, merge = merges[j] = new Array(n), node, i = 0; i < n; ++i) {
+      if (node = group0[i] || group1[i]) {
+        merge[i] = node;
+      }
+    }
+  }
+
+  for (; j < m0; ++j) {
+    merges[j] = groups0[j];
+  }
+
+  return new Selection(merges, this._parents);
+};
+
+var selection_order = function() {
+
+  for (var groups = this._groups, j = -1, m = groups.length; ++j < m;) {
+    for (var group = groups[j], i = group.length - 1, next = group[i], node; --i >= 0;) {
+      if (node = group[i]) {
+        if (next && next !== node.nextSibling) next.parentNode.insertBefore(node, next);
+        next = node;
+      }
+    }
+  }
+
+  return this;
+};
+
+var selection_sort = function(compare) {
+  if (!compare) compare = ascending$2;
+
+  function compareNode(a, b) {
+    return a && b ? compare(a.__data__, b.__data__) : !a - !b;
+  }
+
+  for (var groups = this._groups, m = groups.length, sortgroups = new Array(m), j = 0; j < m; ++j) {
+    for (var group = groups[j], n = group.length, sortgroup = sortgroups[j] = new Array(n), node, i = 0; i < n; ++i) {
+      if (node = group[i]) {
+        sortgroup[i] = node;
+      }
+    }
+    sortgroup.sort(compareNode);
+  }
+
+  return new Selection(sortgroups, this._parents).order();
+};
+
+function ascending$2(a, b) {
+  return a < b ? -1 : a > b ? 1 : a >= b ? 0 : NaN;
+}
+
+var selection_call = function() {
+  var callback = arguments[0];
+  arguments[0] = this;
+  callback.apply(null, arguments);
+  return this;
+};
+
+var selection_nodes = function() {
+  var nodes = new Array(this.size()), i = -1;
+  this.each(function() { nodes[++i] = this; });
+  return nodes;
+};
+
+var selection_node = function() {
+
+  for (var groups = this._groups, j = 0, m = groups.length; j < m; ++j) {
+    for (var group = groups[j], i = 0, n = group.length; i < n; ++i) {
+      var node = group[i];
+      if (node) return node;
+    }
+  }
+
+  return null;
+};
+
+var selection_size = function() {
+  var size = 0;
+  this.each(function() { ++size; });
+  return size;
+};
+
+var selection_empty = function() {
+  return !this.node();
+};
+
+var selection_each = function(callback) {
+
+  for (var groups = this._groups, j = 0, m = groups.length; j < m; ++j) {
+    for (var group = groups[j], i = 0, n = group.length, node; i < n; ++i) {
+      if (node = group[i]) callback.call(node, node.__data__, i, group);
+    }
+  }
+
+  return this;
+};
+
+function attrRemove(name) {
+  return function() {
+    this.removeAttribute(name);
+  };
+}
+
+function attrRemoveNS(fullname) {
+  return function() {
+    this.removeAttributeNS(fullname.space, fullname.local);
+  };
+}
+
+function attrConstant(name, value) {
+  return function() {
+    this.setAttribute(name, value);
+  };
+}
+
+function attrConstantNS(fullname, value) {
+  return function() {
+    this.setAttributeNS(fullname.space, fullname.local, value);
+  };
+}
+
+function attrFunction(name, value) {
+  return function() {
+    var v = value.apply(this, arguments);
+    if (v == null) this.removeAttribute(name);
+    else this.setAttribute(name, v);
+  };
+}
+
+function attrFunctionNS(fullname, value) {
+  return function() {
+    var v = value.apply(this, arguments);
+    if (v == null) this.removeAttributeNS(fullname.space, fullname.local);
+    else this.setAttributeNS(fullname.space, fullname.local, v);
+  };
+}
+
+var selection_attr = function(name, value) {
+  var fullname = namespace(name);
+
+  if (arguments.length < 2) {
+    var node = this.node();
+    return fullname.local
+        ? node.getAttributeNS(fullname.space, fullname.local)
+        : node.getAttribute(fullname);
+  }
+
+  return this.each((value == null
+      ? (fullname.local ? attrRemoveNS : attrRemove) : (typeof value === "function"
+      ? (fullname.local ? attrFunctionNS : attrFunction)
+      : (fullname.local ? attrConstantNS : attrConstant)))(fullname, value));
+};
+
+var window = function(node) {
+  return (node.ownerDocument && node.ownerDocument.defaultView) // node is a Node
+      || (node.document && node) // node is a Window
+      || node.defaultView; // node is a Document
+};
+
+function styleRemove(name) {
+  return function() {
+    this.style.removeProperty(name);
+  };
+}
+
+function styleConstant(name, value, priority) {
+  return function() {
+    this.style.setProperty(name, value, priority);
+  };
+}
+
+function styleFunction(name, value, priority) {
+  return function() {
+    var v = value.apply(this, arguments);
+    if (v == null) this.style.removeProperty(name);
+    else this.style.setProperty(name, v, priority);
+  };
+}
+
+var selection_style = function(name, value, priority) {
+  var node;
+  return arguments.length > 1
+      ? this.each((value == null
+            ? styleRemove : typeof value === "function"
+            ? styleFunction
+            : styleConstant)(name, value, priority == null ? "" : priority))
+      : window(node = this.node())
+          .getComputedStyle(node, null)
+          .getPropertyValue(name);
+};
+
+function propertyRemove(name) {
+  return function() {
+    delete this[name];
+  };
+}
+
+function propertyConstant(name, value) {
+  return function() {
+    this[name] = value;
+  };
+}
+
+function propertyFunction(name, value) {
+  return function() {
+    var v = value.apply(this, arguments);
+    if (v == null) delete this[name];
+    else this[name] = v;
+  };
+}
+
+var selection_property = function(name, value) {
+  return arguments.length > 1
+      ? this.each((value == null
+          ? propertyRemove : typeof value === "function"
+          ? propertyFunction
+          : propertyConstant)(name, value))
+      : this.node()[name];
+};
+
+function classArray(string) {
+  return string.trim().split(/^|\s+/);
+}
+
+function classList(node) {
+  return node.classList || new ClassList(node);
+}
+
+function ClassList(node) {
+  this._node = node;
+  this._names = classArray(node.getAttribute("class") || "");
+}
+
+ClassList.prototype = {
+  add: function(name) {
+    var i = this._names.indexOf(name);
+    if (i < 0) {
+      this._names.push(name);
+      this._node.setAttribute("class", this._names.join(" "));
+    }
+  },
+  remove: function(name) {
+    var i = this._names.indexOf(name);
+    if (i >= 0) {
+      this._names.splice(i, 1);
+      this._node.setAttribute("class", this._names.join(" "));
+    }
+  },
+  contains: function(name) {
+    return this._names.indexOf(name) >= 0;
+  }
+};
+
+function classedAdd(node, names) {
+  var list = classList(node), i = -1, n = names.length;
+  while (++i < n) list.add(names[i]);
+}
+
+function classedRemove(node, names) {
+  var list = classList(node), i = -1, n = names.length;
+  while (++i < n) list.remove(names[i]);
+}
+
+function classedTrue(names) {
+  return function() {
+    classedAdd(this, names);
+  };
+}
+
+function classedFalse(names) {
+  return function() {
+    classedRemove(this, names);
+  };
+}
+
+function classedFunction(names, value) {
+  return function() {
+    (value.apply(this, arguments) ? classedAdd : classedRemove)(this, names);
+  };
+}
+
+var selection_classed = function(name, value) {
+  var names = classArray(name + "");
+
+  if (arguments.length < 2) {
+    var list = classList(this.node()), i = -1, n = names.length;
+    while (++i < n) if (!list.contains(names[i])) return false;
+    return true;
+  }
+
+  return this.each((typeof value === "function"
+      ? classedFunction : value
+      ? classedTrue
+      : classedFalse)(names, value));
+};
+
+function textRemove() {
+  this.textContent = "";
+}
+
+function textConstant(value) {
+  return function() {
+    this.textContent = value;
+  };
+}
+
+function textFunction(value) {
+  return function() {
+    var v = value.apply(this, arguments);
+    this.textContent = v == null ? "" : v;
+  };
+}
+
+var selection_text = function(value) {
+  return arguments.length
+      ? this.each(value == null
+          ? textRemove : (typeof value === "function"
+          ? textFunction
+          : textConstant)(value))
+      : this.node().textContent;
+};
+
+function htmlRemove() {
+  this.innerHTML = "";
+}
+
+function htmlConstant(value) {
+  return function() {
+    this.innerHTML = value;
+  };
+}
+
+function htmlFunction(value) {
+  return function() {
+    var v = value.apply(this, arguments);
+    this.innerHTML = v == null ? "" : v;
+  };
+}
+
+var selection_html = function(value) {
+  return arguments.length
+      ? this.each(value == null
+          ? htmlRemove : (typeof value === "function"
+          ? htmlFunction
+          : htmlConstant)(value))
+      : this.node().innerHTML;
+};
+
+function raise$1() {
+  if (this.nextSibling) this.parentNode.appendChild(this);
+}
+
+var selection_raise = function() {
+  return this.each(raise$1);
+};
+
+function lower() {
+  if (this.previousSibling) this.parentNode.insertBefore(this, this.parentNode.firstChild);
+}
+
+var selection_lower = function() {
+  return this.each(lower);
+};
+
+var selection_append = function(name) {
+  var create = typeof name === "function" ? name : creator(name);
+  return this.select(function() {
+    return this.appendChild(create.apply(this, arguments));
+  });
+};
+
+function constantNull() {
+  return null;
+}
+
+var selection_insert = function(name, before) {
+  var create = typeof name === "function" ? name : creator(name),
+      select = before == null ? constantNull : typeof before === "function" ? before : selector(before);
+  return this.select(function() {
+    return this.insertBefore(create.apply(this, arguments), select.apply(this, arguments) || null);
+  });
+};
+
+function remove() {
+  var parent = this.parentNode;
+  if (parent) parent.removeChild(this);
+}
+
+var selection_remove = function() {
+  return this.each(remove);
+};
+
+var selection_datum = function(value) {
+  return arguments.length
+      ? this.property("__data__", value)
+      : this.node().__data__;
+};
+
+function dispatchEvent(node, type, params) {
+  var window$$1 = window(node),
+      event = window$$1.CustomEvent;
+
+  if (event) {
+    event = new event(type, params);
+  } else {
+    event = window$$1.document.createEvent("Event");
+    if (params) event.initEvent(type, params.bubbles, params.cancelable), event.detail = params.detail;
+    else event.initEvent(type, false, false);
+  }
+
+  node.dispatchEvent(event);
+}
+
+function dispatchConstant(type, params) {
+  return function() {
+    return dispatchEvent(this, type, params);
+  };
+}
+
+function dispatchFunction(type, params) {
+  return function() {
+    return dispatchEvent(this, type, params.apply(this, arguments));
+  };
+}
+
+var selection_dispatch = function(type, params) {
+  return this.each((typeof params === "function"
+      ? dispatchFunction
+      : dispatchConstant)(type, params));
+};
+
+var root = [null];
+
+function Selection(groups, parents) {
+  this._groups = groups;
+  this._parents = parents;
+}
+
+function selection() {
+  return new Selection([[document.documentElement]], root);
+}
+
+Selection.prototype = selection.prototype = {
+  constructor: Selection,
+  select: selection_select,
+  selectAll: selection_selectAll,
+  filter: selection_filter,
+  data: selection_data,
+  enter: selection_enter,
+  exit: selection_exit,
+  merge: selection_merge,
+  order: selection_order,
+  sort: selection_sort,
+  call: selection_call,
+  nodes: selection_nodes,
+  node: selection_node,
+  size: selection_size,
+  empty: selection_empty,
+  each: selection_each,
+  attr: selection_attr,
+  style: selection_style,
+  property: selection_property,
+  classed: selection_classed,
+  text: selection_text,
+  html: selection_html,
+  raise: selection_raise,
+  lower: selection_lower,
+  append: selection_append,
+  insert: selection_insert,
+  remove: selection_remove,
+  datum: selection_datum,
+  on: selection_on,
+  dispatch: selection_dispatch
+};
+
+var select = function(selector) {
+  return typeof selector === "string"
+      ? new Selection([[document.querySelector(selector)]], [document.documentElement])
+      : new Selection([[selector]], root);
+};
+
+var selectAll = function(selector) {
+  return typeof selector === "string"
+      ? new Selection([document.querySelectorAll(selector)], [document.documentElement])
+      : new Selection([selector == null ? [] : selector], root);
+};
+
+var touch = function(node, touches, identifier) {
+  if (arguments.length < 3) identifier = touches, touches = sourceEvent().changedTouches;
+
+  for (var i = 0, n = touches ? touches.length : 0, touch; i < n; ++i) {
+    if ((touch = touches[i]).identifier === identifier) {
+      return point$5(node, touch);
+    }
+  }
+
+  return null;
+};
+
+var touches = function(node, touches) {
+  if (touches == null) touches = sourceEvent().touches;
+
+  for (var i = 0, n = touches ? touches.length : 0, points = new Array(n); i < n; ++i) {
+    points[i] = point$5(node, touches[i]);
+  }
+
+  return points;
+};
+
+var emptyOn = dispatch("start", "end", "interrupt");
+var emptyTween = [];
+
+var CREATED = 0;
+var SCHEDULED = 1;
+var STARTING = 2;
+var STARTED = 3;
+var RUNNING = 4;
+var ENDING = 5;
+var ENDED = 6;
+
+var schedule = function(node, name, id, index, group, timing) {
+  var schedules = node.__transition;
+  if (!schedules) node.__transition = {};
+  else if (id in schedules) return;
+  create(node, id, {
+    name: name,
+    index: index, // For context during callback.
+    group: group, // For context during callback.
+    on: emptyOn,
+    tween: emptyTween,
+    time: timing.time,
+    delay: timing.delay,
+    duration: timing.duration,
+    ease: timing.ease,
+    timer: null,
+    state: CREATED
+  });
+};
+
+function init(node, id) {
+  var schedule = node.__transition;
+  if (!schedule || !(schedule = schedule[id]) || schedule.state > CREATED) throw new Error("too late");
+  return schedule;
+}
+
+function set$3(node, id) {
+  var schedule = node.__transition;
+  if (!schedule || !(schedule = schedule[id]) || schedule.state > STARTING) throw new Error("too late");
+  return schedule;
+}
+
+function get$1(node, id) {
+  var schedule = node.__transition;
+  if (!schedule || !(schedule = schedule[id])) throw new Error("too late");
+  return schedule;
+}
+
+function create(node, id, self) {
+  var schedules = node.__transition,
+      tween;
+
+  // Initialize the self timer when the transition is created.
+  // Note the actual delay is not known until the first callback!
+  schedules[id] = self;
+  self.timer = timer(schedule, 0, self.time);
+
+  function schedule(elapsed) {
+    self.state = SCHEDULED;
+    self.timer.restart(start, self.delay, self.time);
+
+    // If the elapsed delay is less than our first sleep, start immediately.
+    if (self.delay <= elapsed) start(elapsed - self.delay);
+  }
+
+  function start(elapsed) {
+    var i, j, n, o;
+
+    // If the state is not SCHEDULED, then we previously errored on start.
+    if (self.state !== SCHEDULED) return stop();
+
+    for (i in schedules) {
+      o = schedules[i];
+      if (o.name !== self.name) continue;
+
+      // While this element already has a starting transition during this frame,
+      // defer starting an interrupting transition until that transition has a
+      // chance to tick (and possibly end); see d3/d3-transition#54!
+      if (o.state === STARTED) return timeout$1(start);
+
+      // Interrupt the active transition, if any.
+      // Dispatch the interrupt event.
+      if (o.state === RUNNING) {
+        o.state = ENDED;
+        o.timer.stop();
+        o.on.call("interrupt", node, node.__data__, o.index, o.group);
+        delete schedules[i];
+      }
+
+      // Cancel any pre-empted transitions. No interrupt event is dispatched
+      // because the cancelled transitions never started. Note that this also
+      // removes this transition from the pending list!
+      else if (+i < id) {
+        o.state = ENDED;
+        o.timer.stop();
+        delete schedules[i];
+      }
+    }
+
+    // Defer the first tick to end of the current frame; see d3/d3#1576.
+    // Note the transition may be canceled after start and before the first tick!
+    // Note this must be scheduled before the start event; see d3/d3-transition#16!
+    // Assuming this is successful, subsequent callbacks go straight to tick.
+    timeout$1(function() {
+      if (self.state === STARTED) {
+        self.state = RUNNING;
+        self.timer.restart(tick, self.delay, self.time);
+        tick(elapsed);
+      }
+    });
+
+    // Dispatch the start event.
+    // Note this must be done before the tween are initialized.
+    self.state = STARTING;
+    self.on.call("start", node, node.__data__, self.index, self.group);
+    if (self.state !== STARTING) return; // interrupted
+    self.state = STARTED;
+
+    // Initialize the tween, deleting null tween.
+    tween = new Array(n = self.tween.length);
+    for (i = 0, j = -1; i < n; ++i) {
+      if (o = self.tween[i].value.call(node, node.__data__, self.index, self.group)) {
+        tween[++j] = o;
+      }
+    }
+    tween.length = j + 1;
+  }
+
+  function tick(elapsed) {
+    var t = elapsed < self.duration ? self.ease.call(null, elapsed / self.duration) : (self.timer.restart(stop), self.state = ENDING, 1),
+        i = -1,
+        n = tween.length;
+
+    while (++i < n) {
+      tween[i].call(null, t);
+    }
+
+    // Dispatch the end event.
+    if (self.state === ENDING) {
+      self.on.call("end", node, node.__data__, self.index, self.group);
+      stop();
+    }
+  }
+
+  function stop() {
+    self.state = ENDED;
+    self.timer.stop();
+    delete schedules[id];
+    for (var i in schedules) return; // eslint-disable-line no-unused-vars
+    delete node.__transition;
+  }
+}
+
+var interrupt = function(node, name) {
+  var schedules = node.__transition,
+      schedule,
+      active,
+      empty = true,
+      i;
+
+  if (!schedules) return;
+
+  name = name == null ? null : name + "";
+
+  for (i in schedules) {
+    if ((schedule = schedules[i]).name !== name) { empty = false; continue; }
+    active = schedule.state > STARTING && schedule.state < ENDING;
+    schedule.state = ENDED;
+    schedule.timer.stop();
+    if (active) schedule.on.call("interrupt", node, node.__data__, schedule.index, schedule.group);
+    delete schedules[i];
+  }
+
+  if (empty) delete node.__transition;
+};
+
+var selection_interrupt = function(name) {
+  return this.each(function() {
+    interrupt(this, name);
+  });
+};
+
+function tweenRemove(id, name) {
+  var tween0, tween1;
+  return function() {
+    var schedule = set$3(this, id),
+        tween = schedule.tween;
+
+    // If this node shared tween with the previous node,
+    // just assign the updated shared tween and we’re done!
+    // Otherwise, copy-on-write.
+    if (tween !== tween0) {
+      tween1 = tween0 = tween;
+      for (var i = 0, n = tween1.length; i < n; ++i) {
+        if (tween1[i].name === name) {
+          tween1 = tween1.slice();
+          tween1.splice(i, 1);
+          break;
+        }
+      }
+    }
+
+    schedule.tween = tween1;
+  };
+}
+
+function tweenFunction(id, name, value) {
+  var tween0, tween1;
+  if (typeof value !== "function") throw new Error;
+  return function() {
+    var schedule = set$3(this, id),
+        tween = schedule.tween;
+
+    // If this node shared tween with the previous node,
+    // just assign the updated shared tween and we’re done!
+    // Otherwise, copy-on-write.
+    if (tween !== tween0) {
+      tween1 = (tween0 = tween).slice();
+      for (var t = {name: name, value: value}, i = 0, n = tween1.length; i < n; ++i) {
+        if (tween1[i].name === name) {
+          tween1[i] = t;
+          break;
+        }
+      }
+      if (i === n) tween1.push(t);
+    }
+
+    schedule.tween = tween1;
+  };
+}
+
+var transition_tween = function(name, value) {
+  var id = this._id;
+
+  name += "";
+
+  if (arguments.length < 2) {
+    var tween = get$1(this.node(), id).tween;
+    for (var i = 0, n = tween.length, t; i < n; ++i) {
+      if ((t = tween[i]).name === name) {
+        return t.value;
+      }
+    }
+    return null;
+  }
+
+  return this.each((value == null ? tweenRemove : tweenFunction)(id, name, value));
+};
+
+function tweenValue(transition, name, value) {
+  var id = transition._id;
+
+  transition.each(function() {
+    var schedule = set$3(this, id);
+    (schedule.value || (schedule.value = {}))[name] = value.apply(this, arguments);
+  });
+
+  return function(node) {
+    return get$1(node, id).value[name];
+  };
+}
+
+var interpolate$1 = function(a, b) {
+  var c;
+  return (typeof b === "number" ? interpolateNumber
+      : b instanceof color ? interpolateRgb
+      : (c = color(b)) ? (b = c, interpolateRgb)
+      : interpolateString)(a, b);
+};
+
+function attrRemove$1(name) {
+  return function() {
+    this.removeAttribute(name);
+  };
+}
+
+function attrRemoveNS$1(fullname) {
+  return function() {
+    this.removeAttributeNS(fullname.space, fullname.local);
+  };
+}
+
+function attrConstant$1(name, interpolate$$1, value1) {
+  var value00,
+      interpolate0;
+  return function() {
+    var value0 = this.getAttribute(name);
+    return value0 === value1 ? null
+        : value0 === value00 ? interpolate0
+        : interpolate0 = interpolate$$1(value00 = value0, value1);
+  };
+}
+
+function attrConstantNS$1(fullname, interpolate$$1, value1) {
+  var value00,
+      interpolate0;
+  return function() {
+    var value0 = this.getAttributeNS(fullname.space, fullname.local);
+    return value0 === value1 ? null
+        : value0 === value00 ? interpolate0
+        : interpolate0 = interpolate$$1(value00 = value0, value1);
+  };
+}
+
+function attrFunction$1(name, interpolate$$1, value) {
+  var value00,
+      value10,
+      interpolate0;
+  return function() {
+    var value0, value1 = value(this);
+    if (value1 == null) return void this.removeAttribute(name);
+    value0 = this.getAttribute(name);
+    return value0 === value1 ? null
+        : value0 === value00 && value1 === value10 ? interpolate0
+        : interpolate0 = interpolate$$1(value00 = value0, value10 = value1);
+  };
+}
+
+function attrFunctionNS$1(fullname, interpolate$$1, value) {
+  var value00,
+      value10,
+      interpolate0;
+  return function() {
+    var value0, value1 = value(this);
+    if (value1 == null) return void this.removeAttributeNS(fullname.space, fullname.local);
+    value0 = this.getAttributeNS(fullname.space, fullname.local);
+    return value0 === value1 ? null
+        : value0 === value00 && value1 === value10 ? interpolate0
+        : interpolate0 = interpolate$$1(value00 = value0, value10 = value1);
+  };
+}
+
+var transition_attr = function(name, value) {
+  var fullname = namespace(name), i = fullname === "transform" ? interpolateTransformSvg : interpolate$1;
+  return this.attrTween(name, typeof value === "function"
+      ? (fullname.local ? attrFunctionNS$1 : attrFunction$1)(fullname, i, tweenValue(this, "attr." + name, value))
+      : value == null ? (fullname.local ? attrRemoveNS$1 : attrRemove$1)(fullname)
+      : (fullname.local ? attrConstantNS$1 : attrConstant$1)(fullname, i, value));
+};
+
+function attrTweenNS(fullname, value) {
+  function tween() {
+    var node = this, i = value.apply(node, arguments);
+    return i && function(t) {
+      node.setAttributeNS(fullname.space, fullname.local, i(t));
+    };
+  }
+  tween._value = value;
+  return tween;
+}
+
+function attrTween(name, value) {
+  function tween() {
+    var node = this, i = value.apply(node, arguments);
+    return i && function(t) {
+      node.setAttribute(name, i(t));
+    };
+  }
+  tween._value = value;
+  return tween;
+}
+
+var transition_attrTween = function(name, value) {
+  var key = "attr." + name;
+  if (arguments.length < 2) return (key = this.tween(key)) && key._value;
+  if (value == null) return this.tween(key, null);
+  if (typeof value !== "function") throw new Error;
+  var fullname = namespace(name);
+  return this.tween(key, (fullname.local ? attrTweenNS : attrTween)(fullname, value));
+};
+
+function delayFunction(id, value) {
+  return function() {
+    init(this, id).delay = +value.apply(this, arguments);
+  };
+}
+
+function delayConstant(id, value) {
+  return value = +value, function() {
+    init(this, id).delay = value;
+  };
+}
+
+var transition_delay = function(value) {
+  var id = this._id;
+
+  return arguments.length
+      ? this.each((typeof value === "function"
+          ? delayFunction
+          : delayConstant)(id, value))
+      : get$1(this.node(), id).delay;
+};
+
+function durationFunction(id, value) {
+  return function() {
+    set$3(this, id).duration = +value.apply(this, arguments);
+  };
+}
+
+function durationConstant(id, value) {
+  return value = +value, function() {
+    set$3(this, id).duration = value;
+  };
+}
+
+var transition_duration = function(value) {
+  var id = this._id;
+
+  return arguments.length
+      ? this.each((typeof value === "function"
+          ? durationFunction
+          : durationConstant)(id, value))
+      : get$1(this.node(), id).duration;
+};
+
+function easeConstant(id, value) {
+  if (typeof value !== "function") throw new Error;
+  return function() {
+    set$3(this, id).ease = value;
+  };
+}
+
+var transition_ease = function(value) {
+  var id = this._id;
+
+  return arguments.length
+      ? this.each(easeConstant(id, value))
+      : get$1(this.node(), id).ease;
+};
+
+var transition_filter = function(match) {
+  if (typeof match !== "function") match = matcher$1(match);
+
+  for (var groups = this._groups, m = groups.length, subgroups = new Array(m), j = 0; j < m; ++j) {
+    for (var group = groups[j], n = group.length, subgroup = subgroups[j] = [], node, i = 0; i < n; ++i) {
+      if ((node = group[i]) && match.call(node, node.__data__, i, group)) {
+        subgroup.push(node);
+      }
+    }
+  }
+
+  return new Transition(subgroups, this._parents, this._name, this._id);
+};
+
+var transition_merge = function(transition) {
+  if (transition._id !== this._id) throw new Error;
+
+  for (var groups0 = this._groups, groups1 = transition._groups, m0 = groups0.length, m1 = groups1.length, m = Math.min(m0, m1), merges = new Array(m0), j = 0; j < m; ++j) {
+    for (var group0 = groups0[j], group1 = groups1[j], n = group0.length, merge = merges[j] = new Array(n), node, i = 0; i < n; ++i) {
+      if (node = group0[i] || group1[i]) {
+        merge[i] = node;
+      }
+    }
+  }
+
+  for (; j < m0; ++j) {
+    merges[j] = groups0[j];
+  }
+
+  return new Transition(merges, this._parents, this._name, this._id);
+};
+
+function start$1(name) {
+  return (name + "").trim().split(/^|\s+/).every(function(t) {
+    var i = t.indexOf(".");
+    if (i >= 0) t = t.slice(0, i);
+    return !t || t === "start";
+  });
+}
+
+function onFunction(id, name, listener) {
+  var on0, on1, sit = start$1(name) ? init : set$3;
+  return function() {
+    var schedule = sit(this, id),
+        on = schedule.on;
+
+    // If this node shared a dispatch with the previous node,
+    // just assign the updated shared dispatch and we’re done!
+    // Otherwise, copy-on-write.
+    if (on !== on0) (on1 = (on0 = on).copy()).on(name, listener);
+
+    schedule.on = on1;
+  };
+}
+
+var transition_on = function(name, listener) {
+  var id = this._id;
+
+  return arguments.length < 2
+      ? get$1(this.node(), id).on.on(name)
+      : this.each(onFunction(id, name, listener));
+};
+
+function removeFunction(id) {
+  return function() {
+    var parent = this.parentNode;
+    for (var i in this.__transition) if (+i !== id) return;
+    if (parent) parent.removeChild(this);
+  };
+}
+
+var transition_remove = function() {
+  return this.on("end.remove", removeFunction(this._id));
+};
+
+var transition_select = function(select$$1) {
+  var name = this._name,
+      id = this._id;
+
+  if (typeof select$$1 !== "function") select$$1 = selector(select$$1);
+
+  for (var groups = this._groups, m = groups.length, subgroups = new Array(m), j = 0; j < m; ++j) {
+    for (var group = groups[j], n = group.length, subgroup = subgroups[j] = new Array(n), node, subnode, i = 0; i < n; ++i) {
+      if ((node = group[i]) && (subnode = select$$1.call(node, node.__data__, i, group))) {
+        if ("__data__" in node) subnode.__data__ = node.__data__;
+        subgroup[i] = subnode;
+        schedule(subgroup[i], name, id, i, subgroup, get$1(node, id));
+      }
+    }
+  }
+
+  return new Transition(subgroups, this._parents, name, id);
+};
+
+var transition_selectAll = function(select$$1) {
+  var name = this._name,
+      id = this._id;
+
+  if (typeof select$$1 !== "function") select$$1 = selectorAll(select$$1);
+
+  for (var groups = this._groups, m = groups.length, subgroups = [], parents = [], j = 0; j < m; ++j) {
+    for (var group = groups[j], n = group.length, node, i = 0; i < n; ++i) {
+      if (node = group[i]) {
+        for (var children = select$$1.call(node, node.__data__, i, group), child, inherit = get$1(node, id), k = 0, l = children.length; k < l; ++k) {
+          if (child = children[k]) {
+            schedule(child, name, id, k, children, inherit);
+          }
+        }
+        subgroups.push(children);
+        parents.push(node);
+      }
+    }
+  }
+
+  return new Transition(subgroups, parents, name, id);
+};
+
+var Selection$1 = selection.prototype.constructor;
+
+var transition_selection = function() {
+  return new Selection$1(this._groups, this._parents);
+};
+
+function styleRemove$1(name, interpolate$$1) {
+  var value00,
+      value10,
+      interpolate0;
+  return function() {
+    var style = window(this).getComputedStyle(this, null),
+        value0 = style.getPropertyValue(name),
+        value1 = (this.style.removeProperty(name), style.getPropertyValue(name));
+    return value0 === value1 ? null
+        : value0 === value00 && value1 === value10 ? interpolate0
+        : interpolate0 = interpolate$$1(value00 = value0, value10 = value1);
+  };
+}
+
+function styleRemoveEnd(name) {
+  return function() {
+    this.style.removeProperty(name);
+  };
+}
+
+function styleConstant$1(name, interpolate$$1, value1) {
+  var value00,
+      interpolate0;
+  return function() {
+    var value0 = window(this).getComputedStyle(this, null).getPropertyValue(name);
+    return value0 === value1 ? null
+        : value0 === value00 ? interpolate0
+        : interpolate0 = interpolate$$1(value00 = value0, value1);
+  };
+}
+
+function styleFunction$1(name, interpolate$$1, value) {
+  var value00,
+      value10,
+      interpolate0;
+  return function() {
+    var style = window(this).getComputedStyle(this, null),
+        value0 = style.getPropertyValue(name),
+        value1 = value(this);
+    if (value1 == null) value1 = (this.style.removeProperty(name), style.getPropertyValue(name));
+    return value0 === value1 ? null
+        : value0 === value00 && value1 === value10 ? interpolate0
+        : interpolate0 = interpolate$$1(value00 = value0, value10 = value1);
+  };
+}
+
+var transition_style = function(name, value, priority) {
+  var i = (name += "") === "transform" ? interpolateTransformCss : interpolate$1;
+  return value == null ? this
+          .styleTween(name, styleRemove$1(name, i))
+          .on("end.style." + name, styleRemoveEnd(name))
+      : this.styleTween(name, typeof value === "function"
+          ? styleFunction$1(name, i, tweenValue(this, "style." + name, value))
+          : styleConstant$1(name, i, value), priority);
+};
+
+function styleTween(name, value, priority) {
+  function tween() {
+    var node = this, i = value.apply(node, arguments);
+    return i && function(t) {
+      node.style.setProperty(name, i(t), priority);
+    };
+  }
+  tween._value = value;
+  return tween;
+}
+
+var transition_styleTween = function(name, value, priority) {
+  var key = "style." + (name += "");
+  if (arguments.length < 2) return (key = this.tween(key)) && key._value;
+  if (value == null) return this.tween(key, null);
+  if (typeof value !== "function") throw new Error;
+  return this.tween(key, styleTween(name, value, priority == null ? "" : priority));
+};
+
+function textConstant$1(value) {
+  return function() {
+    this.textContent = value;
+  };
+}
+
+function textFunction$1(value) {
+  return function() {
+    var value1 = value(this);
+    this.textContent = value1 == null ? "" : value1;
+  };
+}
+
+var transition_text = function(value) {
+  return this.tween("text", typeof value === "function"
+      ? textFunction$1(tweenValue(this, "text", value))
+      : textConstant$1(value == null ? "" : value + ""));
+};
+
+var transition_transition = function() {
+  var name = this._name,
+      id0 = this._id,
+      id1 = newId();
+
+  for (var groups = this._groups, m = groups.length, j = 0; j < m; ++j) {
+    for (var group = groups[j], n = group.length, node, i = 0; i < n; ++i) {
+      if (node = group[i]) {
+        var inherit = get$1(node, id0);
+        schedule(node, name, id1, i, group, {
+          time: inherit.time + inherit.delay + inherit.duration,
+          delay: 0,
+          duration: inherit.duration,
+          ease: inherit.ease
+        });
+      }
+    }
+  }
+
+  return new Transition(groups, this._parents, name, id1);
+};
+
+var id = 0;
+
+function Transition(groups, parents, name, id) {
+  this._groups = groups;
+  this._parents = parents;
+  this._name = name;
+  this._id = id;
+}
+
+function transition(name) {
+  return selection().transition(name);
+}
+
+function newId() {
+  return ++id;
+}
+
+var selection_prototype = selection.prototype;
+
+Transition.prototype = transition.prototype = {
+  constructor: Transition,
+  select: transition_select,
+  selectAll: transition_selectAll,
+  filter: transition_filter,
+  merge: transition_merge,
+  selection: transition_selection,
+  transition: transition_transition,
+  call: selection_prototype.call,
+  nodes: selection_prototype.nodes,
+  node: selection_prototype.node,
+  size: selection_prototype.size,
+  empty: selection_prototype.empty,
+  each: selection_prototype.each,
+  on: transition_on,
+  attr: transition_attr,
+  attrTween: transition_attrTween,
+  style: transition_style,
+  styleTween: transition_styleTween,
+  text: transition_text,
+  remove: transition_remove,
+  tween: transition_tween,
+  delay: transition_delay,
+  duration: transition_duration,
+  ease: transition_ease
+};
+
+var defaultTiming = {
+  time: null, // Set on use.
+  delay: 0,
+  duration: 250,
+  ease: cubicInOut
+};
+
+function inherit(node, id) {
+  var timing;
+  while (!(timing = node.__transition) || !(timing = timing[id])) {
+    if (!(node = node.parentNode)) {
+      return defaultTiming.time = now(), defaultTiming;
+    }
+  }
+  return timing;
+}
+
+var selection_transition = function(name) {
+  var id,
+      timing;
+
+  if (name instanceof Transition) {
+    id = name._id, name = name._name;
+  } else {
+    id = newId(), (timing = defaultTiming).time = now(), name = name == null ? null : name + "";
+  }
+
+  for (var groups = this._groups, m = groups.length, j = 0; j < m; ++j) {
+    for (var group = groups[j], n = group.length, node, i = 0; i < n; ++i) {
+      if (node = group[i]) {
+        schedule(node, name, id, i, group, timing || inherit(node, id));
+      }
+    }
+  }
+
+  return new Transition(groups, this._parents, name, id);
+};
+
+selection.prototype.interrupt = selection_interrupt;
+selection.prototype.transition = selection_transition;
+
+var root$1 = [null];
+
+var active = function(node, name) {
+  var schedules = node.__transition,
+      schedule,
+      i;
+
+  if (schedules) {
+    name = name == null ? null : name + "";
+    for (i in schedules) {
+      if ((schedule = schedules[i]).state > SCHEDULED && schedule.name === name) {
+        return new Transition([[node]], root$1, name, +i);
+      }
+    }
+  }
+
+  return null;
+};
+
+var slice$4 = Array.prototype.slice;
+
+var identity$5 = function(x) {
+  return x;
+};
+
+var top = 1;
+var right = 2;
+var bottom = 3;
+var left = 4;
+var epsilon$2 = 1e-6;
+
+function translateX(scale0, scale1, d) {
+  var x = scale0(d);
+  return "translate(" + (isFinite(x) ? x : scale1(d)) + ",0)";
+}
+
+function translateY(scale0, scale1, d) {
+  var y = scale0(d);
+  return "translate(0," + (isFinite(y) ? y : scale1(d)) + ")";
+}
+
+function center(scale) {
+  var offset = scale.bandwidth() / 2;
+  if (scale.round()) offset = Math.round(offset);
+  return function(d) {
+    return scale(d) + offset;
+  };
+}
+
+function entering() {
+  return !this.__axis;
+}
+
+function axis(orient, scale) {
+  var tickArguments = [],
+      tickValues = null,
+      tickFormat = null,
+      tickSizeInner = 6,
+      tickSizeOuter = 6,
+      tickPadding = 3;
+
+  function axis(context) {
+    var values = tickValues == null ? (scale.ticks ? scale.ticks.apply(scale, tickArguments) : scale.domain()) : tickValues,
+        format = tickFormat == null ? (scale.tickFormat ? scale.tickFormat.apply(scale, tickArguments) : identity$5) : tickFormat,
+        spacing = Math.max(tickSizeInner, 0) + tickPadding,
+        transform = orient === top || orient === bottom ? translateX : translateY,
+        range = scale.range(),
+        range0 = range[0] + 0.5,
+        range1 = range[range.length - 1] + 0.5,
+        position = (scale.bandwidth ? center : identity$5)(scale.copy()),
+        selection = context.selection ? context.selection() : context,
+        path = selection.selectAll(".domain").data([null]),
+        tick = selection.selectAll(".tick").data(values, scale).order(),
+        tickExit = tick.exit(),
+        tickEnter = tick.enter().append("g").attr("class", "tick"),
+        line = tick.select("line"),
+        text = tick.select("text"),
+        k = orient === top || orient === left ? -1 : 1,
+        x, y = orient === left || orient === right ? (x = "x", "y") : (x = "y", "x");
+
+    path = path.merge(path.enter().insert("path", ".tick")
+        .attr("class", "domain")
+        .attr("stroke", "#000"));
+
+    tick = tick.merge(tickEnter);
+
+    line = line.merge(tickEnter.append("line")
+        .attr("stroke", "#000")
+        .attr(x + "2", k * tickSizeInner)
+        .attr(y + "1", 0.5)
+        .attr(y + "2", 0.5));
+
+    text = text.merge(tickEnter.append("text")
+        .attr("fill", "#000")
+        .attr(x, k * spacing)
+        .attr(y, 0.5)
+        .attr("dy", orient === top ? "0em" : orient === bottom ? "0.71em" : "0.32em"));
+
+    if (context !== selection) {
+      path = path.transition(context);
+      tick = tick.transition(context);
+      line = line.transition(context);
+      text = text.transition(context);
+
+      tickExit = tickExit.transition(context)
+          .attr("opacity", epsilon$2)
+          .attr("transform", function(d) { return transform(position, this.parentNode.__axis || position, d); });
+
+      tickEnter
+          .attr("opacity", epsilon$2)
+          .attr("transform", function(d) { return transform(this.parentNode.__axis || position, position, d); });
+    }
+
+    tickExit.remove();
+
+    path
+        .attr("d", orient === left || orient == right
+            ? "M" + k * tickSizeOuter + "," + range0 + "H0.5V" + range1 + "H" + k * tickSizeOuter
+            : "M" + range0 + "," + k * tickSizeOuter + "V0.5H" + range1 + "V" + k * tickSizeOuter);
+
+    tick
+        .attr("opacity", 1)
+        .attr("transform", function(d) { return transform(position, position, d); });
+
+    line
+        .attr(x + "2", k * tickSizeInner);
+
+    text
+        .attr(x, k * spacing)
+        .text(format);
+
+    selection.filter(entering)
+        .attr("fill", "none")
+        .attr("font-size", 10)
+        .attr("font-family", "sans-serif")
+        .attr("text-anchor", orient === right ? "start" : orient === left ? "end" : "middle");
+
+    selection
+        .each(function() { this.__axis = position; });
+  }
+
+  axis.scale = function(_) {
+    return arguments.length ? (scale = _, axis) : scale;
+  };
+
+  axis.ticks = function() {
+    return tickArguments = slice$4.call(arguments), axis;
+  };
+
+  axis.tickArguments = function(_) {
+    return arguments.length ? (tickArguments = _ == null ? [] : slice$4.call(_), axis) : tickArguments.slice();
+  };
+
+  axis.tickValues = function(_) {
+    return arguments.length ? (tickValues = _ == null ? null : slice$4.call(_), axis) : tickValues && tickValues.slice();
+  };
+
+  axis.tickFormat = function(_) {
+    return arguments.length ? (tickFormat = _, axis) : tickFormat;
+  };
+
+  axis.tickSize = function(_) {
+    return arguments.length ? (tickSizeInner = tickSizeOuter = +_, axis) : tickSizeInner;
+  };
+
+  axis.tickSizeInner = function(_) {
+    return arguments.length ? (tickSizeInner = +_, axis) : tickSizeInner;
+  };
+
+  axis.tickSizeOuter = function(_) {
+    return arguments.length ? (tickSizeOuter = +_, axis) : tickSizeOuter;
+  };
+
+  axis.tickPadding = function(_) {
+    return arguments.length ? (tickPadding = +_, axis) : tickPadding;
+  };
+
+  return axis;
+}
+
+function axisTop(scale) {
+  return axis(top, scale);
+}
+
+function axisRight(scale) {
+  return axis(right, scale);
+}
+
+function axisBottom(scale) {
+  return axis(bottom, scale);
+}
+
+function axisLeft(scale) {
+  return axis(left, scale);
+}
+
+function defaultSeparation(a, b) {
+  return a.parent === b.parent ? 1 : 2;
+}
+
+function meanX(children) {
+  return children.reduce(meanXReduce, 0) / children.length;
+}
+
+function meanXReduce(x, c) {
+  return x + c.x;
+}
+
+function maxY(children) {
+  return 1 + children.reduce(maxYReduce, 0);
+}
+
+function maxYReduce(y, c) {
+  return Math.max(y, c.y);
+}
+
+function leafLeft(node) {
+  var children;
+  while (children = node.children) node = children[0];
+  return node;
+}
+
+function leafRight(node) {
+  var children;
+  while (children = node.children) node = children[children.length - 1];
+  return node;
+}
+
+var cluster = function() {
+  var separation = defaultSeparation,
+      dx = 1,
+      dy = 1,
+      nodeSize = false;
+
+  function cluster(root) {
+    var previousNode,
+        x = 0;
+
+    // First walk, computing the initial x & y values.
+    root.eachAfter(function(node) {
+      var children = node.children;
+      if (children) {
+        node.x = meanX(children);
+        node.y = maxY(children);
+      } else {
+        node.x = previousNode ? x += separation(node, previousNode) : 0;
+        node.y = 0;
+        previousNode = node;
+      }
+    });
+
+    var left = leafLeft(root),
+        right = leafRight(root),
+        x0 = left.x - separation(left, right) / 2,
+        x1 = right.x + separation(right, left) / 2;
+
+    // Second walk, normalizing x & y to the desired size.
+    return root.eachAfter(nodeSize ? function(node) {
+      node.x = (node.x - root.x) * dx;
+      node.y = (root.y - node.y) * dy;
+    } : function(node) {
+      node.x = (node.x - x0) / (x1 - x0) * dx;
+      node.y = (1 - (root.y ? node.y / root.y : 1)) * dy;
+    });
+  }
+
+  cluster.separation = function(x) {
+    return arguments.length ? (separation = x, cluster) : separation;
+  };
+
+  cluster.size = function(x) {
+    return arguments.length ? (nodeSize = false, dx = +x[0], dy = +x[1], cluster) : (nodeSize ? null : [dx, dy]);
+  };
+
+  cluster.nodeSize = function(x) {
+    return arguments.length ? (nodeSize = true, dx = +x[0], dy = +x[1], cluster) : (nodeSize ? [dx, dy] : null);
+  };
+
+  return cluster;
+};
+
+var node_each = function(callback) {
+  var node = this, current, next = [node], children, i, n;
+  do {
+    current = next.reverse(), next = [];
+    while (node = current.pop()) {
+      callback(node), children = node.children;
+      if (children) for (i = 0, n = children.length; i < n; ++i) {
+        next.push(children[i]);
+      }
+    }
+  } while (next.length);
+  return this;
+};
+
+var node_eachBefore = function(callback) {
+  var node = this, nodes = [node], children, i;
+  while (node = nodes.pop()) {
+    callback(node), children = node.children;
+    if (children) for (i = children.length - 1; i >= 0; --i) {
+      nodes.push(children[i]);
+    }
+  }
+  return this;
+};
+
+var node_eachAfter = function(callback) {
+  var node = this, nodes = [node], next = [], children, i, n;
+  while (node = nodes.pop()) {
+    next.push(node), children = node.children;
+    if (children) for (i = 0, n = children.length; i < n; ++i) {
+      nodes.push(children[i]);
+    }
+  }
+  while (node = next.pop()) {
+    callback(node);
+  }
+  return this;
+};
+
+var node_sum = function(value) {
+  return this.eachAfter(function(node) {
+    var sum = +value(node.data) || 0,
+        children = node.children,
+        i = children && children.length;
+    while (--i >= 0) sum += children[i].value;
+    node.value = sum;
+  });
+};
+
+var node_sort = function(compare) {
+  return this.eachBefore(function(node) {
+    if (node.children) {
+      node.children.sort(compare);
+    }
+  });
+};
+
+var node_path = function(end) {
+  var start = this,
+      ancestor = leastCommonAncestor(start, end),
+      nodes = [start];
+  while (start !== ancestor) {
+    start = start.parent;
+    nodes.push(start);
+  }
+  var k = nodes.length;
+  while (end !== ancestor) {
+    nodes.splice(k, 0, end);
+    end = end.parent;
+  }
+  return nodes;
+};
+
+function leastCommonAncestor(a, b) {
+  if (a === b) return a;
+  var aNodes = a.ancestors(),
+      bNodes = b.ancestors(),
+      c = null;
+  a = aNodes.pop();
+  b = bNodes.pop();
+  while (a === b) {
+    c = a;
+    a = aNodes.pop();
+    b = bNodes.pop();
+  }
+  return c;
+}
+
+var node_ancestors = function() {
+  var node = this, nodes = [node];
+  while (node = node.parent) {
+    nodes.push(node);
+  }
+  return nodes;
+};
+
+var node_descendants = function() {
+  var nodes = [];
+  this.each(function(node) {
+    nodes.push(node);
+  });
+  return nodes;
+};
+
+var node_leaves = function() {
+  var leaves = [];
+  this.eachBefore(function(node) {
+    if (!node.children) {
+      leaves.push(node);
+    }
+  });
+  return leaves;
+};
+
+var node_links = function() {
+  var root = this, links = [];
+  root.each(function(node) {
+    if (node !== root) { // Don’t include the root’s parent, if any.
+      links.push({source: node.parent, target: node});
+    }
+  });
+  return links;
+};
+
+function hierarchy(data, children) {
+  var root = new Node(data),
+      valued = +data.value && (root.value = data.value),
+      node,
+      nodes = [root],
+      child,
+      childs,
+      i,
+      n;
+
+  if (children == null) children = defaultChildren;
+
+  while (node = nodes.pop()) {
+    if (valued) node.value = +node.data.value;
+    if ((childs = children(node.data)) && (n = childs.length)) {
+      node.children = new Array(n);
+      for (i = n - 1; i >= 0; --i) {
+        nodes.push(child = node.children[i] = new Node(childs[i]));
+        child.parent = node;
+        child.depth = node.depth + 1;
+      }
+    }
+  }
+
+  return root.eachBefore(computeHeight);
+}
+
+function node_copy() {
+  return hierarchy(this).eachBefore(copyData);
+}
+
+function defaultChildren(d) {
+  return d.children;
+}
+
+function copyData(node) {
+  node.data = node.data.data;
+}
+
+function computeHeight(node) {
+  var height = 0;
+  do node.height = height;
+  while ((node = node.parent) && (node.height < ++height));
+}
+
+function Node(data) {
+  this.data = data;
+  this.depth =
+  this.height = 0;
+  this.parent = null;
+}
+
+Node.prototype = hierarchy.prototype = {
+  constructor: Node,
+  each: node_each,
+  eachAfter: node_eachAfter,
+  eachBefore: node_eachBefore,
+  sum: node_sum,
+  sort: node_sort,
+  path: node_path,
+  ancestors: node_ancestors,
+  descendants: node_descendants,
+  leaves: node_leaves,
+  links: node_links,
+  copy: node_copy
+};
+
+function Node$2(value) {
+  this._ = value;
+  this.next = null;
+}
+
+var shuffle$1 = function(array) {
+  var i,
+      n = (array = array.slice()).length,
+      head = null,
+      node = head;
+
+  while (n) {
+    var next = new Node$2(array[n - 1]);
+    if (node) node = node.next = next;
+    else node = head = next;
+    array[i] = array[--n];
+  }
+
+  return {
+    head: head,
+    tail: node
+  };
+};
+
+var enclose = function(circles) {
+  return encloseN(shuffle$1(circles), []);
+};
+
+function encloses(a, b) {
+  var dx = b.x - a.x,
+      dy = b.y - a.y,
+      dr = a.r - b.r;
+  return dr * dr + 1e-6 > dx * dx + dy * dy;
+}
+
+// Returns the smallest circle that contains circles L and intersects circles B.
+function encloseN(L, B) {
+  var circle,
+      l0 = null,
+      l1 = L.head,
+      l2,
+      p1;
+
+  switch (B.length) {
+    case 1: circle = enclose1(B[0]); break;
+    case 2: circle = enclose2(B[0], B[1]); break;
+    case 3: circle = enclose3(B[0], B[1], B[2]); break;
+  }
+
+  while (l1) {
+    p1 = l1._, l2 = l1.next;
+    if (!circle || !encloses(circle, p1)) {
+
+      // Temporarily truncate L before l1.
+      if (l0) L.tail = l0, l0.next = null;
+      else L.head = L.tail = null;
+
+      B.push(p1);
+      circle = encloseN(L, B); // Note: reorders L!
+      B.pop();
+
+      // Move l1 to the front of L and reconnect the truncated list L.
+      if (L.head) l1.next = L.head, L.head = l1;
+      else l1.next = null, L.head = L.tail = l1;
+      l0 = L.tail, l0.next = l2;
+
+    } else {
+      l0 = l1;
+    }
+    l1 = l2;
+  }
+
+  L.tail = l0;
+  return circle;
+}
+
+function enclose1(a) {
+  return {
+    x: a.x,
+    y: a.y,
+    r: a.r
+  };
+}
+
+function enclose2(a, b) {
+  var x1 = a.x, y1 = a.y, r1 = a.r,
+      x2 = b.x, y2 = b.y, r2 = b.r,
+      x21 = x2 - x1, y21 = y2 - y1, r21 = r2 - r1,
+      l = Math.sqrt(x21 * x21 + y21 * y21);
+  return {
+    x: (x1 + x2 + x21 / l * r21) / 2,
+    y: (y1 + y2 + y21 / l * r21) / 2,
+    r: (l + r1 + r2) / 2
+  };
+}
+
+function enclose3(a, b, c) {
+  var x1 = a.x, y1 = a.y, r1 = a.r,
+      x2 = b.x, y2 = b.y, r2 = b.r,
+      x3 = c.x, y3 = c.y, r3 = c.r,
+      a2 = 2 * (x1 - x2),
+      b2 = 2 * (y1 - y2),
+      c2 = 2 * (r2 - r1),
+      d2 = x1 * x1 + y1 * y1 - r1 * r1 - x2 * x2 - y2 * y2 + r2 * r2,
+      a3 = 2 * (x1 - x3),
+      b3 = 2 * (y1 - y3),
+      c3 = 2 * (r3 - r1),
+      d3 = x1 * x1 + y1 * y1 - r1 * r1 - x3 * x3 - y3 * y3 + r3 * r3,
+      ab = a3 * b2 - a2 * b3,
+      xa = (b2 * d3 - b3 * d2) / ab - x1,
+      xb = (b3 * c2 - b2 * c3) / ab,
+      ya = (a3 * d2 - a2 * d3) / ab - y1,
+      yb = (a2 * c3 - a3 * c2) / ab,
+      A = xb * xb + yb * yb - 1,
+      B = 2 * (xa * xb + ya * yb + r1),
+      C = xa * xa + ya * ya - r1 * r1,
+      r = (-B - Math.sqrt(B * B - 4 * A * C)) / (2 * A);
+  return {
+    x: xa + xb * r + x1,
+    y: ya + yb * r + y1,
+    r: r
+  };
+}
+
+function place(a, b, c) {
+  var ax = a.x,
+      ay = a.y,
+      da = b.r + c.r,
+      db = a.r + c.r,
+      dx = b.x - ax,
+      dy = b.y - ay,
+      dc = dx * dx + dy * dy;
+  if (dc) {
+    var x = 0.5 + ((db *= db) - (da *= da)) / (2 * dc),
+        y = Math.sqrt(Math.max(0, 2 * da * (db + dc) - (db -= dc) * db - da * da)) / (2 * dc);
+    c.x = ax + x * dx + y * dy;
+    c.y = ay + x * dy - y * dx;
+  } else {
+    c.x = ax + db;
+    c.y = ay;
+  }
+}
+
+function intersects(a, b) {
+  var dx = b.x - a.x,
+      dy = b.y - a.y,
+      dr = a.r + b.r;
+  return dr * dr > dx * dx + dy * dy;
+}
+
+function distance2(circle, x, y) {
+  var dx = circle.x - x,
+      dy = circle.y - y;
+  return dx * dx + dy * dy;
+}
+
+function Node$1(circle) {
+  this._ = circle;
+  this.next = null;
+  this.previous = null;
+}
+
+function packEnclose(circles) {
+  if (!(n = circles.length)) return 0;
+
+  var a, b, c, n;
+
+  // Place the first circle.
+  a = circles[0], a.x = 0, a.y = 0;
+  if (!(n > 1)) return a.r;
+
+  // Place the second circle.
+  b = circles[1], a.x = -b.r, b.x = a.r, b.y = 0;
+  if (!(n > 2)) return a.r + b.r;
+
+  // Place the third circle.
+  place(b, a, c = circles[2]);
+
+  // Initialize the weighted centroid.
+  var aa = a.r * a.r,
+      ba = b.r * b.r,
+      ca = c.r * c.r,
+      oa = aa + ba + ca,
+      ox = aa * a.x + ba * b.x + ca * c.x,
+      oy = aa * a.y + ba * b.y + ca * c.y,
+      cx, cy, i, j, k, sj, sk;
+
+  // Initialize the front-chain using the first three circles a, b and c.
+  a = new Node$1(a), b = new Node$1(b), c = new Node$1(c);
+  a.next = c.previous = b;
+  b.next = a.previous = c;
+  c.next = b.previous = a;
+
+  // Attempt to place each remaining circle…
+  pack: for (i = 3; i < n; ++i) {
+    place(a._, b._, c = circles[i]), c = new Node$1(c);
+
+    // If there are only three elements in the front-chain…
+    if ((k = a.previous) === (j = b.next)) {
+      // If the new circle intersects the third circle,
+      // rotate the front chain to try the next position.
+      if (intersects(j._, c._)) {
+        a = b, b = j, --i;
+        continue pack;
+      }
+    }
+
+    // Find the closest intersecting circle on the front-chain, if any.
+    else {
+      sj = j._.r, sk = k._.r;
+      do {
+        if (sj <= sk) {
+          if (intersects(j._, c._)) {
+            b = j, a.next = b, b.previous = a, --i;
+            continue pack;
+          }
+          j = j.next, sj += j._.r;
+        } else {
+          if (intersects(k._, c._)) {
+            a = k, a.next = b, b.previous = a, --i;
+            continue pack;
+          }
+          k = k.previous, sk += k._.r;
+        }
+      } while (j !== k.next);
+    }
+
+    // Success! Insert the new circle c between a and b.
+    c.previous = a, c.next = b, a.next = b.previous = b = c;
+
+    // Update the weighted centroid.
+    oa += ca = c._.r * c._.r;
+    ox += ca * c._.x;
+    oy += ca * c._.y;
+
+    // Compute the new closest circle a to centroid.
+    aa = distance2(a._, cx = ox / oa, cy = oy / oa);
+    while ((c = c.next) !== b) {
+      if ((ca = distance2(c._, cx, cy)) < aa) {
+        a = c, aa = ca;
+      }
+    }
+    b = a.next;
+  }
+
+  // Compute the enclosing circle of the front chain.
+  a = [b._], c = b; while ((c = c.next) !== b) a.push(c._); c = enclose(a);
+
+  // Translate the circles to put the enclosing circle around the origin.
+  for (i = 0; i < n; ++i) a = circles[i], a.x -= c.x, a.y -= c.y;
+
+  return c.r;
+}
+
+var siblings = function(circles) {
+  packEnclose(circles);
+  return circles;
+};
+
+function optional(f) {
+  return f == null ? null : required(f);
+}
+
+function required(f) {
+  if (typeof f !== "function") throw new Error;
+  return f;
+}
+
+function constantZero() {
+  return 0;
+}
+
+var constant$6 = function(x) {
+  return function() {
+    return x;
+  };
+};
+
+function defaultRadius(d) {
+  return Math.sqrt(d.value);
+}
+
+var index = function() {
+  var radius = null,
+      dx = 1,
+      dy = 1,
+      padding = constantZero;
+
+  function pack(root) {
+    root.x = dx / 2, root.y = dy / 2;
+    if (radius) {
+      root.eachBefore(radiusLeaf(radius))
+          .eachAfter(packChildren(padding, 0.5))
+          .eachBefore(translateChild(1));
+    } else {
+      root.eachBefore(radiusLeaf(defaultRadius))
+          .eachAfter(packChildren(constantZero, 1))
+          .eachAfter(packChildren(padding, root.r / Math.min(dx, dy)))
+          .eachBefore(translateChild(Math.min(dx, dy) / (2 * root.r)));
+    }
+    return root;
+  }
+
+  pack.radius = function(x) {
+    return arguments.length ? (radius = optional(x), pack) : radius;
+  };
+
+  pack.size = function(x) {
+    return arguments.length ? (dx = +x[0], dy = +x[1], pack) : [dx, dy];
+  };
+
+  pack.padding = function(x) {
+    return arguments.length ? (padding = typeof x === "function" ? x : constant$6(+x), pack) : padding;
+  };
+
+  return pack;
+};
+
+function radiusLeaf(radius) {
+  return function(node) {
+    if (!node.children) {
+      node.r = Math.max(0, +radius(node) || 0);
+    }
+  };
+}
+
+function packChildren(padding, k) {
+  return function(node) {
+    if (children = node.children) {
+      var children,
+          i,
+          n = children.length,
+          r = padding(node) * k || 0,
+          e;
+
+      if (r) for (i = 0; i < n; ++i) children[i].r += r;
+      e = packEnclose(children);
+      if (r) for (i = 0; i < n; ++i) children[i].r -= r;
+      node.r = e + r;
+    }
+  };
+}
+
+function translateChild(k) {
+  return function(node) {
+    var parent = node.parent;
+    node.r *= k;
+    if (parent) {
+      node.x = parent.x + k * node.x;
+      node.y = parent.y + k * node.y;
+    }
+  };
+}
+
+var roundNode = function(node) {
+  node.x0 = Math.round(node.x0);
+  node.y0 = Math.round(node.y0);
+  node.x1 = Math.round(node.x1);
+  node.y1 = Math.round(node.y1);
+};
+
+var treemapDice = function(parent, x0, y0, x1, y1) {
+  var nodes = parent.children,
+      node,
+      i = -1,
+      n = nodes.length,
+      k = parent.value && (x1 - x0) / parent.value;
+
+  while (++i < n) {
+    node = nodes[i], node.y0 = y0, node.y1 = y1;
+    node.x0 = x0, node.x1 = x0 += node.value * k;
+  }
+};
+
+var partition = function() {
+  var dx = 1,
+      dy = 1,
+      padding = 0,
+      round = false;
+
+  function partition(root) {
+    var n = root.height + 1;
+    root.x0 =
+    root.y0 = padding;
+    root.x1 = dx;
+    root.y1 = dy / n;
+    root.eachBefore(positionNode(dy, n));
+    if (round) root.eachBefore(roundNode);
+    return root;
+  }
+
+  function positionNode(dy, n) {
+    return function(node) {
+      if (node.children) {
+        treemapDice(node, node.x0, dy * (node.depth + 1) / n, node.x1, dy * (node.depth + 2) / n);
+      }
+      var x0 = node.x0,
+          y0 = node.y0,
+          x1 = node.x1 - padding,
+          y1 = node.y1 - padding;
+      if (x1 < x0) x0 = x1 = (x0 + x1) / 2;
+      if (y1 < y0) y0 = y1 = (y0 + y1) / 2;
+      node.x0 = x0;
+      node.y0 = y0;
+      node.x1 = x1;
+      node.y1 = y1;
+    };
+  }
+
+  partition.round = function(x) {
+    return arguments.length ? (round = !!x, partition) : round;
+  };
+
+  partition.size = function(x) {
+    return arguments.length ? (dx = +x[0], dy = +x[1], partition) : [dx, dy];
+  };
+
+  partition.padding = function(x) {
+    return arguments.length ? (padding = +x, partition) : padding;
+  };
+
+  return partition;
+};
+
+var keyPrefix$1 = "$";
+var preroot = {depth: -1};
+var ambiguous = {};
+
+function defaultId(d) {
+  return d.id;
+}
+
+function defaultParentId(d) {
+  return d.parentId;
+}
+
+var stratify = function() {
+  var id = defaultId,
+      parentId = defaultParentId;
+
+  function stratify(data) {
+    var d,
+        i,
+        n = data.length,
+        root,
+        parent,
+        node,
+        nodes = new Array(n),
+        nodeId,
+        nodeKey,
+        nodeByKey = {};
+
+    for (i = 0; i < n; ++i) {
+      d = data[i], node = nodes[i] = new Node(d);
+      if ((nodeId = id(d, i, data)) != null && (nodeId += "")) {
+        nodeKey = keyPrefix$1 + (node.id = nodeId);
+        nodeByKey[nodeKey] = nodeKey in nodeByKey ? ambiguous : node;
+      }
+    }
+
+    for (i = 0; i < n; ++i) {
+      node = nodes[i], nodeId = parentId(data[i], i, data);
+      if (nodeId == null || !(nodeId += "")) {
+        if (root) throw new Error("multiple roots");
+        root = node;
+      } else {
+        parent = nodeByKey[keyPrefix$1 + nodeId];
+        if (!parent) throw new Error("missing: " + nodeId);
+        if (parent === ambiguous) throw new Error("ambiguous: " + nodeId);
+        if (parent.children) parent.children.push(node);
+        else parent.children = [node];
+        node.parent = parent;
+      }
+    }
+
+    if (!root) throw new Error("no root");
+    root.parent = preroot;
+    root.eachBefore(function(node) { node.depth = node.parent.depth + 1; --n; }).eachBefore(computeHeight);
+    root.parent = null;
+    if (n > 0) throw new Error("cycle");
+
+    return root;
+  }
+
+  stratify.id = function(x) {
+    return arguments.length ? (id = required(x), stratify) : id;
+  };
+
+  stratify.parentId = function(x) {
+    return arguments.length ? (parentId = required(x), stratify) : parentId;
+  };
+
+  return stratify;
+};
+
+function defaultSeparation$1(a, b) {
+  return a.parent === b.parent ? 1 : 2;
+}
+
+// function radialSeparation(a, b) {
+//   return (a.parent === b.parent ? 1 : 2) / a.depth;
+// }
+
+// This function is used to traverse the left contour of a subtree (or
+// subforest). It returns the successor of v on this contour. This successor is
+// either given by the leftmost child of v or by the thread of v. The function
+// returns null if and only if v is on the highest level of its subtree.
+function nextLeft(v) {
+  var children = v.children;
+  return children ? children[0] : v.t;
+}
+
+// This function works analogously to nextLeft.
+function nextRight(v) {
+  var children = v.children;
+  return children ? children[children.length - 1] : v.t;
+}
+
+// Shifts the current subtree rooted at w+. This is done by increasing
+// prelim(w+) and mod(w+) by shift.
+function moveSubtree(wm, wp, shift) {
+  var change = shift / (wp.i - wm.i);
+  wp.c -= change;
+  wp.s += shift;
+  wm.c += change;
+  wp.z += shift;
+  wp.m += shift;
+}
+
+// All other shifts, applied to the smaller subtrees between w- and w+, are
+// performed by this function. To prepare the shifts, we have to adjust
+// change(w+), shift(w+), and change(w-).
+function executeShifts(v) {
+  var shift = 0,
+      change = 0,
+      children = v.children,
+      i = children.length,
+      w;
+  while (--i >= 0) {
+    w = children[i];
+    w.z += shift;
+    w.m += shift;
+    shift += w.s + (change += w.c);
+  }
+}
+
+// If vi-’s ancestor is a sibling of v, returns vi-’s ancestor. Otherwise,
+// returns the specified (default) ancestor.
+function nextAncestor(vim, v, ancestor) {
+  return vim.a.parent === v.parent ? vim.a : ancestor;
+}
+
+function TreeNode(node, i) {
+  this._ = node;
+  this.parent = null;
+  this.children = null;
+  this.A = null; // default ancestor
+  this.a = this; // ancestor
+  this.z = 0; // prelim
+  this.m = 0; // mod
+  this.c = 0; // change
+  this.s = 0; // shift
+  this.t = null; // thread
+  this.i = i; // number
+}
+
+TreeNode.prototype = Object.create(Node.prototype);
+
+function treeRoot(root) {
+  var tree = new TreeNode(root, 0),
+      node,
+      nodes = [tree],
+      child,
+      children,
+      i,
+      n;
+
+  while (node = nodes.pop()) {
+    if (children = node._.children) {
+      node.children = new Array(n = children.length);
+      for (i = n - 1; i >= 0; --i) {
+        nodes.push(child = node.children[i] = new TreeNode(children[i], i));
+        child.parent = node;
+      }
+    }
+  }
+
+  (tree.parent = new TreeNode(null, 0)).children = [tree];
+  return tree;
+}
+
+// Node-link tree diagram using the Reingold-Tilford "tidy" algorithm
+var tree = function() {
+  var separation = defaultSeparation$1,
+      dx = 1,
+      dy = 1,
+      nodeSize = null;
+
+  function tree(root) {
+    var t = treeRoot(root);
+
+    // Compute the layout using Buchheim et al.’s algorithm.
+    t.eachAfter(firstWalk), t.parent.m = -t.z;
+    t.eachBefore(secondWalk);
+
+    // If a fixed node size is specified, scale x and y.
+    if (nodeSize) root.eachBefore(sizeNode);
+
+    // If a fixed tree size is specified, scale x and y based on the extent.
+    // Compute the left-most, right-most, and depth-most nodes for extents.
+    else {
+      var left = root,
+          right = root,
+          bottom = root;
+      root.eachBefore(function(node) {
+        if (node.x < left.x) left = node;
+        if (node.x > right.x) right = node;
+        if (node.depth > bottom.depth) bottom = node;
+      });
+      var s = left === right ? 1 : separation(left, right) / 2,
+          tx = s - left.x,
+          kx = dx / (right.x + s + tx),
+          ky = dy / (bottom.depth || 1);
+      root.eachBefore(function(node) {
+        node.x = (node.x + tx) * kx;
+        node.y = node.depth * ky;
+      });
+    }
+
+    return root;
+  }
+
+  // Computes a preliminary x-coordinate for v. Before that, FIRST WALK is
+  // applied recursively to the children of v, as well as the function
+  // APPORTION. After spacing out the children by calling EXECUTE SHIFTS, the
+  // node v is placed to the midpoint of its outermost children.
+  function firstWalk(v) {
+    var children = v.children,
+        siblings = v.parent.children,
+        w = v.i ? siblings[v.i - 1] : null;
+    if (children) {
+      executeShifts(v);
+      var midpoint = (children[0].z + children[children.length - 1].z) / 2;
+      if (w) {
+        v.z = w.z + separation(v._, w._);
+        v.m = v.z - midpoint;
+      } else {
+        v.z = midpoint;
+      }
+    } else if (w) {
+      v.z = w.z + separation(v._, w._);
+    }
+    v.parent.A = apportion(v, w, v.parent.A || siblings[0]);
+  }
+
+  // Computes all real x-coordinates by summing up the modifiers recursively.
+  function secondWalk(v) {
+    v._.x = v.z + v.parent.m;
+    v.m += v.parent.m;
+  }
+
+  // The core of the algorithm. Here, a new subtree is combined with the
+  // previous subtrees. Threads are used to traverse the inside and outside
+  // contours of the left and right subtree up to the highest common level. The
+  // vertices used for the traversals are vi+, vi-, vo-, and vo+, where the
+  // superscript o means outside and i means inside, the subscript - means left
+  // subtree and + means right subtree. For summing up the modifiers along the
+  // contour, we use respective variables si+, si-, so-, and so+. Whenever two
+  // nodes of the inside contours conflict, we compute the left one of the
+  // greatest uncommon ancestors using the function ANCESTOR and call MOVE
+  // SUBTREE to shift the subtree and prepare the shifts of smaller subtrees.
+  // Finally, we add a new thread (if necessary).
+  function apportion(v, w, ancestor) {
+    if (w) {
+      var vip = v,
+          vop = v,
+          vim = w,
+          vom = vip.parent.children[0],
+          sip = vip.m,
+          sop = vop.m,
+          sim = vim.m,
+          som = vom.m,
+          shift;
+      while (vim = nextRight(vim), vip = nextLeft(vip), vim && vip) {
+        vom = nextLeft(vom);
+        vop = nextRight(vop);
+        vop.a = v;
+        shift = vim.z + sim - vip.z - sip + separation(vim._, vip._);
+        if (shift > 0) {
+          moveSubtree(nextAncestor(vim, v, ancestor), v, shift);
+          sip += shift;
+          sop += shift;
+        }
+        sim += vim.m;
+        sip += vip.m;
+        som += vom.m;
+        sop += vop.m;
+      }
+      if (vim && !nextRight(vop)) {
+        vop.t = vim;
+        vop.m += sim - sop;
+      }
+      if (vip && !nextLeft(vom)) {
+        vom.t = vip;
+        vom.m += sip - som;
+        ancestor = v;
+      }
+    }
+    return ancestor;
+  }
+
+  function sizeNode(node) {
+    node.x *= dx;
+    node.y = node.depth * dy;
+  }
+
+  tree.separation = function(x) {
+    return arguments.length ? (separation = x, tree) : separation;
+  };
+
+  tree.size = function(x) {
+    return arguments.length ? (nodeSize = false, dx = +x[0], dy = +x[1], tree) : (nodeSize ? null : [dx, dy]);
+  };
+
+  tree.nodeSize = function(x) {
+    return arguments.length ? (nodeSize = true, dx = +x[0], dy = +x[1], tree) : (nodeSize ? [dx, dy] : null);
+  };
+
+  return tree;
+};
+
+var treemapSlice = function(parent, x0, y0, x1, y1) {
+  var nodes = parent.children,
+      node,
+      i = -1,
+      n = nodes.length,
+      k = parent.value && (y1 - y0) / parent.value;
+
+  while (++i < n) {
+    node = nodes[i], node.x0 = x0, node.x1 = x1;
+    node.y0 = y0, node.y1 = y0 += node.value * k;
+  }
+};
+
+var phi = (1 + Math.sqrt(5)) / 2;
+
+function squarifyRatio(ratio, parent, x0, y0, x1, y1) {
+  var rows = [],
+      nodes = parent.children,
+      row,
+      nodeValue,
+      i0 = 0,
+      i1,
+      n = nodes.length,
+      dx, dy,
+      value = parent.value,
+      sumValue,
+      minValue,
+      maxValue,
+      newRatio,
+      minRatio,
+      alpha,
+      beta;
+
+  while (i0 < n) {
+    dx = x1 - x0, dy = y1 - y0;
+    minValue = maxValue = sumValue = nodes[i0].value;
+    alpha = Math.max(dy / dx, dx / dy) / (value * ratio);
+    beta = sumValue * sumValue * alpha;
+    minRatio = Math.max(maxValue / beta, beta / minValue);
+
+    // Keep adding nodes while the aspect ratio maintains or improves.
+    for (i1 = i0 + 1; i1 < n; ++i1) {
+      sumValue += nodeValue = nodes[i1].value;
+      if (nodeValue < minValue) minValue = nodeValue;
+      if (nodeValue > maxValue) maxValue = nodeValue;
+      beta = sumValue * sumValue * alpha;
+      newRatio = Math.max(maxValue / beta, beta / minValue);
+      if (newRatio > minRatio) { sumValue -= nodeValue; break; }
+      minRatio = newRatio;
+    }
+
+    // Position and record the row orientation.
+    rows.push(row = {value: sumValue, dice: dx < dy, children: nodes.slice(i0, i1)});
+    if (row.dice) treemapDice(row, x0, y0, x1, value ? y0 += dy * sumValue / value : y1);
+    else treemapSlice(row, x0, y0, value ? x0 += dx * sumValue / value : x1, y1);
+    value -= sumValue, i0 = i1;
+  }
+
+  return rows;
+}
+
+var squarify = (function custom(ratio) {
+
+  function squarify(parent, x0, y0, x1, y1) {
+    squarifyRatio(ratio, parent, x0, y0, x1, y1);
+  }
+
+  squarify.ratio = function(x) {
+    return custom((x = +x) > 1 ? x : 1);
+  };
+
+  return squarify;
+})(phi);
+
+var index$1 = function() {
+  var tile = squarify,
+      round = false,
+      dx = 1,
+      dy = 1,
+      paddingStack = [0],
+      paddingInner = constantZero,
+      paddingTop = constantZero,
+      paddingRight = constantZero,
+      paddingBottom = constantZero,
+      paddingLeft = constantZero;
+
+  function treemap(root) {
+    root.x0 =
+    root.y0 = 0;
+    root.x1 = dx;
+    root.y1 = dy;
+    root.eachBefore(positionNode);
+    paddingStack = [0];
+    if (round) root.eachBefore(roundNode);
+    return root;
+  }
+
+  function positionNode(node) {
+    var p = paddingStack[node.depth],
+        x0 = node.x0 + p,
+        y0 = node.y0 + p,
+        x1 = node.x1 - p,
+        y1 = node.y1 - p;
+    if (x1 < x0) x0 = x1 = (x0 + x1) / 2;
+    if (y1 < y0) y0 = y1 = (y0 + y1) / 2;
+    node.x0 = x0;
+    node.y0 = y0;
+    node.x1 = x1;
+    node.y1 = y1;
+    if (node.children) {
+      p = paddingStack[node.depth + 1] = paddingInner(node) / 2;
+      x0 += paddingLeft(node) - p;
+      y0 += paddingTop(node) - p;
+      x1 -= paddingRight(node) - p;
+      y1 -= paddingBottom(node) - p;
+      if (x1 < x0) x0 = x1 = (x0 + x1) / 2;
+      if (y1 < y0) y0 = y1 = (y0 + y1) / 2;
+      tile(node, x0, y0, x1, y1);
+    }
+  }
+
+  treemap.round = function(x) {
+    return arguments.length ? (round = !!x, treemap) : round;
+  };
+
+  treemap.size = function(x) {
+    return arguments.length ? (dx = +x[0], dy = +x[1], treemap) : [dx, dy];
+  };
+
+  treemap.tile = function(x) {
+    return arguments.length ? (tile = required(x), treemap) : tile;
+  };
+
+  treemap.padding = function(x) {
+    return arguments.length ? treemap.paddingInner(x).paddingOuter(x) : treemap.paddingInner();
+  };
+
+  treemap.paddingInner = function(x) {
+    return arguments.length ? (paddingInner = typeof x === "function" ? x : constant$6(+x), treemap) : paddingInner;
+  };
+
+  treemap.paddingOuter = function(x) {
+    return arguments.length ? treemap.paddingTop(x).paddingRight(x).paddingBottom(x).paddingLeft(x) : treemap.paddingTop();
+  };
+
+  treemap.paddingTop = function(x) {
+    return arguments.length ? (paddingTop = typeof x === "function" ? x : constant$6(+x), treemap) : paddingTop;
+  };
+
+  treemap.paddingRight = function(x) {
+    return arguments.length ? (paddingRight = typeof x === "function" ? x : constant$6(+x), treemap) : paddingRight;
+  };
+
+  treemap.paddingBottom = function(x) {
+    return arguments.length ? (paddingBottom = typeof x === "function" ? x : constant$6(+x), treemap) : paddingBottom;
+  };
+
+  treemap.paddingLeft = function(x) {
+    return arguments.length ? (paddingLeft = typeof x === "function" ? x : constant$6(+x), treemap) : paddingLeft;
+  };
+
+  return treemap;
+};
+
+var binary = function(parent, x0, y0, x1, y1) {
+  var nodes = parent.children,
+      i, n = nodes.length,
+      sum, sums = new Array(n + 1);
+
+  for (sums[0] = sum = i = 0; i < n; ++i) {
+    sums[i + 1] = sum += nodes[i].value;
+  }
+
+  partition(0, n, parent.value, x0, y0, x1, y1);
+
+  function partition(i, j, value, x0, y0, x1, y1) {
+    if (i >= j - 1) {
+      var node = nodes[i];
+      node.x0 = x0, node.y0 = y0;
+      node.x1 = x1, node.y1 = y1;
+      return;
+    }
+
+    var valueOffset = sums[i],
+        valueTarget = (value / 2) + valueOffset,
+        k = i + 1,
+        hi = j - 1;
+
+    while (k < hi) {
+      var mid = k + hi >>> 1;
+      if (sums[mid] < valueTarget) k = mid + 1;
+      else hi = mid;
+    }
+
+    var valueLeft = sums[k] - valueOffset,
+        valueRight = value - valueLeft;
+
+    if ((y1 - y0) > (x1 - x0)) {
+      var yk = (y0 * valueRight + y1 * valueLeft) / value;
+      partition(i, k, valueLeft, x0, y0, x1, yk);
+      partition(k, j, valueRight, x0, yk, x1, y1);
+    } else {
+      var xk = (x0 * valueRight + x1 * valueLeft) / value;
+      partition(i, k, valueLeft, x0, y0, xk, y1);
+      partition(k, j, valueRight, xk, y0, x1, y1);
+    }
+  }
+};
+
+var sliceDice = function(parent, x0, y0, x1, y1) {
+  (parent.depth & 1 ? treemapSlice : treemapDice)(parent, x0, y0, x1, y1);
+};
+
+var resquarify = (function custom(ratio) {
+
+  function resquarify(parent, x0, y0, x1, y1) {
+    if ((rows = parent._squarify) && (rows.ratio === ratio)) {
+      var rows,
+          row,
+          nodes,
+          i,
+          j = -1,
+          n,
+          m = rows.length,
+          value = parent.value;
+
+      while (++j < m) {
+        row = rows[j], nodes = row.children;
+        for (i = row.value = 0, n = nodes.length; i < n; ++i) row.value += nodes[i].value;
+        if (row.dice) treemapDice(row, x0, y0, x1, y0 += (y1 - y0) * row.value / value);
+        else treemapSlice(row, x0, y0, x0 += (x1 - x0) * row.value / value, y1);
+        value -= row.value;
+      }
+    } else {
+      parent._squarify = rows = squarifyRatio(ratio, parent, x0, y0, x1, y1);
+      rows.ratio = ratio;
+    }
+  }
+
+  resquarify.ratio = function(x) {
+    return custom((x = +x) > 1 ? x : 1);
+  };
+
+  return resquarify;
+})(phi);
+
+var center$1 = function(x, y) {
+  var nodes;
+
+  if (x == null) x = 0;
+  if (y == null) y = 0;
+
+  function force() {
+    var i,
+        n = nodes.length,
+        node,
+        sx = 0,
+        sy = 0;
+
+    for (i = 0; i < n; ++i) {
+      node = nodes[i], sx += node.x, sy += node.y;
+    }
+
+    for (sx = sx / n - x, sy = sy / n - y, i = 0; i < n; ++i) {
+      node = nodes[i], node.x -= sx, node.y -= sy;
+    }
+  }
+
+  force.initialize = function(_) {
+    nodes = _;
+  };
+
+  force.x = function(_) {
+    return arguments.length ? (x = +_, force) : x;
+  };
+
+  force.y = function(_) {
+    return arguments.length ? (y = +_, force) : y;
+  };
+
+  return force;
+};
+
+var constant$7 = function(x) {
+  return function() {
+    return x;
+  };
+};
+
+var jiggle = function() {
+  return (Math.random() - 0.5) * 1e-6;
+};
+
+function x$1(d) {
+  return d.x + d.vx;
+}
+
+function y$1(d) {
+  return d.y + d.vy;
+}
+
+var collide = function(radius) {
+  var nodes,
+      radii,
+      strength = 1,
+      iterations = 1;
+
+  if (typeof radius !== "function") radius = constant$7(radius == null ? 1 : +radius);
+
+  function force() {
+    var i, n = nodes.length,
+        tree,
+        node,
+        xi,
+        yi,
+        ri,
+        ri2;
+
+    for (var k = 0; k < iterations; ++k) {
+      tree = quadtree(nodes, x$1, y$1).visitAfter(prepare);
+      for (i = 0; i < n; ++i) {
+        node = nodes[i];
+        ri = radii[i], ri2 = ri * ri;
+        xi = node.x + node.vx;
+        yi = node.y + node.vy;
+        tree.visit(apply);
+      }
+    }
+
+    function apply(quad, x0, y0, x1, y1) {
+      var data = quad.data, rj = quad.r, r = ri + rj;
+      if (data) {
+        if (data.index > i) {
+          var x = xi - data.x - data.vx,
+              y = yi - data.y - data.vy,
+              l = x * x + y * y;
+          if (l < r * r) {
+            if (x === 0) x = jiggle(), l += x * x;
+            if (y === 0) y = jiggle(), l += y * y;
+            l = (r - (l = Math.sqrt(l))) / l * strength;
+            node.vx += (x *= l) * (r = (rj *= rj) / (ri2 + rj));
+            node.vy += (y *= l) * r;
+            data.vx -= x * (r = 1 - r);
+            data.vy -= y * r;
+          }
+        }
+        return;
+      }
+      return x0 > xi + r || x1 < xi - r || y0 > yi + r || y1 < yi - r;
+    }
+  }
+
+  function prepare(quad) {
+    if (quad.data) return quad.r = radii[quad.data.index];
+    for (var i = quad.r = 0; i < 4; ++i) {
+      if (quad[i] && quad[i].r > quad.r) {
+        quad.r = quad[i].r;
+      }
+    }
+  }
+
+  function initialize() {
+    if (!nodes) return;
+    var i, n = nodes.length;
+    radii = new Array(n);
+    for (i = 0; i < n; ++i) radii[i] = +radius(nodes[i], i, nodes);
+  }
+
+  force.initialize = function(_) {
+    nodes = _;
+    initialize();
+  };
+
+  force.iterations = function(_) {
+    return arguments.length ? (iterations = +_, force) : iterations;
+  };
+
+  force.strength = function(_) {
+    return arguments.length ? (strength = +_, force) : strength;
+  };
+
+  force.radius = function(_) {
+    return arguments.length ? (radius = typeof _ === "function" ? _ : constant$7(+_), initialize(), force) : radius;
+  };
+
+  return force;
+};
+
+function index$2(d, i) {
+  return i;
+}
+
+function find(nodeById, nodeId) {
+  var node = nodeById.get(nodeId);
+  if (!node) throw new Error("missing: " + nodeId);
+  return node;
+}
+
+var link = function(links) {
+  var id = index$2,
+      strength = defaultStrength,
+      strengths,
+      distance = constant$7(30),
+      distances,
+      nodes,
+      count,
+      bias,
+      iterations = 1;
+
+  if (links == null) links = [];
+
+  function defaultStrength(link) {
+    return 1 / Math.min(count[link.source.index], count[link.target.index]);
+  }
+
+  function force(alpha) {
+    for (var k = 0, n = links.length; k < iterations; ++k) {
+      for (var i = 0, link, source, target, x, y, l, b; i < n; ++i) {
+        link = links[i], source = link.source, target = link.target;
+        x = target.x + target.vx - source.x - source.vx || jiggle();
+        y = target.y + target.vy - source.y - source.vy || jiggle();
+        l = Math.sqrt(x * x + y * y);
+        l = (l - distances[i]) / l * alpha * strengths[i];
+        x *= l, y *= l;
+        target.vx -= x * (b = bias[i]);
+        target.vy -= y * b;
+        source.vx += x * (b = 1 - b);
+        source.vy += y * b;
+      }
+    }
+  }
+
+  function initialize() {
+    if (!nodes) return;
+
+    var i,
+        n = nodes.length,
+        m = links.length,
+        nodeById = map$1(nodes, id),
+        link;
+
+    for (i = 0, count = new Array(n); i < n; ++i) {
+      count[i] = 0;
+    }
+
+    for (i = 0; i < m; ++i) {
+      link = links[i], link.index = i;
+      if (typeof link.source !== "object") link.source = find(nodeById, link.source);
+      if (typeof link.target !== "object") link.target = find(nodeById, link.target);
+      ++count[link.source.index], ++count[link.target.index];
+    }
+
+    for (i = 0, bias = new Array(m); i < m; ++i) {
+      link = links[i], bias[i] = count[link.source.index] / (count[link.source.index] + count[link.target.index]);
+    }
+
+    strengths = new Array(m), initializeStrength();
+    distances = new Array(m), initializeDistance();
+  }
+
+  function initializeStrength() {
+    if (!nodes) return;
+
+    for (var i = 0, n = links.length; i < n; ++i) {
+      strengths[i] = +strength(links[i], i, links);
+    }
+  }
+
+  function initializeDistance() {
+    if (!nodes) return;
+
+    for (var i = 0, n = links.length; i < n; ++i) {
+      distances[i] = +distance(links[i], i, links);
+    }
+  }
+
+  force.initialize = function(_) {
+    nodes = _;
+    initialize();
+  };
+
+  force.links = function(_) {
+    return arguments.length ? (links = _, initialize(), force) : links;
+  };
+
+  force.id = function(_) {
+    return arguments.length ? (id = _, force) : id;
+  };
+
+  force.iterations = function(_) {
+    return arguments.length ? (iterations = +_, force) : iterations;
+  };
+
+  force.strength = function(_) {
+    return arguments.length ? (strength = typeof _ === "function" ? _ : constant$7(+_), initializeStrength(), force) : strength;
+  };
+
+  force.distance = function(_) {
+    return arguments.length ? (distance = typeof _ === "function" ? _ : constant$7(+_), initializeDistance(), force) : distance;
+  };
+
+  return force;
+};
+
+function x$2(d) {
+  return d.x;
+}
+
+function y$2(d) {
+  return d.y;
+}
+
+var initialRadius = 10;
+var initialAngle = Math.PI * (3 - Math.sqrt(5));
+
+var simulation = function(nodes) {
+  var simulation,
+      alpha = 1,
+      alphaMin = 0.001,
+      alphaDecay = 1 - Math.pow(alphaMin, 1 / 300),
+      alphaTarget = 0,
+      velocityDecay = 0.6,
+      forces = map$1(),
+      stepper = timer(step),
+      event = dispatch("tick", "end");
+
+  if (nodes == null) nodes = [];
+
+  function step() {
+    tick();
+    event.call("tick", simulation);
+    if (alpha < alphaMin) {
+      stepper.stop();
+      event.call("end", simulation);
+    }
+  }
+
+  function tick() {
+    var i, n = nodes.length, node;
+
+    alpha += (alphaTarget - alpha) * alphaDecay;
+
+    forces.each(function(force) {
+      force(alpha);
+    });
+
+    for (i = 0; i < n; ++i) {
+      node = nodes[i];
+      if (node.fx == null) node.x += node.vx *= velocityDecay;
+      else node.x = node.fx, node.vx = 0;
+      if (node.fy == null) node.y += node.vy *= velocityDecay;
+      else node.y = node.fy, node.vy = 0;
+    }
+  }
+
+  function initializeNodes() {
+    for (var i = 0, n = nodes.length, node; i < n; ++i) {
+      node = nodes[i], node.index = i;
+      if (isNaN(node.x) || isNaN(node.y)) {
+        var radius = initialRadius * Math.sqrt(i), angle = i * initialAngle;
+        node.x = radius * Math.cos(angle);
+        node.y = radius * Math.sin(angle);
+      }
+      if (isNaN(node.vx) || isNaN(node.vy)) {
+        node.vx = node.vy = 0;
+      }
+    }
+  }
+
+  function initializeForce(force) {
+    if (force.initialize) force.initialize(nodes);
+    return force;
+  }
+
+  initializeNodes();
+
+  return simulation = {
+    tick: tick,
+
+    restart: function() {
+      return stepper.restart(step), simulation;
+    },
+
+    stop: function() {
+      return stepper.stop(), simulation;
+    },
+
+    nodes: function(_) {
+      return arguments.length ? (nodes = _, initializeNodes(), forces.each(initializeForce), simulation) : nodes;
+    },
+
+    alpha: function(_) {
+      return arguments.length ? (alpha = +_, simulation) : alpha;
+    },
+
+    alphaMin: function(_) {
+      return arguments.length ? (alphaMin = +_, simulation) : alphaMin;
+    },
+
+    alphaDecay: function(_) {
+      return arguments.length ? (alphaDecay = +_, simulation) : +alphaDecay;
+    },
+
+    alphaTarget: function(_) {
+      return arguments.length ? (alphaTarget = +_, simulation) : alphaTarget;
+    },
+
+    velocityDecay: function(_) {
+      return arguments.length ? (velocityDecay = 1 - _, simulation) : 1 - velocityDecay;
+    },
+
+    force: function(name, _) {
+      return arguments.length > 1 ? ((_ == null ? forces.remove(name) : forces.set(name, initializeForce(_))), simulation) : forces.get(name);
+    },
+
+    find: function(x, y, radius) {
+      var i = 0,
+          n = nodes.length,
+          dx,
+          dy,
+          d2,
+          node,
+          closest;
+
+      if (radius == null) radius = Infinity;
+      else radius *= radius;
+
+      for (i = 0; i < n; ++i) {
+        node = nodes[i];
+        dx = x - node.x;
+        dy = y - node.y;
+        d2 = dx * dx + dy * dy;
+        if (d2 < radius) closest = node, radius = d2;
+      }
+
+      return closest;
+    },
+
+    on: function(name, _) {
+      return arguments.length > 1 ? (event.on(name, _), simulation) : event.on(name);
+    }
+  };
+};
+
+var manyBody = function() {
+  var nodes,
+      node,
+      alpha,
+      strength = constant$7(-30),
+      strengths,
+      distanceMin2 = 1,
+      distanceMax2 = Infinity,
+      theta2 = 0.81;
+
+  function force(_) {
+    var i, n = nodes.length, tree = quadtree(nodes, x$2, y$2).visitAfter(accumulate);
+    for (alpha = _, i = 0; i < n; ++i) node = nodes[i], tree.visit(apply);
+  }
+
+  function initialize() {
+    if (!nodes) return;
+    var i, n = nodes.length;
+    strengths = new Array(n);
+    for (i = 0; i < n; ++i) strengths[i] = +strength(nodes[i], i, nodes);
+  }
+
+  function accumulate(quad) {
+    var strength = 0, q, c, x$$1, y$$1, i;
+
+    // For internal nodes, accumulate forces from child quadrants.
+    if (quad.length) {
+      for (x$$1 = y$$1 = i = 0; i < 4; ++i) {
+        if ((q = quad[i]) && (c = q.value)) {
+          strength += c, x$$1 += c * q.x, y$$1 += c * q.y;
+        }
+      }
+      quad.x = x$$1 / strength;
+      quad.y = y$$1 / strength;
+    }
+
+    // For leaf nodes, accumulate forces from coincident quadrants.
+    else {
+      q = quad;
+      q.x = q.data.x;
+      q.y = q.data.y;
+      do strength += strengths[q.data.index];
+      while (q = q.next);
+    }
+
+    quad.value = strength;
+  }
+
+  function apply(quad, x1, _, x2) {
+    if (!quad.value) return true;
+
+    var x$$1 = quad.x - node.x,
+        y$$1 = quad.y - node.y,
+        w = x2 - x1,
+        l = x$$1 * x$$1 + y$$1 * y$$1;
+
+    // Apply the Barnes-Hut approximation if possible.
+    // Limit forces for very close nodes; randomize direction if coincident.
+    if (w * w / theta2 < l) {
+      if (l < distanceMax2) {
+        if (x$$1 === 0) x$$1 = jiggle(), l += x$$1 * x$$1;
+        if (y$$1 === 0) y$$1 = jiggle(), l += y$$1 * y$$1;
+        if (l < distanceMin2) l = Math.sqrt(distanceMin2 * l);
+        node.vx += x$$1 * quad.value * alpha / l;
+        node.vy += y$$1 * quad.value * alpha / l;
+      }
+      return true;
+    }
+
+    // Otherwise, process points directly.
+    else if (quad.length || l >= distanceMax2) return;
+
+    // Limit forces for very close nodes; randomize direction if coincident.
+    if (quad.data !== node || quad.next) {
+      if (x$$1 === 0) x$$1 = jiggle(), l += x$$1 * x$$1;
+      if (y$$1 === 0) y$$1 = jiggle(), l += y$$1 * y$$1;
+      if (l < distanceMin2) l = Math.sqrt(distanceMin2 * l);
+    }
+
+    do if (quad.data !== node) {
+      w = strengths[quad.data.index] * alpha / l;
+      node.vx += x$$1 * w;
+      node.vy += y$$1 * w;
+    } while (quad = quad.next);
+  }
+
+  force.initialize = function(_) {
+    nodes = _;
+    initialize();
+  };
+
+  force.strength = function(_) {
+    return arguments.length ? (strength = typeof _ === "function" ? _ : constant$7(+_), initialize(), force) : strength;
+  };
+
+  force.distanceMin = function(_) {
+    return arguments.length ? (distanceMin2 = _ * _, force) : Math.sqrt(distanceMin2);
+  };
+
+  force.distanceMax = function(_) {
+    return arguments.length ? (distanceMax2 = _ * _, force) : Math.sqrt(distanceMax2);
+  };
+
+  force.theta = function(_) {
+    return arguments.length ? (theta2 = _ * _, force) : Math.sqrt(theta2);
+  };
+
+  return force;
+};
+
+var x$3 = function(x) {
+  var strength = constant$7(0.1),
+      nodes,
+      strengths,
+      xz;
+
+  if (typeof x !== "function") x = constant$7(x == null ? 0 : +x);
+
+  function force(alpha) {
+    for (var i = 0, n = nodes.length, node; i < n; ++i) {
+      node = nodes[i], node.vx += (xz[i] - node.x) * strengths[i] * alpha;
+    }
+  }
+
+  function initialize() {
+    if (!nodes) return;
+    var i, n = nodes.length;
+    strengths = new Array(n);
+    xz = new Array(n);
+    for (i = 0; i < n; ++i) {
+      strengths[i] = isNaN(xz[i] = +x(nodes[i], i, nodes)) ? 0 : +strength(nodes[i], i, nodes);
+    }
+  }
+
+  force.initialize = function(_) {
+    nodes = _;
+    initialize();
+  };
+
+  force.strength = function(_) {
+    return arguments.length ? (strength = typeof _ === "function" ? _ : constant$7(+_), initialize(), force) : strength;
+  };
+
+  force.x = function(_) {
+    return arguments.length ? (x = typeof _ === "function" ? _ : constant$7(+_), initialize(), force) : x;
+  };
+
+  return force;
+};
+
+var y$3 = function(y) {
+  var strength = constant$7(0.1),
+      nodes,
+      strengths,
+      yz;
+
+  if (typeof y !== "function") y = constant$7(y == null ? 0 : +y);
+
+  function force(alpha) {
+    for (var i = 0, n = nodes.length, node; i < n; ++i) {
+      node = nodes[i], node.vy += (yz[i] - node.y) * strengths[i] * alpha;
+    }
+  }
+
+  function initialize() {
+    if (!nodes) return;
+    var i, n = nodes.length;
+    strengths = new Array(n);
+    yz = new Array(n);
+    for (i = 0; i < n; ++i) {
+      strengths[i] = isNaN(yz[i] = +y(nodes[i], i, nodes)) ? 0 : +strength(nodes[i], i, nodes);
+    }
+  }
+
+  force.initialize = function(_) {
+    nodes = _;
+    initialize();
+  };
+
+  force.strength = function(_) {
+    return arguments.length ? (strength = typeof _ === "function" ? _ : constant$7(+_), initialize(), force) : strength;
+  };
+
+  force.y = function(_) {
+    return arguments.length ? (y = typeof _ === "function" ? _ : constant$7(+_), initialize(), force) : y;
+  };
+
+  return force;
+};
+
+function nopropagation() {
+  exports.event.stopImmediatePropagation();
+}
+
+var noevent = function() {
+  exports.event.preventDefault();
+  exports.event.stopImmediatePropagation();
+};
+
+var dragDisable = function(view) {
+  var root = view.document.documentElement,
+      selection$$1 = select(view).on("dragstart.drag", noevent, true);
+  if ("onselectstart" in root) {
+    selection$$1.on("selectstart.drag", noevent, true);
+  } else {
+    root.__noselect = root.style.MozUserSelect;
+    root.style.MozUserSelect = "none";
+  }
+};
+
+function yesdrag(view, noclick) {
+  var root = view.document.documentElement,
+      selection$$1 = select(view).on("dragstart.drag", null);
+  if (noclick) {
+    selection$$1.on("click.drag", noevent, true);
+    setTimeout(function() { selection$$1.on("click.drag", null); }, 0);
+  }
+  if ("onselectstart" in root) {
+    selection$$1.on("selectstart.drag", null);
+  } else {
+    root.style.MozUserSelect = root.__noselect;
+    delete root.__noselect;
+  }
+}
+
+var constant$8 = function(x) {
+  return function() {
+    return x;
+  };
+};
+
+function DragEvent(target, type, subject, id, active, x, y, dx, dy, dispatch) {
+  this.target = target;
+  this.type = type;
+  this.subject = subject;
+  this.identifier = id;
+  this.active = active;
+  this.x = x;
+  this.y = y;
+  this.dx = dx;
+  this.dy = dy;
+  this._ = dispatch;
+}
+
+DragEvent.prototype.on = function() {
+  var value = this._.on.apply(this._, arguments);
+  return value === this._ ? this : value;
+};
+
+// Ignore right-click, since that should open the context menu.
+function defaultFilter() {
+  return !exports.event.button;
+}
+
+function defaultContainer() {
+  return this.parentNode;
+}
+
+function defaultSubject(d) {
+  return d == null ? {x: exports.event.x, y: exports.event.y} : d;
+}
+
+var drag = function() {
+  var filter = defaultFilter,
+      container = defaultContainer,
+      subject = defaultSubject,
+      gestures = {},
+      listeners = dispatch("start", "drag", "end"),
+      active = 0,
+      mousemoving,
+      touchending;
+
+  function drag(selection$$1) {
+    selection$$1
+        .on("mousedown.drag", mousedowned)
+        .on("touchstart.drag", touchstarted)
+        .on("touchmove.drag", touchmoved)
+        .on("touchend.drag touchcancel.drag", touchended)
+        .style("-webkit-tap-highlight-color", "rgba(0,0,0,0)");
+  }
+
+  function mousedowned() {
+    if (touchending || !filter.apply(this, arguments)) return;
+    var gesture = beforestart("mouse", container.apply(this, arguments), mouse, this, arguments);
+    if (!gesture) return;
+    select(exports.event.view).on("mousemove.drag", mousemoved, true).on("mouseup.drag", mouseupped, true);
+    dragDisable(exports.event.view);
+    nopropagation();
+    mousemoving = false;
+    gesture("start");
+  }
+
+  function mousemoved() {
+    noevent();
+    mousemoving = true;
+    gestures.mouse("drag");
+  }
+
+  function mouseupped() {
+    select(exports.event.view).on("mousemove.drag mouseup.drag", null);
+    yesdrag(exports.event.view, mousemoving);
+    noevent();
+    gestures.mouse("end");
+  }
+
+  function touchstarted() {
+    if (!filter.apply(this, arguments)) return;
+    var touches$$1 = exports.event.changedTouches,
+        c = container.apply(this, arguments),
+        n = touches$$1.length, i, gesture;
+
+    for (i = 0; i < n; ++i) {
+      if (gesture = beforestart(touches$$1[i].identifier, c, touch, this, arguments)) {
+        nopropagation();
+        gesture("start");
+      }
+    }
+  }
+
+  function touchmoved() {
+    var touches$$1 = exports.event.changedTouches,
+        n = touches$$1.length, i, gesture;
+
+    for (i = 0; i < n; ++i) {
+      if (gesture = gestures[touches$$1[i].identifier]) {
+        noevent();
+        gesture("drag");
+      }
+    }
+  }
+
+  function touchended() {
+    var touches$$1 = exports.event.changedTouches,
+        n = touches$$1.length, i, gesture;
+
+    if (touchending) clearTimeout(touchending);
+    touchending = setTimeout(function() { touchending = null; }, 500); // Ghost clicks are delayed!
+    for (i = 0; i < n; ++i) {
+      if (gesture = gestures[touches$$1[i].identifier]) {
+        nopropagation();
+        gesture("end");
+      }
+    }
+  }
+
+  function beforestart(id, container, point, that, args) {
+    var p = point(container, id), s, dx, dy,
+        sublisteners = listeners.copy();
+
+    if (!customEvent(new DragEvent(drag, "beforestart", s, id, active, p[0], p[1], 0, 0, sublisteners), function() {
+      if ((exports.event.subject = s = subject.apply(that, args)) == null) return false;
+      dx = s.x - p[0] || 0;
+      dy = s.y - p[1] || 0;
+      return true;
+    })) return;
+
+    return function gesture(type) {
+      var p0 = p, n;
+      switch (type) {
+        case "start": gestures[id] = gesture, n = active++; break;
+        case "end": delete gestures[id], --active; // nobreak
+        case "drag": p = point(container, id), n = active; break;
+      }
+      customEvent(new DragEvent(drag, type, s, id, n, p[0] + dx, p[1] + dy, p[0] - p0[0], p[1] - p0[1], sublisteners), sublisteners.apply, sublisteners, [type, that, args]);
+    };
+  }
+
+  drag.filter = function(_) {
+    return arguments.length ? (filter = typeof _ === "function" ? _ : constant$8(!!_), drag) : filter;
+  };
+
+  drag.container = function(_) {
+    return arguments.length ? (container = typeof _ === "function" ? _ : constant$8(_), drag) : container;
+  };
+
+  drag.subject = function(_) {
+    return arguments.length ? (subject = typeof _ === "function" ? _ : constant$8(_), drag) : subject;
+  };
+
+  drag.on = function() {
+    var value = listeners.on.apply(listeners, arguments);
+    return value === listeners ? drag : value;
+  };
+
+  return drag;
+};
+
+var constant$9 = function(x) {
+  return function() {
+    return x;
+  };
+};
+
+function x$4(d) {
+  return d[0];
+}
+
+function y$4(d) {
+  return d[1];
+}
+
+function RedBlackTree() {
+  this._ = null; // root node
+}
+
+function RedBlackNode(node) {
+  node.U = // parent node
+  node.C = // color - true for red, false for black
+  node.L = // left node
+  node.R = // right node
+  node.P = // previous node
+  node.N = null; // next node
+}
+
+RedBlackTree.prototype = {
+  constructor: RedBlackTree,
+
+  insert: function(after, node) {
+    var parent, grandpa, uncle;
+
+    if (after) {
+      node.P = after;
+      node.N = after.N;
+      if (after.N) after.N.P = node;
+      after.N = node;
+      if (after.R) {
+        after = after.R;
+        while (after.L) after = after.L;
+        after.L = node;
+      } else {
+        after.R = node;
+      }
+      parent = after;
+    } else if (this._) {
+      after = RedBlackFirst(this._);
+      node.P = null;
+      node.N = after;
+      after.P = after.L = node;
+      parent = after;
+    } else {
+      node.P = node.N = null;
+      this._ = node;
+      parent = null;
+    }
+    node.L = node.R = null;
+    node.U = parent;
+    node.C = true;
+
+    after = node;
+    while (parent && parent.C) {
+      grandpa = parent.U;
+      if (parent === grandpa.L) {
+        uncle = grandpa.R;
+        if (uncle && uncle.C) {
+          parent.C = uncle.C = false;
+          grandpa.C = true;
+          after = grandpa;
+        } else {
+          if (after === parent.R) {
+            RedBlackRotateLeft(this, parent);
+            after = parent;
+            parent = after.U;
+          }
+          parent.C = false;
+          grandpa.C = true;
+          RedBlackRotateRight(this, grandpa);
+        }
+      } else {
+        uncle = grandpa.L;
+        if (uncle && uncle.C) {
+          parent.C = uncle.C = false;
+          grandpa.C = true;
+          after = grandpa;
+        } else {
+          if (after === parent.L) {
+            RedBlackRotateRight(this, parent);
+            after = parent;
+            parent = after.U;
+          }
+          parent.C = false;
+          grandpa.C = true;
+          RedBlackRotateLeft(this, grandpa);
+        }
+      }
+      parent = after.U;
+    }
+    this._.C = false;
+  },
+
+  remove: function(node) {
+    if (node.N) node.N.P = node.P;
+    if (node.P) node.P.N = node.N;
+    node.N = node.P = null;
+
+    var parent = node.U,
+        sibling,
+        left = node.L,
+        right = node.R,
+        next,
+        red;
+
+    if (!left) next = right;
+    else if (!right) next = left;
+    else next = RedBlackFirst(right);
+
+    if (parent) {
+      if (parent.L === node) parent.L = next;
+      else parent.R = next;
+    } else {
+      this._ = next;
+    }
+
+    if (left && right) {
+      red = next.C;
+      next.C = node.C;
+      next.L = left;
+      left.U = next;
+      if (next !== right) {
+        parent = next.U;
+        next.U = node.U;
+        node = next.R;
+        parent.L = node;
+        next.R = right;
+        right.U = next;
+      } else {
+        next.U = parent;
+        parent = next;
+        node = next.R;
+      }
+    } else {
+      red = node.C;
+      node = next;
+    }
+
+    if (node) node.U = parent;
+    if (red) return;
+    if (node && node.C) { node.C = false; return; }
+
+    do {
+      if (node === this._) break;
+      if (node === parent.L) {
+        sibling = parent.R;
+        if (sibling.C) {
+          sibling.C = false;
+          parent.C = true;
+          RedBlackRotateLeft(this, parent);
+          sibling = parent.R;
+        }
+        if ((sibling.L && sibling.L.C)
+            || (sibling.R && sibling.R.C)) {
+          if (!sibling.R || !sibling.R.C) {
+            sibling.L.C = false;
+            sibling.C = true;
+            RedBlackRotateRight(this, sibling);
+            sibling = parent.R;
+          }
+          sibling.C = parent.C;
+          parent.C = sibling.R.C = false;
+          RedBlackRotateLeft(this, parent);
+          node = this._;
+          break;
+        }
+      } else {
+        sibling = parent.L;
+        if (sibling.C) {
+          sibling.C = false;
+          parent.C = true;
+          RedBlackRotateRight(this, parent);
+          sibling = parent.L;
+        }
+        if ((sibling.L && sibling.L.C)
+          || (sibling.R && sibling.R.C)) {
+          if (!sibling.L || !sibling.L.C) {
+            sibling.R.C = false;
+            sibling.C = true;
+            RedBlackRotateLeft(this, sibling);
+            sibling = parent.L;
+          }
+          sibling.C = parent.C;
+          parent.C = sibling.L.C = false;
+          RedBlackRotateRight(this, parent);
+          node = this._;
+          break;
+        }
+      }
+      sibling.C = true;
+      node = parent;
+      parent = parent.U;
+    } while (!node.C);
+
+    if (node) node.C = false;
+  }
+};
+
+function RedBlackRotateLeft(tree, node) {
+  var p = node,
+      q = node.R,
+      parent = p.U;
+
+  if (parent) {
+    if (parent.L === p) parent.L = q;
+    else parent.R = q;
+  } else {
+    tree._ = q;
+  }
+
+  q.U = parent;
+  p.U = q;
+  p.R = q.L;
+  if (p.R) p.R.U = p;
+  q.L = p;
+}
+
+function RedBlackRotateRight(tree, node) {
+  var p = node,
+      q = node.L,
+      parent = p.U;
+
+  if (parent) {
+    if (parent.L === p) parent.L = q;
+    else parent.R = q;
+  } else {
+    tree._ = q;
+  }
+
+  q.U = parent;
+  p.U = q;
+  p.L = q.R;
+  if (p.L) p.L.U = p;
+  q.R = p;
+}
+
+function RedBlackFirst(node) {
+  while (node.L) node = node.L;
+  return node;
+}
+
+function createEdge(left, right, v0, v1) {
+  var edge = [null, null],
+      index = edges.push(edge) - 1;
+  edge.left = left;
+  edge.right = right;
+  if (v0) setEdgeEnd(edge, left, right, v0);
+  if (v1) setEdgeEnd(edge, right, left, v1);
+  cells[left.index].halfedges.push(index);
+  cells[right.index].halfedges.push(index);
+  return edge;
+}
+
+function createBorderEdge(left, v0, v1) {
+  var edge = [v0, v1];
+  edge.left = left;
+  return edge;
+}
+
+function setEdgeEnd(edge, left, right, vertex) {
+  if (!edge[0] && !edge[1]) {
+    edge[0] = vertex;
+    edge.left = left;
+    edge.right = right;
+  } else if (edge.left === right) {
+    edge[1] = vertex;
+  } else {
+    edge[0] = vertex;
+  }
+}
+
+// Liang–Barsky line clipping.
+function clipEdge(edge, x0, y0, x1, y1) {
+  var a = edge[0],
+      b = edge[1],
+      ax = a[0],
+      ay = a[1],
+      bx = b[0],
+      by = b[1],
+      t0 = 0,
+      t1 = 1,
+      dx = bx - ax,
+      dy = by - ay,
+      r;
+
+  r = x0 - ax;
+  if (!dx && r > 0) return;
+  r /= dx;
+  if (dx < 0) {
+    if (r < t0) return;
+    if (r < t1) t1 = r;
+  } else if (dx > 0) {
+    if (r > t1) return;
+    if (r > t0) t0 = r;
+  }
+
+  r = x1 - ax;
+  if (!dx && r < 0) return;
+  r /= dx;
+  if (dx < 0) {
+    if (r > t1) return;
+    if (r > t0) t0 = r;
+  } else if (dx > 0) {
+    if (r < t0) return;
+    if (r < t1) t1 = r;
+  }
+
+  r = y0 - ay;
+  if (!dy && r > 0) return;
+  r /= dy;
+  if (dy < 0) {
+    if (r < t0) return;
+    if (r < t1) t1 = r;
+  } else if (dy > 0) {
+    if (r > t1) return;
+    if (r > t0) t0 = r;
+  }
+
+  r = y1 - ay;
+  if (!dy && r < 0) return;
+  r /= dy;
+  if (dy < 0) {
+    if (r > t1) return;
+    if (r > t0) t0 = r;
+  } else if (dy > 0) {
+    if (r < t0) return;
+    if (r < t1) t1 = r;
+  }
+
+  if (!(t0 > 0) && !(t1 < 1)) return true; // TODO Better check?
+
+  if (t0 > 0) edge[0] = [ax + t0 * dx, ay + t0 * dy];
+  if (t1 < 1) edge[1] = [ax + t1 * dx, ay + t1 * dy];
+  return true;
+}
+
+function connectEdge(edge, x0, y0, x1, y1) {
+  var v1 = edge[1];
+  if (v1) return true;
+
+  var v0 = edge[0],
+      left = edge.left,
+      right = edge.right,
+      lx = left[0],
+      ly = left[1],
+      rx = right[0],
+      ry = right[1],
+      fx = (lx + rx) / 2,
+      fy = (ly + ry) / 2,
+      fm,
+      fb;
+
+  if (ry === ly) {
+    if (fx < x0 || fx >= x1) return;
+    if (lx > rx) {
+      if (!v0) v0 = [fx, y0];
+      else if (v0[1] >= y1) return;
+      v1 = [fx, y1];
+    } else {
+      if (!v0) v0 = [fx, y1];
+      else if (v0[1] < y0) return;
+      v1 = [fx, y0];
+    }
+  } else {
+    fm = (lx - rx) / (ry - ly);
+    fb = fy - fm * fx;
+    if (fm < -1 || fm > 1) {
+      if (lx > rx) {
+        if (!v0) v0 = [(y0 - fb) / fm, y0];
+        else if (v0[1] >= y1) return;
+        v1 = [(y1 - fb) / fm, y1];
+      } else {
+        if (!v0) v0 = [(y1 - fb) / fm, y1];
+        else if (v0[1] < y0) return;
+        v1 = [(y0 - fb) / fm, y0];
+      }
+    } else {
+      if (ly < ry) {
+        if (!v0) v0 = [x0, fm * x0 + fb];
+        else if (v0[0] >= x1) return;
+        v1 = [x1, fm * x1 + fb];
+      } else {
+        if (!v0) v0 = [x1, fm * x1 + fb];
+        else if (v0[0] < x0) return;
+        v1 = [x0, fm * x0 + fb];
+      }
+    }
+  }
+
+  edge[0] = v0;
+  edge[1] = v1;
+  return true;
+}
+
+function clipEdges(x0, y0, x1, y1) {
+  var i = edges.length,
+      edge;
+
+  while (i--) {
+    if (!connectEdge(edge = edges[i], x0, y0, x1, y1)
+        || !clipEdge(edge, x0, y0, x1, y1)
+        || !(Math.abs(edge[0][0] - edge[1][0]) > epsilon$3
+            || Math.abs(edge[0][1] - edge[1][1]) > epsilon$3)) {
+      delete edges[i];
+    }
+  }
+}
+
+function createCell(site) {
+  return cells[site.index] = {
+    site: site,
+    halfedges: []
+  };
+}
+
+function cellHalfedgeAngle(cell, edge) {
+  var site = cell.site,
+      va = edge.left,
+      vb = edge.right;
+  if (site === vb) vb = va, va = site;
+  if (vb) return Math.atan2(vb[1] - va[1], vb[0] - va[0]);
+  if (site === va) va = edge[1], vb = edge[0];
+  else va = edge[0], vb = edge[1];
+  return Math.atan2(va[0] - vb[0], vb[1] - va[1]);
+}
+
+function cellHalfedgeStart(cell, edge) {
+  return edge[+(edge.left !== cell.site)];
+}
+
+function cellHalfedgeEnd(cell, edge) {
+  return edge[+(edge.left === cell.site)];
+}
+
+function sortCellHalfedges() {
+  for (var i = 0, n = cells.length, cell, halfedges, j, m; i < n; ++i) {
+    if ((cell = cells[i]) && (m = (halfedges = cell.halfedges).length)) {
+      var index = new Array(m),
+          array = new Array(m);
+      for (j = 0; j < m; ++j) index[j] = j, array[j] = cellHalfedgeAngle(cell, edges[halfedges[j]]);
+      index.sort(function(i, j) { return array[j] - array[i]; });
+      for (j = 0; j < m; ++j) array[j] = halfedges[index[j]];
+      for (j = 0; j < m; ++j) halfedges[j] = array[j];
+    }
+  }
+}
+
+function clipCells(x0, y0, x1, y1) {
+  var nCells = cells.length,
+      iCell,
+      cell,
+      site,
+      iHalfedge,
+      halfedges,
+      nHalfedges,
+      start,
+      startX,
+      startY,
+      end,
+      endX,
+      endY,
+      cover = true;
+
+  for (iCell = 0; iCell < nCells; ++iCell) {
+    if (cell = cells[iCell]) {
+      site = cell.site;
+      halfedges = cell.halfedges;
+      iHalfedge = halfedges.length;
+
+      // Remove any dangling clipped edges.
+      while (iHalfedge--) {
+        if (!edges[halfedges[iHalfedge]]) {
+          halfedges.splice(iHalfedge, 1);
+        }
+      }
+
+      // Insert any border edges as necessary.
+      iHalfedge = 0, nHalfedges = halfedges.length;
+      while (iHalfedge < nHalfedges) {
+        end = cellHalfedgeEnd(cell, edges[halfedges[iHalfedge]]), endX = end[0], endY = end[1];
+        start = cellHalfedgeStart(cell, edges[halfedges[++iHalfedge % nHalfedges]]), startX = start[0], startY = start[1];
+        if (Math.abs(endX - startX) > epsilon$3 || Math.abs(endY - startY) > epsilon$3) {
+          halfedges.splice(iHalfedge, 0, edges.push(createBorderEdge(site, end,
+              Math.abs(endX - x0) < epsilon$3 && y1 - endY > epsilon$3 ? [x0, Math.abs(startX - x0) < epsilon$3 ? startY : y1]
+              : Math.abs(endY - y1) < epsilon$3 && x1 - endX > epsilon$3 ? [Math.abs(startY - y1) < epsilon$3 ? startX : x1, y1]
+              : Math.abs(endX - x1) < epsilon$3 && endY - y0 > epsilon$3 ? [x1, Math.abs(startX - x1) < epsilon$3 ? startY : y0]
+              : Math.abs(endY - y0) < epsilon$3 && endX - x0 > epsilon$3 ? [Math.abs(startY - y0) < epsilon$3 ? startX : x0, y0]
+              : null)) - 1);
+          ++nHalfedges;
+        }
+      }
+
+      if (nHalfedges) cover = false;
+    }
+  }
+
+  // If there weren’t any edges, have the closest site cover the extent.
+  // It doesn’t matter which corner of the extent we measure!
+  if (cover) {
+    var dx, dy, d2, dc = Infinity;
+
+    for (iCell = 0, cover = null; iCell < nCells; ++iCell) {
+      if (cell = cells[iCell]) {
+        site = cell.site;
+        dx = site[0] - x0;
+        dy = site[1] - y0;
+        d2 = dx * dx + dy * dy;
+        if (d2 < dc) dc = d2, cover = cell;
+      }
+    }
+
+    if (cover) {
+      var v00 = [x0, y0], v01 = [x0, y1], v11 = [x1, y1], v10 = [x1, y0];
+      cover.halfedges.push(
+        edges.push(createBorderEdge(site = cover.site, v00, v01)) - 1,
+        edges.push(createBorderEdge(site, v01, v11)) - 1,
+        edges.push(createBorderEdge(site, v11, v10)) - 1,
+        edges.push(createBorderEdge(site, v10, v00)) - 1
+      );
+    }
+  }
+
+  // Lastly delete any cells with no edges; these were entirely clipped.
+  for (iCell = 0; iCell < nCells; ++iCell) {
+    if (cell = cells[iCell]) {
+      if (!cell.halfedges.length) {
+        delete cells[iCell];
+      }
+    }
+  }
+}
+
+var circlePool = [];
+
+var firstCircle;
+
+function Circle() {
+  RedBlackNode(this);
+  this.x =
+  this.y =
+  this.arc =
+  this.site =
+  this.cy = null;
+}
+
+function attachCircle(arc) {
+  var lArc = arc.P,
+      rArc = arc.N;
+
+  if (!lArc || !rArc) return;
+
+  var lSite = lArc.site,
+      cSite = arc.site,
+      rSite = rArc.site;
+
+  if (lSite === rSite) return;
+
+  var bx = cSite[0],
+      by = cSite[1],
+      ax = lSite[0] - bx,
+      ay = lSite[1] - by,
+      cx = rSite[0] - bx,
+      cy = rSite[1] - by;
+
+  var d = 2 * (ax * cy - ay * cx);
+  if (d >= -epsilon2$1) return;
+
+  var ha = ax * ax + ay * ay,
+      hc = cx * cx + cy * cy,
+      x = (cy * ha - ay * hc) / d,
+      y = (ax * hc - cx * ha) / d;
+
+  var circle = circlePool.pop() || new Circle;
+  circle.arc = arc;
+  circle.site = cSite;
+  circle.x = x + bx;
+  circle.y = (circle.cy = y + by) + Math.sqrt(x * x + y * y); // y bottom
+
+  arc.circle = circle;
+
+  var before = null,
+      node = circles._;
+
+  while (node) {
+    if (circle.y < node.y || (circle.y === node.y && circle.x <= node.x)) {
+      if (node.L) node = node.L;
+      else { before = node.P; break; }
+    } else {
+      if (node.R) node = node.R;
+      else { before = node; break; }
+    }
+  }
+
+  circles.insert(before, circle);
+  if (!before) firstCircle = circle;
+}
+
+function detachCircle(arc) {
+  var circle = arc.circle;
+  if (circle) {
+    if (!circle.P) firstCircle = circle.N;
+    circles.remove(circle);
+    circlePool.push(circle);
+    RedBlackNode(circle);
+    arc.circle = null;
+  }
+}
+
+var beachPool = [];
+
+function Beach() {
+  RedBlackNode(this);
+  this.edge =
+  this.site =
+  this.circle = null;
+}
+
+function createBeach(site) {
+  var beach = beachPool.pop() || new Beach;
+  beach.site = site;
+  return beach;
+}
+
+function detachBeach(beach) {
+  detachCircle(beach);
+  beaches.remove(beach);
+  beachPool.push(beach);
+  RedBlackNode(beach);
+}
+
+function removeBeach(beach) {
+  var circle = beach.circle,
+      x = circle.x,
+      y = circle.cy,
+      vertex = [x, y],
+      previous = beach.P,
+      next = beach.N,
+      disappearing = [beach];
+
+  detachBeach(beach);
+
+  var lArc = previous;
+  while (lArc.circle
+      && Math.abs(x - lArc.circle.x) < epsilon$3
+      && Math.abs(y - lArc.circle.cy) < epsilon$3) {
+    previous = lArc.P;
+    disappearing.unshift(lArc);
+    detachBeach(lArc);
+    lArc = previous;
+  }
+
+  disappearing.unshift(lArc);
+  detachCircle(lArc);
+
+  var rArc = next;
+  while (rArc.circle
+      && Math.abs(x - rArc.circle.x) < epsilon$3
+      && Math.abs(y - rArc.circle.cy) < epsilon$3) {
+    next = rArc.N;
+    disappearing.push(rArc);
+    detachBeach(rArc);
+    rArc = next;
+  }
+
+  disappearing.push(rArc);
+  detachCircle(rArc);
+
+  var nArcs = disappearing.length,
+      iArc;
+  for (iArc = 1; iArc < nArcs; ++iArc) {
+    rArc = disappearing[iArc];
+    lArc = disappearing[iArc - 1];
+    setEdgeEnd(rArc.edge, lArc.site, rArc.site, vertex);
+  }
+
+  lArc = disappearing[0];
+  rArc = disappearing[nArcs - 1];
+  rArc.edge = createEdge(lArc.site, rArc.site, null, vertex);
+
+  attachCircle(lArc);
+  attachCircle(rArc);
+}
+
+function addBeach(site) {
+  var x = site[0],
+      directrix = site[1],
+      lArc,
+      rArc,
+      dxl,
+      dxr,
+      node = beaches._;
+
+  while (node) {
+    dxl = leftBreakPoint(node, directrix) - x;
+    if (dxl > epsilon$3) node = node.L; else {
+      dxr = x - rightBreakPoint(node, directrix);
+      if (dxr > epsilon$3) {
+        if (!node.R) {
+          lArc = node;
+          break;
+        }
+        node = node.R;
+      } else {
+        if (dxl > -epsilon$3) {
+          lArc = node.P;
+          rArc = node;
+        } else if (dxr > -epsilon$3) {
+          lArc = node;
+          rArc = node.N;
+        } else {
+          lArc = rArc = node;
+        }
+        break;
+      }
+    }
+  }
+
+  createCell(site);
+  var newArc = createBeach(site);
+  beaches.insert(lArc, newArc);
+
+  if (!lArc && !rArc) return;
+
+  if (lArc === rArc) {
+    detachCircle(lArc);
+    rArc = createBeach(lArc.site);
+    beaches.insert(newArc, rArc);
+    newArc.edge = rArc.edge = createEdge(lArc.site, newArc.site);
+    attachCircle(lArc);
+    attachCircle(rArc);
+    return;
+  }
+
+  if (!rArc) { // && lArc
+    newArc.edge = createEdge(lArc.site, newArc.site);
+    return;
+  }
+
+  // else lArc !== rArc
+  detachCircle(lArc);
+  detachCircle(rArc);
+
+  var lSite = lArc.site,
+      ax = lSite[0],
+      ay = lSite[1],
+      bx = site[0] - ax,
+      by = site[1] - ay,
+      rSite = rArc.site,
+      cx = rSite[0] - ax,
+      cy = rSite[1] - ay,
+      d = 2 * (bx * cy - by * cx),
+      hb = bx * bx + by * by,
+      hc = cx * cx + cy * cy,
+      vertex = [(cy * hb - by * hc) / d + ax, (bx * hc - cx * hb) / d + ay];
+
+  setEdgeEnd(rArc.edge, lSite, rSite, vertex);
+  newArc.edge = createEdge(lSite, site, null, vertex);
+  rArc.edge = createEdge(site, rSite, null, vertex);
+  attachCircle(lArc);
+  attachCircle(rArc);
+}
+
+function leftBreakPoint(arc, directrix) {
+  var site = arc.site,
+      rfocx = site[0],
+      rfocy = site[1],
+      pby2 = rfocy - directrix;
+
+  if (!pby2) return rfocx;
+
+  var lArc = arc.P;
+  if (!lArc) return -Infinity;
+
+  site = lArc.site;
+  var lfocx = site[0],
+      lfocy = site[1],
+      plby2 = lfocy - directrix;
+
+  if (!plby2) return lfocx;
+
+  var hl = lfocx - rfocx,
+      aby2 = 1 / pby2 - 1 / plby2,
+      b = hl / plby2;
+
+  if (aby2) return (-b + Math.sqrt(b * b - 2 * aby2 * (hl * hl / (-2 * plby2) - lfocy + plby2 / 2 + rfocy - pby2 / 2))) / aby2 + rfocx;
+
+  return (rfocx + lfocx) / 2;
+}
+
+function rightBreakPoint(arc, directrix) {
+  var rArc = arc.N;
+  if (rArc) return leftBreakPoint(rArc, directrix);
+  var site = arc.site;
+  return site[1] === directrix ? site[0] : Infinity;
+}
+
+var epsilon$3 = 1e-6;
+var epsilon2$1 = 1e-12;
+var beaches;
+var cells;
+var circles;
+var edges;
+
+function triangleArea(a, b, c) {
+  return (a[0] - c[0]) * (b[1] - a[1]) - (a[0] - b[0]) * (c[1] - a[1]);
+}
+
+function lexicographic(a, b) {
+  return b[1] - a[1]
+      || b[0] - a[0];
+}
+
+function Diagram(sites, extent) {
+  var site = sites.sort(lexicographic).pop(),
+      x,
+      y,
+      circle;
+
+  edges = [];
+  cells = new Array(sites.length);
+  beaches = new RedBlackTree;
+  circles = new RedBlackTree;
+
+  while (true) {
+    circle = firstCircle;
+    if (site && (!circle || site[1] < circle.y || (site[1] === circle.y && site[0] < circle.x))) {
+      if (site[0] !== x || site[1] !== y) {
+        addBeach(site);
+        x = site[0], y = site[1];
+      }
+      site = sites.pop();
+    } else if (circle) {
+      removeBeach(circle.arc);
+    } else {
+      break;
+    }
+  }
+
+  sortCellHalfedges();
+
+  if (extent) {
+    var x0 = +extent[0][0],
+        y0 = +extent[0][1],
+        x1 = +extent[1][0],
+        y1 = +extent[1][1];
+    clipEdges(x0, y0, x1, y1);
+    clipCells(x0, y0, x1, y1);
+  }
+
+  this.edges = edges;
+  this.cells = cells;
+
+  beaches =
+  circles =
+  edges =
+  cells = null;
+}
+
+Diagram.prototype = {
+  constructor: Diagram,
+
+  polygons: function() {
+    var edges = this.edges;
+
+    return this.cells.map(function(cell) {
+      var polygon = cell.halfedges.map(function(i) { return cellHalfedgeStart(cell, edges[i]); });
+      polygon.data = cell.site.data;
+      return polygon;
+    });
+  },
+
+  triangles: function() {
+    var triangles = [],
+        edges = this.edges;
+
+    this.cells.forEach(function(cell, i) {
+      var site = cell.site,
+          halfedges = cell.halfedges,
+          j = -1,
+          m = halfedges.length,
+          s0,
+          e1 = edges[halfedges[m - 1]],
+          s1 = e1.left === site ? e1.right : e1.left;
+
+      while (++j < m) {
+        s0 = s1;
+        e1 = edges[halfedges[j]];
+        s1 = e1.left === site ? e1.right : e1.left;
+        if (s0 && s1 && i < s0.index && i < s1.index && triangleArea(site, s0, s1) < 0) {
+          triangles.push([site.data, s0.data, s1.data]);
+        }
+      }
+    });
+
+    return triangles;
+  },
+
+  links: function() {
+    return this.edges.filter(function(edge) {
+      return edge.right;
+    }).map(function(edge) {
+      return {
+        source: edge.left.data,
+        target: edge.right.data
+      };
+    });
+  },
+
+  find: function(x, y, radius) {
+    var that = this,
+        i0, i1 = that._found || 0,
+        cell = that.cells[i1] || that.cells[i1 = 0],
+        dx = x - cell.site[0],
+        dy = y - cell.site[1],
+        d2 = dx * dx + dy * dy;
+
+    do {
+      cell = that.cells[i0 = i1], i1 = null;
+      cell.halfedges.forEach(function(e) {
+        var edge = that.edges[e], v = edge.left;
+        if ((v === cell.site || !v) && !(v = edge.right)) return;
+        var vx = x - v[0],
+            vy = y - v[1],
+            v2 = vx * vx + vy * vy;
+        if (v2 < d2) d2 = v2, i1 = v.index;
+      });
+    } while (i1 !== null);
+
+    that._found = i0;
+
+    return radius == null || d2 <= radius * radius ? cell.site : null;
+  }
+};
+
+var voronoi = function() {
+  var x$$1 = x$4,
+      y$$1 = y$4,
+      extent = null;
+
+  function voronoi(data) {
+    return new Diagram(data.map(function(d, i) {
+      var s = [Math.round(x$$1(d, i, data) / epsilon$3) * epsilon$3, Math.round(y$$1(d, i, data) / epsilon$3) * epsilon$3];
+      s.index = i;
+      s.data = d;
+      return s;
+    }), extent);
+  }
+
+  voronoi.polygons = function(data) {
+    return voronoi(data).polygons();
+  };
+
+  voronoi.links = function(data) {
+    return voronoi(data).links();
+  };
+
+  voronoi.triangles = function(data) {
+    return voronoi(data).triangles();
+  };
+
+  voronoi.x = function(_) {
+    return arguments.length ? (x$$1 = typeof _ === "function" ? _ : constant$9(+_), voronoi) : x$$1;
+  };
+
+  voronoi.y = function(_) {
+    return arguments.length ? (y$$1 = typeof _ === "function" ? _ : constant$9(+_), voronoi) : y$$1;
+  };
+
+  voronoi.extent = function(_) {
+    return arguments.length ? (extent = _ == null ? null : [[+_[0][0], +_[0][1]], [+_[1][0], +_[1][1]]], voronoi) : extent && [[extent[0][0], extent[0][1]], [extent[1][0], extent[1][1]]];
+  };
+
+  voronoi.size = function(_) {
+    return arguments.length ? (extent = _ == null ? null : [[0, 0], [+_[0], +_[1]]], voronoi) : extent && [extent[1][0] - extent[0][0], extent[1][1] - extent[0][1]];
+  };
+
+  return voronoi;
+};
+
+var constant$10 = function(x) {
+  return function() {
+    return x;
+  };
+};
+
+function ZoomEvent(target, type, transform) {
+  this.target = target;
+  this.type = type;
+  this.transform = transform;
+}
+
+function Transform(k, x, y) {
+  this.k = k;
+  this.x = x;
+  this.y = y;
+}
+
+Transform.prototype = {
+  constructor: Transform,
+  scale: function(k) {
+    return k === 1 ? this : new Transform(this.k * k, this.x, this.y);
+  },
+  translate: function(x, y) {
+    return x === 0 & y === 0 ? this : new Transform(this.k, this.x + this.k * x, this.y + this.k * y);
+  },
+  apply: function(point) {
+    return [point[0] * this.k + this.x, point[1] * this.k + this.y];
+  },
+  applyX: function(x) {
+    return x * this.k + this.x;
+  },
+  applyY: function(y) {
+    return y * this.k + this.y;
+  },
+  invert: function(location) {
+    return [(location[0] - this.x) / this.k, (location[1] - this.y) / this.k];
+  },
+  invertX: function(x) {
+    return (x - this.x) / this.k;
+  },
+  invertY: function(y) {
+    return (y - this.y) / this.k;
+  },
+  rescaleX: function(x) {
+    return x.copy().domain(x.range().map(this.invertX, this).map(x.invert, x));
+  },
+  rescaleY: function(y) {
+    return y.copy().domain(y.range().map(this.invertY, this).map(y.invert, y));
+  },
+  toString: function() {
+    return "translate(" + this.x + "," + this.y + ") scale(" + this.k + ")";
+  }
+};
+
+var identity$6 = new Transform(1, 0, 0);
+
+transform.prototype = Transform.prototype;
+
+function transform(node) {
+  return node.__zoom || identity$6;
+}
+
+function nopropagation$1() {
+  exports.event.stopImmediatePropagation();
+}
+
+var noevent$1 = function() {
+  exports.event.preventDefault();
+  exports.event.stopImmediatePropagation();
+};
+
+// Ignore right-click, since that should open the context menu.
+function defaultFilter$1() {
+  return !exports.event.button;
+}
+
+function defaultExtent() {
+  var e = this, w, h;
+  if (e instanceof SVGElement) {
+    e = e.ownerSVGElement || e;
+    w = e.width.baseVal.value;
+    h = e.height.baseVal.value;
+  } else {
+    w = e.clientWidth;
+    h = e.clientHeight;
+  }
+  return [[0, 0], [w, h]];
+}
+
+function defaultTransform() {
+  return this.__zoom || identity$6;
+}
+
+var zoom = function() {
+  var filter = defaultFilter$1,
+      extent = defaultExtent,
+      k0 = 0,
+      k1 = Infinity,
+      x0 = -k1,
+      x1 = k1,
+      y0 = x0,
+      y1 = x1,
+      duration = 250,
+      gestures = [],
+      listeners = dispatch("start", "zoom", "end"),
+      touchstarting,
+      touchending,
+      touchDelay = 500,
+      wheelDelay = 150;
+
+  function zoom(selection$$1) {
+    selection$$1
+        .on("wheel.zoom", wheeled)
+        .on("mousedown.zoom", mousedowned)
+        .on("dblclick.zoom", dblclicked)
+        .on("touchstart.zoom", touchstarted)
+        .on("touchmove.zoom", touchmoved)
+        .on("touchend.zoom touchcancel.zoom", touchended)
+        .style("-webkit-tap-highlight-color", "rgba(0,0,0,0)")
+        .property("__zoom", defaultTransform);
+  }
+
+  zoom.transform = function(collection, transform) {
+    var selection$$1 = collection.selection ? collection.selection() : collection;
+    selection$$1.property("__zoom", defaultTransform);
+    if (collection !== selection$$1) {
+      schedule(collection, transform);
+    } else {
+      selection$$1.interrupt().each(function() {
+        gesture(this, arguments)
+            .start()
+            .zoom(null, typeof transform === "function" ? transform.apply(this, arguments) : transform)
+            .end();
+      });
+    }
+  };
+
+  zoom.scaleBy = function(selection$$1, k) {
+    zoom.scaleTo(selection$$1, function() {
+      var k0 = this.__zoom.k,
+          k1 = typeof k === "function" ? k.apply(this, arguments) : k;
+      return k0 * k1;
+    });
+  };
+
+  zoom.scaleTo = function(selection$$1, k) {
+    zoom.transform(selection$$1, function() {
+      var e = extent.apply(this, arguments),
+          t0 = this.__zoom,
+          p0 = centroid(e),
+          p1 = t0.invert(p0),
+          k1 = typeof k === "function" ? k.apply(this, arguments) : k;
+      return constrain(translate(scale(t0, k1), p0, p1), e);
+    });
+  };
+
+  zoom.translateBy = function(selection$$1, x, y) {
+    zoom.transform(selection$$1, function() {
+      return constrain(this.__zoom.translate(
+        typeof x === "function" ? x.apply(this, arguments) : x,
+        typeof y === "function" ? y.apply(this, arguments) : y
+      ), extent.apply(this, arguments));
+    });
+  };
+
+  function scale(transform, k) {
+    k = Math.max(k0, Math.min(k1, k));
+    return k === transform.k ? transform : new Transform(k, transform.x, transform.y);
+  }
+
+  function translate(transform, p0, p1) {
+    var x = p0[0] - p1[0] * transform.k, y = p0[1] - p1[1] * transform.k;
+    return x === transform.x && y === transform.y ? transform : new Transform(transform.k, x, y);
+  }
+
+  function constrain(transform, extent) {
+    var dx = Math.min(0, transform.invertX(extent[0][0]) - x0) || Math.max(0, transform.invertX(extent[1][0]) - x1),
+        dy = Math.min(0, transform.invertY(extent[0][1]) - y0) || Math.max(0, transform.invertY(extent[1][1]) - y1);
+    return dx || dy ? transform.translate(dx, dy) : transform;
+  }
+
+  function centroid(extent) {
+    return [(+extent[0][0] + +extent[1][0]) / 2, (+extent[0][1] + +extent[1][1]) / 2];
+  }
+
+  function schedule(transition$$1, transform, center) {
+    transition$$1
+        .on("start.zoom", function() { gesture(this, arguments).start(); })
+        .on("interrupt.zoom end.zoom", function() { gesture(this, arguments).end(); })
+        .tween("zoom", function() {
+          var that = this,
+              args = arguments,
+              g = gesture(that, args),
+              e = extent.apply(that, args),
+              p = center || centroid(e),
+              w = Math.max(e[1][0] - e[0][0], e[1][1] - e[0][1]),
+              a = that.__zoom,
+              b = typeof transform === "function" ? transform.apply(that, args) : transform,
+              i = interpolateZoom(a.invert(p).concat(w / a.k), b.invert(p).concat(w / b.k));
+          return function(t) {
+            if (t === 1) t = b; // Avoid rounding error on end.
+            else { var l = i(t), k = w / l[2]; t = new Transform(k, p[0] - l[0] * k, p[1] - l[1] * k); }
+            g.zoom(null, t);
+          };
+        });
+  }
+
+  function gesture(that, args) {
+    for (var i = 0, n = gestures.length, g; i < n; ++i) {
+      if ((g = gestures[i]).that === that) {
+        return g;
+      }
+    }
+    return new Gesture(that, args);
+  }
+
+  function Gesture(that, args) {
+    this.that = that;
+    this.args = args;
+    this.index = -1;
+    this.active = 0;
+    this.extent = extent.apply(that, args);
+  }
+
+  Gesture.prototype = {
+    start: function() {
+      if (++this.active === 1) {
+        this.index = gestures.push(this) - 1;
+        this.emit("start");
+      }
+      return this;
+    },
+    zoom: function(key, transform) {
+      if (this.mouse && key !== "mouse") this.mouse[1] = transform.invert(this.mouse[0]);
+      if (this.touch0 && key !== "touch") this.touch0[1] = transform.invert(this.touch0[0]);
+      if (this.touch1 && key !== "touch") this.touch1[1] = transform.invert(this.touch1[0]);
+      this.that.__zoom = transform;
+      this.emit("zoom");
+      return this;
+    },
+    end: function() {
+      if (--this.active === 0) {
+        gestures.splice(this.index, 1);
+        this.index = -1;
+        this.emit("end");
+      }
+      return this;
+    },
+    emit: function(type) {
+      customEvent(new ZoomEvent(zoom, type, this.that.__zoom), listeners.apply, listeners, [type, this.that, this.args]);
+    }
+  };
+
+  function wheeled() {
+    if (!filter.apply(this, arguments)) return;
+    var g = gesture(this, arguments),
+        t = this.__zoom,
+        k = Math.max(k0, Math.min(k1, t.k * Math.pow(2, -exports.event.deltaY * (exports.event.deltaMode ? 120 : 1) / 500))),
+        p = mouse(this);
+
+    // If the mouse is in the same location as before, reuse it.
+    // If there were recent wheel events, reset the wheel idle timeout.
+    if (g.wheel) {
+      if (g.mouse[0][0] !== p[0] || g.mouse[0][1] !== p[1]) {
+        g.mouse[1] = t.invert(g.mouse[0] = p);
+      }
+      clearTimeout(g.wheel);
+    }
+
+    // If this wheel event won’t trigger a transform change, ignore it.
+    else if (t.k === k) return;
+
+    // Otherwise, capture the mouse point and location at the start.
+    else {
+      g.mouse = [p, t.invert(p)];
+      interrupt(this);
+      g.start();
+    }
+
+    noevent$1();
+    g.wheel = setTimeout(wheelidled, wheelDelay);
+    g.zoom("mouse", constrain(translate(scale(t, k), g.mouse[0], g.mouse[1]), g.extent));
+
+    function wheelidled() {
+      g.wheel = null;
+      g.end();
+    }
+  }
+
+  function mousedowned() {
+    if (touchending || !filter.apply(this, arguments)) return;
+    var g = gesture(this, arguments),
+        v = select(exports.event.view).on("mousemove.zoom", mousemoved, true).on("mouseup.zoom", mouseupped, true),
+        p = mouse(this);
+
+    dragDisable(exports.event.view);
+    nopropagation$1();
+    g.mouse = [p, this.__zoom.invert(p)];
+    interrupt(this);
+    g.start();
+
+    function mousemoved() {
+      noevent$1();
+      g.moved = true;
+      g.zoom("mouse", constrain(translate(g.that.__zoom, g.mouse[0] = mouse(g.that), g.mouse[1]), g.extent));
+    }
+
+    function mouseupped() {
+      v.on("mousemove.zoom mouseup.zoom", null);
+      yesdrag(exports.event.view, g.moved);
+      noevent$1();
+      g.end();
+    }
+  }
+
+  function dblclicked() {
+    if (!filter.apply(this, arguments)) return;
+    var t0 = this.__zoom,
+        p0 = mouse(this),
+        p1 = t0.invert(p0),
+        k1 = t0.k * (exports.event.shiftKey ? 0.5 : 2),
+        t1 = constrain(translate(scale(t0, k1), p0, p1), extent.apply(this, arguments));
+
+    noevent$1();
+    if (duration > 0) select(this).transition().duration(duration).call(schedule, t1, p0);
+    else select(this).call(zoom.transform, t1);
+  }
+
+  function touchstarted() {
+    if (!filter.apply(this, arguments)) return;
+    var g = gesture(this, arguments),
+        touches$$1 = exports.event.changedTouches,
+        n = touches$$1.length, i, t, p;
+
+    nopropagation$1();
+    for (i = 0; i < n; ++i) {
+      t = touches$$1[i], p = touch(this, touches$$1, t.identifier);
+      p = [p, this.__zoom.invert(p), t.identifier];
+      if (!g.touch0) g.touch0 = p;
+      else if (!g.touch1) g.touch1 = p;
+    }
+    if (touchstarting) {
+      touchstarting = clearTimeout(touchstarting);
+      if (!g.touch1) return g.end(), dblclicked.apply(this, arguments);
+    }
+    if (exports.event.touches.length === n) {
+      touchstarting = setTimeout(function() { touchstarting = null; }, touchDelay);
+      interrupt(this);
+      g.start();
+    }
+  }
+
+  function touchmoved() {
+    var g = gesture(this, arguments),
+        touches$$1 = exports.event.changedTouches,
+        n = touches$$1.length, i, t, p, l;
+
+    noevent$1();
+    if (touchstarting) touchstarting = clearTimeout(touchstarting);
+    for (i = 0; i < n; ++i) {
+      t = touches$$1[i], p = touch(this, touches$$1, t.identifier);
+      if (g.touch0 && g.touch0[2] === t.identifier) g.touch0[0] = p;
+      else if (g.touch1 && g.touch1[2] === t.identifier) g.touch1[0] = p;
+    }
+    t = g.that.__zoom;
+    if (g.touch1) {
+      var p0 = g.touch0[0], l0 = g.touch0[1],
+          p1 = g.touch1[0], l1 = g.touch1[1],
+          dp = (dp = p1[0] - p0[0]) * dp + (dp = p1[1] - p0[1]) * dp,
+          dl = (dl = l1[0] - l0[0]) * dl + (dl = l1[1] - l0[1]) * dl;
+      t = scale(t, Math.sqrt(dp / dl));
+      p = [(p0[0] + p1[0]) / 2, (p0[1] + p1[1]) / 2];
+      l = [(l0[0] + l1[0]) / 2, (l0[1] + l1[1]) / 2];
+    }
+    else if (g.touch0) p = g.touch0[0], l = g.touch0[1];
+    else return;
+    g.zoom("touch", constrain(translate(t, p, l), g.extent));
+  }
+
+  function touchended() {
+    var g = gesture(this, arguments),
+        touches$$1 = exports.event.changedTouches,
+        n = touches$$1.length, i, t;
+
+    nopropagation$1();
+    if (touchending) clearTimeout(touchending);
+    touchending = setTimeout(function() { touchending = null; }, touchDelay);
+    for (i = 0; i < n; ++i) {
+      t = touches$$1[i];
+      if (g.touch0 && g.touch0[2] === t.identifier) delete g.touch0;
+      else if (g.touch1 && g.touch1[2] === t.identifier) delete g.touch1;
+    }
+    if (g.touch1 && !g.touch0) g.touch0 = g.touch1, delete g.touch1;
+    if (!g.touch0) g.end();
+  }
+
+  zoom.filter = function(_) {
+    return arguments.length ? (filter = typeof _ === "function" ? _ : constant$10(!!_), zoom) : filter;
+  };
+
+  zoom.extent = function(_) {
+    return arguments.length ? (extent = typeof _ === "function" ? _ : constant$10([[+_[0][0], +_[0][1]], [+_[1][0], +_[1][1]]]), zoom) : extent;
+  };
+
+  zoom.scaleExtent = function(_) {
+    return arguments.length ? (k0 = +_[0], k1 = +_[1], zoom) : [k0, k1];
+  };
+
+  zoom.translateExtent = function(_) {
+    return arguments.length ? (x0 = +_[0][0], x1 = +_[1][0], y0 = +_[0][1], y1 = +_[1][1], zoom) : [[x0, y0], [x1, y1]];
+  };
+
+  zoom.duration = function(_) {
+    return arguments.length ? (duration = +_, zoom) : duration;
+  };
+
+  zoom.on = function() {
+    var value = listeners.on.apply(listeners, arguments);
+    return value === listeners ? zoom : value;
+  };
+
+  return zoom;
+};
+
+var constant$11 = function(x) {
+  return function() {
+    return x;
+  };
+};
+
+var BrushEvent = function(target, type, selection) {
+  this.target = target;
+  this.type = type;
+  this.selection = selection;
+};
+
+function nopropagation$2() {
+  exports.event.stopImmediatePropagation();
+}
+
+var noevent$2 = function() {
+  exports.event.preventDefault();
+  exports.event.stopImmediatePropagation();
+};
+
+var MODE_DRAG = {name: "drag"};
+var MODE_SPACE = {name: "space"};
+var MODE_HANDLE = {name: "handle"};
+var MODE_CENTER = {name: "center"};
+
+var X = {
+  name: "x",
+  handles: ["e", "w"].map(type$1),
+  input: function(x, e) { return x && [[x[0], e[0][1]], [x[1], e[1][1]]]; },
+  output: function(xy) { return xy && [xy[0][0], xy[1][0]]; }
+};
+
+var Y = {
+  name: "y",
+  handles: ["n", "s"].map(type$1),
+  input: function(y, e) { return y && [[e[0][0], y[0]], [e[1][0], y[1]]]; },
+  output: function(xy) { return xy && [xy[0][1], xy[1][1]]; }
+};
+
+var XY = {
+  name: "xy",
+  handles: ["n", "e", "s", "w", "nw", "ne", "se", "sw"].map(type$1),
+  input: function(xy) { return xy; },
+  output: function(xy) { return xy; }
+};
+
+var cursors = {
+  overlay: "crosshair",
+  selection: "move",
+  n: "ns-resize",
+  e: "ew-resize",
+  s: "ns-resize",
+  w: "ew-resize",
+  nw: "nwse-resize",
+  ne: "nesw-resize",
+  se: "nwse-resize",
+  sw: "nesw-resize"
+};
+
+var flipX = {
+  e: "w",
+  w: "e",
+  nw: "ne",
+  ne: "nw",
+  se: "sw",
+  sw: "se"
+};
+
+var flipY = {
+  n: "s",
+  s: "n",
+  nw: "sw",
+  ne: "se",
+  se: "ne",
+  sw: "nw"
+};
+
+var signsX = {
+  overlay: +1,
+  selection: +1,
+  n: null,
+  e: +1,
+  s: null,
+  w: -1,
+  nw: -1,
+  ne: +1,
+  se: +1,
+  sw: -1
+};
+
+var signsY = {
+  overlay: +1,
+  selection: +1,
+  n: -1,
+  e: null,
+  s: +1,
+  w: null,
+  nw: -1,
+  ne: -1,
+  se: +1,
+  sw: +1
+};
+
+function type$1(t) {
+  return {type: t};
+}
+
+// Ignore right-click, since that should open the context menu.
+function defaultFilter$2() {
+  return !exports.event.button;
+}
+
+function defaultExtent$1() {
+  var svg = this.ownerSVGElement || this;
+  return [[0, 0], [svg.width.baseVal.value, svg.height.baseVal.value]];
+}
+
+// Like d3.local, but with the name “__brush” rather than auto-generated.
+function local$1(node) {
+  while (!node.__brush) if (!(node = node.parentNode)) return;
+  return node.__brush;
+}
+
+function empty$1(extent) {
+  return extent[0][0] === extent[1][0]
+      || extent[0][1] === extent[1][1];
+}
+
+function brushSelection(node) {
+  var state = node.__brush;
+  return state ? state.dim.output(state.selection) : null;
+}
+
+function brushX() {
+  return brush$1(X);
+}
+
+function brushY() {
+  return brush$1(Y);
+}
+
+var brush = function() {
+  return brush$1(XY);
+};
+
+function brush$1(dim) {
+  var extent = defaultExtent$1,
+      filter = defaultFilter$2,
+      listeners = dispatch(brush, "start", "brush", "end"),
+      handleSize = 6,
+      touchending;
+
+  function brush(group) {
+    var overlay = group
+        .property("__brush", initialize)
+      .selectAll(".overlay")
+      .data([type$1("overlay")]);
+
+    overlay.enter().append("rect")
+        .attr("class", "overlay")
+        .attr("pointer-events", "all")
+        .attr("cursor", cursors.overlay)
+      .merge(overlay)
+        .each(function() {
+          var extent = local$1(this).extent;
+          select(this)
+              .attr("x", extent[0][0])
+              .attr("y", extent[0][1])
+              .attr("width", extent[1][0] - extent[0][0])
+              .attr("height", extent[1][1] - extent[0][1]);
+        });
+
+    group.selectAll(".selection")
+      .data([type$1("selection")])
+      .enter().append("rect")
+        .attr("class", "selection")
+        .attr("cursor", cursors.selection)
+        .attr("fill", "#777")
+        .attr("fill-opacity", 0.3)
+        .attr("stroke", "#fff")
+        .attr("shape-rendering", "crispEdges");
+
+    var handle = group.selectAll(".handle")
+      .data(dim.handles, function(d) { return d.type; });
+
+    handle.exit().remove();
+
+    handle.enter().append("rect")
+        .attr("class", function(d) { return "handle handle--" + d.type; })
+        .attr("cursor", function(d) { return cursors[d.type]; });
+
+    group
+        .each(redraw)
+        .attr("fill", "none")
+        .attr("pointer-events", "all")
+        .style("-webkit-tap-highlight-color", "rgba(0,0,0,0)")
+        .on("mousedown.brush touchstart.brush", started);
+  }
+
+  brush.move = function(group, selection$$1) {
+    if (group.selection) {
+      group
+          .on("start.brush", function() { emitter(this, arguments).beforestart().start(); })
+          .on("interrupt.brush end.brush", function() { emitter(this, arguments).end(); })
+          .tween("brush", function() {
+            var that = this,
+                state = that.__brush,
+                emit = emitter(that, arguments),
+                selection0 = state.selection,
+                selection1 = dim.input(typeof selection$$1 === "function" ? selection$$1.apply(this, arguments) : selection$$1, state.extent),
+                i = interpolate(selection0, selection1);
+
+            function tween(t) {
+              state.selection = t === 1 && empty$1(selection1) ? null : i(t);
+              redraw.call(that);
+              emit.brush();
+            }
+
+            return selection0 && selection1 ? tween : tween(1);
+          });
+    } else {
+      group
+          .each(function() {
+            var that = this,
+                args = arguments,
+                state = that.__brush,
+                selection1 = dim.input(typeof selection$$1 === "function" ? selection$$1.apply(that, args) : selection$$1, state.extent),
+                emit = emitter(that, args).beforestart();
+
+            interrupt(that);
+            state.selection = selection1 == null || empty$1(selection1) ? null : selection1;
+            redraw.call(that);
+            emit.start().brush().end();
+          });
+    }
+  };
+
+  function redraw() {
+    var group = select(this),
+        selection$$1 = local$1(this).selection;
+
+    if (selection$$1) {
+      group.selectAll(".selection")
+          .style("display", null)
+          .attr("x", selection$$1[0][0])
+          .attr("y", selection$$1[0][1])
+          .attr("width", selection$$1[1][0] - selection$$1[0][0])
+          .attr("height", selection$$1[1][1] - selection$$1[0][1]);
+
+      group.selectAll(".handle")
+          .style("display", null)
+          .attr("x", function(d) { return d.type[d.type.length - 1] === "e" ? selection$$1[1][0] - handleSize / 2 : selection$$1[0][0] - handleSize / 2; })
+          .attr("y", function(d) { return d.type[0] === "s" ? selection$$1[1][1] - handleSize / 2 : selection$$1[0][1] - handleSize / 2; })
+          .attr("width", function(d) { return d.type === "n" || d.type === "s" ? selection$$1[1][0] - selection$$1[0][0] + handleSize : handleSize; })
+          .attr("height", function(d) { return d.type === "e" || d.type === "w" ? selection$$1[1][1] - selection$$1[0][1] + handleSize : handleSize; });
+    }
+
+    else {
+      group.selectAll(".selection,.handle")
+          .style("display", "none")
+          .attr("x", null)
+          .attr("y", null)
+          .attr("width", null)
+          .attr("height", null);
+    }
+  }
+
+  function emitter(that, args) {
+    return that.__brush.emitter || new Emitter(that, args);
+  }
+
+  function Emitter(that, args) {
+    this.that = that;
+    this.args = args;
+    this.state = that.__brush;
+    this.active = 0;
+  }
+
+  Emitter.prototype = {
+    beforestart: function() {
+      if (++this.active === 1) this.state.emitter = this, this.starting = true;
+      return this;
+    },
+    start: function() {
+      if (this.starting) this.starting = false, this.emit("start");
+      return this;
+    },
+    brush: function() {
+      this.emit("brush");
+      return this;
+    },
+    end: function() {
+      if (--this.active === 0) delete this.state.emitter, this.emit("end");
+      return this;
+    },
+    emit: function(type) {
+      customEvent(new BrushEvent(brush, type, dim.output(this.state.selection)), listeners.apply, listeners, [type, this.that, this.args]);
+    }
+  };
+
+  function started() {
+    if (exports.event.touches) { if (exports.event.changedTouches.length < exports.event.touches.length) return noevent$2(); }
+    else if (touchending) return;
+    if (!filter.apply(this, arguments)) return;
+
+    var that = this,
+        type = exports.event.target.__data__.type,
+        mode = (exports.event.metaKey ? type = "overlay" : type) === "selection" ? MODE_DRAG : (exports.event.altKey ? MODE_CENTER : MODE_HANDLE),
+        signX = dim === Y ? null : signsX[type],
+        signY = dim === X ? null : signsY[type],
+        state = local$1(that),
+        extent = state.extent,
+        selection$$1 = state.selection,
+        W = extent[0][0], w0, w1,
+        N = extent[0][1], n0, n1,
+        E = extent[1][0], e0, e1,
+        S = extent[1][1], s0, s1,
+        dx,
+        dy,
+        moving,
+        shifting = signX && signY && exports.event.shiftKey,
+        lockX,
+        lockY,
+        point0 = mouse(that),
+        point = point0,
+        emit = emitter(that, arguments).beforestart();
+
+    if (type === "overlay") {
+      state.selection = selection$$1 = [
+        [w0 = dim === Y ? W : point0[0], n0 = dim === X ? N : point0[1]],
+        [e0 = dim === Y ? E : w0, s0 = dim === X ? S : n0]
+      ];
+    } else {
+      w0 = selection$$1[0][0];
+      n0 = selection$$1[0][1];
+      e0 = selection$$1[1][0];
+      s0 = selection$$1[1][1];
+    }
+
+    w1 = w0;
+    n1 = n0;
+    e1 = e0;
+    s1 = s0;
+
+    var group = select(that)
+        .attr("pointer-events", "none");
+
+    var overlay = group.selectAll(".overlay")
+        .attr("cursor", cursors[type]);
+
+    if (exports.event.touches) {
+      group
+          .on("touchmove.brush", moved, true)
+          .on("touchend.brush touchcancel.brush", ended, true);
+    } else {
+      var view = select(exports.event.view)
+          .on("keydown.brush", keydowned, true)
+          .on("keyup.brush", keyupped, true)
+          .on("mousemove.brush", moved, true)
+          .on("mouseup.brush", ended, true);
+
+      dragDisable(exports.event.view);
+    }
+
+    nopropagation$2();
+    interrupt(that);
+    redraw.call(that);
+    emit.start();
+
+    function moved() {
+      var point1 = mouse(that);
+      if (shifting && !lockX && !lockY) {
+        if (Math.abs(point1[0] - point[0]) > Math.abs(point1[1] - point[1])) lockY = true;
+        else lockX = true;
+      }
+      point = point1;
+      moving = true;
+      noevent$2();
+      move();
+    }
+
+    function move() {
+      var t;
+
+      dx = point[0] - point0[0];
+      dy = point[1] - point0[1];
+
+      switch (mode) {
+        case MODE_SPACE:
+        case MODE_DRAG: {
+          if (signX) dx = Math.max(W - w0, Math.min(E - e0, dx)), w1 = w0 + dx, e1 = e0 + dx;
+          if (signY) dy = Math.max(N - n0, Math.min(S - s0, dy)), n1 = n0 + dy, s1 = s0 + dy;
+          break;
+        }
+        case MODE_HANDLE: {
+          if (signX < 0) dx = Math.max(W - w0, Math.min(E - w0, dx)), w1 = w0 + dx, e1 = e0;
+          else if (signX > 0) dx = Math.max(W - e0, Math.min(E - e0, dx)), w1 = w0, e1 = e0 + dx;
+          if (signY < 0) dy = Math.max(N - n0, Math.min(S - n0, dy)), n1 = n0 + dy, s1 = s0;
+          else if (signY > 0) dy = Math.max(N - s0, Math.min(S - s0, dy)), n1 = n0, s1 = s0 + dy;
+          break;
+        }
+        case MODE_CENTER: {
+          if (signX) w1 = Math.max(W, Math.min(E, w0 - dx * signX)), e1 = Math.max(W, Math.min(E, e0 + dx * signX));
+          if (signY) n1 = Math.max(N, Math.min(S, n0 - dy * signY)), s1 = Math.max(N, Math.min(S, s0 + dy * signY));
+          break;
+        }
+      }
+
+      if (e1 < w1) {
+        signX *= -1;
+        t = w0, w0 = e0, e0 = t;
+        t = w1, w1 = e1, e1 = t;
+        if (type in flipX) overlay.attr("cursor", cursors[type = flipX[type]]);
+      }
+
+      if (s1 < n1) {
+        signY *= -1;
+        t = n0, n0 = s0, s0 = t;
+        t = n1, n1 = s1, s1 = t;
+        if (type in flipY) overlay.attr("cursor", cursors[type = flipY[type]]);
+      }
+
+      if (state.selection) selection$$1 = state.selection; // May be set by brush.move!
+      if (lockX) w1 = selection$$1[0][0], e1 = selection$$1[1][0];
+      if (lockY) n1 = selection$$1[0][1], s1 = selection$$1[1][1];
+
+      if (selection$$1[0][0] !== w1
+          || selection$$1[0][1] !== n1
+          || selection$$1[1][0] !== e1
+          || selection$$1[1][1] !== s1) {
+        state.selection = [[w1, n1], [e1, s1]];
+        redraw.call(that);
+        emit.brush();
+      }
+    }
+
+    function ended() {
+      nopropagation$2();
+      if (exports.event.touches) {
+        if (exports.event.touches.length) return;
+        if (touchending) clearTimeout(touchending);
+        touchending = setTimeout(function() { touchending = null; }, 500); // Ghost clicks are delayed!
+        group.on("touchmove.brush touchend.brush touchcancel.brush", null);
+      } else {
+        yesdrag(exports.event.view, moving);
+        view.on("keydown.brush keyup.brush mousemove.brush mouseup.brush", null);
+      }
+      group.attr("pointer-events", "all");
+      overlay.attr("cursor", cursors.overlay);
+      if (state.selection) selection$$1 = state.selection; // May be set by brush.move (on start)!
+      if (empty$1(selection$$1)) state.selection = null, redraw.call(that);
+      emit.end();
+    }
+
+    function keydowned() {
+      switch (exports.event.keyCode) {
+        case 16: { // SHIFT
+          shifting = signX && signY;
+          break;
+        }
+        case 18: { // ALT
+          if (mode === MODE_HANDLE) {
+            if (signX) e0 = e1 - dx * signX, w0 = w1 + dx * signX;
+            if (signY) s0 = s1 - dy * signY, n0 = n1 + dy * signY;
+            mode = MODE_CENTER;
+            move();
+          }
+          break;
+        }
+        case 32: { // SPACE; takes priority over ALT
+          if (mode === MODE_HANDLE || mode === MODE_CENTER) {
+            if (signX < 0) e0 = e1 - dx; else if (signX > 0) w0 = w1 - dx;
+            if (signY < 0) s0 = s1 - dy; else if (signY > 0) n0 = n1 - dy;
+            mode = MODE_SPACE;
+            overlay.attr("cursor", cursors.selection);
+            move();
+          }
+          break;
+        }
+        default: return;
+      }
+      noevent$2();
+    }
+
+    function keyupped() {
+      switch (exports.event.keyCode) {
+        case 16: { // SHIFT
+          if (shifting) {
+            lockX = lockY = shifting = false;
+            move();
+          }
+          break;
+        }
+        case 18: { // ALT
+          if (mode === MODE_CENTER) {
+            if (signX < 0) e0 = e1; else if (signX > 0) w0 = w1;
+            if (signY < 0) s0 = s1; else if (signY > 0) n0 = n1;
+            mode = MODE_HANDLE;
+            move();
+          }
+          break;
+        }
+        case 32: { // SPACE
+          if (mode === MODE_SPACE) {
+            if (exports.event.altKey) {
+              if (signX) e0 = e1 - dx * signX, w0 = w1 + dx * signX;
+              if (signY) s0 = s1 - dy * signY, n0 = n1 + dy * signY;
+              mode = MODE_CENTER;
+            } else {
+              if (signX < 0) e0 = e1; else if (signX > 0) w0 = w1;
+              if (signY < 0) s0 = s1; else if (signY > 0) n0 = n1;
+              mode = MODE_HANDLE;
+            }
+            overlay.attr("cursor", cursors[type]);
+            move();
+          }
+          break;
+        }
+        default: return;
+      }
+      noevent$2();
+    }
+  }
+
+  function initialize() {
+    var state = this.__brush || {selection: null};
+    state.extent = extent.apply(this, arguments);
+    state.dim = dim;
+    return state;
+  }
+
+  brush.extent = function(_) {
+    return arguments.length ? (extent = typeof _ === "function" ? _ : constant$11([[+_[0][0], +_[0][1]], [+_[1][0], +_[1][1]]]), brush) : extent;
+  };
+
+  brush.filter = function(_) {
+    return arguments.length ? (filter = typeof _ === "function" ? _ : constant$11(!!_), brush) : filter;
+  };
+
+  brush.handleSize = function(_) {
+    return arguments.length ? (handleSize = +_, brush) : handleSize;
+  };
+
+  brush.on = function() {
+    var value = listeners.on.apply(listeners, arguments);
+    return value === listeners ? brush : value;
+  };
+
+  return brush;
+}
+
+var cos = Math.cos;
+var sin = Math.sin;
+var pi$3 = Math.PI;
+var halfPi$2 = pi$3 / 2;
+var tau$3 = pi$3 * 2;
+var max$1 = Math.max;
+
+function compareValue(compare) {
+  return function(a, b) {
+    return compare(
+      a.source.value + a.target.value,
+      b.source.value + b.target.value
+    );
+  };
+}
+
+var chord = function() {
+  var padAngle = 0,
+      sortGroups = null,
+      sortSubgroups = null,
+      sortChords = null;
+
+  function chord(matrix) {
+    var n = matrix.length,
+        groupSums = [],
+        groupIndex = range(n),
+        subgroupIndex = [],
+        chords = [],
+        groups = chords.groups = new Array(n),
+        subgroups = new Array(n * n),
+        k,
+        x,
+        x0,
+        dx,
+        i,
+        j;
+
+    // Compute the sum.
+    k = 0, i = -1; while (++i < n) {
+      x = 0, j = -1; while (++j < n) {
+        x += matrix[i][j];
+      }
+      groupSums.push(x);
+      subgroupIndex.push(range(n));
+      k += x;
+    }
+
+    // Sort groups…
+    if (sortGroups) groupIndex.sort(function(a, b) {
+      return sortGroups(groupSums[a], groupSums[b]);
+    });
+
+    // Sort subgroups…
+    if (sortSubgroups) subgroupIndex.forEach(function(d, i) {
+      d.sort(function(a, b) {
+        return sortSubgroups(matrix[i][a], matrix[i][b]);
+      });
+    });
+
+    // Convert the sum to scaling factor for [0, 2pi].
+    // TODO Allow start and end angle to be specified?
+    // TODO Allow padding to be specified as percentage?
+    k = max$1(0, tau$3 - padAngle * n) / k;
+    dx = k ? padAngle : tau$3 / n;
+
+    // Compute the start and end angle for each group and subgroup.
+    // Note: Opera has a bug reordering object literal properties!
+    x = 0, i = -1; while (++i < n) {
+      x0 = x, j = -1; while (++j < n) {
+        var di = groupIndex[i],
+            dj = subgroupIndex[di][j],
+            v = matrix[di][dj],
+            a0 = x,
+            a1 = x += v * k;
+        subgroups[dj * n + di] = {
+          index: di,
+          subindex: dj,
+          startAngle: a0,
+          endAngle: a1,
+          value: v
+        };
+      }
+      groups[di] = {
+        index: di,
+        startAngle: x0,
+        endAngle: x,
+        value: groupSums[di]
+      };
+      x += dx;
+    }
+
+    // Generate chords for each (non-empty) subgroup-subgroup link.
+    i = -1; while (++i < n) {
+      j = i - 1; while (++j < n) {
+        var source = subgroups[j * n + i],
+            target = subgroups[i * n + j];
+        if (source.value || target.value) {
+          chords.push(source.value < target.value
+              ? {source: target, target: source}
+              : {source: source, target: target});
+        }
+      }
+    }
+
+    return sortChords ? chords.sort(sortChords) : chords;
+  }
+
+  chord.padAngle = function(_) {
+    return arguments.length ? (padAngle = max$1(0, _), chord) : padAngle;
+  };
+
+  chord.sortGroups = function(_) {
+    return arguments.length ? (sortGroups = _, chord) : sortGroups;
+  };
+
+  chord.sortSubgroups = function(_) {
+    return arguments.length ? (sortSubgroups = _, chord) : sortSubgroups;
+  };
+
+  chord.sortChords = function(_) {
+    return arguments.length ? (_ == null ? sortChords = null : (sortChords = compareValue(_))._ = _, chord) : sortChords && sortChords._;
+  };
+
+  return chord;
+};
+
+var slice$5 = Array.prototype.slice;
+
+var constant$12 = function(x) {
+  return function() {
+    return x;
+  };
+};
+
+function defaultSource(d) {
+  return d.source;
+}
+
+function defaultTarget(d) {
+  return d.target;
+}
+
+function defaultRadius$1(d) {
+  return d.radius;
+}
+
+function defaultStartAngle(d) {
+  return d.startAngle;
+}
+
+function defaultEndAngle(d) {
+  return d.endAngle;
+}
+
+var ribbon = function() {
+  var source = defaultSource,
+      target = defaultTarget,
+      radius = defaultRadius$1,
+      startAngle = defaultStartAngle,
+      endAngle = defaultEndAngle,
+      context = null;
+
+  function ribbon() {
+    var buffer,
+        argv = slice$5.call(arguments),
+        s = source.apply(this, argv),
+        t = target.apply(this, argv),
+        sr = +radius.apply(this, (argv[0] = s, argv)),
+        sa0 = startAngle.apply(this, argv) - halfPi$2,
+        sa1 = endAngle.apply(this, argv) - halfPi$2,
+        sx0 = sr * cos(sa0),
+        sy0 = sr * sin(sa0),
+        tr = +radius.apply(this, (argv[0] = t, argv)),
+        ta0 = startAngle.apply(this, argv) - halfPi$2,
+        ta1 = endAngle.apply(this, argv) - halfPi$2;
+
+    if (!context) context = buffer = path();
+
+    context.moveTo(sx0, sy0);
+    context.arc(0, 0, sr, sa0, sa1);
+    if (sa0 !== ta0 || sa1 !== ta1) { // TODO sr !== tr?
+      context.quadraticCurveTo(0, 0, tr * cos(ta0), tr * sin(ta0));
+      context.arc(0, 0, tr, ta0, ta1);
+    }
+    context.quadraticCurveTo(0, 0, sx0, sy0);
+    context.closePath();
+
+    if (buffer) return context = null, buffer + "" || null;
+  }
+
+  ribbon.radius = function(_) {
+    return arguments.length ? (radius = typeof _ === "function" ? _ : constant$12(+_), ribbon) : radius;
+  };
+
+  ribbon.startAngle = function(_) {
+    return arguments.length ? (startAngle = typeof _ === "function" ? _ : constant$12(+_), ribbon) : startAngle;
+  };
+
+  ribbon.endAngle = function(_) {
+    return arguments.length ? (endAngle = typeof _ === "function" ? _ : constant$12(+_), ribbon) : endAngle;
+  };
+
+  ribbon.source = function(_) {
+    return arguments.length ? (source = _, ribbon) : source;
+  };
+
+  ribbon.target = function(_) {
+    return arguments.length ? (target = _, ribbon) : target;
+  };
+
+  ribbon.context = function(_) {
+    return arguments.length ? ((context = _ == null ? null : _), ribbon) : context;
+  };
+
+  return ribbon;
+};
+
+// Adds floating point numbers with twice the normal precision.
+// Reference: J. R. Shewchuk, Adaptive Precision Floating-Point Arithmetic and
+// Fast Robust Geometric Predicates, Discrete & Computational Geometry 18(3)
+// 305–363 (1997).
+// Code adapted from GeographicLib by Charles F. F. Karney,
+// http://geographiclib.sourceforge.net/
+
+var adder = function() {
+  return new Adder;
+};
+
+function Adder() {
+  this.reset();
+}
+
+Adder.prototype = {
+  constructor: Adder,
+  reset: function() {
+    this.s = // rounded value
+    this.t = 0; // exact error
+  },
+  add: function(y) {
+    add$1(temp, y, this.t);
+    add$1(this, temp.s, this.s);
+    if (this.s) this.t += temp.t;
+    else this.s = temp.t;
+  },
+  valueOf: function() {
+    return this.s;
+  }
+};
+
+var temp = new Adder;
+
+function add$1(adder, a, b) {
+  var x = adder.s = a + b,
+      bv = x - a,
+      av = x - bv;
+  adder.t = (a - av) + (b - bv);
+}
+
+var epsilon$4 = 1e-6;
+var epsilon2$2 = 1e-12;
+var pi$4 = Math.PI;
+var halfPi$3 = pi$4 / 2;
+var quarterPi = pi$4 / 4;
+var tau$4 = pi$4 * 2;
+
+var degrees$1 = 180 / pi$4;
+var radians = pi$4 / 180;
+
+var abs = Math.abs;
+var atan = Math.atan;
+var atan2 = Math.atan2;
+var cos$1 = Math.cos;
+var ceil = Math.ceil;
+var exp = Math.exp;
+
+var log$1 = Math.log;
+var pow$1 = Math.pow;
+var sin$1 = Math.sin;
+var sign$1 = Math.sign || function(x) { return x > 0 ? 1 : x < 0 ? -1 : 0; };
+var sqrt$1 = Math.sqrt;
+var tan = Math.tan;
+
+function acos(x) {
+  return x > 1 ? 0 : x < -1 ? pi$4 : Math.acos(x);
+}
+
+function asin$1(x) {
+  return x > 1 ? halfPi$3 : x < -1 ? -halfPi$3 : Math.asin(x);
+}
+
+function haversin(x) {
+  return (x = sin$1(x / 2)) * x;
+}
+
+function noop$2() {}
+
+function streamGeometry(geometry, stream) {
+  if (geometry && streamGeometryType.hasOwnProperty(geometry.type)) {
+    streamGeometryType[geometry.type](geometry, stream);
+  }
+}
+
+var streamObjectType = {
+  Feature: function(feature, stream) {
+    streamGeometry(feature.geometry, stream);
+  },
+  FeatureCollection: function(object, stream) {
+    var features = object.features, i = -1, n = features.length;
+    while (++i < n) streamGeometry(features[i].geometry, stream);
+  }
+};
+
+var streamGeometryType = {
+  Sphere: function(object, stream) {
+    stream.sphere();
+  },
+  Point: function(object, stream) {
+    object = object.coordinates;
+    stream.point(object[0], object[1], object[2]);
+  },
+  MultiPoint: function(object, stream) {
+    var coordinates = object.coordinates, i = -1, n = coordinates.length;
+    while (++i < n) object = coordinates[i], stream.point(object[0], object[1], object[2]);
+  },
+  LineString: function(object, stream) {
+    streamLine(object.coordinates, stream, 0);
+  },
+  MultiLineString: function(object, stream) {
+    var coordinates = object.coordinates, i = -1, n = coordinates.length;
+    while (++i < n) streamLine(coordinates[i], stream, 0);
+  },
+  Polygon: function(object, stream) {
+    streamPolygon(object.coordinates, stream);
+  },
+  MultiPolygon: function(object, stream) {
+    var coordinates = object.coordinates, i = -1, n = coordinates.length;
+    while (++i < n) streamPolygon(coordinates[i], stream);
+  },
+  GeometryCollection: function(object, stream) {
+    var geometries = object.geometries, i = -1, n = geometries.length;
+    while (++i < n) streamGeometry(geometries[i], stream);
+  }
+};
+
+function streamLine(coordinates, stream, closed) {
+  var i = -1, n = coordinates.length - closed, coordinate;
+  stream.lineStart();
+  while (++i < n) coordinate = coordinates[i], stream.point(coordinate[0], coordinate[1], coordinate[2]);
+  stream.lineEnd();
+}
+
+function streamPolygon(coordinates, stream) {
+  var i = -1, n = coordinates.length;
+  stream.polygonStart();
+  while (++i < n) streamLine(coordinates[i], stream, 1);
+  stream.polygonEnd();
+}
+
+var geoStream = function(object, stream) {
+  if (object && streamObjectType.hasOwnProperty(object.type)) {
+    streamObjectType[object.type](object, stream);
+  } else {
+    streamGeometry(object, stream);
+  }
+};
+
+var areaRingSum = adder();
+
+var areaSum = adder();
+var lambda00;
+var phi00;
+var lambda0;
+var cosPhi0;
+var sinPhi0;
+
+var areaStream = {
+  point: noop$2,
+  lineStart: noop$2,
+  lineEnd: noop$2,
+  polygonStart: function() {
+    areaRingSum.reset();
+    areaStream.lineStart = areaRingStart;
+    areaStream.lineEnd = areaRingEnd;
+  },
+  polygonEnd: function() {
+    var areaRing = +areaRingSum;
+    areaSum.add(areaRing < 0 ? tau$4 + areaRing : areaRing);
+    this.lineStart = this.lineEnd = this.point = noop$2;
+  },
+  sphere: function() {
+    areaSum.add(tau$4);
+  }
+};
+
+function areaRingStart() {
+  areaStream.point = areaPointFirst;
+}
+
+function areaRingEnd() {
+  areaPoint(lambda00, phi00);
+}
+
+function areaPointFirst(lambda, phi) {
+  areaStream.point = areaPoint;
+  lambda00 = lambda, phi00 = phi;
+  lambda *= radians, phi *= radians;
+  lambda0 = lambda, cosPhi0 = cos$1(phi = phi / 2 + quarterPi), sinPhi0 = sin$1(phi);
+}
+
+function areaPoint(lambda, phi) {
+  lambda *= radians, phi *= radians;
+  phi = phi / 2 + quarterPi; // half the angular distance from south pole
+
+  // Spherical excess E for a spherical triangle with vertices: south pole,
+  // previous point, current point.  Uses a formula derived from Cagnoli’s
+  // theorem.  See Todhunter, Spherical Trig. (1871), Sec. 103, Eq. (2).
+  var dLambda = lambda - lambda0,
+      sdLambda = dLambda >= 0 ? 1 : -1,
+      adLambda = sdLambda * dLambda,
+      cosPhi = cos$1(phi),
+      sinPhi = sin$1(phi),
+      k = sinPhi0 * sinPhi,
+      u = cosPhi0 * cosPhi + k * cos$1(adLambda),
+      v = k * sdLambda * sin$1(adLambda);
+  areaRingSum.add(atan2(v, u));
+
+  // Advance the previous points.
+  lambda0 = lambda, cosPhi0 = cosPhi, sinPhi0 = sinPhi;
+}
+
+var area$2 = function(object) {
+  areaSum.reset();
+  geoStream(object, areaStream);
+  return areaSum * 2;
+};
+
+function spherical(cartesian) {
+  return [atan2(cartesian[1], cartesian[0]), asin$1(cartesian[2])];
+}
+
+function cartesian(spherical) {
+  var lambda = spherical[0], phi = spherical[1], cosPhi = cos$1(phi);
+  return [cosPhi * cos$1(lambda), cosPhi * sin$1(lambda), sin$1(phi)];
+}
+
+function cartesianDot(a, b) {
+  return a[0] * b[0] + a[1] * b[1] + a[2] * b[2];
+}
+
+function cartesianCross(a, b) {
+  return [a[1] * b[2] - a[2] * b[1], a[2] * b[0] - a[0] * b[2], a[0] * b[1] - a[1] * b[0]];
+}
+
+// TODO return a
+function cartesianAddInPlace(a, b) {
+  a[0] += b[0], a[1] += b[1], a[2] += b[2];
+}
+
+function cartesianScale(vector, k) {
+  return [vector[0] * k, vector[1] * k, vector[2] * k];
+}
+
+// TODO return d
+function cartesianNormalizeInPlace(d) {
+  var l = sqrt$1(d[0] * d[0] + d[1] * d[1] + d[2] * d[2]);
+  d[0] /= l, d[1] /= l, d[2] /= l;
+}
+
+var lambda0$1;
+var phi0;
+var lambda1;
+var phi1;
+var lambda2;
+var lambda00$1;
+var phi00$1;
+var p0;
+var deltaSum = adder();
+var ranges;
+var range$1;
+
+var boundsStream = {
+  point: boundsPoint,
+  lineStart: boundsLineStart,
+  lineEnd: boundsLineEnd,
+  polygonStart: function() {
+    boundsStream.point = boundsRingPoint;
+    boundsStream.lineStart = boundsRingStart;
+    boundsStream.lineEnd = boundsRingEnd;
+    deltaSum.reset();
+    areaStream.polygonStart();
+  },
+  polygonEnd: function() {
+    areaStream.polygonEnd();
+    boundsStream.point = boundsPoint;
+    boundsStream.lineStart = boundsLineStart;
+    boundsStream.lineEnd = boundsLineEnd;
+    if (areaRingSum < 0) lambda0$1 = -(lambda1 = 180), phi0 = -(phi1 = 90);
+    else if (deltaSum > epsilon$4) phi1 = 90;
+    else if (deltaSum < -epsilon$4) phi0 = -90;
+    range$1[0] = lambda0$1, range$1[1] = lambda1;
+  }
+};
+
+function boundsPoint(lambda, phi) {
+  ranges.push(range$1 = [lambda0$1 = lambda, lambda1 = lambda]);
+  if (phi < phi0) phi0 = phi;
+  if (phi > phi1) phi1 = phi;
+}
+
+function linePoint(lambda, phi) {
+  var p = cartesian([lambda * radians, phi * radians]);
+  if (p0) {
+    var normal = cartesianCross(p0, p),
+        equatorial = [normal[1], -normal[0], 0],
+        inflection = cartesianCross(equatorial, normal);
+    cartesianNormalizeInPlace(inflection);
+    inflection = spherical(inflection);
+    var delta = lambda - lambda2,
+        sign$$1 = delta > 0 ? 1 : -1,
+        lambdai = inflection[0] * degrees$1 * sign$$1,
+        phii,
+        antimeridian = abs(delta) > 180;
+    if (antimeridian ^ (sign$$1 * lambda2 < lambdai && lambdai < sign$$1 * lambda)) {
+      phii = inflection[1] * degrees$1;
+      if (phii > phi1) phi1 = phii;
+    } else if (lambdai = (lambdai + 360) % 360 - 180, antimeridian ^ (sign$$1 * lambda2 < lambdai && lambdai < sign$$1 * lambda)) {
+      phii = -inflection[1] * degrees$1;
+      if (phii < phi0) phi0 = phii;
+    } else {
+      if (phi < phi0) phi0 = phi;
+      if (phi > phi1) phi1 = phi;
+    }
+    if (antimeridian) {
+      if (lambda < lambda2) {
+        if (angle(lambda0$1, lambda) > angle(lambda0$1, lambda1)) lambda1 = lambda;
+      } else {
+        if (angle(lambda, lambda1) > angle(lambda0$1, lambda1)) lambda0$1 = lambda;
+      }
+    } else {
+      if (lambda1 >= lambda0$1) {
+        if (lambda < lambda0$1) lambda0$1 = lambda;
+        if (lambda > lambda1) lambda1 = lambda;
+      } else {
+        if (lambda > lambda2) {
+          if (angle(lambda0$1, lambda) > angle(lambda0$1, lambda1)) lambda1 = lambda;
+        } else {
+          if (angle(lambda, lambda1) > angle(lambda0$1, lambda1)) lambda0$1 = lambda;
+        }
+      }
+    }
+  } else {
+    boundsPoint(lambda, phi);
+  }
+  p0 = p, lambda2 = lambda;
+}
+
+function boundsLineStart() {
+  boundsStream.point = linePoint;
+}
+
+function boundsLineEnd() {
+  range$1[0] = lambda0$1, range$1[1] = lambda1;
+  boundsStream.point = boundsPoint;
+  p0 = null;
+}
+
+function boundsRingPoint(lambda, phi) {
+  if (p0) {
+    var delta = lambda - lambda2;
+    deltaSum.add(abs(delta) > 180 ? delta + (delta > 0 ? 360 : -360) : delta);
+  } else {
+    lambda00$1 = lambda, phi00$1 = phi;
+  }
+  areaStream.point(lambda, phi);
+  linePoint(lambda, phi);
+}
+
+function boundsRingStart() {
+  areaStream.lineStart();
+}
+
+function boundsRingEnd() {
+  boundsRingPoint(lambda00$1, phi00$1);
+  areaStream.lineEnd();
+  if (abs(deltaSum) > epsilon$4) lambda0$1 = -(lambda1 = 180);
+  range$1[0] = lambda0$1, range$1[1] = lambda1;
+  p0 = null;
+}
+
+// Finds the left-right distance between two longitudes.
+// This is almost the same as (lambda1 - lambda0 + 360°) % 360°, except that we want
+// the distance between ±180° to be 360°.
+function angle(lambda0, lambda1) {
+  return (lambda1 -= lambda0) < 0 ? lambda1 + 360 : lambda1;
+}
+
+function rangeCompare(a, b) {
+  return a[0] - b[0];
+}
+
+function rangeContains(range, x) {
+  return range[0] <= range[1] ? range[0] <= x && x <= range[1] : x < range[0] || range[1] < x;
+}
+
+var bounds = function(feature) {
+  var i, n, a, b, merged, deltaMax, delta;
+
+  phi1 = lambda1 = -(lambda0$1 = phi0 = Infinity);
+  ranges = [];
+  geoStream(feature, boundsStream);
+
+  // First, sort ranges by their minimum longitudes.
+  if (n = ranges.length) {
+    ranges.sort(rangeCompare);
+
+    // Then, merge any ranges that overlap.
+    for (i = 1, a = ranges[0], merged = [a]; i < n; ++i) {
+      b = ranges[i];
+      if (rangeContains(a, b[0]) || rangeContains(a, b[1])) {
+        if (angle(a[0], b[1]) > angle(a[0], a[1])) a[1] = b[1];
+        if (angle(b[0], a[1]) > angle(a[0], a[1])) a[0] = b[0];
+      } else {
+        merged.push(a = b);
+      }
+    }
+
+    // Finally, find the largest gap between the merged ranges.
+    // The final bounding box will be the inverse of this gap.
+    for (deltaMax = -Infinity, n = merged.length - 1, i = 0, a = merged[n]; i <= n; a = b, ++i) {
+      b = merged[i];
+      if ((delta = angle(a[1], b[0])) > deltaMax) deltaMax = delta, lambda0$1 = b[0], lambda1 = a[1];
+    }
+  }
+
+  ranges = range$1 = null;
+
+  return lambda0$1 === Infinity || phi0 === Infinity
+      ? [[NaN, NaN], [NaN, NaN]]
+      : [[lambda0$1, phi0], [lambda1, phi1]];
+};
+
+var W0;
+var W1;
+var X0;
+var Y0;
+var Z0;
+var X1;
+var Y1;
+var Z1;
+var X2;
+var Y2;
+var Z2;
+var lambda00$2;
+var phi00$2;
+var x0;
+var y0;
+var z0; // previous point
+
+var centroidStream = {
+  sphere: noop$2,
+  point: centroidPoint,
+  lineStart: centroidLineStart,
+  lineEnd: centroidLineEnd,
+  polygonStart: function() {
+    centroidStream.lineStart = centroidRingStart;
+    centroidStream.lineEnd = centroidRingEnd;
+  },
+  polygonEnd: function() {
+    centroidStream.lineStart = centroidLineStart;
+    centroidStream.lineEnd = centroidLineEnd;
+  }
+};
+
+// Arithmetic mean of Cartesian vectors.
+function centroidPoint(lambda, phi) {
+  lambda *= radians, phi *= radians;
+  var cosPhi = cos$1(phi);
+  centroidPointCartesian(cosPhi * cos$1(lambda), cosPhi * sin$1(lambda), sin$1(phi));
+}
+
+function centroidPointCartesian(x, y, z) {
+  ++W0;
+  X0 += (x - X0) / W0;
+  Y0 += (y - Y0) / W0;
+  Z0 += (z - Z0) / W0;
+}
+
+function centroidLineStart() {
+  centroidStream.point = centroidLinePointFirst;
+}
+
+function centroidLinePointFirst(lambda, phi) {
+  lambda *= radians, phi *= radians;
+  var cosPhi = cos$1(phi);
+  x0 = cosPhi * cos$1(lambda);
+  y0 = cosPhi * sin$1(lambda);
+  z0 = sin$1(phi);
+  centroidStream.point = centroidLinePoint;
+  centroidPointCartesian(x0, y0, z0);
+}
+
+function centroidLinePoint(lambda, phi) {
+  lambda *= radians, phi *= radians;
+  var cosPhi = cos$1(phi),
+      x = cosPhi * cos$1(lambda),
+      y = cosPhi * sin$1(lambda),
+      z = sin$1(phi),
+      w = atan2(sqrt$1((w = y0 * z - z0 * y) * w + (w = z0 * x - x0 * z) * w + (w = x0 * y - y0 * x) * w), x0 * x + y0 * y + z0 * z);
+  W1 += w;
+  X1 += w * (x0 + (x0 = x));
+  Y1 += w * (y0 + (y0 = y));
+  Z1 += w * (z0 + (z0 = z));
+  centroidPointCartesian(x0, y0, z0);
+}
+
+function centroidLineEnd() {
+  centroidStream.point = centroidPoint;
+}
+
+// See J. E. Brock, The Inertia Tensor for a Spherical Triangle,
+// J. Applied Mechanics 42, 239 (1975).
+function centroidRingStart() {
+  centroidStream.point = centroidRingPointFirst;
+}
+
+function centroidRingEnd() {
+  centroidRingPoint(lambda00$2, phi00$2);
+  centroidStream.point = centroidPoint;
+}
+
+function centroidRingPointFirst(lambda, phi) {
+  lambda00$2 = lambda, phi00$2 = phi;
+  lambda *= radians, phi *= radians;
+  centroidStream.point = centroidRingPoint;
+  var cosPhi = cos$1(phi);
+  x0 = cosPhi * cos$1(lambda);
+  y0 = cosPhi * sin$1(lambda);
+  z0 = sin$1(phi);
+  centroidPointCartesian(x0, y0, z0);
+}
+
+function centroidRingPoint(lambda, phi) {
+  lambda *= radians, phi *= radians;
+  var cosPhi = cos$1(phi),
+      x = cosPhi * cos$1(lambda),
+      y = cosPhi * sin$1(lambda),
+      z = sin$1(phi),
+      cx = y0 * z - z0 * y,
+      cy = z0 * x - x0 * z,
+      cz = x0 * y - y0 * x,
+      m = sqrt$1(cx * cx + cy * cy + cz * cz),
+      u = x0 * x + y0 * y + z0 * z,
+      v = m && -acos(u) / m, // area weight
+      w = atan2(m, u); // line weight
+  X2 += v * cx;
+  Y2 += v * cy;
+  Z2 += v * cz;
+  W1 += w;
+  X1 += w * (x0 + (x0 = x));
+  Y1 += w * (y0 + (y0 = y));
+  Z1 += w * (z0 + (z0 = z));
+  centroidPointCartesian(x0, y0, z0);
+}
+
+var centroid$1 = function(object) {
+  W0 = W1 =
+  X0 = Y0 = Z0 =
+  X1 = Y1 = Z1 =
+  X2 = Y2 = Z2 = 0;
+  geoStream(object, centroidStream);
+
+  var x = X2,
+      y = Y2,
+      z = Z2,
+      m = x * x + y * y + z * z;
+
+  // If the area-weighted ccentroid is undefined, fall back to length-weighted ccentroid.
+  if (m < epsilon2$2) {
+    x = X1, y = Y1, z = Z1;
+    // If the feature has zero length, fall back to arithmetic mean of point vectors.
+    if (W1 < epsilon$4) x = X0, y = Y0, z = Z0;
+    m = x * x + y * y + z * z;
+    // If the feature still has an undefined ccentroid, then return.
+    if (m < epsilon2$2) return [NaN, NaN];
+  }
+
+  return [atan2(y, x) * degrees$1, asin$1(z / sqrt$1(m)) * degrees$1];
+};
+
+var constant$13 = function(x) {
+  return function() {
+    return x;
+  };
+};
+
+var compose = function(a, b) {
+
+  function compose(x, y) {
+    return x = a(x, y), b(x[0], x[1]);
+  }
+
+  if (a.invert && b.invert) compose.invert = function(x, y) {
+    return x = b.invert(x, y), x && a.invert(x[0], x[1]);
+  };
+
+  return compose;
+};
+
+function rotationIdentity(lambda, phi) {
+  return [lambda > pi$4 ? lambda - tau$4 : lambda < -pi$4 ? lambda + tau$4 : lambda, phi];
+}
+
+rotationIdentity.invert = rotationIdentity;
+
+function rotateRadians(deltaLambda, deltaPhi, deltaGamma) {
+  return (deltaLambda %= tau$4) ? (deltaPhi || deltaGamma ? compose(rotationLambda(deltaLambda), rotationPhiGamma(deltaPhi, deltaGamma))
+    : rotationLambda(deltaLambda))
+    : (deltaPhi || deltaGamma ? rotationPhiGamma(deltaPhi, deltaGamma)
+    : rotationIdentity);
+}
+
+function forwardRotationLambda(deltaLambda) {
+  return function(lambda, phi) {
+    return lambda += deltaLambda, [lambda > pi$4 ? lambda - tau$4 : lambda < -pi$4 ? lambda + tau$4 : lambda, phi];
+  };
+}
+
+function rotationLambda(deltaLambda) {
+  var rotation = forwardRotationLambda(deltaLambda);
+  rotation.invert = forwardRotationLambda(-deltaLambda);
+  return rotation;
+}
+
+function rotationPhiGamma(deltaPhi, deltaGamma) {
+  var cosDeltaPhi = cos$1(deltaPhi),
+      sinDeltaPhi = sin$1(deltaPhi),
+      cosDeltaGamma = cos$1(deltaGamma),
+      sinDeltaGamma = sin$1(deltaGamma);
+
+  function rotation(lambda, phi) {
+    var cosPhi = cos$1(phi),
+        x = cos$1(lambda) * cosPhi,
+        y = sin$1(lambda) * cosPhi,
+        z = sin$1(phi),
+        k = z * cosDeltaPhi + x * sinDeltaPhi;
+    return [
+      atan2(y * cosDeltaGamma - k * sinDeltaGamma, x * cosDeltaPhi - z * sinDeltaPhi),
+      asin$1(k * cosDeltaGamma + y * sinDeltaGamma)
+    ];
+  }
+
+  rotation.invert = function(lambda, phi) {
+    var cosPhi = cos$1(phi),
+        x = cos$1(lambda) * cosPhi,
+        y = sin$1(lambda) * cosPhi,
+        z = sin$1(phi),
+        k = z * cosDeltaGamma - y * sinDeltaGamma;
+    return [
+      atan2(y * cosDeltaGamma + z * sinDeltaGamma, x * cosDeltaPhi + k * sinDeltaPhi),
+      asin$1(k * cosDeltaPhi - x * sinDeltaPhi)
+    ];
+  };
+
+  return rotation;
+}
+
+var rotation = function(rotate) {
+  rotate = rotateRadians(rotate[0] * radians, rotate[1] * radians, rotate.length > 2 ? rotate[2] * radians : 0);
+
+  function forward(coordinates) {
+    coordinates = rotate(coordinates[0] * radians, coordinates[1] * radians);
+    return coordinates[0] *= degrees$1, coordinates[1] *= degrees$1, coordinates;
+  }
+
+  forward.invert = function(coordinates) {
+    coordinates = rotate.invert(coordinates[0] * radians, coordinates[1] * radians);
+    return coordinates[0] *= degrees$1, coordinates[1] *= degrees$1, coordinates;
+  };
+
+  return forward;
+};
+
+// Generates a circle centered at [0°, 0°], with a given radius and precision.
+function circleStream(stream, radius, delta, direction, t0, t1) {
+  if (!delta) return;
+  var cosRadius = cos$1(radius),
+      sinRadius = sin$1(radius),
+      step = direction * delta;
+  if (t0 == null) {
+    t0 = radius + direction * tau$4;
+    t1 = radius - step / 2;
+  } else {
+    t0 = circleRadius(cosRadius, t0);
+    t1 = circleRadius(cosRadius, t1);
+    if (direction > 0 ? t0 < t1 : t0 > t1) t0 += direction * tau$4;
+  }
+  for (var point, t = t0; direction > 0 ? t > t1 : t < t1; t -= step) {
+    point = spherical([cosRadius, -sinRadius * cos$1(t), -sinRadius * sin$1(t)]);
+    stream.point(point[0], point[1]);
+  }
+}
+
+// Returns the signed angle of a cartesian point relative to [cosRadius, 0, 0].
+function circleRadius(cosRadius, point) {
+  point = cartesian(point), point[0] -= cosRadius;
+  cartesianNormalizeInPlace(point);
+  var radius = acos(-point[1]);
+  return ((-point[2] < 0 ? -radius : radius) + tau$4 - epsilon$4) % tau$4;
+}
+
+var circle$1 = function() {
+  var center = constant$13([0, 0]),
+      radius = constant$13(90),
+      precision = constant$13(6),
+      ring,
+      rotate,
+      stream = {point: point};
+
+  function point(x, y) {
+    ring.push(x = rotate(x, y));
+    x[0] *= degrees$1, x[1] *= degrees$1;
+  }
+
+  function circle() {
+    var c = center.apply(this, arguments),
+        r = radius.apply(this, arguments) * radians,
+        p = precision.apply(this, arguments) * radians;
+    ring = [];
+    rotate = rotateRadians(-c[0] * radians, -c[1] * radians, 0).invert;
+    circleStream(stream, r, p, 1);
+    c = {type: "Polygon", coordinates: [ring]};
+    ring = rotate = null;
+    return c;
+  }
+
+  circle.center = function(_) {
+    return arguments.length ? (center = typeof _ === "function" ? _ : constant$13([+_[0], +_[1]]), circle) : center;
+  };
+
+  circle.radius = function(_) {
+    return arguments.length ? (radius = typeof _ === "function" ? _ : constant$13(+_), circle) : radius;
+  };
+
+  circle.precision = function(_) {
+    return arguments.length ? (precision = typeof _ === "function" ? _ : constant$13(+_), circle) : precision;
+  };
+
+  return circle;
+};
+
+var clipBuffer = function() {
+  var lines = [],
+      line;
+  return {
+    point: function(x, y) {
+      line.push([x, y]);
+    },
+    lineStart: function() {
+      lines.push(line = []);
+    },
+    lineEnd: noop$2,
+    rejoin: function() {
+      if (lines.length > 1) lines.push(lines.pop().concat(lines.shift()));
+    },
+    result: function() {
+      var result = lines;
+      lines = [];
+      line = null;
+      return result;
+    }
+  };
+};
+
+var clipLine = function(a, b, x0, y0, x1, y1) {
+  var ax = a[0],
+      ay = a[1],
+      bx = b[0],
+      by = b[1],
+      t0 = 0,
+      t1 = 1,
+      dx = bx - ax,
+      dy = by - ay,
+      r;
+
+  r = x0 - ax;
+  if (!dx && r > 0) return;
+  r /= dx;
+  if (dx < 0) {
+    if (r < t0) return;
+    if (r < t1) t1 = r;
+  } else if (dx > 0) {
+    if (r > t1) return;
+    if (r > t0) t0 = r;
+  }
+
+  r = x1 - ax;
+  if (!dx && r < 0) return;
+  r /= dx;
+  if (dx < 0) {
+    if (r > t1) return;
+    if (r > t0) t0 = r;
+  } else if (dx > 0) {
+    if (r < t0) return;
+    if (r < t1) t1 = r;
+  }
+
+  r = y0 - ay;
+  if (!dy && r > 0) return;
+  r /= dy;
+  if (dy < 0) {
+    if (r < t0) return;
+    if (r < t1) t1 = r;
+  } else if (dy > 0) {
+    if (r > t1) return;
+    if (r > t0) t0 = r;
+  }
+
+  r = y1 - ay;
+  if (!dy && r < 0) return;
+  r /= dy;
+  if (dy < 0) {
+    if (r > t1) return;
+    if (r > t0) t0 = r;
+  } else if (dy > 0) {
+    if (r < t0) return;
+    if (r < t1) t1 = r;
+  }
+
+  if (t0 > 0) a[0] = ax + t0 * dx, a[1] = ay + t0 * dy;
+  if (t1 < 1) b[0] = ax + t1 * dx, b[1] = ay + t1 * dy;
+  return true;
+};
+
+var pointEqual = function(a, b) {
+  return abs(a[0] - b[0]) < epsilon$4 && abs(a[1] - b[1]) < epsilon$4;
+};
+
+function Intersection(point, points, other, entry) {
+  this.x = point;
+  this.z = points;
+  this.o = other; // another intersection
+  this.e = entry; // is an entry?
+  this.v = false; // visited
+  this.n = this.p = null; // next & previous
+}
+
+// A generalized polygon clipping algorithm: given a polygon that has been cut
+// into its visible line segments, and rejoins the segments by interpolating
+// along the clip edge.
+var clipPolygon = function(segments, compareIntersection, startInside, interpolate, stream) {
+  var subject = [],
+      clip = [],
+      i,
+      n;
+
+  segments.forEach(function(segment) {
+    if ((n = segment.length - 1) <= 0) return;
+    var n, p0 = segment[0], p1 = segment[n], x;
+
+    // If the first and last points of a segment are coincident, then treat as a
+    // closed ring. TODO if all rings are closed, then the winding order of the
+    // exterior ring should be checked.
+    if (pointEqual(p0, p1)) {
+      stream.lineStart();
+      for (i = 0; i < n; ++i) stream.point((p0 = segment[i])[0], p0[1]);
+      stream.lineEnd();
+      return;
+    }
+
+    subject.push(x = new Intersection(p0, segment, null, true));
+    clip.push(x.o = new Intersection(p0, null, x, false));
+    subject.push(x = new Intersection(p1, segment, null, false));
+    clip.push(x.o = new Intersection(p1, null, x, true));
+  });
+
+  if (!subject.length) return;
+
+  clip.sort(compareIntersection);
+  link$1(subject);
+  link$1(clip);
+
+  for (i = 0, n = clip.length; i < n; ++i) {
+    clip[i].e = startInside = !startInside;
+  }
+
+  var start = subject[0],
+      points,
+      point;
+
+  while (1) {
+    // Find first unvisited intersection.
+    var current = start,
+        isSubject = true;
+    while (current.v) if ((current = current.n) === start) return;
+    points = current.z;
+    stream.lineStart();
+    do {
+      current.v = current.o.v = true;
+      if (current.e) {
+        if (isSubject) {
+          for (i = 0, n = points.length; i < n; ++i) stream.point((point = points[i])[0], point[1]);
+        } else {
+          interpolate(current.x, current.n.x, 1, stream);
+        }
+        current = current.n;
+      } else {
+        if (isSubject) {
+          points = current.p.z;
+          for (i = points.length - 1; i >= 0; --i) stream.point((point = points[i])[0], point[1]);
+        } else {
+          interpolate(current.x, current.p.x, -1, stream);
+        }
+        current = current.p;
+      }
+      current = current.o;
+      points = current.z;
+      isSubject = !isSubject;
+    } while (!current.v);
+    stream.lineEnd();
+  }
+};
+
+function link$1(array) {
+  if (!(n = array.length)) return;
+  var n,
+      i = 0,
+      a = array[0],
+      b;
+  while (++i < n) {
+    a.n = b = array[i];
+    b.p = a;
+    a = b;
+  }
+  a.n = b = array[0];
+  b.p = a;
+}
+
+var clipMax = 1e9;
+var clipMin = -clipMax;
+
+// TODO Use d3-polygon’s polygonContains here for the ring check?
+// TODO Eliminate duplicate buffering in clipBuffer and polygon.push?
+
+function clipExtent(x0, y0, x1, y1) {
+
+  function visible(x, y) {
+    return x0 <= x && x <= x1 && y0 <= y && y <= y1;
+  }
+
+  function interpolate(from, to, direction, stream) {
+    var a = 0, a1 = 0;
+    if (from == null
+        || (a = corner(from, direction)) !== (a1 = corner(to, direction))
+        || comparePoint(from, to) < 0 ^ direction > 0) {
+      do stream.point(a === 0 || a === 3 ? x0 : x1, a > 1 ? y1 : y0);
+      while ((a = (a + direction + 4) % 4) !== a1);
+    } else {
+      stream.point(to[0], to[1]);
+    }
+  }
+
+  function corner(p, direction) {
+    return abs(p[0] - x0) < epsilon$4 ? direction > 0 ? 0 : 3
+        : abs(p[0] - x1) < epsilon$4 ? direction > 0 ? 2 : 1
+        : abs(p[1] - y0) < epsilon$4 ? direction > 0 ? 1 : 0
+        : direction > 0 ? 3 : 2; // abs(p[1] - y1) < epsilon
+  }
+
+  function compareIntersection(a, b) {
+    return comparePoint(a.x, b.x);
+  }
+
+  function comparePoint(a, b) {
+    var ca = corner(a, 1),
+        cb = corner(b, 1);
+    return ca !== cb ? ca - cb
+        : ca === 0 ? b[1] - a[1]
+        : ca === 1 ? a[0] - b[0]
+        : ca === 2 ? a[1] - b[1]
+        : b[0] - a[0];
+  }
+
+  return function(stream) {
+    var activeStream = stream,
+        bufferStream = clipBuffer(),
+        segments,
+        polygon,
+        ring,
+        x__, y__, v__, // first point
+        x_, y_, v_, // previous point
+        first,
+        clean;
+
+    var clipStream = {
+      point: point,
+      lineStart: lineStart,
+      lineEnd: lineEnd,
+      polygonStart: polygonStart,
+      polygonEnd: polygonEnd
+    };
+
+    function point(x, y) {
+      if (visible(x, y)) activeStream.point(x, y);
+    }
+
+    function polygonInside() {
+      var winding = 0;
+
+      for (var i = 0, n = polygon.length; i < n; ++i) {
+        for (var ring = polygon[i], j = 1, m = ring.length, point = ring[0], a0, a1, b0 = point[0], b1 = point[1]; j < m; ++j) {
+          a0 = b0, a1 = b1, point = ring[j], b0 = point[0], b1 = point[1];
+          if (a1 <= y1) { if (b1 > y1 && (b0 - a0) * (y1 - a1) > (b1 - a1) * (x0 - a0)) ++winding; }
+          else { if (b1 <= y1 && (b0 - a0) * (y1 - a1) < (b1 - a1) * (x0 - a0)) --winding; }
+        }
+      }
+
+      return winding;
+    }
+
+    // Buffer geometry within a polygon and then clip it en masse.
+    function polygonStart() {
+      activeStream = bufferStream, segments = [], polygon = [], clean = true;
+    }
+
+    function polygonEnd() {
+      var startInside = polygonInside(),
+          cleanInside = clean && startInside,
+          visible = (segments = merge(segments)).length;
+      if (cleanInside || visible) {
+        stream.polygonStart();
+        if (cleanInside) {
+          stream.lineStart();
+          interpolate(null, null, 1, stream);
+          stream.lineEnd();
+        }
+        if (visible) {
+          clipPolygon(segments, compareIntersection, startInside, interpolate, stream);
+        }
+        stream.polygonEnd();
+      }
+      activeStream = stream, segments = polygon = ring = null;
+    }
+
+    function lineStart() {
+      clipStream.point = linePoint;
+      if (polygon) polygon.push(ring = []);
+      first = true;
+      v_ = false;
+      x_ = y_ = NaN;
+    }
+
+    // TODO rather than special-case polygons, simply handle them separately.
+    // Ideally, coincident intersection points should be jittered to avoid
+    // clipping issues.
+    function lineEnd() {
+      if (segments) {
+        linePoint(x__, y__);
+        if (v__ && v_) bufferStream.rejoin();
+        segments.push(bufferStream.result());
+      }
+      clipStream.point = point;
+      if (v_) activeStream.lineEnd();
+    }
+
+    function linePoint(x, y) {
+      var v = visible(x, y);
+      if (polygon) ring.push([x, y]);
+      if (first) {
+        x__ = x, y__ = y, v__ = v;
+        first = false;
+        if (v) {
+          activeStream.lineStart();
+          activeStream.point(x, y);
+        }
+      } else {
+        if (v && v_) activeStream.point(x, y);
+        else {
+          var a = [x_ = Math.max(clipMin, Math.min(clipMax, x_)), y_ = Math.max(clipMin, Math.min(clipMax, y_))],
+              b = [x = Math.max(clipMin, Math.min(clipMax, x)), y = Math.max(clipMin, Math.min(clipMax, y))];
+          if (clipLine(a, b, x0, y0, x1, y1)) {
+            if (!v_) {
+              activeStream.lineStart();
+              activeStream.point(a[0], a[1]);
+            }
+            activeStream.point(b[0], b[1]);
+            if (!v) activeStream.lineEnd();
+            clean = false;
+          } else if (v) {
+            activeStream.lineStart();
+            activeStream.point(x, y);
+            clean = false;
+          }
+        }
+      }
+      x_ = x, y_ = y, v_ = v;
+    }
+
+    return clipStream;
+  };
+}
+
+var extent$1 = function() {
+  var x0 = 0,
+      y0 = 0,
+      x1 = 960,
+      y1 = 500,
+      cache,
+      cacheStream,
+      clip;
+
+  return clip = {
+    stream: function(stream) {
+      return cache && cacheStream === stream ? cache : cache = clipExtent(x0, y0, x1, y1)(cacheStream = stream);
+    },
+    extent: function(_) {
+      return arguments.length ? (x0 = +_[0][0], y0 = +_[0][1], x1 = +_[1][0], y1 = +_[1][1], cache = cacheStream = null, clip) : [[x0, y0], [x1, y1]];
+    }
+  };
+};
+
+var lengthSum = adder();
+var lambda0$2;
+var sinPhi0$1;
+var cosPhi0$1;
+
+var lengthStream = {
+  sphere: noop$2,
+  point: noop$2,
+  lineStart: lengthLineStart,
+  lineEnd: noop$2,
+  polygonStart: noop$2,
+  polygonEnd: noop$2
+};
+
+function lengthLineStart() {
+  lengthStream.point = lengthPointFirst;
+  lengthStream.lineEnd = lengthLineEnd;
+}
+
+function lengthLineEnd() {
+  lengthStream.point = lengthStream.lineEnd = noop$2;
+}
+
+function lengthPointFirst(lambda, phi) {
+  lambda *= radians, phi *= radians;
+  lambda0$2 = lambda, sinPhi0$1 = sin$1(phi), cosPhi0$1 = cos$1(phi);
+  lengthStream.point = lengthPoint;
+}
+
+function lengthPoint(lambda, phi) {
+  lambda *= radians, phi *= radians;
+  var sinPhi = sin$1(phi),
+      cosPhi = cos$1(phi),
+      delta = abs(lambda - lambda0$2),
+      cosDelta = cos$1(delta),
+      sinDelta = sin$1(delta),
+      x = cosPhi * sinDelta,
+      y = cosPhi0$1 * sinPhi - sinPhi0$1 * cosPhi * cosDelta,
+      z = sinPhi0$1 * sinPhi + cosPhi0$1 * cosPhi * cosDelta;
+  lengthSum.add(atan2(sqrt$1(x * x + y * y), z));
+  lambda0$2 = lambda, sinPhi0$1 = sinPhi, cosPhi0$1 = cosPhi;
+}
+
+var length$2 = function(object) {
+  lengthSum.reset();
+  geoStream(object, lengthStream);
+  return +lengthSum;
+};
+
+var coordinates = [null, null];
+var object$1 = {type: "LineString", coordinates: coordinates};
+
+var distance = function(a, b) {
+  coordinates[0] = a;
+  coordinates[1] = b;
+  return length$2(object$1);
+};
+
+function graticuleX(y0, y1, dy) {
+  var y = range(y0, y1 - epsilon$4, dy).concat(y1);
+  return function(x) { return y.map(function(y) { return [x, y]; }); };
+}
+
+function graticuleY(x0, x1, dx) {
+  var x = range(x0, x1 - epsilon$4, dx).concat(x1);
+  return function(y) { return x.map(function(x) { return [x, y]; }); };
+}
+
+function graticule() {
+  var x1, x0, X1, X0,
+      y1, y0, Y1, Y0,
+      dx = 10, dy = dx, DX = 90, DY = 360,
+      x, y, X, Y,
+      precision = 2.5;
+
+  function graticule() {
+    return {type: "MultiLineString", coordinates: lines()};
+  }
+
+  function lines() {
+    return range(ceil(X0 / DX) * DX, X1, DX).map(X)
+        .concat(range(ceil(Y0 / DY) * DY, Y1, DY).map(Y))
+        .concat(range(ceil(x0 / dx) * dx, x1, dx).filter(function(x) { return abs(x % DX) > epsilon$4; }).map(x))
+        .concat(range(ceil(y0 / dy) * dy, y1, dy).filter(function(y) { return abs(y % DY) > epsilon$4; }).map(y));
+  }
+
+  graticule.lines = function() {
+    return lines().map(function(coordinates) { return {type: "LineString", coordinates: coordinates}; });
+  };
+
+  graticule.outline = function() {
+    return {
+      type: "Polygon",
+      coordinates: [
+        X(X0).concat(
+        Y(Y1).slice(1),
+        X(X1).reverse().slice(1),
+        Y(Y0).reverse().slice(1))
+      ]
+    };
+  };
+
+  graticule.extent = function(_) {
+    if (!arguments.length) return graticule.extentMinor();
+    return graticule.extentMajor(_).extentMinor(_);
+  };
+
+  graticule.extentMajor = function(_) {
+    if (!arguments.length) return [[X0, Y0], [X1, Y1]];
+    X0 = +_[0][0], X1 = +_[1][0];
+    Y0 = +_[0][1], Y1 = +_[1][1];
+    if (X0 > X1) _ = X0, X0 = X1, X1 = _;
+    if (Y0 > Y1) _ = Y0, Y0 = Y1, Y1 = _;
+    return graticule.precision(precision);
+  };
+
+  graticule.extentMinor = function(_) {
+    if (!arguments.length) return [[x0, y0], [x1, y1]];
+    x0 = +_[0][0], x1 = +_[1][0];
+    y0 = +_[0][1], y1 = +_[1][1];
+    if (x0 > x1) _ = x0, x0 = x1, x1 = _;
+    if (y0 > y1) _ = y0, y0 = y1, y1 = _;
+    return graticule.precision(precision);
+  };
+
+  graticule.step = function(_) {
+    if (!arguments.length) return graticule.stepMinor();
+    return graticule.stepMajor(_).stepMinor(_);
+  };
+
+  graticule.stepMajor = function(_) {
+    if (!arguments.length) return [DX, DY];
+    DX = +_[0], DY = +_[1];
+    return graticule;
+  };
+
+  graticule.stepMinor = function(_) {
+    if (!arguments.length) return [dx, dy];
+    dx = +_[0], dy = +_[1];
+    return graticule;
+  };
+
+  graticule.precision = function(_) {
+    if (!arguments.length) return precision;
+    precision = +_;
+    x = graticuleX(y0, y1, 90);
+    y = graticuleY(x0, x1, precision);
+    X = graticuleX(Y0, Y1, 90);
+    Y = graticuleY(X0, X1, precision);
+    return graticule;
+  };
+
+  return graticule
+      .extentMajor([[-180, -90 + epsilon$4], [180, 90 - epsilon$4]])
+      .extentMinor([[-180, -80 - epsilon$4], [180, 80 + epsilon$4]]);
+}
+
+function graticule10() {
+  return graticule()();
+}
+
+var interpolate$2 = function(a, b) {
+  var x0 = a[0] * radians,
+      y0 = a[1] * radians,
+      x1 = b[0] * radians,
+      y1 = b[1] * radians,
+      cy0 = cos$1(y0),
+      sy0 = sin$1(y0),
+      cy1 = cos$1(y1),
+      sy1 = sin$1(y1),
+      kx0 = cy0 * cos$1(x0),
+      ky0 = cy0 * sin$1(x0),
+      kx1 = cy1 * cos$1(x1),
+      ky1 = cy1 * sin$1(x1),
+      d = 2 * asin$1(sqrt$1(haversin(y1 - y0) + cy0 * cy1 * haversin(x1 - x0))),
+      k = sin$1(d);
+
+  var interpolate = d ? function(t) {
+    var B = sin$1(t *= d) / k,
+        A = sin$1(d - t) / k,
+        x = A * kx0 + B * kx1,
+        y = A * ky0 + B * ky1,
+        z = A * sy0 + B * sy1;
+    return [
+      atan2(y, x) * degrees$1,
+      atan2(z, sqrt$1(x * x + y * y)) * degrees$1
+    ];
+  } : function() {
+    return [x0 * degrees$1, y0 * degrees$1];
+  };
+
+  interpolate.distance = d;
+
+  return interpolate;
+};
+
+var identity$7 = function(x) {
+  return x;
+};
+
+var areaSum$1 = adder();
+var areaRingSum$1 = adder();
+var x00;
+var y00;
+var x0$1;
+var y0$1;
+
+var areaStream$1 = {
+  point: noop$2,
+  lineStart: noop$2,
+  lineEnd: noop$2,
+  polygonStart: function() {
+    areaStream$1.lineStart = areaRingStart$1;
+    areaStream$1.lineEnd = areaRingEnd$1;
+  },
+  polygonEnd: function() {
+    areaStream$1.lineStart = areaStream$1.lineEnd = areaStream$1.point = noop$2;
+    areaSum$1.add(abs(areaRingSum$1));
+    areaRingSum$1.reset();
+  },
+  result: function() {
+    var area = areaSum$1 / 2;
+    areaSum$1.reset();
+    return area;
+  }
+};
+
+function areaRingStart$1() {
+  areaStream$1.point = areaPointFirst$1;
+}
+
+function areaPointFirst$1(x, y) {
+  areaStream$1.point = areaPoint$1;
+  x00 = x0$1 = x, y00 = y0$1 = y;
+}
+
+function areaPoint$1(x, y) {
+  areaRingSum$1.add(y0$1 * x - x0$1 * y);
+  x0$1 = x, y0$1 = y;
+}
+
+function areaRingEnd$1() {
+  areaPoint$1(x00, y00);
+}
+
+var x0$2 = Infinity;
+var y0$2 = x0$2;
+var x1 = -x0$2;
+var y1 = x1;
+
+var boundsStream$1 = {
+  point: boundsPoint$1,
+  lineStart: noop$2,
+  lineEnd: noop$2,
+  polygonStart: noop$2,
+  polygonEnd: noop$2,
+  result: function() {
+    var bounds = [[x0$2, y0$2], [x1, y1]];
+    x1 = y1 = -(y0$2 = x0$2 = Infinity);
+    return bounds;
+  }
+};
+
+function boundsPoint$1(x, y) {
+  if (x < x0$2) x0$2 = x;
+  if (x > x1) x1 = x;
+  if (y < y0$2) y0$2 = y;
+  if (y > y1) y1 = y;
+}
+
+// TODO Enforce positive area for exterior, negative area for interior?
+
+var X0$1 = 0;
+var Y0$1 = 0;
+var Z0$1 = 0;
+var X1$1 = 0;
+var Y1$1 = 0;
+var Z1$1 = 0;
+var X2$1 = 0;
+var Y2$1 = 0;
+var Z2$1 = 0;
+var x00$1;
+var y00$1;
+var x0$3;
+var y0$3;
+
+var centroidStream$1 = {
+  point: centroidPoint$1,
+  lineStart: centroidLineStart$1,
+  lineEnd: centroidLineEnd$1,
+  polygonStart: function() {
+    centroidStream$1.lineStart = centroidRingStart$1;
+    centroidStream$1.lineEnd = centroidRingEnd$1;
+  },
+  polygonEnd: function() {
+    centroidStream$1.point = centroidPoint$1;
+    centroidStream$1.lineStart = centroidLineStart$1;
+    centroidStream$1.lineEnd = centroidLineEnd$1;
+  },
+  result: function() {
+    var centroid = Z2$1 ? [X2$1 / Z2$1, Y2$1 / Z2$1]
+        : Z1$1 ? [X1$1 / Z1$1, Y1$1 / Z1$1]
+        : Z0$1 ? [X0$1 / Z0$1, Y0$1 / Z0$1]
+        : [NaN, NaN];
+    X0$1 = Y0$1 = Z0$1 =
+    X1$1 = Y1$1 = Z1$1 =
+    X2$1 = Y2$1 = Z2$1 = 0;
+    return centroid;
+  }
+};
+
+function centroidPoint$1(x, y) {
+  X0$1 += x;
+  Y0$1 += y;
+  ++Z0$1;
+}
+
+function centroidLineStart$1() {
+  centroidStream$1.point = centroidPointFirstLine;
+}
+
+function centroidPointFirstLine(x, y) {
+  centroidStream$1.point = centroidPointLine;
+  centroidPoint$1(x0$3 = x, y0$3 = y);
+}
+
+function centroidPointLine(x, y) {
+  var dx = x - x0$3, dy = y - y0$3, z = sqrt$1(dx * dx + dy * dy);
+  X1$1 += z * (x0$3 + x) / 2;
+  Y1$1 += z * (y0$3 + y) / 2;
+  Z1$1 += z;
+  centroidPoint$1(x0$3 = x, y0$3 = y);
+}
+
+function centroidLineEnd$1() {
+  centroidStream$1.point = centroidPoint$1;
+}
+
+function centroidRingStart$1() {
+  centroidStream$1.point = centroidPointFirstRing;
+}
+
+function centroidRingEnd$1() {
+  centroidPointRing(x00$1, y00$1);
+}
+
+function centroidPointFirstRing(x, y) {
+  centroidStream$1.point = centroidPointRing;
+  centroidPoint$1(x00$1 = x0$3 = x, y00$1 = y0$3 = y);
+}
+
+function centroidPointRing(x, y) {
+  var dx = x - x0$3,
+      dy = y - y0$3,
+      z = sqrt$1(dx * dx + dy * dy);
+
+  X1$1 += z * (x0$3 + x) / 2;
+  Y1$1 += z * (y0$3 + y) / 2;
+  Z1$1 += z;
+
+  z = y0$3 * x - x0$3 * y;
+  X2$1 += z * (x0$3 + x);
+  Y2$1 += z * (y0$3 + y);
+  Z2$1 += z * 3;
+  centroidPoint$1(x0$3 = x, y0$3 = y);
+}
+
+function PathContext(context) {
+  this._context = context;
+}
+
+PathContext.prototype = {
+  _radius: 4.5,
+  pointRadius: function(_) {
+    return this._radius = _, this;
+  },
+  polygonStart: function() {
+    this._line = 0;
+  },
+  polygonEnd: function() {
+    this._line = NaN;
+  },
+  lineStart: function() {
+    this._point = 0;
+  },
+  lineEnd: function() {
+    if (this._line === 0) this._context.closePath();
+    this._point = NaN;
+  },
+  point: function(x, y) {
+    switch (this._point) {
+      case 0: {
+        this._context.moveTo(x, y);
+        this._point = 1;
+        break;
+      }
+      case 1: {
+        this._context.lineTo(x, y);
+        break;
+      }
+      default: {
+        this._context.moveTo(x + this._radius, y);
+        this._context.arc(x, y, this._radius, 0, tau$4);
+        break;
+      }
+    }
+  },
+  result: noop$2
+};
+
+function PathString() {
+  this._string = [];
+}
+
+PathString.prototype = {
+  _circle: circle$2(4.5),
+  pointRadius: function(_) {
+    return this._circle = circle$2(_), this;
+  },
+  polygonStart: function() {
+    this._line = 0;
+  },
+  polygonEnd: function() {
+    this._line = NaN;
+  },
+  lineStart: function() {
+    this._point = 0;
+  },
+  lineEnd: function() {
+    if (this._line === 0) this._string.push("Z");
+    this._point = NaN;
+  },
+  point: function(x, y) {
+    switch (this._point) {
+      case 0: {
+        this._string.push("M", x, ",", y);
+        this._point = 1;
+        break;
+      }
+      case 1: {
+        this._string.push("L", x, ",", y);
+        break;
+      }
+      default: {
+        this._string.push("M", x, ",", y, this._circle);
+        break;
+      }
+    }
+  },
+  result: function() {
+    if (this._string.length) {
+      var result = this._string.join("");
+      this._string = [];
+      return result;
+    }
+  }
+};
+
+function circle$2(radius) {
+  return "m0," + radius
+      + "a" + radius + "," + radius + " 0 1,1 0," + -2 * radius
+      + "a" + radius + "," + radius + " 0 1,1 0," + 2 * radius
+      + "z";
+}
+
+var index$3 = function(projection, context) {
+  var pointRadius = 4.5,
+      projectionStream,
+      contextStream;
+
+  function path(object) {
+    if (object) {
+      if (typeof pointRadius === "function") contextStream.pointRadius(+pointRadius.apply(this, arguments));
+      geoStream(object, projectionStream(contextStream));
+    }
+    return contextStream.result();
+  }
+
+  path.area = function(object) {
+    geoStream(object, projectionStream(areaStream$1));
+    return areaStream$1.result();
+  };
+
+  path.bounds = function(object) {
+    geoStream(object, projectionStream(boundsStream$1));
+    return boundsStream$1.result();
+  };
+
+  path.centroid = function(object) {
+    geoStream(object, projectionStream(centroidStream$1));
+    return centroidStream$1.result();
+  };
+
+  path.projection = function(_) {
+    return arguments.length ? (projectionStream = (projection = _) == null ? identity$7 : _.stream, path) : projection;
+  };
+
+  path.context = function(_) {
+    if (!arguments.length) return context;
+    contextStream = (context = _) == null ? new PathString : new PathContext(_);
+    if (typeof pointRadius !== "function") contextStream.pointRadius(pointRadius);
+    return path;
+  };
+
+  path.pointRadius = function(_) {
+    if (!arguments.length) return pointRadius;
+    pointRadius = typeof _ === "function" ? _ : (contextStream.pointRadius(+_), +_);
+    return path;
+  };
+
+  return path.projection(projection).context(context);
+};
+
+var sum$2 = adder();
+
+var polygonContains = function(polygon, point) {
+  var lambda = point[0],
+      phi = point[1],
+      normal = [sin$1(lambda), -cos$1(lambda), 0],
+      angle = 0,
+      winding = 0;
+
+  sum$2.reset();
+
+  for (var i = 0, n = polygon.length; i < n; ++i) {
+    if (!(m = (ring = polygon[i]).length)) continue;
+    var ring,
+        m,
+        point0 = ring[m - 1],
+        lambda0 = point0[0],
+        phi0 = point0[1] / 2 + quarterPi,
+        sinPhi0 = sin$1(phi0),
+        cosPhi0 = cos$1(phi0);
+
+    for (var j = 0; j < m; ++j, lambda0 = lambda1, sinPhi0 = sinPhi1, cosPhi0 = cosPhi1, point0 = point1) {
+      var point1 = ring[j],
+          lambda1 = point1[0],
+          phi1 = point1[1] / 2 + quarterPi,
+          sinPhi1 = sin$1(phi1),
+          cosPhi1 = cos$1(phi1),
+          delta = lambda1 - lambda0,
+          sign$$1 = delta >= 0 ? 1 : -1,
+          absDelta = sign$$1 * delta,
+          antimeridian = absDelta > pi$4,
+          k = sinPhi0 * sinPhi1;
+
+      sum$2.add(atan2(k * sign$$1 * sin$1(absDelta), cosPhi0 * cosPhi1 + k * cos$1(absDelta)));
+      angle += antimeridian ? delta + sign$$1 * tau$4 : delta;
+
+      // Are the longitudes either side of the point’s meridian (lambda),
+      // and are the latitudes smaller than the parallel (phi)?
+      if (antimeridian ^ lambda0 >= lambda ^ lambda1 >= lambda) {
+        var arc = cartesianCross(cartesian(point0), cartesian(point1));
+        cartesianNormalizeInPlace(arc);
+        var intersection = cartesianCross(normal, arc);
+        cartesianNormalizeInPlace(intersection);
+        var phiArc = (antimeridian ^ delta >= 0 ? -1 : 1) * asin$1(intersection[2]);
+        if (phi > phiArc || phi === phiArc && (arc[0] || arc[1])) {
+          winding += antimeridian ^ delta >= 0 ? 1 : -1;
+        }
+      }
+    }
+  }
+
+  // First, determine whether the South pole is inside or outside:
+  //
+  // It is inside if:
+  // * the polygon winds around it in a clockwise direction.
+  // * the polygon does not (cumulatively) wind around it, but has a negative
+  //   (counter-clockwise) area.
+  //
+  // Second, count the (signed) number of times a segment crosses a lambda
+  // from the point to the South pole.  If it is zero, then the point is the
+  // same side as the South pole.
+
+  return (angle < -epsilon$4 || angle < epsilon$4 && sum$2 < -epsilon$4) ^ (winding & 1);
+};
+
+var clip = function(pointVisible, clipLine, interpolate, start) {
+  return function(rotate, sink) {
+    var line = clipLine(sink),
+        rotatedStart = rotate.invert(start[0], start[1]),
+        ringBuffer = clipBuffer(),
+        ringSink = clipLine(ringBuffer),
+        polygonStarted = false,
+        polygon,
+        segments,
+        ring;
+
+    var clip = {
+      point: point,
+      lineStart: lineStart,
+      lineEnd: lineEnd,
+      polygonStart: function() {
+        clip.point = pointRing;
+        clip.lineStart = ringStart;
+        clip.lineEnd = ringEnd;
+        segments = [];
+        polygon = [];
+      },
+      polygonEnd: function() {
+        clip.point = point;
+        clip.lineStart = lineStart;
+        clip.lineEnd = lineEnd;
+        segments = merge(segments);
+        var startInside = polygonContains(polygon, rotatedStart);
+        if (segments.length) {
+          if (!polygonStarted) sink.polygonStart(), polygonStarted = true;
+          clipPolygon(segments, compareIntersection, startInside, interpolate, sink);
+        } else if (startInside) {
+          if (!polygonStarted) sink.polygonStart(), polygonStarted = true;
+          sink.lineStart();
+          interpolate(null, null, 1, sink);
+          sink.lineEnd();
+        }
+        if (polygonStarted) sink.polygonEnd(), polygonStarted = false;
+        segments = polygon = null;
+      },
+      sphere: function() {
+        sink.polygonStart();
+        sink.lineStart();
+        interpolate(null, null, 1, sink);
+        sink.lineEnd();
+        sink.polygonEnd();
+      }
+    };
+
+    function point(lambda, phi) {
+      var point = rotate(lambda, phi);
+      if (pointVisible(lambda = point[0], phi = point[1])) sink.point(lambda, phi);
+    }
+
+    function pointLine(lambda, phi) {
+      var point = rotate(lambda, phi);
+      line.point(point[0], point[1]);
+    }
+
+    function lineStart() {
+      clip.point = pointLine;
+      line.lineStart();
+    }
+
+    function lineEnd() {
+      clip.point = point;
+      line.lineEnd();
+    }
+
+    function pointRing(lambda, phi) {
+      ring.push([lambda, phi]);
+      var point = rotate(lambda, phi);
+      ringSink.point(point[0], point[1]);
+    }
+
+    function ringStart() {
+      ringSink.lineStart();
+      ring = [];
+    }
+
+    function ringEnd() {
+      pointRing(ring[0][0], ring[0][1]);
+      ringSink.lineEnd();
+
+      var clean = ringSink.clean(),
+          ringSegments = ringBuffer.result(),
+          i, n = ringSegments.length, m,
+          segment,
+          point;
+
+      ring.pop();
+      polygon.push(ring);
+      ring = null;
+
+      if (!n) return;
+
+      // No intersections.
+      if (clean & 1) {
+        segment = ringSegments[0];
+        if ((m = segment.length - 1) > 0) {
+          if (!polygonStarted) sink.polygonStart(), polygonStarted = true;
+          sink.lineStart();
+          for (i = 0; i < m; ++i) sink.point((point = segment[i])[0], point[1]);
+          sink.lineEnd();
+        }
+        return;
+      }
+
+      // Rejoin connected segments.
+      // TODO reuse ringBuffer.rejoin()?
+      if (n > 1 && clean & 2) ringSegments.push(ringSegments.pop().concat(ringSegments.shift()));
+
+      segments.push(ringSegments.filter(validSegment));
+    }
+
+    return clip;
+  };
+};
+
+function validSegment(segment) {
+  return segment.length > 1;
+}
+
+// Intersections are sorted along the clip edge. For both antimeridian cutting
+// and circle clipping, the same comparison is used.
+function compareIntersection(a, b) {
+  return ((a = a.x)[0] < 0 ? a[1] - halfPi$3 - epsilon$4 : halfPi$3 - a[1])
+       - ((b = b.x)[0] < 0 ? b[1] - halfPi$3 - epsilon$4 : halfPi$3 - b[1]);
+}
+
+var clipAntimeridian = clip(
+  function() { return true; },
+  clipAntimeridianLine,
+  clipAntimeridianInterpolate,
+  [-pi$4, -halfPi$3]
+);
+
+// Takes a line and cuts into visible segments. Return values: 0 - there were
+// intersections or the line was empty; 1 - no intersections; 2 - there were
+// intersections, and the first and last segments should be rejoined.
+function clipAntimeridianLine(stream) {
+  var lambda0 = NaN,
+      phi0 = NaN,
+      sign0 = NaN,
+      clean; // no intersections
+
+  return {
+    lineStart: function() {
+      stream.lineStart();
+      clean = 1;
+    },
+    point: function(lambda1, phi1) {
+      var sign1 = lambda1 > 0 ? pi$4 : -pi$4,
+          delta = abs(lambda1 - lambda0);
+      if (abs(delta - pi$4) < epsilon$4) { // line crosses a pole
+        stream.point(lambda0, phi0 = (phi0 + phi1) / 2 > 0 ? halfPi$3 : -halfPi$3);
+        stream.point(sign0, phi0);
+        stream.lineEnd();
+        stream.lineStart();
+        stream.point(sign1, phi0);
+        stream.point(lambda1, phi0);
+        clean = 0;
+      } else if (sign0 !== sign1 && delta >= pi$4) { // line crosses antimeridian
+        if (abs(lambda0 - sign0) < epsilon$4) lambda0 -= sign0 * epsilon$4; // handle degeneracies
+        if (abs(lambda1 - sign1) < epsilon$4) lambda1 -= sign1 * epsilon$4;
+        phi0 = clipAntimeridianIntersect(lambda0, phi0, lambda1, phi1);
+        stream.point(sign0, phi0);
+        stream.lineEnd();
+        stream.lineStart();
+        stream.point(sign1, phi0);
+        clean = 0;
+      }
+      stream.point(lambda0 = lambda1, phi0 = phi1);
+      sign0 = sign1;
+    },
+    lineEnd: function() {
+      stream.lineEnd();
+      lambda0 = phi0 = NaN;
+    },
+    clean: function() {
+      return 2 - clean; // if intersections, rejoin first and last segments
+    }
+  };
+}
+
+function clipAntimeridianIntersect(lambda0, phi0, lambda1, phi1) {
+  var cosPhi0,
+      cosPhi1,
+      sinLambda0Lambda1 = sin$1(lambda0 - lambda1);
+  return abs(sinLambda0Lambda1) > epsilon$4
+      ? atan((sin$1(phi0) * (cosPhi1 = cos$1(phi1)) * sin$1(lambda1)
+          - sin$1(phi1) * (cosPhi0 = cos$1(phi0)) * sin$1(lambda0))
+          / (cosPhi0 * cosPhi1 * sinLambda0Lambda1))
+      : (phi0 + phi1) / 2;
+}
+
+function clipAntimeridianInterpolate(from, to, direction, stream) {
+  var phi;
+  if (from == null) {
+    phi = direction * halfPi$3;
+    stream.point(-pi$4, phi);
+    stream.point(0, phi);
+    stream.point(pi$4, phi);
+    stream.point(pi$4, 0);
+    stream.point(pi$4, -phi);
+    stream.point(0, -phi);
+    stream.point(-pi$4, -phi);
+    stream.point(-pi$4, 0);
+    stream.point(-pi$4, phi);
+  } else if (abs(from[0] - to[0]) > epsilon$4) {
+    var lambda = from[0] < to[0] ? pi$4 : -pi$4;
+    phi = direction * lambda / 2;
+    stream.point(-lambda, phi);
+    stream.point(0, phi);
+    stream.point(lambda, phi);
+  } else {
+    stream.point(to[0], to[1]);
+  }
+}
+
+var clipCircle = function(radius, delta) {
+  var cr = cos$1(radius),
+      smallRadius = cr > 0,
+      notHemisphere = abs(cr) > epsilon$4; // TODO optimise for this common case
+
+  function interpolate(from, to, direction, stream) {
+    circleStream(stream, radius, delta, direction, from, to);
+  }
+
+  function visible(lambda, phi) {
+    return cos$1(lambda) * cos$1(phi) > cr;
+  }
+
+  // Takes a line and cuts into visible segments. Return values used for polygon
+  // clipping: 0 - there were intersections or the line was empty; 1 - no
+  // intersections 2 - there were intersections, and the first and last segments
+  // should be rejoined.
+  function clipLine(stream) {
+    var point0, // previous point
+        c0, // code for previous point
+        v0, // visibility of previous point
+        v00, // visibility of first point
+        clean; // no intersections
+    return {
+      lineStart: function() {
+        v00 = v0 = false;
+        clean = 1;
+      },
+      point: function(lambda, phi) {
+        var point1 = [lambda, phi],
+            point2,
+            v = visible(lambda, phi),
+            c = smallRadius
+              ? v ? 0 : code(lambda, phi)
+              : v ? code(lambda + (lambda < 0 ? pi$4 : -pi$4), phi) : 0;
+        if (!point0 && (v00 = v0 = v)) stream.lineStart();
+        // Handle degeneracies.
+        // TODO ignore if not clipping polygons.
+        if (v !== v0) {
+          point2 = intersect(point0, point1);
+          if (pointEqual(point0, point2) || pointEqual(point1, point2)) {
+            point1[0] += epsilon$4;
+            point1[1] += epsilon$4;
+            v = visible(point1[0], point1[1]);
+          }
+        }
+        if (v !== v0) {
+          clean = 0;
+          if (v) {
+            // outside going in
+            stream.lineStart();
+            point2 = intersect(point1, point0);
+            stream.point(point2[0], point2[1]);
+          } else {
+            // inside going out
+            point2 = intersect(point0, point1);
+            stream.point(point2[0], point2[1]);
+            stream.lineEnd();
+          }
+          point0 = point2;
+        } else if (notHemisphere && point0 && smallRadius ^ v) {
+          var t;
+          // If the codes for two points are different, or are both zero,
+          // and there this segment intersects with the small circle.
+          if (!(c & c0) && (t = intersect(point1, point0, true))) {
+            clean = 0;
+            if (smallRadius) {
+              stream.lineStart();
+              stream.point(t[0][0], t[0][1]);
+              stream.point(t[1][0], t[1][1]);
+              stream.lineEnd();
+            } else {
+              stream.point(t[1][0], t[1][1]);
+              stream.lineEnd();
+              stream.lineStart();
+              stream.point(t[0][0], t[0][1]);
+            }
+          }
+        }
+        if (v && (!point0 || !pointEqual(point0, point1))) {
+          stream.point(point1[0], point1[1]);
+        }
+        point0 = point1, v0 = v, c0 = c;
+      },
+      lineEnd: function() {
+        if (v0) stream.lineEnd();
+        point0 = null;
+      },
+      // Rejoin first and last segments if there were intersections and the first
+      // and last points were visible.
+      clean: function() {
+        return clean | ((v00 && v0) << 1);
+      }
+    };
+  }
+
+  // Intersects the great circle between a and b with the clip circle.
+  function intersect(a, b, two) {
+    var pa = cartesian(a),
+        pb = cartesian(b);
+
+    // We have two planes, n1.p = d1 and n2.p = d2.
+    // Find intersection line p(t) = c1 n1 + c2 n2 + t (n1 ⨯ n2).
+    var n1 = [1, 0, 0], // normal
+        n2 = cartesianCross(pa, pb),
+        n2n2 = cartesianDot(n2, n2),
+        n1n2 = n2[0], // cartesianDot(n1, n2),
+        determinant = n2n2 - n1n2 * n1n2;
+
+    // Two polar points.
+    if (!determinant) return !two && a;
+
+    var c1 =  cr * n2n2 / determinant,
+        c2 = -cr * n1n2 / determinant,
+        n1xn2 = cartesianCross(n1, n2),
+        A = cartesianScale(n1, c1),
+        B = cartesianScale(n2, c2);
+    cartesianAddInPlace(A, B);
+
+    // Solve |p(t)|^2 = 1.
+    var u = n1xn2,
+        w = cartesianDot(A, u),
+        uu = cartesianDot(u, u),
+        t2 = w * w - uu * (cartesianDot(A, A) - 1);
+
+    if (t2 < 0) return;
+
+    var t = sqrt$1(t2),
+        q = cartesianScale(u, (-w - t) / uu);
+    cartesianAddInPlace(q, A);
+    q = spherical(q);
+
+    if (!two) return q;
+
+    // Two intersection points.
+    var lambda0 = a[0],
+        lambda1 = b[0],
+        phi0 = a[1],
+        phi1 = b[1],
+        z;
+
+    if (lambda1 < lambda0) z = lambda0, lambda0 = lambda1, lambda1 = z;
+
+    var delta = lambda1 - lambda0,
+        polar = abs(delta - pi$4) < epsilon$4,
+        meridian = polar || delta < epsilon$4;
+
+    if (!polar && phi1 < phi0) z = phi0, phi0 = phi1, phi1 = z;
+
+    // Check that the first point is between a and b.
+    if (meridian
+        ? polar
+          ? phi0 + phi1 > 0 ^ q[1] < (abs(q[0] - lambda0) < epsilon$4 ? phi0 : phi1)
+          : phi0 <= q[1] && q[1] <= phi1
+        : delta > pi$4 ^ (lambda0 <= q[0] && q[0] <= lambda1)) {
+      var q1 = cartesianScale(u, (-w + t) / uu);
+      cartesianAddInPlace(q1, A);
+      return [q, spherical(q1)];
+    }
+  }
+
+  // Generates a 4-bit vector representing the location of a point relative to
+  // the small circle's bounding box.
+  function code(lambda, phi) {
+    var r = smallRadius ? radius : pi$4 - radius,
+        code = 0;
+    if (lambda < -r) code |= 1; // left
+    else if (lambda > r) code |= 2; // right
+    if (phi < -r) code |= 4; // below
+    else if (phi > r) code |= 8; // above
+    return code;
+  }
+
+  return clip(visible, clipLine, interpolate, smallRadius ? [0, -radius] : [-pi$4, radius - pi$4]);
+};
+
+var transform$1 = function(methods) {
+  return {
+    stream: transformer(methods)
+  };
+};
+
+function transformer(methods) {
+  return function(stream) {
+    var s = new TransformStream;
+    for (var key in methods) s[key] = methods[key];
+    s.stream = stream;
+    return s;
+  };
+}
+
+function TransformStream() {}
+
+TransformStream.prototype = {
+  constructor: TransformStream,
+  point: function(x, y) { this.stream.point(x, y); },
+  sphere: function() { this.stream.sphere(); },
+  lineStart: function() { this.stream.lineStart(); },
+  lineEnd: function() { this.stream.lineEnd(); },
+  polygonStart: function() { this.stream.polygonStart(); },
+  polygonEnd: function() { this.stream.polygonEnd(); }
+};
+
+function fitExtent(projection, extent, object) {
+  var w = extent[1][0] - extent[0][0],
+      h = extent[1][1] - extent[0][1],
+      clip = projection.clipExtent && projection.clipExtent();
+
+  projection
+      .scale(150)
+      .translate([0, 0]);
+
+  if (clip != null) projection.clipExtent(null);
+
+  geoStream(object, projection.stream(boundsStream$1));
+
+  var b = boundsStream$1.result(),
+      k = Math.min(w / (b[1][0] - b[0][0]), h / (b[1][1] - b[0][1])),
+      x = +extent[0][0] + (w - k * (b[1][0] + b[0][0])) / 2,
+      y = +extent[0][1] + (h - k * (b[1][1] + b[0][1])) / 2;
+
+  if (clip != null) projection.clipExtent(clip);
+
+  return projection
+      .scale(k * 150)
+      .translate([x, y]);
+}
+
+function fitSize(projection, size, object) {
+  return fitExtent(projection, [[0, 0], size], object);
+}
+
+var maxDepth = 16;
+var cosMinDistance = cos$1(30 * radians); // cos(minimum angular distance)
+
+var resample = function(project, delta2) {
+  return +delta2 ? resample$1(project, delta2) : resampleNone(project);
+};
+
+function resampleNone(project) {
+  return transformer({
+    point: function(x, y) {
+      x = project(x, y);
+      this.stream.point(x[0], x[1]);
+    }
+  });
+}
+
+function resample$1(project, delta2) {
+
+  function resampleLineTo(x0, y0, lambda0, a0, b0, c0, x1, y1, lambda1, a1, b1, c1, depth, stream) {
+    var dx = x1 - x0,
+        dy = y1 - y0,
+        d2 = dx * dx + dy * dy;
+    if (d2 > 4 * delta2 && depth--) {
+      var a = a0 + a1,
+          b = b0 + b1,
+          c = c0 + c1,
+          m = sqrt$1(a * a + b * b + c * c),
+          phi2 = asin$1(c /= m),
+          lambda2 = abs(abs(c) - 1) < epsilon$4 || abs(lambda0 - lambda1) < epsilon$4 ? (lambda0 + lambda1) / 2 : atan2(b, a),
+          p = project(lambda2, phi2),
+          x2 = p[0],
+          y2 = p[1],
+          dx2 = x2 - x0,
+          dy2 = y2 - y0,
+          dz = dy * dx2 - dx * dy2;
+      if (dz * dz / d2 > delta2 // perpendicular projected distance
+          || abs((dx * dx2 + dy * dy2) / d2 - 0.5) > 0.3 // midpoint close to an end
+          || a0 * a1 + b0 * b1 + c0 * c1 < cosMinDistance) { // angular distance
+        resampleLineTo(x0, y0, lambda0, a0, b0, c0, x2, y2, lambda2, a /= m, b /= m, c, depth, stream);
+        stream.point(x2, y2);
+        resampleLineTo(x2, y2, lambda2, a, b, c, x1, y1, lambda1, a1, b1, c1, depth, stream);
+      }
+    }
+  }
+  return function(stream) {
+    var lambda00, x00, y00, a00, b00, c00, // first point
+        lambda0, x0, y0, a0, b0, c0; // previous point
+
+    var resampleStream = {
+      point: point,
+      lineStart: lineStart,
+      lineEnd: lineEnd,
+      polygonStart: function() { stream.polygonStart(); resampleStream.lineStart = ringStart; },
+      polygonEnd: function() { stream.polygonEnd(); resampleStream.lineStart = lineStart; }
+    };
+
+    function point(x, y) {
+      x = project(x, y);
+      stream.point(x[0], x[1]);
+    }
+
+    function lineStart() {
+      x0 = NaN;
+      resampleStream.point = linePoint;
+      stream.lineStart();
+    }
+
+    function linePoint(lambda, phi) {
+      var c = cartesian([lambda, phi]), p = project(lambda, phi);
+      resampleLineTo(x0, y0, lambda0, a0, b0, c0, x0 = p[0], y0 = p[1], lambda0 = lambda, a0 = c[0], b0 = c[1], c0 = c[2], maxDepth, stream);
+      stream.point(x0, y0);
+    }
+
+    function lineEnd() {
+      resampleStream.point = point;
+      stream.lineEnd();
+    }
+
+    function ringStart() {
+      lineStart();
+      resampleStream.point = ringPoint;
+      resampleStream.lineEnd = ringEnd;
+    }
+
+    function ringPoint(lambda, phi) {
+      linePoint(lambda00 = lambda, phi), x00 = x0, y00 = y0, a00 = a0, b00 = b0, c00 = c0;
+      resampleStream.point = linePoint;
+    }
+
+    function ringEnd() {
+      resampleLineTo(x0, y0, lambda0, a0, b0, c0, x00, y00, lambda00, a00, b00, c00, maxDepth, stream);
+      resampleStream.lineEnd = lineEnd;
+      lineEnd();
+    }
+
+    return resampleStream;
+  };
+}
+
+var transformRadians = transformer({
+  point: function(x, y) {
+    this.stream.point(x * radians, y * radians);
+  }
+});
+
+function projection(project) {
+  return projectionMutator(function() { return project; })();
+}
+
+function projectionMutator(projectAt) {
+  var project,
+      k = 150, // scale
+      x = 480, y = 250, // translate
+      dx, dy, lambda = 0, phi = 0, // center
+      deltaLambda = 0, deltaPhi = 0, deltaGamma = 0, rotate, projectRotate, // rotate
+      theta = null, preclip = clipAntimeridian, // clip angle
+      x0 = null, y0, x1, y1, postclip = identity$7, // clip extent
+      delta2 = 0.5, projectResample = resample(projectTransform, delta2), // precision
+      cache,
+      cacheStream;
+
+  function projection(point) {
+    point = projectRotate(point[0] * radians, point[1] * radians);
+    return [point[0] * k + dx, dy - point[1] * k];
+  }
+
+  function invert(point) {
+    point = projectRotate.invert((point[0] - dx) / k, (dy - point[1]) / k);
+    return point && [point[0] * degrees$1, point[1] * degrees$1];
+  }
+
+  function projectTransform(x, y) {
+    return x = project(x, y), [x[0] * k + dx, dy - x[1] * k];
+  }
+
+  projection.stream = function(stream) {
+    return cache && cacheStream === stream ? cache : cache = transformRadians(preclip(rotate, projectResample(postclip(cacheStream = stream))));
+  };
+
+  projection.clipAngle = function(_) {
+    return arguments.length ? (preclip = +_ ? clipCircle(theta = _ * radians, 6 * radians) : (theta = null, clipAntimeridian), reset()) : theta * degrees$1;
+  };
+
+  projection.clipExtent = function(_) {
+    return arguments.length ? (postclip = _ == null ? (x0 = y0 = x1 = y1 = null, identity$7) : clipExtent(x0 = +_[0][0], y0 = +_[0][1], x1 = +_[1][0], y1 = +_[1][1]), reset()) : x0 == null ? null : [[x0, y0], [x1, y1]];
+  };
+
+  projection.scale = function(_) {
+    return arguments.length ? (k = +_, recenter()) : k;
+  };
+
+  projection.translate = function(_) {
+    return arguments.length ? (x = +_[0], y = +_[1], recenter()) : [x, y];
+  };
+
+  projection.center = function(_) {
+    return arguments.length ? (lambda = _[0] % 360 * radians, phi = _[1] % 360 * radians, recenter()) : [lambda * degrees$1, phi * degrees$1];
+  };
+
+  projection.rotate = function(_) {
+    return arguments.length ? (deltaLambda = _[0] % 360 * radians, deltaPhi = _[1] % 360 * radians, deltaGamma = _.length > 2 ? _[2] % 360 * radians : 0, recenter()) : [deltaLambda * degrees$1, deltaPhi * degrees$1, deltaGamma * degrees$1];
+  };
+
+  projection.precision = function(_) {
+    return arguments.length ? (projectResample = resample(projectTransform, delta2 = _ * _), reset()) : sqrt$1(delta2);
+  };
+
+  projection.fitExtent = function(extent, object) {
+    return fitExtent(projection, extent, object);
+  };
+
+  projection.fitSize = function(size, object) {
+    return fitSize(projection, size, object);
+  };
+
+  function recenter() {
+    projectRotate = compose(rotate = rotateRadians(deltaLambda, deltaPhi, deltaGamma), project);
+    var center = project(lambda, phi);
+    dx = x - center[0] * k;
+    dy = y + center[1] * k;
+    return reset();
+  }
+
+  function reset() {
+    cache = cacheStream = null;
+    return projection;
+  }
+
+  return function() {
+    project = projectAt.apply(this, arguments);
+    projection.invert = project.invert && invert;
+    return recenter();
+  };
+}
+
+function conicProjection(projectAt) {
+  var phi0 = 0,
+      phi1 = pi$4 / 3,
+      m = projectionMutator(projectAt),
+      p = m(phi0, phi1);
+
+  p.parallels = function(_) {
+    return arguments.length ? m(phi0 = _[0] * radians, phi1 = _[1] * radians) : [phi0 * degrees$1, phi1 * degrees$1];
+  };
+
+  return p;
+}
+
+function cylindricalEqualAreaRaw(phi0) {
+  var cosPhi0 = cos$1(phi0);
+
+  function forward(lambda, phi) {
+    return [lambda * cosPhi0, sin$1(phi) / cosPhi0];
+  }
+
+  forward.invert = function(x, y) {
+    return [x / cosPhi0, asin$1(y * cosPhi0)];
+  };
+
+  return forward;
+}
+
+function conicEqualAreaRaw(y0, y1) {
+  var sy0 = sin$1(y0), n = (sy0 + sin$1(y1)) / 2;
+
+  // Are the parallels symmetrical around the Equator?
+  if (abs(n) < epsilon$4) return cylindricalEqualAreaRaw(y0);
+
+  var c = 1 + sy0 * (2 * n - sy0), r0 = sqrt$1(c) / n;
+
+  function project(x, y) {
+    var r = sqrt$1(c - 2 * n * sin$1(y)) / n;
+    return [r * sin$1(x *= n), r0 - r * cos$1(x)];
+  }
+
+  project.invert = function(x, y) {
+    var r0y = r0 - y;
+    return [atan2(x, abs(r0y)) / n * sign$1(r0y), asin$1((c - (x * x + r0y * r0y) * n * n) / (2 * n))];
+  };
+
+  return project;
+}
+
+var conicEqualArea = function() {
+  return conicProjection(conicEqualAreaRaw)
+      .scale(155.424)
+      .center([0, 33.6442]);
+};
+
+var albers = function() {
+  return conicEqualArea()
+      .parallels([29.5, 45.5])
+      .scale(1070)
+      .translate([480, 250])
+      .rotate([96, 0])
+      .center([-0.6, 38.7]);
+};
+
+// The projections must have mutually exclusive clip regions on the sphere,
+// as this will avoid emitting interleaving lines and polygons.
+function multiplex(streams) {
+  var n = streams.length;
+  return {
+    point: function(x, y) { var i = -1; while (++i < n) streams[i].point(x, y); },
+    sphere: function() { var i = -1; while (++i < n) streams[i].sphere(); },
+    lineStart: function() { var i = -1; while (++i < n) streams[i].lineStart(); },
+    lineEnd: function() { var i = -1; while (++i < n) streams[i].lineEnd(); },
+    polygonStart: function() { var i = -1; while (++i < n) streams[i].polygonStart(); },
+    polygonEnd: function() { var i = -1; while (++i < n) streams[i].polygonEnd(); }
+  };
+}
+
+// A composite projection for the United States, configured by default for
+// 960×500. The projection also works quite well at 960×600 if you change the
+// scale to 1285 and adjust the translate accordingly. The set of standard
+// parallels for each region comes from USGS, which is published here:
+// http://egsc.usgs.gov/isb/pubs/MapProjections/projections.html#albers
+var albersUsa = function() {
+  var cache,
+      cacheStream,
+      lower48 = albers(), lower48Point,
+      alaska = conicEqualArea().rotate([154, 0]).center([-2, 58.5]).parallels([55, 65]), alaskaPoint, // EPSG:3338
+      hawaii = conicEqualArea().rotate([157, 0]).center([-3, 19.9]).parallels([8, 18]), hawaiiPoint, // ESRI:102007
+      point, pointStream = {point: function(x, y) { point = [x, y]; }};
+
+  function albersUsa(coordinates) {
+    var x = coordinates[0], y = coordinates[1];
+    return point = null,
+        (lower48Point.point(x, y), point)
+        || (alaskaPoint.point(x, y), point)
+        || (hawaiiPoint.point(x, y), point);
+  }
+
+  albersUsa.invert = function(coordinates) {
+    var k = lower48.scale(),
+        t = lower48.translate(),
+        x = (coordinates[0] - t[0]) / k,
+        y = (coordinates[1] - t[1]) / k;
+    return (y >= 0.120 && y < 0.234 && x >= -0.425 && x < -0.214 ? alaska
+        : y >= 0.166 && y < 0.234 && x >= -0.214 && x < -0.115 ? hawaii
+        : lower48).invert(coordinates);
+  };
+
+  albersUsa.stream = function(stream) {
+    return cache && cacheStream === stream ? cache : cache = multiplex([lower48.stream(cacheStream = stream), alaska.stream(stream), hawaii.stream(stream)]);
+  };
+
+  albersUsa.precision = function(_) {
+    if (!arguments.length) return lower48.precision();
+    lower48.precision(_), alaska.precision(_), hawaii.precision(_);
+    return reset();
+  };
+
+  albersUsa.scale = function(_) {
+    if (!arguments.length) return lower48.scale();
+    lower48.scale(_), alaska.scale(_ * 0.35), hawaii.scale(_);
+    return albersUsa.translate(lower48.translate());
+  };
+
+  albersUsa.translate = function(_) {
+    if (!arguments.length) return lower48.translate();
+    var k = lower48.scale(), x = +_[0], y = +_[1];
+
+    lower48Point = lower48
+        .translate(_)
+        .clipExtent([[x - 0.455 * k, y - 0.238 * k], [x + 0.455 * k, y + 0.238 * k]])
+        .stream(pointStream);
+
+    alaskaPoint = alaska
+        .translate([x - 0.307 * k, y + 0.201 * k])
+        .clipExtent([[x - 0.425 * k + epsilon$4, y + 0.120 * k + epsilon$4], [x - 0.214 * k - epsilon$4, y + 0.234 * k - epsilon$4]])
+        .stream(pointStream);
+
+    hawaiiPoint = hawaii
+        .translate([x - 0.205 * k, y + 0.212 * k])
+        .clipExtent([[x - 0.214 * k + epsilon$4, y + 0.166 * k + epsilon$4], [x - 0.115 * k - epsilon$4, y + 0.234 * k - epsilon$4]])
+        .stream(pointStream);
+
+    return reset();
+  };
+
+  albersUsa.fitExtent = function(extent, object) {
+    return fitExtent(albersUsa, extent, object);
+  };
+
+  albersUsa.fitSize = function(size, object) {
+    return fitSize(albersUsa, size, object);
+  };
+
+  function reset() {
+    cache = cacheStream = null;
+    return albersUsa;
+  }
+
+  return albersUsa.scale(1070);
+};
+
+function azimuthalRaw(scale) {
+  return function(x, y) {
+    var cx = cos$1(x),
+        cy = cos$1(y),
+        k = scale(cx * cy);
+    return [
+      k * cy * sin$1(x),
+      k * sin$1(y)
+    ];
+  }
+}
+
+function azimuthalInvert(angle) {
+  return function(x, y) {
+    var z = sqrt$1(x * x + y * y),
+        c = angle(z),
+        sc = sin$1(c),
+        cc = cos$1(c);
+    return [
+      atan2(x * sc, z * cc),
+      asin$1(z && y * sc / z)
+    ];
+  }
+}
+
+var azimuthalEqualAreaRaw = azimuthalRaw(function(cxcy) {
+  return sqrt$1(2 / (1 + cxcy));
+});
+
+azimuthalEqualAreaRaw.invert = azimuthalInvert(function(z) {
+  return 2 * asin$1(z / 2);
+});
+
+var azimuthalEqualArea = function() {
+  return projection(azimuthalEqualAreaRaw)
+      .scale(124.75)
+      .clipAngle(180 - 1e-3);
+};
+
+var azimuthalEquidistantRaw = azimuthalRaw(function(c) {
+  return (c = acos(c)) && c / sin$1(c);
+});
+
+azimuthalEquidistantRaw.invert = azimuthalInvert(function(z) {
+  return z;
+});
+
+var azimuthalEquidistant = function() {
+  return projection(azimuthalEquidistantRaw)
+      .scale(79.4188)
+      .clipAngle(180 - 1e-3);
+};
+
+function mercatorRaw(lambda, phi) {
+  return [lambda, log$1(tan((halfPi$3 + phi) / 2))];
+}
+
+mercatorRaw.invert = function(x, y) {
+  return [x, 2 * atan(exp(y)) - halfPi$3];
+};
+
+var mercator = function() {
+  return mercatorProjection(mercatorRaw)
+      .scale(961 / tau$4);
+};
+
+function mercatorProjection(project) {
+  var m = projection(project),
+      scale = m.scale,
+      translate = m.translate,
+      clipExtent = m.clipExtent,
+      clipAuto;
+
+  m.scale = function(_) {
+    return arguments.length ? (scale(_), clipAuto && m.clipExtent(null), m) : scale();
+  };
+
+  m.translate = function(_) {
+    return arguments.length ? (translate(_), clipAuto && m.clipExtent(null), m) : translate();
+  };
+
+  m.clipExtent = function(_) {
+    if (!arguments.length) return clipAuto ? null : clipExtent();
+    if (clipAuto = _ == null) {
+      var k = pi$4 * scale(),
+          t = translate();
+      _ = [[t[0] - k, t[1] - k], [t[0] + k, t[1] + k]];
+    }
+    clipExtent(_);
+    return m;
+  };
+
+  return m.clipExtent(null);
+}
+
+function tany(y) {
+  return tan((halfPi$3 + y) / 2);
+}
+
+function conicConformalRaw(y0, y1) {
+  var cy0 = cos$1(y0),
+      n = y0 === y1 ? sin$1(y0) : log$1(cy0 / cos$1(y1)) / log$1(tany(y1) / tany(y0)),
+      f = cy0 * pow$1(tany(y0), n) / n;
+
+  if (!n) return mercatorRaw;
+
+  function project(x, y) {
+    if (f > 0) { if (y < -halfPi$3 + epsilon$4) y = -halfPi$3 + epsilon$4; }
+    else { if (y > halfPi$3 - epsilon$4) y = halfPi$3 - epsilon$4; }
+    var r = f / pow$1(tany(y), n);
+    return [r * sin$1(n * x), f - r * cos$1(n * x)];
+  }
+
+  project.invert = function(x, y) {
+    var fy = f - y, r = sign$1(n) * sqrt$1(x * x + fy * fy);
+    return [atan2(x, abs(fy)) / n * sign$1(fy), 2 * atan(pow$1(f / r, 1 / n)) - halfPi$3];
+  };
+
+  return project;
+}
+
+var conicConformal = function() {
+  return conicProjection(conicConformalRaw)
+      .scale(109.5)
+      .parallels([30, 30]);
+};
+
+function equirectangularRaw(lambda, phi) {
+  return [lambda, phi];
+}
+
+equirectangularRaw.invert = equirectangularRaw;
+
+var equirectangular = function() {
+  return projection(equirectangularRaw)
+      .scale(152.63);
+};
+
+function conicEquidistantRaw(y0, y1) {
+  var cy0 = cos$1(y0),
+      n = y0 === y1 ? sin$1(y0) : (cy0 - cos$1(y1)) / (y1 - y0),
+      g = cy0 / n + y0;
+
+  if (abs(n) < epsilon$4) return equirectangularRaw;
+
+  function project(x, y) {
+    var gy = g - y, nx = n * x;
+    return [gy * sin$1(nx), g - gy * cos$1(nx)];
+  }
+
+  project.invert = function(x, y) {
+    var gy = g - y;
+    return [atan2(x, abs(gy)) / n * sign$1(gy), g - sign$1(n) * sqrt$1(x * x + gy * gy)];
+  };
+
+  return project;
+}
+
+var conicEquidistant = function() {
+  return conicProjection(conicEquidistantRaw)
+      .scale(131.154)
+      .center([0, 13.9389]);
+};
+
+function gnomonicRaw(x, y) {
+  var cy = cos$1(y), k = cos$1(x) * cy;
+  return [cy * sin$1(x) / k, sin$1(y) / k];
+}
+
+gnomonicRaw.invert = azimuthalInvert(atan);
+
+var gnomonic = function() {
+  return projection(gnomonicRaw)
+      .scale(144.049)
+      .clipAngle(60);
+};
+
+function scaleTranslate(k, tx, ty) {
+  return k === 1 && tx === 0 && ty === 0 ? identity$7 : transformer({
+    point: function(x, y) {
+      this.stream.point(x * k + tx, y * k + ty);
+    }
+  });
+}
+
+var identity$8 = function() {
+  var k = 1, tx = 0, ty = 0, transform = identity$7, // scale and translate
+      x0 = null, y0, x1, y1, clip = identity$7, // clip extent
+      cache,
+      cacheStream,
+      projection;
+
+  function reset() {
+    cache = cacheStream = null;
+    return projection;
+  }
+
+  return projection = {
+    stream: function(stream) {
+      return cache && cacheStream === stream ? cache : cache = transform(clip(cacheStream = stream));
+    },
+    clipExtent: function(_) {
+      return arguments.length ? (clip = _ == null ? (x0 = y0 = x1 = y1 = null, identity$7) : clipExtent(x0 = +_[0][0], y0 = +_[0][1], x1 = +_[1][0], y1 = +_[1][1]), reset()) : x0 == null ? null : [[x0, y0], [x1, y1]];
+    },
+    scale: function(_) {
+      return arguments.length ? (transform = scaleTranslate(k = +_, tx, ty), reset()) : k;
+    },
+    translate: function(_) {
+      return arguments.length ? (transform = scaleTranslate(k, tx = +_[0], ty = +_[1]), reset()) : [tx, ty];
+    },
+    fitExtent: function(extent, object) {
+      return fitExtent(projection, extent, object);
+    },
+    fitSize: function(size, object) {
+      return fitSize(projection, size, object);
+    }
+  };
+};
+
+function orthographicRaw(x, y) {
+  return [cos$1(y) * sin$1(x), sin$1(y)];
+}
+
+orthographicRaw.invert = azimuthalInvert(asin$1);
+
+var orthographic = function() {
+  return projection(orthographicRaw)
+      .scale(249.5)
+      .clipAngle(90 + epsilon$4);
+};
+
+function stereographicRaw(x, y) {
+  var cy = cos$1(y), k = 1 + cos$1(x) * cy;
+  return [cy * sin$1(x) / k, sin$1(y) / k];
+}
+
+stereographicRaw.invert = azimuthalInvert(function(z) {
+  return 2 * atan(z);
+});
+
+var stereographic = function() {
+  return projection(stereographicRaw)
+      .scale(250)
+      .clipAngle(142);
+};
+
+function transverseMercatorRaw(lambda, phi) {
+  return [log$1(tan((halfPi$3 + phi) / 2)), -lambda];
+}
+
+transverseMercatorRaw.invert = function(x, y) {
+  return [-y, 2 * atan(exp(x)) - halfPi$3];
+};
+
+var transverseMercator = function() {
+  var m = mercatorProjection(transverseMercatorRaw),
+      center = m.center,
+      rotate = m.rotate;
+
+  m.center = function(_) {
+    return arguments.length ? center([-_[1], _[0]]) : (_ = center(), [_[1], -_[0]]);
+  };
+
+  m.rotate = function(_) {
+    return arguments.length ? rotate([_[0], _[1], _.length > 2 ? _[2] + 90 : 90]) : (_ = rotate(), [_[0], _[1], _[2] - 90]);
+  };
+
+  return rotate([0, 0, 90])
+      .scale(159.155);
+};
+
+exports.version = version;
+exports.bisect = bisectRight;
+exports.bisectRight = bisectRight;
+exports.bisectLeft = bisectLeft;
+exports.ascending = ascending;
+exports.bisector = bisector;
+exports.descending = descending;
+exports.deviation = deviation;
+exports.extent = extent;
+exports.histogram = histogram;
+exports.thresholdFreedmanDiaconis = freedmanDiaconis;
+exports.thresholdScott = scott;
+exports.thresholdSturges = sturges;
+exports.max = max;
+exports.mean = mean;
+exports.median = median;
+exports.merge = merge;
+exports.min = min;
+exports.pairs = pairs;
+exports.permute = permute;
+exports.quantile = threshold;
+exports.range = range;
+exports.scan = scan;
+exports.shuffle = shuffle;
+exports.sum = sum;
+exports.ticks = ticks;
+exports.tickStep = tickStep;
+exports.transpose = transpose;
+exports.variance = variance;
+exports.zip = zip;
+exports.entries = entries;
+exports.keys = keys;
+exports.values = values;
+exports.map = map$1;
+exports.set = set;
+exports.nest = nest;
+exports.randomUniform = uniform;
+exports.randomNormal = normal;
+exports.randomLogNormal = logNormal;
+exports.randomBates = bates;
+exports.randomIrwinHall = irwinHall;
+exports.randomExponential = exponential;
+exports.easeLinear = linear;
+exports.easeQuad = quadInOut;
+exports.easeQuadIn = quadIn;
+exports.easeQuadOut = quadOut;
+exports.easeQuadInOut = quadInOut;
+exports.easeCubic = cubicInOut;
+exports.easeCubicIn = cubicIn;
+exports.easeCubicOut = cubicOut;
+exports.easeCubicInOut = cubicInOut;
+exports.easePoly = polyInOut;
+exports.easePolyIn = polyIn;
+exports.easePolyOut = polyOut;
+exports.easePolyInOut = polyInOut;
+exports.easeSin = sinInOut;
+exports.easeSinIn = sinIn;
+exports.easeSinOut = sinOut;
+exports.easeSinInOut = sinInOut;
+exports.easeExp = expInOut;
+exports.easeExpIn = expIn;
+exports.easeExpOut = expOut;
+exports.easeExpInOut = expInOut;
+exports.easeCircle = circleInOut;
+exports.easeCircleIn = circleIn;
+exports.easeCircleOut = circleOut;
+exports.easeCircleInOut = circleInOut;
+exports.easeBounce = bounceOut;
+exports.easeBounceIn = bounceIn;
+exports.easeBounceOut = bounceOut;
+exports.easeBounceInOut = bounceInOut;
+exports.easeBack = backInOut;
+exports.easeBackIn = backIn;
+exports.easeBackOut = backOut;
+exports.easeBackInOut = backInOut;
+exports.easeElastic = elasticOut;
+exports.easeElasticIn = elasticIn;
+exports.easeElasticOut = elasticOut;
+exports.easeElasticInOut = elasticInOut;
+exports.polygonArea = area;
+exports.polygonCentroid = centroid;
+exports.polygonHull = hull;
+exports.polygonContains = contains;
+exports.polygonLength = length$1;
+exports.path = path;
+exports.quadtree = quadtree;
+exports.queue = queue;
+exports.arc = arc;
+exports.area = area$1;
+exports.line = line;
+exports.pie = pie;
+exports.radialArea = radialArea;
+exports.radialLine = radialLine$1;
+exports.symbol = symbol;
+exports.symbols = symbols;
+exports.symbolCircle = circle;
+exports.symbolCross = cross$1;
+exports.symbolDiamond = diamond;
+exports.symbolSquare = square;
+exports.symbolStar = star;
+exports.symbolTriangle = triangle;
+exports.symbolWye = wye;
+exports.curveBasisClosed = basisClosed;
+exports.curveBasisOpen = basisOpen;
+exports.curveBasis = basis;
+exports.curveBundle = bundle;
+exports.curveCardinalClosed = cardinalClosed;
+exports.curveCardinalOpen = cardinalOpen;
+exports.curveCardinal = cardinal;
+exports.curveCatmullRomClosed = catmullRomClosed;
+exports.curveCatmullRomOpen = catmullRomOpen;
+exports.curveCatmullRom = catmullRom;
+exports.curveLinearClosed = linearClosed;
+exports.curveLinear = curveLinear;
+exports.curveMonotoneX = monotoneX;
+exports.curveMonotoneY = monotoneY;
+exports.curveNatural = natural;
+exports.curveStep = step;
+exports.curveStepAfter = stepAfter;
+exports.curveStepBefore = stepBefore;
+exports.stack = stack;
+exports.stackOffsetExpand = expand;
+exports.stackOffsetNone = none;
+exports.stackOffsetSilhouette = silhouette;
+exports.stackOffsetWiggle = wiggle;
+exports.stackOrderAscending = ascending$1;
+exports.stackOrderDescending = descending$2;
+exports.stackOrderInsideOut = insideOut;
+exports.stackOrderNone = none$1;
+exports.stackOrderReverse = reverse;
+exports.color = color;
+exports.rgb = rgb;
+exports.hsl = hsl;
+exports.lab = lab;
+exports.hcl = hcl;
+exports.cubehelix = cubehelix;
+exports.interpolate = interpolate;
+exports.interpolateArray = array$1;
+exports.interpolateDate = date;
+exports.interpolateNumber = interpolateNumber;
+exports.interpolateObject = object;
+exports.interpolateRound = interpolateRound;
+exports.interpolateString = interpolateString;
+exports.interpolateTransformCss = interpolateTransformCss;
+exports.interpolateTransformSvg = interpolateTransformSvg;
+exports.interpolateZoom = interpolateZoom;
+exports.interpolateRgb = interpolateRgb;
+exports.interpolateRgbBasis = rgbBasis;
+exports.interpolateRgbBasisClosed = rgbBasisClosed;
+exports.interpolateHsl = hsl$2;
+exports.interpolateHslLong = hslLong;
+exports.interpolateLab = lab$1;
+exports.interpolateHcl = hcl$2;
+exports.interpolateHclLong = hclLong;
+exports.interpolateCubehelix = cubehelix$2;
+exports.interpolateCubehelixLong = cubehelixLong;
+exports.interpolateBasis = basis$2;
+exports.interpolateBasisClosed = basisClosed$1;
+exports.quantize = quantize;
+exports.dispatch = dispatch;
+exports.dsvFormat = dsv;
+exports.csvParse = csvParse;
+exports.csvParseRows = csvParseRows;
+exports.csvFormat = csvFormat;
+exports.csvFormatRows = csvFormatRows;
+exports.tsvParse = tsvParse;
+exports.tsvParseRows = tsvParseRows;
+exports.tsvFormat = tsvFormat;
+exports.tsvFormatRows = tsvFormatRows;
+exports.request = request;
+exports.html = html;
+exports.json = json;
+exports.text = text;
+exports.xml = xml;
+exports.csv = csv$1;
+exports.tsv = tsv$1;
+exports.now = now;
+exports.timer = timer;
+exports.timerFlush = timerFlush;
+exports.timeout = timeout$1;
+exports.interval = interval$1;
+exports.timeInterval = newInterval;
+exports.timeMillisecond = millisecond;
+exports.timeMilliseconds = milliseconds;
+exports.timeSecond = second;
+exports.timeSeconds = seconds;
+exports.timeMinute = minute;
+exports.timeMinutes = minutes;
+exports.timeHour = hour;
+exports.timeHours = hours;
+exports.timeDay = day;
+exports.timeDays = days;
+exports.timeWeek = sunday;
+exports.timeWeeks = sundays;
+exports.timeSunday = sunday;
+exports.timeSundays = sundays;
+exports.timeMonday = monday;
+exports.timeMondays = mondays;
+exports.timeTuesday = tuesday;
+exports.timeTuesdays = tuesdays;
+exports.timeWednesday = wednesday;
+exports.timeWednesdays = wednesdays;
+exports.timeThursday = thursday;
+exports.timeThursdays = thursdays;
+exports.timeFriday = friday;
+exports.timeFridays = fridays;
+exports.timeSaturday = saturday;
+exports.timeSaturdays = saturdays;
+exports.timeMonth = month;
+exports.timeMonths = months;
+exports.timeYear = year;
+exports.timeYears = years;
+exports.utcMillisecond = millisecond;
+exports.utcMilliseconds = milliseconds;
+exports.utcSecond = second;
+exports.utcSeconds = seconds;
+exports.utcMinute = utcMinute;
+exports.utcMinutes = utcMinutes;
+exports.utcHour = utcHour;
+exports.utcHours = utcHours;
+exports.utcDay = utcDay;
+exports.utcDays = utcDays;
+exports.utcWeek = utcSunday;
+exports.utcWeeks = utcSundays;
+exports.utcSunday = utcSunday;
+exports.utcSundays = utcSundays;
+exports.utcMonday = utcMonday;
+exports.utcMondays = utcMondays;
+exports.utcTuesday = utcTuesday;
+exports.utcTuesdays = utcTuesdays;
+exports.utcWednesday = utcWednesday;
+exports.utcWednesdays = utcWednesdays;
+exports.utcThursday = utcThursday;
+exports.utcThursdays = utcThursdays;
+exports.utcFriday = utcFriday;
+exports.utcFridays = utcFridays;
+exports.utcSaturday = utcSaturday;
+exports.utcSaturdays = utcSaturdays;
+exports.utcMonth = utcMonth;
+exports.utcMonths = utcMonths;
+exports.utcYear = utcYear;
+exports.utcYears = utcYears;
+exports.formatLocale = formatLocale;
+exports.formatDefaultLocale = defaultLocale;
+exports.formatSpecifier = formatSpecifier;
+exports.precisionFixed = precisionFixed;
+exports.precisionPrefix = precisionPrefix;
+exports.precisionRound = precisionRound;
+exports.isoFormat = formatIso;
+exports.isoParse = parseIso;
+exports.timeFormatLocale = formatLocale$1;
+exports.timeFormatDefaultLocale = defaultLocale$1;
+exports.scaleBand = band;
+exports.scalePoint = point$4;
+exports.scaleIdentity = identity$4;
+exports.scaleLinear = linear$2;
+exports.scaleLog = log;
+exports.scaleOrdinal = ordinal;
+exports.scaleImplicit = implicit;
+exports.scalePow = pow;
+exports.scaleSqrt = sqrt;
+exports.scaleQuantile = quantile$$1;
+exports.scaleQuantize = quantize$1;
+exports.scaleThreshold = threshold$1;
+exports.scaleTime = time;
+exports.scaleUtc = utcTime;
+exports.schemeCategory10 = category10;
+exports.schemeCategory20b = category20b;
+exports.schemeCategory20c = category20c;
+exports.schemeCategory20 = category20;
+exports.scaleSequential = sequential;
+exports.interpolateCubehelixDefault = cubehelix$3;
+exports.interpolateRainbow = rainbow$1;
+exports.interpolateWarm = warm;
+exports.interpolateCool = cool;
+exports.interpolateViridis = viridis;
+exports.interpolateMagma = magma;
+exports.interpolateInferno = inferno;
+exports.interpolatePlasma = plasma;
+exports.creator = creator;
+exports.customEvent = customEvent;
+exports.local = local;
+exports.matcher = matcher$1;
+exports.mouse = mouse;
+exports.namespace = namespace;
+exports.namespaces = namespaces;
+exports.select = select;
+exports.selectAll = selectAll;
+exports.selection = selection;
+exports.selector = selector;
+exports.selectorAll = selectorAll;
+exports.touch = touch;
+exports.touches = touches;
+exports.window = window;
+exports.active = active;
+exports.interrupt = interrupt;
+exports.transition = transition;
+exports.axisTop = axisTop;
+exports.axisRight = axisRight;
+exports.axisBottom = axisBottom;
+exports.axisLeft = axisLeft;
+exports.cluster = cluster;
+exports.hierarchy = hierarchy;
+exports.pack = index;
+exports.packSiblings = siblings;
+exports.packEnclose = enclose;
+exports.partition = partition;
+exports.stratify = stratify;
+exports.tree = tree;
+exports.treemap = index$1;
+exports.treemapBinary = binary;
+exports.treemapDice = treemapDice;
+exports.treemapSlice = treemapSlice;
+exports.treemapSliceDice = sliceDice;
+exports.treemapSquarify = squarify;
+exports.treemapResquarify = resquarify;
+exports.forceCenter = center$1;
+exports.forceCollide = collide;
+exports.forceLink = link;
+exports.forceManyBody = manyBody;
+exports.forceSimulation = simulation;
+exports.forceX = x$3;
+exports.forceY = y$3;
+exports.drag = drag;
+exports.dragDisable = dragDisable;
+exports.dragEnable = yesdrag;
+exports.voronoi = voronoi;
+exports.zoom = zoom;
+exports.zoomIdentity = identity$6;
+exports.zoomTransform = transform;
+exports.brush = brush;
+exports.brushX = brushX;
+exports.brushY = brushY;
+exports.brushSelection = brushSelection;
+exports.chord = chord;
+exports.ribbon = ribbon;
+exports.geoAlbers = albers;
+exports.geoAlbersUsa = albersUsa;
+exports.geoArea = area$2;
+exports.geoAzimuthalEqualArea = azimuthalEqualArea;
+exports.geoAzimuthalEqualAreaRaw = azimuthalEqualAreaRaw;
+exports.geoAzimuthalEquidistant = azimuthalEquidistant;
+exports.geoAzimuthalEquidistantRaw = azimuthalEquidistantRaw;
+exports.geoBounds = bounds;
+exports.geoCentroid = centroid$1;
+exports.geoCircle = circle$1;
+exports.geoClipExtent = extent$1;
+exports.geoConicConformal = conicConformal;
+exports.geoConicConformalRaw = conicConformalRaw;
+exports.geoConicEqualArea = conicEqualArea;
+exports.geoConicEqualAreaRaw = conicEqualAreaRaw;
+exports.geoConicEquidistant = conicEquidistant;
+exports.geoConicEquidistantRaw = conicEquidistantRaw;
+exports.geoDistance = distance;
+exports.geoEquirectangular = equirectangular;
+exports.geoEquirectangularRaw = equirectangularRaw;
+exports.geoGnomonic = gnomonic;
+exports.geoGnomonicRaw = gnomonicRaw;
+exports.geoGraticule = graticule;
+exports.geoGraticule10 = graticule10;
+exports.geoIdentity = identity$8;
+exports.geoInterpolate = interpolate$2;
+exports.geoLength = length$2;
+exports.geoMercator = mercator;
+exports.geoMercatorRaw = mercatorRaw;
+exports.geoOrthographic = orthographic;
+exports.geoOrthographicRaw = orthographicRaw;
+exports.geoPath = index$3;
+exports.geoProjection = projection;
+exports.geoProjectionMutator = projectionMutator;
+exports.geoRotation = rotation;
+exports.geoStereographic = stereographic;
+exports.geoStereographicRaw = stereographicRaw;
+exports.geoStream = geoStream;
+exports.geoTransform = transform$1;
+exports.geoTransverseMercator = transverseMercator;
+exports.geoTransverseMercatorRaw = transverseMercatorRaw;
+
+Object.defineProperty(exports, '__esModule', { value: true });
+
+})));
+
+
+//aigner: HERE IS WHERE IT ALL STARTS!!!
+},{}],2:[function(require,module,exports){
+var d3 = require('d3');
+
+var PULSE_DURATION = 700;
+var SUB_ANIM_DELAY = 200;
+var ACTIVE_COLOR = d3.rgb("seagreen");
+
+function Animation(xdsms, rootId, delay) {
+  this.rootId = rootId;
+  if (typeof (rootId) === 'undefined') {
+    this.rootId = 'root';
+  }
+  this.root = xdsms[this.rootId];
+  this.xdsms = xdsms;
+  this.duration = PULSE_DURATION;
+  this.initialDelay = delay || 0;
+}
+
+Animation.prototype._pulse = function(delay, toBeSelected, option) {
+  var sel = d3.select("svg." + this.rootId)
+              .selectAll(toBeSelected)
+              .transition().delay(delay);
+  if (option !== "out") {
+    sel = sel.transition().duration(200)
+            .style('stroke-width', '8px')
+            .style('stroke', ACTIVE_COLOR)
+            .style('fill', function(d) {
+              if (d.id) {
+                return ACTIVE_COLOR.brighter();
+              }});
+  }
+  if (option !== "in") {
+    sel.transition().duration(3 * PULSE_DURATION)
+            .style('stroke-width', null)
+            .style('stroke', null)
+            .style('fill', null);
+  }
+};
+
+Animation.prototype._animate = function() {
+  var self = this;
+  var delay = this.initialDelay;
+  var animDelay = SUB_ANIM_DELAY;
+  var graph = self.xdsms[self.rootId].graph;
+  
+  var title = d3.select("svg." + self.rootId).select("g.title");
+  title.select("text").transition().delay(delay).style("fill", ACTIVE_COLOR);
+  d3.select("svg." + self.rootId).select("rect.border")
+    .transition().delay(delay)
+      .style("stroke-width", '5px').duration(200)
+    .transition().duration(1000)
+      .style("stroke", 'black').style("stroke-width", '0px');
+
+  graph.nodesByStep.forEach(function(nodesAtStep, n, nodesByStep) {
+    var offsets = [];
+    nodesAtStep.forEach(function(nodeId) {
+      var elapsed = delay + n * PULSE_DURATION;
+      if (n > 0) {
+        nodesByStep[n-1].forEach(function(prevNodeId) { // eslint-disable-line space-infix-ops
+          var from = graph.idxOf(prevNodeId);
+          var to = graph.idxOf(nodeId);
+          self._pulse(elapsed,"polyline.link_" + from + "_" + to);
+        });
+      }
+	  //aigner: Look for existing xdsms/Sub-xdsms. Only show those, which are expanded
+      var gnode = "g." + nodeId;
+      var nodeSel = d3.select("svg." + self.rootId).select(gnode);
+      var scnId = graph.getNode(nodeId).getScenarioId();
+	  if (nodeSel.classed("mdo") && self.xdsms[scnId]) 
+	  {
+          self._pulse(elapsed, gnode + " > rect", "in");
+          var anim = new Animation(self.xdsms, scnId, elapsed + animDelay);
+          var offset = anim._animate();
+          offsets.push(offset);
+          self._pulse(offset + elapsed + animDelay, gnode + " > rect", "out");
+      } 
+	  else 
+	  {
+          self._pulse(elapsed, gnode + " > rect");
+      }
+    }, this);
+
+    if (offsets.length > 0) {
+      delay += Math.max.apply(null, offsets);
+    }
+    delay += animDelay;
+  }, this);
+	
+  title.select("text").transition()
+    .delay(graph.nodesByStep.length * PULSE_DURATION + delay)
+    .style("fill", null);
+
+  return graph.nodesByStep.length * PULSE_DURATION;
+};
+
+Animation.prototype.run = function() {
+  this._animate();
+};
+
+module.exports = Animation;
+
+},{"d3":1}],3:[function(require,module,exports){
+var UID = "_U_";
+var MULTI_TYPE = "_multi";
+
+//aigner: Node() constructor additionally gets the "xdsm"
+function Node(xdsm, id, name, type, metadata) {
+	
+  var splitUndef = name.split("undefined: ")
+  if (splitUndef.length>1) {name=splitUndef[1]}
+  else {name=splitUndef[0]}
+  
+  if (typeof (name) === 'undefined') {
+    name = id;
+  }
+  if (typeof (type) === 'undefined') {
+    type = 'analysis';
+  }
+  this.xdsm = xdsm;
+  this.id = id;
+  this.name = name;
+  this.metadata = metadata;
+  this.isMulti = (type.search(/_multi$/) >= 0);
+  this.type = this.isMulti ?
+    type.substr(0, type.length - MULTI_TYPE.length) : type;
+}
+
+Node.prototype.isMdo = function() {
+  return this.type === "mdo";
+};
+
+Node.prototype.getScenarioId = function() {
+  if (this.isMdo()) {
+    var idxscn = this.name.indexOf("_scn-");
+    if (idxscn === -1) {
+      console.log("Warning: MDO Scenario not found. " +
+                  "Bad type or name for node: " + JSON.stringify(this));
+      return null;
+    }
+    return this.name.substr(idxscn + 1);
+  }
+  return null;
+};
+
+function Edge(from, to, name, row, col, isMulti) {
+  this.id = "link_" + from + "_" + to;
+  this.name = name;
+  this.row = row;
+  this.col = col;
+  this.iotype = row < col ? "in" : "out";
+  this.io = {
+    fromU: (from === UID),
+    toU: (to === UID)
+  };
+  this.from = from;
+  this.to = to;
+  this.isMulti = isMulti;
+}
+
+Edge.prototype.isIO = function() {
+  return this.io.fromU || this.io.toU;
+};
+
+//aigner: Function creates the xdsm graph
+function Graph(mdo, refname) {
+  this.nodes = [new Node(UID, UID, UID, "user",[])];
+  this.edges = [];
+  this.chains = [];
+  this.refname = refname || "";
+  
+  //aigner: New numbering due to new workflow definition in KADMOS (Old stuff commented out)
+  var numbering = Graph.new_number(mdo.workflow);
+  //var numbering = Graph.number(mdo.workflow);
+  var numPrefixes = numbering.toNum;
+  this.nodesByStep = numbering.toNode;
+
+  mdo.nodes.forEach(function(item) {
+    name = document.createElement("TEXTAREA");
+    name = numPrefixes[item.id] + ": " + item.name;
+    this.nodes.push(new Node(item.xdsm, item.id, name, item.type,item.metadata));    
+  }, this);
+
+  this.ids = this.nodes.map(function(elt) {
+    return elt.id;
+  });
+  
+  mdo.edges.forEach(function(item) {
+    var idA = this.idxOf(item.from);
+    var idB = this.idxOf(item.to);
+	
+    var isMulti = this.nodes[idA].isMulti || this.nodes[idB].isMulti;
+    this.edges.push(new Edge(item.from, item.to, item.name, idA, idB, isMulti));
+  }, this);
+
+  
+  //aigner: new chains with new workflow definition for KADMOS (Old stuff commented out)
+  this.chains = Graph.new_expand(mdo.workflow,mdo.nodes);
+  // var echain = Graph.expand(mdo.workflow); 
+  // echain.forEach(function(leafChain) {
+    // if (leafChain.length < 2) {
+      // throw new Error("Bad process chain (" + leafChain.length + "elt)");
+    // } else {
+      // this.chains.push([]);
+      // var ids = this.nodes.map(function(elt) {
+        // return elt.id;
+      // });
+      // leafChain.forEach(function(item, j) {
+        // if (j !== 0) {
+          // var idA = ids.indexOf(leafChain[j - 1]);
+          // if (idA < 0) {
+            // throw new Error("Process chain element (" +
+                            // leafChain[j - 1] + ") not found");
+          // }
+          // var idB = ids.indexOf(leafChain[j]);
+          // if (idB < 0) {
+            // throw new Error("Process chain element (" +
+                            // leafChain[j] + ") not found");
+          // }
+          // if (idA !== idB) {
+            // this.chains[this.chains.length - 1].push([idA, idB]);
+          // }
+        // }
+      // }, this);
+    // }
+  // }, this);
+  
+  
+}
+
+Graph.prototype.idxOf = function(nodeId) {
+  return this.ids.indexOf(nodeId);
+};
+Graph.prototype.getNode = function(nodeId) {
+  return this.nodes[this.ids.indexOf(nodeId)];
+};
+
+function _expand(workflow) {
+  var ret = [];
+  var prev;
+  workflow.forEach(function(item) {
+    if (item instanceof Array) {
+      if (item[0].hasOwnProperty('parallel')) {
+        if (prev) {
+          ret = ret.slice(0, ret.length - 1).concat(item[0].parallel.map(
+              function(elt) {
+                return [prev].concat(_expand([elt]), prev);
+              }));
+        } else {
+          throw new Error("Bad workflow structure : " +
+              "cannot parallel loop without previous starting point.");
+        }
+      } else if (prev) {
+        ret = ret.concat(_expand(item), prev);
+      } else {
+        ret = ret.concat(_expand(item));
+      }
+      prev = ret[ret.length - 1];
+    } else if (item.hasOwnProperty('parallel')) {
+      if (prev) {
+        ret = ret.slice(0, ret.length - 1).concat(
+            item.parallel.map(function(elt) {
+              return [prev].concat(_expand([elt]));
+            }));
+      } else {
+        ret = ret.concat(item.parallel.map(
+            function(elt) {
+              return _expand([elt]);
+            }));
+      }
+      prev = undefined;
+    } else {
+      var i = ret.length - 1;
+      var flagParallel = false;
+      while (i >= 0 && (ret[i] instanceof Array)) {
+        ret[i] = ret[i].concat(item);
+        i -= 1;
+        flagParallel = true;
+      }
+      if (!flagParallel) {
+        ret.push(item);
+      }
+      prev = item;
+    }
+  }, this);
+  return ret;
+}
+
+Graph.expand = function(item) {
+  var expanded = _expand(item);
+  var result = [];
+  var current = [];
+  expanded.forEach(function(elt) {
+    if (elt instanceof Array) {
+      if (current.length > 0) {
+        current.push(elt[0]);
+        result.push(current);
+        current = [];
+      }
+      result.push(elt);
+    } else {
+      if (result.length > 0 && current.length === 0) {
+        var lastChain = result[result.length - 1];
+        var lastElt = lastChain[lastChain.length - 1];
+        current.push(lastElt);
+      }
+      current.push(elt);
+    }
+  }, this);
+  if (current.length > 0) {
+    result.push(current);
+  }
+  return result;
+};
+
+Graph.new_expand = function(workflow,nodes) {
+	var ids = nodes.map(function(elt) {
+        return elt.id;
+	});
+	var result_tmp = [];
+	for (var i=0; i < workflow.length; i++)
+	{
+		var stepNumber = workflow[i].step_number
+		var edges = workflow[i].edges;
+		for (var j=0; j < edges.length; j++)
+		{
+			var fromNode = edges[j][0];
+			var toNode = edges[j][1];			
+			var fromId = ids.indexOf(fromNode)+1;
+			var toId = ids.indexOf(toNode)+1;
+			result_tmp.push([fromId,toId]);
+		}
+	}
+	var result = [];
+	result.push(result_tmp)
+	return result;
+};
+
+Graph.number = function(workflow, num) {
+  num = (typeof num === 'undefined') ? 0 : num;
+  var toNum = {};
+  var toNode = [];
+
+  function setStep(step, nodeId) {
+    if (step in toNode) {
+      toNode[step].push(nodeId);
+    } else {
+      toNode[step] = [nodeId];
+    }
+  }
+
+  function setNum(nodeId, beg, end) {
+    if (end === undefined) {
+      num = String(beg);
+      setStep(beg, nodeId);
+    } else {
+      num = end + "-" + beg;
+      setStep(end, nodeId);
+    }
+    if (nodeId in toNum) {
+      toNum[nodeId] += "," + num;
+    } else {
+      toNum[nodeId] = num;
+    }
+  }
+
+  function _number(wks, num) {
+    var ret = 0;
+    if (wks instanceof Array) {
+      if (wks.length === 0) {
+        ret = num;
+      } else if (wks.length === 1) {
+        ret = _number(wks[0], num);
+      } else {
+        var head = wks[0];
+        var tail = wks.slice(1);
+        var beg = _number(head, num);
+        if (tail[0] instanceof Array) {
+          var end = _number(tail[0], beg);
+          setNum(head, beg, end);
+          beg = end + 1;
+          tail.shift();
+        }
+        ret = _number(tail, beg);
+      }
+    } else if ((wks instanceof Object) && 'parallel' in wks) {
+      var nums = wks.parallel.map(function(branch) {
+        return _number(branch, num);
+      });
+      ret = Math.max.apply(null, nums);
+    } else {
+      setNum(wks, num);
+      ret = num + 1;
+    }
+    return ret;
+  }
+
+  _number(workflow, num);
+  // console.log('toNodes=', JSON.stringify(toNode));
+  // console.log('toNum=',JSON.stringify(toNum));
+  return {toNum: toNum, toNode: toNode};
+};
+
+//aigner: New numbering for the workflow nodes
+Graph.new_number = function(workflow, num) {
+	num = (typeof num === 'undefined') ? 0 : num;
+	var toNum = {};
+	var toNode = [];
+	
+	for (var i=0; i < workflow.length; i++)
+	{
+		//aigner: Number the nodes with respect to the defined process steps
+		//--> toNum
+		//##########################################
+		for (var j=0; j < workflow[i].process_step_blocks.length; j++)
+		{
+			var proc_id_to = workflow[i].process_step_blocks[j];
+			if (proc_id_to)
+			{
+
+				if (!toNum[proc_id_to])
+				{
+					toNum[proc_id_to] = workflow[i].step_number;
+				}
+				else
+				{
+					toNum[proc_id_to] += "," + workflow[i].step_number;
+				}
+			}
+		}
+		for (var j=0; j < workflow[i].converger_step_blocks.length; j++)
+		{
+			var conv_id_to = workflow[i].converger_step_blocks[j];
+			if (conv_id_to)
+			{
+				toNum[conv_id_to] += "," + workflow[i].step_number;
+				var stepID = parseInt(toNum[conv_id_to].split(',')[0])+1;
+				//aigner: CAUTION --> hard coded exception for coordinator
+				if (conv_id_to!="id_Coordinator"){toNum[conv_id_to] += "-" + stepID;}
+			}
+		}
+		//##########################################		
+		//--> toNode
+		//##########################################
+		var stepNumber = workflow[i].step_number
+		var nodeId;
+		if (stepNumber==0){nodeId = [workflow[i].process_step_blocks[0]];}
+		else
+		{
+			var nodeIds = [];
+			for (var j=0; j<workflow[i].edges.length ;j++)
+			{
+				nodeIds.push(workflow[i].edges[j][1]);
+			}
+			nodeId = nodeIds;
+		}
+		toNode[stepNumber] = nodeId;
+		//##########################################
+	}	
+	return {toNum: toNum, toNode: toNode};
+};
+
+module.exports = Graph;
+
+},{}],4:[function(require,module,exports){
+function Labelizer() {}
+
+Labelizer.strParse = function(str) {
+  if (str === "") {
+    return [{base: '', sub: undefined, sup: undefined}];
+  }
+
+  //console.log("STR-->")
+  //console.log(str);
+  //aigner: Space sign added
+  var lstr = str.split(',');
+  var underscores = /_/g;
+  var rg = /([0-9\-]+: )?([A-Za-z0-9\{\}\(\)\[\]\-\.]+)(_[A-Za-z0-9\-\._]+)?(\^.+)?/;
+
+  var res = lstr.map(function(s) {
+    var base;
+    var sub;
+    var sup;
+	
+	//aigner: Modification. xpath is split after each "/"
+	var s_split = s.split("/");
+	s = s_split[s_split.length-1];
+
+    if ((s.match(underscores) || []).length > 1) {
+      var mu = s.match(/(.+)^(.+)/);
+      if (mu) {
+        return {base: mu[1], sub: undefined, sup: mu[2]};
+      }
+      return {base: s, sub: undefined, sup: undefined};
+    }
+    var m = s.match(rg);
+    if (m) {
+      base = (m[1] ? m[1] : "") + m[2];
+      if (m[3]) {
+        sub = m[3].substring(1);
+      }
+      if (m[4]) {
+        sup = m[4].substring(1);
+      }
+    } else {
+      throw new Error("Labelizer.strParse: Can not parse '" + s + "'");
+    }
+    return {base: base, sub: sub, sup: sup};
+  }, this);
+ 
+  return res;
+};
+
+Labelizer.labelize = function() {
+  var ellipsis = 0;
+
+  //aigner: createLabel modified. Hide variable names if too long.
+  function createLabel(selection) 
+  {
+    selection.each(function(d) {
+		//console.log("Labelize-->");
+		//console.log(d);
+      var tokens = Labelizer.strParse(d.name);
+      var text = selection.append("text");
+
+      var className = selection._groups[0][0].getAttribute("class");
+
+      if (className.includes("node"))
+      {
+        tokens.every(function(token, i, ary)
+        {
+            var offsetSub = 0;
+            var offsetSup = 0;
+            //aigner: If the node is too big, it will not be shown at first, only when hovering
+			if (ellipsis < 1 || i < 15) 
+			{
+				text.append("tspan").text(token.base);
+				if (token.sub) 
+				{
+				offsetSub = 10;
+				text.append("tspan")
+				  .attr("class", "sub")
+				  .attr("dy", offsetSub)
+				  .text(token.sub);
+				}
+				if (token.sup) {
+					offsetSup = -10;
+					text.append("tspan")
+					  .attr("class", "sup")
+					  .attr("dx", -5)
+					  .attr("dy", -offsetSub + offsetSup)
+					  .text(token.sup);
+					offsetSub = 0;
+				}
+			} else 
+			{
+				text.append("tspan")
+					.attr("dy", -offsetSub - offsetSup)
+					.text("...");
+				selection.classed("ellipsized", true);
+				return false;
+            }
+			if (i < ary.length - 1) 
+			{
+				  text.append("tspan")
+					.attr("dy", -offsetSub - offsetSup)
+					.text(", ");
+			}
+            return true;
+        }, this);
+      }
+      else if(className.includes("edge"))
+      {	  
+            var offsetSub = 0;
+            var offsetSup = 0;
+            //aigner: If there are more than 5 variables in an edge, they are not shown!
+			tokens.every(function(token, i, ary)
+			{           			
+				if(d.io.fromU || d.from =="id_Coordinator"){text_tmp = "inp."}
+				else if(d.io.toU || d.to=="id_Coordinator"){text_tmp = "outp."}
+				else{text_tmp = "conn."}
+				//if (ary.length>1){text_tmp = text_tmp+"s"};
+				text.append("tspan")
+				.attr("dy", -offsetSub - offsetSup)
+				.text(ary.length + " " + text_tmp);                    
+				
+				selection.classed("ellipsized", true);
+				return false;
+			}, this);
+      }
+    });
+  }
+
+  createLabel.ellipsis = function(value) {  
+    if (!arguments.length) {
+      return ellipsis;
+    }
+    ellipsis = value;
+    return createLabel;
+  };
+
+  return createLabel;
+};
+
+Labelizer.tooltipize = function() {
+  var text = "";
+
+  function createTooltip(selection) {
+    var tokens = Labelizer.strParse(text);
+    var html = [];
+    tokens.forEach(function(token) {
+      var item = token.base;
+      if (token.sub) {
+        item += "<sub>" + token.sub + "</sub>";
+      }
+      if (token.sup) {
+        item += "<sup>" + token.sup + "</sup>";
+      }
+      html.push(item);
+    }, this);
+    selection.html(html.join(", "));
+  }
+
+  createTooltip.text = function(value) {
+    if (!arguments.length) {
+      return text;
+    }
+    text = value;
+    return createTooltip;
+  };
+
+  return createTooltip;
+};
+
+module.exports = Labelizer;
+
+},{}],5:[function(require,module,exports){
+var d3 = require('d3');
+var Labelizer = require('./labelizer.js');
+
+var WIDTH = 1000;
+var HEIGHT = 500;
+var X_ORIG = 70;
+var Y_ORIG = 20;
+var PADDING = 20;
+var CELL_W = 250;
+var CELL_H = 75;
+var MULTI_OFFSET = 3;
+
+function Cell(x, y, width, height) {
+  this.x = x;
+  this.y = y;
+  this.width = width;
+  this.height = height;
+}
+
+function Xdsm(graph, svgid, tooltip) {
+  this.graph = graph;
+  this.tooltip = tooltip;
+  this.svg = d3.select(".xdsm")
+               .append("svg")
+             .attr("width", WIDTH)
+             .attr("height", HEIGHT)
+             .attr("class", svgid);
+
+  this.grid = [];
+  this.nodes = [];
+  this.edges = [];
+}
+
+Xdsm.prototype.draw = function(graphName) {
+  var self = this;
+
+  if (self.graph.refname) {
+    var ref = self.svg.append('g').classed('title', true);
+
+	var text_tmp = self.graph.refname.replace(/\w/g, function(l){ return l.toUpperCase() })
+		
+    ref.append("text").text(graphName);
+    var bbox = ref.nodes()[0].getBBox();
+    ref.insert("rect", "text")
+        .attr('x', bbox.x)
+        .attr('y', bbox.y)
+        .attr('width', bbox.width)
+        .attr('height', bbox.height);
+
+    ref.attr('transform',
+             'translate(' + X_ORIG + ',' + (Y_ORIG + bbox.height-10) + ')');
+  }
+
+  self.nodes = self._createTextGroup("node");
+  self.edges = self._createTextGroup("edge");
+
+  // Workflow
+  self._createWorkflow();
+
+  // Layout texts
+  self._layoutText(self.nodes);
+  self._layoutText(self.edges);
+
+  // Rectangles for nodes
+  self.nodes.each(function(d, i) {
+    var that = d3.select(this);
+    that.call(self._customRect.bind(self), d, i, 0);
+    if (d.isMulti) {
+      that.call(self._customRect.bind(self), d, i, 1 * Number(MULTI_OFFSET));
+      that.call(self._customRect.bind(self), d, i, 2 * Number(MULTI_OFFSET));
+    }
+  });
+
+  // Trapezium for edges
+  self.edges.each(function(d, i) {
+    var that = d3.select(this);
+    that.call(self._customTrapz.bind(self), d, i, 0);
+    if (d.isMulti) {
+      that.call(self._customTrapz.bind(self), d, i, 1 * Number(MULTI_OFFSET));
+      that.call(self._customTrapz.bind(self), d, i, 2 * Number(MULTI_OFFSET));
+    }
+  });
+
+  // Dataflow
+  self._createDataflow(self.edges);
+	
+  //aigner: set svg size
+  var w = CELL_W * (self.graph.nodes.length + 1);
+  var h = CELL_H * (self.graph.nodes.length + 1);
+  self.svg.attr("width", w).attr("height", h);
+
+  var bordercolor = 'black';
+  self.svg.append("rect")
+            .classed("border", true)
+            .attr("x", 4)
+            .attr("y", 4)
+            .attr("height", h - 4)
+            .attr("width", w - 4)
+            .style("stroke", bordercolor)
+            .style("fill", "none")
+            .style("stroke-width", 0);
+			
+  //aigner: PlayButton for animation
+  var playButton = self.svg.append("g").attr("class", "playButton")
+      .attr("transform", "translate("+ 10 +","+ 10 +")");
+  playButton
+    .append("rect")
+	  .attr("class", "playButton_rect")
+      .attr("width", 50)
+      .attr("height", 50)
+      .attr("rx", 4)
+      .style("fill", "#666666");
+  playButton
+    .append("path")
+	  .attr("class", "playButton_triangle")
+      .attr("d", "M15 10 L15 40 L35 25 Z")
+      .style("fill", "white");
+  //aigner: Hide playbutton if there is no workflow process
+  if(self.graph.nodesByStep.length<1)
+  {
+	  playButton.attr("visibility","hidden");
+  }
+};
+
+Xdsm.prototype._createTextGroup = function(kind) {
+  var self = this;
+
+  var group = self.svg.append('g').attr("class", kind + "s");
+
+  var textGroups =
+    group.selectAll("." + kind)
+      .data(this.graph[kind + "s"])
+    .enter()
+      .append("g").attr("class", function(d) {
+        var klass = kind === "node" ? d.type : "dataInter";
+        if (klass === "dataInter" && (d.isIO()||d.from=="id_Coordinator"||d.to=="id_Coordinator")) {
+          klass = "dataIO";
+        }
+        return d.id + " " + kind + " " + klass;
+      }).each(function() {
+        var labelize = Labelizer.labelize().ellipsis(5);
+        d3.select(this).call(labelize);
+      });
+
+  d3.selectAll(".ellipsized")
+    .on("mouseover", function(d) {
+		d3.select(this).style("cursor", "pointer")
+		self.tooltip.transition().duration(200).style("opacity", 0.9);
+		var pipeData = d.name.split(",");
+		var pipeVariables=[];
+		for (var i=0; i<pipeData.length; i++)
+		{
+			if (pipeData[i].includes("/"))
+			{
+				var splitPipeData = pipeData[i].split("/");
+				pipeVariables.push(splitPipeData[splitPipeData.length-1]);
+			}
+		}
+		
+
+		var pruned_pipeVars = {};
+		var tooltipText="";
+		pipeVariables.forEach(function(x) { pruned_pipeVars[x] = (pruned_pipeVars[x] || 0)+1; });
+		for(var keyName in pruned_pipeVars) {
+			var textTmp;
+			var value = pruned_pipeVars[keyName]
+			if (value>1){textTmp = String(keyName+"("+value+")")}
+			else{textTmp=String(keyName)}
+			if (tooltipText==""){tooltipText+=textTmp}
+			else{tooltipText+=","+textTmp}
+		}
+		
+		var tooltipize = Labelizer.tooltipize().text(tooltipText);
+		self.tooltip.call(tooltipize)
+		  .style("width", "200px")
+		  .style("left", (d3.event.pageX) + "px")
+		  .style("top", (d3.event.pageY - 28) + "px");
+	})
+	.on("mouseout", function() {
+		self.tooltip.transition().duration(500).style("opacity", 0);
+	});
+
+  return textGroups;
+};
+
+Xdsm.prototype._createWorkflow = function() {
+  //  console.log(JSON.stringify(this.graph.chains));
+  var workflow = this.svg.insert("g", ":first-child")
+                    .attr("class", "workflow");
+  workflow.selectAll("g")
+    .data(this.graph.chains)
+  .enter()
+    .insert('g').attr("class", "workflow-chain")
+    .selectAll('polyline')
+      .data(function(d) { return d; })  // eslint-disable-line brace-style
+    .enter()
+      .append("polyline")
+        .attr("class", function(d) {
+          return "link_" + d[0] + "_" + d[1];
+        })
+        .attr("points", function(d) {
+          var w = CELL_W * Math.abs(d[0] - d[1]);
+          var h = CELL_H * Math.abs(d[0] - d[1]);
+          var points = [];
+          if (d[0] < d[1]) {
+            if (d[0] !== 0) {
+              points.push((-w) + ",0");
+            }
+            points.push("0,0");
+            if (d[1] !== 0) {
+              points.push("0," + h);
+            }
+          } else {
+            if (d[0] !== 0) {
+              points.push(w + ",0");
+            }
+            points.push("0,0");
+            if (d[1] !== 0) {
+              points.push("0," + (-h));
+            }
+          }
+          return points.join(" ");
+        })
+      .attr("transform", function(d) {
+        var max = Math.max(d[0], d[1]);
+        var min = Math.min(d[0], d[1]);
+        var w;
+        var h;
+        if (d[0] < d[1]) {
+          w = CELL_W * max + X_ORIG;
+          h = CELL_H * min + Y_ORIG;
+        } else {
+          w = CELL_W * min + X_ORIG;
+          h = CELL_H * max + Y_ORIG;
+        }
+        return "translate(" + (X_ORIG + w) + "," + (Y_ORIG + h) + ")";
+      });
+};
+
+Xdsm.prototype._createDataflow = function(edges) {
+  var dataflow = this.svg.insert("g", ":first-child")
+                   .attr("class", "dataflow");
+
+  edges.each(function(d, i) {
+    dataflow.insert("polyline", ":first-child")
+      .attr("points", function() {
+        var w = CELL_W * Math.abs(d.col - d.row);
+        var h = CELL_H * Math.abs(d.col - d.row);
+        var points = [];
+        if (d.iotype === "in") {
+          if (!d.io.fromU) {
+            points.push((-w) + ",0");
+          }
+          points.push("0,0");
+          if (!d.io.toU) {
+            points.push("0," + h);
+          }
+        } else {
+          if (!d.io.fromU) {
+            points.push(w + ",0");
+          }
+          points.push("0,0");
+          if (!d.io.toU) {
+            points.push("0," + (-h));
+          }
+        }
+        return points.join(" ");
+      }).attr("transform", function() {
+        var m = (d.col === undefined) ? i : d.col;
+        var n = (d.row === undefined) ? i : d.row;
+        var w = CELL_W * m + X_ORIG;
+        var h = CELL_H * n + Y_ORIG;
+        return "translate(" + (X_ORIG + w) + "," + (Y_ORIG + h) + ")";
+      });
+  });
+};
+
+Xdsm.prototype._layoutText = function(items) {
+  var grid = this.grid;
+  items.each(function(d, i) {
+    var item = d3.select(this);
+    if (grid[i] === undefined) {
+      grid[i] = new Array(items.length);
+    }
+    item.select("text").each(function(d, j) {
+      var that = d3.select(this);
+      var data = item.data()[0];
+      var m = (data.row === undefined) ? i : data.row;
+      var n = (data.col === undefined) ? i : data.col;
+      var bbox = that.nodes()[j].getBBox();
+      grid[m][n] = new Cell(-bbox.width / 2, 0, bbox.width, bbox.height);
+      that.attr("x", function() {
+        return grid[m][n].x;
+      }).attr("y", function() {
+        return grid[m][n].y;
+      }).attr("width", function() {
+        return grid[m][n].width;
+      }).attr("height", function() {
+        return grid[m][n].height;
+      });
+    });
+  });
+
+  items.attr("transform", function(d, i) {
+    var m = (d.col === undefined) ? i : d.col;
+    var n = (d.row === undefined) ? i : d.row;
+    var w = CELL_W * m + X_ORIG;
+    var h = CELL_H * n + Y_ORIG;
+    return "translate(" + (X_ORIG + w) + "," + (Y_ORIG + h) + ")";
+  });
+};
+
+Xdsm.prototype._customRect = function(node, d, i, offset) {
+  var grid = this.grid;
+  node.insert("rect", ":first-child").attr("x", function() {
+    return grid[i][i].x + offset - PADDING;
+  }).attr("y", function() {
+    return -grid[i][i].height * 2 / 3 - PADDING - offset;
+  }).attr("width", function() {
+    return grid[i][i].width + (PADDING * 2);
+  }).attr("height", function() {
+    return grid[i][i].height + (PADDING * 2);
+  }).attr("rx", function() {
+    var rounded = d.type === 'optimization' ||
+                  d.type === 'mda' ||
+                  d.type === 'doe' ||
+		          d.type === 'converger';
+    return rounded ? (grid[i][i].height + (PADDING * 2)) / 2 : 0;
+  }).attr("ry", function() {
+    var rounded = d.type === 'optimization' ||
+                  d.type === 'mda' ||
+                  d.type === 'doe' ||
+		          d.type === 'converger';
+    return rounded ? (grid[i][i].height + (PADDING * 2)) / 2 : 0;
+  });
+};
+
+Xdsm.prototype._customTrapz = function(edge, d, i, offset) {
+  var grid = this.grid;
+  edge.insert("polygon", ":first-child").attr("points", function(d) {
+    var pad = 5;
+    var w = grid[d.row][d.col].width;
+    var h = grid[d.row][d.col].height;
+    var topleft = (-pad - w / 2 + offset) + ", " +
+                  (-pad - h * 2 / 3 - offset);
+    var topright = (w / 2 + pad + offset + 5) + ", " +
+                   (-pad - h * 2 / 3 - offset);
+    var botright = (w / 2 + pad + offset - 5 + 5) + ", " +
+                   (pad + h / 3 - offset);
+    var botleft = (-pad - w / 2 + offset - 5) + ", " +
+                  (pad + h / 3 - offset);
+    var tpz = [topleft, topright, botright, botleft].join(" ");
+    return tpz;
+  });
+};
+
+module.exports = Xdsm;
+
+},{"./labelizer.js":4,"d3":1}],6:[function(require,module,exports){
+/*
+ * XDSMjs
+ * Copyright 2016 Rémi Lafage
+ */
+"use strict";
+
+
+
+
+var d3 = require('d3');
+var Graph = require('./src/graph');
+var Xdsm = require('./src/xdsm');
+var Animation = require('./src/animation');
+
+
+//aigner: NEW!
+//#####################################################################//
+//aigner: functions for drawing expand- and collapse-symbols
+function drawExpandSymbol(aCircle, line1, line2)
+{        
+     aCircle = aCircle
+        .attr("r", 10)
+        .style("stroke", "black")
+        .style("stroke-width", 2)
+        .style("fill", "green")
+        .style("fill-opacity", .6)
+    line1 = line1
+        .attr("x1", parseFloat(aCircle.attr("cx"))-5)
+        .attr("y1", parseFloat(aCircle.attr("cy")))
+        .attr("x2", parseFloat(aCircle.attr("cx"))+5)
+        .attr("y2", parseFloat(aCircle.attr("cy")))
+        .style("stroke", "black")
+        .style("stroke-width", 2);
+    line2 = line2
+        .attr("x1", parseFloat(aCircle.attr("cx")))
+        .attr("y1", parseFloat(aCircle.attr("cy"))-5)
+        .attr("x2", parseFloat(aCircle.attr("cx")))
+        .attr("y2", parseFloat(aCircle.attr("cy"))+5)
+        .style("stroke", "black")
+        .style("stroke-width", 2);
+}
+function drawRemoveSymbol(anXdsm, aCircle, aMinus)
+{        
+     var xOffset=150;
+     var yOffset=12;
+     aCircle = aCircle
+        .attr("cx", anXdsm.svg.attr("width")-xOffset)
+        .attr("cy", yOffset)
+        .attr("r", 10)
+		.classed("remCircle",true)
+    aMinus = aMinus
+        .attr("x1", anXdsm.svg.attr("width")-xOffset+5)
+        .attr("y1", yOffset)
+        .attr("x2", anXdsm.svg.attr("width")-xOffset-5)
+        .attr("y2", yOffset)
+		.classed("remMinus",true)
+}
+function drawTreeRemoveSymbol(aRemoveSymbol)
+{
+	aRemoveSymbol = aRemoveSymbol
+		.attr("class", "treeRemoveSymbol")
+		.attr("transform", "translate(38,12)")
+	var circle = aRemoveSymbol.append("circle");
+	var minus = aRemoveSymbol.append("line");
+	var cx = -20;
+	var cy = 12;
+	circle = circle
+		.attr("cx", cx+5)
+		.attr("cy", cy)
+		.attr("r", 10)
+		.classed("remCircle",true)
+	minus = minus
+		.attr("x1", cx)
+		.attr("y1", cy)
+		.attr("x2", cx+10)
+		.attr("y2", cy)
+		.classed("remMinus",true)
+	aRemoveSymbol
+		.on("mouseover", function(){
+			d3.select(this).style("cursor", "pointer")
+			circle.style("fill", "red").style("fill-opacity", .8);
+			})
+		.on("mouseout", function(){circle.style("fill", "red").style("fill-opacity", .6)})
+}
+
+//aigner: Update of the sub workflows
+function update_subXdsm(xdsms, refName)
+{
+	var playButton = d3.select(".xdsm").select("."+refName).select(".playButton");
+	var rect = playButton.select(".playButton_rect");
+	playButton.on("mouseover",function(){
+			d3.select(this).style("cursor", "pointer")
+			rect.style("fill","#3399FF");
+		})
+		.on("mousedown", function()
+		{
+			rect.style("fill","#3399FF");
+			var anim = new Animation(xdsms, refName);
+			anim.run();
+		})
+		.on("mouseup", function(){rect.style("fill","#4B4B4B");})
+		.on("mouseout", function(){rect.style("fill","#666666");})
+}
+//d3-context-menu for right-click-option
+d3.contextMenu = function (menu, openCallback) {
+
+	// create the div element that will hold the context menu
+	d3.selectAll('.d3-context-menu').data([1])
+		.enter()
+		.append('div')
+		.attr('class', 'd3-context-menu');
+
+	// close menu
+	d3.select('body').on('click.d3-context-menu', function() {
+		d3.select('.d3-context-menu').style('display', 'none');
+	});
+
+	// this gets executed when a contextmenu event occurs
+	return function(data, index) {	
+		var elm = this;
+
+		d3.selectAll('.d3-context-menu').html('');
+		var list = d3.selectAll('.d3-context-menu').append('ul');
+	       	list.selectAll('li').data(menu).enter()
+			.append('li')
+			.html(function(d) {
+				return d.title;
+			})
+			.on('mousedown', function(d, i) {
+				d.onMouseDown(elm, data, index);
+			})
+			.on('mouseup', function(d, i) {
+				d.onMouseUp(elm, data, index);
+				d3.select('.d3-context-menu').style('display', 'none');
+			})
+            .on('mouseenter',function(d,i){
+                d.onMouseOver(elm,data,index);
+                if(d.childrenItems.length>0 )
+                     {
+                      d3.select(this).selectAll("ul").remove(); 
+                      d3.select(this)
+                        .append("ul")
+                        .selectAll("li")
+                           .data(d.childrenItems)
+                            .enter().append("li")
+                              .text(function(d) { return d.title; })
+                         .on("mouseenter", function(d,i){
+                                d.onMouseOver(elm,data,index);
+                            })
+                         .on('click',  function(d, i) {
+                                d.onMouseClick(elm, d, index);
+                            })
+                         .on('mouseleave',function(d,i){
+                            
+                            });
+                     }
+                 else
+                     return false;
+            })
+            .on('mouseleave',function(d,i){
+                d3.select(this).selectAll("ul").style('display', 'none')                  
+            });
+        
+          
+
+		// the openCallback allows an action to fire before the menu is displayed
+		// an example usage would be closing a tooltip
+		if (openCallback) openCallback(data, index);
+
+		// display context menu
+		d3.select('.d3-context-menu')
+			.style('left', (d3.event.pageX - 2) + 'px')
+			.style('top', (d3.event.pageY - 2) + 'px')
+			.style('display', 'block');
+
+		d3.event.preventDefault();
+	};
+};
+//aigner: Move to front function
+d3.selection.prototype.moveToFront = function() {  
+  return this.each(function(){
+	this.parentNode.appendChild(this);
+  });
+};
+//aigner: Include function
+function include(arr,obj) {
+		return (arr.indexOf(obj) != -1);
+}
+
+//aigner: Make KADMOS Menu
+//#####################################################################//
+function makeKadmosMenu(theGraphs,currentView,currentID)
+{
+	var imageWidth = 200;
+	var imageHeight = 150;
+	var padding = 10;
+	var rectHeight = 70;
+	var imgSize = 40;
+	var visPackDiv = d3.select("body").append("div").attr("class","vispackDiv");
+	var visPackSvg = visPackDiv.append("svg")
+		.attr("class","visPackSvg")
+		.attr("width",imageWidth*5+40)
+		.attr("height",imageHeight+40)
+		.attr("transform", "translate("
+		  + String(10) + "," + String(10) + ")")			  
+	
+	
+	var defs = visPackSvg.append("defs");
+	var filter = defs.append("filter")
+		.attr("id", "drop-shadow")
+		.attr("height", "130%")
+	filter.append("feColorMatrix")
+		.attr("values", "0.2 0 0 0 0 0 0.2 0 0 0 0 0 0.2 0 0 0 0 0 1 0")
+		.attr("result", "matrixOut")
+	filter.append("feGaussianBlur")
+		.attr("in", "matrixOut")
+		.attr("stdDeviation", 5)
+		.attr("result", "blur")
+	filter.append("feOffset")
+		.attr("in", "blur")
+		.attr("dx", 5)
+		.attr("dy", 5)
+		.attr("result", "offsetBlur")
+	var feMerge = filter.append("feMerge");
+	feMerge.append("feMergeNode")
+		.attr("in", "offsetBlur")
+	feMerge.append("feMergeNode")
+		.attr("in", "SourceGraphic");
+	
+	var visPackFrame = visPackSvg.append("rect")
+		.attr("width",imageWidth*5+12)
+		.attr("height",imageHeight)
+		.attr("fill", "white")
+		.style("filter", "url(#drop-shadow)")
+	
+	var imgs = visPackSvg.selectAll("image").data([0]);
+		imgs.enter()
+		.append("svg:image")
+		.attr("x",5)
+		.attr("xlink:href", "file:../supportFiles/include/KADMOS_VisualizationPack_Icon.png")
+		.attr("width", imageWidth)
+		.attr("height", imageHeight)
+		.attr("position", "relative")
+		
+	var offset_tmp = 860;
+	visPackSvg.append("text")
+		.attr("transform", "translate("
+		  + String(210) + "," + String(35) + ")")
+		.attr("font-family","Arial")
+		.attr("font-size","32pt")
+		.attr("fill","#666666")
+		.text("KADMOS Visualization Package")
+	
+	
+	var acknGroup = visPackSvg.append("g").attr("class","acknGroup").classed("acknGroup",true)
+	var acknRect = acknGroup.append("rect").classed("ackn",true)
+		.attr("height", 30)
+		.attr("transform", "translate("
+		  + String(offset_tmp) + "," + String(2) + ")")
+	acknGroup.append("text")
+		.attr("transform", "translate("
+		  + String(offset_tmp+padding/2) + "," + String(20) + ")")
+		.attr("text-anchor", "front")
+		.attr("font-family","Arial")
+		.attr("font-size","12pt")
+		.attr("fill","white")
+		.text("Acknowledgements")
+	acknRect = acknRect.attr("width", function(d) {return this.parentNode.getBBox().width+padding;})
+	acknRect = acknRect.classed("VisPackMenu",true)
+	acknGroup = acknGroup.on("mouseover", function(){d3.select(this).style("cursor", "pointer")})
+	.on("click",function(){window.open("../supportFiles/include/acknowledgements.html", '_blank');})
+
+	var acknGroup2 = visPackSvg.append("g").attr("class","acknGroup2")
+		.attr("transform", "translate("
+		  + String(offset_tmp) + "," + String(40+padding) + ")")
+    acknGroup2.append("text")
+		.classed("acknText",true)
+		.attr("dy", "0em")
+		.text("Copyright:")
+	acknGroup2.append("text")
+		.classed("acknText",true)
+		.attr("dy", "1.5em")
+		.text("B. Aigner")
+	var imgs = visPackSvg.selectAll("img").data([0]);
+		imgs.enter()
+		.append("svg:image")
+		.attr("xlink:href", "file:../supportFiles/include/RWTH_Logo.png")
+		.attr("x", String(offset_tmp+85))
+		.attr("y", "3em")
+		.attr("width", "60")
+		.attr("height", "40");
+	acknGroup2.append("text")
+		.classed("acknText",true)
+		.attr("dy", "3.2em")
+		.text("I. van Gent")
+	var imgs = visPackSvg.selectAll("img").data([0]);
+		imgs.enter()
+		.append("svg:image")
+		.attr("xlink:href", "file:../supportFiles/include/TUDelft_Logo.png")
+		.attr("x", String(offset_tmp+85))
+		.attr("y", "4.7em")
+		.attr("width", "60")
+		.attr("height", "40");
+
+	
+	var ul = d3.select("body").append("div").attr("class","newDiv").append("ul")
+	function makeViewButtons(graphs_tmp,aName, visFile)
+	{
+		var dropdown1 = ul.append("li").on("mouseover", function(){d3.select(this).style("cursor", "default")})
+		dropdown1.append("a").text(aName)
+		dropdown1.append("img").attr("src","../supportFiles/include/AGILE_Icon.png")
+			.attr("align","left")
+			.style("margin-left","6px")
+			.style("margin-right","0px")
+			.style("margin-top","6px")
+			.style("margin-bottom","6px")
+			.attr("height","42")
+			.attr("width","42")
+		var links = dropdown1.append("ul");
+		for (var i=0; i < graphs_tmp.length; i++)
+		{
+			makeDropDown(graphs_tmp[i],visFile,links,aName)
+		}
+	}
+	function makeDropDown(theData,file,theLinks,aName)
+	{		
+		var linkLi = theLinks.append("li");
+		var link = linkLi.append("a").text(theData.description)
+		if (theData.id == currentID && currentView == aName)
+		{
+			link
+			 .on("mouseover", function(){
+				 d3.select(this).style("cursor", "default")})
+		    linkLi.style("background","#888")
+		}
+		else
+		{
+			link
+			 .on("mouseover", function(){d3.select(this).style("cursor", "pointer")})
+			 .on("click", function(){
+				window.location.replace("../supportFiles/"+file, '_blank');
+				window.localStorage.setItem("graphID", theData.id);})
+		}
+	}
+	makeViewButtons(theGraphs,"XDSM","xdsm.html");
+	makeViewButtons(theGraphs,"Edge Bundles","edgeBundles.html");
+	makeViewButtons(theGraphs,"Sankey Diagram","sankeyDiagram.html");
+}
+//#####################################################################//
+
+function showRightClickOption()
+{
+	var optionGroupDiv = d3.select("body").append("div").attr("class","optionDiv")
+		.style("left",(d3.event.pageX) + "px")
+		.style("top",(d3.event.pageY - 28) + "px")
+		.style("position", "absolute");
+	var optionGroupSvg = optionGroupDiv.append("svg").attr("class","optionGroupSvg");
+	var optionGroup = optionGroupSvg.append("g").attr("class","optionGroup");
+	var optionGroupRect = optionGroup.append("rect")
+		.transition().delay(400)
+		.attr("height", 25)
+		.attr("fill", "#f2f2f2")
+		.style("border-radius", "4px")
+		.style("border", "1px solid #d4d4d4")
+		.attr("fill-opacity", 1.)
+		.attr("width", 175)
+		.attr("stroke", "black")
+		.attr("stroke-width", 1)
+	var optionText = optionGroup.append("text")
+		.transition().delay(400)
+		.attr("transform", "translate(10,18)")
+		.attr("font-family","Arial")
+		.attr("font-size","12pt")
+		.attr("fill","black")
+		.attr("fill-opacity",1.)
+		.text("Click right for options")
+}
+function hideRightClickOption()
+{
+	d3.selectAll(".optionDiv").remove()
+}
+
+//aigner: Function creates a table
+function tabulate(aTable,data,columns) {
+	var thead = aTable.append('thead');
+	var	tbody = aTable.append('tbody');  
+
+	// create a row for each object in the data
+	var rows = tbody.selectAll('tr')
+	  .data(data)
+	  .enter()
+	  .append('tr');
+
+	// create a cell in each row for each column
+	var cells = rows.selectAll('td')
+	  .data(function (row) {
+		return columns.map(function (column) {
+		  return {column: column, value: row[column]};
+		});
+	  })
+	  .enter()
+	  .append('td')
+		.html(function (d) { return d.value; });
+
+	return aTable;
+}
+
+function loader(config) {
+  return function() {
+    var radius = Math.min(config.width, config.height) / 2;
+    var tau = 2 * Math.PI;
+
+    var arc = d3.svg.arc()
+            .innerRadius(radius*0.5)
+            .outerRadius(radius*0.9)
+            .startAngle(0);
+
+    var svg = d3.select(config.container).append("svg")
+        .attr("id", config.id)
+        .attr("width", config.width)
+        .attr("height", config.height)
+      .append("g")
+        .attr("transform", "translate(" + config.width / 2 + "," + config.height / 2 + ")")
+
+    var background = svg.append("path")
+            .datum({endAngle: 0.33*tau})
+            .style("fill", "#4D4D4D")
+            .attr("d", arc)
+            .call(spin, 1500)
+
+    function spin(selection, duration) {
+        selection.transition()
+            .ease("linear")
+            .duration(duration)
+            .attrTween("transform", function() {
+                return d3.interpolateString("rotate(0)", "rotate(360)");
+            });
+
+        setTimeout(function() { spin(selection, duration); }, duration);
+    }
+
+    function transitionFunction(path) {
+        path.transition()
+            .duration(7500)
+            .attrTween("stroke-dasharray", tweenDash)
+            .each("end", function() { d3.select(this).call(transition); });
+    }
+
+  };
+}
+
+
+var myLoader = loader({width: 960, height: 500, container: "#loader_container", id: "loader"});
+
+
+
+//aigner: NEW!
+//aigner: Here, the .json file is read and the XDSM is created
+//#####################################################################//
+//get the current graph ID from the KADMOS visualiazation package's starting page
+var graphID = "01";
+if (window.localStorage.getItem("graphID"))
+{
+	graphID=window.localStorage.getItem("graphID");
+}
+var jsonFile = "json/xdsm_"+graphID+".json";
+
+//Get graph info from graphs.json file
+var graphs;
+var currentGraph;
+var varCategories; 
+d3.json("json/graphs.json", function(error, aGraphInfo) 
+{	
+	if (error) {throw error;}	
+	graphs =  aGraphInfo.graphs;
+	for (var i=0;i<graphs.length;i++)
+	{
+		if (graphs[i].id==graphID)
+		{
+			currentGraph = graphs[i]
+		}
+	}
+	
+	varCategories =  aGraphInfo.categories;
+})
+
+
+d3.json(jsonFile, function(error, mdo) 
+{
+	if (error) {throw error;}		
+	
+
+	//aigner: Tree option menu to select which kind of tree view the user wants to see
+	//#####################################################################//
+	function showFullTree(categoryName)
+	{
+		//expandSymbolDiv.remove();
+		var treeLayoutdiv = d3.select("body").append("div").attr("class","treeDiv")
+										.style("left",(d3.event.pageX) + "px")
+										.style("top",(d3.event.pageY - 28) + "px")
+										.style("position", "absolute")
+		var treeLayoutSVG = treeLayoutdiv.append("svg").attr("class","treeLayoutSVG")
+		var treeLayout = treeLayoutSVG.append("g").attr("class","treeLayout");
+		var name = "Full tree view";
+		maketreeLayout(emptyArray, treeLayout, treeLayoutSVG, treeLayoutdiv, name, categoryName);
+		//Remove Symbol is created
+		var removeSymbol = treeLayout.append("g");
+		drawTreeRemoveSymbol(removeSymbol);
+		removeSymbol.on("mousedown", function(d)
+		{
+			treeLayoutdiv.remove();
+		})
+	}
+	
+	var childrenItems = [];
+	for (var j=0; j< varCategories.length; j++)
+	{
+		childrenItems.push({title: 'according to ' + varCategories[j].description,
+					   identifier: varCategories[j].name+"_"+graphID,
+                       onMouseClick: function(elm, d, i) {showFullTree(d.identifier)},
+					   onMouseOver: function(elm,d,i){}})
+	}
+	var treeOptionMenu = [
+	{
+		title: 'Show variable tree...',
+		onMouseDown: function(elm, d, i) {
+		},
+		onMouseUp: function(elm, d, i) {
+		},
+		onMouseOver: function(elm, d, i) {
+		},
+		childrenItems: childrenItems
+	}
+	]
+	//#####################################################################//
+	
+	//aigner: KADMOS menu
+	//################################################################################################//
+	makeKadmosMenu(graphs,"XDSM",graphID);
+	//################################################################################################//
+	//aigner: New Feature --> treeLayout in the bottom
+	//################################################################################################//		
+	//aigner: tree layout is done	
+	var emptyArray;
+	var expandSymbolDiv = d3.select("body").append("div").attr("class","expandSymbolDiv");
+	var expandSymbolSvg = expandSymbolDiv.append("svg").attr("width",400).attr("height",100);
+	var expandSymbol = expandSymbolSvg.append("g")
+		.attr("class", "newExpandSymbol")
+		.attr("transform", "translate(38,12)");
+	var expandRect = expandSymbol.append("rect")
+		.attr("x",-28)
+		.attr("height", 50)
+		.attr("fill", "#666666")
+		.attr("stroke", "none")
+		.attr("stroke-width", 2)
+		.attr("fill-opacity", 1)
+	var expCircle = expandSymbol.append("circle")
+		.attr("cx", -10)
+		.attr("cy", 25);
+	var expLine1 = expandSymbol.append("line");
+	var expLine2 = expandSymbol.append("line");
+	drawExpandSymbol(expCircle,expLine1,expLine2);
+		expCircle = expCircle.attr("fill", "white");
+	expandSymbol.append("text")
+		.attr("transform", "translate(15,35)")
+		.attr("font-family","Arial")
+		.attr("font-size","24pt")
+		.attr("fill","white")
+		.text("Show full variable tree")
+	expandRect.attr("width", function(d) {return this.parentNode.getBBox().width+40})
+	expandSymbol
+		.on("mouseover", function(){
+			d3.select(this).style("cursor", "pointer")			
+			expCircle.style("fill", "green").style("fill-opacity", .8);
+			expandRect.style("fill", "#4677f8");
+			showRightClickOption();
+		})
+		.on("mouseout", function(){
+			expCircle.style("fill", "green").style("fill-opacity", .6);
+			expandRect.style("fill", "#666666");
+			hideRightClickOption();
+		})
+		.on('contextmenu', d3.contextMenu(treeOptionMenu))
+	//################################################################################################//
+
+	//create the xdsm div
+	d3.select("body").append("div").attr("class","xdsm");
+	//create tooltip
+	var tooltip = d3.select("body").selectAll(".tooltip").data(['tooltip'])
+				  .enter().append("div")
+				.attr("class", "tooltip")
+				.style("opacity", 0);
+
+	var scenarioKeys = Object.keys(mdo).sort();
+	var xdsms = {};
+	
+	//If there is only one MDO and it is not named root, then it is created
+	if (scenarioKeys.indexOf('root') === -1) 
+	{
+		var scenarioKeys_tmp = [];
+		scenarioKeys_tmp.push('root');
+		scenarioKeys = scenarioKeys_tmp;
+		var mdo_tmp={};
+		mdo_tmp['root']=mdo;
+		mdo = mdo_tmp;
+	} 		
+	// new format managing several XDSM
+	var index = scenarioKeys.indexOf('root');
+	if (index > -1) 
+	{
+		scenarioKeys.splice(index, 1);
+	}
+	scenarioKeys.unshift('root');
+
+	var xdsm;
+	scenarioKeys.forEach(function(k) 
+	{
+		if (mdo.hasOwnProperty(k) && k =="root") 
+		{
+			//aigner: Here the graphs are created
+			var graph = new Graph(mdo[k], k);
+			//aigner: Here the xdsms are drawn
+			xdsms[k] = new Xdsm(graph, k, tooltip);
+			xdsms[k].draw(currentGraph.name);
+			xdsm = xdsms[k];
+			update_subXdsm(xdsms, k);
+			prepareTreeLayout(xdsms, k);
+		}
+	}, this)
+	
+		
+	xdsm.svg.selectAll(".node")
+	.each(function(d) 
+	{		
+		var gNode = this;
+		var d3gNode = d3.select(gNode);
+		
+		//aigner: Creation of input/output tree
+		//############################################################
+		function showIOTree(categoryName, k, io)
+		{
+			var edges = d3.selectAll(".edge");
+			var array="";
+			edges.each(function(d)
+			{			
+				if (io=="in")
+				{
+					if (d.to == k.id)
+					{
+						array = array + ", " + d.name;
+					}
+				}
+				else if (io=="out")
+				{
+					if (d.from == k.id)
+					{
+						array = array + ", " + d.name;
+					}
+				}
+			})
+			var treeLayoutdiv = d3.select("body").append("div").attr("class","treeDiv_input_"+k.id)
+											.style("left",(d3.event.pageX) + "px")
+											.style("top",(d3.event.pageY - 28) + "px")
+											.style("position", "absolute")
+			var treeLayoutSVG = treeLayoutdiv.append("svg").attr("class","treeLayoutSVG")
+			var treeLayout = treeLayoutSVG.append("g").attr("class","treeLayout");
+			var name = "Input tree view: " + k.id;
+			maketreeLayout(array, treeLayout, treeLayoutSVG, treeLayoutdiv, name, categoryName);
+			//Remove Symbol is created
+			var removeSymbol = treeLayout.append("g");
+			drawTreeRemoveSymbol(removeSymbol);
+			removeSymbol.on("click", function(d)
+			{
+				treeLayoutdiv.remove();
+			})
+		}
+		//############################################################
+		
+		var inputChildrenitems = [];
+		var outputChildrenitems = [];
+		for (var j=0; j< varCategories.length; j++)
+		{
+			inputChildrenitems.push({title: 'according to ' + varCategories[j].description,
+									 identifier: varCategories[j].name+"_"+graphID,
+								     onMouseClick: function(elm, data, i) {showIOTree(data.identifier,d,"in")},
+								     onMouseOver: function(elm,data,i){}});
+			outputChildrenitems.push({title: 'according to ' + varCategories[j].description,
+									 identifier: varCategories[j].name+"_"+graphID,
+								     onMouseClick: function(elm, data, i) {showIOTree(data.identifier,d,"out")},
+								     onMouseOver: function(elm,data,i){}});
+		}
+		
+		
+		function showToolTable(aTool)
+		{						
+			var toolTableDiv = d3.select("body").append("div").attr("class","toolTableDiv")
+				.style('left', (d3.event.pageX - 2) + 'px')
+				.style('top', (d3.event.pageY - 2) + 'px')
+				.style("position", "absolute")
+			var toolTableGroup = toolTableDiv.append("g").attr("class","toolTableGroup")
+			
+			//Drag Function for variable table
+			var xPos_init = d3.event.pageX - 2;
+			var yPos_init = d3.event.pageY - 2;
+			var xOffset_tmp;
+			var yOffset_tmp;
+			var drag = toolTableDiv.call(d3.drag()
+				.on("start", dragstarted)
+				.on("drag", dragged)
+				.on("end", dragended));
+			function dragstarted() {
+			  d3.select(this).raise().classed("active", true);
+			  xOffset_tmp = xPos_init-d3.event.x;
+			  yOffset_tmp = yPos_init-d3.event.y;
+			}
+			function dragged() {
+				 d3.select(this).classed("active", false)
+					.style("left",(d3.event.x+xOffset_tmp) + "px")
+					.style("top",(d3.event.y+yOffset_tmp) + "px")
+			}
+			function dragended() {
+			  d3.select(this).classed("active", false);
+			  xPos_init = d3.event.x+xOffset_tmp;
+			  yPos_init = d3.event.y+yOffset_tmp;
+			}
+			
+			var aToolNameSplit = aTool.name.split(': ')			
+			var headLine;
+			if (aToolNameSplit.length>1){headLine = "Competence Information: (" + aToolNameSplit[1] + ")";}
+			else {headLine = "Competence Information: (" + aToolNameSplit[0] + ")";}
+
+			var tabRemoveSVG = toolTableGroup.append("svg")
+				.attr("width",800)
+				.attr("height",26)
+			var tabRemoveRect = tabRemoveSVG.append("rect")
+				.attr("width", "100%")
+				.attr("height", "100%")
+				.attr("fill", "white");
+			var tabRemoveSymbol = tabRemoveSVG.append("g");
+			tabRemoveSymbol = tabRemoveSymbol
+				.attr("class", "tabRemoveSymbol")
+				.attr("transform", "translate(26,0)")
+			var circle = tabRemoveSymbol.append("circle")
+				.classed("remCircle",true)
+			var minus = tabRemoveSymbol.append("line").classed("remMinus",true)
+			var cx = -20;
+			var cy = 12;
+			circle = circle
+				.attr("cx", cx+5)
+				.attr("cy", cy)
+				.attr("r", 10)
+			minus = minus
+				.attr("x1", cx)
+				.attr("y1", cy)
+				.attr("x2", cx+10)
+				.attr("y2", cy)
+				
+			tabRemoveSVG.append("text").attr("class","tabRemoveText")
+				.attr("transform", "translate(26,20)")
+				.attr("fill", "black")
+				.style("font-family", "Arial")
+				.style("font-size", "16pt")
+				.style("font-weight", "bold")
+				.text(headLine);
+			
+			tabRemoveSymbol
+				.on("mouseover", function(){
+					d3.select(this).style("cursor", "pointer")
+					circle.style("fill", "red").style("fill-opacity", .8);
+					})
+				.on("mouseout", function(){circle.style("fill", "red").style("fill-opacity", .6)})
+			tabRemoveSymbol.on("click", function(d)
+			{
+				toolTableDiv.remove();
+			})
+			
+		
+			var data = [];
+			// render the table(s)
+			if (aTool.metadata.length==0)
+			{
+				data.push({ "name" : "NO TOOL METADATA AVAILABLE", "value" : "..." })
+			}
+			for (var j=0; j < aTool.metadata.length;j++)
+			{
+				var metaData = aTool.metadata[j]
+				for(var key in metaData){
+				  data.push({ "name" : key, "value" : metaData[key] })
+				}
+				
+			}
+			var table = toolTableGroup.append('table');
+			tabulate(table,data,['name', 'value']); // 2 column table
+		}
+		
+		//menu --> functions for right click options
+		var toolMenu = [
+		{
+			title: 'Show competence info',
+			onMouseDown: function(elm, k, i) {
+				showToolTable(k);
+			},
+			onMouseUp: function(elm, k, i) {
+			},
+			onMouseOver: function(elm, d, i) {
+			},
+			childrenItems: []
+		},
+		{
+			title: 'Show input variable tree...',
+			onMouseDown: function(elm, k, i) {
+			},
+			onMouseUp: function(elm, k, i) {
+			},
+			onMouseOver: function(elm, d, i) {
+			},
+			childrenItems: inputChildrenitems
+		},
+		{
+			title: 'Show output variable tree...',
+			onMouseDown: function(elm, k, i) {
+			},
+			onMouseUp: function(elm, k, i) {
+			},
+			onMouseOver: function(elm, d, i) {
+			},
+			childrenItems: outputChildrenitems
+		}
+		]
+		
+		scenarioKeys.forEach(function(k)
+		{
+			if (k == d.xdsm)
+			{
+				var cx, cy;
+				for (var j=0; j < gNode.childNodes.length; j++)
+				{
+					if(gNode.childNodes[j].nodeName != "text")
+					{
+						cx = gNode.childNodes[j].getAttribute("width")/2-13;
+						cy = -gNode.childNodes[j].getAttribute("height")/2+8;
+					}
+				}
+				//Expand Symbol is created
+				var expandSymbol = d3.select(gNode).append("g").attr("class", "expandSymbol");
+				var circle = expandSymbol.append("circle")
+					.attr("cx", cx)
+					.attr("cy", cy);
+				var line1 = expandSymbol.append("line");
+				var line2 = expandSymbol.append("line");
+				drawExpandSymbol( circle, line1,line2);
+				expandSymbol = expandSymbol
+				.on("mouseover", function(){circle.style("fill-opacity", .8);})
+				.on("mouseout", function(){circle.style("fill-opacity", .6)})
+				.on("mousedown", function(){circle.style("fill", "darkgreen")})
+				.on("mouseup", function(){circle.style("fill", "green")})
+				
+				//TODO - aigner: on mouseover there should be a text box telling the options
+				d3gNode = d3gNode
+				.on("click", function()
+				{
+					//On mousedown, additional sub-workflows will be visualized
+					var createNew = true;
+					if(xdsms[k]){createNew=false;}                    
+					if (createNew == true)
+					{
+						var graph = new Graph(mdo[k], k);
+						xdsms[k] = new Xdsm(graph, k, tooltip);
+						xdsms[k].draw(currentGraph.name);
+						update_subXdsm(xdsms, k);
+						prepareTreeLayout(xdsms, k);
+						//Remove Symbol is created
+						var removeSymbol = xdsms[k].svg.append("g")
+							.attr("class", "removeSymbol");
+						var circle = removeSymbol.append("circle");
+						var minus = removeSymbol.append("line");
+						drawRemoveSymbol(xdsms[k], circle, minus);
+						//Clicking on remove symbol will remove sub-workflow
+						removeSymbol = removeSymbol
+						.on("mouseover", function(){
+							showRightClickOption()
+							circle.style("fill", "red").style("fill-opacity", .8);})
+						.on("mouseout", function(){
+							hideRightClickOption();
+							circle.style("fill", "red").style("fill-opacity", .6)})
+						.on("mousedown", function(){circle.style("fill", "darkred").style("fill-opacity",1);})
+						.on("mouseup", function(d)
+						{
+							xdsms[k].svg.remove();
+							d3.select(".treeDiv"+k).remove();
+							delete xdsms[k];
+						})
+						
+						xdsms[k].svg.selectAll(".node")
+							.each(function(d) 
+							{		
+								var gNode = this;
+								d3.select(gNode).on('contextmenu', d3.contextMenu(toolMenu));
+							})
+					}
+				})
+			}
+		})
+		d3gNode = d3gNode.on('contextmenu', d3.contextMenu(toolMenu))
+			.on("mouseover", function(){showRightClickOption()})
+			.on("mouseout", function(){hideRightClickOption()})
+	})	
+	
+	
+	function prune_tree(parentXPath, objArray, xPathList) 
+	{ 
+		var firstElement = "/"+xPathList.split("/")[1]+"/";
+		for (var i = 0; i < objArray.length; ++i) 
+		{
+			var obj = objArray[i];
+			var objXPath;
+			
+			//aigner: If object has children append a "/" as xPath separator
+			//else append comma as indicator for last element in the xPath
+			if (obj.children){objXPath = parentXPath+objArray[i].name+"/";}
+			else{objXPath =  parentXPath+objArray[i].name;}
+			var objXPathFromFirst = objXPath.split(firstElement);
+			
+			// console.log("Current node ->")
+			// console.log(firstElement+objXPathFromFirst[1])
+			// console.log(xPathList)
+									
+			var delete_it = true;
+			if(objXPathFromFirst[1]==undefined)
+			{
+				delete_it = false;
+			}
+			else
+			{
+				if (include(xPathList, firstElement+objXPathFromFirst[1]))
+				{
+					delete_it = false;
+				}
+			}
+			if (delete_it==true)
+			{
+				// console.log("delete ->")
+				// console.log( objXPathFromFirst[1])
+				// console.log(xPathList)
+				
+				objArray.splice(i, 1);
+				i--;
+			}
+			else
+			{
+				// console.log("do not delete ->")
+				// console.log(objXPath);
+				if (obj.children)
+				{
+					if (obj.children.length==0)
+					{
+						objArray.splice(i, 1);
+						i--;
+						prune_tree(parentXPath, objArray, xPathList)
+					}
+					else{prune_tree(objXPath, obj.children, xPathList);}
+					
+				}
+			}
+		}
+	}
+	function getPrunedLeafNodes(parentXPath, objArray, xPathList, leafNodes) 
+	{ 
+		var firstElement = "/"+xPathList.split("/")[1]+"/";
+		for (var i = 0; i < objArray.length; ++i) 
+		{
+			var obj = objArray[i];
+			var objXPath;
+			
+			//aigner: If object has children append a "/" as xPath separator
+			//else append comma as indicator for last element in the xPath
+			if (obj.children){objXPath = parentXPath+objArray[i].name+"/";}
+			else{objXPath =  parentXPath+objArray[i].name;}
+			var objXPathFromFirst = objXPath.split(firstElement);
+			
+			// console.log("Current node ->")
+			// console.log(firstElement+objXPathFromFirst[1])
+			// console.log(xPathList)
+									
+			var delete_it = true;
+			if(objXPathFromFirst[1]==undefined)
+			{
+				delete_it = false;
+			}
+			else
+			{
+				if (include(xPathList, firstElement+objXPathFromFirst[1]))
+				{
+					delete_it = false;
+				}
+			}
+			if (delete_it==true)
+			{
+				// console.log("delete ->")
+				// console.log( objXPathFromFirst[1])
+				// console.log(xPathList)
+				
+				objArray.splice(i, 1);
+				i--;
+			}
+			else
+			{
+				// console.log("do not delete ->")
+				// console.log(objXPath);
+				if (obj.children)
+				{
+					if (obj.children.length==0)
+					{
+						objArray.splice(i, 1);
+						i--;
+						getPrunedLeafNodes(parentXPath, objArray, xPathList, leafNodes)
+					}
+					else{getPrunedLeafNodes(objXPath, obj.children, xPathList, leafNodes);}
+				}
+				else 
+				{
+					obj.xPath = objXPath;
+					leafNodes.push(obj);
+				};
+			}
+		}
+	}
+	function clean_tree(objArray)
+	{
+		for (var i = 0; i < objArray.length; ++i) 
+		{
+			var obj = objArray[i];
+			if (obj.children)
+			{
+				if (obj.children.length==0)
+				{
+					objArray.splice(i, 1);
+					i--;
+				}
+				clean_tree(obj.children);
+			}
+		}
+	}
+	function countElements(node, counter) 
+	{
+		counter ++;
+		if (node.children)
+		{
+			if (node.children.length !== 0)
+			{
+				node.children.forEach(function(n)
+				{
+					counter = countElements(n, counter);
+				});
+			}
+		}
+		return counter;
+	}
+	
+	function prepareTreeLayout(xdsms, refName)
+	{			
+		function showEdgeTree(data,categoryName)
+		{
+			//aigner:Split the pipeLineData at the comma separator
+			var array = data.name.split(',')
+			//aigner:Append a comma to all xPath to indicate the end of the xPath
+			for(var i=0;i<array.length;i++){
+				array[i]=array[i]+",";
+			}
+			var treeLayout;
+			var treeLayoutdiv = d3.select("body").append("div").attr("class","treeDiv_"+data.from+"_"+data.to)
+									.style("left",(d3.event.pageX) + "px")
+									.style("top",(d3.event.pageY - 28) + "px")
+									.style("position", "absolute")
+			var treeLayoutSVG = treeLayoutdiv.append("svg").attr("class","treeLayoutSVG")
+				
+			treeLayout = treeLayoutSVG.append("g").attr("class","treeLayout");
+			var name = "Tree view: " + data.from + "  →  " + data.to;
+			//aigner: tree layout is done	
+			maketreeLayout(data.name, treeLayout, treeLayoutSVG, treeLayoutdiv, name, categoryName);
+			//Remove Symbol is created
+			var removeSymbol = treeLayout.append("g");
+			drawTreeRemoveSymbol(removeSymbol);
+			removeSymbol.on("click", function(d)
+			{
+				treeLayoutdiv.remove();
+			})		
+			
+		}
+		
+		function showEdgeTable(anEdge)
+		{						
+			var edgeTableDiv = d3.select("body").append("div").attr("class","edgeTableDiv")
+				.style('left', (d3.event.pageX - 2) + 'px')
+				.style('top', (d3.event.pageY - 2) + 'px')
+				.style("position", "absolute")
+			var edgeTableGroup = edgeTableDiv.append("g").attr("class","edgeTableGroup")
+			
+			//Drag Function for edge table
+			var xPos_init = d3.event.pageX - 2;
+			var yPos_init = d3.event.pageY - 2;
+			var xOffset_tmp;
+			var yOffset_tmp;
+			var drag = edgeTableDiv.call(d3.drag()
+				.on("start", dragstarted)
+				.on("drag", dragged)
+				.on("end", dragended));
+			function dragstarted() {
+			  d3.select(this).raise().classed("active", true);
+			  xOffset_tmp = xPos_init-d3.event.x;
+			  yOffset_tmp = yPos_init-d3.event.y;
+			}
+			function dragged() {
+				 d3.select(this).classed("active", false)
+					.style("left",(d3.event.x+xOffset_tmp) + "px")
+					.style("top",(d3.event.y+yOffset_tmp) + "px")
+			}
+			function dragended() {
+			  d3.select(this).classed("active", false);
+			  xPos_init = d3.event.x+xOffset_tmp;
+			  yPos_init = d3.event.y+yOffset_tmp;
+			}
+			
+			var headLine = "Edge Information (" + anEdge.from + " - " + anEdge.to + ")";
+
+			var tabRemoveSVG = edgeTableGroup.append("svg")
+				.attr("width",String(headLine.length*12+"pt"))
+				.attr("height",26)
+			tabRemoveSVG.append("rect")
+				.attr("width", "100%")
+				.attr("height", "100%")
+				.attr("fill", "white");
+			var tabRemoveSymbol = tabRemoveSVG.append("g");
+			tabRemoveSymbol = tabRemoveSymbol
+				.attr("class", "tabRemoveSymbol")
+				.attr("transform", "translate(26,0)")
+			var circle = tabRemoveSymbol.append("circle")
+				.classed("remCircle",true)
+			var minus = tabRemoveSymbol.append("line").classed("remMinus",true)
+			var cx = -20;
+			var cy = 12;
+			circle = circle
+				.attr("cx", cx+5)
+				.attr("cy", cy)
+				.attr("r", 10)
+			minus = minus
+				.attr("x1", cx)
+				.attr("y1", cy)
+				.attr("x2", cx+10)
+				.attr("y2", cy)
+				
+			tabRemoveSVG.append("text").attr("class","tabRemoveText")
+				.attr("transform", "translate(26,20)")
+				.attr("fill", "black")
+				.style("font-family", "Arial")
+				.style("font-size", "16pt")
+				.style("font-weight", "bold")
+				.text(headLine);
+			
+			tabRemoveSymbol
+				.on("mouseover", function(){
+					d3.select(this).style("cursor", "pointer")
+					circle.style("fill", "red").style("fill-opacity", .8);
+					})
+				.on("mouseout", function(){circle.style("fill", "red").style("fill-opacity", .6)})
+			tabRemoveSymbol.on("click", function(d)
+			{
+				edgeTableDiv.remove();
+			})
+						
+			var anEdgeNameSplit = anEdge.name.split(',')
+			var numberOfconnections = anEdgeNameSplit.length;
+			var theLeafNodes = [];
+			var dimension=0;
+			var nullDim=false;
+			var undefinedLeafs;
+			var treeData;
+			$.ajax({
+			  dataType: "json",
+			  url: "json/"+varCategories[0].name+"_"+graphID+".json",
+			  async: false,
+			  success: function(data){treeData = JSON.parse(JSON.stringify(data))}
+			});
+			var pipeData = anEdge.name;
+			getPrunedLeafNodes("/"+treeData.name+"/", treeData.children, pipeData, theLeafNodes)
+			var undefLeafsNumber=0;
+			var defLeafsNumber=0;
+			for (var k=0;k<theLeafNodes.length;k++)
+			{
+				if (theLeafNodes[k].dimension!=null){dimension = dimension+theLeafNodes[k].dimension}
+				else{nullDim=true}
+				if (theLeafNodes[k].value.includes("could not be found")||theLeafNodes[k].value.includes("unknown"))
+				{
+					if (undefLeafsNumber==0){undefinedLeafs += theLeafNodes[k].xPath;}
+					else {undefinedLeafs += "," + theLeafNodes[k].xPath;}
+					undefLeafsNumber ++;
+				}
+				else
+				{
+					defLeafsNumber++;
+				}
+			}
+			
+			//Render data for table
+			var data = [];
+			data.push({ "name" : "Total number of connections", "value" : numberOfconnections })
+			data.push({ "name" : "Number of referenced connections", "value" : defLeafsNumber })
+			data.push({ "name" : "Dimension of referenced connections", "value" : String(dimension) })
+			if (undefinedLeafs)
+			{
+				data.push({ "name" : "Number of unreferenced connections", "value" :  undefLeafsNumber})					
+			}
+			var table = edgeTableGroup.append('table');
+			tabulate(table,data,['name', 'value']); // 2 column table
+			if (undefinedLeafs)
+			{
+				var undefLeafTreeSVG = edgeTableGroup.append("svg")
+					.attr("transform", "translate(0,20)")
+					.attr("width",String(headLine.length*9.5+"pt"))
+					.attr("height",50)
+				undefLeafTreeSVG.append("rect")
+					.attr("width", "100%")
+					.attr("height", "100%")
+					.attr("fill", "white");
+				var expandSymbol = undefLeafTreeSVG.append("g")
+					.attr("class", "newExpandSymbol")
+					.attr("transform", "translate(38,12)");
+				var expandRect = expandSymbol.append("rect")
+					.attr("x",-28)
+					.attr("height", 50)
+					.attr("fill", "#666666")
+					.attr("stroke", "none")
+					.attr("stroke-width", 2)
+					.attr("fill-opacity", 1)
+				var expCircle = expandSymbol.append("circle")
+					.attr("cx", -26)
+					.attr("cy", 0);
+				var expLine1 = expandSymbol.append("line");
+				var expLine2 = expandSymbol.append("line");
+				drawExpandSymbol(expCircle,expLine1,expLine2);
+					expCircle = expCircle.attr("fill", "white");
+				expandSymbol
+					.on("mouseover", function(){
+						d3.select(this).style("cursor", "pointer")			
+						expCircle.style("fill", "green").style("fill-opacity", .8);
+					})
+					.on("mouseout", function(){
+						expCircle.style("fill", "green").style("fill-opacity", .6);
+					})
+				undefLeafTreeSVG.append("text").attr("class","tabRemoveText")
+					.attr("transform", "translate(26,20)")
+					.attr("fill", "black")
+					.style("font-family", "Arial")
+					.style("font-size", "16pt")
+					.style("font-weight", "bold")
+					.text("Show unreferenced connections as tree");
+				expandSymbol.on("mousedown", function(){
+					var treeLayoutdiv = d3.select("body").append("div").attr("class","treeDiv_"+anEdge.from+"_"+anEdge.to)
+								.style("left",(d3.event.pageX) + "px")
+								.style("top",(d3.event.pageY + 50) + "px")
+								.style("position", "absolute")
+					var treeLayoutSVG = treeLayoutdiv.append("svg").attr("class","treeLayoutSVG")
+
+					var pipeData = anEdge.name;
+					var treeLayout = treeLayoutSVG.append("g").attr("class","treeLayout");
+					var name = "Unref. connections: " + anEdge.from + "  to  " + anEdge.to;
+					//aigner: tree layout is done	
+					maketreeLayout(undefinedLeafs, treeLayout, treeLayoutSVG, treeLayoutdiv, name, varCategories[0].name+"_"+graphID);
+					//Remove Symbol is created
+					var removeSymbol = treeLayout.append("g");
+					drawTreeRemoveSymbol(removeSymbol);
+					removeSymbol.on("click", function(d)
+					{
+						treeLayoutdiv.remove();
+					})
+				})
+			}
+			
+		}
+		
+		xdsms[refName].svg.selectAll(".edge")
+		.each(function(d) 
+		{
+			//edgeMenu --> functions for right click options
+			var edgeChildrenItems = [];
+			for (var j=0; j< varCategories.length; j++)
+			{
+				edgeChildrenItems.push({title: 'according to ' + varCategories[j].description,
+										identifier: varCategories[j].name+"_"+graphID,
+										onMouseClick: function(elm, data, i) {showEdgeTree(d,data.identifier)},
+										onMouseOver: function(elm,data,i){}});
+			}
+			var theEdge = this;
+			var edgeMenu = [
+			{
+				title: 'Show edge info',
+				onMouseDown: function(elm, k, i) {
+					showEdgeTable(d)
+				},
+				onMouseUp: function(elm, k, i) {
+				},
+				onMouseOver: function(elm, d, i) {
+				},
+				childrenItems: []
+			},
+			{
+				title: 'Show variable tree...',
+				onMouseDown: function(elm, k, i) {
+				},
+				onMouseUp: function(elm, k, i) {
+				},
+				onMouseOver: function(elm, d, i) {
+				},
+				childrenItems: edgeChildrenItems
+			}
+			]
+			
+			var thisEdge = d3.select(this);
+			thisEdge.on('contextmenu', d3.contextMenu(edgeMenu))
+		})
+	}
+	
+	function maketreeLayout(pipeData, layout, svg, div, aName, aFilename)
+	{			
+		//console.log("Tree Layout will be created");
+		//aigner: here the tree layout begins
+		//Drag Function for treeLayout
+		//Drag Function for variable table
+		var xPos_init = d3.event.pageX - 2;
+		var yPos_init = d3.event.pageY - 2;
+		var xOffset_tmp;
+		var yOffset_tmp;
+		var drag = div.call(d3.drag()
+			.on("start", dragstarted)
+			.on("drag", dragged)
+			.on("end", dragended));
+		function dragstarted() {
+		  d3.select(this).raise().classed("active", true);
+		  xOffset_tmp = xPos_init-d3.event.x;
+		  yOffset_tmp = yPos_init-d3.event.y;
+		}
+		function dragged() {
+			 d3.select(this).classed("active", false)
+				.style("left",(d3.event.x+xOffset_tmp) + "px")
+				.style("top",(d3.event.y+yOffset_tmp) + "px")
+		}
+		function dragended() {
+		  d3.select(this).classed("active", false);
+		  xPos_init = d3.event.x+xOffset_tmp;
+		  yPos_init = d3.event.y+yOffset_tmp;
+		}
+		createTree(aFilename);
+		
+		function createTree(aFileName)
+		{
+			d3.json ("json/"+aFileName+".json", function(schema)
+			{
+				var treeData = (JSON.parse(JSON.stringify(schema)));				
+				//aigner: Here, the minimalized tree is created!
+				//Transferred variables: 
+				//1) parentXPath --> xPath until current nodes
+				//2) objArray --> Array of current nodes
+				//3) xPathList --> Array of actually used pipeLine data
+				
+				if (pipeData)
+				{
+					prune_tree("/"+treeData.name+"/", treeData.children, pipeData);
+					//aigner: count all descendants of a node
+					var firstEl = pipeData.split("/")[1];
+					if(firstEl != treeData.name)
+					{
+						var cleanOperations = countElements(treeData,0)
+						for (var i=0; i<cleanOperations; i++){clean_tree(treeData.children);}
+					}
+				}
+				
+					
+				
+				
+				// Set the dimensions and margins of the diagram
+				var margin = {top: 20, right: 90, bottom: 20, left: 90},
+					width = 960 - margin.left - margin.right,
+					height = 500 - margin.top - margin.bottom;
+
+				// append the svg object to the body of the page
+				// appends a 'group' element to 'svg'
+				// moves the 'group' element to the top left margin
+				var offset_tmp = 60;
+				svg = svg.attr("width", width + margin.right + margin.left+offset_tmp)
+						 .attr("height", height + margin.top + margin.bottom+offset_tmp);
+				div = div.attr("width", width + margin.right + margin.left+offset_tmp)
+						 .attr("height", height + margin.top + margin.bottom+offset_tmp);
+				layout = layout
+					.attr("width", width + margin.right + margin.left)
+					.attr("height", height + margin.top + margin.bottom);
+				var name;
+				var rect = layout.append("rect")
+						.attr("class","treeFrame")
+						.attr("width", 0)
+						.attr("height", 70)
+						.attr("transform", "translate("
+						  + String(10) + "," + String(10) + ")")
+						.attr("fill", "white")
+						.attr("stroke", "darkgrey")
+						.attr("stroke-width", 0)
+						.attr("fill-opacity", 0.8)
+				//aigner: Put remove button on top of the rect
+				d3.selectAll(".treeRemoveSymbol").moveToFront();
+				
+				//aigner: Exit, if no tree data is available!
+				if (!treeData.children || treeData.children.length==0)
+				{
+					var newText = layout.append('text')
+					.attr("dx", 40)
+					.attr("dy", 55)
+					.style("font-family", "Arial")
+					.style("font-size", "32pt")
+					.style("font-weight", "bold")
+					.html(function (d) {
+						return 'No tree view available! &#8594; Please check data for consistency!';
+					});
+					
+					var newWidth;
+					rect.attr("width",  function(d) {
+						newWidth = this.parentNode.getBBox().width+20;
+						return newWidth;}) 
+					div = div.attr("width", newWidth+30)
+					svg = svg.attr("width", newWidth+30)
+					return;
+				}
+				
+				var newText = layout.append('text')
+					.attr("dx", 40)
+					.attr("dy", 30)
+					.style("font-family", "Arial")
+					.style("font-size", "12pt")
+					.style("font-weight", "bold")
+					.text(aName);
+				
+				// Calculate total nodes, max label length
+				var totalNodes = 0;
+				var maxLabelLength = 0;
+				
+				var i = 0,
+					duration = 500,
+					root;
+
+				// declares a tree layout and assigns the size
+				var treemap = d3.tree().size([height, width]);
+
+				// Assigns parent, children, height, depth
+				root = d3.hierarchy(treeData, function(d) { return d.children; });
+				root.x0 = height / 2;
+				root.y0 = 0;
+				
+				// Append a group which holds all nodes and which the zoom Listener can act upon.
+				var svgGroup_xOff = root.data.name.length*10
+				var svgGroup = layout.append("g")
+					.attr("transform", "translate("+ svgGroup_xOff + "," + String(margin.top+10) + ")");
+				
+					
+				// Collapse root initially
+				collapse(root);
+				update(root);
+
+				// Collapse the node and all it's children
+				function collapse(d) {
+				  if(d.children) {
+					d._children = d.children
+					d._children.forEach(collapse)
+					d.children = null
+				  }
+				}
+				// Collapse the node and all it's children
+				function expand(d) {
+				  if(d._children) {
+					d.children = d._children
+					d.children.forEach(expand)
+					d._children = null
+				  }
+				}
+				// Toggle children on click.
+				function click(d) 
+				{
+					if (d.children) {
+						d._children = d.children;
+						d.children = null;
+					} else 
+					{
+						d.children = d._children;
+						d._children = null;
+					}
+					update(d);
+				}
+				// Collapse/expand entire tree on double-click
+				function dblclick(d) 
+				{
+					if(d.children) 
+					{
+						collapse(d);
+					}
+					else if(d._children)
+					{
+						expand(d);
+					}
+					update(d);
+				}	
+				
+				function update(source) 
+				{
+					var levelWidth = [1];
+					var getLevelWidth = function(level, n) 
+					{
+						if (n.children && n.children.length > 0) {
+							if (levelWidth.length <= level + 1) levelWidth.push(0);
+							
+							//establish maxLabelLength
+							maxLabelLength = Math.max(n.data.name.length, maxLabelLength);
+							
+							levelWidth[level + 1] += n.children.length;
+							n.children.forEach(function(d) {
+								getLevelWidth(level + 1, d);
+							});
+						}
+					};
+					getLevelWidth(0, root);
+					var newHeight = d3.max(levelWidth) * 60; // 20 pixels per line
+					//BENNI: fill in viewerHeight instead of newHeight for other expanding/collapsing beaviour 
+					
+					layout = layout.attr("height", newHeight + margin.top + margin.bottom)
+					svgGroup = svgGroup.attr("height", newHeight + margin.top + margin.bottom)
+					treemap = treemap.size([newHeight, width]);
+					
+					
+					// Assigns the x and y position for the nodes
+					var treeData = treemap(root);
+
+					// Compute the new tree layout.
+					var nodes = treeData.descendants(),
+						links = treeData.descendants().slice(1);
+					
+					//aigner: count all descendants of a node
+					function countDescendants(node, counter) 
+					{
+						if (node._children)
+						{
+							node._children.forEach(function(n)
+							{
+								counter = countDescendants(n, counter);
+							});
+						}
+						else if (node.children)
+						{
+							node.children.forEach(function(n)
+							{
+								counter = countDescendants(n, counter);
+							});
+						}
+						else
+						{
+							counter ++;
+						}
+						return counter;
+					}
+					
+					
+					var depth_tmp = 0;
+					var labelLength = [];
+					labelLength.push(0);
+					nodes.forEach(function(d) 
+					{				
+						//aigner: If node is collapsed show number of ancestors
+						if (d._children)
+						{
+							d._childrenNum = countDescendants(d, 0);
+							d.data.text = d.data.name + " (" + d._childrenNum + ")";
+						}
+						else 
+						{
+							d.data.text = d.data.name
+						}
+						
+						//aigner: Find maximum labelLength for each level
+						if (d.depth>depth_tmp)
+						{
+							depth_tmp = d.depth;
+							labelLength.push(d.data.text.length);
+						}
+						else
+						{
+							if (d.depth!=0){labelLength[labelLength.length-1] = Math.max(d.data.text.length, labelLength[labelLength.length-1]);}
+						}
+					});
+					// Set widths between levels based on labelLength of each level.
+					var newWidth=0;	
+					var y_tmp = 100;		
+					var depth_tmp = 0;							
+					nodes.forEach(function(d) 
+					{
+						if (d.depth>depth_tmp)
+						{
+							depth_tmp = d.depth;
+							d.y = y_tmp+(labelLength[depth_tmp])*12+50;
+						}
+						else
+						{
+							d.y = y_tmp;
+						}
+						newWidth=d.y;
+						y_tmp = d.y;
+					});
+					
+					//aigner: Adjust height and width of the frame
+					div = div.attr("height", newHeight + margin.top + margin.bottom+offset_tmp)
+					div = div.attr("width", newWidth + margin.top + margin.bottom +300+maxLabelLength*25+offset_tmp)
+						.on("mousedown", function(d) {
+							d3.select(this).moveToFront();
+						})
+					svg = svg.attr("height", newHeight + margin.top + margin.bottom+offset_tmp)
+					svg = svg.attr("width", newWidth + margin.top + margin.bottom +300+maxLabelLength*25+offset_tmp)
+					rect = rect.attr("height", newHeight + margin.top + margin.bottom)
+					rect = rect.attr("width", newWidth + margin.top + margin.bottom+300+maxLabelLength*15)
+					
+					
+					
+					
+
+					// ****************** Nodes section ***************************
+					// Update the nodes...
+					var node = svgGroup.selectAll('g.node')
+					  .data(nodes, function(d) {return d.id || (d.id = ++i); });
+					
+					var dblclick_timer = false;
+					// Enter any new modes at the parent's previous position.
+					var nodeEnter = node.enter().append('g')
+					  .attr('class', 'node')
+					  .attr("transform", function(d) {
+						return "translate(" + source.y0 + "," + source.x0 + ")";
+					})
+					.on("click", function(d) {
+						// if double click timer is active, this click is the double click
+						if ( dblclick_timer )
+						{
+							clearTimeout(dblclick_timer)
+							dblclick_timer = false
+							// double click code code comes here
+							//console.log("DOUBLE CLICK")
+							dblclick(d);
+						}
+						// otherwise, what to do after single click (double click has timed out)
+						else dblclick_timer = setTimeout( function(){
+							dblclick_timer = false
+							// single click code code comes here
+							//console.log("SINGLE CLICK")
+							click(d);
+						}, 250)
+					})
+					
+					// Add Circle for the nodes
+					nodeEnter.append('circle')
+					  .attr('class', 'node')
+					  .attr('r', 4.5)
+					  .style("fill", function(d) {
+						  return d._children ? "lightsteelblue" : "#fff";
+					  });
+
+					// Add labels for the nodes
+					nodeEnter.append('text')
+					  .attr('class', 'nodeText')
+					  .attr("dy", ".35em")
+					  .attr("x", function(d) {
+						  return d.children || d._children ? -13 : 13;
+					  })
+					  .attr("text-anchor", function(d) {
+						  return d.children || d._children ? "end" : "start";
+					  })
+					  //.text(function(d) { return d.data.text; });
+					  
+					  
+					// Function to download data to a file
+					function download(filename, text) {
+						var element = document.createElement('a');
+						element.setAttribute('href', 'data:text/plain;charset=utf-8,' + encodeURIComponent(text));
+						element.setAttribute('download', filename);
+
+						element.style.display = 'none';
+						document.body.appendChild(element);
+
+						element.click();
+
+						document.body.removeChild(element);
+					}
+					
+					//Highlight function, that shows usage of a node in the XDSM
+					function highlight(data,aText)
+					{
+						aText = "/"+data.data.name+aText;
+						if (data.parent){highlight(data.parent,aText)}
+						else
+						{
+							scenarioKeys.forEach(function(k)
+							{
+								var xdsm_tmp;
+								xdsm_tmp = xdsms[k];
+								if (xdsm_tmp)
+								{
+									xdsm_tmp.svg.selectAll(".edge").each(function(p) 
+									{
+										var firstElement_tmp = p.name.split("/")[1]
+										var text_fromFirst = "/"+firstElement_tmp+aText.split(firstElement_tmp)[1]
+										if (include(p.name,text_fromFirst))
+										{
+											var highlightEdge = d3.select(this).select("polygon");
+											highlightEdge.style("stroke-width",5.);
+											d3.selectAll(".treeFrame")
+												.attr("fill-opacity", 0.5)
+												.attr("stroke-opacity", 0.5);
+											d3.selectAll(".nodeText").style("fill-opacity",0.5);
+										}
+									})
+								}
+							})
+						}
+					}
+					  
+					
+				    function showVariableTable(aVariable)
+					{						
+						var varTableDiv = d3.select("body").append("div").attr("class","varTableDiv_"+aName+"_"+aVariable.data.name)
+							.style('left', (d3.event.pageX - 2) + 'px')
+							.style('top', (d3.event.pageY - 2) + 'px')
+							.style("position", "absolute")
+							.on("mousedown", function(d) {
+								d3.select(this).moveToFront();
+							})
+						var varTableGroup = varTableDiv.append("g").attr("class","varTableGroup")
+						
+						//Drag Function for variable table
+						var xPos_init = d3.event.pageX - 2;
+						var yPos_init = d3.event.pageY - 2;
+						var xOffset_tmp;
+						var yOffset_tmp;
+						var drag = varTableDiv.call(d3.drag()
+							.on("start", dragstarted)
+							.on("drag", dragged)
+							.on("end", dragended));
+						function dragstarted() {
+						  d3.select(this).raise().classed("active", true);
+						  xOffset_tmp = xPos_init-d3.event.x;
+						  yOffset_tmp = yPos_init-d3.event.y;
+						}
+						function dragged() {
+							 d3.select(this).classed("active", false)
+								.style("left",(d3.event.x+xOffset_tmp) + "px")
+								.style("top",(d3.event.y+yOffset_tmp) + "px")
+						}
+						function dragended() {
+						  d3.select(this).classed("active", false);
+						  xPos_init = d3.event.x+xOffset_tmp;
+						  yPos_init = d3.event.y+yOffset_tmp;
+						}
+						
+						var headLine = "Node Information (" + aName + ")";
+						var tabRemoveSVG = varTableGroup.append("svg")
+							.attr("width",String(headLine.length*9.5+"pt"))
+							.attr("height",26)
+						tabRemoveSVG.append("rect")
+							.attr("width", "100%")
+							.attr("height", "100%")
+							.attr("fill", "white");
+						var tabRemoveSymbol = tabRemoveSVG.append("g");
+						tabRemoveSymbol = tabRemoveSymbol
+							.attr("class", "tabRemoveSymbol")
+							.attr("transform", "translate(26,0)")
+						var circle = tabRemoveSymbol.append("circle")
+							.classed("remCircle",true)
+						var minus = tabRemoveSymbol.append("line").classed("remMinus",true)
+						var cx = -20;
+						var cy = 12;
+						circle = circle
+							.attr("cx", cx+5)
+							.attr("cy", cy)
+							.attr("r", 10)
+						minus = minus
+							.attr("x1", cx)
+							.attr("y1", cy)
+							.attr("x2", cx+10)
+							.attr("y2", cy)
+							
+						
+						tabRemoveSVG.append("text").attr("class","tabRemoveText")
+							.attr("transform", "translate(26,20)")
+							.attr("fill", "black")
+							.style("font-family", "Arial")
+							.style("font-size", "16pt")
+							.style("font-weight", "bold")
+							.text(headLine);
+						
+						
+						tabRemoveSymbol
+							.on("mouseover", function(){
+								d3.select(this).style("cursor", "pointer")
+								circle.style("fill", "red").style("fill-opacity", .8);
+								})
+							.on("mouseout", function(){circle.style("fill", "red").style("fill-opacity", .6)})
+						tabRemoveSymbol.on("click", function(d)
+						{
+							varTableDiv.remove();
+						})
+						
+						
+						
+						var data = [];
+						// render the table(s)
+						data.push({ "name" : "Name", "value" : "\""+aVariable.data.name+"\"" })
+						
+						function getNodeXPath(strWrapper,aNode) 
+						{
+						  strWrapper.val = "/"+aNode.data.name+strWrapper.val;
+						  if (!aNode.parent) 
+						  {
+							return strWrapper;
+						  }
+						  else 
+						  {
+							
+							return getNodeXPath(strWrapper, aNode.parent);
+						  }
+						}
+						var xPath_tmp = getNodeXPath({ val : '' }, aVariable).val;
+						data.push({ "name" : "xPath", "value" : xPath_tmp })
+						if (aVariable.data.type){data.push({ "name" : "Type", "value" : aVariable.data.type })}
+						if (aVariable.data.level){data.push({ "name" : "Level", "value" : aVariable.data.level })}
+						if (aVariable.data.children){data.push({ "name" : "Number of children", "value" : aVariable.data.children.length })}
+						if (aVariable.data.dimension){data.push({ "name" : "Dimension", "value" : aVariable.data.dimension })}
+						else if(aVariable.data.dimension===null){data.push({ "name" : "Dimension", "value" : "undefined" })}
+						if (aVariable.data.value){data.push({ "name" : "Value(s)", "value" : aVariable.data.value })}
+						var table = varTableGroup.append('table');
+						tabulate(table,data,['name', 'value']); // 2 column table
+					}
+				    
+				   
+					//menu --> functions for right click options
+					var nodeMenu = [
+					{
+						title: 'Show node information',
+						onMouseDown: function(elm, d, i) {
+							showVariableTable(d);
+						},
+						onMouseUp: function(elm, d, i) {},
+						onMouseOver: function(elm, d, i) {},
+						childrenItems: []
+					},
+					{
+						title: 'Show usage of node in XDSM',
+						onMouseDown: function(elm, d, i) {
+							var theText="";
+							highlight(d,theText);
+						},
+						onMouseUp: function(elm, d, i) {
+							var highlightEdge = d3.selectAll("polygon");
+							highlightEdge.style("stroke-width",1.);
+							d3.selectAll(".treeFrame")
+								.attr("fill-opacity", 0.8)
+								.attr("stroke-opacity", 0.8);
+							d3.selectAll(".nodeText").style("fill-opacity",1);
+						},
+						onMouseOver: function(elm, d, i) {
+						},
+						childrenItems: []
+					},
+					{
+						title: 'Copy x-path to clipboard',
+						onMouseDown: function(elm, d, i) {
+							function copyToClipboard(text) 
+							{
+								window.prompt("Copy to clipboard: Ctrl+C, Enter", text);
+							}
+							function copyXPathToClipboard(data,aText)
+							{
+								aText = "/"+data.data.name+aText;
+								if (data.parent){copyXPathToClipboard(data.parent,aText)}
+								else{copyToClipboard(aText);}
+							}
+							var copyText="";
+							copyXPathToClipboard(d,copyText);
+							d3.select('.d3-context-menu').style('display', 'none');
+						},
+						onMouseUp: function(elm, d, i) {
+						},
+						onMouseOver: function(elm, d, i) {
+						},
+						childrenItems: []
+					},
+					{
+						title: 'Download full tree as XML-file',
+						onMouseDown: function(elm, d, i) {
+							//Begin xml structure with the first element
+							var xmlString = "<"+nodes[0].data.name+">"+"</"+nodes[0].data.name+">";
+							//Create a new xml document
+							var parser = new DOMParser();
+							var xmlDocument = parser.parseFromString(xmlString, "text/xml"); //important to use "text/xml"
+							//Get initial xPath of the tree and pass it to the function "writeTreeToXML"
+							var initialXPath = "/"+nodes[0].data.name;								
+							writeTreeToXML(nodes[0],xmlDocument,initialXPath);
+							//remove all attributes dummyID
+							removeAttributeInAllElements(xmlDocument,'dummyID');
+							//Make the xml document a string
+							var serializer = new XMLSerializer();
+							var xmlString = serializer.serializeToString(xmlDocument);
+							xmlString = vkbeautify.xml(xmlString);														
+							//Download a document with the xml-schema
+							download(aName+'_full.xml',xmlString);						
+						},
+						onMouseUp: function(elm, d, i) {
+						},
+						onMouseOver: function(elm, d, i) {
+						},
+						childrenItems: []
+					},
+					{
+						title: 'Download tree as XML-file from current node',
+						onMouseDown: function(elm, d, i) {
+							var xmlString = putAncestorsInXMLString({ val : '' }, d).val;
+							var initialXPath = putAncestorsInXPath({ val : '' }, d).val;												
+							//Create a new xml document
+							var parser = new DOMParser();
+							var xmlDocument = parser.parseFromString(xmlString, "text/xml"); //important to use "text/xml"
+							//Get initial xPath of the tree and pass it to the function "writeCurrentTreeToXML"
+							writeTreeToXML(d,xmlDocument,initialXPath);
+							//remove all attributes dummyID
+							removeAttributeInAllElements(xmlDocument,'dummyID');
+							//Make the xml document a string
+							var serializer = new XMLSerializer();
+							xmlString = serializer.serializeToString(xmlDocument);
+							xmlString = vkbeautify.xml(xmlString);														
+							//Download a document with the xml-schema
+							download(aName+"_"+d.data.name+'.xml',xmlString);						
+						},
+						onMouseUp: function(elm, d, i) {
+						},
+						onMouseOver: function(elm, d, i) {
+						},
+						childrenItems: []
+					}
+					]
+					
+					//Function writeTreeToXML goes through tree nodes and puts the into an xml document
+					function writeTreeToXML(aNode,anXMLDoc,anXPath)
+					{
+						//Variable "children" 
+						//--> One children variable, no matter whether a node has "_children" (collapsed) or "children" (expanded)
+						var children;
+						if (aNode._children){children = aNode._children;}
+						else if (aNode.children){children = aNode.children;}
+						
+						//Get current xml element with its xPath
+						var element = anXMLDoc.evaluate(anXPath,anXMLDoc, null, XPathResult.FIRST_ORDERED_NODE_TYPE, null ).singleNodeValue;
+						if (element != null) {element.value = '...';}
+						
+						//If a node has children (collapsed or expanded), loop through them
+						if (children)
+						{
+							for (var i=0; i < children.length;i++)
+							{
+								//Name of the new XML element --> childName
+								var child = children[i];
+								var childName = child.data.name.split(/[\[\]]+/);//Split childName at "[]" which is the uID 
+								var cleanChildName = childName[0].split(/[\+\*\^\-\ \#]+/);//Split childName all special characters
+								var newNode = anXMLDoc.createElement(String(cleanChildName[0]));
+								
+								//The children are appended to the xPath --> newXPath
+								var newXPath = anXPath+"/"+cleanChildName[0];
+								
+								//If childName contains a uID, make the uID an attribute
+								if (childName[1])
+								{
+									if (parseInt(childName[1]))
+									{
+										var dummyID = childName[1];
+										newNode.setAttribute("dummyID", dummyID)
+										newXPath = newXPath+"[@dummyID='"+dummyID+"']";
+									}
+									else
+									{
+										var uID = childName[1];
+										newNode.setAttribute("uID", uID)
+										newXPath = newXPath+"[@uID='"+uID+"']";
+									}
+								}
+								if (cleanChildName.length>1) {newNode.setAttribute("elementName", childName[0])};
+								
+								//Append the newNode to the xml structure
+								element.appendChild(newNode);
+								
+								
+								
+								////aigner: Sorting of XML elements according to "uID"
+								// var items = element.children;
+								// var itemsArr = [];
+								// for (var j in items) {
+									// if (items[j].nodeType == 1) { // get rid of the whitespace text nodes
+										// itemsArr.push(items[j]);
+									// }
+								// }
+								// itemsArr.sort(function(a,b){
+									// if (a.getAttribute("uID") < b.getAttribute("uID"))
+										// return -1;
+									// if (a.getAttribute("uID") > b.getAttribute("uID"))
+										// return 1;
+									// return 0;
+									// });
+
+								// for (j = 0; j < itemsArr.length; ++j) {
+								  // element.appendChild(itemsArr[j]);
+								// }
+								
+								//call function writeTreeToXML recursively for all children
+								writeTreeToXML(child,anXMLDoc,newXPath)
+							}
+						}
+						else
+						{
+							if (aNode.data.value){element.innerHTML = String(aNode.data.value);}
+							else{element.innerHTML = " ";}
+						}
+						//return the xml document
+						return anXMLDoc;
+					}
+					
+					function removeAttributeInAllElements(aDocument,attribute)
+					{
+					  var matchingElements = [];
+					  var allElements = aDocument.getElementsByTagName('*');
+					  for (var i = 0, n = allElements.length; i < n; i++)
+					  {
+						if (allElements[i].getAttribute(attribute) !== null)
+						{
+							allElements[i].removeAttribute(attribute);
+						}
+					  }
+					  return matchingElements;
+					}
+					
+					function putAncestorsInXMLString(strWrapper, aNode)
+					{
+						//Name of the new XML element
+						var nodeName = aNode.data.name.split(/[\[\]]+/);//Split name at "[]" which is the uID 
+						var cleanNodeName = nodeName[0].split(/[\+\*\^\-\ \#]+/);//Split nodeName all special characters
+						//If nodeName contains a uID, make the uID an attribute
+						if (nodeName[1])
+						{
+							var uID = nodeName[1];
+							strWrapper.val = "<"+cleanNodeName[0]+" uID='"+ uID +"'>"+strWrapper.val+"</"+cleanNodeName[0]+">";;
+						}
+						else
+						{
+							strWrapper.val = "<"+cleanNodeName[0]+">"+strWrapper.val+"</"+cleanNodeName[0]+">";;
+						}
+						var aParent = aNode.parent;
+						if (aParent)
+						{
+							return putAncestorsInXMLString(strWrapper, aParent);
+						}
+						else 
+						{
+							return strWrapper;
+						}
+					}
+					
+					function putAncestorsInXPath(strWrapper, aNode)
+					{
+						//Name of the new XML element
+						var nodeName = aNode.data.name.split(/[\[\]]+/);//Split name at "[]" which is the uID 
+						var cleanNodeName = nodeName[0].split(/[\+\*\^\-\ \#]+/);//Split nodeName all special characters
+						//If nodeName contains a uID, make the uID an attribute
+						if (nodeName[1])
+						{
+							var uID = nodeName[1];
+							strWrapper.val = "/"+cleanNodeName[0]+"[@uID='"+uID+"']"+strWrapper.val;
+						}
+						else
+						{
+							strWrapper.val = "/"+cleanNodeName[0]+strWrapper.val;
+						}
+						var aParent = aNode.parent;
+						if (aParent)
+						{
+							return putAncestorsInXPath(strWrapper, aParent);
+						}
+						else 
+						{
+							return strWrapper;
+						}
+					}
+					  
+					nodeEnter = nodeEnter
+					.on('contextmenu', d3.contextMenu(nodeMenu));
+					
+					
+
+					// UPDATE
+					var nodeUpdate = nodeEnter.merge(node);
+
+					// Transition to the proper position for the node
+					nodeUpdate.transition()
+					.duration(duration)
+					.attr("transform", function(d) { 
+						return "translate(" + d.y + "," + d.x + ")";
+					 });
+
+					// Update the node attributes and style
+					nodeUpdate.select('circle.node')
+					.attr('r', 4.5)
+					.style("fill", function(d) {
+						return d._children ? "lightsteelblue" : "#fff";
+					})
+					.attr('cursor', 'pointer');
+					
+					nodeUpdate.select('text')
+					.text(function(d) { return d.data.text; });
+
+
+					// Remove any exiting nodes
+					var nodeExit = node.exit().transition()
+					  .duration(duration)
+					  .attr("transform", function(d) {
+						  return "translate(" + source.y + "," + source.x + ")";
+					  })
+					  .remove();
+
+					// ****************** links section ***************************
+
+					// Update the links...
+					var link = svgGroup.selectAll('path.link')
+					  .data(links, function(d) { return d.id; });
+
+					// Enter any new links at the parent's previous position.
+					var linkEnter = link.enter().insert('path', "g")
+					  .attr("class", "link")
+					  .attr('d', function(d){
+						var o = {x: source.x0, y: source.y0}
+						return diagonal(o, o)
+					  });
+
+					// UPDATE
+					var linkUpdate = linkEnter.merge(link);
+
+					// Transition back to the parent element position
+					linkUpdate.transition()
+					  .duration(duration)
+					  .attr('d', function(d){ return diagonal(d, d.parent) });
+
+					// Remove any exiting links
+					var linkExit = link.exit().transition()
+					  .duration(duration)
+					  .attr('d', function(d) {
+						var o = {x: source.x, y: source.y}
+						return diagonal(o, o)
+					  })
+					  .remove();
+
+					// Store the old positions for transition.
+					nodes.forEach(function(d){
+					d.x0 = d.x;
+					d.y0 = d.y;
+					});
+
+					// Creates a curved (diagonal) path from parent to the child nodes
+					function diagonal(s, d) {
+					return "M" + s.y + "," + s.x
+						  + "C" + (s.y + d.y) / 2 + "," + s.x
+						  + " " + (s.y + d.y) / 2 + "," + d.x
+						  + " " + d.y + "," + d.x;
+					}
+				}
+			});
+		}
+	}
+});
+
+////aigner: Unused funcktions --> Could be helpful at some point
+////aigner: clone function, so that original object is not overwritten but deep copied
+// function clone(obj) {
+	// if (null == obj || "object" != typeof obj) return obj;
+	// var copy = obj.constructor();
+	// for (var attr in obj) {
+		// if (obj.hasOwnProperty(attr)) copy[attr] = obj[attr];
+	// }
+	// return copy;
+// }
+////aigner: cleanArray Function
+// function cleanArray(actual) 
+// {
+	// var newArray = new Array();
+	// for (var i = 0; i < actual.length; i++) 
+	// {
+		// if (actual[i]) 
+		// {
+			// newArray.push(actual[i]);
+		// }
+	// }
+	// return newArray;
+// }
+//#####################################################################//
+
+
+},{"./src/animation":2,"./src/graph":3,"./src/xdsm":5,"d3":1}]},{},[6]);
-- 
GitLab