/*
 Highcharts JS v6.1.1 (2018-06-27)

 (c) 2009-2016 Torstein Honsi

 License: www.highcharts.com/license
*/
(function (w) { "object" === typeof module && module.exports ? module.exports = w : w(Highcharts) })(function (w) {
    (function (a) {
        function p(a, b) { this.init(a, b) } var v = a.CenteredSeriesMixin, u = a.each, q = a.extend, r = a.merge, g = a.splat; q(p.prototype, {
            coll: "pane", init: function (a, b) { this.chart = b; this.background = []; b.pane.push(this); this.setOptions(a) }, setOptions: function (a) { this.options = r(this.defaultOptions, this.chart.angular ? { background: {} } : void 0, a) }, render: function () {
                var a = this.options, b = this.options.background, c = this.chart.renderer;
                this.group || (this.group = c.g("pane-group").attr({ zIndex: a.zIndex || 0 }).add()); this.updateCenter(); if (b) for (b = g(b), a = Math.max(b.length, this.background.length || 0), c = 0; c < a; c++)b[c] && this.axis ? this.renderBackground(r(this.defaultBackgroundOptions, b[c]), c) : this.background[c] && (this.background[c] = this.background[c].destroy(), this.background.splice(c, 1))
            }, renderBackground: function (a, b) {
                var c = "animate"; this.background[b] || (this.background[b] = this.chart.renderer.path().add(this.group), c = "attr"); this.background[b][c]({
                    d: this.axis.getPlotBandPath(a.from,
                        a.to, a)
                }).attr({ fill: a.backgroundColor, stroke: a.borderColor, "stroke-width": a.borderWidth, "class": "highcharts-pane " + (a.className || "") })
            }, defaultOptions: { center: ["50%", "50%"], size: "85%", startAngle: 0 }, defaultBackgroundOptions: { shape: "circle", borderWidth: 1, borderColor: "#cccccc", backgroundColor: { linearGradient: { x1: 0, y1: 0, x2: 0, y2: 1 }, stops: [[0, "#ffffff"], [1, "#e6e6e6"]] }, from: -Number.MAX_VALUE, innerRadius: 0, to: Number.MAX_VALUE, outerRadius: "105%" }, updateCenter: function (a) {
            this.center = (a || this.axis || {}).center =
                v.getCenter.call(this)
            }, update: function (a, b) { r(!0, this.options, a); this.setOptions(this.options); this.render(); u(this.chart.axes, function (c) { c.pane === this && (c.pane = null, c.update({}, b)) }, this) }
        }); a.Pane = p
    })(w); (function (a) {
        var p = a.addEvent, v = a.Axis, u = a.each, q = a.extend, r = a.map, g = a.merge, m = a.noop, b = a.pick, c = a.pInt, d = a.Tick, k = a.wrap, e = a.correctFloat, f, h, t = v.prototype, l = d.prototype; a.radialAxisExtended || (a.radialAxisExtended = !0, f = {
            getOffset: m, redraw: function () { this.isDirty = !1 }, render: function () {
            this.isDirty =
                !1
            }, setScale: m, setCategories: m, setTitle: m
        }, h = {
            defaultRadialGaugeOptions: { labels: { align: "center", x: 0, y: null }, minorGridLineWidth: 0, minorTickInterval: "auto", minorTickLength: 10, minorTickPosition: "inside", minorTickWidth: 1, tickLength: 10, tickPosition: "inside", tickWidth: 2, title: { rotation: 0 }, zIndex: 2 }, defaultRadialXOptions: { gridLineWidth: 1, labels: { align: null, distance: 15, x: 0, y: null, style: { textOverflow: "none" } }, maxPadding: 0, minPadding: 0, showLastLabel: !1, tickLength: 0 }, defaultRadialYOptions: {
                gridLineInterpolation: "circle",
                labels: { align: "right", x: -3, y: -2 }, showLastLabel: !1, title: { x: 4, text: null, rotation: 90 }
            }, setOptions: function (b) { b = this.options = g(this.defaultOptions, this.defaultRadialOptions, b); b.plotBands || (b.plotBands = []); a.fireEvent(this, "afterSetOptions") }, getOffset: function () { t.getOffset.call(this); this.chart.axisOffset[this.side] = 0 }, getLinePath: function (c, d) {
                c = this.center; var a = this.chart, n = b(d, c[2] / 2 - this.offset); this.isCircular || void 0 !== d ? (d = this.chart.renderer.symbols.arc(this.left + c[0], this.top + c[1], n, n, {
                    start: this.startAngleRad,
                    end: this.endAngleRad, open: !0, innerR: 0
                }), d.xBounds = [this.left + c[0]], d.yBounds = [this.top + c[1] - n]) : (d = this.postTranslate(this.angleRad, n), d = ["M", c[0] + a.plotLeft, c[1] + a.plotTop, "L", d.x, d.y]); return d
            }, setAxisTranslation: function () { t.setAxisTranslation.call(this); this.center && (this.transA = this.isCircular ? (this.endAngleRad - this.startAngleRad) / (this.max - this.min || 1) : this.center[2] / 2 / (this.max - this.min || 1), this.minPixelPadding = this.isXAxis ? this.transA * this.minPointOffset : 0) }, beforeSetTickPositions: function () {
                if (this.autoConnect =
                    this.isCircular && void 0 === b(this.userMax, this.options.max) && e(this.endAngleRad - this.startAngleRad) === e(2 * Math.PI)) this.max += this.categories && 1 || this.pointRange || this.closestPointRange || 0
            }, setAxisSize: function () { t.setAxisSize.call(this); this.isRadial && (this.pane.updateCenter(this), this.isCircular && (this.sector = this.endAngleRad - this.startAngleRad), this.len = this.width = this.height = this.center[2] * b(this.sector, 1) / 2) }, getPosition: function (c, d) {
                return this.postTranslate(this.isCircular ? this.translate(c) :
                    this.angleRad, b(this.isCircular ? d : this.translate(c), this.center[2] / 2) - this.offset)
            }, postTranslate: function (b, c) { var d = this.chart, a = this.center; b = this.startAngleRad + b; return { x: d.plotLeft + a[0] + Math.cos(b) * c, y: d.plotTop + a[1] + Math.sin(b) * c } }, getPlotBandPath: function (d, a, e) {
                var f = this.center, n = this.startAngleRad, k = f[2] / 2, h = [b(e.outerRadius, "100%"), e.innerRadius, b(e.thickness, 10)], l = Math.min(this.offset, 0), x = /%$/, t, B = this.isCircular; "polygon" === this.options.gridLineInterpolation ? f = this.getPlotLinePath(d).concat(this.getPlotLinePath(a,
                    !0)) : (d = Math.max(d, this.min), a = Math.min(a, this.max), B || (h[0] = this.translate(d), h[1] = this.translate(a)), h = r(h, function (b) { x.test(b) && (b = c(b, 10) * k / 100); return b }), "circle" !== e.shape && B ? (d = n + this.translate(d), a = n + this.translate(a)) : (d = -Math.PI / 2, a = 1.5 * Math.PI, t = !0), h[0] -= l, h[2] -= l, f = this.chart.renderer.symbols.arc(this.left + f[0], this.top + f[1], h[0], h[0], { start: Math.min(d, a), end: Math.max(d, a), innerR: b(h[1], h[0] - h[2]), open: t })); return f
            }, getPlotLinePath: function (b, c) {
                var d = this, a = d.center, f = d.chart, e = d.getPosition(b),
                h, k, n; d.isCircular ? n = ["M", a[0] + f.plotLeft, a[1] + f.plotTop, "L", e.x, e.y] : "circle" === d.options.gridLineInterpolation ? (b = d.translate(b)) && (n = d.getLinePath(0, b)) : (u(f.xAxis, function (b) { b.pane === d.pane && (h = b) }), n = [], b = d.translate(b), a = h.tickPositions, h.autoConnect && (a = a.concat([a[0]])), c && (a = [].concat(a).reverse()), u(a, function (c, d) { k = h.getPosition(c, b); n.push(d ? "L" : "M", k.x, k.y) })); return n
            }, getTitlePosition: function () {
                var b = this.center, c = this.chart, d = this.options.title; return {
                    x: c.plotLeft + b[0] + (d.x || 0),
                    y: c.plotTop + b[1] - { high: .5, middle: .25, low: 0 }[d.align] * b[2] + (d.y || 0)
                }
            }
        }, p(v, "init", function (b) {
            var c = this.chart, d = c.angular, a = c.polar, e = this.isXAxis, k = d && e, n, l = c.options; b = b.userOptions.pane || 0; b = this.pane = c.pane && c.pane[b]; if (d) { if (q(this, k ? f : h), n = !e) this.defaultRadialOptions = this.defaultRadialGaugeOptions } else a && (q(this, h), this.defaultRadialOptions = (n = e) ? this.defaultRadialXOptions : g(this.defaultYAxisOptions, this.defaultRadialYOptions)); d || a ? (this.isRadial = !0, c.inverted = !1, l.chart.zoomType = null) :
                this.isRadial = !1; b && n && (b.axis = this); this.isCircular = n
        }), p(v, "afterInit", function () { var c = this.chart, d = this.options, a = this.pane, e = a && a.options; c.angular && this.isXAxis || !a || !c.angular && !c.polar || (this.angleRad = (d.angle || 0) * Math.PI / 180, this.startAngleRad = (e.startAngle - 90) * Math.PI / 180, this.endAngleRad = (b(e.endAngle, e.startAngle + 360) - 90) * Math.PI / 180, this.offset = d.offset || 0) }), k(t, "autoLabelAlign", function (b) { if (!this.isRadial) return b.apply(this, [].slice.call(arguments, 1)) }), p(d, "afterGetPosition", function (b) {
            this.axis.getPosition &&
            q(b.pos, this.axis.getPosition(this.pos))
        }), p(d, "afterGetLabelPosition", function (c) {
            var d = this.axis, a = this.label, e = d.options.labels, f = e.y, h, k = 20, l = e.align, n = (d.translate(this.pos) + d.startAngleRad + Math.PI / 2) / Math.PI * 180 % 360; d.isRadial && (h = d.getPosition(this.pos, d.center[2] / 2 + b(e.distance, -25)), "auto" === e.rotation ? a.attr({ rotation: n }) : null === f && (f = d.chart.renderer.fontMetrics(a.styles && a.styles.fontSize).b - a.getBBox().height / 2), null === l && (d.isCircular ? (this.label.getBBox().width > d.len * d.tickInterval /
                (d.max - d.min) && (k = 0), l = n > k && n < 180 - k ? "left" : n > 180 + k && n < 360 - k ? "right" : "center") : l = "center", a.attr({ align: l })), c.pos.x = h.x + e.x, c.pos.y = h.y + f)
        }), k(l, "getMarkPath", function (b, c, d, a, e, f, h) { var k = this.axis; k.isRadial ? (b = k.getPosition(this.pos, k.center[2] / 2 + a), c = ["M", c, d, "L", b.x, b.y]) : c = b.call(this, c, d, a, e, f, h); return c }))
    })(w); (function (a) {
        var p = a.each, v = a.pick, u = a.defined, q = a.seriesType, r = a.seriesTypes, g = a.Series.prototype, m = a.Point.prototype; q("arearange", "area", {
            lineWidth: 1, threshold: null, tooltip: { pointFormat: '\x3cspan style\x3d"color:{series.color}"\x3e\u25cf\x3c/span\x3e {series.name}: \x3cb\x3e{point.low}\x3c/b\x3e - \x3cb\x3e{point.high}\x3c/b\x3e\x3cbr/\x3e' },
            trackByArea: !0, dataLabels: { align: null, verticalAlign: null, xLow: 0, xHigh: 0, yLow: 0, yHigh: 0 }
        }, {
            pointArrayMap: ["low", "high"], dataLabelCollections: ["dataLabel", "dataLabelUpper"], toYData: function (b) { return [b.low, b.high] }, pointValKey: "low", deferTranslatePolar: !0, highToXY: function (b) { var c = this.chart, d = this.xAxis.postTranslate(b.rectPlotX, this.yAxis.len - b.plotHigh); b.plotHighX = d.x - c.plotLeft; b.plotHigh = d.y - c.plotTop; b.plotLowX = b.plotX }, translate: function () {
                var b = this, c = b.yAxis, d = !!b.modifyValue; r.area.prototype.translate.apply(b);
                p(b.points, function (a) { var e = a.low, f = a.high, h = a.plotY; null === f || null === e ? (a.isNull = !0, a.plotY = null) : (a.plotLow = h, a.plotHigh = c.translate(d ? b.modifyValue(f, a) : f, 0, 1, 0, 1), d && (a.yBottom = a.plotHigh)) }); this.chart.polar && p(this.points, function (c) { b.highToXY(c); c.tooltipPos = [(c.plotHighX + c.plotLowX) / 2, (c.plotHigh + c.plotLow) / 2] })
            }, getGraphPath: function (b) {
                var c = [], d = [], a, e = r.area.prototype.getGraphPath, f, h, t; t = this.options; var l = this.chart.polar && !1 !== t.connectEnds, n = t.connectNulls, x = t.step; b = b || this.points;
                for (a = b.length; a--;)f = b[a], f.isNull || l || n || b[a + 1] && !b[a + 1].isNull || d.push({ plotX: f.plotX, plotY: f.plotY, doCurve: !1 }), h = { polarPlotY: f.polarPlotY, rectPlotX: f.rectPlotX, yBottom: f.yBottom, plotX: v(f.plotHighX, f.plotX), plotY: f.plotHigh, isNull: f.isNull }, d.push(h), c.push(h), f.isNull || l || n || b[a - 1] && !b[a - 1].isNull || d.push({ plotX: f.plotX, plotY: f.plotY, doCurve: !1 }); b = e.call(this, b); x && (!0 === x && (x = "left"), t.step = { left: "right", center: "center", right: "left" }[x]); c = e.call(this, c); d = e.call(this, d); t.step = x; t = [].concat(b,
                    c); this.chart.polar || "M" !== d[0] || (d[0] = "L"); this.graphPath = t; this.areaPath = b.concat(d); t.isArea = !0; t.xMap = b.xMap; this.areaPath.xMap = b.xMap; return t
            }, drawDataLabels: function () {
                var b = this.data, c = b.length, d, a = [], e = this.options.dataLabels, f = e.align, h = e.verticalAlign, t = e.inside, l, n, x = this.chart.inverted; if (e.enabled || this._hasPointLabels) {
                    for (d = c; d--;)if (l = b[d]) n = t ? l.plotHigh < l.plotLow : l.plotHigh > l.plotLow, l.y = l.high, l._plotY = l.plotY, l.plotY = l.plotHigh, a[d] = l.dataLabel, l.dataLabel = l.dataLabelUpper, l.below =
                        n, x ? f || (e.align = n ? "right" : "left") : h || (e.verticalAlign = n ? "top" : "bottom"), e.x = e.xHigh, e.y = e.yHigh; g.drawDataLabels && g.drawDataLabels.apply(this, arguments); for (d = c; d--;)if (l = b[d]) n = t ? l.plotHigh < l.plotLow : l.plotHigh > l.plotLow, l.dataLabelUpper = l.dataLabel, l.dataLabel = a[d], l.y = l.low, l.plotY = l._plotY, l.below = !n, x ? f || (e.align = n ? "left" : "right") : h || (e.verticalAlign = n ? "bottom" : "top"), e.x = e.xLow, e.y = e.yLow; g.drawDataLabels && g.drawDataLabels.apply(this, arguments)
                } e.align = f; e.verticalAlign = h
            }, alignDataLabel: function () {
                r.column.prototype.alignDataLabel.apply(this,
                    arguments)
            }, drawPoints: function () {
                var b = this.points.length, c, d; g.drawPoints.apply(this, arguments); for (d = 0; d < b;)c = this.points[d], c.origProps = { plotY: c.plotY, plotX: c.plotX, isInside: c.isInside, negative: c.negative, zone: c.zone, y: c.y }, c.lowerGraphic = c.graphic, c.graphic = c.upperGraphic, c.plotY = c.plotHigh, u(c.plotHighX) && (c.plotX = c.plotHighX), c.y = c.high, c.negative = c.high < (this.options.threshold || 0), c.zone = this.zones.length && c.getZone(), this.chart.polar || (c.isInside = c.isTopInside = void 0 !== c.plotY && 0 <= c.plotY &&
                    c.plotY <= this.yAxis.len && 0 <= c.plotX && c.plotX <= this.xAxis.len), d++; g.drawPoints.apply(this, arguments); for (d = 0; d < b;)c = this.points[d], c.upperGraphic = c.graphic, c.graphic = c.lowerGraphic, a.extend(c, c.origProps), delete c.origProps, d++
            }, setStackedPoints: a.noop
            }, {
                setState: function () {
                    var b = this.state, c = this.series, d = c.chart.polar; u(this.plotHigh) || (this.plotHigh = c.yAxis.toPixels(this.high, !0)); u(this.plotLow) || (this.plotLow = this.plotY = c.yAxis.toPixels(this.low, !0)); c.stateMarkerGraphic && (c.lowerStateMarkerGraphic =
                        c.stateMarkerGraphic, c.stateMarkerGraphic = c.upperStateMarkerGraphic); this.graphic = this.upperGraphic; this.plotY = this.plotHigh; d && (this.plotX = this.plotHighX); m.setState.apply(this, arguments); this.state = b; this.plotY = this.plotLow; this.graphic = this.lowerGraphic; d && (this.plotX = this.plotLowX); c.stateMarkerGraphic && (c.upperStateMarkerGraphic = c.stateMarkerGraphic, c.stateMarkerGraphic = c.lowerStateMarkerGraphic, c.lowerStateMarkerGraphic = void 0); m.setState.apply(this, arguments)
                }, haloPath: function () {
                    var b = this.series.chart.polar,
                    c = []; this.plotY = this.plotLow; b && (this.plotX = this.plotLowX); this.isInside && (c = m.haloPath.apply(this, arguments)); this.plotY = this.plotHigh; b && (this.plotX = this.plotHighX); this.isTopInside && (c = c.concat(m.haloPath.apply(this, arguments))); return c
                }, destroyElements: function () { p(["lowerGraphic", "upperGraphic"], function (b) { this[b] && (this[b] = this[b].destroy()) }, this); this.graphic = null; return m.destroyElements.apply(this, arguments) }
            })
    })(w); (function (a) {
        var p = a.seriesType; p("areasplinerange", "arearange", null,
            { getPointSpline: a.seriesTypes.spline.prototype.getPointSpline })
    })(w); (function (a) {
        var p = a.defaultPlotOptions, v = a.each, u = a.merge, q = a.noop, r = a.pick, g = a.seriesType, m = a.seriesTypes.column.prototype; g("columnrange", "arearange", u(p.column, p.arearange, { pointRange: null, marker: null, states: { hover: { halo: !1 } } }), {
            translate: function () {
                var b = this, c = b.yAxis, d = b.xAxis, a = d.startAngleRad, e, f = b.chart, h = b.xAxis.isRadial, t = Math.max(f.chartWidth, f.chartHeight) + 999, l; m.translate.apply(b); v(b.points, function (n) {
                    var k = n.shapeArgs,
                    m = b.options.minPointLength, y, g; n.plotHigh = l = Math.min(Math.max(-t, c.translate(n.high, 0, 1, 0, 1)), t); n.plotLow = Math.min(Math.max(-t, n.plotY), t); g = l; y = r(n.rectPlotY, n.plotY) - l; Math.abs(y) < m ? (m -= y, y += m, g -= m / 2) : 0 > y && (y *= -1, g -= y); h ? (e = n.barX + a, n.shapeType = "path", n.shapeArgs = { d: b.polarArc(g + y, g, e, e + n.pointWidth) }) : (k.height = y, k.y = g, n.tooltipPos = f.inverted ? [c.len + c.pos - f.plotLeft - g - y / 2, d.len + d.pos - f.plotTop - k.x - k.width / 2, y] : [d.left - f.plotLeft + k.x + k.width / 2, c.pos - f.plotTop + g + y / 2, y])
                })
            }, directTouch: !0, trackerGroups: ["group",
                "dataLabelsGroup"], drawGraph: q, getSymbol: q, crispCol: m.crispCol, drawPoints: m.drawPoints, drawTracker: m.drawTracker, getColumnMetrics: m.getColumnMetrics, pointAttribs: m.pointAttribs, animate: function () { return m.animate.apply(this, arguments) }, polarArc: function () { return m.polarArc.apply(this, arguments) }, translate3dPoints: function () { return m.translate3dPoints.apply(this, arguments) }, translate3dShapes: function () { return m.translate3dShapes.apply(this, arguments) }
        }, { setState: m.pointClass.prototype.setState })
    })(w);
    (function (a) {
        var p = a.each, v = a.isNumber, u = a.merge, q = a.pick, r = a.pInt, g = a.Series, m = a.seriesType, b = a.TrackerMixin; m("gauge", "line", { dataLabels: { enabled: !0, defer: !1, y: 15, borderRadius: 3, crop: !1, verticalAlign: "top", zIndex: 2, borderWidth: 1, borderColor: "#cccccc" }, dial: {}, pivot: {}, tooltip: { headerFormat: "" }, showInLegend: !1 }, {
            angular: !0, directTouch: !0, drawGraph: a.noop, fixedBox: !0, forceDL: !0, noSharedTooltip: !0, trackerGroups: ["group", "dataLabelsGroup"], translate: function () {
                var b = this.yAxis, d = this.options, a = b.center;
                this.generatePoints(); p(this.points, function (c) {
                    var e = u(d.dial, c.dial), h = r(q(e.radius, 80)) * a[2] / 200, k = r(q(e.baseLength, 70)) * h / 100, l = r(q(e.rearLength, 10)) * h / 100, n = e.baseWidth || 3, x = e.topWidth || 1, g = d.overshoot, m = b.startAngleRad + b.translate(c.y, null, null, null, !0); v(g) ? (g = g / 180 * Math.PI, m = Math.max(b.startAngleRad - g, Math.min(b.endAngleRad + g, m))) : !1 === d.wrap && (m = Math.max(b.startAngleRad, Math.min(b.endAngleRad, m))); m = 180 * m / Math.PI; c.shapeType = "path"; c.shapeArgs = {
                        d: e.path || ["M", -l, -n / 2, "L", k, -n / 2, h, -x / 2, h,
                            x / 2, k, n / 2, -l, n / 2, "z"], translateX: a[0], translateY: a[1], rotation: m
                    }; c.plotX = a[0]; c.plotY = a[1]
                })
            }, drawPoints: function () {
                var b = this, a = b.yAxis.center, k = b.pivot, e = b.options, f = e.pivot, h = b.chart.renderer; p(b.points, function (c) {
                    var a = c.graphic, d = c.shapeArgs, f = d.d, k = u(e.dial, c.dial); a ? (a.animate(d), d.d = f) : (c.graphic = h[c.shapeType](d).attr({ rotation: d.rotation, zIndex: 1 }).addClass("highcharts-dial").add(b.group), c.graphic.attr({
                        stroke: k.borderColor || "none", "stroke-width": k.borderWidth || 0, fill: k.backgroundColor ||
                            "#000000"
                    }))
                }); k ? k.animate({ translateX: a[0], translateY: a[1] }) : (b.pivot = h.circle(0, 0, q(f.radius, 5)).attr({ zIndex: 2 }).addClass("highcharts-pivot").translate(a[0], a[1]).add(b.group), b.pivot.attr({ "stroke-width": f.borderWidth || 0, stroke: f.borderColor || "#cccccc", fill: f.backgroundColor || "#000000" }))
            }, animate: function (b) {
                var c = this; b || (p(c.points, function (b) { var a = b.graphic; a && (a.attr({ rotation: 180 * c.yAxis.startAngleRad / Math.PI }), a.animate({ rotation: b.shapeArgs.rotation }, c.options.animation)) }), c.animate =
                    null)
            }, render: function () { this.group = this.plotGroup("group", "series", this.visible ? "visible" : "hidden", this.options.zIndex, this.chart.seriesGroup); g.prototype.render.call(this); this.group.clip(this.chart.clipRect) }, setData: function (b, a) { g.prototype.setData.call(this, b, !1); this.processData(); this.generatePoints(); q(a, !0) && this.chart.redraw() }, drawTracker: b && b.drawTrackerPoint
        }, { setState: function (b) { this.state = b } })
    })(w); (function (a) {
        var p = a.each, v = a.noop, u = a.pick, q = a.seriesType, r = a.seriesTypes; q("boxplot",
            "column", { threshold: null, tooltip: { pointFormat: '\x3cspan style\x3d"color:{point.color}"\x3e\u25cf\x3c/span\x3e \x3cb\x3e {series.name}\x3c/b\x3e\x3cbr/\x3eMaximum: {point.high}\x3cbr/\x3eUpper quartile: {point.q3}\x3cbr/\x3eMedian: {point.median}\x3cbr/\x3eLower quartile: {point.q1}\x3cbr/\x3eMinimum: {point.low}\x3cbr/\x3e' }, whiskerLength: "50%", fillColor: "#ffffff", lineWidth: 1, medianWidth: 2, whiskerWidth: 2 }, {
                pointArrayMap: ["low", "q1", "median", "q3", "high"], toYData: function (a) {
                    return [a.low, a.q1, a.median,
                    a.q3, a.high]
                }, pointValKey: "high", pointAttribs: function () { return {} }, drawDataLabels: v, translate: function () { var a = this.yAxis, m = this.pointArrayMap; r.column.prototype.translate.apply(this); p(this.points, function (b) { p(m, function (c) { null !== b[c] && (b[c + "Plot"] = a.translate(b[c], 0, 1, 0, 1)) }) }) }, drawPoints: function () {
                    var a = this, m = a.options, b = a.chart.renderer, c, d, k, e, f, h, t = 0, l, n, x, r, q = !1 !== a.doQuartiles, v, z = a.options.whiskerLength; p(a.points, function (g) {
                        var p = g.graphic, y = p ? "animate" : "attr", B = g.shapeArgs, w = {}, D =
                            {}, I = {}, J = {}, C = g.color || a.color; void 0 !== g.plotY && (l = B.width, n = Math.floor(B.x), x = n + l, r = Math.round(l / 2), c = Math.floor(q ? g.q1Plot : g.lowPlot), d = Math.floor(q ? g.q3Plot : g.lowPlot), k = Math.floor(g.highPlot), e = Math.floor(g.lowPlot), p || (g.graphic = p = b.g("point").add(a.group), g.stem = b.path().addClass("highcharts-boxplot-stem").add(p), z && (g.whiskers = b.path().addClass("highcharts-boxplot-whisker").add(p)), q && (g.box = b.path(void 0).addClass("highcharts-boxplot-box").add(p)), g.medianShape = b.path(void 0).addClass("highcharts-boxplot-median").add(p)),
                                D.stroke = g.stemColor || m.stemColor || C, D["stroke-width"] = u(g.stemWidth, m.stemWidth, m.lineWidth), D.dashstyle = g.stemDashStyle || m.stemDashStyle, g.stem.attr(D), z && (I.stroke = g.whiskerColor || m.whiskerColor || C, I["stroke-width"] = u(g.whiskerWidth, m.whiskerWidth, m.lineWidth), g.whiskers.attr(I)), q && (w.fill = g.fillColor || m.fillColor || C, w.stroke = m.lineColor || C, w["stroke-width"] = m.lineWidth || 0, g.box.attr(w)), J.stroke = g.medianColor || m.medianColor || C, J["stroke-width"] = u(g.medianWidth, m.medianWidth, m.lineWidth), g.medianShape.attr(J),
                                h = g.stem.strokeWidth() % 2 / 2, t = n + r + h, g.stem[y]({ d: ["M", t, d, "L", t, k, "M", t, c, "L", t, e] }), q && (h = g.box.strokeWidth() % 2 / 2, c = Math.floor(c) + h, d = Math.floor(d) + h, n += h, x += h, g.box[y]({ d: ["M", n, d, "L", n, c, "L", x, c, "L", x, d, "L", n, d, "z"] })), z && (h = g.whiskers.strokeWidth() % 2 / 2, k += h, e += h, v = /%$/.test(z) ? r * parseFloat(z) / 100 : z / 2, g.whiskers[y]({ d: ["M", t - v, k, "L", t + v, k, "M", t - v, e, "L", t + v, e] })), f = Math.round(g.medianPlot), h = g.medianShape.strokeWidth() % 2 / 2, f += h, g.medianShape[y]({ d: ["M", n, f, "L", x, f] }))
                    })
                }, setStackedPoints: v
            })
    })(w);
    (function (a) {
        var p = a.each, v = a.noop, u = a.seriesType, q = a.seriesTypes; u("errorbar", "boxplot", { color: "#000000", grouping: !1, linkedTo: ":previous", tooltip: { pointFormat: '\x3cspan style\x3d"color:{point.color}"\x3e\u25cf\x3c/span\x3e {series.name}: \x3cb\x3e{point.low}\x3c/b\x3e - \x3cb\x3e{point.high}\x3c/b\x3e\x3cbr/\x3e' }, whiskerWidth: null }, {
            type: "errorbar", pointArrayMap: ["low", "high"], toYData: function (a) { return [a.low, a.high] }, pointValKey: "high", doQuartiles: !1, drawDataLabels: q.arearange ? function () {
                var a =
                    this.pointValKey; q.arearange.prototype.drawDataLabels.call(this); p(this.data, function (g) { g.y = g[a] })
            } : v, getColumnMetrics: function () { return this.linkedParent && this.linkedParent.columnMetrics || q.column.prototype.getColumnMetrics.call(this) }
        })
    })(w); (function (a) {
        var p = a.correctFloat, v = a.isNumber, u = a.pick, q = a.Point, r = a.Series, g = a.seriesType, m = a.seriesTypes; g("waterfall", "column", { dataLabels: { inside: !0 }, lineWidth: 1, lineColor: "#333333", dashStyle: "dot", borderColor: "#333333", states: { hover: { lineWidthPlus: 0 } } },
            {
                pointValKey: "y", showLine: !0, generatePoints: function () { var b = this.options.threshold, c, a, k, e; m.column.prototype.generatePoints.apply(this); k = 0; for (a = this.points.length; k < a; k++)c = this.points[k], e = this.processedYData[k], c.isSum ? c.y = p(e) : c.isIntermediateSum && (c.y = p(e - b), b = e) }, translate: function () {
                    var b = this.options, c = this.yAxis, a, k, e, f, h, t, l, n, g, q, p = u(b.minPointLength, 5), r = p / 2, v = b.threshold, w = b.stacking, A; m.column.prototype.translate.apply(this); n = g = v; k = this.points; a = 0; for (b = k.length; a < b; a++)e = k[a], l =
                        this.processedYData[a], f = e.shapeArgs, h = w && c.stacks[(this.negStacks && l < v ? "-" : "") + this.stackKey], A = this.getStackIndicator(A, e.x, this.index), q = u(h && h[e.x].points[A.key], [0, l]), t = Math.max(n, n + e.y) + q[0], f.y = c.translate(t, 0, 1, 0, 1), e.isSum ? (f.y = c.translate(q[1], 0, 1, 0, 1), f.height = Math.min(c.translate(q[0], 0, 1, 0, 1), c.len) - f.y) : e.isIntermediateSum ? (f.y = c.translate(q[1], 0, 1, 0, 1), f.height = Math.min(c.translate(g, 0, 1, 0, 1), c.len) - f.y, g = q[1]) : (f.height = 0 < l ? c.translate(n, 0, 1, 0, 1) - f.y : c.translate(n, 0, 1, 0, 1) - c.translate(n -
                            l, 0, 1, 0, 1), n += h && h[e.x] ? h[e.x].total : l), 0 > f.height && (f.y += f.height, f.height *= -1), e.plotY = f.y = Math.round(f.y) - this.borderWidth % 2 / 2, f.height = Math.max(Math.round(f.height), .001), e.yBottom = f.y + f.height, f.height <= p && !e.isNull ? (f.height = p, f.y -= r, e.plotY = f.y, e.minPointLengthOffset = 0 > e.y ? -r : r) : e.minPointLengthOffset = 0, f = e.plotY + (e.negative ? f.height : 0), this.chart.inverted ? e.tooltipPos[0] = c.len - f : e.tooltipPos[1] = f
                }, processData: function (b) {
                    var c = this.yData, a = this.options.data, k, e = c.length, f, h, t, l, n, g; h = f = t =
                        l = this.options.threshold || 0; for (g = 0; g < e; g++)n = c[g], k = a && a[g] ? a[g] : {}, "sum" === n || k.isSum ? c[g] = p(h) : "intermediateSum" === n || k.isIntermediateSum ? c[g] = p(f) : (h += n, f += n), t = Math.min(h, t), l = Math.max(h, l); r.prototype.processData.call(this, b); this.options.stacking || (this.dataMin = t, this.dataMax = l)
                }, toYData: function (b) { return b.isSum ? 0 === b.x ? null : "sum" : b.isIntermediateSum ? 0 === b.x ? null : "intermediateSum" : b.y }, pointAttribs: function (b, c) {
                    var a = this.options.upColor; a && !b.options.color && (b.color = 0 < b.y ? a : null); b = m.column.prototype.pointAttribs.call(this,
                        b, c); delete b.dashstyle; return b
                }, getGraphPath: function () { return ["M", 0, 0] }, getCrispPath: function () { var b = this.data, c = b.length, a = this.graph.strokeWidth() + this.borderWidth, a = Math.round(a) % 2 / 2, k = this.xAxis.reversed, e = this.yAxis.reversed, f = [], h, g, l; for (l = 1; l < c; l++) { g = b[l].shapeArgs; h = b[l - 1].shapeArgs; g = ["M", h.x + (k ? 0 : h.width), h.y + b[l - 1].minPointLengthOffset + a, "L", g.x + (k ? h.width : 0), h.y + b[l - 1].minPointLengthOffset + a]; if (0 > b[l - 1].y && !e || 0 < b[l - 1].y && e) g[2] += h.height, g[5] += h.height; f = f.concat(g) } return f },
                drawGraph: function () { r.prototype.drawGraph.call(this); this.graph.attr({ d: this.getCrispPath() }) }, setStackedPoints: function () { var b = this.options, a, d; r.prototype.setStackedPoints.apply(this, arguments); a = this.stackedYData ? this.stackedYData.length : 0; for (d = 1; d < a; d++)b.data[d].isSum || b.data[d].isIntermediateSum || (this.stackedYData[d] += this.stackedYData[d - 1]) }, getExtremes: function () { if (this.options.stacking) return r.prototype.getExtremes.apply(this, arguments) }
            }, {
                getClassName: function () {
                    var b = q.prototype.getClassName.call(this);
                    this.isSum ? b += " highcharts-sum" : this.isIntermediateSum && (b += " highcharts-intermediate-sum"); return b
                }, isValid: function () { return v(this.y, !0) || this.isSum || this.isIntermediateSum }
            })
    })(w); (function (a) {
        var p = a.Series, v = a.seriesType, u = a.seriesTypes; v("polygon", "scatter", { marker: { enabled: !1, states: { hover: { enabled: !1 } } }, stickyTracking: !1, tooltip: { followPointer: !0, pointFormat: "" }, trackByArea: !0 }, {
            type: "polygon", getGraphPath: function () {
                for (var a = p.prototype.getGraphPath.call(this), r = a.length + 1; r--;)(r === a.length ||
                    "M" === a[r]) && 0 < r && a.splice(r, 0, "z"); return this.areaPath = a
            }, drawGraph: function () { this.options.fillColor = this.color; u.area.prototype.drawGraph.call(this) }, drawLegendSymbol: a.LegendSymbolMixin.drawRectangle, drawTracker: p.prototype.drawTracker, setStackedPoints: a.noop
        })
    })(w); (function (a) {
        var p = a.arrayMax, v = a.arrayMin, u = a.Axis, q = a.color, r = a.each, g = a.isNumber, m = a.noop, b = a.pick, c = a.pInt, d = a.Point, k = a.Series, e = a.seriesType, f = a.seriesTypes; e("bubble", "scatter", {
            dataLabels: {
                formatter: function () { return this.point.z },
                inside: !0, verticalAlign: "middle"
            }, animationLimit: 250, marker: { lineColor: null, lineWidth: 1, fillOpacity: .5, radius: null, states: { hover: { radiusPlus: 0 } }, symbol: "circle" }, minSize: 8, maxSize: "20%", softThreshold: !1, states: { hover: { halo: { size: 5 } } }, tooltip: { pointFormat: "({point.x}, {point.y}), Size: {point.z}" }, turboThreshold: 0, zThreshold: 0, zoneAxis: "z"
        }, {
            pointArrayMap: ["y", "z"], parallelArrays: ["x", "y", "z"], trackerGroups: ["group", "dataLabelsGroup"], specialGroup: "group", bubblePadding: !0, zoneAxis: "z", directTouch: !0,
                pointAttribs: function (b, a) { var c = this.options.marker.fillOpacity; b = k.prototype.pointAttribs.call(this, b, a); 1 !== c && (b.fill = q(b.fill).setOpacity(c).get("rgba")); return b }, getRadii: function (b, a, c, d) {
                    var e, f, h, k = this.zData, l = [], n = this.options, t = "width" !== n.sizeBy, m = n.zThreshold, p = a - b; f = 0; for (e = k.length; f < e; f++)h = k[f], n.sizeByAbsoluteValue && null !== h && (h = Math.abs(h - m), a = p = Math.max(a - m, Math.abs(b - m)), b = 0), g(h) ? h < b ? h = c / 2 - 1 : (h = 0 < p ? (h - b) / p : .5, t && 0 <= h && (h = Math.sqrt(h)), h = Math.ceil(c + h * (d - c)) / 2) : h = null, l.push(h);
                    this.radii = l
                }, animate: function (b) { !b && this.points.length < this.options.animationLimit && (r(this.points, function (b) { var a = b.graphic, c; a && a.width && (c = { x: a.x, y: a.y, width: a.width, height: a.height }, a.attr({ x: b.plotX, y: b.plotY, width: 1, height: 1 }), a.animate(c, this.options.animation)) }, this), this.animate = null) }, translate: function () {
                    var b, c = this.data, d, e, k = this.radii; f.scatter.prototype.translate.call(this); for (b = c.length; b--;)d = c[b], e = k ? k[b] : 0, g(e) && e >= this.minPxSize / 2 ? (d.marker = a.extend(d.marker, {
                        radius: e, width: 2 *
                            e, height: 2 * e
                    }), d.dlBox = { x: d.plotX - e, y: d.plotY - e, width: 2 * e, height: 2 * e }) : d.shapeArgs = d.plotY = d.dlBox = void 0
                }, alignDataLabel: f.column.prototype.alignDataLabel, buildKDTree: m, applyZones: m
            }, { haloPath: function (b) { return d.prototype.haloPath.call(this, 0 === b ? 0 : (this.marker ? this.marker.radius || 0 : 0) + b) }, ttBelow: !1 }); u.prototype.beforePadding = function () {
                var d = this, e = this.len, f = this.chart, k = 0, m = e, q = this.isXAxis, u = q ? "xData" : "yData", w = this.min, z = {}, K = Math.min(f.plotWidth, f.plotHeight), A = Number.MAX_VALUE, F = -Number.MAX_VALUE,
                G = this.max - w, E = e / G, H = []; r(this.series, function (e) { var h = e.options; !e.bubblePadding || !e.visible && f.options.chart.ignoreHiddenSeries || (d.allowZoomOutside = !0, H.push(e), q && (r(["minSize", "maxSize"], function (b) { var a = h[b], d = /%$/.test(a), a = c(a); z[b] = d ? K * a / 100 : a }), e.minPxSize = z.minSize, e.maxPxSize = Math.max(z.maxSize, z.minSize), e = a.grep(e.zData, a.isNumber), e.length && (A = b(h.zMin, Math.min(A, Math.max(v(e), !1 === h.displayNegative ? h.zThreshold : -Number.MAX_VALUE))), F = b(h.zMax, Math.max(F, p(e)))))) }); r(H, function (b) {
                    var a =
                        b[u], c = a.length, e; q && b.getRadii(A, F, b.minPxSize, b.maxPxSize); if (0 < G) for (; c--;)g(a[c]) && d.dataMin <= a[c] && a[c] <= d.dataMax && (e = b.radii[c], k = Math.min((a[c] - w) * E - e, k), m = Math.max((a[c] - w) * E + e, m))
                }); H.length && 0 < G && !this.isLog && (m -= e, E *= (e + k - m) / e, r([["min", "userMin", k], ["max", "userMax", m]], function (a) { void 0 === b(d.options[a[0]], d[a[1]]) && (d[a[0]] += a[2] / E) }))
            }
    })(w); (function (a) {
        var p = a.each, v = a.pick, u = a.Series, q = a.seriesTypes, r = a.wrap, g = u.prototype, m = a.Pointer.prototype; a.polarExtended || (a.polarExtended = !0,
            g.searchPointByAngle = function (b) { var a = this.chart, d = this.xAxis.pane.center; return this.searchKDTree({ clientX: 180 + -180 / Math.PI * Math.atan2(b.chartX - d[0] - a.plotLeft, b.chartY - d[1] - a.plotTop) }) }, g.getConnectors = function (b, a, d, k) {
                var c, f, h, g, l, n, m, p; f = k ? 1 : 0; c = 0 <= a && a <= b.length - 1 ? a : 0 > a ? b.length - 1 + a : 0; a = 0 > c - 1 ? b.length - (1 + f) : c - 1; f = c + 1 > b.length - 1 ? f : c + 1; h = b[a]; f = b[f]; g = h.plotX; h = h.plotY; l = f.plotX; n = f.plotY; f = b[c].plotX; c = b[c].plotY; g = (1.5 * f + g) / 2.5; h = (1.5 * c + h) / 2.5; l = (1.5 * f + l) / 2.5; m = (1.5 * c + n) / 2.5; n = Math.sqrt(Math.pow(g -
                    f, 2) + Math.pow(h - c, 2)); p = Math.sqrt(Math.pow(l - f, 2) + Math.pow(m - c, 2)); g = Math.atan2(h - c, g - f); m = Math.PI / 2 + (g + Math.atan2(m - c, l - f)) / 2; Math.abs(g - m) > Math.PI / 2 && (m -= Math.PI); g = f + Math.cos(m) * n; h = c + Math.sin(m) * n; l = f + Math.cos(Math.PI + m) * p; m = c + Math.sin(Math.PI + m) * p; f = { rightContX: l, rightContY: m, leftContX: g, leftContY: h, plotX: f, plotY: c }; d && (f.prevPointCont = this.getConnectors(b, a, !1, k)); return f
            }, r(g, "buildKDTree", function (b) {
                this.chart.polar && (this.kdByAngle ? this.searchPoint = this.searchPointByAngle : this.options.findNearestPointBy =
                    "xy"); b.apply(this)
            }), g.toXY = function (b) { var a, d = this.chart, k = b.plotX; a = b.plotY; b.rectPlotX = k; b.rectPlotY = a; a = this.xAxis.postTranslate(b.plotX, this.yAxis.len - a); b.plotX = b.polarPlotX = a.x - d.plotLeft; b.plotY = b.polarPlotY = a.y - d.plotTop; this.kdByAngle ? (d = (k / Math.PI * 180 + this.xAxis.pane.options.startAngle) % 360, 0 > d && (d += 360), b.clientX = d) : b.clientX = b.plotX }, q.spline && (r(q.spline.prototype, "getPointSpline", function (b, a, d, k) {
                this.chart.polar ? k ? (b = this.getConnectors(a, k, !0, this.connectEnds), b = ["C", b.prevPointCont.rightContX,
                    b.prevPointCont.rightContY, b.leftContX, b.leftContY, b.plotX, b.plotY]) : b = ["M", d.plotX, d.plotY] : b = b.call(this, a, d, k); return b
            }), q.areasplinerange && (q.areasplinerange.prototype.getPointSpline = q.spline.prototype.getPointSpline)), a.addEvent(u, "afterTranslate", function () {
                var b = this.chart, c, d; if (b.polar) {
                this.kdByAngle = b.tooltip && b.tooltip.shared; if (!this.preventPostTranslate) for (c = this.points, d = c.length; d--;)this.toXY(c[d]); this.hasClipCircleSetter || (this.hasClipCircleSetter = !!a.addEvent(this, "afterRender",
                    function () { var c; b.polar && (c = this.yAxis.center, this.group.clip(b.renderer.clipCircle(c[0], c[1], c[2] / 2)), this.setClip = a.noop) }))
                }
            }, { order: 2 }), r(g, "getGraphPath", function (b, a) { var c = this, g, e, f; if (this.chart.polar) { a = a || this.points; for (g = 0; g < a.length; g++)if (!a[g].isNull) { e = g; break } !1 !== this.options.connectEnds && void 0 !== e && (this.connectEnds = !0, a.splice(a.length, 0, a[e]), f = !0); p(a, function (a) { void 0 === a.polarPlotY && c.toXY(a) }) } g = b.apply(this, [].slice.call(arguments, 1)); f && a.pop(); return g }), u = function (a,
                c) { var b = this.chart, g = this.options.animation, e = this.group, f = this.markerGroup, h = this.xAxis.center, m = b.plotLeft, l = b.plotTop; b.polar ? b.renderer.isSVG && (!0 === g && (g = {}), c ? (a = { translateX: h[0] + m, translateY: h[1] + l, scaleX: .001, scaleY: .001 }, e.attr(a), f && f.attr(a)) : (a = { translateX: m, translateY: l, scaleX: 1, scaleY: 1 }, e.animate(a, g), f && f.animate(a, g), this.animate = null)) : a.call(this, c) }, r(g, "animate", u), q.column && (q = q.column.prototype, q.polarArc = function (a, c, d, g) {
                    var b = this.xAxis.center, f = this.yAxis.len; return this.chart.renderer.symbols.arc(b[0],
                        b[1], f - c, null, { start: d, end: g, innerR: f - v(a, f) })
                }, r(q, "animate", u), r(q, "translate", function (a) { var b = this.xAxis, d = b.startAngleRad, g, e, f; this.preventPostTranslate = !0; a.call(this); if (b.isRadial) for (g = this.points, f = g.length; f--;)e = g[f], a = e.barX + d, e.shapeType = "path", e.shapeArgs = { d: this.polarArc(e.yBottom, e.plotY, a, a + e.pointWidth) }, this.toXY(e), e.tooltipPos = [e.plotX, e.plotY], e.ttBelow = e.plotY > b.center[1] }), r(q, "alignDataLabel", function (a, c, d, k, e, f) {
                    this.chart.polar ? (a = c.rectPlotX / Math.PI * 180, null === k.align &&
                        (k.align = 20 < a && 160 > a ? "left" : 200 < a && 340 > a ? "right" : "center"), null === k.verticalAlign && (k.verticalAlign = 45 > a || 315 < a ? "bottom" : 135 < a && 225 > a ? "top" : "middle"), g.alignDataLabel.call(this, c, d, k, e, f)) : a.call(this, c, d, k, e, f)
                })), r(m, "getCoordinates", function (a, c) {
                    var b = this.chart, g = { xAxis: [], yAxis: [] }; b.polar ? p(b.axes, function (a) {
                        var d = a.isXAxis, e = a.center, k = c.chartX - e[0] - b.plotLeft, e = c.chartY - e[1] - b.plotTop; g[d ? "xAxis" : "yAxis"].push({
                            axis: a, value: a.translate(d ? Math.PI - Math.atan2(k, e) : Math.sqrt(Math.pow(k, 2) + Math.pow(e,
                                2)), !0)
                        })
                    }) : g = a.call(this, c); return g
                }), a.SVGRenderer.prototype.clipCircle = function (b, c, d) { var g = a.uniqueKey(), e = this.createElement("clipPath").attr({ id: g }).add(this.defs); b = this.circle(b, c, d).add(e); b.id = g; b.clipPath = e; return b }, a.addEvent(a.Chart, "getAxes", function () { this.pane || (this.pane = []); p(a.splat(this.options.pane), function (b) { new a.Pane(b, this) }, this) }), a.addEvent(a.Chart, "afterDrawChartBox", function () { p(this.pane, function (a) { a.render() }) }), r(a.Chart.prototype, "get", function (b, c) {
                    return a.find(this.pane,
                        function (a) { return a.options.id === c }) || b.call(this, c)
                }))
    })(w)
});