highcharts.js 3001-6000

 文件过大分5部分

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

highcharts.js 3001-6000

			y.prototype.image = function(b, d, h, c, a, y) {
				var k = {
					preserveAspectRatio: "none"
				},
				e = function(b, d) {
					b.setAttributeNS ? b.setAttributeNS("http://www.w3.org/1999/xlink", "href", d) : b.setAttribute("hc-svg-href", d)
				};
				z(d) && (k.x = d);
				z(h) && (k.y = h);
				z(c) && (k.width = c);
				z(a) && (k.height = a);
				var p = this.createElement("image").attr(k);
				d = function(d) {
					e(p.element, b);
					y.call(p, d)
				};
				y ? (e(p.element, "data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw=="), h = new I.Image, L(h, "load", d), h.src = b, h.complete && d({})) : e(p.element, b);
				return p
			};
			y.prototype.symbol = function(a, y, k, p, e, f) {
				var F = this,
				w = /^url\((.*?)\)$/,
				z = w.test(a),
				l = !z && (this.symbols[a] ? a: "circle"),
				m = l && this.symbols[l],
				u;
				if (m) {
					"number" === typeof y && (u = m.call(this.symbols, Math.round(y || 0), Math.round(k || 0), p || 0, e || 0, f));
					var g = this.path(u);
					F.styledMode || g.attr("fill", "none");
					b(g, {
						symbolName: l || void 0,
						x: y,
						y: k,
						width: p,
						height: e
					});
					f && b(g, f)
				} else if (z) {
					var P = a.match(w)[1];
					var T = g = this.image(P);
					T.imgwidth = O(J[P] && J[P].width, f && f.width);
					T.imgheight = O(J[P] && J[P].height, f && f.height);
					var C = function(b) {
						return b.attr({
							width: b.width,
							height: b.height
						})
					}; ["width", "height"].forEach(function(b) {
						T[b + "Setter"] = function(b, d) {
							this[d] = b;
							b = this.alignByTranslate;
							var c = this.element,
							a = this.width,
							y = this.height,
							k = this.imgwidth,
							p = this.imgheight,
							e = this["img" + d];
							if (h(e)) {
								var F = 1;
								f && "within" === f.backgroundSize && a && y ? (F = Math.min(a / k, y / p), e = Math.round(e * F), A(c, {
									width: Math.round(k * F),
									height: Math.round(p * F)
								})) : c && c.setAttribute(d, e);
								b || this.translate(((a || 0) - e * F) / 2, ((y || 0) - e * F) / 2)
							}
						}
					});
					h(y) && T.attr({
						x: y,
						y: k
					});
					T.isImg = !0;
					h(T.imgwidth) && h(T.imgheight) ? C(T) : (T.attr({
						width: 0,
						height: 0
					}), d("img", {
						onload: function() {
							var b = n[F.chartIndex];
							0 === this.width && (q(this, {
								position: "absolute",
								top: "-999em"
							}), c.body.appendChild(this));
							J[P] = {
								width: this.width,
								height: this.height
							};
							T.imgwidth = this.width;
							T.imgheight = this.height;
							T.element && C(T);
							this.parentNode && this.parentNode.removeChild(this);
							F.imgCount--;
							if (!F.imgCount && b && !b.hasLoaded) b.onload()
						},
						src: P
					}), this.imgCount++)
				}
				return g
			};
			y.prototype.clipRect = function(b, d, h, c) {
				var a = v() + "-",
				y = this.createElement("clipPath").attr({
					id: a
				}).add(this.defs);
				b = this.rect(b, d, h, c, 0).add(y);
				b.id = a;
				b.clipPath = y;
				b.count = 0;
				return b
			};
			y.prototype.text = function(b, d, c, a) {
				var y = {};
				if (a && (this.allowHTML || !this.forExport)) return this.html(b, d, c);
				y.x = Math.round(d || 0);
				c && (y.y = Math.round(c));
				h(b) && (y.text = b);
				b = this.createElement("text").attr(y);
				if (!a || this.forExport && !this.allowHTML) b.xSetter = function(b, d, h) {
					for (var c = h.getElementsByTagName("tspan"), a = h.getAttribute(d), y = 0, k; y < c.length; y++) k = c[y],
					k.getAttribute(d) === a && k.setAttribute(d, b);
					h.setAttribute(d, b)
				};
				return b
			};
			y.prototype.fontMetrics = function(b, d) {
				b = !this.styledMode && /px/.test(b) || !I.getComputedStyle ? b || d && d.style && d.style.fontSize || this.style && this.style.fontSize: d && D.prototype.getStyle.call(d, "font-size");
				b = /px/.test(b) ? Q(b) : 12;
				d = 24 > b ? b + 3 : Math.round(1.2 * b);
				return {
					h: d,
					b: Math.round(.8 * d),
					f: b
				}
			};
			y.prototype.rotCorr = function(b, d, h) {
				var c = b;
				d && h && (c = Math.max(c * Math.cos(d * f), 4));
				return {
					x: -b / 3 * Math.sin(d * f),
					y: c
				}
			};
			y.prototype.pathToSegments = function(b) {
				for (var d = [], h = [], c = {
					A: 8,
					C: 7,
					H: 2,
					L: 3,
					M: 3,
					Q: 5,
					S: 5,
					T: 3,
					V: 2
				},
				a = 0; a < b.length; a++) N(h[0]) && z(b[a]) && h.length === c[h[0].toUpperCase()] && b.splice(a, 0, h[0].replace("M", "L").replace("m", "l")),
				"string" === typeof b[a] && (h.length && d.push(h.slice(0)), h.length = 0),
				h.push(b[a]);
				d.push(h.slice(0));
				return d
			};
			y.prototype.label = function(b, d, h, c, a, y, k, e, p) {
				return new B(this, b, d, h, c, a, y, k, e, p)
			};
			y.prototype.alignElements = function() {
				this.alignedObjects.forEach(function(b) {
					return b.align()
				})
			};
			return y
		} ();
		b(x.prototype, {
			Element: D,
			SVG_NS: C,
			escapes: {
				"&": "&amp;",
				"<": "&lt;",
				">": "&gt;",
				"'": "&#39;",
				'"': "&quot;"
			},
			symbols: G,
			draw: u
		});
		E.registerRendererType("svg", x, !0);
		"";
		return x
	});
	K(g, "Core/Renderer/HTML/HTMLElement.js", [g["Core/Globals.js"], g["Core/Renderer/SVG/SVGElement.js"], g["Core/Utilities.js"]],
	function(a, g, x) {
		var v = this && this.__extends ||
		function() {
			var c = function(a, f) {
				c = Object.setPrototypeOf || {
					__proto__: []
				}
				instanceof Array &&
				function(c, a) {
					c.__proto__ = a
				} ||
				function(c, a) {
					for (var e in a) a.hasOwnProperty(e) && (c[e] = a[e])
				};
				return c(a, f)
			};
			return function(a, f) {
				function e() {
					this.constructor = a
				}
				c(a, f);
				a.prototype = null === f ? Object.create(f) : (e.prototype = f.prototype, new e)
			}
		} (),
		D = a.isFirefox,
		B = a.isMS,
		G = a.isWebKit,
		r = a.win,
		t = x.css,
		n = x.defined,
		f = x.extend,
		c = x.pick,
		l = x.pInt;
		return function(a) {
			function e() {
				return null !== a && a.apply(this, arguments) || this
			}
			v(e, a);
			e.compose = function(c) {
				if ( - 1 === e.composedClasses.indexOf(c)) {
					e.composedClasses.push(c);
					var a = e.prototype,
					f = c.prototype;
					f.getSpanCorrection = a.getSpanCorrection;
					f.htmlCss = a.htmlCss;
					f.htmlGetBBox = a.htmlGetBBox;
					f.htmlUpdateTransform = a.htmlUpdateTransform;
					f.setSpanRotation = a.setSpanRotation
				}
				return c
			};
			e.prototype.getSpanCorrection = function(c, a, e) {
				this.xCorr = -c * e;
				this.yCorr = -a
			};
			e.prototype.htmlCss = function(a) {
				var e = "SPAN" === this.element.tagName && a && "width" in a,
				l = c(e && a.width, void 0);
				if (e) {
					delete a.width;
					this.textWidth = l;
					var g = !0
				}
				a && "ellipsis" === a.textOverflow && (a.whiteSpace = "nowrap", a.overflow = "hidden");
				this.styles = f(this.styles, a);
				t(this.element, a);
				g && this.htmlUpdateTransform();
				return this
			};
			e.prototype.htmlGetBBox = function() {
				var c = this.element;
				return {
					x: c.offsetLeft,
					y: c.offsetTop,
					width: c.offsetWidth,
					height: c.offsetHeight
				}
			};
			e.prototype.htmlUpdateTransform = function() {
				if (this.added) {
					var c = this.renderer,
					a = this.element,
					e = this.translateX || 0,
					f = this.translateY || 0,
					g = this.x || 0,
					m = this.y || 0,
					d = this.textAlign || "left",
					q = {
						left: 0,
						center: .5,
						right: 1
					} [d],
					h = this.styles;
					h = h && h.whiteSpace;
					t(a, {
						marginLeft: e,
						marginTop: f
					}); ! c.styledMode && this.shadows && this.shadows.forEach(function(b) {
						t(b, {
							marginLeft: e + 1,
							marginTop: f + 1
						})
					});
					this.inverted && [].forEach.call(a.childNodes,
					function(b) {
						c.invertChild(b, a)
					});
					if ("SPAN" === a.tagName) {
						var k = this.rotation,
						b = this.textWidth && l(this.textWidth),
						p = [k, d, a.innerHTML, this.textWidth, this.textAlign].join(),
						z = void 0;
						z = !1;
						if (b !== this.oldTextWidth) {
							if (this.textPxLength) var w = this.textPxLength;
							else t(a, {
								width: "",
								whiteSpace: h || "nowrap"
							}),
							w = a.offsetWidth; (b > this.oldTextWidth || w > b) && (/[ \-]/.test(a.textContent || a.innerText) || "ellipsis" === a.style.textOverflow) && (t(a, {
								width: w > b || k ? b + "px": "auto",
								display: "block",
								whiteSpace: h || "normal"
							}), this.oldTextWidth = b, z = !0)
						}
						this.hasBoxWidthChanged = z;
						p !== this.cTT && (z = c.fontMetrics(a.style.fontSize, a).b, !n(k) || k === (this.oldRotation || 0) && d === this.oldAlign || this.setSpanRotation(k, q, z), this.getSpanCorrection(!n(k) && this.textPxLength || a.offsetWidth, z, q, k, d));
						t(a, {
							left: g + (this.xCorr || 0) + "px",
							top: m + (this.yCorr || 0) + "px"
						});
						this.cTT = p;
						this.oldRotation = k;
						this.oldAlign = d
					}
				} else this.alignOnAdd = !0
			};
			e.prototype.setSpanRotation = function(c, a, e) {
				var f = {},
				l = B && !/Edge/.test(r.navigator.userAgent) ? "-ms-transform": G ? "-webkit-transform": D ? "MozTransform": r.opera ? "-o-transform": void 0;
				l && (f[l] = f.transform = "rotate(" + c + "deg)", f[l + (D ? "Origin": "-origin")] = f.transformOrigin = 100 * a + "% " + e + "px", t(this.element, f))
			};
			e.composedClasses = [];
			return e
		} (g)
	});
	K(g, "Core/Renderer/HTML/HTMLRenderer.js", [g["Core/Renderer/HTML/AST.js"], g["Core/Renderer/SVG/SVGElement.js"], g["Core/Renderer/SVG/SVGRenderer.js"], g["Core/Utilities.js"]],
	function(a, g, x, E) {
		var v = this && this.__extends ||
		function() {
			var a = function(f, c) {
				a = Object.setPrototypeOf || {
					__proto__: []
				}
				instanceof Array &&
				function(c, a) {
					c.__proto__ = a
				} ||
				function(c, a) {
					for (var e in a) a.hasOwnProperty(e) && (c[e] = a[e])
				};
				return a(f, c)
			};
			return function(f, c) {
				function l() {
					this.constructor = f
				}
				a(f, c);
				f.prototype = null === c ? Object.create(c) : (l.prototype = c.prototype, new l)
			}
		} (),
		B = E.attr,
		G = E.createElement,
		r = E.extend,
		t = E.pick;
		return function(n) {
			function f() {
				return null !== n && n.apply(this, arguments) || this
			}
			v(f, n);
			f.compose = function(c) { - 1 === f.composedClasses.indexOf(c) && (f.composedClasses.push(c), c.prototype.html = f.prototype.html);
				return c
			};
			f.prototype.html = function(c, f, m) {
				var e = this.createElement("span"),
				l = e.element,
				n = e.renderer,
				J = n.isSVG,
				I = function(c, a) { ["opacity", "visibility"].forEach(function(d) {
						c[d + "Setter"] = function(e, h, k) {
							var b = c.div ? c.div.style: a;
							g.prototype[d + "Setter"].call(this, e, h, k);
							b && (b[h] = e)
						}
					});
					c.addedSetters = !0
				};
				e.textSetter = function(c) {
					c !== this.textStr && (delete this.bBox, delete this.oldTextWidth, a.setElementHTML(this.element, t(c, "")), this.textStr = c, e.doTransform = !0)
				};
				J && I(e, e.element.style);
				e.xSetter = e.ySetter = e.alignSetter = e.rotationSetter = function(c, a) {
					"align" === a ? e.alignValue = e.textAlign = c: e[a] = c;
					e.doTransform = !0
				};
				e.afterSetters = function() {
					this.doTransform && (this.htmlUpdateTransform(), this.doTransform = !1)
				};
				e.attr({
					text: c,
					x: Math.round(f),
					y: Math.round(m)
				}).css({
					position: "absolute"
				});
				n.styledMode || e.css({
					fontFamily: this.style.fontFamily,
					fontSize: this.style.fontSize
				});
				l.style.whiteSpace = "nowrap";
				e.css = e.htmlCss;
				J && (e.add = function(c) {
					var a = n.box.parentNode,
					d = [];
					if (this.parentGroup = c) {
						var f = c.div;
						if (!f) {
							for (; c;) d.push(c),
							c = c.parentGroup;
							d.reverse().forEach(function(h) {
								function c(b, d) {
									h[d] = b;
									"translateX" === d ? q.left = b + "px": q.top = b + "px";
									h.doTransform = !0
								}
								var b = B(h.element, "class"),
								p = h.styles || {};
								f = h.div = h.div || G("div", b ? {
									className: b
								}: void 0, {
									position: "absolute",
									left: (h.translateX || 0) + "px",
									top: (h.translateY || 0) + "px",
									display: h.display,
									opacity: h.opacity,
									cursor: p.cursor,
									pointerEvents: p.pointerEvents,
									visibility: h.visibility
								},
								f || a);
								var q = f.style;
								r(h, {
									classSetter: function(b) {
										return function(d) {
											this.element.setAttribute("class", d);
											b.className = d
										}
									} (f),
									on: function() {
										d[0].div && e.on.apply({
											element: d[0].div,
											onEvents: h.onEvents
										},
										arguments);
										return h
									},
									translateXSetter: c,
									translateYSetter: c
								});
								h.addedSetters || I(h)
							})
						}
					} else f = a;
					f.appendChild(l);
					e.added = !0;
					e.alignOnAdd && e.htmlUpdateTransform();
					return e
				});
				return e
			};
			f.composedClasses = [];
			return f
		} (x)
	});
	K(g, "Core/Axis/AxisDefaults.js", [],
	function() {
		var a; (function(a) {
			a.defaultXAxisOptions = {
				alignTicks: !0,
				allowDecimals: void 0,
				panningEnabled: !0,
				zIndex: 2,
				zoomEnabled: !0,
				dateTimeLabelFormats: {
					millisecond: {
						main: "%H:%M:%S.%L",
						range: !1
					},
					second: {
						main: "%H:%M:%S",
						range: !1
					},
					minute: {
						main: "%H:%M",
						range: !1
					},
					hour: {
						main: "%H:%M",
						range: !1
					},
					day: {
						main: "%e. %b"
					},
					week: {
						main: "%e. %b"
					},
					month: {
						main: "%b '%y"
					},
					year: {
						main: "%Y"
					}
				},
				endOnTick: !1,
				gridLineDashStyle: "Solid",
				gridZIndex: 1,
				labels: {
					autoRotation: void 0,
					autoRotationLimit: 80,
					distance: void 0,
					enabled: !0,
					indentation: 10,
					overflow: "justify",
					padding: 5,
					reserveSpace: void 0,
					rotation: void 0,
					staggerLines: 0,
					step: 0,
					useHTML: !1,
					x: 0,
					zIndex: 7,
					style: {
						color: "#666666",
						cursor: "default",
						fontSize: "11px"
					}
				},
				maxPadding: .01,
				minorGridLineDashStyle: "Solid",
				minorTickLength: 2,
				minorTickPosition: "outside",
				minPadding: .01,
				offset: void 0,
				opposite: !1,
				reversed: void 0,
				reversedStacks: !1,
				showEmpty: !0,
				showFirstLabel: !0,
				showLastLabel: !0,
				startOfWeek: 1,
				startOnTick: !1,
				tickLength: 10,
				tickPixelInterval: 100,
				tickmarkPlacement: "between",
				tickPosition: "outside",
				title: {
					align: "middle",
					rotation: 0,
					useHTML: !1,
					x: 0,
					y: 0,
					style: {
						color: "#666666"
					}
				},
				type: "linear",
				uniqueNames: !0,
				visible: !0,
				minorGridLineColor: "#f2f2f2",
				minorGridLineWidth: 1,
				minorTickColor: "#999999",
				lineColor: "#ccd6eb",
				lineWidth: 1,
				gridLineColor: "#e6e6e6",
				gridLineWidth: void 0,
				tickColor: "#ccd6eb"
			};
			a.defaultYAxisOptions = {
				reversedStacks: !0,
				endOnTick: !0,
				maxPadding: .05,
				minPadding: .05,
				tickPixelInterval: 72,
				showLastLabel: !0,
				labels: {
					x: -8
				},
				startOnTick: !0,
				title: {
					rotation: 270,
					text: "Values"
				},
				stackLabels: {
					animation: {},
					allowOverlap: !1,
					enabled: !1,
					crop: !0,
					overflow: "justify",
					formatter: function() {
						var a = this.axis.chart.numberFormatter;
						return a(this.total || 0, -1)
					},
					style: {
						color: "#000000",
						fontSize: "11px",
						fontWeight: "bold",
						textOutline: "1px contrast"
					}
				},
				gridLineWidth: 1,
				lineWidth: 0
			};
			a.defaultLeftAxisOptions = {
				labels: {
					x: -15
				},
				title: {
					rotation: 270
				}
			};
			a.defaultRightAxisOptions = {
				labels: {
					x: 15
				},
				title: {
					rotation: 90
				}
			};
			a.defaultBottomAxisOptions = {
				labels: {
					autoRotation: [ - 45],
					x: 0
				},
				margin: 15,
				title: {
					rotation: 0
				}
			};
			a.defaultTopAxisOptions = {
				labels: {
					autoRotation: [ - 45],
					x: 0
				},
				margin: 15,
				title: {
					rotation: 0
				}
			}
		})(a || (a = {}));
		return a
	});
	K(g, "Core/Foundation.js", [g["Core/Utilities.js"]],
	function(a) {
		var g = a.addEvent,
		x = a.isFunction,
		E = a.objectEach,
		D = a.removeEvent,
		B; (function(a) {
			a.registerEventOptions = function(a, t) {
				a.eventOptions = a.eventOptions || {};
				E(t.events,
				function(n, f) {
					a.eventOptions[f] !== n && (a.eventOptions[f] && (D(a, f, a.eventOptions[f]), delete a.eventOptions[f]), x(n) && (a.eventOptions[f] = n, g(a, f, n)))
				})
			}
		})(B || (B = {}));
		return B
	});
	K(g, "Core/Axis/Tick.js", [g["Core/FormatUtilities.js"], g["Core/Globals.js"], g["Core/Utilities.js"]],
	function(a, g, x) {
		var v = g.deg2rad,
		D = x.clamp,
		B = x.correctFloat,
		G = x.defined,
		r = x.destroyObjectProperties,
		t = x.extend,
		n = x.fireEvent,
		f = x.isNumber,
		c = x.merge,
		l = x.objectEach,
		m = x.pick;
		g = function() {
			function e(c, a, e, f, l) {
				this.isNewLabel = this.isNew = !0;
				this.axis = c;
				this.pos = a;
				this.type = e || "";
				this.parameters = l || {};
				this.tickmarkOffset = this.parameters.tickmarkOffset;
				this.options = this.parameters.options;
				n(this, "init");
				e || f || this.addLabel()
			}
			e.prototype.addLabel = function() {
				var c = this,
				e = c.axis,
				l = e.options,
				g = e.chart,
				L = e.categories,
				A = e.logarithmic,
				d = e.names,
				q = c.pos,
				h = m(c.options && c.options.labels, l.labels),
				k = e.tickPositions,
				b = q === k[0],
				p = q === k[k.length - 1],
				z = (!h.step || 1 === h.step) && 1 === e.tickInterval;
				k = k.info;
				var w = c.label,
				N;
				L = this.parameters.category || (L ? m(L[q], d[q], q) : q);
				A && f(L) && (L = B(A.lin2log(L)));
				if (e.dateTime) if (k) {
					var H = g.time.resolveDTLFormat(l.dateTimeLabelFormats[!l.grid && k.higherRanks[q] || k.unitName]);
					var O = H.main
				} else f(L) && (O = e.dateTime.getXDateFormat(L, l.dateTimeLabelFormats || {}));
				c.isFirst = b;
				c.isLast = p;
				var Q = {
					axis: e,
					chart: g,
					dateTimeLabelFormat: O,
					isFirst: b,
					isLast: p,
					pos: q,
					tick: c,
					tickPositionInfo: k,
					value: L
				};
				n(this, "labelFormat", Q);
				var r = function(b) {
					return h.formatter ? h.formatter.call(b, b) : h.format ? (b.text = e.defaultLabelFormatter.call(b, b), a.format(h.format, b, g)) : e.defaultLabelFormatter.call(b, b)
				};
				l = r.call(Q, Q);
				var Y = H && H.list;
				c.shortenLabel = Y ?
				function() {
					for (N = 0; N < Y.length; N++) if (t(Q, {
						dateTimeLabelFormat: Y[N]
					}), w.attr({
						text: r.call(Q, Q)
					}), w.getBBox().width < e.getSlotWidth(c) - 2 * h.padding) return;
					w.attr({
						text: ""
					})
				}: void 0;
				z && e._addedPlotLB && c.moveLabel(l, h);
				G(w) || c.movedLabel ? w && w.textStr !== l && !z && (!w.textWidth || h.style.width || w.styles.width || w.css({
					width: null
				}), w.attr({
					text: l
				}), w.textPxLength = w.getBBox().width) : (c.label = w = c.createLabel({
					x: 0,
					y: 0
				},
				l, h), c.rotation = 0)
			};
			e.prototype.createLabel = function(a, e, f) {
				var l = this.axis,
				g = l.chart;
				if (a = G(e) && f.enabled ? g.renderer.text(e, a.x, a.y, f.useHTML).add(l.labelGroup) : null) g.styledMode || a.css(c(f.style)),
				a.textPxLength = a.getBBox().width;
				return a
			};
			e.prototype.destroy = function() {
				r(this, this.axis)
			};
			e.prototype.getPosition = function(c, a, e, f) {
				var l = this.axis,
				g = l.chart,
				d = f && g.oldChartHeight || g.chartHeight;
				c = {
					x: c ? B(l.translate(a + e, void 0, void 0, f) + l.transB) : l.left + l.offset + (l.opposite ? (f && g.oldChartWidth || g.chartWidth) - l.right - l.left: 0),
					y: c ? d - l.bottom + l.offset - (l.opposite ? l.height: 0) : B(d - l.translate(a + e, void 0, void 0, f) - l.transB)
				};
				c.y = D(c.y, -1E5, 1E5);
				n(this, "afterGetPosition", {
					pos: c
				});
				return c
			};
			e.prototype.getLabelPosition = function(c, a, e, f, l, g, d, q) {
				var h = this.axis,
				k = h.transA,
				b = h.isLinked && h.linkedParent ? h.linkedParent.reversed: h.reversed,
				p = h.staggerLines,
				z = h.tickRotCorr || {
					x: 0,
					y: 0
				},
				w = f || h.reserveSpaceDefault ? 0 : -h.labelOffset * ("center" === h.labelAlign ? .5 : 1),
				m = {};
				e = 0 === h.side ? e.rotation ? -8 : -e.getBBox().height: 2 === h.side ? z.y + 8 : Math.cos(e.rotation * v) * (z.y - e.getBBox(!1, 0).height / 2);
				G(l.y) && (e = 0 === h.side && h.horiz ? l.y + e: l.y);
				c = c + l.x + w + z.x - (g && f ? g * k * (b ? -1 : 1) : 0);
				a = a + e - (g && !f ? g * k * (b ? 1 : -1) : 0);
				p && (f = d / (q || 1) % p, h.opposite && (f = p - f - 1), a += h.labelOffset / p * f);
				m.x = c;
				m.y = Math.round(a);
				n(this, "afterGetLabelPosition", {
					pos: m,
					tickmarkOffset: g,
					index: d
				});
				return m
			};
			e.prototype.getLabelSize = function() {
				return this.label ? this.label.getBBox()[this.axis.horiz ? "height": "width"] : 0
			};
			e.prototype.getMarkPath = function(c, a, e, f, l, g) {
				return g.crispLine([["M", c, a], ["L", c + (l ? 0 : -e), a + (l ? e: 0)]], f)
			};
			e.prototype.handleOverflow = function(c) {
				var a = this.axis,
				e = a.options.labels,
				f = c.x,
				l = a.chart.chartWidth,
				g = a.chart.spacing,
				d = m(a.labelLeft, Math.min(a.pos, g[3]));
				g = m(a.labelRight, Math.max(a.isRadial ? 0 : a.pos + a.len, l - g[1]));
				var q = this.label,
				h = this.rotation,
				k = {
					left: 0,
					center: .5,
					right: 1
				} [a.labelAlign || q.attr("align")],
				b = q.getBBox().width,
				p = a.getSlotWidth(this),
				z = {},
				w = p,
				u = 1,
				n;
				if (h || "justify" !== e.overflow) 0 > h && f - k * b < d ? n = Math.round(f / Math.cos(h * v) - d) : 0 < h && f + k * b > g && (n = Math.round((l - f) / Math.cos(h * v)));
				else if (l = f + (1 - k) * b, f - k * b < d ? w = c.x + w * (1 - k) - d: l > g && (w = g - c.x + w * k, u = -1), w = Math.min(p, w), w < p && "center" === a.labelAlign && (c.x += u * (p - w - k * (p - Math.min(b, w)))), b > w || a.autoRotation && (q.styles || {}).width) n = w;
				n && (this.shortenLabel ? this.shortenLabel() : (z.width = Math.floor(n) + "px", (e.style || {}).textOverflow || (z.textOverflow = "ellipsis"), q.css(z)))
			};
			e.prototype.moveLabel = function(c, a) {
				var e = this,
				f = e.label,
				g = e.axis,
				m = g.reversed,
				d = !1;
				f && f.textStr === c ? (e.movedLabel = f, d = !0, delete e.label) : l(g.ticks,
				function(h) {
					d || h.isNew || h === e || !h.label || h.label.textStr !== c || (e.movedLabel = h.label, d = !0, h.labelPos = e.movedLabel.xy, delete h.label)
				});
				if (!d && (e.labelPos || f)) {
					var q = e.labelPos || f.xy;
					f = g.horiz ? m ? 0 : g.width + g.left: q.x;
					g = g.horiz ? q.y: m ? g.width + g.left: 0;
					e.movedLabel = e.createLabel({
						x: f,
						y: g
					},
					c, a);
					e.movedLabel && e.movedLabel.attr({
						opacity: 0
					})
				}
			};
			e.prototype.render = function(c, a, e) {
				var f = this.axis,
				l = f.horiz,
				g = this.pos,
				d = m(this.tickmarkOffset, f.tickmarkOffset);
				g = this.getPosition(l, g, d, a);
				d = g.x;
				var q = g.y;
				f = l && d === f.pos + f.len || !l && q === f.pos ? -1 : 1;
				l = m(e, this.label && this.label.newOpacity, 1);
				e = m(e, 1);
				this.isActive = !0;
				this.renderGridLine(a, e, f);
				this.renderMark(g, e, f);
				this.renderLabel(g, a, l, c);
				this.isNew = !1;
				n(this, "afterRender")
			};
			e.prototype.renderGridLine = function(c, a, e) {
				var f = this.axis,
				l = f.options,
				g = {},
				d = this.pos,
				q = this.type,
				h = m(this.tickmarkOffset, f.tickmarkOffset),
				k = f.chart.renderer,
				b = this.gridLine,
				p = l.gridLineWidth,
				z = l.gridLineColor,
				w = l.gridLineDashStyle;
				"minor" === this.type && (p = l.minorGridLineWidth, z = l.minorGridLineColor, w = l.minorGridLineDashStyle);
				b || (f.chart.styledMode || (g.stroke = z, g["stroke-width"] = p || 0, g.dashstyle = w), q || (g.zIndex = 1), c && (a = 0), this.gridLine = b = k.path().attr(g).addClass("highcharts-" + (q ? q + "-": "") + "grid-line").add(f.gridGroup));
				if (b && (e = f.getPlotLinePath({
					value: d + h,
					lineWidth: b.strokeWidth() * e,
					force: "pass",
					old: c
				}))) b[c || this.isNew ? "attr": "animate"]({
					d: e,
					opacity: a
				})
			};
			e.prototype.renderMark = function(c, a, e) {
				var f = this.axis,
				l = f.options,
				g = f.chart.renderer,
				d = this.type,
				q = f.tickSize(d ? d + "Tick": "tick"),
				h = c.x;
				c = c.y;
				var k = m(l["minor" !== d ? "tickWidth": "minorTickWidth"], !d && f.isXAxis ? 1 : 0);
				l = l["minor" !== d ? "tickColor": "minorTickColor"];
				var b = this.mark,
				p = !b;
				q && (f.opposite && (q[0] = -q[0]), b || (this.mark = b = g.path().addClass("highcharts-" + (d ? d + "-": "") + "tick").add(f.axisGroup), f.chart.styledMode || b.attr({
					stroke: l,
					"stroke-width": k
				})), b[p ? "attr": "animate"]({
					d: this.getMarkPath(h, c, q[0], b.strokeWidth() * e, f.horiz, g),
					opacity: a
				}))
			};
			e.prototype.renderLabel = function(c, a, e, l) {
				var g = this.axis,
				u = g.horiz,
				d = g.options,
				q = this.label,
				h = d.labels,
				k = h.step;
				g = m(this.tickmarkOffset, g.tickmarkOffset);
				var b = c.x;
				c = c.y;
				var p = !0;
				q && f(b) && (q.xy = c = this.getLabelPosition(b, c, q, u, h, g, l, k), this.isFirst && !this.isLast && !d.showFirstLabel || this.isLast && !this.isFirst && !d.showLastLabel ? p = !1 : !u || h.step || h.rotation || a || 0 === e || this.handleOverflow(c), k && l % k && (p = !1), p && f(c.y) ? (c.opacity = e, q[this.isNewLabel ? "attr": "animate"](c).show(!0), this.isNewLabel = !1) : (q.hide(), this.isNewLabel = !0))
			};
			e.prototype.replaceMovedLabel = function() {
				var c = this.label,
				a = this.axis,
				e = a.reversed;
				if (c && !this.isNew) {
					var f = a.horiz ? e ? a.left: a.width + a.left: c.xy.x;
					e = a.horiz ? c.xy.y: e ? a.width + a.top: a.top;
					c.animate({
						x: f,
						y: e,
						opacity: 0
					},
					void 0, c.destroy);
					delete this.label
				}
				a.isDirty = !0;
				this.label = this.movedLabel;
				delete this.movedLabel
			};
			return e
		} ();
		"";
		return g
	});
	K(g, "Core/Axis/Axis.js", [g["Core/Animation/AnimationUtilities.js"], g["Core/Axis/AxisDefaults.js"], g["Core/Color/Color.js"], g["Core/Defaults.js"], g["Core/Foundation.js"], g["Core/Globals.js"], g["Core/Axis/Tick.js"], g["Core/Utilities.js"]],
	function(a, g, x, E, D, B, G, r) {
		var t = a.animObject,
		n = E.defaultOptions,
		f = D.registerEventOptions,
		c = B.deg2rad,
		l = r.arrayMax,
		m = r.arrayMin,
		e = r.clamp,
		u = r.correctFloat,
		C = r.defined,
		J = r.destroyObjectProperties,
		I = r.erase,
		v = r.error,
		A = r.extend,
		d = r.fireEvent,
		q = r.isArray,
		h = r.isNumber,
		k = r.isString,
		b = r.merge,
		p = r.normalizeTickInterval,
		z = r.objectEach,
		w = r.pick,
		N = r.relativeLength,
		H = r.removeEvent,
		O = r.splat,
		Q = r.syncTimeout,
		S = function(b, d) {
			return p(d, void 0, void 0, w(b.options.allowDecimals, .5 > d || void 0 !== b.tickAmount), !!b.tickAmount)
		};
		a = function() {
			function a(b, d) {
				this.zoomEnabled = this.width = this.visible = this.userOptions = this.translationSlope = this.transB = this.transA = this.top = this.ticks = this.tickRotCorr = this.tickPositions = this.tickmarkOffset = this.tickInterval = this.tickAmount = this.side = this.series = this.right = this.positiveValuesOnly = this.pos = this.pointRangePadding = this.pointRange = this.plotLinesAndBandsGroups = this.plotLinesAndBands = this.paddedTicks = this.overlap = this.options = this.offset = this.names = this.minPixelPadding = this.minorTicks = this.minorTickInterval = this.min = this.maxLabelLength = this.max = this.len = this.left = this.labelFormatter = this.labelEdge = this.isLinked = this.height = this.hasVisibleSeries = this.hasNames = this.eventOptions = this.coll = this.closestPointRange = this.chart = this.bottom = this.alternateBands = void 0;
				this.init(b, d)
			}
			a.prototype.init = function(b, a) {
				var c = a.isX;
				this.chart = b;
				this.horiz = b.inverted && !this.isZAxis ? !c: c;
				this.isXAxis = c;
				this.coll = this.coll || (c ? "xAxis": "yAxis");
				d(this, "init", {
					userOptions: a
				});
				this.opposite = w(a.opposite, this.opposite);
				this.side = w(a.side, this.side, this.horiz ? this.opposite ? 0 : 2 : this.opposite ? 1 : 3);
				this.setOptions(a);
				var e = this.options,
				y = e.labels,
				k = e.type;
				this.userOptions = a;
				this.minPixelPadding = 0;
				this.reversed = w(e.reversed, this.reversed);
				this.visible = e.visible;
				this.zoomEnabled = e.zoomEnabled;
				this.hasNames = "category" === k || !0 === e.categories;
				this.categories = e.categories || (this.hasNames ? [] : void 0);
				this.names || (this.names = [], this.names.keys = {});
				this.plotLinesAndBandsGroups = {};
				this.positiveValuesOnly = !!this.logarithmic;
				this.isLinked = C(e.linkedTo);
				this.ticks = {};
				this.labelEdge = [];
				this.minorTicks = {};
				this.plotLinesAndBands = [];
				this.alternateBands = {};
				this.len = 0;
				this.minRange = this.userMinRange = e.minRange || e.maxZoom;
				this.range = e.range;
				this.offset = e.offset || 0;
				this.min = this.max = null;
				a = w(e.crosshair, O(b.options.tooltip.crosshairs)[c ? 0 : 1]);
				this.crosshair = !0 === a ? {}: a; - 1 === b.axes.indexOf(this) && (c ? b.axes.splice(b.xAxis.length, 0, this) : b.axes.push(this), b[this.coll].push(this));
				this.series = this.series || [];
				b.inverted && !this.isZAxis && c && "undefined" === typeof this.reversed && (this.reversed = !0);
				this.labelRotation = h(y.rotation) ? y.rotation: void 0;
				f(this, e);
				d(this, "afterInit")
			};
			a.prototype.setOptions = function(h) {
				this.options = b(g.defaultXAxisOptions, "yAxis" === this.coll && g.defaultYAxisOptions, [g.defaultTopAxisOptions, g.defaultRightAxisOptions, g.defaultBottomAxisOptions, g.defaultLeftAxisOptions][this.side], b(n[this.coll], h));
				d(this, "afterSetOptions", {
					userOptions: h
				})
			};
			a.prototype.defaultLabelFormatter = function(b) {
				var d = this.axis;
				b = this.chart.numberFormatter;
				var a = h(this.value) ? this.value: NaN,
				c = d.chart.time,
				e = this.dateTimeLabelFormat,
				k = n.lang,
				y = k.numericSymbols;
				k = k.numericSymbolMagnitude || 1E3;
				var f = d.logarithmic ? Math.abs(a) : d.tickInterval,
				p = y && y.length;
				if (d.categories) var l = "".concat(this.value);
				else if (e) l = c.dateFormat(e, a);
				else if (p && 1E3 <= f) for (; p--&&"undefined" === typeof l;) d = Math.pow(k, p + 1),
				f >= d && 0 === 10 * a % d && null !== y[p] && 0 !== a && (l = b(a / d, -1) + y[p]);
				"undefined" === typeof l && (l = 1E4 <= Math.abs(a) ? b(a, -1) : b(a, -1, void 0, ""));
				return l
			};
			a.prototype.getSeriesExtremes = function() {
				var b = this,
				a = b.chart,
				c;
				d(this, "getSeriesExtremes", null,
				function() {
					b.hasVisibleSeries = !1;
					b.dataMin = b.dataMax = b.threshold = null;
					b.softThreshold = !b.isXAxis;
					b.stacking && b.stacking.buildStacks();
					b.series.forEach(function(d) {
						if (d.visible || !a.options.chart.ignoreHiddenSeries) {
							var e = d.options,
							k = e.threshold;
							b.hasVisibleSeries = !0;
							b.positiveValuesOnly && 0 >= k && (k = null);
							if (b.isXAxis) {
								if (e = d.xData, e.length) {
									e = b.logarithmic ? e.filter(b.validatePositiveValue) : e;
									c = d.getXExtremes(e);
									var y = c.min;
									var f = c.max;
									h(y) || y instanceof Date || (e = e.filter(h), c = d.getXExtremes(e), y = c.min, f = c.max);
									e.length && (b.dataMin = Math.min(w(b.dataMin, y), y), b.dataMax = Math.max(w(b.dataMax, f), f))
								}
							} else if (d = d.applyExtremes(), h(d.dataMin) && (y = d.dataMin, b.dataMin = Math.min(w(b.dataMin, y), y)), h(d.dataMax) && (f = d.dataMax, b.dataMax = Math.max(w(b.dataMax, f), f)), C(k) && (b.threshold = k), !e.softThreshold || b.positiveValuesOnly) b.softThreshold = !1
						}
					})
				});
				d(this, "afterGetSeriesExtremes")
			};
			a.prototype.translate = function(b, d, a, c, e, k) {
				var f = this.linkedParent || this,
				y = c && f.old ? f.old.min: f.min;
				if (!h(y)) return NaN;
				var p = f.minPixelPadding;
				e = (f.isOrdinal || f.brokenAxis && f.brokenAxis.hasBreaks || f.logarithmic && e) && f.lin2val;
				var F = 1,
				l = 0;
				c = c && f.old ? f.old.transA: f.transA;
				c || (c = f.transA);
				a && (F *= -1, l = f.len);
				f.reversed && (F *= -1, l -= F * (f.sector || f.len));
				d ? (k = (b * F + l - p) / c + y, e && (k = f.lin2val(k))) : (e && (b = f.val2lin(b)), b = F * (b - y) * c, k = (f.isRadial ? b: u(b)) + l + F * p + (h(k) ? c * k: 0));
				return k
			};
			a.prototype.toPixels = function(b, d) {
				return this.translate(b, !1, !this.horiz, void 0, !0) + (d ? 0 : this.pos)
			};
			a.prototype.toValue = function(b, d) {
				return this.translate(b - (d ? 0 : this.pos), !0, !this.horiz, void 0, !0)
			};
			a.prototype.getPlotLinePath = function(b) {
				function a(b, d, a) {
					if ("pass" !== n && b < d || b > a) n ? b = e(b, d, a) : C = !0;
					return b
				}
				var c = this,
				k = c.chart,
				f = c.left,
				y = c.top,
				p = b.old,
				l = b.value,
				g = b.lineWidth,
				q = p && k.oldChartHeight || k.chartHeight,
				z = p && k.oldChartWidth || k.chartWidth,
				m = c.transB,
				u = b.translatedValue,
				n = b.force,
				A, H, N, O, C;
				b = {
					value: l,
					lineWidth: g,
					old: p,
					force: n,
					acrossPanes: b.acrossPanes,
					translatedValue: u
				};
				d(this, "getPlotLinePath", b,
				function(b) {
					u = w(u, c.translate(l, void 0, void 0, p));
					u = e(u, -1E5, 1E5);
					A = N = Math.round(u + m);
					H = O = Math.round(q - u - m);
					h(u) ? c.horiz ? (H = y, O = q - c.bottom, A = N = a(A, f, f + c.width)) : (A = f, N = z - c.right, H = O = a(H, y, y + c.height)) : (C = !0, n = !1);
					b.path = C && !n ? null: k.renderer.crispLine([["M", A, H], ["L", N, O]], g || 1)
				});
				return b.path
			};
			a.prototype.getLinearTickPositions = function(b, d, a) {
				var h = u(Math.floor(d / b) * b);
				a = u(Math.ceil(a / b) * b);
				var c = [],
				e;
				u(h + b) === h && (e = 20);
				if (this.single) return [d];
				for (d = h; d <= a;) {
					c.push(d);
					d = u(d + b, e);
					if (d === k) break;
					var k = d
				}
				return c
			};
			a.prototype.getMinorTickInterval = function() {
				var b = this.options;
				return ! 0 === b.minorTicks ? w(b.minorTickInterval, "auto") : !1 === b.minorTicks ? null: b.minorTickInterval
			};
			a.prototype.getMinorTickPositions = function() {
				var b = this.options,
				d = this.tickPositions,
				a = this.minorTickInterval,
				h = this.pointRangePadding || 0,
				c = this.min - h;
				h = this.max + h;
				var e = h - c,
				k = [];
				if (e && e / a < this.len / 3) {
					var f = this.logarithmic;
					if (f) this.paddedTicks.forEach(function(b, d, h) {
						d && k.push.apply(k, f.getLogTickPositions(a, h[d - 1], h[d], !0))
					});
					else if (this.dateTime && "auto" === this.getMinorTickInterval()) k = k.concat(this.getTimeTicks(this.dateTime.normalizeTimeTickInterval(a), c, h, b.startOfWeek));
					else for (b = c + (d[0] - c) % a; b <= h && b !== k[0]; b += a) k.push(b)
				}
				0 !== k.length && this.trimTicks(k);
				return k
			};
			a.prototype.adjustForMinRange = function() {
				var b = this.options,
				d = this.logarithmic,
				a = this.min,
				h = this.max,
				c = 0,
				e, k, f, p;
				this.isXAxis && "undefined" === typeof this.minRange && !d && (C(b.min) || C(b.max) || C(b.floor) || C(b.ceiling) ? this.minRange = null: (this.series.forEach(function(b) {
					f = b.xData;
					p = b.xIncrement ? 1 : f.length - 1;
					if (1 < f.length) for (e = p; 0 < e; e--) if (k = f[e] - f[e - 1], !c || k < c) c = k
				}), this.minRange = Math.min(5 * c, this.dataMax - this.dataMin)));
				if (h - a < this.minRange) {
					var g = this.dataMax - this.dataMin >= this.minRange;
					var q = this.minRange;
					var z = (q - h + a) / 2;
					z = [a - z, w(b.min, a - z)];
					g && (z[2] = this.logarithmic ? this.logarithmic.log2lin(this.dataMin) : this.dataMin);
					a = l(z);
					h = [a + q, w(b.max, a + q)];
					g && (h[2] = d ? d.log2lin(this.dataMax) : this.dataMax);
					h = m(h);
					h - a < q && (z[0] = h - q, z[1] = w(b.min, h - q), a = l(z))
				}
				this.min = a;
				this.max = h
			};
			a.prototype.getClosest = function() {
				var b;
				this.categories ? b = 1 : this.series.forEach(function(d) {
					var a = d.closestPointRange,
					h = d.visible || !d.chart.options.chart.ignoreHiddenSeries; ! d.noSharedTooltip && C(a) && h && (b = C(b) ? Math.min(b, a) : a)
				});
				return b
			};
			a.prototype.nameToX = function(b) {
				var d = q(this.options.categories),
				a = d ? this.categories: this.names,
				h = b.options.x;
				b.series.requireSorting = !1;
				C(h) || (h = this.options.uniqueNames && a ? d ? a.indexOf(b.name) : w(a.keys[b.name], -1) : b.series.autoIncrement());
				if ( - 1 === h) {
					if (!d && a) var c = a.length
				} else c = h;
				"undefined" !== typeof c ? (this.names[c] = b.name, this.names.keys[b.name] = c) : b.x && (c = b.x);
				return c
			};
			a.prototype.updateNames = function() {
				var b = this,
				d = this.names;
				0 < d.length && (Object.keys(d.keys).forEach(function(b) {
					delete d.keys[b]
				}), d.length = 0, this.minRange = this.userMinRange, (this.series || []).forEach(function(d) {
					d.xIncrement = null;
					if (!d.points || d.isDirtyData) b.max = Math.max(b.max, d.xData.length - 1),
					d.processData(),
					d.generatePoints();
					d.data.forEach(function(a, h) {
						if (a && a.options && "undefined" !== typeof a.name) {
							var c = b.nameToX(a);
							"undefined" !== typeof c && c !== a.x && (a.x = c, d.xData[h] = c)
						}
					})
				}))
			};
			a.prototype.setAxisTranslation = function() {
				var b = this,
				a = b.max - b.min,
				h = b.linkedParent,
				c = !!b.categories,
				e = b.isXAxis,
				f = b.axisPointRange || 0,
				p = 0,
				l = 0,
				g = b.transA;
				if (e || c || f) {
					var q = b.getClosest();
					h ? (p = h.minPointOffset, l = h.pointRangePadding) : b.series.forEach(function(d) {
						var a = c ? 1 : e ? w(d.options.pointRange, q, 0) : b.axisPointRange || 0,
						h = d.options.pointPlacement;
						f = Math.max(f, a);
						if (!b.single || c) d = d.is("xrange") ? !e: e,
						p = Math.max(p, d && k(h) ? 0 : a / 2),
						l = Math.max(l, d && "on" === h ? 0 : a)
					});
					h = b.ordinal && b.ordinal.slope && q ? b.ordinal.slope / q: 1;
					b.minPointOffset = p *= h;
					b.pointRangePadding = l *= h;
					b.pointRange = Math.min(f, b.single && c ? 1 : a);
					e && (b.closestPointRange = q)
				}
				b.translationSlope = b.transA = g = b.staticScale || b.len / (a + l || 1);
				b.transB = b.horiz ? b.left: b.bottom;
				b.minPixelPadding = g * p;
				d(this, "afterSetAxisTranslation")
			};
			a.prototype.minFromRange = function() {
				return this.max - this.range
			};
			a.prototype.setTickInterval = function(b) {
				var a = this.chart,
				c = this.logarithmic,
				e = this.options,
				k = this.isXAxis,
				f = this.isLinked,
				p = e.tickPixelInterval,
				y = this.categories,
				l = this.softThreshold,
				g = e.maxPadding,
				q = e.minPadding,
				z = h(e.tickInterval) && 0 <= e.tickInterval ? e.tickInterval: void 0,
				m = h(this.threshold) ? this.threshold: null;
				this.dateTime || y || f || this.getTickAmount();
				var n = w(this.userMin, e.min);
				var A = w(this.userMax, e.max);
				if (f) {
					this.linkedParent = a[this.coll][e.linkedTo];
					var H = this.linkedParent.getExtremes();
					this.min = w(H.min, H.dataMin);
					this.max = w(H.max, H.dataMax);
					e.type !== this.linkedParent.options.type && v(11, 1, a)
				} else {
					if (l && C(m)) if (this.dataMin >= m) H = m,
					q = 0;
					else if (this.dataMax <= m) {
						var N = m;
						g = 0
					}
					this.min = w(n, H, this.dataMin);
					this.max = w(A, N, this.dataMax)
				}
				c && (this.positiveValuesOnly && !b && 0 >= Math.min(this.min, w(this.dataMin, this.min)) && v(10, 1, a), this.min = u(c.log2lin(this.min), 16), this.max = u(c.log2lin(this.max), 16));
				this.range && C(this.max) && (this.userMin = this.min = n = Math.max(this.dataMin, this.minFromRange()), this.userMax = A = this.max, this.range = null);
				d(this, "foundExtremes");
				this.beforePadding && this.beforePadding();
				this.adjustForMinRange(); ! (y || this.axisPointRange || this.stacking && this.stacking.usePercentage || f) && C(this.min) && C(this.max) && (a = this.max - this.min) && (!C(n) && q && (this.min -= a * q), !C(A) && g && (this.max += a * g));
				h(this.userMin) || (h(e.softMin) && e.softMin < this.min && (this.min = n = e.softMin), h(e.floor) && (this.min = Math.max(this.min, e.floor)));
				h(this.userMax) || (h(e.softMax) && e.softMax > this.max && (this.max = A = e.softMax), h(e.ceiling) && (this.max = Math.min(this.max, e.ceiling)));
				l && C(this.dataMin) && (m = m || 0, !C(n) && this.min < m && this.dataMin >= m ? this.min = this.options.minRange ? Math.min(m, this.max - this.minRange) : m: !C(A) && this.max > m && this.dataMax <= m && (this.max = this.options.minRange ? Math.max(m, this.min + this.minRange) : m));
				h(this.min) && h(this.max) && !this.chart.polar && this.min > this.max && (C(this.options.min) ? this.max = this.min: C(this.options.max) && (this.min = this.max));
				this.tickInterval = this.min === this.max || "undefined" === typeof this.min || "undefined" === typeof this.max ? 1 : f && this.linkedParent && !z && p === this.linkedParent.options.tickPixelInterval ? z = this.linkedParent.tickInterval: w(z, this.tickAmount ? (this.max - this.min) / Math.max(this.tickAmount - 1, 1) : void 0, y ? 1 : (this.max - this.min) * p / Math.max(this.len, p));
				if (k && !b) {
					var O = this.min !== (this.old && this.old.min) || this.max !== (this.old && this.old.max);
					this.series.forEach(function(b) {
						b.forceCrop = b.forceCropping && b.forceCropping();
						b.processData(O)
					});
					d(this, "postProcessData", {
						hasExtremesChanged: O
					})
				}
				this.setAxisTranslation();
				d(this, "initialAxisTranslation");
				this.pointRange && !z && (this.tickInterval = Math.max(this.pointRange, this.tickInterval));
				b = w(e.minTickInterval, this.dateTime && !this.series.some(function(b) {
					return b.noSharedTooltip
				}) ? this.closestPointRange: 0); ! z && this.tickInterval < b && (this.tickInterval = b);
				this.dateTime || this.logarithmic || z || (this.tickInterval = S(this, this.tickInterval));
				this.tickAmount || (this.tickInterval = this.unsquish());
				this.setTickPositions()
			};
			a.prototype.setTickPositions = function() {
				var b = this.options,
				a = b.tickPositions,
				c = b.tickPositioner,
				e = this.getMinorTickInterval(),
				k = this.hasVerticalPanning(),
				f = "colorAxis" === this.coll,
				p = (f || !k) && b.startOnTick;
				k = (f || !k) && b.endOnTick;
				f = [];
				var l;
				this.tickmarkOffset = this.categories && "between" === b.tickmarkPlacement && 1 === this.tickInterval ? .5 : 0;
				this.minorTickInterval = "auto" === e && this.tickInterval ? this.tickInterval / 5 : e;
				this.single = this.min === this.max && C(this.min) && !this.tickAmount && (parseInt(this.min, 10) === this.min || !1 !== b.allowDecimals);
				if (a) f = a.slice();
				else if (h(this.min) && h(this.max)) {
					if (this.ordinal && this.ordinal.positions || !((this.max - this.min) / this.tickInterval > Math.max(2 * this.len, 200))) if (this.dateTime) f = this.getTimeTicks(this.dateTime.normalizeTimeTickInterval(this.tickInterval, b.units), this.min, this.max, b.startOfWeek, this.ordinal && this.ordinal.positions, this.closestPointRange, !0);
					else if (this.logarithmic) f = this.logarithmic.getLogTickPositions(this.tickInterval, this.min, this.max);
					else for (e = b = this.tickInterval; e <= 2 * b;) if (f = this.getLinearTickPositions(this.tickInterval, this.min, this.max), this.tickAmount && f.length > this.tickAmount) this.tickInterval = S(this, e *= 1.1);
					else break;
					else f = [this.min, this.max],
					v(19, !1, this.chart);
					f.length > this.len && (f = [f[0], f[f.length - 1]], f[0] === f[1] && (f.length = 1));
					c && (this.tickPositions = f, (l = c.apply(this, [this.min, this.max])) && (f = l))
				}
				this.tickPositions = f;
				this.paddedTicks = f.slice(0);
				this.trimTicks(f, p, k); ! this.isLinked && h(this.min) && h(this.max) && (this.single && 2 > f.length && !this.categories && !this.series.some(function(b) {
					return b.is("heatmap") && "between" === b.options.pointPlacement
				}) && (this.min -= .5, this.max += .5), a || l || this.adjustTickAmount());
				d(this, "afterSetTickPositions")
			};
			a.prototype.trimTicks = function(b, a, h) {
				var c = b[0],
				e = b[b.length - 1],
				f = !this.isOrdinal && this.minPointOffset || 0;
				d(this, "trimTicks");
				if (!this.isLinked) {
					if (a && -Infinity !== c) this.min = c;
					else for (; this.min - f > b[0];) b.shift();
					if (h) this.max = e;
					else for (; this.max + f < b[b.length - 1];) b.pop();
					0 === b.length && C(c) && !this.options.tickPositions && b.push((e + c) / 2)
				}
			};
			a.prototype.alignToOthers = function() {
				var b = this,
				d = [this],
				a = b.options,
				c = "yAxis" === this.coll && this.chart.options.chart.alignThresholds,
				e = [],
				f;
				b.thresholdAlignment = void 0;
				if ((!1 !== this.chart.options.chart.alignTicks && a.alignTicks || c) && !1 !== a.startOnTick && !1 !== a.endOnTick && !b.logarithmic) {
					var k = function(b) {
						var d = b.options;
						return [b.horiz ? d.left: d.top, d.width, d.height, d.pane].join()
					},
					p = k(this);
					this.chart[this.coll].forEach(function(a) {
						var h = a.series;
						h.length && h.some(function(b) {
							return b.visible
						}) && a !== b && k(a) === p && (f = !0, d.push(a))
					})
				}
				if (f && c) {
					d.forEach(function(d) {
						d = d.getThresholdAlignment(b);
						h(d) && e.push(d)
					});
					var l = 1 < e.length ? e.reduce(function(b, d) {
						return b + d
					},
					0) / e.length: void 0;
					d.forEach(function(b) {
						b.thresholdAlignment = l
					})
				}
				return f
			};
			a.prototype.getThresholdAlignment = function(b) { (!h(this.dataMin) || this !== b && this.series.some(function(b) {
					return b.isDirty || b.isDirtyData
				})) && this.getSeriesExtremes();
				if (h(this.threshold)) return b = e((this.threshold - (this.dataMin || 0)) / ((this.dataMax || 0) - (this.dataMin || 0)), 0, 1),
				this.options.reversed && (b = 1 - b),
				b
			};
			a.prototype.getTickAmount = function() {
				var b = this.options,
				d = b.tickPixelInterval,
				a = b.tickAmount; ! C(b.tickInterval) && !a && this.len < d && !this.isRadial && !this.logarithmic && b.startOnTick && b.endOnTick && (a = 2); ! a && this.alignToOthers() && (a = Math.ceil(this.len / d) + 1);
				4 > a && (this.finalTickAmt = a, a = 5);
				this.tickAmount = a
			};
			a.prototype.adjustTickAmount = function() {
				var b = this,
				d = b.finalTickAmt,
				a = b.max,
				c = b.min,
				e = b.options,
				f = b.tickPositions,
				k = b.tickAmount,
				p = b.thresholdAlignment,
				l = f && f.length,
				g = w(b.threshold, b.softThreshold ? 0 : null);
				var q = b.tickInterval;
				if (h(p)) {
					var z = .5 > p ? Math.ceil(p * (k - 1)) : Math.floor(p * (k - 1));
					e.reversed && (z = k - 1 - z)
				}
				if (b.hasData() && h(c) && h(a)) {
					p = function() {
						b.transA *= (l - 1) / (k - 1);
						b.min = e.startOnTick ? f[0] : Math.min(c, f[0]);
						b.max = e.endOnTick ? f[f.length - 1] : Math.max(a, f[f.length - 1])
					};
					if (h(z) && h(b.threshold)) {
						for (; f[z] !== g || f.length !== k || f[0] > c || f[f.length - 1] < a;) {
							f.length = 0;
							for (f.push(b.threshold); f.length < k;) void 0 === f[z] || f[z] > b.threshold ? f.unshift(u(f[0] - q)) : f.push(u(f[f.length - 1] + q));
							if (q > 8 * b.tickInterval) break;
							q *= 2
						}
						p()
					} else if (l < k) {
						for (; f.length < k;) f.length % 2 || c === g ? f.push(u(f[f.length - 1] + q)) : f.unshift(u(f[0] - q));
						p()
					}
					if (C(d)) {
						for (q = g = f.length; q--;)(3 === d && 1 === q % 2 || 2 >= d && 0 < q && q < g - 1) && f.splice(q, 1);
						b.finalTickAmt = void 0
					}
				}
			};
			a.prototype.setScale = function() {
				var b = !1,
				a = !1;
				this.series.forEach(function(d) {
					b = b || d.isDirtyData || d.isDirty;
					a = a || d.xAxis && d.xAxis.isDirty || !1
				});
				this.setAxisSize();
				var h = this.len !== (this.old && this.old.len);
				h || b || a || this.isLinked || this.forceRedraw || this.userMin !== (this.old && this.old.userMin) || this.userMax !== (this.old && this.old.userMax) || this.alignToOthers() ? (this.stacking && this.stacking.resetStacks(), this.forceRedraw = !1, this.getSeriesExtremes(), this.setTickInterval(), this.isDirty || (this.isDirty = h || this.min !== (this.old && this.old.min) || this.max !== (this.old && this.old.max))) : this.stacking && this.stacking.cleanStacks();
				b && this.panningState && (this.panningState.isDirty = !0);
				d(this, "afterSetScale")
			};
			a.prototype.setExtremes = function(b, a, h, c, e) {
				var f = this,
				k = f.chart;
				h = w(h, !0);
				f.series.forEach(function(b) {
					delete b.kdTree
				});
				e = A(e, {
					min: b,
					max: a
				});
				d(f, "setExtremes", e,
				function() {
					f.userMin = b;
					f.userMax = a;
					f.eventArgs = e;
					h && k.redraw(c)
				})
			};
			a.prototype.zoom = function(b, a) {
				var h = this,
				c = this.dataMin,
				e = this.dataMax,
				f = this.options,
				k = Math.min(c, w(f.min, c)),
				p = Math.max(e, w(f.max, e));
				b = {
					newMin: b,
					newMax: a
				};
				d(this, "zoom", b,
				function(b) {
					var d = b.newMin,
					a = b.newMax;
					if (d !== h.min || a !== h.max) h.allowZoomOutside || (C(c) && (d < k && (d = k), d > p && (d = p)), C(e) && (a < k && (a = k), a > p && (a = p))),
					h.displayBtn = "undefined" !== typeof d || "undefined" !== typeof a,
					h.setExtremes(d, a, !1, void 0, {
						trigger: "zoom"
					});
					b.zoomed = !0
				});
				return b.zoomed
			};
			a.prototype.setAxisSize = function() {
				var b = this.chart,
				d = this.options,
				a = d.offsets || [0, 0, 0, 0],
				h = this.horiz,
				c = this.width = Math.round(N(w(d.width, b.plotWidth - a[3] + a[1]), b.plotWidth)),
				e = this.height = Math.round(N(w(d.height, b.plotHeight - a[0] + a[2]), b.plotHeight)),
				f = this.top = Math.round(N(w(d.top, b.plotTop + a[0]), b.plotHeight, b.plotTop));
				d = this.left = Math.round(N(w(d.left, b.plotLeft + a[3]), b.plotWidth, b.plotLeft));
				this.bottom = b.chartHeight - e - f;
				this.right = b.chartWidth - c - d;
				this.len = Math.max(h ? c: e, 0);
				this.pos = h ? d: f
			};
			a.prototype.getExtremes = function() {
				var b = this.logarithmic;
				return {
					min: b ? u(b.lin2log(this.min)) : this.min,
					max: b ? u(b.lin2log(this.max)) : this.max,
					dataMin: this.dataMin,
					dataMax: this.dataMax,
					userMin: this.userMin,
					userMax: this.userMax
				}
			};
			a.prototype.getThreshold = function(b) {
				var d = this.logarithmic,
				a = d ? d.lin2log(this.min) : this.min;
				d = d ? d.lin2log(this.max) : this.max;
				null === b || -Infinity === b ? b = a: Infinity === b ? b = d: a > b ? b = a: d < b && (b = d);
				return this.translate(b, 0, 1, 0, 1)
			};
			a.prototype.autoLabelAlign = function(b) {
				var a = (w(b, 0) - 90 * this.side + 720) % 360;
				b = {
					align: "center"
				};
				d(this, "autoLabelAlign", b,
				function(b) {
					15 < a && 165 > a ? b.align = "right": 195 < a && 345 > a && (b.align = "left")
				});
				return b.align
			};
			a.prototype.tickSize = function(b) {
				var a = this.options,
				h = w(a["tick" === b ? "tickWidth": "minorTickWidth"], "tick" === b && this.isXAxis && !this.categories ? 1 : 0),
				c = a["tick" === b ? "tickLength": "minorTickLength"];
				if (h && c) {
					"inside" === a[b + "Position"] && (c = -c);
					var e = [c, h]
				}
				b = {
					tickSize: e
				};
				d(this, "afterTickSize", b);
				return b.tickSize
			};
			a.prototype.labelMetrics = function() {
				var b = this.tickPositions && this.tickPositions[0] || 0;
				return this.chart.renderer.fontMetrics(this.options.labels.style.fontSize, this.ticks[b] && this.ticks[b].label)
			};
			a.prototype.unsquish = function() {
				var b = this.options.labels,
				d = this.horiz,
				a = this.tickInterval,
				e = this.len / (((this.categories ? 1 : 0) + this.max - this.min) / a),
				f = b.rotation,
				k = this.labelMetrics(),
				p = Math.max(this.max - this.min, 0),
				l = function(b) {
					var d = b / (e || 1);
					d = 1 < d ? Math.ceil(d) : 1;
					d * a > p && Infinity !== b && Infinity !== e && p && (d = Math.ceil(p / a));
					return u(d * a)
				},
				g = a,
				q = Number.MAX_VALUE;
				if (d) {
					if (!b.staggerLines) if (h(f)) var z = [f];
					else e < b.autoRotationLimit && (z = b.autoRotation);
					if (z) for (var m = d = void 0,
					n = 0,
					A = z; n < A.length; n++) {
						var H = A[n];
						if (H === f || H && -90 <= H && 90 >= H) if (d = l(Math.abs(k.h / Math.sin(c * H))), m = d + Math.abs(H / 360), m < q) {
							q = m;
							var N = H;
							g = d
						}
					}
				} else g = l(k.h);
				this.autoRotation = z;
				this.labelRotation = w(N, h(f) ? f: 0);
				return b.step ? a: g
			};
			a.prototype.getSlotWidth = function(b) {
				var d = this.chart,
				a = this.horiz,
				c = this.options.labels,
				e = Math.max(this.tickPositions.length - (this.categories ? 0 : 1), 1),
				f = d.margin[3];
				if (b && h(b.slotWidth)) return b.slotWidth;
				if (a && 2 > c.step) return c.rotation ? 0 : (this.staggerLines || 1) * this.len / e;
				if (!a) {
					b = c.style.width;
					if (void 0 !== b) return parseInt(String(b), 10);
					if (f) return f - d.spacing[3]
				}
				return.33 * d.chartWidth
			};
			a.prototype.renderUnsquish = function() {
				var b = this.chart,
				d = b.renderer,
				a = this.tickPositions,
				h = this.ticks,
				c = this.options.labels,
				e = c.style,
				f = this.horiz,
				p = this.getSlotWidth(),
				l = Math.max(1, Math.round(p - 2 * c.padding)),
				g = {},
				q = this.labelMetrics(),
				z = e.textOverflow,
				w = 0;
				k(c.rotation) || (g.rotation = c.rotation || 0);
				a.forEach(function(b) {
					b = h[b];
					b.movedLabel && b.replaceMovedLabel();
					b && b.label && b.label.textPxLength > w && (w = b.label.textPxLength)
				});
				this.maxLabelLength = w;
				if (this.autoRotation) w > l && w > q.h ? g.rotation = this.labelRotation: this.labelRotation = 0;
				else if (p) {
					var m = l;
					if (!z) {
						var u = "clip";
						for (l = a.length; ! f && l--;) {
							var n = a[l];
							if (n = h[n].label) n.styles && "ellipsis" === n.styles.textOverflow ? n.css({
								textOverflow: "clip"
							}) : n.textPxLength > p && n.css({
								width: p + "px"
							}),
							n.getBBox().height > this.len / a.length - (q.h - q.f) && (n.specificTextOverflow = "ellipsis")
						}
					}
				}
				g.rotation && (m = w > .5 * b.chartHeight ? .33 * b.chartHeight: w, z || (u = "ellipsis"));
				if (this.labelAlign = c.align || this.autoLabelAlign(this.labelRotation)) g.align = this.labelAlign;
				a.forEach(function(b) {
					var d = (b = h[b]) && b.label,
					a = e.width,
					c = {};
					d && (d.attr(g), b.shortenLabel ? b.shortenLabel() : m && !a && "nowrap" !== e.whiteSpace && (m < d.textPxLength || "SPAN" === d.element.tagName) ? (c.width = m + "px", z || (c.textOverflow = d.specificTextOverflow || u), d.css(c)) : d.styles && d.styles.width && !c.width && !a && d.css({
						width: null
					}), delete d.specificTextOverflow, b.rotation = g.rotation)
				},
				this);
				this.tickRotCorr = d.rotCorr(q.b, this.labelRotation || 0, 0 !== this.side)
			};
			a.prototype.hasData = function() {
				return this.series.some(function(b) {
					return b.hasData()
				}) || this.options.showEmpty && C(this.min) && C(this.max)
			};
			a.prototype.addTitle = function(d) {
				var a = this.chart.renderer,
				c = this.horiz,
				h = this.opposite,
				e = this.options.title,
				f = this.chart.styledMode,
				k;
				this.axisTitle || ((k = e.textAlign) || (k = (c ? {
					low: "left",
					middle: "center",
					high: "right"
				}: {
					low: h ? "right": "left",
					middle: "center",
					high: h ? "left": "right"
				})[e.align]), this.axisTitle = a.text(e.text || "", 0, 0, e.useHTML).attr({
					zIndex: 7,
					rotation: e.rotation,
					align: k
				}).addClass("highcharts-axis-title"), f || this.axisTitle.css(b(e.style)), this.axisTitle.add(this.axisGroup), this.axisTitle.isNew = !0);
				f || e.style.width || this.isRadial || this.axisTitle.css({
					width: this.len + "px"
				});
				this.axisTitle[d ? "show": "hide"](d)
			};
			a.prototype.generateTick = function(b) {
				var d = this.ticks;
				d[b] ? d[b].addLabel() : d[b] = new G(this, b)
			};
			a.prototype.getOffset = function() {
				var b = this,
				a = this,
				c = a.chart,
				h = a.horiz,
				e = a.options,
				f = a.side,
				k = a.ticks,
				p = a.tickPositions,
				l = a.coll,
				g = a.axisParent,
				q = c.renderer,
				m = c.inverted && !a.isZAxis ? [1, 0, 3, 2][f] : f,
				u = a.hasData(),
				n = e.title,
				A = e.labels,
				H = c.axisOffset;
				c = c.clipOffset;
				var N = [ - 1, 1, 1, -1][f],
				O = e.className,
				t,
				r = 0,
				ja = 0,
				ea = 0;
				a.showAxis = t = u || e.showEmpty;
				a.staggerLines = a.horiz && A.staggerLines || void 0;
				if (!a.axisGroup) {
					var Q = function(d, a, c) {
						return q.g(d).attr({
							zIndex: c
						}).addClass("highcharts-".concat(l.toLowerCase()).concat(a, " ") + (b.isRadial ? "highcharts-radial-axis".concat(a, " ") : "") + (O || "")).add(g)
					};
					a.gridGroup = Q("grid", "-grid", e.gridZIndex);
					a.axisGroup = Q("axis", "", e.zIndex);
					a.labelGroup = Q("axis-labels", "-labels", A.zIndex)
				}
				u || a.isLinked ? (p.forEach(function(b) {
					a.generateTick(b)
				}), a.renderUnsquish(), a.reserveSpaceDefault = 0 === f || 2 === f || {
					1 : "left",
					3 : "right"
				} [f] === a.labelAlign, w(A.reserveSpace, "center" === a.labelAlign ? !0 : null, a.reserveSpaceDefault) && p.forEach(function(b) {
					ea = Math.max(k[b].getLabelSize(), ea)
				}), a.staggerLines && (ea *= a.staggerLines), a.labelOffset = ea * (a.opposite ? -1 : 1)) : z(k,
				function(b, d) {
					b.destroy();
					delete k[d]
				});
				if (n && n.text && !1 !== n.enabled && (a.addTitle(t), t && !1 !== n.reserveSpace)) {
					a.titleOffset = r = a.axisTitle.getBBox()[h ? "height": "width"];
					var J = n.offset;
					ja = C(J) ? 0 : w(n.margin, h ? 5 : 10)
				}
				a.renderLine();
				a.offset = N * w(e.offset, H[f] ? H[f] + (e.margin || 0) : 0);
				a.tickRotCorr = a.tickRotCorr || {
					x: 0,
					y: 0
				};
				n = 0 === f ? -a.labelMetrics().h: 2 === f ? a.tickRotCorr.y: 0;
				u = Math.abs(ea) + ja;
				ea && (u = u - n + N * (h ? w(A.y, a.tickRotCorr.y + 8 * N) : A.x));
				a.axisTitleMargin = w(J, u);
				a.getMaxLabelDimensions && (a.maxLabelDimensions = a.getMaxLabelDimensions(k, p));
				"colorAxis" !== l && (h = this.tickSize("tick"), H[f] = Math.max(H[f], (a.axisTitleMargin || 0) + r + N * a.offset, u, p && p.length && h ? h[0] + N * a.offset: 0), e = !a.axisLine || e.offset ? 0 : 2 * Math.floor(a.axisLine.strokeWidth() / 2), c[m] = Math.max(c[m], e));
				d(this, "afterGetOffset")
			};
			a.prototype.getLinePath = function(b) {
				var d = this.chart,
				a = this.opposite,
				c = this.offset,
				h = this.horiz,
				e = this.left + (a ? this.width: 0) + c;
				c = d.chartHeight - this.bottom - (a ? this.height: 0) + c;
				a && (b *= -1);
				return d.renderer.crispLine([["M", h ? this.left: e, h ? c: this.top], ["L", h ? d.chartWidth - this.right: e, h ? c: d.chartHeight - this.bottom]], b)
			};
			a.prototype.renderLine = function() {
				this.axisLine || (this.axisLine = this.chart.renderer.path().addClass("highcharts-axis-line").add(this.axisGroup), this.chart.styledMode || this.axisLine.attr({
					stroke: this.options.lineColor,
					"stroke-width": this.options.lineWidth,
					zIndex: 7
				}))
			};
			a.prototype.getTitlePosition = function() {
				var b = this.horiz,
				a = this.left,
				c = this.top,
				h = this.len,
				e = this.options.title,
				f = b ? a: c,
				k = this.opposite,
				p = this.offset,
				l = e.x,
				g = e.y,
				q = this.axisTitle,
				z = this.chart.renderer.fontMetrics(e.style.fontSize, q);
				q = q ? Math.max(q.getBBox(!1, 0).height - z.h - 1, 0) : 0;
				h = {
					low: f + (b ? 0 : h),
					middle: f + h / 2,
					high: f + (b ? h: 0)
				} [e.align];
				a = (b ? c + this.height: a) + (b ? 1 : -1) * (k ? -1 : 1) * (this.axisTitleMargin || 0) + [ - q, q, z.f, -q][this.side];
				b = {
					x: b ? h + l: a + (k ? this.width: 0) + p + l,
					y: b ? a + g - (k ? this.height: 0) + p: h + g
				};
				d(this, "afterGetTitlePosition", {
					titlePosition: b
				});
				return b
			};
			a.prototype.renderMinorTick = function(b, d) {
				var a = this.minorTicks;
				a[b] || (a[b] = new G(this, b, "minor"));
				d && a[b].isNew && a[b].render(null, !0);
				a[b].render(null, !1, 1)
			};
			a.prototype.renderTick = function(b, d, a) {
				var c = this.ticks;
				if (!this.isLinked || b >= this.min && b <= this.max || this.grid && this.grid.isColumn) c[b] || (c[b] = new G(this, b)),
				a && c[b].isNew && c[b].render(d, !0, -1),
				c[b].render(d)
			};
			a.prototype.render = function() {
				var b = this,
				a = b.chart,
				c = b.logarithmic,
				e = b.options,
				f = b.isLinked,
				k = b.tickPositions,
				p = b.axisTitle,
				l = b.ticks,
				g = b.minorTicks,
				q = b.alternateBands,
				w = e.stackLabels,
				m = e.alternateGridColor,
				u = b.tickmarkOffset,
				n = b.axisLine,
				A = b.showAxis,
				H = t(a.renderer.globalAnimation),
				N,
				O;
				b.labelEdge.length = 0;
				b.overlap = !1; [l, g, q].forEach(function(b) {
					z(b,
					function(b) {
						b.isActive = !1
					})
				});
				if (b.hasData() || f) {
					var C = b.chart.hasRendered && b.old && h(b.old.min);
					b.minorTickInterval && !b.categories && b.getMinorTickPositions().forEach(function(d) {
						b.renderMinorTick(d, C)
					});
					k.length && (k.forEach(function(d, a) {
						b.renderTick(d, a, C)
					}), u && (0 === b.min || b.single) && (l[ - 1] || (l[ - 1] = new G(b, -1, null, !0)), l[ - 1].render( - 1)));
					m && k.forEach(function(d, h) {
						O = "undefined" !== typeof k[h + 1] ? k[h + 1] + u: b.max - u;
						0 === h % 2 && d < b.max && O <= b.max + (a.polar ? -u: u) && (q[d] || (q[d] = new B.PlotLineOrBand(b)), N = d + u, q[d].options = {
							from: c ? c.lin2log(N) : N,
							to: c ? c.lin2log(O) : O,
							color: m,
							className: "highcharts-alternate-grid"
						},
						q[d].render(), q[d].isActive = !0)
					});
					b._addedPlotLB || (b._addedPlotLB = !0, (e.plotLines || []).concat(e.plotBands || []).forEach(function(d) {
						b.addPlotBandOrLine(d)
					}))
				} [l, g, q].forEach(function(b) {
					var d = [],
					c = H.duration;
					z(b,
					function(b, a) {
						b.isActive || (b.render(a, !1, 0), b.isActive = !1, d.push(a))
					});
					Q(function() {
						for (var a = d.length; a--;) b[d[a]] && !b[d[a]].isActive && (b[d[a]].destroy(), delete b[d[a]])
					},
					b !== q && a.hasRendered && c ? c: 0)
				});
				n && (n[n.isPlaced ? "animate": "attr"]({
					d: this.getLinePath(n.strokeWidth())
				}), n.isPlaced = !0, n[A ? "show": "hide"](A));
				p && A && (e = b.getTitlePosition(), p[p.isNew ? "attr": "animate"](e), p.isNew = !1);
				w && w.enabled && b.stacking && b.stacking.renderStackTotals();
				b.old = {
					len: b.len,
					max: b.max,
					min: b.min,
					transA: b.transA,
					userMax: b.userMax,
					userMin: b.userMin
				};
				b.isDirty = !1;
				d(this, "afterRender")
			};
			a.prototype.redraw = function() {
				this.visible && (this.render(), this.plotLinesAndBands.forEach(function(b) {
					b.render()
				}));
				this.series.forEach(function(b) {
					b.isDirty = !0
				})
			};
			a.prototype.getKeepProps = function() {
				return this.keepProps || a.keepProps
			};
			a.prototype.destroy = function(b) {
				var a = this,
				c = a.plotLinesAndBands,
				h = this.eventOptions;
				d(this, "destroy", {
					keepEvents: b
				});
				b || H(a); [a.ticks, a.minorTicks, a.alternateBands].forEach(function(b) {
					J(b)
				});
				if (c) for (b = c.length; b--;) c[b].destroy();
				"axisLine axisTitle axisGroup gridGroup labelGroup cross scrollbar".split(" ").forEach(function(b) {
					a[b] && (a[b] = a[b].destroy())
				});
				for (var e in a.plotLinesAndBandsGroups) a.plotLinesAndBandsGroups[e] = a.plotLinesAndBandsGroups[e].destroy();
				z(a,
				function(b, d) { - 1 === a.getKeepProps().indexOf(d) && delete a[d]
				});
				this.eventOptions = h
			};
			a.prototype.drawCrosshair = function(b, a) {
				var c = this.crosshair,
				h = w(c && c.snap, !0),
				e = this.chart,
				f,
				k = this.cross;
				d(this, "drawCrosshair", {
					e: b,
					point: a
				});
				b || (b = this.cross && this.cross.e);
				if (c && !1 !== (C(a) || !h)) {
					h ? C(a) && (f = w("colorAxis" !== this.coll ? a.crosshairPos: null, this.isXAxis ? a.plotX: this.len - a.plotY)) : f = b && (this.horiz ? b.chartX - this.pos: this.len - b.chartY + this.pos);
					if (C(f)) {
						var p = {
							value: a && (this.isXAxis ? a.x: w(a.stackY, a.y)),
							translatedValue: f
						};
						e.polar && A(p, {
							isCrosshair: !0,
							chartX: b && b.chartX,
							chartY: b && b.chartY,
							point: a
						});
						p = this.getPlotLinePath(p) || null
					}
					if (!C(p)) {
						this.hideCrosshair();
						return
					}
					h = this.categories && !this.isRadial;
					k || (this.cross = k = e.renderer.path().addClass("highcharts-crosshair highcharts-crosshair-" + (h ? "category ": "thin ") + (c.className || "")).attr({
						zIndex: w(c.zIndex, 2)
					}).add(), e.styledMode || (k.attr({
						stroke: c.color || (h ? x.parse("#ccd6eb").setOpacity(.25).get() : "#cccccc"),
						"stroke-width": w(c.width, 1)
					}).css({
						"pointer-events": "none"
					}), c.dashStyle && k.attr({
						dashstyle: c.dashStyle
					})));
					k.show().attr({
						d: p
					});
					h && !c.width && k.attr({
						"stroke-width": this.transA
					});
					this.cross.e = b
				} else this.hideCrosshair();
				d(this, "afterDrawCrosshair", {
					e: b,
					point: a
				})
			};
			a.prototype.hideCrosshair = function() {
				this.cross && this.cross.hide();
				d(this, "afterHideCrosshair")
			};
			a.prototype.hasVerticalPanning = function() {
				var b = this.chart.options.chart.panning;
				return !! (b && b.enabled && /y/.test(b.type))
			};
			a.prototype.validatePositiveValue = function(b) {
				return h(b) && 0 < b
			};
			a.prototype.update = function(d, a) {
				var c = this.chart;
				d = b(this.userOptions, d);
				this.destroy(!0);
				this.init(c, d);
				c.isDirtyBox = !0;
				w(a, !0) && c.redraw()
			};
			a.prototype.remove = function(b) {
				for (var d = this.chart,
				a = this.coll,
				c = this.series,
				h = c.length; h--;) c[h] && c[h].remove(!1);
				I(d.axes, this);
				I(d[a], this);
				d[a].forEach(function(b, d) {
					b.options.index = b.userOptions.index = d
				});
				this.destroy();
				d.isDirtyBox = !0;
				w(b, !0) && d.redraw()
			};
			a.prototype.setTitle = function(b, d) {
				this.update({
					title: b
				},
				d)
			};
			a.prototype.setCategories = function(b, d) {
				this.update({
					categories: b
				},
				d)
			};
			a.defaultOptions = g.defaultXAxisOptions;
			a.keepProps = "extKey hcEvents names series userMax userMin".split(" ");
			return a
		} ();
		"";
		return a
	});
	K(g, "Core/Axis/DateTimeAxis.js", [g["Core/Utilities.js"]],
	function(a) {
		var g = a.addEvent,
		x = a.getMagnitude,
		E = a.normalizeTickInterval,
		D = a.timeUnits,
		B; (function(a) {
			function r() {
				return this.chart.time.getTimeTicks.apply(this.chart.time, arguments)
			}
			function t(a) {
				"datetime" !== a.userOptions.type ? this.dateTime = void 0 : this.dateTime || (this.dateTime = new f(this))
			}
			var n = [];
			a.compose = function(a) { - 1 === n.indexOf(a) && (n.push(a), a.keepProps.push("dateTime"), a.prototype.getTimeTicks = r, g(a, "init", t));
				return a
			};
			var f = function() {
				function a(a) {
					this.axis = a
				}
				a.prototype.normalizeTimeTickInterval = function(a, c) {
					var e = c || [["millisecond", [1, 2, 5, 10, 20, 25, 50, 100, 200, 500]], ["second", [1, 2, 5, 10, 15, 30]], ["minute", [1, 2, 5, 10, 15, 30]], ["hour", [1, 2, 3, 4, 6, 8, 12]], ["day", [1, 2]], ["week", [1, 2]], ["month", [1, 2, 3, 4, 6]], ["year", null]];
					c = e[e.length - 1];
					var f = D[c[0]],
					l = c[1],
					g;
					for (g = 0; g < e.length && !(c = e[g], f = D[c[0]], l = c[1], e[g + 1] && a <= (f * l[l.length - 1] + D[e[g + 1][0]]) / 2); g++);
					f === D.year && a < 5 * f && (l = [1, 2, 5]);
					a = E(a / f, l, "year" === c[0] ? Math.max(x(a / f), 1) : 1);
					return {
						unitRange: f,
						count: a,
						unitName: c[0]
					}
				};
				a.prototype.getXDateFormat = function(a, c) {
					var e = this.axis,
					f = e.chart.time;
					return e.closestPointRange ? f.getDateFormat(e.closestPointRange, a, e.options.startOfWeek, c) || f.resolveDTLFormat(c.year).main: f.resolveDTLFormat(c.day).main
				};
				return a
			} ();
			a.Additions = f
		})(B || (B = {}));
		return B
	});
	K(g, "Core/Axis/LogarithmicAxis.js", [g["Core/Utilities.js"]],
	function(a) {
		var g = a.addEvent,
		x = a.normalizeTickInterval,
		E = a.pick,
		D; (function(a) {
			function v(a) {
				var c = this.logarithmic;
				"logarithmic" !== a.userOptions.type ? this.logarithmic = void 0 : c || (this.logarithmic = new n(this))
			}
			function r() {
				var a = this.logarithmic;
				a && (this.lin2val = function(c) {
					return a.lin2log(c)
				},
				this.val2lin = function(c) {
					return a.log2lin(c)
				})
			}
			var t = [];
			a.compose = function(a) { - 1 === t.indexOf(a) && (t.push(a), a.keepProps.push("logarithmic"), g(a, "init", v), g(a, "afterInit", r));
				return a
			};
			var n = function() {
				function a(a) {
					this.axis = a
				}
				a.prototype.getLogTickPositions = function(a, f, g, e) {
					var c = this.axis,
					l = c.len,
					m = c.options,
					n = [];
					e || (this.minorAutoInterval = void 0);
					if (.5 <= a) a = Math.round(a),
					n = c.getLinearTickPositions(a, f, g);
					else if (.08 <= a) {
						var t = Math.floor(f),
						A,
						d = m = void 0;
						for (l = .3 < a ? [1, 2, 4] : .15 < a ? [1, 2, 4, 6, 8] : [1, 2, 3, 4, 5, 6, 7, 8, 9]; t < g + 1 && !d; t++) {
							var q = l.length;
							for (A = 0; A < q && !d; A++) {
								var h = this.log2lin(this.lin2log(t) * l[A]);
								h > f && (!e || m <= g) && "undefined" !== typeof m && n.push(m);
								m > g && (d = !0);
								m = h
							}
						}
					} else f = this.lin2log(f),
					g = this.lin2log(g),
					a = e ? c.getMinorTickInterval() : m.tickInterval,
					a = E("auto" === a ? null: a, this.minorAutoInterval, m.tickPixelInterval / (e ? 5 : 1) * (g - f) / ((e ? l / c.tickPositions.length: l) || 1)),
					a = x(a),
					n = c.getLinearTickPositions(a, f, g).map(this.log2lin),
					e || (this.minorAutoInterval = a / 5);
					e || (c.tickInterval = a);
					return n
				};
				a.prototype.lin2log = function(a) {
					return Math.pow(10, a)
				};
				a.prototype.log2lin = function(a) {
					return Math.log(a) / Math.LN10
				};
				return a
			} ();
			a.Additions = n
		})(D || (D = {}));
		return D
	});
	K(g, "Core/Axis/PlotLineOrBand/PlotLineOrBandAxis.js", [g["Core/Utilities.js"]],
	function(a) {
		var g = a.erase,
		x = a.extend,
		E = a.isNumber,
		D; (function(a) {
			var v = [],
			r;
			a.compose = function(a, f) {
				r || (r = a); - 1 === v.indexOf(f) && (v.push(f), x(f.prototype, t.prototype));
				return f
			};
			var t = function() {
				function a() {}
				a.prototype.getPlotBandPath = function(a, c, g) {
					void 0 === g && (g = this.options);
					var f = this.getPlotLinePath({
						value: c,
						force: !0,
						acrossPanes: g.acrossPanes
					}),
					e = [],
					l = this.horiz;
					c = !E(this.min) || !E(this.max) || a < this.min && c < this.min || a > this.max && c > this.max;
					a = this.getPlotLinePath({
						value: a,
						force: !0,
						acrossPanes: g.acrossPanes
					});
					g = 1;
					if (a && f) {
						if (c) {
							var n = a.toString() === f.toString();
							g = 0
						}
						for (c = 0; c < a.length; c += 2) {
							var t = a[c],
							r = a[c + 1],
							v = f[c],
							A = f[c + 1];
							"M" !== t[0] && "L" !== t[0] || "M" !== r[0] && "L" !== r[0] || "M" !== v[0] && "L" !== v[0] || "M" !== A[0] && "L" !== A[0] || (l && v[1] === t[1] ? (v[1] += g, A[1] += g) : l || v[2] !== t[2] || (v[2] += g, A[2] += g), e.push(["M", t[1], t[2]], ["L", r[1], r[2]], ["L", A[1], A[2]], ["L", v[1], v[2]], ["Z"]));
							e.isFlat = n
						}
					}
					return e
				};
				a.prototype.addPlotBand = function(a) {
					return this.addPlotBandOrLine(a, "plotBands")
				};
				a.prototype.addPlotLine = function(a) {
					return this.addPlotBandOrLine(a, "plotLines")
				};
				a.prototype.addPlotBandOrLine = function(a, c) {
					var f = this,
					g = this.userOptions,
					e = new r(this, a);
					this.visible && (e = e.render());
					if (e) {
						this._addedPlotLB || (this._addedPlotLB = !0, (g.plotLines || []).concat(g.plotBands || []).forEach(function(a) {
							f.addPlotBandOrLine(a)
						}));
						if (c) {
							var n = g[c] || [];
							n.push(a);
							g[c] = n
						}
						this.plotLinesAndBands.push(e)
					}
					return e
				};
				a.prototype.removePlotBandOrLine = function(a) {
					var c = this.plotLinesAndBands,
					f = this.options,
					m = this.userOptions;
					if (c) {
						for (var e = c.length; e--;) c[e].id === a && c[e].destroy(); [f.plotLines || [], m.plotLines || [], f.plotBands || [], m.plotBands || []].forEach(function(c) {
							for (e = c.length; e--;)(c[e] || {}).id === a && g(c, c[e])
						})
					}
				};
				a.prototype.removePlotBand = function(a) {
					this.removePlotBandOrLine(a)
				};
				a.prototype.removePlotLine = function(a) {
					this.removePlotBandOrLine(a)
				};
				return a
			} ()
		})(D || (D = {}));
		return D
	});
	K(g, "Core/Axis/PlotLineOrBand/PlotLineOrBand.js", [g["Core/Axis/PlotLineOrBand/PlotLineOrBandAxis.js"], g["Core/Utilities.js"]],
	function(a, g) {
		var v = g.arrayMax,
		E = g.arrayMin,
		D = g.defined,
		B = g.destroyObjectProperties,
		G = g.erase,
		r = g.fireEvent,
		t = g.merge,
		n = g.objectEach,
		f = g.pick;
		g = function() {
			function c(a, c) {
				this.axis = a;
				c && (this.options = c, this.id = c.id)
			}
			c.compose = function(f) {
				return a.compose(c, f)
			};
			c.prototype.render = function() {
				r(this, "render");
				var a = this,
				c = a.axis,
				e = c.horiz,
				g = c.logarithmic,
				C = a.options,
				J = C.color,
				I = f(C.zIndex, 0),
				v = C.events,
				A = {},
				d = c.chart.renderer,
				q = C.label,
				h = a.label,
				k = C.to,
				b = C.from,
				p = C.value,
				z = a.svgElem,
				w = [],
				N = D(b) && D(k);
				w = D(p);
				var H = !z,
				O = {
					"class": "highcharts-plot-" + (N ? "band ": "line ") + (C.className || "")
				},
				Q = N ? "bands": "lines";
				g && (b = g.log2lin(b), k = g.log2lin(k), p = g.log2lin(p));
				c.chart.styledMode || (w ? (O.stroke = J || "#999999", O["stroke-width"] = f(C.width, 1), C.dashStyle && (O.dashstyle = C.dashStyle)) : N && (O.fill = J || "#e6ebf5", C.borderWidth && (O.stroke = C.borderColor, O["stroke-width"] = C.borderWidth)));
				A.zIndex = I;
				Q += "-" + I; (g = c.plotLinesAndBandsGroups[Q]) || (c.plotLinesAndBandsGroups[Q] = g = d.g("plot-" + Q).attr(A).add());
				H && (a.svgElem = z = d.path().attr(O).add(g));
				if (w) w = c.getPlotLinePath({
					value: p,
					lineWidth: z.strokeWidth(),
					acrossPanes: C.acrossPanes
				});
				else if (N) w = c.getPlotBandPath(b, k, C);
				else return; ! a.eventsAdded && v && (n(v,
				function(b, d) {
					z.on(d,
					function(b) {
						v[d].apply(a, [b])
					})
				}), a.eventsAdded = !0); (H || !z.d) && w && w.length ? z.attr({
					d: w
				}) : z && (w ? (z.show(), z.animate({
					d: w
				})) : z.d && (z.hide(), h && (a.label = h = h.destroy())));
				q && (D(q.text) || D(q.formatter)) && w && w.length && 0 < c.width && 0 < c.height && !w.isFlat ? (q = t({
					align: e && N && "center",
					x: e ? !N && 4 : 10,
					verticalAlign: !e && N && "middle",
					y: e ? N ? 16 : 10 : N ? 6 : -4,
					rotation: e && !N && 90
				},
				q), this.renderLabel(q, w, N, I)) : h && h.hide();
				return a
			};
			c.prototype.renderLabel = function(a, c, e, f) {
				var g = this.axis,
				l = g.chart.renderer,
				m = this.label;
				m || (this.label = m = l.text(this.getLabelText(a), 0, 0, a.useHTML).attr({
					align: a.textAlign || a.align,
					rotation: a.rotation,
					"class": "highcharts-plot-" + (e ? "band": "line") + "-label " + (a.className || ""),
					zIndex: f
				}).add(), g.chart.styledMode || m.css(t({
					textOverflow: "ellipsis"
				},
				a.style)));
				f = c.xBounds || [c[0][1], c[1][1], e ? c[2][1] : c[0][1]];
				c = c.yBounds || [c[0][2], c[1][2], e ? c[2][2] : c[0][2]];
				e = E(f);
				l = E(c);
				m.align(a, !1, {
					x: e,
					y: l,
					width: v(f) - e,
					height: v(c) - l
				});
				m.alignValue && "left" !== m.alignValue || m.css({
					width: (90 === m.rotation ? g.height - (m.alignAttr.y - g.top) : g.width - (m.alignAttr.x - g.left)) + "px"
				});
				m.show(!0)
			};
			c.prototype.getLabelText = function(a) {
				return D(a.formatter) ? a.formatter.call(this) : a.text
			};
			c.prototype.destroy = function() {
				G(this.axis.plotLinesAndBands, this);
				delete this.axis;
				B(this)
			};
			return c
		} ();
		"";
		"";
		return g
	});
	K(g, "Core/Tooltip.js", [g["Core/FormatUtilities.js"], g["Core/Globals.js"], g["Core/Renderer/RendererUtilities.js"], g["Core/Renderer/RendererRegistry.js"], g["Core/Utilities.js"]],
	function(a, g, x, E, D) {
		var v = a.format,
		G = g.doc,
		r = x.distribute,
		t = D.clamp,
		n = D.css,
		f = D.discardElement,
		c = D.extend,
		l = D.fireEvent,
		m = D.isArray,
		e = D.isNumber,
		u = D.isString,
		C = D.merge,
		J = D.pick,
		I = D.splat,
		L = D.syncTimeout;
		a = function() {
			function a(a, c) {
				this.allowShared = !0;
				this.container = void 0;
				this.crosshairs = [];
				this.distance = 0;
				this.isHidden = !0;
				this.isSticky = !1;
				this.now = {};
				this.options = {};
				this.outside = !1;
				this.chart = a;
				this.init(a, c)
			}
			a.prototype.applyFilter = function() {
				var a = this.chart;
				a.renderer.definition({
					tagName: "filter",
					attributes: {
						id: "drop-shadow-" + a.index,
						opacity: .5
					},
					children: [{
						tagName: "feGaussianBlur",
						attributes: {
							"in": "SourceAlpha",
							stdDeviation: 1
						}
					},
					{
						tagName: "feOffset",
						attributes: {
							dx: 1,
							dy: 1
						}
					},
					{
						tagName: "feComponentTransfer",
						children: [{
							tagName: "feFuncA",
							attributes: {
								type: "linear",
								slope: .3
							}
						}]
					},
					{
						tagName: "feMerge",
						children: [{
							tagName: "feMergeNode"
						},
						{
							tagName: "feMergeNode",
							attributes: {
								"in": "SourceGraphic"
							}
						}]
					}]
				})
			};
			a.prototype.bodyFormatter = function(a) {
				return a.map(function(a) {
					var d = a.series.tooltipOptions;
					return (d[(a.point.formatPrefix || "point") + "Formatter"] || a.point.tooltipFormatter).call(a.point, d[(a.point.formatPrefix || "point") + "Format"] || "")
				})
			};
			a.prototype.cleanSplit = function(a) {
				this.chart.series.forEach(function(d) {
					var c = d && d.tt;
					c && (!c.isActive || a ? d.tt = c.destroy() : c.isActive = !1)
				})
			};
			a.prototype.defaultFormatter = function(a) {
				var d = this.points || I(this);
				var c = [a.tooltipFooterHeaderFormatter(d[0])];
				c = c.concat(a.bodyFormatter(d));
				c.push(a.tooltipFooterHeaderFormatter(d[0], !0));
				return c
			};
			a.prototype.destroy = function() {
				this.label && (this.label = this.label.destroy());
				this.split && this.tt && (this.cleanSplit(!0), this.tt = this.tt.destroy());
				this.renderer && (this.renderer = this.renderer.destroy(), f(this.container));
				D.clearTimeout(this.hideTimer);
				D.clearTimeout(this.tooltipTimeout)
			};
			a.prototype.getAnchor = function(a, c) {
				var d = this.chart,
				e = d.pointer,
				b = d.inverted,
				f = d.plotTop,
				g = d.plotLeft,
				l, q, m = 0,
				n = 0;
				a = I(a);
				this.followPointer && c ? ("undefined" === typeof c.chartX && (c = e.normalize(c)), e = [c.chartX - g, c.chartY - f]) : a[0].tooltipPos ? e = a[0].tooltipPos: (a.forEach(function(a) {
					l = a.series.yAxis;
					q = a.series.xAxis;
					m += a.plotX || 0;
					n += a.plotLow ? (a.plotLow + (a.plotHigh || 0)) / 2 : a.plotY || 0;
					q && l && (b ? (m += f + d.plotHeight - q.len - q.pos, n += g + d.plotWidth - l.len - l.pos) : (m += q.pos - g, n += l.pos - f))
				}), m /= a.length, n /= a.length, e = [b ? d.plotWidth - n: m, b ? d.plotHeight - m: n], this.shared && 1 < a.length && c && (b ? e[0] = c.chartX - g: e[1] = c.chartY - f));
				return e.map(Math.round)
			};
			a.prototype.getClassName = function(a, c, h) {
				var d = a.series,
				b = d.options;
				return [this.options.className, "highcharts-label", h && "highcharts-tooltip-header", c ? "highcharts-tooltip-box": "highcharts-tooltip", !h && "highcharts-color-" + J(a.colorIndex, d.colorIndex), b && b.className].filter(u).join(" ")
			};
			a.prototype.getLabel = function() {
				var a = this,
				c = this.chart.styledMode,
				h = this.options,
				e = this.split && this.allowShared,
				b = h.style.pointerEvents || (this.shouldStickOnContact() ? "auto": "none"),
				f,
				l = this.chart.renderer;
				if (a.label) {
					var w = !a.label.hasClass("highcharts-label"); (e && !w || !e && w) && a.destroy()
				}
				if (!this.label) {
					if (this.outside) {
						w = this.chart.options.chart.style;
						var m = E.getRendererType();
						this.container = f = g.doc.createElement("div");
						f.className = "highcharts-tooltip-container";
						n(f, {
							position: "absolute",
							top: "1px",
							pointerEvents: b,
							zIndex: Math.max(this.options.style.zIndex || 0, (w && w.zIndex || 0) + 3)
						});
						g.doc.body.appendChild(f);
						this.renderer = l = new m(f, 0, 0, w, void 0, void 0, l.styledMode)
					}
					e ? this.label = l.g("tooltip") : (this.label = l.label("", 0, 0, h.shape, void 0, void 0, h.useHTML, void 0, "tooltip").attr({
						padding: h.padding,
						r: h.borderRadius
					}), c || this.label.attr({
						fill: h.backgroundColor,
						"stroke-width": h.borderWidth
					}).css(h.style).css({
						pointerEvents: b
					}).shadow(h.shadow));
					c && h.shadow && (this.applyFilter(), this.label.attr({
						filter: "url(#drop-shadow-" + this.chart.index + ")"
					}));
					if (a.outside && !a.split) {
						var u = this.label,
						A = u.xSetter,
						t = u.ySetter;
						u.xSetter = function(b) {
							A.call(u, a.distance);
							f.style.left = b + "px"
						};
						u.ySetter = function(b) {
							t.call(u, a.distance);
							f.style.top = b + "px"
						}
					}
					this.label.attr({
						zIndex: 8
					}).add()
				}
				return this.label
			};
			a.prototype.getPosition = function(a, c, h) {
				var d = this.chart,
				b = this.distance,
				e = {},
				f = d.inverted && h.h || 0,
				g = this.outside,
				l = g ? G.documentElement.clientWidth - 2 * b: d.chartWidth,
				q = g ? Math.max(G.body.scrollHeight, G.documentElement.scrollHeight, G.body.offsetHeight, G.documentElement.offsetHeight, G.documentElement.clientHeight) : d.chartHeight,
				m = d.pointer.getChartPosition(),
				n = function(e) {
					var f = "x" === e;
					return [e, f ? l: q, f ? a: c].concat(g ? [f ? a * m.scaleX: c * m.scaleY, f ? m.left - b + (h.plotX + d.plotLeft) * m.scaleX: m.top - b + (h.plotY + d.plotTop) * m.scaleY, 0, f ? l: q] : [f ? a: c, f ? h.plotX + d.plotLeft: h.plotY + d.plotTop, f ? d.plotLeft: d.plotTop, f ? d.plotLeft + d.plotWidth: d.plotTop + d.plotHeight])
				},
				u = n("y"),
				A = n("x"),
				y;
				n = !!h.negative; ! d.polar && d.hoverSeries && d.hoverSeries.yAxis && d.hoverSeries.yAxis.reversed && (n = !n);
				var t = !this.followPointer && J(h.ttBelow, !d.inverted === n),
				r = function(a, d, c, h, k, p, l) {
					var q = g ? "y" === a ? b * m.scaleY: b * m.scaleX: b,
					z = (c - h) / 2,
					w = h < k - b,
					F = k + b + h < d,
					n = k - q - c + z;
					k = k + q - z;
					if (t && F) e[a] = k;
					else if (!t && w) e[a] = n;
					else if (w) e[a] = Math.min(l - h, 0 > n - f ? n: n - f);
					else if (F) e[a] = Math.max(p, k + f + c > d ? k: k + f);
					else return ! 1
				},
				C = function(a, d, c, h, f) {
					var k;
					f < b || f > d - b ? k = !1 : e[a] = f < c / 2 ? 1 : f > d - h / 2 ? d - h - 2 : f - c / 2;
					return k
				},
				v = function(b) {
					var a = u;
					u = A;
					A = a;
					y = b
				},
				F = function() { ! 1 !== r.apply(0, u) ? !1 !== C.apply(0, A) || y || (v(!0), F()) : y ? e.x = e.y = 0 : (v(!0), F())
				}; (d.inverted || 1 < this.len) && v();
				F();
				return e
			};
			a.prototype.hide = function(a) {
				var d = this;
				D.clearTimeout(this.hideTimer);
				a = J(a, this.options.hideDelay);
				this.isHidden || (this.hideTimer = L(function() {
					d.getLabel().fadeOut(a ? void 0 : a);
					d.isHidden = !0
				},
				a))
			};
			a.prototype.init = function(a, c) {
				this.chart = a;
				this.options = c;
				this.crosshairs = [];
				this.now = {
					x: 0,
					y: 0
				};
				this.isHidden = !0;
				this.split = c.split && !a.inverted && !a.polar;
				this.shared = c.shared || this.split;
				this.outside = J(c.outside, !(!a.scrollablePixelsX && !a.scrollablePixelsY))
			};
			a.prototype.shouldStickOnContact = function(a) {
				return ! (this.followPointer || !this.options.stickOnContact || a && !this.chart.pointer.inClass(a.target, "highcharts-tooltip"))
			};
			a.prototype.move = function(a, e, h, f) {
				var b = this,
				d = b.now,
				k = !1 !== b.options.animation && !b.isHidden && (1 < Math.abs(a - d.x) || 1 < Math.abs(e - d.y)),
				g = b.followPointer || 1 < b.len;
				c(d, {
					x: k ? (2 * d.x + a) / 3 : a,
					y: k ? (d.y + e) / 2 : e,
					anchorX: g ? void 0 : k ? (2 * d.anchorX + h) / 3 : h,
					anchorY: g ? void 0 : k ? (d.anchorY + f) / 2 : f
				});
				b.getLabel().attr(d);
				b.drawTracker();
				k && (D.clearTimeout(this.tooltipTimeout), this.tooltipTimeout = setTimeout(function() {
					b && b.move(a, e, h, f)
				},
				32))
			};
			a.prototype.refresh = function(a, c) {
				var d = this.chart,
				e = this.options,
				b = d.pointer,
				f = I(a),
				g = f[0],
				q = [],
				n = e.formatter || this.defaultFormatter,
				u = this.shared,
				A = d.styledMode,
				t = {};
				if (e.enabled && g.series) {
					D.clearTimeout(this.hideTimer);
					this.allowShared = !(!m(a) && a.series && a.series.noSharedTooltip);
					this.followPointer = !this.split && g.series.tooltipOptions.followPointer;
					a = this.getAnchor(a, c);
					var r = a[0],
					C = a[1];
					u && this.allowShared ? (b.applyInactiveState(f), f.forEach(function(b) {
						b.setState("hover");
						q.push(b.getLabelConfig())
					}), t = {
						x: g.category,
						y: g.y
					},
					t.points = q) : t = g.getLabelConfig();
					this.len = q.length;
					n = n.call(t, this);
					u = g.series;
					this.distance = J(u.tooltipOptions.distance, 16);
					if (!1 === n) this.hide();
					else {
						if (this.split && this.allowShared) this.renderSplit(n, f);
						else {
							var y = r,
							v = C;
							c && b.isDirectTouch && (y = c.chartX - d.plotLeft, v = c.chartY - d.plotTop);
							if (d.polar || !1 === u.options.clip || f.some(function(a) {
								return b.isDirectTouch || a.series.shouldShowTooltip(y, v)
							})) c = this.getLabel(),
							e.style.width && !A || c.css({
								width: d.spacingBox.width + "px"
							}),
							c.attr({
								text: n && n.join ? n.join("") : n
							}),
							c.addClass(this.getClassName(g), !0),
							A || c.attr({
								stroke: e.borderColor || g.color || u.color || "#666666"
							}),
							this.updatePosition({
								plotX: r,
								plotY: C,
								negative: g.negative,
								ttBelow: g.ttBelow,
								h: a[2] || 0
							});
							else {
								this.hide();
								return
							}
						}
						this.isHidden && this.label && this.label.attr({
							opacity: 1
						}).show();
						this.isHidden = !1
					}
					l(this, "refresh")
				}
			};
			a.prototype.renderSplit = function(a, e) {
				function d(b, a, d, c, h) {
					void 0 === h && (h = !0);
					d ? (a = W ? 0 : ba, b = t(b - c / 2, P.left, P.right - c - (f.outside ? U: 0))) : (a -= Z, b = h ? b - c - D: b + D, b = t(b, h ? b: P.left, P.right));
					return {
						x: b,
						y: a
					}
				}
				var f = this,
				b = f.chart,
				p = f.chart,
				g = p.chartWidth,
				l = p.chartHeight,
				q = p.plotHeight,
				m = p.plotLeft,
				n = p.plotTop,
				A = p.pointer,
				C = p.scrollablePixelsY;
				C = void 0 === C ? 0 : C;
				var v = p.scrollablePixelsX,
				y = p.scrollingContainer;
				y = void 0 === y ? {
					scrollLeft: 0,
					scrollTop: 0
				}: y;
				var I = y.scrollLeft;
				y = y.scrollTop;
				var x = p.styledMode,
				D = f.distance,
				B = f.options,
				F = f.options.positioner,
				P = f.outside && "number" !== typeof v ? G.documentElement.getBoundingClientRect() : {
					left: I,
					right: I + g,
					top: y,
					bottom: y + l
				},
				M = f.getLabel(),
				X = this.renderer || b.renderer,
				W = !(!b.xAxis[0] || !b.xAxis[0].opposite);
				b = A.getChartPosition();
				var U = b.left;
				b = b.top;
				var Z = n + y,
				L = 0,
				ba = q - C;
				u(a) && (a = [!1, a]);
				a = a.slice(0, e.length + 1).reduce(function(b, a, c) {
					if (!1 !== a && "" !== a) {
						c = e[c - 1] || {
							isHeader: !0,
							plotX: e[0].plotX,
							plotY: q,
							series: {}
						};
						var h = c.isHeader,
						k = h ? f: c.series;
						a = a.toString();
						var p = k.tt,
						g = c.isHeader;
						var l = c.series;
						p || (p = {
							padding: B.padding,
							r: B.borderRadius
						},
						x || (p.fill = B.backgroundColor, p["stroke-width"] = B.borderWidth), p = X.label("", 0, 0, B[g ? "headerShape": "shape"], void 0, void 0, B.useHTML).addClass(f.getClassName(c, !0, g)).attr(p).add(M));
						p.isActive = !0;
						p.attr({
							text: a
						});
						x || p.css(B.style).shadow(B.shadow).attr({
							stroke: B.borderColor || c.color || l.color || "#333333"
						});
						k = k.tt = p;
						g = k.getBBox();
						a = g.width + k.strokeWidth();
						h && (L = g.height, ba += L, W && (Z -= L));
						l = c.plotX;
						l = void 0 === l ? 0 : l;
						p = c.plotY;
						p = void 0 === p ? 0 : p;
						var w = c.series;
						if (c.isHeader) {
							l = m + l;
							var z = n + q / 2
						} else {
							var u = w.xAxis,
							y = w.yAxis;
							l = u.pos + t(l, -D, u.len + D);
							w.shouldShowTooltip(0, y.pos - n + p, {
								ignoreX: !0
							}) && (z = y.pos + p)
						}
						l = t(l, P.left - D, P.right + D);
						"number" === typeof z ? (g = g.height + 1, p = F ? F.call(f, a, g, c) : d(l, z, h, a), b.push({
							align: F ? 0 : void 0,
							anchorX: l,
							anchorY: z,
							boxWidth: a,
							point: c,
							rank: J(p.rank, h ? 1 : 0),
							size: g,
							target: p.y,
							tt: k,
							x: p.x
						})) : k.isActive = !1
					}
					return b
				},
				[]); ! F && a.some(function(b) {
					var a = (f.outside ? U: 0) + b.anchorX;
					return a < P.left && a + b.boxWidth < P.right ? !0 : a < U - P.left + b.boxWidth && P.right - a > a
				}) && (a = a.map(function(b) {
					var a = d(b.anchorX, b.anchorY, b.point.isHeader, b.boxWidth, !1);
					return c(b, {
						target: a.y,
						x: a.x
					})
				}));
				f.cleanSplit();
				r(a, ba);
				var E = U,
				da = U;
				a.forEach(function(b) {
					var a = b.x,
					d = b.boxWidth;
					b = b.isHeader;
					b || (f.outside && U + a < E && (E = U + a), !b && f.outside && E + d > da && (da = U + a))
				});
				a.forEach(function(b) {
					var a = b.x,
					d = b.anchorX,
					c = b.pos,
					h = b.point.isHeader;
					c = {
						visibility: "undefined" === typeof c ? "hidden": "inherit",
						x: a,
						y: (c || 0) + Z,
						anchorX: d,
						anchorY: b.anchorY
					};
					if (f.outside && a < d) {
						var e = U - E;
						0 < e && (h || (c.x = a + e, c.anchorX = d + e), h && (c.x = (da - E) / 2, c.anchorX = d + e))
					}
					b.tt.attr(c)
				});
				a = f.container;
				C = f.renderer;
				f.outside && a && C && (p = M.getBBox(), C.setSize(p.width + p.x, p.height + p.y, !1), a.style.left = E + "px", a.style.top = b + "px")
			};
			a.prototype.drawTracker = function() {
				if (this.shouldStickOnContact()) {
					var a = this.chart,
					c = this.label,
					h = this.shared ? a.hoverPoints: a.hoverPoint;
					if (c && h) {
						var e = {
							x: 0,
							y: 0,
							width: 0,
							height: 0
						};
						h = this.getAnchor(h);
						var b = c.getBBox();
						h[0] += a.plotLeft - c.translateX;
						h[1] += a.plotTop - c.translateY;
						e.x = Math.min(0, h[0]);
						e.y = Math.min(0, h[1]);
						e.width = 0 > h[0] ? Math.max(Math.abs(h[0]), b.width - h[0]) : Math.max(Math.abs(h[0]), b.width);
						e.height = 0 > h[1] ? Math.max(Math.abs(h[1]), b.height - Math.abs(h[1])) : Math.max(Math.abs(h[1]), b.height);
						this.tracker ? this.tracker.attr(e) : (this.tracker = c.renderer.rect(e).addClass("highcharts-tracker").add(c), a.styledMode || this.tracker.attr({
							fill: "rgba(0,0,0,0)"
						}))
					}
				} else this.tracker && this.tracker.destroy()
			};
			a.prototype.styledModeFormat = function(a) {
				return a.replace('style="font-size: 10px"', 'class="highcharts-header"').replace(/style="color:{(point|series)\.color}"/g, 'class="highcharts-color-{$1.colorIndex} {series.options.className} {point.options.className}"')
			};
			a.prototype.tooltipFooterHeaderFormatter = function(a, c) {
				var d = a.series,
				f = d.tooltipOptions,
				b = d.xAxis,
				p = b && b.dateTime;
				b = {
					isFooter: c,
					labelConfig: a
				};
				var g = f.xDateFormat,
				q = f[c ? "footerFormat": "headerFormat"];
				l(this, "headerFormatter", b,
				function(b) {
					p && !g && e(a.key) && (g = p.getXDateFormat(a.key, f.dateTimeLabelFormats));
					p && g && (a.point && a.point.tooltipDateKeys || ["key"]).forEach(function(b) {
						q = q.replace("{point." + b + "}", "{point." + b + ":" + g + "}")
					});
					d.chart.styledMode && (q = this.styledModeFormat(q));
					b.text = v(q, {
						point: a,
						series: d
					},
					this.chart)
				});
				return b.text
			};
			a.prototype.update = function(a) {
				this.destroy();
				C(!0, this.chart.options.tooltip.userOptions, a);
				this.init(this.chart, C(!0, this.options, a))
			};
			a.prototype.updatePosition = function(a) {
				var d = this.chart,
				c = this.options,
				e = d.pointer,
				b = this.getLabel();
				e = e.getChartPosition();
				var f = (c.positioner || this.getPosition).call(this, b.width, b.height, a),
				g = a.plotX + d.plotLeft;
				a = a.plotY + d.plotTop;
				if (this.outside) {
					c = c.borderWidth + 2 * this.distance;
					this.renderer.setSize(b.width + c, b.height + c, !1);
					if (1 !== e.scaleX || 1 !== e.scaleY) n(this.container, {
						transform: "scale(".concat(e.scaleX, ", ").concat(e.scaleY, ")")
					}),
					g *= e.scaleX,
					a *= e.scaleY;
					g += e.left - f.x;
					a += e.top - f.y
				}
				this.move(Math.round(f.x), Math.round(f.y || 0), g, a)
			};
			return a
		} ();
		"";
		return a
	});
	K(g, "Core/Series/Point.js", [g["Core/Renderer/HTML/AST.js"], g["Core/Animation/AnimationUtilities.js"], g["Core/Defaults.js"], g["Core/FormatUtilities.js"], g["Core/Utilities.js"]],
	function(a, g, x, E, D) {
		var v = g.animObject,
		G = x.defaultOptions,
		r = E.format,
		t = D.addEvent,
		n = D.defined,
		f = D.erase,
		c = D.extend,
		l = D.fireEvent,
		m = D.getNestedProperty,
		e = D.isArray,
		u = D.isFunction,
		C = D.isNumber,
		J = D.isObject,
		I = D.merge,
		L = D.objectEach,
		A = D.pick,

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值