highcharts.js 6001-9000

 文件过大分5部分

highcharts.js 0-3000_spencer_tseng的博客-优快云博客
highcharts.js 3001-6000_spencer_tseng的博客-优快云博客
highcharts.js 6001-9000_spencer_tseng的博客-优快云博客
highcharts.js 9001-12000_spencer_tseng的博客-优快云博客
highcharts.js 12001-12677_spencer_tseng的博客-优快云博客

highcharts.js 6001-9000

		d = D.syncTimeout,
		q = D.removeEvent,
		h = D.uniqueKey;
		g = function() {
			function k() {
				this.category = void 0;
				this.formatPrefix = "point";
				this.id = void 0;
				this.isNull = !1;
				this.percentage = this.options = this.name = void 0;
				this.selected = !1;
				this.total = this.shapeArgs = this.series = void 0;
				this.visible = !0;
				this.x = void 0
			}
			k.prototype.animateBeforeDestroy = function() {
				var b = this,
				a = {
					x: b.startXPos,
					opacity: 0
				},
				d = b.getGraphicalProps();
				d.singular.forEach(function(d) {
					b[d] = b[d].animate("dataLabel" === d ? {
						x: b[d].startXPos,
						y: b[d].startYPos,
						opacity: 0
					}: a)
				});
				d.plural.forEach(function(a) {
					b[a].forEach(function(a) {
						a.element && a.animate(c({
							x: b.startXPos
						},
						a.startYPos ? {
							x: a.startXPos,
							y: a.startYPos
						}: {}))
					})
				})
			};
			k.prototype.applyOptions = function(b, a) {
				var d = this.series,
				h = d.options.pointValKey || d.pointValKey;
				b = k.prototype.optionsToObject.call(this, b);
				c(this, b);
				this.options = this.options ? c(this.options, b) : b;
				b.group && delete this.group;
				b.dataLabels && delete this.dataLabels;
				h && (this.y = k.prototype.getNestedProperty.call(this, h));
				this.formatPrefix = (this.isNull = this.isValid && !this.isValid()) ? "null": "point";
				this.selected && (this.state = "select");
				"name" in this && "undefined" === typeof a && d.xAxis && d.xAxis.hasNames && (this.x = d.xAxis.nameToX(this));
				"undefined" === typeof this.x && d ? this.x = "undefined" === typeof a ? d.autoIncrement() : a: C(b.x) && d.options.relativeXValue && (this.x = d.autoIncrement(b.x));
				return this
			};
			k.prototype.destroy = function() {
				function b() {
					if (a.graphic || a.graphics || a.dataLabel || a.dataLabels) q(a),
					a.destroyElements();
					for (g in a) a[g] = null
				}
				var a = this,
				c = a.series,
				h = c.chart;
				c = c.options.dataSorting;
				var e = h.hoverPoints,
				k = v(a.series.chart.renderer.globalAnimation),
				g;
				a.legendItem && h.legend.destroyItem(a);
				e && (a.setState(), f(e, a), e.length || (h.hoverPoints = null));
				if (a === h.hoverPoint) a.onMouseOut();
				c && c.enabled ? (this.animateBeforeDestroy(), d(b, k.duration)) : b();
				h.pointCount--
			};
			k.prototype.destroyElements = function(b) {
				var a = this;
				b = a.getGraphicalProps(b);
				b.singular.forEach(function(b) {
					a[b] = a[b].destroy()
				});
				b.plural.forEach(function(b) {
					a[b].forEach(function(b) {
						b.element && b.destroy()
					});
					delete a[b]
				})
			};
			k.prototype.firePointEvent = function(b, a, d) {
				var c = this,
				h = this.series.options; (h.point.events[b] || c.options && c.options.events && c.options.events[b]) && c.importEvents();
				"click" === b && h.allowPointSelect && (d = function(b) {
					c.select && c.select(null, b.ctrlKey || b.metaKey || b.shiftKey)
				});
				l(c, b, a, d)
			};
			k.prototype.getClassName = function() {
				return "highcharts-point" + (this.selected ? " highcharts-point-select": "") + (this.negative ? " highcharts-negative": "") + (this.isNull ? " highcharts-null-point": "") + ("undefined" !== typeof this.colorIndex ? " highcharts-color-" + this.colorIndex: "") + (this.options.className ? " " + this.options.className: "") + (this.zone && this.zone.className ? " " + this.zone.className.replace("highcharts-negative", "") : "")
			};
			k.prototype.getGraphicalProps = function(b) {
				var a = this,
				d = [],
				c = {
					singular: [],
					plural: []
				},
				h;
				b = b || {
					graphic: 1,
					dataLabel: 1
				};
				b.graphic && d.push("graphic", "shadowGroup");
				b.dataLabel && d.push("dataLabel", "dataLabelPath", "dataLabelUpper", "connector");
				for (h = d.length; h--;) {
					var e = d[h];
					a[e] && c.singular.push(e)
				} ["graphic", "dataLabel", "connector"].forEach(function(d) {
					var h = d + "s";
					b[d] && a[h] && c.plural.push(h)
				});
				return c
			};
			k.prototype.getLabelConfig = function() {
				return {
					x: this.category,
					y: this.y,
					color: this.color,
					colorIndex: this.colorIndex,
					key: this.name || this.category,
					series: this.series,
					point: this,
					percentage: this.percentage,
					total: this.total || this.stackTotal
				}
			};
			k.prototype.getNestedProperty = function(b) {
				if (b) return 0 === b.indexOf("custom.") ? m(b, this.options) : this[b]
			};
			k.prototype.getZone = function() {
				var b = this.series,
				a = b.zones;
				b = b.zoneAxis || "y";
				var d, c = 0;
				for (d = a[c]; this[b] >= d.value;) d = a[++c];
				this.nonZonedColor || (this.nonZonedColor = this.color);
				this.color = d && d.color && !this.options.color ? d.color: this.nonZonedColor;
				return d
			};
			k.prototype.hasNewShapeType = function() {
				return (this.graphic && (this.graphic.symbolName || this.graphic.element.nodeName)) !== this.shapeType
			};
			k.prototype.init = function(b, a, d) {
				this.series = b;
				this.applyOptions(a, d);
				this.id = n(this.id) ? this.id: h();
				this.resolveColor();
				b.chart.pointCount++;
				l(this, "afterInit");
				return this
			};
			k.prototype.isValid = function() {
				return null !== this.x && C(this.y)
			};
			k.prototype.optionsToObject = function(b) {
				var a = this.series,
				d = a.options.keys,
				c = d || a.pointArrayMap || ["y"],
				h = c.length,
				f = {},
				g = 0,
				l = 0;
				if (C(b) || null === b) f[c[0]] = b;
				else if (e(b)) for (!d && b.length > h && (a = typeof b[0], "string" === a ? f.name = b[0] : "number" === a && (f.x = b[0]), g++); l < h;) d && "undefined" === typeof b[g] || (0 < c[l].indexOf(".") ? k.prototype.setNestedProperty(f, b[g], c[l]) : f[c[l]] = b[g]),
				g++,
				l++;
				else "object" === typeof b && (f = b, b.dataLabels && (a._hasPointLabels = !0), b.marker && (a._hasPointMarkers = !0));
				return f
			};
			k.prototype.resolveColor = function() {
				var b = this.series,
				a = b.chart.styledMode;
				var d = b.chart.options.chart.colorCount;
				delete this.nonZonedColor;
				if (b.options.colorByPoint) {
					if (!a) {
						d = b.options.colors || b.chart.options.colors;
						var c = d[b.colorCounter];
						d = d.length
					}
					a = b.colorCounter;
					b.colorCounter++;
					b.colorCounter === d && (b.colorCounter = 0)
				} else a || (c = b.color),
				a = b.colorIndex;
				this.colorIndex = A(this.options.colorIndex, a);
				this.color = A(this.options.color, c)
			};
			k.prototype.setNestedProperty = function(b, a, d) {
				d.split(".").reduce(function(b, d, c, h) {
					b[d] = h.length - 1 === c ? a: J(b[d], !0) ? b[d] : {};
					return b[d]
				},
				b);
				return b
			};
			k.prototype.shouldDraw = function() {
				return ! this.isNull
			};
			k.prototype.tooltipFormatter = function(b) {
				var a = this.series,
				d = a.tooltipOptions,
				c = A(d.valueDecimals, ""),
				h = d.valuePrefix || "",
				e = d.valueSuffix || "";
				a.chart.styledMode && (b = a.chart.tooltip.styledModeFormat(b)); (a.pointArrayMap || ["y"]).forEach(function(a) {
					a = "{point." + a;
					if (h || e) b = b.replace(RegExp(a + "}", "g"), h + a + "}" + e);
					b = b.replace(RegExp(a + "}", "g"), a + ":,." + c + "f}")
				});
				return r(b, {
					point: this,
					series: this.series
				},
				a.chart)
			};
			k.prototype.update = function(b, a, d, c) {
				function h() {
					e.applyOptions(b);
					var c = k && e.hasMockGraphic;
					c = null === e.y ? !c: c;
					k && c && (e.graphic = k.destroy(), delete e.hasMockGraphic);
					J(b, !0) && (k && k.element && b && b.marker && "undefined" !== typeof b.marker.symbol && (e.graphic = k.destroy()), b && b.dataLabels && e.dataLabel && (e.dataLabel = e.dataLabel.destroy()), e.connector && (e.connector = e.connector.destroy()));
					l = e.index;
					f.updateParallelArrays(e, l);
					p.data[l] = J(p.data[l], !0) || J(b, !0) ? e.options: A(b, p.data[l]);
					f.isDirty = f.isDirtyData = !0; ! f.fixedBox && f.hasCartesianSeries && (g.isDirtyBox = !0);
					"point" === p.legendType && (g.isDirtyLegend = !0);
					a && g.redraw(d)
				}
				var e = this,
				f = e.series,
				k = e.graphic,
				g = f.chart,
				p = f.options,
				l;
				a = A(a, !0); ! 1 === c ? h() : e.firePointEvent("update", {
					options: b
				},
				h)
			};
			k.prototype.remove = function(b, a) {
				this.series.removePoint(this.series.data.indexOf(this), b, a)
			};
			k.prototype.select = function(b, a) {
				var d = this,
				c = d.series,
				h = c.chart;
				this.selectedStaging = b = A(b, !d.selected);
				d.firePointEvent(b ? "select": "unselect", {
					accumulate: a
				},
				function() {
					d.selected = d.options.selected = b;
					c.options.data[c.data.indexOf(d)] = d.options;
					d.setState(b && "select");
					a || h.getSelectedPoints().forEach(function(b) {
						var a = b.series;
						b.selected && b !== d && (b.selected = b.options.selected = !1, a.options.data[a.data.indexOf(b)] = b.options, b.setState(h.hoverPoints && a.options.inactiveOtherPoints ? "inactive": ""), b.firePointEvent("unselect"))
					})
				});
				delete this.selectedStaging
			};
			k.prototype.onMouseOver = function(b) {
				var a = this.series.chart,
				d = a.pointer;
				b = b ? d.normalize(b) : d.getChartCoordinatesFromPoint(this, a.inverted);
				d.runPointActions(b, this)
			};
			k.prototype.onMouseOut = function() {
				var b = this.series.chart;
				this.firePointEvent("mouseOut");
				this.series.options.inactiveOtherPoints || (b.hoverPoints || []).forEach(function(b) {
					b.setState()
				});
				b.hoverPoints = b.hoverPoint = null
			};
			k.prototype.importEvents = function() {
				if (!this.hasImportedEvents) {
					var b = this,
					a = I(b.series.options.point, b.options).events;
					b.events = a;
					L(a,
					function(a, d) {
						u(a) && t(b, d, a)
					});
					this.hasImportedEvents = !0
				}
			};
			k.prototype.setState = function(b, d) {
				var h = this.series,
				e = this.state,
				f = h.options.states[b || "normal"] || {},
				k = G.plotOptions[h.type].marker && h.options.marker,
				g = k && !1 === k.enabled,
				p = k && k.states && k.states[b || "normal"] || {},
				q = !1 === p.enabled,
				m = this.marker || {},
				n = h.chart,
				u = k && h.markerAttribs,
				t = h.halo,
				r,
				v = h.stateMarkerGraphic;
				b = b || "";
				if (! (b === this.state && !d || this.selected && "select" !== b || !1 === f.enabled || b && (q || g && !1 === p.enabled) || b && m.states && m.states[b] && !1 === m.states[b].enabled)) {
					this.state = b;
					u && (r = h.markerAttribs(this, b));
					if (this.graphic && !this.hasMockGraphic) {
						e && this.graphic.removeClass("highcharts-point-" + e);
						b && this.graphic.addClass("highcharts-point-" + b);
						if (!n.styledMode) {
							e = h.pointAttribs(this, b);
							var F = A(n.options.chart.animation, f.animation);
							var P = e.opacity;
							h.options.inactiveOtherPoints && C(P) && ((this.dataLabels || []).forEach(function(b) {
								b && !b.hasClass("highcharts-data-label-hidden") && b.animate({
									opacity: P
								},
								F)
							}), this.connector && this.connector.animate({
								opacity: P
							},
							F));
							this.graphic.animate(e, F)
						}
						r && this.graphic.animate(r, A(n.options.chart.animation, p.animation, k.animation));
						v && v.hide()
					} else {
						if (b && p) {
							k = m.symbol || h.symbol;
							v && v.currentSymbol !== k && (v = v.destroy());
							if (r) if (v) v[d ? "animate": "attr"]({
								x: r.x,
								y: r.y
							});
							else k && (h.stateMarkerGraphic = v = n.renderer.symbol(k, r.x, r.y, r.width, r.height).add(h.markerGroup), v.currentSymbol = k); ! n.styledMode && v && "inactive" !== this.state && v.attr(h.pointAttribs(this, b))
						}
						v && (v[b && this.isInside ? "show": "hide"](), v.element.point = this, v.addClass(this.getClassName(), !0))
					}
					f = f.halo;
					r = (v = this.graphic || v) && v.visibility || "inherit";
					f && f.size && v && "hidden" !== r && !this.isCluster ? (t || (h.halo = t = n.renderer.path().add(v.parentGroup)), t.show()[d ? "animate": "attr"]({
						d: this.haloPath(f.size)
					}), t.attr({
						"class": "highcharts-halo highcharts-color-" + A(this.colorIndex, h.colorIndex) + (this.className ? " " + this.className: ""),
						visibility: r,
						zIndex: -1
					}), t.point = this, n.styledMode || t.attr(c({
						fill: this.color || h.color,
						"fill-opacity": f.opacity
					},
					a.filterUserAttributes(f.attributes || {})))) : t && t.point && t.point.haloPath && t.animate({
						d: t.point.haloPath(0)
					},
					null, t.hide);
					l(this, "afterSetState", {
						state: b
					})
				}
			};
			k.prototype.haloPath = function(b) {
				return this.series.chart.renderer.symbols.circle(Math.floor(this.plotX) - b, this.plotY - b, 2 * b, 2 * b)
			};
			return k
		} ();
		"";
		return g
	});
	K(g, "Core/Pointer.js", [g["Core/Color/Color.js"], g["Core/Globals.js"], g["Core/Tooltip.js"], g["Core/Utilities.js"]],
	function(a, g, x, E) {
		var v = a.parse,
		B = g.charts,
		G = g.noop,
		r = E.addEvent,
		t = E.attr,
		n = E.css,
		f = E.defined,
		c = E.extend,
		l = E.find,
		m = E.fireEvent,
		e = E.isNumber,
		u = E.isObject,
		C = E.objectEach,
		J = E.offset,
		I = E.pick,
		L = E.splat;
		a = function() {
			function a(a, c) {
				this.lastValidTouch = {};
				this.pinchDown = [];
				this.runChartClick = !1;
				this.eventsToUnbind = [];
				this.chart = a;
				this.hasDragged = !1;
				this.options = c;
				this.init(a, c)
			}
			a.prototype.applyInactiveState = function(a) {
				var d = [],
				c; (a || []).forEach(function(a) {
					c = a.series;
					d.push(c);
					c.linkedParent && d.push(c.linkedParent);
					c.linkedSeries && (d = d.concat(c.linkedSeries));
					c.navigatorSeries && d.push(c.navigatorSeries)
				});
				this.chart.series.forEach(function(a) { - 1 === d.indexOf(a) ? a.setState("inactive", !0) : a.options.inactiveOtherPoints && a.setAllPointsToState("inactive")
				})
			};
			a.prototype.destroy = function() {
				var d = this;
				this.eventsToUnbind.forEach(function(a) {
					return a()
				});
				this.eventsToUnbind = [];
				g.chartCount || (a.unbindDocumentMouseUp && (a.unbindDocumentMouseUp = a.unbindDocumentMouseUp()), a.unbindDocumentTouchEnd && (a.unbindDocumentTouchEnd = a.unbindDocumentTouchEnd()));
				clearInterval(d.tooltipTimeout);
				C(d,
				function(a, c) {
					d[c] = void 0
				})
			};
			a.prototype.getSelectionMarkerAttrs = function(a, c) {
				var d = this,
				e = {
					args: {
						chartX: a,
						chartY: c
					},
					attrs: {},
					shapeType: "rect"
				};
				m(this, "getSelectionMarkerAttrs", e,
				function(b) {
					var h = d.chart,
					e = d.mouseDownX;
					e = void 0 === e ? 0 : e;
					var f = d.mouseDownY;
					f = void 0 === f ? 0 : f;
					var k = d.zoomHor,
					g = d.zoomVert;
					b = b.attrs;
					b.x = h.plotLeft;
					b.y = h.plotTop;
					b.width = k ? 1 : h.plotWidth;
					b.height = g ? 1 : h.plotHeight;
					k && (h = a - e, b.width = Math.abs(h), b.x = (0 < h ? 0 : h) + e);
					g && (h = c - f, b.height = Math.abs(h), b.y = (0 < h ? 0 : h) + f)
				});
				return e
			};
			a.prototype.drag = function(a) {
				var d = this.chart,
				c = d.options.chart,
				e = d.plotLeft,
				b = d.plotTop,
				f = d.plotWidth,
				g = d.plotHeight,
				l = this.mouseDownX || 0,
				m = this.mouseDownY || 0,
				n = u(c.panning) ? c.panning && c.panning.enabled: c.panning,
				A = c.panKey && a[c.panKey + "Key"],
				t = a.chartX,
				r = a.chartY,
				C = this.selectionMarker;
				C && C.touch || (t < e ? t = e: t > e + f && (t = e + f), r < b ? r = b: r > b + g && (r = b + g), this.hasDragged = Math.sqrt(Math.pow(l - t, 2) + Math.pow(m - r, 2)), 10 < this.hasDragged && (e = d.isInsidePlot(l - e, m - b, {
					visiblePlotOnly: !0
				}), r = this.getSelectionMarkerAttrs(t, r), t = r.shapeType, r = r.attrs, !d.hasCartesianSeries && !d.mapView || !this.zoomX && !this.zoomY || !e || A || C || (this.selectionMarker = C = d.renderer[t](), C.attr({
					"class": "highcharts-selection-marker",
					zIndex: 7
				}).add(), d.styledMode || C.attr({
					fill: c.selectionMarkerFill || v("#335cad").setOpacity(.25).get()
				})), C && C.attr(r), e && !C && n && d.pan(a, c.panning)))
			};
			a.prototype.dragStart = function(a) {
				var d = this.chart;
				d.mouseIsDown = a.type;
				d.cancelClick = !1;
				d.mouseDownX = this.mouseDownX = a.chartX;
				d.mouseDownY = this.mouseDownY = a.chartY
			};
			a.prototype.getSelectionBox = function(a) {
				var d = {
					args: {
						marker: a
					},
					result: {}
				};
				m(this, "getSelectionBox", d,
				function(d) {
					d.result = {
						x: a.attr ? +a.attr("x") : a.x,
						y: a.attr ? +a.attr("y") : a.y,
						width: a.attr ? a.attr("width") : a.width,
						height: a.attr ? a.attr("height") : a.height
					}
				});
				return d.result
			};
			a.prototype.drop = function(a) {
				var d = this,
				h = this.chart,
				k = this.hasPinched;
				if (this.selectionMarker) {
					var b = this.getSelectionBox(this.selectionMarker),
					g = b.x,
					l = b.y,
					w = b.width,
					u = b.height,
					A = {
						originalEvent: a,
						xAxis: [],
						yAxis: [],
						x: g,
						y: l,
						width: w,
						height: u
					},
					t = !!h.mapView;
					if (this.hasDragged || k) h.axes.forEach(function(b) {
						if (b.zoomEnabled && f(b.min) && (k || d[{
							xAxis: "zoomX",
							yAxis: "zoomY"
						} [b.coll]]) && e(g) && e(l) && e(w) && e(u)) {
							var c = b.horiz,
							h = "touchend" === a.type ? b.minPixelPadding: 0,
							p = b.toValue((c ? g: l) + h);
							c = b.toValue((c ? g + w: l + u) - h);
							A[b.coll].push({
								axis: b,
								min: Math.min(p, c),
								max: Math.max(p, c)
							});
							t = !0
						}
					}),
					t && m(h, "selection", A,
					function(b) {
						h.zoom(c(b, k ? {
							animation: !1
						}: null))
					});
					e(h.index) && (this.selectionMarker = this.selectionMarker.destroy());
					k && this.scaleGroups()
				}
				h && e(h.index) && (n(h.container, {
					cursor: h._cursor
				}), h.cancelClick = 10 < this.hasDragged, h.mouseIsDown = this.hasDragged = this.hasPinched = !1, this.pinchDown = [])
			};
			a.prototype.findNearestKDPoint = function(a, c, h) {
				var d;
				a.forEach(function(b) {
					var a = !(b.noSharedTooltip && c) && 0 > b.options.findNearestPointBy.indexOf("y");
					b = b.searchPoint(h, a);
					if ((a = u(b, !0) && b.series) && !(a = !u(d, !0))) {
						a = d.distX - b.distX;
						var e = d.dist - b.dist,
						f = (b.series.group && b.series.group.zIndex) - (d.series.group && d.series.group.zIndex);
						a = 0 < (0 !== a && c ? a: 0 !== e ? e: 0 !== f ? f: d.series.index > b.series.index ? -1 : 1)
					}
					a && (d = b)
				});
				return d
			};
			a.prototype.getChartCoordinatesFromPoint = function(a, c) {
				var d = a.series,
				f = d.xAxis;
				d = d.yAxis;
				var b = a.shapeArgs;
				if (f && d) {
					var g = I(a.clientX, a.plotX),
					l = a.plotY || 0;
					a.isNode && b && e(b.x) && e(b.y) && (g = b.x, l = b.y);
					return c ? {
						chartX: d.len + d.pos - l,
						chartY: f.len + f.pos - g
					}: {
						chartX: g + f.pos,
						chartY: l + d.pos
					}
				}
				if (b && b.x && b.y) return {
					chartX: b.x,
					chartY: b.y
				}
			};
			a.prototype.getChartPosition = function() {
				if (this.chartPosition) return this.chartPosition;
				var a = this.chart.container,
				c = J(a);
				this.chartPosition = {
					left: c.left,
					top: c.top,
					scaleX: 1,
					scaleY: 1
				};
				var h = a.offsetWidth;
				a = a.offsetHeight;
				2 < h && 2 < a && (this.chartPosition.scaleX = c.width / h, this.chartPosition.scaleY = c.height / a);
				return this.chartPosition
			};
			a.prototype.getCoordinates = function(a) {
				var d = {
					xAxis: [],
					yAxis: []
				};
				this.chart.axes.forEach(function(c) {
					d[c.isXAxis ? "xAxis": "yAxis"].push({
						axis: c,
						value: c.toValue(a[c.horiz ? "chartX": "chartY"])
					})
				});
				return d
			};
			a.prototype.getHoverData = function(a, c, h, e, b, f) {
				var d = [];
				e = !(!e || !a);
				var g = function(a) {
					return a.visible && !(!b && a.directTouch) && I(a.options.enableMouseTracking, !0)
				},
				k = {
					chartX: f ? f.chartX: void 0,
					chartY: f ? f.chartY: void 0,
					shared: b
				};
				m(this, "beforeGetHoverData", k);
				var p = c && !c.stickyTracking ? [c] : h.filter(function(b) {
					return b.stickyTracking && (k.filter || g)(b)
				});
				var q = e || !f ? a: this.findNearestKDPoint(p, b, f);
				c = q && q.series;
				q && (b && !c.noSharedTooltip ? (p = h.filter(function(b) {
					return k.filter ? k.filter(b) : g(b) && !b.noSharedTooltip
				}), p.forEach(function(b) {
					var a = l(b.points,
					function(b) {
						return b.x === q.x && !b.isNull
					});
					u(a) && (b.boosted && b.boost && (a = b.boost.getPoint(a)), d.push(a))
				})) : d.push(q));
				k = {
					hoverPoint: q
				};
				m(this, "afterGetHoverData", k);
				return {
					hoverPoint: k.hoverPoint,
					hoverSeries: c,
					hoverPoints: d
				}
			};
			a.prototype.getPointFromEvent = function(a) {
				a = a.target;
				for (var d; a && !d;) d = a.point,
				a = a.parentNode;
				return d
			};
			a.prototype.onTrackerMouseOut = function(a) {
				a = a.relatedTarget || a.toElement;
				var d = this.chart.hoverSeries;
				this.isDirectTouch = !1;
				if (! (!d || !a || d.stickyTracking || this.inClass(a, "highcharts-tooltip") || this.inClass(a, "highcharts-series-" + d.index) && this.inClass(a, "highcharts-tracker"))) d.onMouseOut()
			};
			a.prototype.inClass = function(a, c) {
				for (var d; a;) {
					if (d = t(a, "class")) {
						if ( - 1 !== d.indexOf(c)) return ! 0;
						if ( - 1 !== d.indexOf("highcharts-container")) return ! 1
					}
					a = a.parentElement
				}
			};
			a.prototype.init = function(a, c) {
				this.options = c;
				this.chart = a;
				this.runChartClick = !(!c.chart.events || !c.chart.events.click);
				this.pinchDown = [];
				this.lastValidTouch = {};
				x && (a.tooltip = new x(a, c.tooltip));
				this.setDOMEvents()
			};
			a.prototype.normalize = function(a, e) {
				var d = a.touches,
				f = d ? d.length ? d.item(0) : I(d.changedTouches, a.changedTouches)[0] : a;
				e || (e = this.getChartPosition());
				d = f.pageX - e.left;
				f = f.pageY - e.top;
				d /= e.scaleX;
				f /= e.scaleY;
				return c(a, {
					chartX: Math.round(d),
					chartY: Math.round(f)
				})
			};
			a.prototype.onContainerClick = function(a) {
				var d = this.chart,
				h = d.hoverPoint;
				a = this.normalize(a);
				var e = d.plotLeft,
				b = d.plotTop;
				d.cancelClick || (h && this.inClass(a.target, "highcharts-tracker") ? (m(h.series, "click", c(a, {
					point: h
				})), d.hoverPoint && h.firePointEvent("click", a)) : (c(a, this.getCoordinates(a)), d.isInsidePlot(a.chartX - e, a.chartY - b, {
					visiblePlotOnly: !0
				}) && m(d, "click", a)))
			};
			a.prototype.onContainerMouseDown = function(a) {
				var d = 1 === ((a.buttons || a.button) & 1);
				a = this.normalize(a);
				if (g.isFirefox && 0 !== a.button) this.onContainerMouseMove(a);
				if ("undefined" === typeof a.button || d) this.zoomOption(a),
				d && a.preventDefault && a.preventDefault(),
				this.dragStart(a)
			};
			a.prototype.onContainerMouseLeave = function(d) {
				var c = B[I(a.hoverChartIndex, -1)],
				h = this.chart.tooltip;
				d = this.normalize(d);
				c && (d.relatedTarget || d.toElement) && (c.pointer.reset(), c.pointer.chartPosition = void 0);
				h && !h.isHidden && this.reset()
			};
			a.prototype.onContainerMouseEnter = function(a) {
				delete this.chartPosition
			};
			a.prototype.onContainerMouseMove = function(a) {
				var d = this.chart,
				c = d.tooltip;
				a = this.normalize(a);
				this.setHoverChartIndex();
				a.preventDefault || (a.returnValue = !1); ("mousedown" === d.mouseIsDown || this.touchSelect(a)) && this.drag(a);
				d.openMenu || !this.inClass(a.target, "highcharts-tracker") && !d.isInsidePlot(a.chartX - d.plotLeft, a.chartY - d.plotTop, {
					visiblePlotOnly: !0
				}) || c && c.shouldStickOnContact(a) || (this.inClass(a.target, "highcharts-no-tooltip") ? this.reset(!1, 0) : this.runPointActions(a))
			};
			a.prototype.onDocumentTouchEnd = function(d) {
				var c = B[I(a.hoverChartIndex, -1)];
				c && c.pointer.drop(d)
			};
			a.prototype.onContainerTouchMove = function(a) {
				if (this.touchSelect(a)) this.onContainerMouseMove(a);
				else this.touch(a)
			};
			a.prototype.onContainerTouchStart = function(a) {
				if (this.touchSelect(a)) this.onContainerMouseDown(a);
				else this.zoomOption(a),
				this.touch(a, !0)
			};
			a.prototype.onDocumentMouseMove = function(a) {
				var d = this.chart,
				c = d.tooltip,
				e = this.chartPosition;
				a = this.normalize(a, e); ! e || d.isInsidePlot(a.chartX - d.plotLeft, a.chartY - d.plotTop, {
					visiblePlotOnly: !0
				}) || c && c.shouldStickOnContact(a) || this.inClass(a.target, "highcharts-tracker") || this.reset()
			};
			a.prototype.onDocumentMouseUp = function(d) {
				var c = B[I(a.hoverChartIndex, -1)];
				c && c.pointer.drop(d)
			};
			a.prototype.pinch = function(a) {
				var d = this,
				h = d.chart,
				e = d.pinchDown,
				b = a.touches || [],
				f = b.length,
				g = d.lastValidTouch,
				l = d.hasZoom,
				n = {},
				u = 1 === f && (d.inClass(a.target, "highcharts-tracker") && h.runTrackerClick || d.runChartClick),
				A = {},
				t = d.chart.tooltip;
				t = 1 === f && I(t && t.options.followTouchMove, !0);
				var r = d.selectionMarker;
				1 < f ? d.initiated = !0 : t && (d.initiated = !1);
				l && d.initiated && !u && !1 !== a.cancelable && a.preventDefault(); [].map.call(b,
				function(b) {
					return d.normalize(b)
				});
				"touchstart" === a.type ? ([].forEach.call(b,
				function(b, a) {
					e[a] = {
						chartX: b.chartX,
						chartY: b.chartY
					}
				}), g.x = [e[0].chartX, e[1] && e[1].chartX], g.y = [e[0].chartY, e[1] && e[1].chartY], h.axes.forEach(function(b) {
					if (b.zoomEnabled) {
						var a = h.bounds[b.horiz ? "h": "v"],
						d = b.minPixelPadding,
						c = b.toPixels(Math.min(I(b.options.min, b.dataMin), b.dataMin)),
						e = b.toPixels(Math.max(I(b.options.max, b.dataMax), b.dataMax)),
						f = Math.max(c, e);
						a.min = Math.min(b.pos, Math.min(c, e) - d);
						a.max = Math.max(b.pos + b.len, f + d)
					}
				}), d.res = !0) : t ? this.runPointActions(d.normalize(a)) : e.length && (m(h, "touchpan", {
					originalEvent: a
				},
				function() {
					r || (d.selectionMarker = r = c({
						destroy: G,
						touch: !0
					},
					h.plotBox));
					d.pinchTranslate(e, b, n, r, A, g);
					d.hasPinched = l;
					d.scaleGroups(n, A)
				}), d.res && (d.res = !1, this.reset(!1, 0)))
			};
			a.prototype.pinchTranslate = function(a, c, h, e, b, f) {
				this.zoomHor && this.pinchTranslateDirection(!0, a, c, h, e, b, f);
				this.zoomVert && this.pinchTranslateDirection(!1, a, c, h, e, b, f)
			};
			a.prototype.pinchTranslateDirection = function(a, c, h, e, b, f, g, l) {
				var d = this.chart,
				k = a ? "x": "y",
				p = a ? "X": "Y",
				m = "chart" + p,
				w = a ? "width": "height",
				n = d["plot" + (a ? "Left": "Top")],
				q = d.inverted,
				z = d.bounds[a ? "h": "v"],
				u = 1 === c.length,
				A = c[0][m],
				t = !u && c[1][m];
				c = function() {
					"number" === typeof C && 20 < Math.abs(A - t) && (M = l || Math.abs(r - C) / Math.abs(A - t));
					P = (n - r) / M + A;
					F = d["plot" + (a ? "Width": "Height")] / M
				};
				var F, P, M = l || 1,
				r = h[0][m],
				C = !u && h[1][m];
				c();
				h = P;
				if (h < z.min) {
					h = z.min;
					var v = !0
				} else h + F > z.max && (h = z.max - F, v = !0);
				v ? (r -= .8 * (r - g[k][0]), "number" === typeof C && (C -= .8 * (C - g[k][1])), c()) : g[k] = [r, C];
				q || (f[k] = P - n, f[w] = F);
				f = q ? 1 / M: M;
				b[w] = F;
				b[k] = h;
				e[q ? a ? "scaleY": "scaleX": "scale" + p] = M;
				e["translate" + p] = f * n + (r - f * A)
			};
			a.prototype.reset = function(a, c) {
				var d = this.chart,
				e = d.hoverSeries,
				b = d.hoverPoint,
				f = d.hoverPoints,
				g = d.tooltip,
				l = g && g.shared ? f: b;
				a && l && L(l).forEach(function(b) {
					b.series.isCartesian && "undefined" === typeof b.plotX && (a = !1)
				});
				if (a) g && l && L(l).length && (g.refresh(l), g.shared && f ? f.forEach(function(b) {
					b.setState(b.state, !0);
					b.series.isCartesian && (b.series.xAxis.crosshair && b.series.xAxis.drawCrosshair(null, b), b.series.yAxis.crosshair && b.series.yAxis.drawCrosshair(null, b))
				}) : b && (b.setState(b.state, !0), d.axes.forEach(function(a) {
					a.crosshair && b.series[a.coll] === a && a.drawCrosshair(null, b)
				})));
				else {
					if (b) b.onMouseOut();
					f && f.forEach(function(b) {
						b.setState()
					});
					if (e) e.onMouseOut();
					g && g.hide(c);
					this.unDocMouseMove && (this.unDocMouseMove = this.unDocMouseMove());
					d.axes.forEach(function(b) {
						b.hideCrosshair()
					});
					this.hoverX = d.hoverPoints = d.hoverPoint = null
				}
			};
			a.prototype.runPointActions = function(d, c, h) {
				var e = this.chart,
				b = e.tooltip && e.tooltip.options.enabled ? e.tooltip: void 0,
				f = b ? b.shared: !1,
				g = c || e.hoverPoint,
				m = g && g.series || e.hoverSeries;
				c = this.getHoverData(g, m, e.series, (!d || "touchmove" !== d.type) && ( !! c || m && m.directTouch && this.isDirectTouch), f, d);
				g = c.hoverPoint;
				m = c.hoverSeries;
				var n = c.hoverPoints;
				c = m && m.tooltipOptions.followPointer && !m.tooltipOptions.split;
				var q = f && m && !m.noSharedTooltip;
				if (g && (h || g !== e.hoverPoint || b && b.isHidden)) { (e.hoverPoints || []).forEach(function(b) { - 1 === n.indexOf(b) && b.setState()
					});
					if (e.hoverSeries !== m) m.onMouseOver();
					this.applyInactiveState(n); (n || []).forEach(function(b) {
						b.setState("hover")
					});
					e.hoverPoint && e.hoverPoint.firePointEvent("mouseOut");
					if (!g.series) return;
					e.hoverPoints = n;
					e.hoverPoint = g;
					g.firePointEvent("mouseOver", void 0,
					function() {
						b && g && b.refresh(q ? n: g, d)
					})
				} else c && b && !b.isHidden && (h = b.getAnchor([{}], d), e.isInsidePlot(h[0], h[1], {
					visiblePlotOnly: !0
				}) && b.updatePosition({
					plotX: h[0],
					plotY: h[1]
				}));
				this.unDocMouseMove || (this.unDocMouseMove = r(e.container.ownerDocument, "mousemove",
				function(b) {
					var c = B[a.hoverChartIndex];
					if (c) c.pointer.onDocumentMouseMove(b)
				}), this.eventsToUnbind.push(this.unDocMouseMove));
				e.axes.forEach(function(b) {
					var a = I((b.crosshair || {}).snap, !0),
					c;
					a && ((c = e.hoverPoint) && c.series[b.coll] === b || (c = l(n,
					function(a) {
						return a.series && a.series[b.coll] === b
					})));
					c || !a ? b.drawCrosshair(d, c) : b.hideCrosshair()
				})
			};
			a.prototype.scaleGroups = function(a, c) {
				var d = this.chart;
				d.series.forEach(function(h) {
					var b = a || h.getPlotBox();
					h.group && (h.xAxis && h.xAxis.zoomEnabled || d.mapView) && (h.group.attr(b), h.markerGroup && (h.markerGroup.attr(b), h.markerGroup.clip(c ? d.clipRect: null)), h.dataLabelsGroup && h.dataLabelsGroup.attr(b))
				});
				d.clipRect.attr(c || d.clipBox)
			};
			a.prototype.setDOMEvents = function() {
				var c = this,
				e = this.chart.container,
				h = e.ownerDocument;
				e.onmousedown = this.onContainerMouseDown.bind(this);
				e.onmousemove = this.onContainerMouseMove.bind(this);
				e.onclick = this.onContainerClick.bind(this);
				this.eventsToUnbind.push(r(e, "mouseenter", this.onContainerMouseEnter.bind(this)));
				this.eventsToUnbind.push(r(e, "mouseleave", this.onContainerMouseLeave.bind(this)));
				a.unbindDocumentMouseUp || (a.unbindDocumentMouseUp = r(h, "mouseup", this.onDocumentMouseUp.bind(this)));
				for (var f = this.chart.renderTo.parentElement; f && "BODY" !== f.tagName;) this.eventsToUnbind.push(r(f, "scroll",
				function() {
					delete c.chartPosition
				})),
				f = f.parentElement;
				g.hasTouch && (this.eventsToUnbind.push(r(e, "touchstart", this.onContainerTouchStart.bind(this), {
					passive: !1
				})), this.eventsToUnbind.push(r(e, "touchmove", this.onContainerTouchMove.bind(this), {
					passive: !1
				})), a.unbindDocumentTouchEnd || (a.unbindDocumentTouchEnd = r(h, "touchend", this.onDocumentTouchEnd.bind(this), {
					passive: !1
				})))
			};
			a.prototype.setHoverChartIndex = function() {
				var c = this.chart,
				e = g.charts[I(a.hoverChartIndex, -1)];
				if (e && e !== c) e.pointer.onContainerMouseLeave({
					relatedTarget: c.container
				});
				e && e.mouseIsDown || (a.hoverChartIndex = c.index)
			};
			a.prototype.touch = function(a, c) {
				var d = this.chart,
				e;
				this.setHoverChartIndex();
				if (1 === a.touches.length) if (a = this.normalize(a), (e = d.isInsidePlot(a.chartX - d.plotLeft, a.chartY - d.plotTop, {
					visiblePlotOnly: !0
				})) && !d.openMenu) {
					c && this.runPointActions(a);
					if ("touchmove" === a.type) {
						c = this.pinchDown;
						var b = c[0] ? 4 <= Math.sqrt(Math.pow(c[0].chartX - a.chartX, 2) + Math.pow(c[0].chartY - a.chartY, 2)) : !1
					}
					I(b, !0) && this.pinch(a)
				} else c && this.reset();
				else 2 === a.touches.length && this.pinch(a)
			};
			a.prototype.touchSelect = function(a) {
				return ! (!this.chart.options.chart.zooming.singleTouch || !a.touches || 1 !== a.touches.length)
			};
			a.prototype.zoomOption = function(a) {
				var c = this.chart,
				d = c.options.chart;
				c = c.inverted;
				var e = d.zooming.type || "";
				/touch/.test(a.type) && (e = I(d.zooming.pinchType, e));
				this.zoomX = a = /x/.test(e);
				this.zoomY = d = /y/.test(e);
				this.zoomHor = a && !c || d && c;
				this.zoomVert = d && !c || a && c;
				this.hasZoom = a || d
			};
			return a
		} ();
		"";
		return a
	});
	K(g, "Core/MSPointer.js", [g["Core/Globals.js"], g["Core/Pointer.js"], g["Core/Utilities.js"]],
	function(a, g, x) {
		function v() {
			var a = [];
			a.item = function(a) {
				return this[a]
			};
			l(u,
			function(c) {
				a.push({
					pageX: c.pageX,
					pageY: c.pageY,
					target: c.target
				})
			});
			return a
		}
		function D(a, c, e, f) {
			var d = G[g.hoverChartIndex || NaN];
			"touch" !== a.pointerType && a.pointerType !== a.MSPOINTER_TYPE_TOUCH || !d || (d = d.pointer, f(a), d[c]({
				type: e,
				target: a.currentTarget,
				preventDefault: t,
				touches: v()
			}))
		}
		var B = this && this.__extends ||
		function() {
			var a = function(c, e) {
				a = Object.setPrototypeOf || {
					__proto__: []
				}
				instanceof Array &&
				function(a, c) {
					a.__proto__ = c
				} ||
				function(a, c) {
					for (var d in c) c.hasOwnProperty(d) && (a[d] = c[d])
				};
				return a(c, e)
			};
			return function(c, e) {
				function f() {
					this.constructor = c
				}
				a(c, e);
				c.prototype = null === e ? Object.create(e) : (f.prototype = e.prototype, new f)
			}
		} (),
		G = a.charts,
		r = a.doc,
		t = a.noop,
		n = a.win,
		f = x.addEvent,
		c = x.css,
		l = x.objectEach,
		m = x.pick,
		e = x.removeEvent,
		u = {},
		C = !!n.PointerEvent;
		return function(g) {
			function l() {
				return null !== g && g.apply(this, arguments) || this
			}
			B(l, g);
			l.isRequired = function() {
				return ! (a.hasTouch || !n.PointerEvent && !n.MSPointerEvent)
			};
			l.prototype.batchMSEvents = function(a) {
				a(this.chart.container, C ? "pointerdown": "MSPointerDown", this.onContainerPointerDown);
				a(this.chart.container, C ? "pointermove": "MSPointerMove", this.onContainerPointerMove);
				a(r, C ? "pointerup": "MSPointerUp", this.onDocumentPointerUp)
			};
			l.prototype.destroy = function() {
				this.batchMSEvents(e);
				g.prototype.destroy.call(this)
			};
			l.prototype.init = function(a, e) {
				g.prototype.init.call(this, a, e);
				this.hasZoom && c(a.container, {
					"-ms-touch-action": "none",
					"touch-action": "none"
				})
			};
			l.prototype.onContainerPointerDown = function(a) {
				D(a, "onContainerTouchStart", "touchstart",
				function(a) {
					u[a.pointerId] = {
						pageX: a.pageX,
						pageY: a.pageY,
						target: a.currentTarget
					}
				})
			};
			l.prototype.onContainerPointerMove = function(a) {
				D(a, "onContainerTouchMove", "touchmove",
				function(a) {
					u[a.pointerId] = {
						pageX: a.pageX,
						pageY: a.pageY
					};
					u[a.pointerId].target || (u[a.pointerId].target = a.currentTarget)
				})
			};
			l.prototype.onDocumentPointerUp = function(a) {
				D(a, "onDocumentTouchEnd", "touchend",
				function(a) {
					delete u[a.pointerId]
				})
			};
			l.prototype.setDOMEvents = function() {
				var a = this.chart.tooltip;
				g.prototype.setDOMEvents.call(this); (this.hasZoom || m(a && a.options.followTouchMove, !0)) && this.batchMSEvents(f)
			};
			return l
		} (g)
	});
	K(g, "Core/Legend/Legend.js", [g["Core/Animation/AnimationUtilities.js"], g["Core/FormatUtilities.js"], g["Core/Globals.js"], g["Core/Series/Point.js"], g["Core/Renderer/RendererUtilities.js"], g["Core/Utilities.js"]],
	function(a, g, x, E, D, B) {
		var v = a.animObject,
		r = a.setAnimation,
		t = g.format,
		n = x.marginNames,
		f = D.distribute,
		c = B.addEvent,
		l = B.createElement,
		m = B.css,
		e = B.defined,
		u = B.discardElement,
		C = B.find,
		J = B.fireEvent,
		I = B.isNumber,
		L = B.merge,
		A = B.pick,
		d = B.relativeLength,
		q = B.stableSort,
		h = B.syncTimeout;
		a = function() {
			function a(b, a) {
				this.allItems = [];
				this.contentGroup = this.box = void 0;
				this.display = !1;
				this.group = void 0;
				this.offsetWidth = this.maxLegendWidth = this.maxItemWidth = this.legendWidth = this.legendHeight = this.lastLineHeight = this.lastItemY = this.itemY = this.itemX = this.itemMarginTop = this.itemMarginBottom = this.itemHeight = this.initialItemY = 0;
				this.options = void 0;
				this.padding = 0;
				this.pages = [];
				this.proximate = !1;
				this.scrollGroup = void 0;
				this.widthOption = this.totalItemWidth = this.titleHeight = this.symbolWidth = this.symbolHeight = 0;
				this.chart = b;
				this.init(b, a)
			}
			a.prototype.init = function(b, a) {
				this.chart = b;
				this.setOptions(a);
				a.enabled && (this.render(), c(this.chart, "endResize",
				function() {
					this.legend.positionCheckboxes()
				}), this.proximate ? this.unchartrender = c(this.chart, "render",
				function() {
					this.legend.proximatePositions();
					this.legend.positionItems()
				}) : this.unchartrender && this.unchartrender())
			};
			a.prototype.setOptions = function(b) {
				var a = A(b.padding, 8);
				this.options = b;
				this.chart.styledMode || (this.itemStyle = b.itemStyle, this.itemHiddenStyle = L(this.itemStyle, b.itemHiddenStyle));
				this.itemMarginTop = b.itemMarginTop || 0;
				this.itemMarginBottom = b.itemMarginBottom || 0;
				this.padding = a;
				this.initialItemY = a - 5;
				this.symbolWidth = A(b.symbolWidth, 16);
				this.pages = [];
				this.proximate = "proximate" === b.layout && !this.chart.inverted;
				this.baseline = void 0
			};
			a.prototype.update = function(b, a) {
				var c = this.chart;
				this.setOptions(L(!0, this.options, b));
				this.destroy();
				c.isDirtyLegend = c.isDirtyBox = !0;
				A(a, !0) && c.redraw();
				J(this, "afterUpdate")
			};
			a.prototype.colorizeItem = function(b, a) {
				var c = b.legendItem || {},
				d = c.group,
				e = c.label,
				h = c.line;
				c = c.symbol;
				if (d) d[a ? "removeClass": "addClass"]("highcharts-legend-item-hidden");
				if (!this.chart.styledMode) {
					var f = this.options;
					d = this.itemHiddenStyle.color;
					f = a ? f.itemStyle.color: d;
					var g = a ? b.color || d: d,
					k = b.options && b.options.marker,
					l = {
						fill: g
					};
					e && e.css({
						fill: f,
						color: f
					});
					h && h.attr({
						stroke: g
					});
					c && (k && c.isMarker && (l = b.pointAttribs(), a || (l.stroke = l.fill = d)), c.attr(l))
				}
				J(this, "afterColorizeItem", {
					item: b,
					visible: a
				})
			};
			a.prototype.positionItems = function() {
				this.allItems.forEach(this.positionItem, this);
				this.chart.isResizing || this.positionCheckboxes()
			};
			a.prototype.positionItem = function(b) {
				var a = this,
				c = b.legendItem || {},
				d = c.group,
				h = c.x;
				h = void 0 === h ? 0 : h;
				c = c.y;
				c = void 0 === c ? 0 : c;
				var f = this.options,
				g = f.symbolPadding,
				l = !f.rtl;
				f = b.checkbox;
				d && d.element && (g = {
					translateX: l ? h: this.legendWidth - h - 2 * g - 4,
					translateY: c
				},
				d[e(d.translateY) ? "animate": "attr"](g, void 0,
				function() {
					J(a, "afterPositionItem", {
						item: b
					})
				}));
				f && (f.x = h, f.y = c)
			};
			a.prototype.destroyItem = function(b) {
				for (var a = b.checkbox,
				c = b.legendItem || {},
				d = 0,
				e = ["group", "label", "line", "symbol"]; d < e.length; d++) {
					var h = e[d];
					c[h] && (c[h] = c[h].destroy())
				}
				a && u(a);
				b.legendItem = void 0
			};
			a.prototype.destroy = function() {
				for (var b = 0,
				a = this.getAllItems(); b < a.length; b++) this.destroyItem(a[b]);
				b = 0;
				for (a = "clipRect up down pager nav box title group".split(" "); b < a.length; b++) {
					var c = a[b];
					this[c] && (this[c] = this[c].destroy())
				}
				this.display = null
			};
			a.prototype.positionCheckboxes = function() {
				var b = this.group && this.group.alignAttr,
				a = this.clipHeight || this.legendHeight,
				c = this.titleHeight;
				if (b) {
					var d = b.translateY;
					this.allItems.forEach(function(e) {
						var h = e.checkbox;
						if (h) {
							var f = d + c + h.y + (this.scrollOffset || 0) + 3;
							m(h, {
								left: b.translateX + e.checkboxOffset + h.x - 20 + "px",
								top: f + "px",
								display: this.proximate || f > d - 6 && f < d + a - 6 ? "": "none"
							})
						}
					},
					this)
				}
			};
			a.prototype.renderTitle = function() {
				var b = this.options,
				a = this.padding,
				c = b.title,
				d = 0;
				c.text && (this.title || (this.title = this.chart.renderer.label(c.text, a - 3, a - 4, void 0, void 0, void 0, b.useHTML, void 0, "legend-title").attr({
					zIndex: 1
				}), this.chart.styledMode || this.title.css(c.style), this.title.add(this.group)), c.width || this.title.css({
					width: this.maxLegendWidth + "px"
				}), b = this.title.getBBox(), d = b.height, this.offsetWidth = b.width, this.contentGroup.attr({
					translateY: d
				}));
				this.titleHeight = d
			};
			a.prototype.setText = function(b) {
				var a = this.options;
				b.legendItem.label.attr({
					text: a.labelFormat ? t(a.labelFormat, b, this.chart) : a.labelFormatter.call(b)
				})
			};
			a.prototype.renderItem = function(b) {
				var a = b.legendItem = b.legendItem || {},
				c = this.chart,
				d = c.renderer,
				e = this.options,
				h = this.symbolWidth,
				f = e.symbolPadding || 0,
				g = this.itemStyle,
				l = this.itemHiddenStyle,
				k = "horizontal" === e.layout ? A(e.itemDistance, 20) : 0,
				m = !e.rtl,
				n = !b.series,
				u = !n && b.series.drawLegendSymbol ? b.series: b,
				q = u.options,
				t = this.createCheckboxForItem && q && q.showCheckbox,
				F = e.useHTML,
				P = b.options.className,
				M = a.label;
				q = h + f + k + (t ? 20 : 0);
				M || (a.group = d.g("legend-item").addClass("highcharts-" + u.type + "-series highcharts-color-" + b.colorIndex + (P ? " " + P: "") + (n ? " highcharts-series-" + b.index: "")).attr({
					zIndex: 1
				}).add(this.scrollGroup), a.label = M = d.text("", m ? h + f: -f, this.baseline || 0, F), c.styledMode || M.css(L(b.visible ? g: l)), M.attr({
					align: m ? "left": "right",
					zIndex: 2
				}).add(a.group), this.baseline || (this.fontMetrics = d.fontMetrics(c.styledMode ? 12 : g.fontSize, M), this.baseline = this.fontMetrics.f + 3 + this.itemMarginTop, M.attr("y", this.baseline), this.symbolHeight = e.symbolHeight || this.fontMetrics.f, e.squareSymbol && (this.symbolWidth = A(e.symbolWidth, Math.max(this.symbolHeight, 16)), q = this.symbolWidth + f + k + (t ? 20 : 0), m && M.attr("x", this.symbolWidth + f))), u.drawLegendSymbol(this, b), this.setItemEvents && this.setItemEvents(b, M, F));
				t && !b.checkbox && this.createCheckboxForItem && this.createCheckboxForItem(b);
				this.colorizeItem(b, b.visible); ! c.styledMode && g.width || M.css({
					width: (e.itemWidth || this.widthOption || c.spacingBox.width) - q + "px"
				});
				this.setText(b);
				c = M.getBBox();
				d = this.fontMetrics && this.fontMetrics.h || 0;
				b.itemWidth = b.checkboxOffset = e.itemWidth || a.labelWidth || c.width + q;
				this.maxItemWidth = Math.max(this.maxItemWidth, b.itemWidth);
				this.totalItemWidth += b.itemWidth;
				this.itemHeight = b.itemHeight = Math.round(a.labelHeight || (c.height > 1.5 * d ? c.height: d))
			};
			a.prototype.layoutItem = function(a) {
				var b = this.options,
				c = this.padding,
				d = "horizontal" === b.layout,
				e = a.itemHeight,
				h = this.itemMarginBottom,
				f = this.itemMarginTop,
				g = d ? A(b.itemDistance, 20) : 0,
				l = this.maxLegendWidth;
				b = b.alignColumns && this.totalItemWidth > l ? this.maxItemWidth: a.itemWidth;
				var k = a.legendItem || {};
				d && this.itemX - c + b > l && (this.itemX = c, this.lastLineHeight && (this.itemY += f + this.lastLineHeight + h), this.lastLineHeight = 0);
				this.lastItemY = f + this.itemY + h;
				this.lastLineHeight = Math.max(e, this.lastLineHeight);
				k.x = this.itemX;
				k.y = this.itemY;
				d ? this.itemX += b: (this.itemY += f + e + h, this.lastLineHeight = e);
				this.offsetWidth = this.widthOption || Math.max((d ? this.itemX - c - (a.checkbox ? 0 : g) : b) + c, this.offsetWidth)
			};
			a.prototype.getAllItems = function() {
				var a = [];
				this.chart.series.forEach(function(b) {
					var c = b && b.options;
					b && A(c.showInLegend, e(c.linkedTo) ? !1 : void 0, !0) && (a = a.concat((b.legendItem || {}).labels || ("point" === c.legendType ? b.data: b)))
				});
				J(this, "afterGetAllItems", {
					allItems: a
				});
				return a
			};
			a.prototype.getAlignment = function() {
				var a = this.options;
				return this.proximate ? a.align.charAt(0) + "tv": a.floating ? "": a.align.charAt(0) + a.verticalAlign.charAt(0) + a.layout.charAt(0)
			};
			a.prototype.adjustMargins = function(a, c) {
				var b = this.chart,
				d = this.options,
				h = this.getAlignment();
				h && [/(lth|ct|rth)/, /(rtv|rm|rbv)/, /(rbh|cb|lbh)/, /(lbv|lm|ltv)/].forEach(function(f, g) {
					f.test(h) && !e(a[g]) && (b[n[g]] = Math.max(b[n[g]], b.legend[(g + 1) % 2 ? "legendHeight": "legendWidth"] + [1, -1, -1, 1][g] * d[g % 2 ? "x": "y"] + A(d.margin, 12) + c[g] + (b.titleOffset[g] || 0)))
				})
			};
			a.prototype.proximatePositions = function() {
				var a = this.chart,
				c = [],
				d = "left" === this.options.align;
				this.allItems.forEach(function(b) {
					var e;
					var h = d;
					if (b.yAxis) {
						b.xAxis.options.reversed && (h = !h);
						b.points && (e = C(h ? b.points: b.points.slice(0).reverse(),
						function(a) {
							return I(a.plotY)
						}));
						h = this.itemMarginTop + b.legendItem.label.getBBox().height + this.itemMarginBottom;
						var f = b.yAxis.top - a.plotTop;
						b.visible ? (e = e ? e.plotY: b.yAxis.height, e += f - .3 * h) : e = f + b.yAxis.height;
						c.push({
							target: e,
							size: h,
							item: b
						})
					}
				},
				this);
				for (var e, h = 0,
				g = f(c, a.plotHeight); h < g.length; h++) {
					var l = g[h];
					e = l.item.legendItem || {};
					l.pos && (e.y = a.plotTop - a.spacing[0] + l.pos)
				}
			};
			a.prototype.render = function() {
				var a = this.chart,
				c = a.renderer,
				e = this.options,
				h = this.padding,
				f = this.getAllItems(),
				g = this.group,
				l = this.box;
				this.itemX = h;
				this.itemY = this.initialItemY;
				this.lastItemY = this.offsetWidth = 0;
				this.widthOption = d(e.width, a.spacingBox.width - h);
				var k = a.spacingBox.width - 2 * h - e.x; - 1 < ["rm", "lm"].indexOf(this.getAlignment().substring(0, 2)) && (k /= 2);
				this.maxLegendWidth = this.widthOption || k;
				g || (this.group = g = c.g("legend").addClass(e.className || "").attr({
					zIndex: 7
				}).add(), this.contentGroup = c.g().attr({
					zIndex: 1
				}).add(g), this.scrollGroup = c.g().add(this.contentGroup));
				this.renderTitle();
				q(f,
				function(a, b) {
					return (a.options && a.options.legendIndex || 0) - (b.options && b.options.legendIndex || 0)
				});
				e.reversed && f.reverse();
				this.allItems = f;
				this.display = k = !!f.length;
				this.itemHeight = this.totalItemWidth = this.maxItemWidth = this.lastLineHeight = 0;
				f.forEach(this.renderItem, this);
				f.forEach(this.layoutItem, this);
				f = (this.widthOption || this.offsetWidth) + h;
				var m = this.lastItemY + this.lastLineHeight + this.titleHeight;
				m = this.handleOverflow(m);
				m += h;
				l || (this.box = l = c.rect().addClass("highcharts-legend-box").attr({
					r: e.borderRadius
				}).add(g));
				a.styledMode || l.attr({
					stroke: e.borderColor,
					"stroke-width": e.borderWidth || 0,
					fill: e.backgroundColor || "none"
				}).shadow(e.shadow);
				if (0 < f && 0 < m) l[l.placed ? "animate": "attr"](l.crisp.call({},
				{
					x: 0,
					y: 0,
					width: f,
					height: m
				},
				l.strokeWidth()));
				g[k ? "show": "hide"]();
				a.styledMode && "none" === g.getStyle("display") && (f = m = 0);
				this.legendWidth = f;
				this.legendHeight = m;
				k && this.align();
				this.proximate || this.positionItems();
				J(this, "afterRender")
			};
			a.prototype.align = function(a) {
				void 0 === a && (a = this.chart.spacingBox);
				var b = this.chart,
				c = this.options,
				d = a.y;
				/(lth|ct|rth)/.test(this.getAlignment()) && 0 < b.titleOffset[0] ? d += b.titleOffset[0] : /(lbh|cb|rbh)/.test(this.getAlignment()) && 0 < b.titleOffset[2] && (d -= b.titleOffset[2]);
				d !== a.y && (a = L(a, {
					y: d
				}));
				b.hasRendered || (this.group.placed = !1);
				this.group.align(L(c, {
					width: this.legendWidth,
					height: this.legendHeight,
					verticalAlign: this.proximate ? "top": c.verticalAlign
				}), !0, a)
			};
			a.prototype.handleOverflow = function(a) {
				var b = this,
				c = this.chart,
				d = c.renderer,
				e = this.options,
				h = e.y,
				f = "top" === e.verticalAlign,
				g = this.padding,
				l = e.maxHeight,
				k = e.navigation,
				m = A(k.animation, !0),
				n = k.arrowSize || 12,
				u = this.pages,
				q = this.allItems,
				t = function(a) {
					"number" === typeof a ? v.attr({
						height: a
					}) : v && (b.clipRect = v.destroy(), b.contentGroup.clip());
					b.contentGroup.div && (b.contentGroup.div.style.clip = a ? "rect(" + g + "px,9999px," + (g + a) + "px,0)": "auto")
				},
				F = function(a) {
					b[a] = d.circle(0, 0, 1.3 * n).translate(n / 2, n / 2).add(C);
					c.styledMode || b[a].attr("fill", "rgba(0,0,0,0.0001)");
					return b[a]
				},
				P,
				M,
				r;
				h = c.spacingBox.height + (f ? -h: h) - g;
				var C = this.nav,
				v = this.clipRect;
				"horizontal" !== e.layout || "middle" === e.verticalAlign || e.floating || (h /= 2);
				l && (h = Math.min(h, l));
				u.length = 0;
				a && 0 < h && a > h && !1 !== k.enabled ? (this.clipHeight = P = Math.max(h - 20 - this.titleHeight - g, 0), this.currentPage = A(this.currentPage, 1), this.fullHeight = a, q.forEach(function(a, b) {
					r = a.legendItem || {};
					a = r.y || 0;
					var c = Math.round(r.label.getBBox().height),
					d = u.length;
					if (!d || a - u[d - 1] > P && (M || a) !== u[d - 1]) u.push(M || a),
					d++;
					r.pageIx = d - 1;
					M && ((q[b - 1].legendItem || {}).pageIx = d - 1);
					b === q.length - 1 && a + c - u[d - 1] > P && c <= P && (u.push(a), r.pageIx = d);
					a !== M && (M = a)
				}), v || (v = b.clipRect = d.clipRect(0, g, 9999, 0), b.contentGroup.clip(v)), t(P), C || (this.nav = C = d.g().attr({
					zIndex: 1
				}).add(this.group), this.up = d.symbol("triangle", 0, 0, n, n).add(C), F("upTracker").on("click",
				function() {
					b.scroll( - 1, m)
				}), this.pager = d.text("", 15, 10).addClass("highcharts-legend-navigation"), !c.styledMode && k.style && this.pager.css(k.style), this.pager.add(C), this.down = d.symbol("triangle-down", 0, 0, n, n).add(C), F("downTracker").on("click",
				function() {
					b.scroll(1, m)
				})), b.scroll(0), a = h) : C && (t(), this.nav = C.destroy(), this.scrollGroup.attr({
					translateY: 1
				}), this.clipHeight = 0);
				return a
			};
			a.prototype.scroll = function(a, c) {
				var b = this,
				d = this.chart,
				e = this.pages,
				f = e.length,
				g = this.clipHeight,
				l = this.options.navigation,
				k = this.pager,
				m = this.padding,
				p = this.currentPage + a;
				p > f && (p = f);
				0 < p && ("undefined" !== typeof c && r(c, d), this.nav.attr({
					translateX: m,
					translateY: g + this.padding + 7 + this.titleHeight,
					visibility: "inherit"
				}), [this.up, this.upTracker].forEach(function(a) {
					a.attr({
						"class": 1 === p ? "highcharts-legend-nav-inactive": "highcharts-legend-nav-active"
					})
				}), k.attr({
					text: p + "/" + f
				}), [this.down, this.downTracker].forEach(function(a) {
					a.attr({
						x: 18 + this.pager.getBBox().width,
						"class": p === f ? "highcharts-legend-nav-inactive": "highcharts-legend-nav-active"
					})
				},
				this), d.styledMode || (this.up.attr({
					fill: 1 === p ? l.inactiveColor: l.activeColor
				}), this.upTracker.css({
					cursor: 1 === p ? "default": "pointer"
				}), this.down.attr({
					fill: p === f ? l.inactiveColor: l.activeColor
				}), this.downTracker.css({
					cursor: p === f ? "default": "pointer"
				})), this.scrollOffset = -e[p - 1] + this.initialItemY, this.scrollGroup.animate({
					translateY: this.scrollOffset
				}), this.currentPage = p, this.positionCheckboxes(), a = v(A(c, d.renderer.globalAnimation, !0)), h(function() {
					J(b, "afterScroll", {
						currentPage: p
					})
				},
				a.duration))
			};
			a.prototype.setItemEvents = function(a, c, d) {
				var b = this,
				e = a.legendItem || {},
				h = b.chart.renderer.boxWrapper,
				f = a instanceof E,
				g = "highcharts-legend-" + (f ? "point": "series") + "-active",
				l = b.chart.styledMode,
				k = function(c) {
					b.allItems.forEach(function(b) {
						a !== b && [b].concat(b.linkedSeries || []).forEach(function(a) {
							a.setState(c, !f)
						})
					})
				},
				m = 0;
				for (d = d ? [c, e.symbol] : [e.group]; m < d.length; m++) if (e = d[m]) e.on("mouseover",
				function() {
					a.visible && k("inactive");
					a.setState("hover");
					a.visible && h.addClass(g);
					l || c.css(b.options.itemHoverStyle)
				}).on("mouseout",
				function() {
					b.chart.styledMode || c.css(L(a.visible ? b.itemStyle: b.itemHiddenStyle));
					k("");
					h.removeClass(g);
					a.setState()
				}).on("click",
				function(b) {
					var c = function() {
						a.setVisible && a.setVisible();
						k(a.visible ? "inactive": "")
					};
					h.removeClass(g);
					b = {
						browserEvent: b
					};
					a.firePointEvent ? a.firePointEvent("legendItemClick", b, c) : J(a, "legendItemClick", b, c)
				})
			};
			a.prototype.createCheckboxForItem = function(a) {
				a.checkbox = l("input", {
					type: "checkbox",
					className: "highcharts-legend-checkbox",
					checked: a.selected,
					defaultChecked: a.selected
				},
				this.options.itemCheckboxStyle, this.chart.container);
				c(a.checkbox, "click",
				function(b) {
					J(a.series || a, "checkboxClick", {
						checked: b.target.checked,
						item: a
					},
					function() {
						a.select()
					})
				})
			};
			return a
		} ();
		"";
		return a
	});
	K(g, "Core/Series/SeriesRegistry.js", [g["Core/Globals.js"], g["Core/Defaults.js"], g["Core/Series/Point.js"], g["Core/Utilities.js"]],
	function(a, g, x, E) {
		var v = g.defaultOptions,
		B = E.extendClass,
		G = E.merge,
		r; (function(g) {
			function n(a, c) {
				var f = v.plotOptions || {},
				m = c.defaultOptions,
				e = c.prototype;
				e.type = a;
				e.pointClass || (e.pointClass = x);
				m && (f[a] = m);
				g.seriesTypes[a] = c
			}
			g.seriesTypes = a.seriesTypes;
			g.registerSeriesType = n;
			g.seriesType = function(a, c, l, m, e) {
				var f = v.plotOptions || {};
				c = c || "";
				f[a] = G(f[c], l);
				n(a, B(g.seriesTypes[c] ||
				function() {},
				m));
				g.seriesTypes[a].prototype.type = a;
				e && (g.seriesTypes[a].prototype.pointClass = B(x, e));
				return g.seriesTypes[a]
			}
		})(r || (r = {}));
		return r
	});
	K(g, "Core/Chart/Chart.js", [g["Core/Animation/AnimationUtilities.js"], g["Core/Axis/Axis.js"], g["Core/Defaults.js"], g["Core/FormatUtilities.js"], g["Core/Foundation.js"], g["Core/Globals.js"], g["Core/Legend/Legend.js"], g["Core/MSPointer.js"], g["Core/Pointer.js"], g["Core/Renderer/RendererRegistry.js"], g["Core/Series/SeriesRegistry.js"], g["Core/Renderer/SVG/SVGRenderer.js"], g["Core/Time.js"], g["Core/Utilities.js"], g["Core/Renderer/HTML/AST.js"]],
	function(a, g, x, E, D, B, G, r, t, n, f, c, l, m, e) {
		var u = a.animate,
		C = a.animObject,
		v = a.setAnimation,
		I = x.defaultOptions,
		L = x.defaultTime,
		A = E.numberFormat,
		d = D.registerEventOptions,
		q = B.charts,
		h = B.doc,
		k = B.marginNames,
		b = B.svg,
		p = B.win,
		z = f.seriesTypes,
		w = m.addEvent,
		N = m.attr,
		H = m.cleanRecursively,
		O = m.createElement,
		Q = m.css,
		S = m.defined,
		Y = m.discardElement,
		y = m.erase,
		T = m.error,
		K = m.extend,
		ca = m.find,
		R = m.fireEvent,
		F = m.getStyle,
		P = m.isArray,
		M = m.isNumber,
		X = m.isObject,
		W = m.isString,
		U = m.merge,
		Z = m.objectEach,
		V = m.pick,
		ba = m.pInt,
		ha = m.relativeLength,
		da = m.removeEvent,
		fa = m.splat,
		ia = m.syncTimeout,
		ka = m.uniqueKey;
		a = function() {
			function a(a, b, c) {
				this.series = this.renderTo = this.renderer = this.pointer = this.pointCount = this.plotWidth = this.plotTop = this.plotLeft = this.plotHeight = this.plotBox = this.options = this.numberFormatter = this.margin = this.legend = this.labelCollectors = this.isResizing = this.index = this.eventOptions = this.container = this.colorCounter = this.clipBox = this.chartWidth = this.chartHeight = this.bounds = this.axisOffset = this.axes = void 0;
				this.sharedClips = {};
				this.yAxis = this.xAxis = this.userOptions = this.titleOffset = this.time = this.symbolCounter = this.spacingBox = this.spacing = void 0;
				this.getArgs(a, b, c)
			}
			a.chart = function(b, c, d) {
				return new a(b, c, d)
			};
			a.prototype.getArgs = function(a, b, c) {
				W(a) || a.nodeName ? (this.renderTo = a, this.init(b, c)) : this.init(a, b)
			};
			a.prototype.init = function(a, b) {
				var c = a.plotOptions || {};
				R(this, "init", {
					args: arguments
				},
				function() {
					var e = U(I, a),
					h = e.chart;
					Z(e.plotOptions,
					function(a, b) {
						X(a) && (a.tooltip = c[b] && U(c[b].tooltip) || void 0)
					});
					e.tooltip.userOptions = a.chart && a.chart.forExport && a.tooltip.userOptions || a.tooltip;
					this.userOptions = a;
					this.margin = [];
					this.spacing = [];
					this.bounds = {
						h: {},
						v: {}
					};
					this.labelCollectors = [];
					this.callback = b;
					this.isResizing = 0;
					var f = h.zooming = h.zooming || {};
					a.chart && !a.chart.zooming && (f.resetButton = h.resetZoomButton);
					f.key = V(f.key, h.zoomKey);
					f.pinchType = V(f.pinchType, h.pinchType);
					f.singleTouch = V(f.singleTouch, h.zoomBySingleTouch);
					f.type = V(f.type, h.zoomType);
					this.options = e;
					this.axes = [];
					this.series = [];
					this.time = a.time && Object.keys(a.time).length ? new l(a.time) : B.time;
					this.numberFormatter = h.numberFormatter || A;
					this.styledMode = h.styledMode;
					this.hasCartesianSeries = h.showAxes;
					this.index = q.length;
					q.push(this);
					B.chartCount++;
					d(this, h);
					this.xAxis = [];
					this.yAxis = [];
					this.pointCount = this.colorCounter = this.symbolCounter = 0;
					R(this, "afterInit");
					this.firstRender()
				})
			};
			a.prototype.initSeries = function(a) {
				var b = this.options.chart;
				b = a.type || b.type || b.defaultSeriesType;
				var c = z[b];
				c || T(17, !0, this, {
					missingModuleFor: b
				});
				b = new c;
				"function" === typeof b.init && b.init(this, a);
				return b
			};
			a.prototype.setSeriesData = function() {
				this.getSeriesOrderByLinks().forEach(function(a) {
					a.points || a.data || !a.enabledDataSorting || a.setData(a.options.data, !1)
				})
			};
			a.prototype.getSeriesOrderByLinks = function() {
				return this.series.concat().sort(function(a, b) {
					return a.linkedSeries.length || b.linkedSeries.length ? b.linkedSeries.length - a.linkedSeries.length: 0
				})
			};
			a.prototype.orderSeries = function(a) {
				var b = this.series;
				a = a || 0;
				for (var c = b.length; a < c; ++a) b[a] && (b[a].index = a, b[a].name = b[a].getName())
			};
			a.prototype.isInsidePlot = function(a, b, c) {
				void 0 === c && (c = {});
				var d = this.inverted,
				e = this.plotBox,
				h = this.plotLeft,
				f = this.plotTop,
				g = this.scrollablePlotBox,
				l = 0;
				var k = 0;
				c.visiblePlotOnly && this.scrollingContainer && (k = this.scrollingContainer, l = k.scrollLeft, k = k.scrollTop);
				var m = c.series;
				e = c.visiblePlotOnly && g || e;
				g = c.inverted ? b: a;
				b = c.inverted ? a: b;
				a = {
					x: g,
					y: b,
					isInsidePlot: !0,
					options: c
				};
				if (!c.ignoreX) {
					var p = m && (d && !this.polar ? m.yAxis: m.xAxis) || {
						pos: h,
						len: Infinity
					};
					g = c.paneCoordinates ? p.pos + g: h + g;
					g >= Math.max(l + h, p.pos) && g <= Math.min(l + h + e.width, p.pos + p.len) || (a.isInsidePlot = !1)
				} ! c.ignoreY && a.isInsidePlot && (d = c.axis && !c.axis.isXAxis && c.axis || m && (d ? m.xAxis: m.yAxis) || {
					pos: f,
					len: Infinity
				},
				c = c.paneCoordinates ? d.pos + b: f + b, c >= Math.max(k + f, d.pos) && c <= Math.min(k + f + e.height, d.pos + d.len) || (a.isInsidePlot = !1));
				R(this, "afterIsInsidePlot", a);
				return a.isInsidePlot
			};
			a.prototype.redraw = function(a) {
				R(this, "beforeRedraw");
				var b = this.hasCartesianSeries ? this.axes: this.colorAxis || [],
				c = this.series,
				d = this.pointer,
				e = this.legend,
				h = this.userOptions.legend,
				f = this.renderer,
				g = f.isHidden(),
				l = [],
				k = this.isDirtyBox,
				m = this.isDirtyLegend;
				this.setResponsive && this.setResponsive(!1);
				v(this.hasRendered ? a: !1, this);
				g && this.temporaryDisplay();
				this.layOutTitles();
				for (a = c.length; a--;) {
					var p = c[a];
					if (p.options.stacking || p.options.centerInCategory) {
						var F = !0;
						if (p.isDirty) {
							var n = !0;
							break
						}
					}
				}
				if (n) for (a = c.length; a--;) p = c[a],
				p.options.stacking && (p.isDirty = !0);
				c.forEach(function(a) {
					a.isDirty && ("point" === a.options.legendType ? ("function" === typeof a.updateTotals && a.updateTotals(), m = !0) : h && (h.labelFormatter || h.labelFormat) && (m = !0));
					a.isDirtyData && R(a, "updatedData")
				});
				m && e && e.options.enabled && (e.render(), this.isDirtyLegend = !1);
				F && this.getStacks();
				b.forEach(function(a) {
					a.updateNames();
					a.setScale()
				});
				this.getMargins();
				b.forEach(function(a) {
					a.isDirty && (k = !0)
				});
				b.forEach(function(a) {
					var b = a.min + "," + a.max;
					a.extKey !== b && (a.extKey = b, l.push(function() {
						R(a, "afterSetExtremes", K(a.eventArgs, a.getExtremes()));
						delete a.eventArgs
					})); (k || F) && a.redraw()
				});
				k && this.drawChartBox();
				R(this, "predraw");
				c.forEach(function(a) { (k || a.isDirty) && a.visible && a.redraw();
					a.isDirtyData = !1
				});
				d && d.reset(!0);
				f.draw();
				R(this, "redraw");
				R(this, "render");
				g && this.temporaryDisplay(!0);
				l.forEach(function(a) {
					a.call()
				})
			};
			a.prototype.get = function(a) {
				function b(b) {
					return b.id === a || b.options && b.options.id === a
				}
				for (var c = this.series,
				d = ca(this.axes, b) || ca(this.series, b), e = 0; ! d && e < c.length; e++) d = ca(c[e].points || [], b);
				return d
			};
			a.prototype.getAxes = function() {
				var a = this,
				b = this.options,
				c = b.xAxis = fa(b.xAxis || {});
				b = b.yAxis = fa(b.yAxis || {});
				R(this, "getAxes");
				c.forEach(function(a, b) {
					a.index = b;
					a.isX = !0
				});
				b.forEach(function(a, b) {
					a.index = b
				});
				c.concat(b).forEach(function(b) {
					new g(a, b)
				});
				R(this, "afterGetAxes")
			};
			a.prototype.getSelectedPoints = function() {
				return this.series.reduce(function(a, b) {
					b.getPointsCollection().forEach(function(b) {
						V(b.selectedStaging, b.selected) && a.push(b)
					});
					return a
				},
				[])
			};
			a.prototype.getSelectedSeries = function() {
				return this.series.filter(function(a) {
					return a.selected
				})
			};
			a.prototype.setTitle = function(a, b, c) {
				this.applyDescription("title", a);
				this.applyDescription("subtitle", b);
				this.applyDescription("caption", void 0);
				this.layOutTitles(c)
			};
			a.prototype.applyDescription = function(a, b) {
				var c = this,
				d = "title" === a ? {
					color: "#333333",
					fontSize: this.options.isStock ? "16px": "18px"
				}: {
					color: "#666666"
				};
				d = this.options[a] = U(!this.styledMode && {
					style: d
				},
				this.options[a], b);
				var e = this[a];
				e && b && (this[a] = e = e.destroy());
				d && !e && (e = this.renderer.text(d.text, 0, 0, d.useHTML).attr({
					align: d.align,
					"class": "highcharts-" + a,
					zIndex: d.zIndex || 4
				}).add(), e.update = function(b) {
					c[{
						title: "setTitle",
						subtitle: "setSubtitle",
						caption: "setCaption"
					} [a]](b)
				},
				this.styledMode || e.css(d.style), this[a] = e)
			};
			a.prototype.layOutTitles = function(a) {
				var b = [0, 0, 0],
				c = this.renderer,
				d = this.spacingBox; ["title", "subtitle", "caption"].forEach(function(a) {
					var e = this[a],
					h = this.options[a],
					f = h.verticalAlign || "top";
					a = "title" === a ? "top" === f ? -3 : 0 : "top" === f ? b[0] + 2 : 0;
					var g;
					if (e) {
						this.styledMode || (g = h.style && h.style.fontSize);
						g = c.fontMetrics(g, e).b;
						e.css({
							width: (h.width || d.width + (h.widthAdjust || 0)) + "px"
						});
						var k = Math.round(e.getBBox(h.useHTML).height);
						e.align(K({
							y: "bottom" === f ? g: a + g,
							height: k
						},
						h), !1, "spacingBox");
						h.floating || ("top" === f ? b[0] = Math.ceil(b[0] + k) : "bottom" === f && (b[2] = Math.ceil(b[2] + k)))
					}
				},
				this);
				b[0] && "top" === (this.options.title.verticalAlign || "top") && (b[0] += this.options.title.margin);
				b[2] && "bottom" === this.options.caption.verticalAlign && (b[2] += this.options.caption.margin);
				var e = !this.titleOffset || this.titleOffset.join(",") !== b.join(",");
				this.titleOffset = b;
				R(this, "afterLayOutTitles"); ! this.isDirtyBox && e && (this.isDirtyBox = this.isDirtyLegend = e, this.hasRendered && V(a, !0) && this.isDirtyBox && this.redraw())
			};
			a.prototype.getChartSize = function() {
				var a = this.options.chart,
				b = a.width;
				a = a.height;
				var c = this.renderTo;
				S(b) || (this.containerWidth = F(c, "width"));
				S(a) || (this.containerHeight = F(c, "height"));
				this.chartWidth = Math.max(0, b || this.containerWidth || 600);
				this.chartHeight = Math.max(0, ha(a, this.chartWidth) || (1 < this.containerHeight ? this.containerHeight: 400))
			};
			a.prototype.temporaryDisplay = function(a) {
				var b = this.renderTo;
				if (a) for (; b && b.style;) b.hcOrigStyle && (Q(b, b.hcOrigStyle), delete b.hcOrigStyle),
				b.hcOrigDetached && (h.body.removeChild(b), b.hcOrigDetached = !1),
				b = b.parentNode;
				else for (; b && b.style;) {
					h.body.contains(b) || b.parentNode || (b.hcOrigDetached = !0, h.body.appendChild(b));
					if ("none" === F(b, "display", !1) || b.hcOricDetached) b.hcOrigStyle = {
						display: b.style.display,
						height: b.style.height,
						overflow: b.style.overflow
					},
					a = {
						display: "block",
						overflow: "hidden"
					},
					b !== this.renderTo && (a.height = 0),
					Q(b, a),
					b.offsetWidth || b.style.setProperty("display", "block", "important");
					b = b.parentNode;
					if (b === h.body) break
				}
			};
			a.prototype.setClassName = function(a) {
				this.container.className = "highcharts-container " + (a || "")
			};
			a.prototype.getContainer = function() {
				var a = this.options,
				d = a.chart,
				f = ka(),
				g,
				k = this.renderTo;
				k || (this.renderTo = k = d.renderTo);
				W(k) && (this.renderTo = k = h.getElementById(k));
				k || T(13, !0, this);
				var l = ba(N(k, "data-highcharts-chart"));
				M(l) && q[l] && q[l].hasRendered && q[l].destroy();
				N(k, "data-highcharts-chart", this.index);
				k.innerHTML = e.emptyHTML;
				d.skipClone || k.offsetWidth || this.temporaryDisplay();
				this.getChartSize();
				l = this.chartWidth;
				var m = this.chartHeight;
				Q(k, {
					overflow: "hidden"
				});
				this.styledMode || (g = K({
					position: "relative",
					overflow: "hidden",
					width: l + "px",
					height: m + "px",
					textAlign: "left",
					lineHeight: "normal",
					zIndex: 0,
					"-webkit-tap-highlight-color": "rgba(0,0,0,0)",
					userSelect: "none",
					"touch-action": "manipulation",
					outline: "none"
				},
				d.style || {}));
				this.container = f = O("div", {
					id: f
				},
				g, k);
				this._cursor = f.style.cursor;
				this.renderer = new(d.renderer || !b ? n.getRendererType(d.renderer) : c)(f, l, m, void 0, d.forExport, a.exporting && a.exporting.allowHTML, this.styledMode);
				v(void 0, this);
				this.setClassName(d.className);
				if (this.styledMode) for (var p in a.defs) this.renderer.definition(a.defs[p]);
				else this.renderer.setStyle(d.style);
				this.renderer.chartIndex = this.index;
				R(this, "afterGetContainer")
			};
			a.prototype.getMargins = function(a) {
				var b = this.spacing,
				c = this.margin,
				d = this.titleOffset;
				this.resetMargins();
				d[0] && !S(c[0]) && (this.plotTop = Math.max(this.plotTop, d[0] + b[0]));
				d[2] && !S(c[2]) && (this.marginBottom = Math.max(this.marginBottom, d[2] + b[2]));
				this.legend && this.legend.display && this.legend.adjustMargins(c, b);
				R(this, "getMargins");
				a || this.getAxisMargins()
			};
			a.prototype.getAxisMargins = function() {
				var a = this,
				b = a.axisOffset = [0, 0, 0, 0],
				c = a.colorAxis,
				d = a.margin,
				e = function(a) {
					a.forEach(function(a) {
						a.visible && a.getOffset()
					})
				};
				a.hasCartesianSeries ? e(a.axes) : c && c.length && e(c);
				k.forEach(function(c, e) {
					S(d[e]) || (a[c] += b[e])
				});
				a.setChartSize()
			};
			a.prototype.reflow = function(a) {
				var b = this,
				c = b.options.chart,
				d = b.renderTo,
				e = S(c.width) && S(c.height),
				f = c.width || F(d, "width");
				c = c.height || F(d, "height");
				d = a ? a.target: p;
				delete b.pointer.chartPosition;
				if (!e && !b.isPrinting && f && c && (d === p || d === h)) {
					if (f !== b.containerWidth || c !== b.containerHeight) m.clearTimeout(b.reflowTimeout),
					b.reflowTimeout = ia(function() {
						b.container && b.setSize(void 0, void 0, !1)
					},
					a ? 100 : 0);
					b.containerWidth = f;
					b.containerHeight = c
				}
			};
			a.prototype.setReflow = function(a) {
				var b = this; ! 1 === a || this.unbindReflow ? !1 === a && this.unbindReflow && (this.unbindReflow = this.unbindReflow()) : (this.unbindReflow = w(p, "resize",
				function(a) {
					b.options && b.reflow(a)
				}), w(this, "destroy", this.unbindReflow))
			};
			a.prototype.setSize = function(a, b, c) {
				var d = this,
				e = d.renderer;
				d.isResizing += 1;
				v(c, d);
				c = e.globalAnimation;
				d.oldChartHeight = d.chartHeight;
				d.oldChartWidth = d.chartWidth;
				"undefined" !== typeof a && (d.options.chart.width = a);
				"undefined" !== typeof b && (d.options.chart.height = b);
				d.getChartSize();
				d.styledMode || (c ? u: Q)(d.container, {
					width: d.chartWidth + "px",
					height: d.chartHeight + "px"
				},
				c);
				d.setChartSize(!0);
				e.setSize(d.chartWidth, d.chartHeight, c);
				d.axes.forEach(function(a) {
					a.isDirty = !0;
					a.setScale()
				});
				d.isDirtyLegend = !0;
				d.isDirtyBox = !0;
				d.layOutTitles();
				d.getMargins();
				d.redraw(c);
				d.oldChartHeight = null;
				R(d, "resize");
				ia(function() {
					d && R(d, "endResize", null,
					function() {--d.isResizing
					})
				},
				C(c).duration)
			};
			a.prototype.setChartSize = function(a) {
				var b = this.inverted,
				c = this.renderer,
				d = this.chartWidth,
				e = this.chartHeight,
				h = this.options.chart,
				f = this.spacing,
				g = this.clipOffset,
				k, l, m, p;
				this.plotLeft = k = Math.round(this.plotLeft);
				this.plotTop = l = Math.round(this.plotTop);
				this.plotWidth = m = Math.max(0, Math.round(d - k - this.marginRight));
				this.plotHeight = p = Math.max(0, Math.round(e - l - this.marginBottom));
				this.plotSizeX = b ? p: m;
				this.plotSizeY = b ? m: p;
				this.plotBorderWidth = h.plotBorderWidth || 0;
				this.spacingBox = c.spacingBox = {
					x: f[3],
					y: f[0],
					width: d - f[3] - f[1],
					height: e - f[0] - f[2]
				};
				this.plotBox = c.plotBox = {
					x: k,
					y: l,
					width: m,
					height: p
				};
				b = 2 * Math.floor(this.plotBorderWidth / 2);
				d = Math.ceil(Math.max(b, g[3]) / 2);
				e = Math.ceil(Math.max(b, g[0]) / 2);
				this.clipBox = {
					x: d,
					y: e,
					width: Math.floor(this.plotSizeX - Math.max(b, g[1]) / 2 - d),
					height: Math.max(0, Math.floor(this.plotSizeY - Math.max(b, g[2]) / 2 - e))
				};
				a || (this.axes.forEach(function(a) {
					a.setAxisSize();
					a.setAxisTranslation()
				}), c.alignElements());
				R(this, "afterSetChartSize", {
					skipAxes: a
				})
			};
			a.prototype.resetMargins = function() {
				R(this, "resetMargins");
				var a = this,
				b = a.options.chart; ["margin", "spacing"].forEach(function(c) {
					var d = b[c],
					e = X(d) ? d: [d, d, d, d]; ["Top", "Right", "Bottom", "Left"].forEach(function(d, h) {
						a[c][h] = V(b[c + d], e[h])
					})
				});
				k.forEach(function(b, c) {
					a[b] = V(a.margin[c], a.spacing[c])
				});
				a.axisOffset = [0, 0, 0, 0];
				a.clipOffset = [0, 0, 0, 0]
			};
			a.prototype.drawChartBox = function() {
				var a = this.options.chart,
				b = this.renderer,
				c = this.chartWidth,
				d = this.chartHeight,
				e = this.styledMode,
				h = this.plotBGImage,
				f = a.backgroundColor,
				g = a.plotBackgroundColor,
				k = a.plotBackgroundImage,
				l = this.plotLeft,
				m = this.plotTop,
				p = this.plotWidth,
				F = this.plotHeight,
				n = this.plotBox,
				u = this.clipRect,
				q = this.clipBox,
				w = this.chartBackground,
				M = this.plotBackground,
				z = this.plotBorder,
				y, t = "animate";
				w || (this.chartBackground = w = b.rect().addClass("highcharts-background").add(), t = "attr");
				if (e) var P = y = w.strokeWidth();
				else {
					P = a.borderWidth || 0;
					y = P + (a.shadow ? 8 : 0);
					f = {
						fill: f || "none"
					};
					if (P || w["stroke-width"]) f.stroke = a.borderColor,
					f["stroke-width"] = P;
					w.attr(f).shadow(a.shadow)
				}
				w[t]({
					x: y / 2,
					y: y / 2,
					width: c - y - P % 2,
					height: d - y - P % 2,
					r: a.borderRadius
				});
				t = "animate";
				M || (t = "attr", this.plotBackground = M = b.rect().addClass("highcharts-plot-background").add());
				M[t](n);
				e || (M.attr({
					fill: g || "none"
				}).shadow(a.plotShadow), k && (h ? (k !== h.attr("href") && h.attr("href", k), h.animate(n)) : this.plotBGImage = b.image(k, l, m, p, F).add()));
				u ? u.animate({
					width: q.width,
					height: q.height
				}) : this.clipRect = b.clipRect(q);
				t = "animate";
				z || (t = "attr", this.plotBorder = z = b.rect().addClass("highcharts-plot-border").attr({
					zIndex: 1
				}).add());
				e || z.attr({
					stroke: a.plotBorderColor,
					"stroke-width": a.plotBorderWidth || 0,
					fill: "none"
				});
				z[t](z.crisp({
					x: l,
					y: m,
					width: p,
					height: F
				},
				-z.strokeWidth()));
				this.isDirtyBox = !1;
				R(this, "afterDrawChartBox")
			};
			a.prototype.propFromSeries = function() {
				var a = this,
				b = a.options.chart,
				c = a.options.series,
				d, e, h; ["inverted", "angular", "polar"].forEach(function(f) {
					e = z[b.type || b.defaultSeriesType];
					h = b[f] || e && e.prototype[f];
					for (d = c && c.length; ! h && d--;)(e = z[c[d].type]) && e.prototype[f] && (h = !0);
					a[f] = h
				})
			};
			a.prototype.linkSeries = function() {
				var a = this,
				b = a.series;
				b.forEach(function(a) {
					a.linkedSeries.length = 0
				});
				b.forEach(function(b) {
					var c = b.options.linkedTo;
					W(c) && (c = ":previous" === c ? a.series[b.index - 1] : a.get(c)) && c.linkedParent !== b && (c.linkedSeries.push(b), b.linkedParent = c, c.enabledDataSorting && b.setDataSortingOptions(), b.visible = V(b.options.visible, c.options.visible, b.visible))
				});
				R(this, "afterLinkSeries")
			};
			a.prototype.renderSeries = function() {
				this.series.forEach(function(a) {
					a.translate();
					a.render()
				})
			};
			a.prototype.renderLabels = function() {
				var a = this,
				b = a.options.labels;
				b.items && b.items.forEach(function(c) {
					var d = K(b.style, c.style),
					e = ba(d.left) + a.plotLeft,
					h = ba(d.top) + a.plotTop + 12;
					delete d.left;
					delete d.top;
					a.renderer.text(c.html, e, h).attr({
						zIndex: 2
					}).css(d).add()
				})
			};
			a.prototype.render = function() {
				var a = this.axes,
				b = this.colorAxis,
				c = this.renderer,
				d = this.options,
				e = function(a) {
					a.forEach(function(a) {
						a.visible && a.render()
					})
				},
				h = 0;
				this.setTitle();
				this.legend = new G(this, d.legend);
				this.getStacks && this.getStacks();
				this.getMargins(!0);
				this.setChartSize();
				d = this.plotWidth;
				a.some(function(a) {
					if (a.horiz && a.visible && a.options.labels.enabled && a.series.length) return h = 21,
					!0
				});
				var f = this.plotHeight = Math.max(this.plotHeight - h, 0);
				a.forEach(function(a) {
					a.setScale()
				});
				this.getAxisMargins();
				var g = 1.1 < d / this.plotWidth,
				k = 1.05 < f / this.plotHeight;
				if (g || k) a.forEach(function(a) { (a.horiz && g || !a.horiz && k) && a.setTickInterval(!0)
				}),
				this.getMargins();
				this.drawChartBox();
				this.hasCartesianSeries ? e(a) : b && b.length && e(b);
				this.seriesGroup || (this.seriesGroup = c.g("series-group").attr({
					zIndex: 3
				}).add());
				this.renderSeries();
				this.renderLabels();
				this.addCredits();
				this.setResponsive && this.setResponsive();
				this.hasRendered = !0
			};
			a.prototype.addCredits = function(a) {
				var b = this,
				c = U(!0, this.options.credits, a);
				c.enabled && !this.credits && (this.credits = this.renderer.text(c.text + (this.mapCredits || ""), 0, 0).addClass("highcharts-credits").on("click",
				function() {
					c.href && (p.location.href = c.href)
				}).attr({
					align: c.position.align,
					zIndex: 8
				}), b.styledMode || this.credits.css(c.style), this.credits.add().align(c.position), this.credits.update = function(a) {
					b.credits = b.credits.destroy();
					b.addCredits(a)
				})
			};
			a.prototype.destroy = function() {
				var a = this,
				b = a.axes,
				c = a.series,
				d = a.container,
				h = d && d.parentNode,
				f;
				R(a, "destroy");
				a.renderer.forExport ? y(q, a) : q[a.index] = void 0;
				B.chartCount--;
				a.renderTo.removeAttribute("data-highcharts-chart");
				da(a);
				for (f = b.length; f--;) b[f] = b[f].destroy();
				this.scroller && this.scroller.destroy && this.scroller.destroy();
				for (f = c.length; f--;) c[f] = c[f].destroy();
				"title subtitle chartBackground plotBackground plotBGImage plotBorder seriesGroup clipRect credits pointer rangeSelector legend resetZoomButton tooltip renderer".split(" ").forEach(function(b) {
					var c = a[b];
					c && c.destroy && (a[b] = c.destroy())
				});
				d && (d.innerHTML = e.emptyHTML, da(d), h && Y(d));
				Z(a,
				function(b, c) {
					delete a[c]
				})
			};
			a.prototype.firstRender = function() {
				var a = this,
				b = a.options;
				if (!a.isReadyToRender || a.isReadyToRender()) {
					a.getContainer();
					a.resetMargins();
					a.setChartSize();
					a.propFromSeries();
					a.getAxes(); (P(b.series) ? b.series: []).forEach(function(b) {
						a.initSeries(b)
					});
					a.linkSeries();
					a.setSeriesData();
					R(a, "beforeRender");
					t && (r.isRequired() ? a.pointer = new r(a, b) : a.pointer = new t(a, b));
					a.render();
					a.pointer.getChartPosition();
					if (!a.renderer.imgCount && !a.hasLoaded) a.onload();
					a.temporaryDisplay(!0)
				}
			};
			a.prototype.onload = function() {
				this.callbacks.concat([this.callback]).forEach(function(a) {
					a && "undefined" !== typeof this.index && a.apply(this, [this])
				},
				this);
				R(this, "load");
				R(this, "render");
				S(this.index) && this.setReflow(this.options.chart.reflow);
				this.warnIfA11yModuleNotLoaded();
				this.hasLoaded = !0
			};
			a.prototype.warnIfA11yModuleNotLoaded = function() {
				var a = this.options,
				b = this.title;
				a && !this.accessibility && (this.renderer.boxWrapper.attr({
					role: "img",
					"aria-label": (b && b.element.textContent || "").replace(/</g, "&lt;")
				}), a.accessibility && !1 === a.accessibility.enabled || T('Highcharts warning: Consider including the "accessibility.js" module to make your chart more usable for people with disabilities. Set the "accessibility.enabled" option to false to remove this warning. See https://www.highcharts.com/docs/accessibility/accessibility-module.', !1, this))
			};
			a.prototype.addSeries = function(a, b, c) {
				var d = this,
				e;
				a && (b = V(b, !0), R(d, "addSeries", {
					options: a
				},
				function() {
					e = d.initSeries(a);
					d.isDirtyLegend = !0;
					d.linkSeries();
					e.enabledDataSorting && e.setData(a.data, !1);
					R(d, "afterAddSeries", {
						series: e
					});
					b && d.redraw(c)
				}));
				return e
			};
			a.prototype.addAxis = function(a, b, c, d) {
				return this.createAxis(b ? "xAxis": "yAxis", {
					axis: a,
					redraw: c,
					animation: d
				})
			};
			a.prototype.addColorAxis = function(a, b, c) {
				return this.createAxis("colorAxis", {
					axis: a,
					redraw: b,
					animation: c
				})
			};
			a.prototype.createAxis = function(a, b) {
				a = new g(this, U(b.axis, {
					index: this[a].length,
					isX: "xAxis" === a
				}));
				V(b.redraw, !0) && this.redraw(b.animation);
				return a
			};
			a.prototype.showLoading = function(a) {
				var b = this,
				c = b.options,
				d = c.loading,
				h = function() {
					f && Q(f, {
						left: b.plotLeft + "px",
						top: b.plotTop + "px",
						width: b.plotWidth + "px",
						height: b.plotHeight + "px"
					})
				},
				f = b.loadingDiv,
				g = b.loadingSpan;
				f || (b.loadingDiv = f = O("div", {
					className: "highcharts-loading highcharts-loading-hidden"
				},
				null, b.container));
				g || (b.loadingSpan = g = O("span", {
					className: "highcharts-loading-inner"
				},
				null, f), w(b, "redraw", h));
				f.className = "highcharts-loading";
				e.setElementHTML(g, V(a, c.lang.loading, ""));
				b.styledMode || (Q(f, K(d.style, {
					zIndex: 10
				})), Q(g, d.labelStyle), b.loadingShown || (Q(f, {
					opacity: 0,
					display: ""
				}), u(f, {
					opacity: d.style.opacity || .5
				},
				{
					duration: d.showDuration || 0
				})));
				b.loadingShown = !0;
				h()
			};
			a.prototype.hideLoading = function() {
				var a = this.options,
				b = this.loadingDiv;
				b && (b.className = "highcharts-loading highcharts-loading-hidden", this.styledMode || u(b, {
					opacity: 0
				},
				{
					duration: a.loading.hideDuration || 100,
					complete: function() {
						Q(b, {
							display: "none"
						})
					}
				}));
				this.loadingShown = !1
			};
			a.prototype.update = function(a, b, c, e) {
				var h = this,
				f = {
					credits: "addCredits",
					title: "setTitle",
					subtitle: "setSubtitle",
					caption: "setCaption"
				},
				g = a.isResponsiveOptions,
				k = [],
				m,
				p;
				R(h, "update", {
					options: a
				});
				g || h.setResponsive(!1, !0);
				a = H(a, h.options);
				h.userOptions = U(h.userOptions, a);
				var F = a.chart;
				if (F) {
					U(!0, h.options.chart, F);
					"className" in F && h.setClassName(F.className);
					"reflow" in F && h.setReflow(F.reflow);
					if ("inverted" in F || "polar" in F || "type" in F) {
						h.propFromSeries();
						var n = !0
					}
					"alignTicks" in F && (n = !0);
					"events" in F && d(this, F);
					Z(F,
					function(a, b) { - 1 !== h.propsRequireUpdateSeries.indexOf("chart." + b) && (m = !0); - 1 !== h.propsRequireDirtyBox.indexOf(b) && (h.isDirtyBox = !0); - 1 !== h.propsRequireReflow.indexOf(b) && (g ? h.isDirtyBox = !0 : p = !0)
					}); ! h.styledMode && F.style && h.renderer.setStyle(h.options.chart.style || {})
				} ! h.styledMode && a.colors && (this.options.colors = a.colors);
				a.time && (this.time === L && (this.time = new l(a.time)), U(!0, h.options.time, a.time));
				Z(a,
				function(b, c) {
					if (h[c] && "function" === typeof h[c].update) h[c].update(b, !1);
					else if ("function" === typeof h[f[c]]) h[f[c]](b);
					else "colors" !== c && -1 === h.collectionsWithUpdate.indexOf(c) && U(!0, h.options[c], a[c]);
					"chart" !== c && -1 !== h.propsRequireUpdateSeries.indexOf(c) && (m = !0)
				});
				this.collectionsWithUpdate.forEach(function(b) {
					if (a[b]) {
						var d = [];
						h[b].forEach(function(a, b) {
							a.options.isInternal || d.push(V(a.options.index, b))
						});
						fa(a[b]).forEach(function(a, e) {
							var f = S(a.id),
							g;
							f && (g = h.get(a.id)); ! g && h[b] && (g = h[b][d ? d[e] : e]) && f && S(g.options.id) && (g = void 0);
							g && g.coll === b && (g.update(a, !1), c && (g.touched = !0)); ! g && c && h.collectionsWithInit[b] && (h.collectionsWithInit[b][0].apply(h, [a].concat(h.collectionsWithInit[b][1] || []).concat([!1])).touched = !0)
						});
						c && h[b].forEach(function(a) {
							a.touched || a.options.isInternal ? delete a.touched: k.push(a)
						})
					}
				});
				k.forEach(function(a) {
					a.chart && a.remove && a.remove(!1)
				});
				n && h.axes.forEach(function(a) {
					a.update({},
					!1)
				});
				m && h.getSeriesOrderByLinks().forEach(function(a) {
					a.chart && a.update({},
					!1)
				},
				this);
				n = F && F.width;
				F = F && (W(F.height) ? ha(F.height, n || h.chartWidth) : F.height);
				p || M(n) && n !== h.chartWidth || M(F) && F !== h.chartHeight ? h.setSize(n, F, e) : V(b, !0) && h.redraw(e);
				R(h, "afterUpdate", {
					options: a,
					redraw: b,
					animation: e
				})
			};
			a.prototype.setSubtitle = function(a, b) {
				this.applyDescription("subtitle", a);
				this.layOutTitles(b)
			};
			a.prototype.setCaption = function(a, b) {
				this.applyDescription("caption", a);
				this.layOutTitles(b)
			};
			a.prototype.showResetZoom = function() {
				function a() {
					b.zoomOut()
				}
				var b = this,
				c = I.lang,
				d = b.options.chart.zooming.resetButton,
				h = d.theme,
				e = "chart" === d.relativeTo || "spacingBox" === d.relativeTo ? null: "scrollablePlotBox";
				R(this, "beforeShowResetZoom", null,
				function() {
					b.resetZoomButton = b.renderer.button(c.resetZoom, null, null, a, h).attr({
						align: d.position.align,
						title: c.resetZoomTitle
					}).addClass("highcharts-reset-zoom").add().align(d.position, !1, e)
				});
				R(this, "afterShowResetZoom")
			};
			a.prototype.zoomOut = function() {
				R(this, "selection", {
					resetSelection: !0
				},
				this.zoom)
			};
			a.prototype.zoom = function(a) {
				var b = this,
				c = b.pointer,
				d = !1,
				h; ! a || a.resetSelection ? (b.axes.forEach(function(a) {
					h = a.zoom()
				}), c.initiated = !1) : a.xAxis.concat(a.yAxis).forEach(function(a) {
					var e = a.axis;
					if (c[e.isXAxis ? "zoomX": "zoomY"] && S(c.mouseDownX) && S(c.mouseDownY) && b.isInsidePlot(c.mouseDownX - b.plotLeft, c.mouseDownY - b.plotTop, {
						axis: e
					}) || !S(b.inverted ? c.mouseDownX: c.mouseDownY)) h = e.zoom(a.min, a.max),
					e.displayBtn && (d = !0)
				});
				var e = b.resetZoomButton;
				d && !e ? b.showResetZoom() : !d && X(e) && (b.resetZoomButton = e.destroy());
				h && b.redraw(V(b.options.chart.animation, a && a.animation, 100 > b.pointCount))
			};
			a.prototype.pan = function(a, b) {
				var c = this,
				d = c.hoverPoints;
				b = "object" === typeof b ? b: {
					enabled: b,
					type: "x"
				};
				var e = c.options.chart;
				e && e.panning && (e.panning = b);
				var h = b.type,
				f;
				R(this, "pan", {
					originalEvent: a
				},
				function() {
					d && d.forEach(function(a) {
						a.setState()
					});
					var b = c.xAxis;
					"xy" === h ? b = b.concat(c.yAxis) : "y" === h && (b = c.yAxis);
					var e = {};
					b.forEach(function(b) {
						if (b.options.panningEnabled && !b.options.isInternal) {
							var d = b.horiz,
							g = a[d ? "chartX": "chartY"];
							d = d ? "mouseDownX": "mouseDownY";
							var k = c[d],
							l = b.minPointOffset || 0,
							m = b.reversed && !c.inverted || !b.reversed && c.inverted ? -1 : 1,
							p = b.getExtremes(),
							F = b.toValue(k - g, !0) + l * m,
							n = b.toValue(k + b.len - g, !0) - (l * m || b.isXAxis && b.pointRangePadding || 0),
							u = n < F;
							m = b.hasVerticalPanning();
							k = u ? n: F;
							F = u ? F: n;
							var q = b.panningState; ! m || b.isXAxis || q && !q.isDirty || b.series.forEach(function(a) {
								var b = a.getProcessedData(!0);
								b = a.getExtremes(b.yData, !0);
								q || (q = {
									startMin: Number.MAX_VALUE,
									startMax: -Number.MAX_VALUE
								});
								M(b.dataMin) && M(b.dataMax) && (q.startMin = Math.min(V(a.options.threshold, Infinity), b.dataMin, q.startMin), q.startMax = Math.max(V(a.options.threshold, -Infinity), b.dataMax, q.startMax))
							});
							m = Math.min(V(q && q.startMin, p.dataMin), l ? p.min: b.toValue(b.toPixels(p.min) - b.minPixelPadding));
							n = Math.max(V(q && q.startMax, p.dataMax), l ? p.max: b.toValue(b.toPixels(p.max) + b.minPixelPadding));
							b.panningState = q;
							b.isOrdinal || (l = m - k, 0 < l && (F += l, k = m), l = F - n, 0 < l && (F = n, k -= l), b.series.length && k !== p.min && F !== p.max && k >= m && F <= n && (b.setExtremes(k, F, !1, !1, {
								trigger: "pan"
							}), !c.resetZoomButton && k !== m && F !== n && h.match("y") && (c.showResetZoom(), b.displayBtn = !1), f = !0), e[d] = g)
						}
					});
					Z(e,
					function(a, b) {
						c[b] = a
					});
					f && c.redraw(!1);
					Q(c.container, {
						cursor: "move"
					})
				})
			};
			return a
		} ();
		K(a.prototype, {
			callbacks: [],
			collectionsWithInit: {
				xAxis: [a.prototype.addAxis, [!0]],
				yAxis: [a.prototype.addAxis, [!1]],
				series: [a.prototype.addSeries]
			},
			collectionsWithUpdate: ["xAxis", "yAxis", "series"],
			propsRequireDirtyBox: "backgroundColor borderColor borderWidth borderRadius plotBackgroundColor plotBackgroundImage plotBorderColor plotBorderWidth plotShadow shadow".split(" "),
			propsRequireReflow: "margin marginTop marginRight marginBottom marginLeft spacing spacingTop spacingRight spacingBottom spacingLeft".split(" "),
			propsRequireUpdateSeries: "chart.inverted chart.polar chart.ignoreHiddenSeries chart.type colors plotOptions time tooltip".split(" ")
		});
		"";
		return a
	});
	K(g, "Core/Legend/LegendSymbol.js", [g["Core/Utilities.js"]],
	function(a) {
		var g = a.merge,
		x = a.pick,
		E; (function(a) {
			a.drawLineMarker = function(a) {
				var v = this.legendItem = this.legendItem || {},
				r = this.options,
				t = a.symbolWidth,
				n = a.symbolHeight,
				f = n / 2,
				c = this.chart.renderer,
				l = v.group;
				a = a.baseline - Math.round(.3 * a.fontMetrics.b);
				var m = {},
				e = r.marker;
				this.chart.styledMode || (m = {
					"stroke-width": r.lineWidth || 0
				},
				r.dashStyle && (m.dashstyle = r.dashStyle));
				v.line = c.path([["M", 0, a], ["L", t, a]]).addClass("highcharts-graph").attr(m).add(l);
				e && !1 !== e.enabled && t && (r = Math.min(x(e.radius, f), f), 0 === this.symbol.indexOf("url") && (e = g(e, {
					width: n,
					height: n
				}), r = 0), v.symbol = v = c.symbol(this.symbol, t / 2 - r, a - r, 2 * r, 2 * r, e).addClass("highcharts-point").add(l), v.isMarker = !0)
			};
			a.drawRectangle = function(a, g) {
				g = g.legendItem || {};
				var r = a.symbolHeight,
				t = a.options.squareSymbol;
				g.symbol = this.chart.renderer.rect(t ? (a.symbolWidth - r) / 2 : 0, a.baseline - r + 1, t ? r: a.symbolWidth, r, x(a.options.symbolRadius, r / 2)).addClass("highcharts-point").attr({
					zIndex: 3
				}).add(g.group)
			}
		})(E || (E = {}));
		return E
	});
	K(g, "Core/Series/SeriesDefaults.js", [],
	function() {
		return {
			lineWidth: 2,
			allowPointSelect: !1,
			crisp: !0,
			showCheckbox: !1,
			animation: {
				duration: 1E3
			},
			events: {},
			marker: {
				enabledThreshold: 2,
				lineColor: "#ffffff",
				lineWidth: 0,
				radius: 4,
				states: {
					normal: {
						animation: !0
					},
					hover: {
						animation: {
							duration: 50
						},
						enabled: !0,
						radiusPlus: 2,
						lineWidthPlus: 1
					},
					select: {
						fillColor: "#cccccc",
						lineColor: "#000000",
						lineWidth: 2
					}
				}
			},
			point: {
				events: {}
			},
			dataLabels: {
				animation: {},
				align: "center",
				defer: !0,
				formatter: function() {
					var a = this.series.chart.numberFormatter;
					return "number" !== typeof this.y ? "": a(this.y, -1)
				},
				padding: 5,
				style: {
					fontSize: "11px",
					fontWeight: "bold",
					color: "contrast",
					textOutline: "1px contrast"
				},
				verticalAlign: "bottom",
				x: 0,
				y: 0
			},
			cropThreshold: 300,
			opacity: 1,
			pointRange: 0,
			softThreshold: !0,
			states: {
				normal: {
					animation: !0
				},
				hover: {
					animation: {
						duration: 50
					},
					lineWidthPlus: 1,
					marker: {},
					halo: {
						size: 10,
						opacity: .25
					}
				},
				select: {
					animation: {
						duration: 0
					}
				},
				inactive: {
					animation: {
						duration: 50
					},
					opacity: .2
				}
			},
			stickyTracking: !0,
			turboThreshold: 1E3,
			findNearestPointBy: "x"
		}
	});
	K(g, "Core/Series/Series.js", [g["Core/Animation/AnimationUtilities.js"], g["Core/Defaults.js"], g["Core/Foundation.js"], g["Core/Globals.js"], g["Core/Legend/LegendSymbol.js"], g["Core/Series/Point.js"], g["Core/Series/SeriesDefaults.js"], g["Core/Series/SeriesRegistry.js"], g["Core/Renderer/SVG/SVGElement.js"], g["Core/Utilities.js"]],
	function(a, g, x, E, D, B, G, r, t, n) {
		var f = a.animObject,
		c = a.setAnimation,
		l = g.defaultOptions,
		m = x.registerEventOptions,
		e = E.hasTouch,
		u = E.svg,
		C = E.win,
		v = r.seriesTypes,
		I = n.arrayMax,
		L = n.arrayMin,
		A = n.clamp,
		d = n.cleanRecursively,
		q = n.correctFloat,
		h = n.defined,
		k = n.erase,
		b = n.error,
		p = n.extend,
		z = n.find,
		w = n.fireEvent,
		N = n.getNestedProperty,
		H = n.isArray,
		O = n.isNumber,
		Q = n.isString,
		S = n.merge,
		Y = n.objectEach,
		y = n.pick,
		T = n.removeEvent,
		K = n.splat,
		ca = n.syncTimeout;
		a = function() {
			function a() {
				this.zones = this.yAxis = this.xAxis = this.userOptions = this.tooltipOptions = this.processedYData = this.processedXData = this.points = this.options = this.linkedSeries = this.index = this.eventsToUnbind = this.eventOptions = this.data = this.chart = this._i = void 0
			}
			a.prototype.init = function(a, b) {
				w(this, "init", {
					options: b
				});
				var c = this,
				d = a.series;
				this.eventsToUnbind = [];
				c.chart = a;
				c.options = c.setOptions(b);
				b = c.options;
				c.linkedSeries = [];
				c.bindAxes();
				p(c, {
					name: b.name,
					state: "",
					visible: !1 !== b.visible,
					selected: !0 === b.selected
				});
				m(this, b);
				var e = b.events;
				if (e && e.click || b.point && b.point.events && b.point.events.click || b.allowPointSelect) a.runTrackerClick = !0;
				c.getColor();
				c.getSymbol();
				c.parallelArrays.forEach(function(a) {
					c[a + "Data"] || (c[a + "Data"] = [])
				});
				c.isCartesian && (a.hasCartesianSeries = !0);
				var h;
				d.length && (h = d[d.length - 1]);
				c._i = y(h && h._i, -1) + 1;
				c.opacity = c.options.opacity;
				a.orderSeries(this.insert(d));
				b.dataSorting && b.dataSorting.enabled ? c.setDataSortingOptions() : c.points || c.data || c.setData(b.data, !1);
				w(this, "afterInit")
			};
			a.prototype.is = function(a) {
				return v[a] && this instanceof v[a]
			};
			a.prototype.insert = function(a) {
				var b = this.options.index,
				c;
				if (O(b)) {
					for (c = a.length; c--;) if (b >= y(a[c].options.index, a[c]._i)) {
						a.splice(c + 1, 0, this);
						break
					} - 1 === c && a.unshift(this);
					c += 1
				} else a.push(this);

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

13805029595

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值