/* jquery.sparkline 2.1.2 - http://omnipotent.net/jquery.sparkline/
 ** Licensed under the New BSD License - see above site for details */

(function (a, b, c) {
  (function (a) {
    typeof define == "function" && define.amd
      ? define(["jquery"], a)
      : jQuery && !jQuery.fn.sparkline && a(jQuery);
  })(function (d) {
    "use strict";
    var e = {},
      f,
      g,
      h,
      i,
      j,
      k,
      l,
      m,
      n,
      o,
      p,
      q,
      r,
      s,
      t,
      u,
      v,
      w,
      x,
      y,
      z,
      A,
      B,
      C,
      D,
      E,
      F,
      G,
      H,
      I,
      J,
      K,
      L = 0;
    (f = function () {
      return {
        common: {
          type: "line",
          lineColor: "#00f",
          fillColor: "#cdf",
          defaultPixelsPerValue: 3,
          width: "auto",
          height: "auto",
          composite: !1,
          tagValuesAttribute: "values",
          tagOptionsPrefix: "spark",
          enableTagOptions: !1,
          enableHighlight: !0,
          highlightLighten: 1.4,
          tooltipSkipNull: !0,
          tooltipPrefix: "",
          tooltipSuffix: "",
          disableHiddenCheck: !1,
          numberFormatter: !1,
          numberDigitGroupCount: 3,
          numberDigitGroupSep: ",",
          numberDecimalMark: ".",
          disableTooltips: !1,
          disableInteraction: !1,
        },
        line: {
          spotColor: "#f80",
          highlightSpotColor: "#5f5",
          highlightLineColor: "#f22",
          spotRadius: 1.5,
          minSpotColor: "#f80",
          maxSpotColor: "#f80",
          lineWidth: 1,
          normalRangeMin: c,
          normalRangeMax: c,
          normalRangeColor: "#ccc",
          drawNormalOnTop: !1,
          chartRangeMin: c,
          chartRangeMax: c,
          chartRangeMinX: c,
          chartRangeMaxX: c,
          tooltipFormat: new h(
            '<span style="color: {{color}}">&#9679;</span> {{prefix}}{{y}}{{suffix}}'
          ),
        },
        bar: {
          barColor: "#3366cc",
          negBarColor: "#f44",
          stackedBarColor: [
            "#3366cc",
            "#dc3912",
            "#ff9900",
            "#109618",
            "#66aa00",
            "#dd4477",
            "#0099c6",
            "#990099",
          ],
          zeroColor: c,
          nullColor: c,
          zeroAxis: !0,
          barWidth: 4,
          barSpacing: 1,
          chartRangeMax: c,
          chartRangeMin: c,
          chartRangeClip: !1,
          colorMap: c,
          tooltipFormat: new h(
            '<span style="color: {{color}}">&#9679;</span> {{prefix}}{{value}}{{suffix}}'
          ),
        },
        tristate: {
          barWidth: 4,
          barSpacing: 1,
          posBarColor: "#6f6",
          negBarColor: "#f44",
          zeroBarColor: "#999",
          colorMap: {},
          tooltipFormat: new h(
            '<span style="color: {{color}}">&#9679;</span> {{value:map}}'
          ),
          tooltipValueLookups: { map: { "-1": "Loss", 0: "Draw", 1: "Win" } },
        },
        discrete: {
          lineHeight: "auto",
          thresholdColor: c,
          thresholdValue: 0,
          chartRangeMax: c,
          chartRangeMin: c,
          chartRangeClip: !1,
          tooltipFormat: new h("{{prefix}}{{value}}{{suffix}}"),
        },
        bullet: {
          targetColor: "#f33",
          targetWidth: 3,
          performanceColor: "#33f",
          rangeColors: ["#d3dafe", "#a8b6ff", "#7f94ff"],
          base: c,
          tooltipFormat: new h("{{fieldkey:fields}} - {{value}}"),
          tooltipValueLookups: {
            fields: { r: "Range", p: "Performance", t: "Target" },
          },
        },
        pie: {
          offset: 0,
          sliceColors: [
            "#3366cc",
            "#dc3912",
            "#ff9900",
            "#109618",
            "#66aa00",
            "#dd4477",
            "#0099c6",
            "#990099",
          ],
          borderWidth: 0,
          borderColor: "#000",
          tooltipFormat: new h(
            '<span style="color: {{color}}">&#9679;</span> {{value}} ({{percent.1}}%)'
          ),
        },
        box: {
          raw: !1,
          boxLineColor: "#000",
          boxFillColor: "#cdf",
          whiskerColor: "#000",
          outlierLineColor: "#333",
          outlierFillColor: "#fff",
          medianColor: "#f00",
          showOutliers: !0,
          outlierIQR: 1.5,
          spotRadius: 1.5,
          target: c,
          targetColor: "#4a2",
          chartRangeMax: c,
          chartRangeMin: c,
          tooltipFormat: new h("{{field:fields}}: {{value}}"),
          tooltipFormatFieldlistKey: "field",
          tooltipValueLookups: {
            fields: {
              lq: "Lower Quartile",
              med: "Median",
              uq: "Upper Quartile",
              lo: "Left Outlier",
              ro: "Right Outlier",
              lw: "Left Whisker",
              rw: "Right Whisker",
            },
          },
        },
      };
    }),
      (E =
        '.jqstooltip { position: absolute;left: 0px;top: 0px;visibility: hidden;background: rgb(0, 0, 0) transparent;background-color: rgba(0,0,0,0.6);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr=#99000000, endColorstr=#99000000);-ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr=#99000000, endColorstr=#99000000)";color: white;font: 10px arial, san serif;text-align: left;white-space: nowrap;padding: 5px;border: 1px solid white;z-index: 10000;}.jqsfield { color: white;font: 10px arial, san serif;text-align: left;}'),
      (g = function () {
        var a, b;
        return (
          (a = function () {
            this.init.apply(this, arguments);
          }),
          arguments.length > 1
            ? (arguments[0]
                ? ((a.prototype = d.extend(
                    new arguments[0](),
                    arguments[arguments.length - 1]
                  )),
                  (a._super = arguments[0].prototype))
                : (a.prototype = arguments[arguments.length - 1]),
              arguments.length > 2 &&
                ((b = Array.prototype.slice.call(arguments, 1, -1)),
                b.unshift(a.prototype),
                d.extend.apply(d, b)))
            : (a.prototype = arguments[0]),
          (a.prototype.cls = a),
          a
        );
      }),
      (d.SPFormatClass = h =
        g({
          fre: /\{\{([\w.]+?)(:(.+?))?\}\}/g,
          precre: /(\w+)\.(\d+)/,
          init: function (a, b) {
            (this.format = a), (this.fclass = b);
          },
          render: function (a, b, d) {
            var e = this,
              f = a,
              g,
              h,
              i,
              j,
              k;
            return this.format.replace(this.fre, function () {
              var a;
              return (
                (h = arguments[1]),
                (i = arguments[3]),
                (g = e.precre.exec(h)),
                g ? ((k = g[2]), (h = g[1])) : (k = !1),
                (j = f[h]),
                j === c
                  ? ""
                  : i && b && b[i]
                  ? ((a = b[i]), a.get ? b[i].get(j) || j : b[i][j] || j)
                  : (n(j) &&
                      (d.get("numberFormatter")
                        ? (j = d.get("numberFormatter")(j))
                        : (j = s(
                            j,
                            k,
                            d.get("numberDigitGroupCount"),
                            d.get("numberDigitGroupSep"),
                            d.get("numberDecimalMark")
                          ))),
                    j)
              );
            });
          },
        })),
      (d.spformat = function (a, b) {
        return new h(a, b);
      }),
      (i = function (a, b, c) {
        return a < b ? b : a > c ? c : a;
      }),
      (j = function (a, c) {
        var d;
        return c === 2
          ? ((d = b.floor(a.length / 2)),
            a.length % 2 ? a[d] : (a[d - 1] + a[d]) / 2)
          : a.length % 2
          ? ((d = (a.length * c + c) / 4),
            d % 1 ? (a[b.floor(d)] + a[b.floor(d) - 1]) / 2 : a[d - 1])
          : ((d = (a.length * c + 2) / 4),
            d % 1 ? (a[b.floor(d)] + a[b.floor(d) - 1]) / 2 : a[d - 1]);
      }),
      (k = function (a) {
        var b;
        switch (a) {
          case "undefined":
            a = c;
            break;
          case "null":
            a = null;
            break;
          case "true":
            a = !0;
            break;
          case "false":
            a = !1;
            break;
          default:
            (b = parseFloat(a)), a == b && (a = b);
        }
        return a;
      }),
      (l = function (a) {
        var b,
          c = [];
        for (b = a.length; b--; ) c[b] = k(a[b]);
        return c;
      }),
      (m = function (a, b) {
        var c,
          d,
          e = [];
        for (c = 0, d = a.length; c < d; c++) a[c] !== b && e.push(a[c]);
        return e;
      }),
      (n = function (a) {
        return !isNaN(parseFloat(a)) && isFinite(a);
      }),
      (s = function (a, b, c, e, f) {
        var g, h;
        (a = (b === !1 ? parseFloat(a).toString() : a.toFixed(b)).split("")),
          (g = (g = d.inArray(".", a)) < 0 ? a.length : g),
          g < a.length && (a[g] = f);
        for (h = g - c; h > 0; h -= c) a.splice(h, 0, e);
        return a.join("");
      }),
      (o = function (a, b, c) {
        var d;
        for (d = b.length; d--; ) {
          if (c && b[d] === null) continue;
          if (b[d] !== a) return !1;
        }
        return !0;
      }),
      (p = function (a) {
        var b = 0,
          c;
        for (c = a.length; c--; ) b += typeof a[c] == "number" ? a[c] : 0;
        return b;
      }),
      (r = function (a) {
        return d.isArray(a) ? a : [a];
      }),
      (q = function (b) {
        var c;
        a.createStyleSheet
          ? (a.createStyleSheet().cssText = b)
          : ((c = a.createElement("style")),
            (c.type = "text/css"),
            a.getElementsByTagName("head")[0].appendChild(c),
            (c[
              typeof a.body.style.WebkitAppearance == "string"
                ? "innerText"
                : "innerHTML"
            ] = b));
      }),
      (d.fn.simpledraw = function (b, e, f, g) {
        var h, i;
        if (f && (h = this.data("_jqs_vcanvas"))) return h;
        if (d.fn.sparkline.canvas === !1) return !1;
        if (d.fn.sparkline.canvas === c) {
          var j = a.createElement("canvas");
          if (!j.getContext || !j.getContext("2d")) {
            if (!a.namespaces || !!a.namespaces.v)
              return (d.fn.sparkline.canvas = !1), !1;
            a.namespaces.add(
              "v",
              "urn:schemas-microsoft-com:vml",
              "#default#VML"
            ),
              (d.fn.sparkline.canvas = function (a, b, c, d) {
                return new J(a, b, c);
              });
          } else
            d.fn.sparkline.canvas = function (a, b, c, d) {
              return new I(a, b, c, d);
            };
        }
        return (
          b === c && (b = d(this).innerWidth()),
          e === c && (e = d(this).innerHeight()),
          (h = d.fn.sparkline.canvas(b, e, this, g)),
          (i = d(this).data("_jqs_mhandler")),
          i && i.registerCanvas(h),
          h
        );
      }),
      (d.fn.cleardraw = function () {
        var a = this.data("_jqs_vcanvas");
        a && a.reset();
      }),
      (d.RangeMapClass = t =
        g({
          init: function (a) {
            var b,
              c,
              d = [];
            for (b in a)
              a.hasOwnProperty(b) &&
                typeof b == "string" &&
                b.indexOf(":") > -1 &&
                ((c = b.split(":")),
                (c[0] = c[0].length === 0 ? -Infinity : parseFloat(c[0])),
                (c[1] = c[1].length === 0 ? Infinity : parseFloat(c[1])),
                (c[2] = a[b]),
                d.push(c));
            (this.map = a), (this.rangelist = d || !1);
          },
          get: function (a) {
            var b = this.rangelist,
              d,
              e,
              f;
            if ((f = this.map[a]) !== c) return f;
            if (b)
              for (d = b.length; d--; ) {
                e = b[d];
                if (e[0] <= a && e[1] >= a) return e[2];
              }
            return c;
          },
        })),
      (d.range_map = function (a) {
        return new t(a);
      }),
      (u = g({
        init: function (a, b) {
          var c = d(a);
          (this.$el = c),
            (this.options = b),
            (this.currentPageX = 0),
            (this.currentPageY = 0),
            (this.el = a),
            (this.splist = []),
            (this.tooltip = null),
            (this.over = !1),
            (this.displayTooltips = !b.get("disableTooltips")),
            (this.highlightEnabled = !b.get("disableHighlight"));
        },
        registerSparkline: function (a) {
          this.splist.push(a), this.over && this.updateDisplay();
        },
        registerCanvas: function (a) {
          var b = d(a.canvas);
          (this.canvas = a),
            (this.$canvas = b),
            b.mouseenter(d.proxy(this.mouseenter, this)),
            b.mouseleave(d.proxy(this.mouseleave, this)),
            b.click(d.proxy(this.mouseclick, this));
        },
        reset: function (a) {
          (this.splist = []),
            this.tooltip && a && (this.tooltip.remove(), (this.tooltip = c));
        },
        mouseclick: function (a) {
          var b = d.Event("sparklineClick");
          (b.originalEvent = a),
            (b.sparklines = this.splist),
            this.$el.trigger(b);
        },
        mouseenter: function (b) {
          d(a.body).unbind("mousemove.jqs"),
            d(a.body).bind("mousemove.jqs", d.proxy(this.mousemove, this)),
            (this.over = !0),
            (this.currentPageX = b.pageX),
            (this.currentPageY = b.pageY),
            (this.currentEl = b.target),
            !this.tooltip &&
              this.displayTooltips &&
              ((this.tooltip = new v(this.options)),
              this.tooltip.updatePosition(b.pageX, b.pageY)),
            this.updateDisplay();
        },
        mouseleave: function () {
          d(a.body).unbind("mousemove.jqs");
          var b = this.splist,
            c = b.length,
            e = !1,
            f,
            g;
          (this.over = !1),
            (this.currentEl = null),
            this.tooltip && (this.tooltip.remove(), (this.tooltip = null));
          for (g = 0; g < c; g++)
            (f = b[g]), f.clearRegionHighlight() && (e = !0);
          e && this.canvas.render();
        },
        mousemove: function (a) {
          (this.currentPageX = a.pageX),
            (this.currentPageY = a.pageY),
            (this.currentEl = a.target),
            this.tooltip && this.tooltip.updatePosition(a.pageX, a.pageY),
            this.updateDisplay();
        },
        updateDisplay: function () {
          var a = this.splist,
            b = a.length,
            c = !1,
            e = this.$canvas.offset(),
            f = this.currentPageX - e.left,
            g = this.currentPageY - e.top,
            h,
            i,
            j,
            k,
            l;
          if (!this.over) return;
          for (j = 0; j < b; j++)
            (i = a[j]),
              (k = i.setRegionHighlight(this.currentEl, f, g)),
              k && (c = !0);
          if (c) {
            (l = d.Event("sparklineRegionChange")),
              (l.sparklines = this.splist),
              this.$el.trigger(l);
            if (this.tooltip) {
              h = "";
              for (j = 0; j < b; j++)
                (i = a[j]), (h += i.getCurrentRegionTooltip());
              this.tooltip.setContent(h);
            }
            this.disableHighlight || this.canvas.render();
          }
          k === null && this.mouseleave();
        },
      })),
      (v = g({
        sizeStyle:
          "position: static !important;display: block !important;visibility: hidden !important;float: left !important;",
        init: function (b) {
          var c = b.get("tooltipClassname", "jqstooltip"),
            e = this.sizeStyle,
            f;
          (this.container = b.get("tooltipContainer") || a.body),
            (this.tooltipOffsetX = b.get("tooltipOffsetX", 10)),
            (this.tooltipOffsetY = b.get("tooltipOffsetY", 12)),
            d("#jqssizetip").remove(),
            d("#jqstooltip").remove(),
            (this.sizetip = d("<div/>", {
              id: "jqssizetip",
              style: e,
              class: c,
            })),
            (this.tooltip = d("<div/>", {
              id: "jqstooltip",
              class: c,
            }).appendTo(this.container)),
            (f = this.tooltip.offset()),
            (this.offsetLeft = f.left),
            (this.offsetTop = f.top),
            (this.hidden = !0),
            d(window).unbind("resize.jqs scroll.jqs"),
            d(window).bind(
              "resize.jqs scroll.jqs",
              d.proxy(this.updateWindowDims, this)
            ),
            this.updateWindowDims();
        },
        updateWindowDims: function () {
          (this.scrollTop = d(window).scrollTop()),
            (this.scrollLeft = d(window).scrollLeft()),
            (this.scrollRight = this.scrollLeft + d(window).width()),
            this.updatePosition();
        },
        getSize: function (a) {
          this.sizetip.html(a).appendTo(this.container),
            (this.width = this.sizetip.width() + 1),
            (this.height = this.sizetip.height()),
            this.sizetip.remove();
        },
        setContent: function (a) {
          if (!a) {
            this.tooltip.css("visibility", "hidden"), (this.hidden = !0);
            return;
          }
          this.getSize(a),
            this.tooltip.html(a).css({
              width: this.width,
              height: this.height,
              visibility: "visible",
            }),
            this.hidden && ((this.hidden = !1), this.updatePosition());
        },
        updatePosition: function (a, b) {
          if (a === c) {
            if (this.mousex === c) return;
            (a = this.mousex - this.offsetLeft),
              (b = this.mousey - this.offsetTop);
          } else
            (this.mousex = a -= this.offsetLeft),
              (this.mousey = b -= this.offsetTop);
          if (!this.height || !this.width || this.hidden) return;
          (b -= this.height + this.tooltipOffsetY),
            (a += this.tooltipOffsetX),
            b < this.scrollTop && (b = this.scrollTop),
            a < this.scrollLeft
              ? (a = this.scrollLeft)
              : a + this.width > this.scrollRight &&
                (a = this.scrollRight - this.width),
            this.tooltip.css({ left: a, top: b });
        },
        remove: function () {
          this.tooltip.remove(),
            this.sizetip.remove(),
            (this.sizetip = this.tooltip = c),
            d(window).unbind("resize.jqs scroll.jqs");
        },
      })),
      (F = function () {
        q(E);
      }),
      d(F),
      (K = []),
      (d.fn.sparkline = function (b, e) {
        return this.each(function () {
          var f = new d.fn.sparkline.options(this, e),
            g = d(this),
            h,
            i;
          h = function () {
            var e, h, i, j, k, l, m;
            if (b === "html" || b === c) {
              m = this.getAttribute(f.get("tagValuesAttribute"));
              if (m === c || m === null) m = g.html();
              e = m.replace(/(^\s*<!--)|(-->\s*$)|\s+/g, "").split(",");
            } else e = b;
            h =
              f.get("width") === "auto"
                ? e.length * f.get("defaultPixelsPerValue")
                : f.get("width");
            if (f.get("height") === "auto") {
              if (!f.get("composite") || !d.data(this, "_jqs_vcanvas"))
                (j = a.createElement("span")),
                  (j.innerHTML = "a"),
                  g.html(j),
                  (i = d(j).innerHeight() || d(j).height()),
                  d(j).remove(),
                  (j = null);
            } else i = f.get("height");
            f.get("disableInteraction")
              ? (k = !1)
              : ((k = d.data(this, "_jqs_mhandler")),
                k
                  ? f.get("composite") || k.reset()
                  : ((k = new u(this, f)), d.data(this, "_jqs_mhandler", k)));
            if (f.get("composite") && !d.data(this, "_jqs_vcanvas")) {
              d.data(this, "_jqs_errnotify") ||
                (alert(
                  "Attempted to attach a composite sparkline to an element with no existing sparkline"
                ),
                d.data(this, "_jqs_errnotify", !0));
              return;
            }
            (l = new d.fn.sparkline[f.get("type")](this, e, f, h, i)),
              l.render(),
              k && k.registerSparkline(l);
          };
          if (
            (d(this).html() &&
              !f.get("disableHiddenCheck") &&
              d(this).is(":hidden")) ||
            !d(this).parents("body").length
          ) {
            if (!f.get("composite") && d.data(this, "_jqs_pending"))
              for (i = K.length; i; i--)
                K[i - 1][0] == this && K.splice(i - 1, 1);
            K.push([this, h]), d.data(this, "_jqs_pending", !0);
          } else h.call(this);
        });
      }),
      (d.fn.sparkline.defaults = f()),
      (d.sparkline_display_visible = function () {
        var a,
          b,
          c,
          e = [];
        for (b = 0, c = K.length; b < c; b++)
          (a = K[b][0]),
            d(a).is(":visible") && !d(a).parents().is(":hidden")
              ? (K[b][1].call(a),
                d.data(K[b][0], "_jqs_pending", !1),
                e.push(b))
              : !d(a).closest("html").length &&
                !d.data(a, "_jqs_pending") &&
                (d.data(K[b][0], "_jqs_pending", !1), e.push(b));
        for (b = e.length; b; b--) K.splice(e[b - 1], 1);
      }),
      (d.fn.sparkline.options = g({
        init: function (a, b) {
          var c, f, g, h;
          (this.userOptions = b = b || {}),
            (this.tag = a),
            (this.tagValCache = {}),
            (f = d.fn.sparkline.defaults),
            (g = f.common),
            (this.tagOptionsPrefix =
              b.enableTagOptions && (b.tagOptionsPrefix || g.tagOptionsPrefix)),
            (h = this.getTagSetting("type")),
            h === e ? (c = f[b.type || g.type]) : (c = f[h]),
            (this.mergedOptions = d.extend({}, g, c, b));
        },
        getTagSetting: function (a) {
          var b = this.tagOptionsPrefix,
            d,
            f,
            g,
            h;
          if (b === !1 || b === c) return e;
          if (this.tagValCache.hasOwnProperty(a)) d = this.tagValCache.key;
          else {
            d = this.tag.getAttribute(b + a);
            if (d === c || d === null) d = e;
            else if (d.substr(0, 1) === "[") {
              d = d.substr(1, d.length - 2).split(",");
              for (f = d.length; f--; )
                d[f] = k(d[f].replace(/(^\s*)|(\s*$)/g, ""));
            } else if (d.substr(0, 1) === "{") {
              (g = d.substr(1, d.length - 2).split(",")), (d = {});
              for (f = g.length; f--; )
                (h = g[f].split(":", 2)),
                  (d[h[0].replace(/(^\s*)|(\s*$)/g, "")] = k(
                    h[1].replace(/(^\s*)|(\s*$)/g, "")
                  ));
            } else d = k(d);
            this.tagValCache.key = d;
          }
          return d;
        },
        get: function (a, b) {
          var d = this.getTagSetting(a),
            f;
          return d !== e ? d : (f = this.mergedOptions[a]) === c ? b : f;
        },
      })),
      (d.fn.sparkline._base = g({
        disabled: !1,
        init: function (a, b, e, f, g) {
          (this.el = a),
            (this.$el = d(a)),
            (this.values = b),
            (this.options = e),
            (this.width = f),
            (this.height = g),
            (this.currentRegion = c);
        },
        initTarget: function () {
          var a = !this.options.get("disableInteraction");
          (this.target = this.$el.simpledraw(
            this.width,
            this.height,
            this.options.get("composite"),
            a
          ))
            ? ((this.canvasWidth = this.target.pixelWidth),
              (this.canvasHeight = this.target.pixelHeight))
            : (this.disabled = !0);
        },
        render: function () {
          return this.disabled ? ((this.el.innerHTML = ""), !1) : !0;
        },
        getRegion: function (a, b) {},
        setRegionHighlight: function (a, b, d) {
          var e = this.currentRegion,
            f = !this.options.get("disableHighlight"),
            g;
          return b > this.canvasWidth || d > this.canvasHeight || b < 0 || d < 0
            ? null
            : ((g = this.getRegion(a, b, d)),
              e !== g
                ? (e !== c && f && this.removeHighlight(),
                  (this.currentRegion = g),
                  g !== c && f && this.renderHighlight(),
                  !0)
                : !1);
        },
        clearRegionHighlight: function () {
          return this.currentRegion !== c
            ? (this.removeHighlight(), (this.currentRegion = c), !0)
            : !1;
        },
        renderHighlight: function () {
          this.changeHighlight(!0);
        },
        removeHighlight: function () {
          this.changeHighlight(!1);
        },
        changeHighlight: function (a) {},
        getCurrentRegionTooltip: function () {
          var a = this.options,
            b = "",
            e = [],
            f,
            g,
            i,
            j,
            k,
            l,
            m,
            n,
            o,
            p,
            q,
            r,
            s,
            t;
          if (this.currentRegion === c) return "";
          (f = this.getCurrentRegionFields()), (q = a.get("tooltipFormatter"));
          if (q) return q(this, a, f);
          a.get("tooltipChartTitle") &&
            (b +=
              '<div class="jqs jqstitle">' +
              a.get("tooltipChartTitle") +
              "</div>\n"),
            (g = this.options.get("tooltipFormat"));
          if (!g) return "";
          d.isArray(g) || (g = [g]),
            d.isArray(f) || (f = [f]),
            (m = this.options.get("tooltipFormatFieldlist")),
            (n = this.options.get("tooltipFormatFieldlistKey"));
          if (m && n) {
            o = [];
            for (l = f.length; l--; )
              (p = f[l][n]), (t = d.inArray(p, m)) != -1 && (o[t] = f[l]);
            f = o;
          }
          (i = g.length), (s = f.length);
          for (l = 0; l < i; l++) {
            (r = g[l]),
              typeof r == "string" && (r = new h(r)),
              (j = r.fclass || "jqsfield");
            for (t = 0; t < s; t++)
              if (!f[t].isNull || !a.get("tooltipSkipNull"))
                d.extend(f[t], {
                  prefix: a.get("tooltipPrefix"),
                  suffix: a.get("tooltipSuffix"),
                }),
                  (k = r.render(f[t], a.get("tooltipValueLookups"), a)),
                  e.push('<div class="' + j + '">' + k + "</div>");
          }
          return e.length ? b + e.join("\n") : "";
        },
        getCurrentRegionFields: function () {},
        calcHighlightColor: function (a, c) {
          var d = c.get("highlightColor"),
            e = c.get("highlightLighten"),
            f,
            g,
            h,
            j;
          if (d) return d;
          if (e) {
            f =
              /^#([0-9a-f])([0-9a-f])([0-9a-f])$/i.exec(a) ||
              /^#([0-9a-f]{2})([0-9a-f]{2})([0-9a-f]{2})$/i.exec(a);
            if (f) {
              (h = []), (g = a.length === 4 ? 16 : 1);
              for (j = 0; j < 3; j++)
                h[j] = i(b.round(parseInt(f[j + 1], 16) * g * e), 0, 255);
              return "rgb(" + h.join(",") + ")";
            }
          }
          return a;
        },
      })),
      (w = {
        changeHighlight: function (a) {
          var b = this.currentRegion,
            c = this.target,
            e = this.regionShapes[b],
            f;
          e &&
            ((f = this.renderRegion(b, a)),
            d.isArray(f) || d.isArray(e)
              ? (c.replaceWithShapes(e, f),
                (this.regionShapes[b] = d.map(f, function (a) {
                  return a.id;
                })))
              : (c.replaceWithShape(e, f), (this.regionShapes[b] = f.id)));
        },
        render: function () {
          var a = this.values,
            b = this.target,
            c = this.regionShapes,
            e,
            f,
            g,
            h;
          if (!this.cls._super.render.call(this)) return;
          for (g = a.length; g--; ) {
            e = this.renderRegion(g);
            if (e)
              if (d.isArray(e)) {
                f = [];
                for (h = e.length; h--; ) e[h].append(), f.push(e[h].id);
                c[g] = f;
              } else e.append(), (c[g] = e.id);
            else c[g] = null;
          }
          b.render();
        },
      }),
      (d.fn.sparkline.line = x =
        g(d.fn.sparkline._base, {
          type: "line",
          init: function (a, b, c, d, e) {
            x._super.init.call(this, a, b, c, d, e),
              (this.vertices = []),
              (this.regionMap = []),
              (this.xvalues = []),
              (this.yvalues = []),
              (this.yminmax = []),
              (this.hightlightSpotId = null),
              (this.lastShapeId = null),
              this.initTarget();
          },
          getRegion: function (a, b, d) {
            var e,
              f = this.regionMap;
            for (e = f.length; e--; )
              if (f[e] !== null && b >= f[e][0] && b <= f[e][1]) return f[e][2];
            return c;
          },
          getCurrentRegionFields: function () {
            var a = this.currentRegion;
            return {
              isNull: this.yvalues[a] === null,
              x: this.xvalues[a],
              y: this.yvalues[a],
              color: this.options.get("lineColor"),
              fillColor: this.options.get("fillColor"),
              offset: a,
            };
          },
          renderHighlight: function () {
            var a = this.currentRegion,
              b = this.target,
              d = this.vertices[a],
              e = this.options,
              f = e.get("spotRadius"),
              g = e.get("highlightSpotColor"),
              h = e.get("highlightLineColor"),
              i,
              j;
            if (!d) return;
            f &&
              g &&
              ((i = b.drawCircle(d[0], d[1], f, c, g)),
              (this.highlightSpotId = i.id),
              b.insertAfterShape(this.lastShapeId, i)),
              h &&
                ((j = b.drawLine(
                  d[0],
                  this.canvasTop,
                  d[0],
                  this.canvasTop + this.canvasHeight,
                  h
                )),
                (this.highlightLineId = j.id),
                b.insertAfterShape(this.lastShapeId, j));
          },
          removeHighlight: function () {
            var a = this.target;
            this.highlightSpotId &&
              (a.removeShapeId(this.highlightSpotId),
              (this.highlightSpotId = null)),
              this.highlightLineId &&
                (a.removeShapeId(this.highlightLineId),
                (this.highlightLineId = null));
          },
          scanValues: function () {
            var a = this.values,
              c = a.length,
              d = this.xvalues,
              e = this.yvalues,
              f = this.yminmax,
              g,
              h,
              i,
              j,
              k;
            for (g = 0; g < c; g++)
              (h = a[g]),
                (i = typeof a[g] == "string"),
                (j = typeof a[g] == "object" && a[g] instanceof Array),
                (k = i && a[g].split(":")),
                i && k.length === 2
                  ? (d.push(Number(k[0])),
                    e.push(Number(k[1])),
                    f.push(Number(k[1])))
                  : j
                  ? (d.push(h[0]), e.push(h[1]), f.push(h[1]))
                  : (d.push(g),
                    a[g] === null || a[g] === "null"
                      ? e.push(null)
                      : (e.push(Number(h)), f.push(Number(h))));
            this.options.get("xvalues") && (d = this.options.get("xvalues")),
              (this.maxy = this.maxyorg = b.max.apply(b, f)),
              (this.miny = this.minyorg = b.min.apply(b, f)),
              (this.maxx = b.max.apply(b, d)),
              (this.minx = b.min.apply(b, d)),
              (this.xvalues = d),
              (this.yvalues = e),
              (this.yminmax = f);
          },
          processRangeOptions: function () {
            var a = this.options,
              b = a.get("normalRangeMin"),
              d = a.get("normalRangeMax");
            b !== c &&
              (b < this.miny && (this.miny = b),
              d > this.maxy && (this.maxy = d)),
              a.get("chartRangeMin") !== c &&
                (a.get("chartRangeClip") ||
                  a.get("chartRangeMin") < this.miny) &&
                (this.miny = a.get("chartRangeMin")),
              a.get("chartRangeMax") !== c &&
                (a.get("chartRangeClip") ||
                  a.get("chartRangeMax") > this.maxy) &&
                (this.maxy = a.get("chartRangeMax")),
              a.get("chartRangeMinX") !== c &&
                (a.get("chartRangeClipX") ||
                  a.get("chartRangeMinX") < this.minx) &&
                (this.minx = a.get("chartRangeMinX")),
              a.get("chartRangeMaxX") !== c &&
                (a.get("chartRangeClipX") ||
                  a.get("chartRangeMaxX") > this.maxx) &&
                (this.maxx = a.get("chartRangeMaxX"));
          },
          drawNormalRange: function (a, d, e, f, g) {
            var h = this.options.get("normalRangeMin"),
              i = this.options.get("normalRangeMax"),
              j = d + b.round(e - e * ((i - this.miny) / g)),
              k = b.round((e * (i - h)) / g);
            this.target
              .drawRect(a, j, f, k, c, this.options.get("normalRangeColor"))
              .append();
          },
          render: function () {
            var a = this.options,
              e = this.target,
              f = this.canvasWidth,
              g = this.canvasHeight,
              h = this.vertices,
              i = a.get("spotRadius"),
              j = this.regionMap,
              k,
              l,
              m,
              n,
              o,
              p,
              q,
              r,
              s,
              u,
              v,
              w,
              y,
              z,
              A,
              B,
              C,
              D,
              E,
              F,
              G,
              H,
              I,
              J,
              K;
            if (!x._super.render.call(this)) return;
            this.scanValues(),
              this.processRangeOptions(),
              (I = this.xvalues),
              (J = this.yvalues);
            if (!this.yminmax.length || this.yvalues.length < 2) return;
            (n = o = 0),
              (k = this.maxx - this.minx === 0 ? 1 : this.maxx - this.minx),
              (l = this.maxy - this.miny === 0 ? 1 : this.maxy - this.miny),
              (m = this.yvalues.length - 1),
              i && (f < i * 4 || g < i * 4) && (i = 0);
            if (i) {
              G = a.get("highlightSpotColor") && !a.get("disableInteraction");
              if (
                G ||
                a.get("minSpotColor") ||
                (a.get("spotColor") && J[m] === this.miny)
              )
                g -= b.ceil(i);
              if (
                G ||
                a.get("maxSpotColor") ||
                (a.get("spotColor") && J[m] === this.maxy)
              )
                (g -= b.ceil(i)), (n += b.ceil(i));
              if (
                G ||
                ((a.get("minSpotColor") || a.get("maxSpotColor")) &&
                  (J[0] === this.miny || J[0] === this.maxy))
              )
                (o += b.ceil(i)), (f -= b.ceil(i));
              if (
                G ||
                a.get("spotColor") ||
                a.get("minSpotColor") ||
                (a.get("maxSpotColor") &&
                  (J[m] === this.miny || J[m] === this.maxy))
              )
                f -= b.ceil(i);
            }
            g--,
              a.get("normalRangeMin") !== c &&
                !a.get("drawNormalOnTop") &&
                this.drawNormalRange(o, n, g, f, l),
              (q = []),
              (r = [q]),
              (z = A = null),
              (B = J.length);
            for (K = 0; K < B; K++)
              (s = I[K]),
                (v = I[K + 1]),
                (u = J[K]),
                (w = o + b.round((s - this.minx) * (f / k))),
                (y = K < B - 1 ? o + b.round((v - this.minx) * (f / k)) : f),
                (A = w + (y - w) / 2),
                (j[K] = [z || 0, A, K]),
                (z = A),
                u === null
                  ? K &&
                    (J[K - 1] !== null && ((q = []), r.push(q)), h.push(null))
                  : (u < this.miny && (u = this.miny),
                    u > this.maxy && (u = this.maxy),
                    q.length || q.push([w, n + g]),
                    (p = [w, n + b.round(g - g * ((u - this.miny) / l))]),
                    q.push(p),
                    h.push(p));
            (C = []), (D = []), (E = r.length);
            for (K = 0; K < E; K++)
              (q = r[K]),
                q.length &&
                  (a.get("fillColor") &&
                    (q.push([q[q.length - 1][0], n + g]),
                    D.push(q.slice(0)),
                    q.pop()),
                  q.length > 2 && (q[0] = [q[0][0], q[1][1]]),
                  C.push(q));
            E = D.length;
            for (K = 0; K < E; K++)
              e.drawShape(
                D[K],
                a.get("fillColor"),
                a.get("fillColor")
              ).append();
            a.get("normalRangeMin") !== c &&
              a.get("drawNormalOnTop") &&
              this.drawNormalRange(o, n, g, f, l),
              (E = C.length);
            for (K = 0; K < E; K++)
              e.drawShape(
                C[K],
                a.get("lineColor"),
                c,
                a.get("lineWidth")
              ).append();
            if (i && a.get("valueSpots")) {
              (F = a.get("valueSpots")), F.get === c && (F = new t(F));
              for (K = 0; K < B; K++)
                (H = F.get(J[K])),
                  H &&
                    e
                      .drawCircle(
                        o + b.round((I[K] - this.minx) * (f / k)),
                        n + b.round(g - g * ((J[K] - this.miny) / l)),
                        i,
                        c,
                        H
                      )
                      .append();
            }
            i &&
              a.get("spotColor") &&
              J[m] !== null &&
              e
                .drawCircle(
                  o + b.round((I[I.length - 1] - this.minx) * (f / k)),
                  n + b.round(g - g * ((J[m] - this.miny) / l)),
                  i,
                  c,
                  a.get("spotColor")
                )
                .append(),
              this.maxy !== this.minyorg &&
                (i &&
                  a.get("minSpotColor") &&
                  ((s = I[d.inArray(this.minyorg, J)]),
                  e
                    .drawCircle(
                      o + b.round((s - this.minx) * (f / k)),
                      n + b.round(g - g * ((this.minyorg - this.miny) / l)),
                      i,
                      c,
                      a.get("minSpotColor")
                    )
                    .append()),
                i &&
                  a.get("maxSpotColor") &&
                  ((s = I[d.inArray(this.maxyorg, J)]),
                  e
                    .drawCircle(
                      o + b.round((s - this.minx) * (f / k)),
                      n + b.round(g - g * ((this.maxyorg - this.miny) / l)),
                      i,
                      c,
                      a.get("maxSpotColor")
                    )
                    .append())),
              (this.lastShapeId = e.getLastShapeId()),
              (this.canvasTop = n),
              e.render();
          },
        })),
      (d.fn.sparkline.bar = y =
        g(d.fn.sparkline._base, w, {
          type: "bar",
          init: function (a, e, f, g, h) {
            var j = parseInt(f.get("barWidth"), 10),
              n = parseInt(f.get("barSpacing"), 10),
              o = f.get("chartRangeMin"),
              p = f.get("chartRangeMax"),
              q = f.get("chartRangeClip"),
              r = Infinity,
              s = -Infinity,
              u,
              v,
              w,
              x,
              z,
              A,
              B,
              C,
              D,
              E,
              F,
              G,
              H,
              I,
              J,
              K,
              L,
              M,
              N,
              O,
              P,
              Q,
              R;
            y._super.init.call(this, a, e, f, g, h);
            for (A = 0, B = e.length; A < B; A++) {
              (O = e[A]), (u = typeof O == "string" && O.indexOf(":") > -1);
              if (u || d.isArray(O))
                (J = !0),
                  u && (O = e[A] = l(O.split(":"))),
                  (O = m(O, null)),
                  (v = b.min.apply(b, O)),
                  (w = b.max.apply(b, O)),
                  v < r && (r = v),
                  w > s && (s = w);
            }
            (this.stacked = J),
              (this.regionShapes = {}),
              (this.barWidth = j),
              (this.barSpacing = n),
              (this.totalBarWidth = j + n),
              (this.width = g = e.length * j + (e.length - 1) * n),
              this.initTarget(),
              q &&
                ((H = o === c ? -Infinity : o), (I = p === c ? Infinity : p)),
              (z = []),
              (x = J ? [] : z);
            var S = [],
              T = [];
            for (A = 0, B = e.length; A < B; A++)
              if (J) {
                (K = e[A]), (e[A] = N = []), (S[A] = 0), (x[A] = T[A] = 0);
                for (L = 0, M = K.length; L < M; L++)
                  (O = N[L] = q ? i(K[L], H, I) : K[L]),
                    O !== null &&
                      (O > 0 && (S[A] += O),
                      r < 0 && s > 0
                        ? O < 0
                          ? (T[A] += b.abs(O))
                          : (x[A] += O)
                        : (x[A] += b.abs(O - (O < 0 ? s : r))),
                      z.push(O));
              } else
                (O = q ? i(e[A], H, I) : e[A]),
                  (O = e[A] = k(O)),
                  O !== null && z.push(O);
            (this.max = G = b.max.apply(b, z)),
              (this.min = F = b.min.apply(b, z)),
              (this.stackMax = s = J ? b.max.apply(b, S) : G),
              (this.stackMin = r = J ? b.min.apply(b, z) : F),
              f.get("chartRangeMin") !== c &&
                (f.get("chartRangeClip") || f.get("chartRangeMin") < F) &&
                (F = f.get("chartRangeMin")),
              f.get("chartRangeMax") !== c &&
                (f.get("chartRangeClip") || f.get("chartRangeMax") > G) &&
                (G = f.get("chartRangeMax")),
              (this.zeroAxis = D = f.get("zeroAxis", !0)),
              F <= 0 && G >= 0 && D
                ? (E = 0)
                : D == 0
                ? (E = F)
                : F > 0
                ? (E = F)
                : (E = G),
              (this.xaxisOffset = E),
              (C = J ? b.max.apply(b, x) + b.max.apply(b, T) : G - F),
              (this.canvasHeightEf =
                D && F < 0 ? this.canvasHeight - 2 : this.canvasHeight - 1),
              F < E
                ? ((Q = J && G >= 0 ? s : G),
                  (P = ((Q - E) / C) * this.canvasHeight),
                  P !== b.ceil(P) &&
                    ((this.canvasHeightEf -= 2), (P = b.ceil(P))))
                : (P = this.canvasHeight),
              (this.yoffset = P),
              d.isArray(f.get("colorMap"))
                ? ((this.colorMapByIndex = f.get("colorMap")),
                  (this.colorMapByValue = null))
                : ((this.colorMapByIndex = null),
                  (this.colorMapByValue = f.get("colorMap")),
                  this.colorMapByValue &&
                    this.colorMapByValue.get === c &&
                    (this.colorMapByValue = new t(this.colorMapByValue))),
              (this.range = C);
          },
          getRegion: function (a, d, e) {
            var f = b.floor(d / this.totalBarWidth);
            return f < 0 || f >= this.values.length ? c : f;
          },
          getCurrentRegionFields: function () {
            var a = this.currentRegion,
              b = r(this.values[a]),
              c = [],
              d,
              e;
            for (e = b.length; e--; )
              (d = b[e]),
                c.push({
                  isNull: d === null,
                  value: d,
                  color: this.calcColor(e, d, a),
                  offset: a,
                });
            return c;
          },
          calcColor: function (a, b, e) {
            var f = this.colorMapByIndex,
              g = this.colorMapByValue,
              h = this.options,
              i,
              j;
            return (
              this.stacked
                ? (i = h.get("stackedBarColor"))
                : (i = b < 0 ? h.get("negBarColor") : h.get("barColor")),
              b === 0 && h.get("zeroColor") !== c && (i = h.get("zeroColor")),
              g && (j = g.get(b)) ? (i = j) : f && f.length > e && (i = f[e]),
              d.isArray(i) ? i[a % i.length] : i
            );
          },
          renderRegion: function (a, e) {
            var f = this.values[a],
              g = this.options,
              h = this.xaxisOffset,
              i = [],
              j = this.range,
              k = this.stacked,
              l = this.target,
              m = a * this.totalBarWidth,
              n = this.canvasHeightEf,
              p = this.yoffset,
              q,
              r,
              s,
              t,
              u,
              v,
              w,
              x,
              y,
              z;
            (f = d.isArray(f) ? f : [f]),
              (w = f.length),
              (x = f[0]),
              (t = o(null, f)),
              (z = o(h, f, !0));
            if (t)
              return g.get("nullColor")
                ? ((s = e
                    ? g.get("nullColor")
                    : this.calcHighlightColor(g.get("nullColor"), g)),
                  (q = p > 0 ? p - 1 : p),
                  l.drawRect(m, q, this.barWidth - 1, 0, s, s))
                : c;
            u = p;
            for (v = 0; v < w; v++) {
              x = f[v];
              if (k && x === h) {
                if (!z || y) continue;
                y = !0;
              }
              j > 0 ? (r = b.floor(n * (b.abs(x - h) / j)) + 1) : (r = 1),
                x < h || (x === h && p === 0)
                  ? ((q = u), (u += r))
                  : ((q = p - r), (p -= r)),
                (s = this.calcColor(v, x, a)),
                e && (s = this.calcHighlightColor(s, g)),
                i.push(l.drawRect(m, q, this.barWidth - 1, r - 1, s, s));
            }
            return i.length === 1 ? i[0] : i;
          },
        })),
      (d.fn.sparkline.tristate = z =
        g(d.fn.sparkline._base, w, {
          type: "tristate",
          init: function (a, b, e, f, g) {
            var h = parseInt(e.get("barWidth"), 10),
              i = parseInt(e.get("barSpacing"), 10);
            z._super.init.call(this, a, b, e, f, g),
              (this.regionShapes = {}),
              (this.barWidth = h),
              (this.barSpacing = i),
              (this.totalBarWidth = h + i),
              (this.values = d.map(b, Number)),
              (this.width = f = b.length * h + (b.length - 1) * i),
              d.isArray(e.get("colorMap"))
                ? ((this.colorMapByIndex = e.get("colorMap")),
                  (this.colorMapByValue = null))
                : ((this.colorMapByIndex = null),
                  (this.colorMapByValue = e.get("colorMap")),
                  this.colorMapByValue &&
                    this.colorMapByValue.get === c &&
                    (this.colorMapByValue = new t(this.colorMapByValue))),
              this.initTarget();
          },
          getRegion: function (a, c, d) {
            return b.floor(c / this.totalBarWidth);
          },
          getCurrentRegionFields: function () {
            var a = this.currentRegion;
            return {
              isNull: this.values[a] === c,
              value: this.values[a],
              color: this.calcColor(this.values[a], a),
              offset: a,
            };
          },
          calcColor: function (a, b) {
            var c = this.values,
              d = this.options,
              e = this.colorMapByIndex,
              f = this.colorMapByValue,
              g,
              h;
            return (
              f && (h = f.get(a))
                ? (g = h)
                : e && e.length > b
                ? (g = e[b])
                : c[b] < 0
                ? (g = d.get("negBarColor"))
                : c[b] > 0
                ? (g = d.get("posBarColor"))
                : (g = d.get("zeroBarColor")),
              g
            );
          },
          renderRegion: function (a, c) {
            var d = this.values,
              e = this.options,
              f = this.target,
              g,
              h,
              i,
              j,
              k,
              l;
            (g = f.pixelHeight),
              (i = b.round(g / 2)),
              (j = a * this.totalBarWidth),
              d[a] < 0
                ? ((k = i), (h = i - 1))
                : d[a] > 0
                ? ((k = 0), (h = i - 1))
                : ((k = i - 1), (h = 2)),
              (l = this.calcColor(d[a], a));
            if (l === null) return;
            return (
              c && (l = this.calcHighlightColor(l, e)),
              f.drawRect(j, k, this.barWidth - 1, h - 1, l, l)
            );
          },
        })),
      (d.fn.sparkline.discrete = A =
        g(d.fn.sparkline._base, w, {
          type: "discrete",
          init: function (a, e, f, g, h) {
            A._super.init.call(this, a, e, f, g, h),
              (this.regionShapes = {}),
              (this.values = e = d.map(e, Number)),
              (this.min = b.min.apply(b, e)),
              (this.max = b.max.apply(b, e)),
              (this.range = this.max - this.min),
              (this.width = g =
                f.get("width") === "auto" ? e.length * 2 : this.width),
              (this.interval = b.floor(g / e.length)),
              (this.itemWidth = g / e.length),
              f.get("chartRangeMin") !== c &&
                (f.get("chartRangeClip") ||
                  f.get("chartRangeMin") < this.min) &&
                (this.min = f.get("chartRangeMin")),
              f.get("chartRangeMax") !== c &&
                (f.get("chartRangeClip") ||
                  f.get("chartRangeMax") > this.max) &&
                (this.max = f.get("chartRangeMax")),
              this.initTarget(),
              this.target &&
                (this.lineHeight =
                  f.get("lineHeight") === "auto"
                    ? b.round(this.canvasHeight * 0.3)
                    : f.get("lineHeight"));
          },
          getRegion: function (a, c, d) {
            return b.floor(c / this.itemWidth);
          },
          getCurrentRegionFields: function () {
            var a = this.currentRegion;
            return {
              isNull: this.values[a] === c,
              value: this.values[a],
              offset: a,
            };
          },
          renderRegion: function (a, c) {
            var d = this.values,
              e = this.options,
              f = this.min,
              g = this.max,
              h = this.range,
              j = this.interval,
              k = this.target,
              l = this.canvasHeight,
              m = this.lineHeight,
              n = l - m,
              o,
              p,
              q,
              r;
            return (
              (p = i(d[a], f, g)),
              (r = a * j),
              (o = b.round(n - n * ((p - f) / h))),
              (q =
                e.get("thresholdColor") && p < e.get("thresholdValue")
                  ? e.get("thresholdColor")
                  : e.get("lineColor")),
              c && (q = this.calcHighlightColor(q, e)),
              k.drawLine(r, o, r, o + m, q)
            );
          },
        })),
      (d.fn.sparkline.bullet = B =
        g(d.fn.sparkline._base, {
          type: "bullet",
          init: function (a, d, e, f, g) {
            var h, i, j;
            B._super.init.call(this, a, d, e, f, g),
              (this.values = d = l(d)),
              (j = d.slice()),
              (j[0] = j[0] === null ? j[2] : j[0]),
              (j[1] = d[1] === null ? j[2] : j[1]),
              (h = b.min.apply(b, d)),
              (i = b.max.apply(b, d)),
              e.get("base") === c ? (h = h < 0 ? h : 0) : (h = e.get("base")),
              (this.min = h),
              (this.max = i),
              (this.range = i - h),
              (this.shapes = {}),
              (this.valueShapes = {}),
              (this.regiondata = {}),
              (this.width = f = e.get("width") === "auto" ? "4.0em" : f),
              (this.target = this.$el.simpledraw(f, g, e.get("composite"))),
              d.length || (this.disabled = !0),
              this.initTarget();
          },
          getRegion: function (a, b, d) {
            var e = this.target.getShapeAt(a, b, d);
            return e !== c && this.shapes[e] !== c ? this.shapes[e] : c;
          },
          getCurrentRegionFields: function () {
            var a = this.currentRegion;
            return {
              fieldkey: a.substr(0, 1),
              value: this.values[a.substr(1)],
              region: a,
            };
          },
          changeHighlight: function (a) {
            var b = this.currentRegion,
              c = this.valueShapes[b],
              d;
            delete this.shapes[c];
            switch (b.substr(0, 1)) {
              case "r":
                d = this.renderRange(b.substr(1), a);
                break;
              case "p":
                d = this.renderPerformance(a);
                break;
              case "t":
                d = this.renderTarget(a);
            }
            (this.valueShapes[b] = d.id),
              (this.shapes[d.id] = b),
              this.target.replaceWithShape(c, d);
          },
          renderRange: function (a, c) {
            var d = this.values[a],
              e = b.round(this.canvasWidth * ((d - this.min) / this.range)),
              f = this.options.get("rangeColors")[a - 2];
            return (
              c && (f = this.calcHighlightColor(f, this.options)),
              this.target.drawRect(0, 0, e - 1, this.canvasHeight - 1, f, f)
            );
          },
          renderPerformance: function (a) {
            var c = this.values[1],
              d = b.round(this.canvasWidth * ((c - this.min) / this.range)),
              e = this.options.get("performanceColor");
            return (
              a && (e = this.calcHighlightColor(e, this.options)),
              this.target.drawRect(
                0,
                b.round(this.canvasHeight * 0.3),
                d - 1,
                b.round(this.canvasHeight * 0.4) - 1,
                e,
                e
              )
            );
          },
          renderTarget: function (a) {
            var c = this.values[0],
              d = b.round(
                this.canvasWidth * ((c - this.min) / this.range) -
                  this.options.get("targetWidth") / 2
              ),
              e = b.round(this.canvasHeight * 0.1),
              f = this.canvasHeight - e * 2,
              g = this.options.get("targetColor");
            return (
              a && (g = this.calcHighlightColor(g, this.options)),
              this.target.drawRect(
                d,
                e,
                this.options.get("targetWidth") - 1,
                f - 1,
                g,
                g
              )
            );
          },
          render: function () {
            var a = this.values.length,
              b = this.target,
              c,
              d;
            if (!B._super.render.call(this)) return;
            for (c = 2; c < a; c++)
              (d = this.renderRange(c).append()),
                (this.shapes[d.id] = "r" + c),
                (this.valueShapes["r" + c] = d.id);
            this.values[1] !== null &&
              ((d = this.renderPerformance().append()),
              (this.shapes[d.id] = "p1"),
              (this.valueShapes.p1 = d.id)),
              this.values[0] !== null &&
                ((d = this.renderTarget().append()),
                (this.shapes[d.id] = "t0"),
                (this.valueShapes.t0 = d.id)),
              b.render();
          },
        })),
      (d.fn.sparkline.pie = C =
        g(d.fn.sparkline._base, {
          type: "pie",
          init: function (a, c, e, f, g) {
            var h = 0,
              i;
            C._super.init.call(this, a, c, e, f, g),
              (this.shapes = {}),
              (this.valueShapes = {}),
              (this.values = c = d.map(c, Number)),
              e.get("width") === "auto" && (this.width = this.height);
            if (c.length > 0) for (i = c.length; i--; ) h += c[i];
            (this.total = h),
              this.initTarget(),
              (this.radius = b.floor(
                b.min(this.canvasWidth, this.canvasHeight) / 2
              ));
          },
          getRegion: function (a, b, d) {
            var e = this.target.getShapeAt(a, b, d);
            return e !== c && this.shapes[e] !== c ? this.shapes[e] : c;
          },
          getCurrentRegionFields: function () {
            var a = this.currentRegion;
            return {
              isNull: this.values[a] === c,
              value: this.values[a],
              percent: (this.values[a] / this.total) * 100,
              color:
                this.options.get("sliceColors")[
                  a % this.options.get("sliceColors").length
                ],
              offset: a,
            };
          },
          changeHighlight: function (a) {
            var b = this.currentRegion,
              c = this.renderSlice(b, a),
              d = this.valueShapes[b];
            delete this.shapes[d],
              this.target.replaceWithShape(d, c),
              (this.valueShapes[b] = c.id),
              (this.shapes[c.id] = b);
          },
          renderSlice: function (a, d) {
            var e = this.target,
              f = this.options,
              g = this.radius,
              h = f.get("borderWidth"),
              i = f.get("offset"),
              j = 2 * b.PI,
              k = this.values,
              l = this.total,
              m = i ? 2 * b.PI * (i / 360) : 0,
              n,
              o,
              p,
              q,
              r;
            q = k.length;
            for (p = 0; p < q; p++) {
              (n = m), (o = m), l > 0 && (o = m + j * (k[p] / l));
              if (a === p)
                return (
                  (r = f.get("sliceColors")[p % f.get("sliceColors").length]),
                  d && (r = this.calcHighlightColor(r, f)),
                  e.drawPieSlice(g, g, g - h, n, o, c, r)
                );
              m = o;
            }
          },
          render: function () {
            var a = this.target,
              d = this.values,
              e = this.options,
              f = this.radius,
              g = e.get("borderWidth"),
              h,
              i;
            if (!C._super.render.call(this)) return;
            g &&
              a
                .drawCircle(
                  f,
                  f,
                  b.floor(f - g / 2),
                  e.get("borderColor"),
                  c,
                  g
                )
                .append();
            for (i = d.length; i--; )
              d[i] &&
                ((h = this.renderSlice(i).append()),
                (this.valueShapes[i] = h.id),
                (this.shapes[h.id] = i));
            a.render();
          },
        })),
      (d.fn.sparkline.box = D =
        g(d.fn.sparkline._base, {
          type: "box",
          init: function (a, b, c, e, f) {
            D._super.init.call(this, a, b, c, e, f),
              (this.values = d.map(b, Number)),
              (this.width = c.get("width") === "auto" ? "4.0em" : e),
              this.initTarget(),
              this.values.length || (this.disabled = 1);
          },
          getRegion: function () {
            return 1;
          },
          getCurrentRegionFields: function () {
            var a = [
              { field: "lq", value: this.quartiles[0] },
              { field: "med", value: this.quartiles[1] },
              { field: "uq", value: this.quartiles[2] },
            ];
            return (
              this.loutlier !== c &&
                a.push({ field: "lo", value: this.loutlier }),
              this.routlier !== c &&
                a.push({ field: "ro", value: this.routlier }),
              this.lwhisker !== c &&
                a.push({ field: "lw", value: this.lwhisker }),
              this.rwhisker !== c &&
                a.push({ field: "rw", value: this.rwhisker }),
              a
            );
          },
          render: function () {
            var a = this.target,
              d = this.values,
              e = d.length,
              f = this.options,
              g = this.canvasWidth,
              h = this.canvasHeight,
              i =
                f.get("chartRangeMin") === c
                  ? b.min.apply(b, d)
                  : f.get("chartRangeMin"),
              k =
                f.get("chartRangeMax") === c
                  ? b.max.apply(b, d)
                  : f.get("chartRangeMax"),
              l = 0,
              m,
              n,
              o,
              p,
              q,
              r,
              s,
              t,
              u,
              v,
              w;
            if (!D._super.render.call(this)) return;
            if (f.get("raw"))
              f.get("showOutliers") && d.length > 5
                ? ((n = d[0]),
                  (m = d[1]),
                  (p = d[2]),
                  (q = d[3]),
                  (r = d[4]),
                  (s = d[5]),
                  (t = d[6]))
                : ((m = d[0]), (p = d[1]), (q = d[2]), (r = d[3]), (s = d[4]));
            else {
              d.sort(function (a, b) {
                return a - b;
              }),
                (p = j(d, 1)),
                (q = j(d, 2)),
                (r = j(d, 3)),
                (o = r - p);
              if (f.get("showOutliers")) {
                m = s = c;
                for (u = 0; u < e; u++)
                  m === c && d[u] > p - o * f.get("outlierIQR") && (m = d[u]),
                    d[u] < r + o * f.get("outlierIQR") && (s = d[u]);
                (n = d[0]), (t = d[e - 1]);
              } else (m = d[0]), (s = d[e - 1]);
            }
            (this.quartiles = [p, q, r]),
              (this.lwhisker = m),
              (this.rwhisker = s),
              (this.loutlier = n),
              (this.routlier = t),
              (w = g / (k - i + 1)),
              f.get("showOutliers") &&
                ((l = b.ceil(f.get("spotRadius"))),
                (g -= 2 * b.ceil(f.get("spotRadius"))),
                (w = g / (k - i + 1)),
                n < m &&
                  a
                    .drawCircle(
                      (n - i) * w + l,
                      h / 2,
                      f.get("spotRadius"),
                      f.get("outlierLineColor"),
                      f.get("outlierFillColor")
                    )
                    .append(),
                t > s &&
                  a
                    .drawCircle(
                      (t - i) * w + l,
                      h / 2,
                      f.get("spotRadius"),
                      f.get("outlierLineColor"),
                      f.get("outlierFillColor")
                    )
                    .append()),
              a
                .drawRect(
                  b.round((p - i) * w + l),
                  b.round(h * 0.1),
                  b.round((r - p) * w),
                  b.round(h * 0.8),
                  f.get("boxLineColor"),
                  f.get("boxFillColor")
                )
                .append(),
              a
                .drawLine(
                  b.round((m - i) * w + l),
                  b.round(h / 2),
                  b.round((p - i) * w + l),
                  b.round(h / 2),
                  f.get("lineColor")
                )
                .append(),
              a
                .drawLine(
                  b.round((m - i) * w + l),
                  b.round(h / 4),
                  b.round((m - i) * w + l),
                  b.round(h - h / 4),
                  f.get("whiskerColor")
                )
                .append(),
              a
                .drawLine(
                  b.round((s - i) * w + l),
                  b.round(h / 2),
                  b.round((r - i) * w + l),
                  b.round(h / 2),
                  f.get("lineColor")
                )
                .append(),
              a
                .drawLine(
                  b.round((s - i) * w + l),
                  b.round(h / 4),
                  b.round((s - i) * w + l),
                  b.round(h - h / 4),
                  f.get("whiskerColor")
                )
                .append(),
              a
                .drawLine(
                  b.round((q - i) * w + l),
                  b.round(h * 0.1),
                  b.round((q - i) * w + l),
                  b.round(h * 0.9),
                  f.get("medianColor")
                )
                .append(),
              f.get("target") &&
                ((v = b.ceil(f.get("spotRadius"))),
                a
                  .drawLine(
                    b.round((f.get("target") - i) * w + l),
                    b.round(h / 2 - v),
                    b.round((f.get("target") - i) * w + l),
                    b.round(h / 2 + v),
                    f.get("targetColor")
                  )
                  .append(),
                a
                  .drawLine(
                    b.round((f.get("target") - i) * w + l - v),
                    b.round(h / 2),
                    b.round((f.get("target") - i) * w + l + v),
                    b.round(h / 2),
                    f.get("targetColor")
                  )
                  .append()),
              a.render();
          },
        })),
      (G = g({
        init: function (a, b, c, d) {
          (this.target = a), (this.id = b), (this.type = c), (this.args = d);
        },
        append: function () {
          return this.target.appendShape(this), this;
        },
      })),
      (H = g({
        _pxregex: /(\d+)(px)?\s*$/i,
        init: function (a, b, c) {
          if (!a) return;
          (this.width = a),
            (this.height = b),
            (this.target = c),
            (this.lastShapeId = null),
            c[0] && (c = c[0]),
            d.data(c, "_jqs_vcanvas", this);
        },
        drawLine: function (a, b, c, d, e, f) {
          return this.drawShape(
            [
              [a, b],
              [c, d],
            ],
            e,
            f
          );
        },
        drawShape: function (a, b, c, d) {
          return this._genShape("Shape", [a, b, c, d]);
        },
        drawCircle: function (a, b, c, d, e, f) {
          return this._genShape("Circle", [a, b, c, d, e, f]);
        },
        drawPieSlice: function (a, b, c, d, e, f, g) {
          return this._genShape("PieSlice", [a, b, c, d, e, f, g]);
        },
        drawRect: function (a, b, c, d, e, f) {
          return this._genShape("Rect", [a, b, c, d, e, f]);
        },
        getElement: function () {
          return this.canvas;
        },
        getLastShapeId: function () {
          return this.lastShapeId;
        },
        reset: function () {
          alert("reset not implemented");
        },
        _insert: function (a, b) {
          d(b).html(a);
        },
        _calculatePixelDims: function (a, b, c) {
          var e;
          (e = this._pxregex.exec(b)),
            e ? (this.pixelHeight = e[1]) : (this.pixelHeight = d(c).height()),
            (e = this._pxregex.exec(a)),
            e ? (this.pixelWidth = e[1]) : (this.pixelWidth = d(c).width());
        },
        _genShape: function (a, b) {
          var c = L++;
          return b.unshift(c), new G(this, c, a, b);
        },
        appendShape: function (a) {
          alert("appendShape not implemented");
        },
        replaceWithShape: function (a, b) {
          alert("replaceWithShape not implemented");
        },
        insertAfterShape: function (a, b) {
          alert("insertAfterShape not implemented");
        },
        removeShapeId: function (a) {
          alert("removeShapeId not implemented");
        },
        getShapeAt: function (a, b, c) {
          alert("getShapeAt not implemented");
        },
        render: function () {
          alert("render not implemented");
        },
      })),
      (I = g(H, {
        init: function (b, e, f, g) {
          I._super.init.call(this, b, e, f),
            (this.canvas = a.createElement("canvas")),
            f[0] && (f = f[0]),
            d.data(f, "_jqs_vcanvas", this),
            d(this.canvas).css({
              display: "inline-block",
              width: b,
              height: e,
              verticalAlign: "top",
            }),
            this._insert(this.canvas, f),
            this._calculatePixelDims(b, e, this.canvas),
            (this.canvas.width = this.pixelWidth),
            (this.canvas.height = this.pixelHeight),
            (this.interact = g),
            (this.shapes = {}),
            (this.shapeseq = []),
            (this.currentTargetShapeId = c),
            d(this.canvas).css({
              width: this.pixelWidth,
              height: this.pixelHeight,
            });
        },
        _getContext: function (a, b, d) {
          var e = this.canvas.getContext("2d");
          return (
            a !== c && (e.strokeStyle = a),
            (e.lineWidth = d === c ? 1 : d),
            b !== c && (e.fillStyle = b),
            e
          );
        },
        reset: function () {
          var a = this._getContext();
          a.clearRect(0, 0, this.pixelWidth, this.pixelHeight),
            (this.shapes = {}),
            (this.shapeseq = []),
            (this.currentTargetShapeId = c);
        },
        _drawShape: function (a, b, d, e, f) {
          var g = this._getContext(d, e, f),
            h,
            i;
          g.beginPath(), g.moveTo(b[0][0] + 0.5, b[0][1] + 0.5);
          for (h = 1, i = b.length; h < i; h++)
            g.lineTo(b[h][0] + 0.5, b[h][1] + 0.5);
          d !== c && g.stroke(),
            e !== c && g.fill(),
            this.targetX !== c &&
              this.targetY !== c &&
              g.isPointInPath(this.targetX, this.targetY) &&
              (this.currentTargetShapeId = a);
        },
        _drawCircle: function (a, d, e, f, g, h, i) {
          var j = this._getContext(g, h, i);
          j.beginPath(),
            j.arc(d, e, f, 0, 2 * b.PI, !1),
            this.targetX !== c &&
              this.targetY !== c &&
              j.isPointInPath(this.targetX, this.targetY) &&
              (this.currentTargetShapeId = a),
            g !== c && j.stroke(),
            h !== c && j.fill();
        },
        _drawPieSlice: function (a, b, d, e, f, g, h, i) {
          var j = this._getContext(h, i);
          j.beginPath(),
            j.moveTo(b, d),
            j.arc(b, d, e, f, g, !1),
            j.lineTo(b, d),
            j.closePath(),
            h !== c && j.stroke(),
            i && j.fill(),
            this.targetX !== c &&
              this.targetY !== c &&
              j.isPointInPath(this.targetX, this.targetY) &&
              (this.currentTargetShapeId = a);
        },
        _drawRect: function (a, b, c, d, e, f, g) {
          return this._drawShape(
            a,
            [
              [b, c],
              [b + d, c],
              [b + d, c + e],
              [b, c + e],
              [b, c],
            ],
            f,
            g
          );
        },
        appendShape: function (a) {
          return (
            (this.shapes[a.id] = a),
            this.shapeseq.push(a.id),
            (this.lastShapeId = a.id),
            a.id
          );
        },
        replaceWithShape: function (a, b) {
          var c = this.shapeseq,
            d;
          this.shapes[b.id] = b;
          for (d = c.length; d--; ) c[d] == a && (c[d] = b.id);
          delete this.shapes[a];
        },
        replaceWithShapes: function (a, b) {
          var c = this.shapeseq,
            d = {},
            e,
            f,
            g;
          for (f = a.length; f--; ) d[a[f]] = !0;
          for (f = c.length; f--; )
            (e = c[f]),
              d[e] && (c.splice(f, 1), delete this.shapes[e], (g = f));
          for (f = b.length; f--; )
            c.splice(g, 0, b[f].id), (this.shapes[b[f].id] = b[f]);
        },
        insertAfterShape: function (a, b) {
          var c = this.shapeseq,
            d;
          for (d = c.length; d--; )
            if (c[d] === a) {
              c.splice(d + 1, 0, b.id), (this.shapes[b.id] = b);
              return;
            }
        },
        removeShapeId: function (a) {
          var b = this.shapeseq,
            c;
          for (c = b.length; c--; )
            if (b[c] === a) {
              b.splice(c, 1);
              break;
            }
          delete this.shapes[a];
        },
        getShapeAt: function (a, b, c) {
          return (
            (this.targetX = b),
            (this.targetY = c),
            this.render(),
            this.currentTargetShapeId
          );
        },
        render: function () {
          var a = this.shapeseq,
            b = this.shapes,
            c = a.length,
            d = this._getContext(),
            e,
            f,
            g;
          d.clearRect(0, 0, this.pixelWidth, this.pixelHeight);
          for (g = 0; g < c; g++)
            (e = a[g]), (f = b[e]), this["_draw" + f.type].apply(this, f.args);
          this.interact || ((this.shapes = {}), (this.shapeseq = []));
        },
      })),
      (J = g(H, {
        init: function (b, c, e) {
          var f;
          J._super.init.call(this, b, c, e),
            e[0] && (e = e[0]),
            d.data(e, "_jqs_vcanvas", this),
            (this.canvas = a.createElement("span")),
            d(this.canvas).css({
              display: "inline-block",
              position: "relative",
              overflow: "hidden",
              width: b,
              height: c,
              margin: "0px",
              padding: "0px",
              verticalAlign: "top",
            }),
            this._insert(this.canvas, e),
            this._calculatePixelDims(b, c, this.canvas),
            (this.canvas.width = this.pixelWidth),
            (this.canvas.height = this.pixelHeight),
            (f =
              '<v:group coordorigin="0 0" coordsize="' +
              this.pixelWidth +
              " " +
              this.pixelHeight +
              '"' +
              ' style="position:absolute;top:0;left:0;width:' +
              this.pixelWidth +
              "px;height=" +
              this.pixelHeight +
              'px;"></v:group>'),
            this.canvas.insertAdjacentHTML("beforeEnd", f),
            (this.group = d(this.canvas).children()[0]),
            (this.rendered = !1),
            (this.prerender = "");
        },
        _drawShape: function (a, b, d, e, f) {
          var g = [],
            h,
            i,
            j,
            k,
            l,
            m,
            n;
          for (n = 0, m = b.length; n < m; n++)
            g[n] = "" + b[n][0] + "," + b[n][1];
          return (
            (h = g.splice(0, 1)),
            (f = f === c ? 1 : f),
            (i =
              d === c
                ? ' stroked="false" '
                : ' strokeWeight="' + f + 'px" strokeColor="' + d + '" '),
            (j =
              e === c
                ? ' filled="false"'
                : ' fillColor="' + e + '" filled="true" '),
            (k = g[0] === g[g.length - 1] ? "x " : ""),
            (l =
              '<v:shape coordorigin="0 0" coordsize="' +
              this.pixelWidth +
              " " +
              this.pixelHeight +
              '" ' +
              ' id="jqsshape' +
              a +
              '" ' +
              i +
              j +
              ' style="position:absolute;left:0px;top:0px;height:' +
              this.pixelHeight +
              "px;width:" +
              this.pixelWidth +
              'px;padding:0px;margin:0px;" ' +
              ' path="m ' +
              h +
              " l " +
              g.join(", ") +
              " " +
              k +
              'e">' +
              " </v:shape>"),
            l
          );
        },
        _drawCircle: function (a, b, d, e, f, g, h) {
          var i, j, k;
          return (
            (b -= e),
            (d -= e),
            (i =
              f === c
                ? ' stroked="false" '
                : ' strokeWeight="' + h + 'px" strokeColor="' + f + '" '),
            (j =
              g === c
                ? ' filled="false"'
                : ' fillColor="' + g + '" filled="true" '),
            (k =
              '<v:oval  id="jqsshape' +
              a +
              '" ' +
              i +
              j +
              ' style="position:absolute;top:' +
              d +
              "px; left:" +
              b +
              "px; width:" +
              e * 2 +
              "px; height:" +
              e * 2 +
              'px"></v:oval>'),
            k
          );
        },
        _drawPieSlice: function (a, d, e, f, g, h, i, j) {
          var k, l, m, n, o, p, q, r;
          if (g === h) return "";
          h - g === 2 * b.PI && ((g = 0), (h = 2 * b.PI)),
            (l = d + b.round(b.cos(g) * f)),
            (m = e + b.round(b.sin(g) * f)),
            (n = d + b.round(b.cos(h) * f)),
            (o = e + b.round(b.sin(h) * f));
          if (l === n && m === o) {
            if (h - g < b.PI) return "";
            (l = n = d + f), (m = o = e);
          }
          return l === n && m === o && h - g < b.PI
            ? ""
            : ((k = [d - f, e - f, d + f, e + f, l, m, n, o]),
              (p =
                i === c
                  ? ' stroked="false" '
                  : ' strokeWeight="1px" strokeColor="' + i + '" '),
              (q =
                j === c
                  ? ' filled="false"'
                  : ' fillColor="' + j + '" filled="true" '),
              (r =
                '<v:shape coordorigin="0 0" coordsize="' +
                this.pixelWidth +
                " " +
                this.pixelHeight +
                '" ' +
                ' id="jqsshape' +
                a +
                '" ' +
                p +
                q +
                ' style="position:absolute;left:0px;top:0px;height:' +
                this.pixelHeight +
                "px;width:" +
                this.pixelWidth +
                'px;padding:0px;margin:0px;" ' +
                ' path="m ' +
                d +
                "," +
                e +
                " wa " +
                k.join(", ") +
                ' x e">' +
                " </v:shape>"),
              r);
        },
        _drawRect: function (a, b, c, d, e, f, g) {
          return this._drawShape(
            a,
            [
              [b, c],
              [b, c + e],
              [b + d, c + e],
              [b + d, c],
              [b, c],
            ],
            f,
            g
          );
        },
        reset: function () {
          this.group.innerHTML = "";
        },
        appendShape: function (a) {
          var b = this["_draw" + a.type].apply(this, a.args);
          return (
            this.rendered
              ? this.group.insertAdjacentHTML("beforeEnd", b)
              : (this.prerender += b),
            (this.lastShapeId = a.id),
            a.id
          );
        },
        replaceWithShape: function (a, b) {
          var c = d("#jqsshape" + a),
            e = this["_draw" + b.type].apply(this, b.args);
          c[0].outerHTML = e;
        },
        replaceWithShapes: function (a, b) {
          var c = d("#jqsshape" + a[0]),
            e = "",
            f = b.length,
            g;
          for (g = 0; g < f; g++)
            e += this["_draw" + b[g].type].apply(this, b[g].args);
          c[0].outerHTML = e;
          for (g = 1; g < a.length; g++) d("#jqsshape" + a[g]).remove();
        },
        insertAfterShape: function (a, b) {
          var c = d("#jqsshape" + a),
            e = this["_draw" + b.type].apply(this, b.args);
          c[0].insertAdjacentHTML("afterEnd", e);
        },
        removeShapeId: function (a) {
          var b = d("#jqsshape" + a);
          this.group.removeChild(b[0]);
        },
        getShapeAt: function (a, b, c) {
          var d = a.id.substr(8);
          return d;
        },
        render: function () {
          this.rendered ||
            ((this.group.innerHTML = this.prerender), (this.rendered = !0));
        },
      }));
  });
})(document, Math);
