text: /*
   A class to parse color values
   @author Stoyan Stefanov <sstoo@gmail.com>
   @link   http://www.phpied.com/rgb-color-parser-in-javascript/
   Use it if you like it
  
   canvg.js - Javascript SVG parser and renderer on Canvas
   MIT Licensed
   Gabe Lerner (gabelerner@gmail.com)
   http://code.google.com/p/canvg/
  
   Requires: rgbcolor.js - http://www.phpied.com/rgb-color-parser-in-javascript/
  
   Highcharts JS v3.0.6 (2013-10-04)
   CanVGRenderer Extension module
  
   (c) 2011-2012 Torstein Hønsi, Erik Olsson
  
   License: www.highcharts.com/license
  */
  function RGBColor(m) {
    this.ok = !1; m.charAt(0) == '#' && (m = m.substr(1, 6)); var m = m.replace(/ /g, ''), m = m.toLowerCase(), a = {aliceblue: 'f0f8ff',
        antiquewhite: 'faebd7',
        aqua: '00ffff',
        aquamarine: '7fffd4',
        azure: 'f0ffff',
        beige: 'f5f5dc',
        bisque: 'ffe4c4',
        black: '000000',
        blanchedalmond: 'ffebcd',
        blue: '0000ff',
        blueviolet: '8a2be2',
        brown: 'a52a2a',
        burlywood: 'deb887',
        cadetblue: '5f9ea0',
        chartreuse: '7fff00',
        chocolate: 'd2691e',
        coral: 'ff7f50',
        cornflowerblue: '6495ed',
        cornsilk: 'fff8dc',
        crimson: 'dc143c',
        cyan: '00ffff',
        darkblue: '00008b',
        darkcyan: '008b8b',
        darkgoldenrod: 'b8860b',
        darkgray: 'a9a9a9',
        darkgreen: '006400',
        darkkhaki: 'bdb76b',
        darkmagenta: '8b008b',
        darkolivegreen: '556b2f',
        darkorange: 'ff8c00',
        darkorchid: '9932cc',
        darkred: '8b0000',
        darksalmon: 'e9967a',
        darkseagreen: '8fbc8f',
        darkslateblue: '483d8b',
        darkslategray: '2f4f4f',
        darkturquoise: '00ced1',
        darkviolet: '9400d3',
        deeppink: 'ff1493',
        deepskyblue: '00bfff',
        dimgray: '696969',
        dodgerblue: '1e90ff',
        feldspar: 'd19275',
        firebrick: 'b22222',
        floralwhite: 'fffaf0',
        forestgreen: '228b22',
        fuchsia: 'ff00ff',
        gainsboro: 'dcdcdc',
        ghostwhite: 'f8f8ff',
        gold: 'ffd700',
        goldenrod: 'daa520',
        gray: '808080',
        green: '008000',
        greenyellow: 'adff2f',
        honeydew: 'f0fff0',
        hotpink: 'ff69b4',
        indianred: 'cd5c5c',
        indigo: '4b0082',
        ivory: 'fffff0',
        khaki: 'f0e68c',
        lavender: 'e6e6fa',
        lavenderblush: 'fff0f5',
        lawngreen: '7cfc00',
        lemonchiffon: 'fffacd',
        lightblue: 'add8e6',
        lightcoral: 'f08080',
        lightcyan: 'e0ffff',
        lightgoldenrodyellow: 'fafad2',
        lightgrey: 'd3d3d3',
        lightgreen: '90ee90',
        lightpink: 'ffb6c1',
        lightsalmon: 'ffa07a',
        lightseagreen: '20b2aa',
        lightskyblue: '87cefa',
        lightslateblue: '8470ff',
        lightslategray: '778899',
        lightsteelblue: 'b0c4de',
        lightyellow: 'ffffe0',
        lime: '00ff00',
        limegreen: '32cd32',
        linen: 'faf0e6',
        magenta: 'ff00ff',
        maroon: '800000',
        mediumaquamarine: '66cdaa',
        mediumblue: '0000cd',
        mediumorchid: 'ba55d3',
        mediumpurple: '9370d8',
        mediumseagreen: '3cb371',
        mediumslateblue: '7b68ee',
        mediumspringgreen: '00fa9a',
        mediumturquoise: '48d1cc',
        mediumvioletred: 'c71585',
        midnightblue: '191970',
        mintcream: 'f5fffa',
        mistyrose: 'ffe4e1',
        moccasin: 'ffe4b5',
        navajowhite: 'ffdead',
        navy: '000080',
        oldlace: 'fdf5e6',
        olive: '808000',
        olivedrab: '6b8e23',
        orange: 'ffa500',
        orangered: 'ff4500',
        orchid: 'da70d6',
        palegoldenrod: 'eee8aa',
        palegreen: '98fb98',
        paleturquoise: 'afeeee',
        palevioletred: 'd87093',
        papayawhip: 'ffefd5',
        peachpuff: 'ffdab9',
        peru: 'cd853f',
        pink: 'ffc0cb',
        plum: 'dda0dd',
        powderblue: 'b0e0e6',
        purple: '800080',
        red: 'ff0000',
        rosybrown: 'bc8f8f',
        royalblue: '4169e1',
        saddlebrown: '8b4513',
        salmon: 'fa8072',
        sandybrown: 'f4a460',
        seagreen: '2e8b57',
        seashell: 'fff5ee',
        sienna: 'a0522d',
        silver: 'c0c0c0',
        skyblue: '87ceeb',
        slateblue: '6a5acd',
        slategray: '708090',
        snow: 'fffafa',
        springgreen: '00ff7f',
        steelblue: '4682b4',
        tan: 'd2b48c',
        teal: '008080',
        thistle: 'd8bfd8',
        tomato: 'ff6347',
        turquoise: '40e0d0',
        violet: 'ee82ee',
        violetred: 'd02090',
        wheat: 'f5deb3',
        white: 'ffffff',
        whitesmoke: 'f5f5f5',
        yellow: 'ffff00',
        yellowgreen: '9acd32'}, c; for (c in a)m == c && (m = a[c]); var d = [{re: /^rgb\((\d{1,3}),\s*(\d{1,3}),\s*(\d{1,3})\)$/, example: ['rgb(123, 234, 45)', 'rgb(255,234,245)'], process: function(b) { return [parseInt(b[1]), parseInt(b[2]), parseInt(b[3])] }}, {re: /^(\w{2})(\w{2})(\w{2})$/,
      example: ['#00ff00', '336699'],
      process: function(b) { return [parseInt(b[1], 16), parseInt(b[2], 16), parseInt(b[3], 16)] }}, {re: /^(\w{1})(\w{1})(\w{1})$/, example: ['#fb0', 'f0f'], process: function(b) { return [parseInt(b[1] + b[1], 16), parseInt(b[2] + b[2], 16), parseInt(b[3] + b[3], 16)] }}]; for (c = 0; c < d.length; c++) { var b = d[c].process, k = d[c].re.exec(m); if (k)channels = b(k), this.r = channels[0], this.g = channels[1], this.b = channels[2], this.ok = !0 } this.r = this.r < 0 || isNaN(this.r) ? 0 : this.r > 255 ? 255 : this.r; this.g = this.g < 0 || isNaN(this.g) ? 0
      : this.g > 255 ? 255 : this.g; this.b = this.b < 0 || isNaN(this.b) ? 0 : this.b > 255 ? 255 : this.b; this.toRGB = function() { return 'rgb(' + this.r + ', ' + this.g + ', ' + this.b + ')' }; this.toHex = function() { var b = this.r.toString(16), a = this.g.toString(16), d = this.b.toString(16); b.length == 1 && (b = '0' + b); a.length == 1 && (a = '0' + a); d.length == 1 && (d = '0' + d); return '#' + b + a + d }; this.getHelpXML = function() {
      for (var b = [], k = 0; k < d.length; k++) for (var c = d[k].example, j = 0; j < c.length; j++)b[b.length] = c[j]; for (var h in a)b[b.length] = h; c = document.createElement('ul')
      c.setAttribute('id', 'rgbcolor-examples'); for (k = 0; k < b.length; k++) try { var l = document.createElement('li'), o = new RGBColor(b[k]), n = document.createElement('div'); n.style.cssText = 'margin: 3px; border: 1px solid black; background:' + o.toHex() + '; color:' + o.toHex(); n.appendChild(document.createTextNode('test')); var q = document.createTextNode(' ' + b[k] + ' -> ' + o.toRGB() + ' -> ' + o.toHex()); l.appendChild(n); l.appendChild(q); c.appendChild(l) } catch (p) {} return c
    }
  }
  if (!window.console)window.console = {}, window.console.log = function() {}, window.console.dir = function() {}; if (!Array.prototype.indexOf)Array.prototype.indexOf = function(m) { for (var a = 0; a < this.length; a++) if (this[a] == m) return a; return -1 };
  (function() {
    function m() {
      var a = {FRAMERATE: 30, MAX_VIRTUAL_PIXELS: 3E4}; a.init = function(c) {
        a.Definitions = {}; a.Styles = {}; a.Animations = []; a.Images = []; a.ctx = c; a.ViewPort = new function() {
          this.viewPorts = []; this.Clear = function() { this.viewPorts = [] }; this.SetCurrent = function(a, b) { this.viewPorts.push({width: a, height: b}) }; this.RemoveCurrent = function() { this.viewPorts.pop() }; this.Current = function() { return this.viewPorts[this.viewPorts.length - 1] }; this.width = function() { return this.Current().width }; this.height = function() { return this.Current().height }
          this.ComputeSize = function(a) { return a != null && typeof a === 'number' ? a : a == 'x' ? this.width() : a == 'y' ? this.height() : Math.sqrt(Math.pow(this.width(), 2) + Math.pow(this.height(), 2)) / Math.sqrt(2) }
        }()
      }; a.init(); a.ImagesLoaded = function() { for (var c = 0; c < a.Images.length; c++) if (!a.Images[c].loaded) return !1; return !0 }; a.trim = function(a) { return a.replace(/^\s+|\s+$/g, '') }; a.compressSpaces = function(a) { return a.replace(/[\s\r\t\n]+/gm, ' ') }; a.ajax = function(a) {
        var d; return (d = window.XMLHttpRequest ? new XMLHttpRequest() : new ActiveXObject('Microsoft.XMLHTTP'))
          ? (d.open('GET', a, !1), d.send(null), d.responseText) : null
      }; a.parseXml = function(a) { if (window.DOMParser) return (new DOMParser()).parseFromString(a, 'text/xml'); else { var a = a.replace(/<!DOCTYPE svg[^>]*>/, ''), d = new ActiveXObject('Microsoft.XMLDOM'); d.async = 'false'; d.loadXML(a); return d } }; a.Property = function(c, d) {
        this.name = c; this.value = d; this.hasValue = function() { return this.value != null && this.value !== '' }; this.numValue = function() {
          if (!this.hasValue()) return 0; var b = parseFloat(this.value); (this.value + '').match(/%$/) &&
  (b /= 100); return b
        }; this.valueOrDefault = function(b) { return this.hasValue() ? this.value : b }; this.numValueOrDefault = function(b) { return this.hasValue() ? this.numValue() : b }; var b = this; this.Color = {addOpacity: function(d) { var c = b.value; if (d != null && d != '') { var f = new RGBColor(b.value); f.ok && (c = 'rgba(' + f.r + ', ' + f.g + ', ' + f.b + ', ' + d + ')') } return new a.Property(b.name, c) }}; this.Definition = {getDefinition: function() { var d = b.value.replace(/^(url\()?#([^\)]+)\)?$/, '$2'); return a.Definitions[d] },
          isUrl: function() {
            return b.value.indexOf('url(') ==
  0
          },
          getFillStyle: function(b) { var d = this.getDefinition(); return d != null && d.createGradient ? d.createGradient(a.ctx, b) : d != null && d.createPattern ? d.createPattern(a.ctx, b) : null }}; this.Length = {DPI: function() { return 96 },
          EM: function(b) { var d = 12, c = new a.Property('fontSize', a.Font.Parse(a.ctx.font).fontSize); c.hasValue() && (d = c.Length.toPixels(b)); return d },
          toPixels: function(d) {
            if (!b.hasValue()) return 0; var c = b.value + ''; return c.match(/em$/) ? b.numValue() * this.EM(d) : c.match(/ex$/) ? b.numValue() * this.EM(d) / 2 : c.match(/px$/)
              ? b.numValue() : c.match(/pt$/) ? b.numValue() * 1.25 : c.match(/pc$/) ? b.numValue() * 15 : c.match(/cm$/) ? b.numValue() * this.DPI(d) / 2.54 : c.match(/mm$/) ? b.numValue() * this.DPI(d) / 25.4 : c.match(/in$/) ? b.numValue() * this.DPI(d) : c.match(/%$/) ? b.numValue() * a.ViewPort.ComputeSize(d) : b.numValue()
          }}; this.Time = {toMilliseconds: function() { if (!b.hasValue()) return 0; var a = b.value + ''; if (a.match(/s$/)) return b.numValue() * 1E3; a.match(/ms$/); return b.numValue() }}; this.Angle = {toRadians: function() {
          if (!b.hasValue()) return 0; var a = b.value +
  ''; return a.match(/deg$/) ? b.numValue() * (Math.PI / 180) : a.match(/grad$/) ? b.numValue() * (Math.PI / 200) : a.match(/rad$/) ? b.numValue() : b.numValue() * (Math.PI / 180)
        }}
      }; a.Font = new function() {
        this.Styles = ['normal', 'italic', 'oblique', 'inherit']; this.Variants = ['normal', 'small-caps', 'inherit']; this.Weights = 'normal,bold,bolder,lighter,100,200,300,400,500,600,700,800,900,inherit'.split(','); this.CreateFont = function(d, b, c, e, f, g) {
          g = g != null ? this.Parse(g) : this.CreateFont('', '', '', '', '', a.ctx.font); return {fontFamily: f ||
  g.fontFamily,
          fontSize: e || g.fontSize,
          fontStyle: d || g.fontStyle,
          fontWeight: c || g.fontWeight,
          fontVariant: b || g.fontVariant,
          toString: function() { return [this.fontStyle, this.fontVariant, this.fontWeight, this.fontSize, this.fontFamily].join(' ') }}
        }; var c = this; this.Parse = function(d) {
          for (var b = {}, d = a.trim(a.compressSpaces(d || '')).split(' '), k = !1, e = !1, f = !1, g = !1, j = '', h = 0; h < d.length; h++) {
            if (!e && c.Styles.indexOf(d[h]) != -1) { if (d[h] != 'inherit')b.fontStyle = d[h]; e = !0 } else if (!g && c.Variants.indexOf(d[h]) != -1) {
              if (d[h] != 'inherit') {
                b.fontVariant =
  d[h]
              }e = g = !0
            } else if (!f && c.Weights.indexOf(d[h]) != -1) { if (d[h] != 'inherit')b.fontWeight = d[h]; e = g = f = !0 } else if (k)d[h] != 'inherit' && (j += d[h]); else { if (d[h] != 'inherit')b.fontSize = d[h].split('/')[0]; e = g = f = k = !0 }
          } if (j != '')b.fontFamily = j; return b
        }
      }(); a.ToNumberArray = function(c) { for (var c = a.trim(a.compressSpaces((c || '').replace(/,/g, ' '))).split(' '), d = 0; d < c.length; d++)c[d] = parseFloat(c[d]); return c }; a.Point = function(a, d) {
        this.x = a; this.y = d; this.angleTo = function(b) { return Math.atan2(b.y - this.y, b.x - this.x) }; this.applyTransform =
  function(b) { var a = this.x * b[1] + this.y * b[3] + b[5]; this.x = this.x * b[0] + this.y * b[2] + b[4]; this.y = a }
      }; a.CreatePoint = function(c) { c = a.ToNumberArray(c); return new a.Point(c[0], c[1]) }; a.CreatePath = function(c) { for (var c = a.ToNumberArray(c), d = [], b = 0; b < c.length; b += 2)d.push(new a.Point(c[b], c[b + 1])); return d }; a.BoundingBox = function(a, d, b, k) {
        this.y2 = this.x2 = this.y1 = this.x1 = Number.NaN; this.x = function() { return this.x1 }; this.y = function() { return this.y1 }; this.width = function() { return this.x2 - this.x1 }; this.height = function() {
          return this.y2 -
  this.y1
        }; this.addPoint = function(b, a) { if (b != null) { if (isNaN(this.x1) || isNaN(this.x2)) this.x2 = this.x1 = b; if (b < this.x1) this.x1 = b; if (b > this.x2) this.x2 = b } if (a != null) { if (isNaN(this.y1) || isNaN(this.y2)) this.y2 = this.y1 = a; if (a < this.y1) this.y1 = a; if (a > this.y2) this.y2 = a } }; this.addX = function(b) { this.addPoint(b, null) }; this.addY = function(b) { this.addPoint(null, b) }; this.addBoundingBox = function(b) { this.addPoint(b.x1, b.y1); this.addPoint(b.x2, b.y2) }; this.addQuadraticCurve = function(b, a, d, c, k, l) {
          d = b + 2 / 3 * (d - b); c = a + 2 / 3 * (c -
  a); this.addBezierCurve(b, a, d, d + 1 / 3 * (k - b), c, c + 1 / 3 * (l - a), k, l)
        }; this.addBezierCurve = function(b, a, d, c, k, l, o, n) {
          var q = [b, a], p = [d, c], t = [k, l], m = [o, n]; this.addPoint(q[0], q[1]); this.addPoint(m[0], m[1]); for (i = 0; i <= 1; i++) {
            b = function(b) { return Math.pow(1 - b, 3) * q[i] + 3 * Math.pow(1 - b, 2) * b * p[i] + 3 * (1 - b) * Math.pow(b, 2) * t[i] + Math.pow(b, 3) * m[i] }, a = 6 * q[i] - 12 * p[i] + 6 * t[i], d = -3 * q[i] + 9 * p[i] - 9 * t[i] + 3 * m[i], c = 3 * p[i] - 3 * q[i], d == 0 ? a != 0 && (a = -c / a, a > 0 && a < 1 && (i == 0 && this.addX(b(a)), i == 1 && this.addY(b(a)))) : (c = Math.pow(a, 2) - 4 * c * d, c < 0 || (k =
  (-a + Math.sqrt(c)) / (2 * d), k > 0 && k < 1 && (i == 0 && this.addX(b(k)), i == 1 && this.addY(b(k))), a = (-a - Math.sqrt(c)) / (2 * d), a > 0 && a < 1 && (i == 0 && this.addX(b(a)), i == 1 && this.addY(b(a)))))
          }
        }; this.isPointInBox = function(b, a) { return this.x1 <= b && b <= this.x2 && this.y1 <= a && a <= this.y2 }; this.addPoint(a, d); this.addPoint(b, k)
      }; a.Transform = function(c) {
        var d = this; this.Type = {}; this.Type.translate = function(b) {
          this.p = a.CreatePoint(b); this.apply = function(b) { b.translate(this.p.x || 0, this.p.y || 0) }; this.applyToPoint = function(b) {
            b.applyTransform([1,
              0, 0, 1, this.p.x || 0, this.p.y || 0])
          }
        }; this.Type.rotate = function(b) {
          b = a.ToNumberArray(b); this.angle = new a.Property('angle', b[0]); this.cx = b[1] || 0; this.cy = b[2] || 0; this.apply = function(b) { b.translate(this.cx, this.cy); b.rotate(this.angle.Angle.toRadians()); b.translate(-this.cx, -this.cy) }; this.applyToPoint = function(b) {
            var a = this.angle.Angle.toRadians(); b.applyTransform([1, 0, 0, 1, this.p.x || 0, this.p.y || 0]); b.applyTransform([Math.cos(a), Math.sin(a), -Math.sin(a), Math.cos(a), 0, 0]); b.applyTransform([1, 0, 0, 1, -this.p.x ||
  0, -this.p.y || 0])
          }
        }; this.Type.scale = function(b) { this.p = a.CreatePoint(b); this.apply = function(b) { b.scale(this.p.x || 1, this.p.y || this.p.x || 1) }; this.applyToPoint = function(b) { b.applyTransform([this.p.x || 0, 0, 0, this.p.y || 0, 0, 0]) } }; this.Type.matrix = function(b) { this.m = a.ToNumberArray(b); this.apply = function(b) { b.transform(this.m[0], this.m[1], this.m[2], this.m[3], this.m[4], this.m[5]) }; this.applyToPoint = function(b) { b.applyTransform(this.m) } }; this.Type.SkewBase = function(b) {
          this.base = d.Type.matrix; this.base(b); this.angle =
  new a.Property('angle', b)
        }; this.Type.SkewBase.prototype = new this.Type.matrix(); this.Type.skewX = function(b) { this.base = d.Type.SkewBase; this.base(b); this.m = [1, 0, Math.tan(this.angle.Angle.toRadians()), 1, 0, 0] }; this.Type.skewX.prototype = new this.Type.SkewBase(); this.Type.skewY = function(b) { this.base = d.Type.SkewBase; this.base(b); this.m = [1, Math.tan(this.angle.Angle.toRadians()), 0, 1, 0, 0] }; this.Type.skewY.prototype = new this.Type.SkewBase(); this.transforms = []; this.apply = function(b) { for (var a = 0; a < this.transforms.length; a++) this.transforms[a].apply(b) }
        this.applyToPoint = function(b) { for (var a = 0; a < this.transforms.length; a++) this.transforms[a].applyToPoint(b) }; for (var c = a.trim(a.compressSpaces(c)).split(/\s(?=[a-z])/), b = 0; b < c.length; b++) { var k = c[b].split('(')[0], e = c[b].split('(')[1].replace(')', ''); this.transforms.push(new this.Type[k](e)) }
      }; a.AspectRatio = function(c, d, b, k, e, f, g, j, h, l) {
        var d = a.compressSpaces(d), d = d.replace(/^defer\s/, ''), o = d.split(' ')[0] || 'xMidYMid', d = d.split(' ')[1] || 'meet', n = b / k, q = e / f, p = Math.min(n, q), m = Math.max(n, q); d == 'meet' && (k *=
  p, f *= p); d == 'slice' && (k *= m, f *= m); h = new a.Property('refX', h); l = new a.Property('refY', l); h.hasValue() && l.hasValue() ? c.translate(-p * h.Length.toPixels('x'), -p * l.Length.toPixels('y')) : (o.match(/^xMid/) && (d == 'meet' && p == q || d == 'slice' && m == q) && c.translate(b / 2 - k / 2, 0), o.match(/YMid$/) && (d == 'meet' && p == n || d == 'slice' && m == n) && c.translate(0, e / 2 - f / 2), o.match(/^xMax/) && (d == 'meet' && p == q || d == 'slice' && m == q) && c.translate(b - k, 0), o.match(/YMax$/) && (d == 'meet' && p == n || d == 'slice' && m == n) && c.translate(0, e - f)); o == 'none' ? c.scale(n,
          q) : d == 'meet' ? c.scale(p, p) : d == 'slice' && c.scale(m, m); c.translate(g == null ? 0 : -g, j == null ? 0 : -j)
      }; a.Element = {}; a.Element.ElementBase = function(c) {
        this.attributes = {}; this.styles = {}; this.children = []; this.attribute = function(b, d) { var c = this.attributes[b]; if (c != null) return c; c = new a.Property(b, ''); d == !0 && (this.attributes[b] = c); return c }; this.style = function(b, d) {
          var c = this.styles[b]; if (c != null) return c; c = this.attribute(b); if (c != null && c.hasValue()) return c; c = this.parent; if (c != null && (c = c.style(b), c != null && c.hasValue())) return c
          c = new a.Property(b, ''); d == !0 && (this.styles[b] = c); return c
        }; this.render = function(b) { if (this.style('display').value != 'none' && this.attribute('visibility').value != 'hidden') { b.save(); this.setContext(b); if (this.attribute('mask').hasValue()) { var a = this.attribute('mask').Definition.getDefinition(); a != null && a.apply(b, this) } else this.style('filter').hasValue() ? (a = this.style('filter').Definition.getDefinition(), a != null && a.apply(b, this)) : this.renderChildren(b); this.clearContext(b); b.restore() } }; this.setContext =
  function() {}; this.clearContext = function() {}; this.renderChildren = function(b) { for (var a = 0; a < this.children.length; a++) this.children[a].render(b) }; this.addChild = function(b, d) { var c = b; d && (c = a.CreateElement(b)); c.parent = this; this.children.push(c) }; if (c != null && c.nodeType == 1) {
          for (var d = 0; d < c.childNodes.length; d++) { var b = c.childNodes[d]; b.nodeType == 1 && this.addChild(b, !0) } for (d = 0; d < c.attributes.length; d++)b = c.attributes[d], this.attributes[b.nodeName] = new a.Property(b.nodeName, b.nodeValue); b = a.Styles[c.nodeName]
          if (b != null) for (var k in b) this.styles[k] = b[k]; if (this.attribute('class').hasValue()) for (var d = a.compressSpaces(this.attribute('class').value).split(' '), e = 0; e < d.length; e++) { b = a.Styles['.' + d[e]]; if (b != null) for (k in b) this.styles[k] = b[k]; b = a.Styles[c.nodeName + '.' + d[e]]; if (b != null) for (k in b) this.styles[k] = b[k] } if (this.attribute('style').hasValue()) {
            b = this.attribute('style').value.split(';'); for (d = 0; d < b.length; d++) {
              a.trim(b[d]) != '' && (c = b[d].split(':'), k = a.trim(c[0]), c = a.trim(c[1]), this.styles[k] = new a.Property(k,
                c))
            }
          } this.attribute('id').hasValue() && a.Definitions[this.attribute('id').value] == null && (a.Definitions[this.attribute('id').value] = this)
        }
      }; a.Element.RenderedElementBase = function(c) {
        this.base = a.Element.ElementBase; this.base(c); this.setContext = function(d) {
          if (this.style('fill').Definition.isUrl()) { var b = this.style('fill').Definition.getFillStyle(this); if (b != null)d.fillStyle = b } else if (this.style('fill').hasValue()) {
            b = this.style('fill'), this.style('fill-opacity').hasValue() && (b = b.Color.addOpacity(this.style('fill-opacity').value)),
            d.fillStyle = b.value == 'none' ? 'rgba(0,0,0,0)' : b.value
          } if (this.style('stroke').Definition.isUrl()) { if (b = this.style('stroke').Definition.getFillStyle(this), b != null)d.strokeStyle = b } else if (this.style('stroke').hasValue())b = this.style('stroke'), this.style('stroke-opacity').hasValue() && (b = b.Color.addOpacity(this.style('stroke-opacity').value)), d.strokeStyle = b.value == 'none' ? 'rgba(0,0,0,0)' : b.value; if (this.style('stroke-width').hasValue())d.lineWidth = this.style('stroke-width').Length.toPixels(); if (this.style('stroke-linecap').hasValue()) {
            d.lineCap =
  this.style('stroke-linecap').value
          } if (this.style('stroke-linejoin').hasValue())d.lineJoin = this.style('stroke-linejoin').value; if (this.style('stroke-miterlimit').hasValue())d.miterLimit = this.style('stroke-miterlimit').value; if (typeof d.font !== 'undefined')d.font = a.Font.CreateFont(this.style('font-style').value, this.style('font-variant').value, this.style('font-weight').value, this.style('font-size').hasValue() ? this.style('font-size').Length.toPixels() + 'px' : '', this.style('font-family').value).toString()
          this.attribute('transform').hasValue() && (new a.Transform(this.attribute('transform').value)).apply(d); this.attribute('clip-path').hasValue() && (b = this.attribute('clip-path').Definition.getDefinition(), b != null && b.apply(d)); if (this.style('opacity').hasValue())d.globalAlpha = this.style('opacity').numValue()
        }
      }; a.Element.RenderedElementBase.prototype = new a.Element.ElementBase(); a.Element.PathElementBase = function(c) {
        this.base = a.Element.RenderedElementBase; this.base(c); this.path = function(d) {
          d != null && d.beginPath()
          return new a.BoundingBox()
        }; this.renderChildren = function(d) {
          this.path(d); a.Mouse.checkPath(this, d); d.fillStyle != '' && d.fill(); d.strokeStyle != '' && d.stroke(); var b = this.getMarkers(); if (b != null) {
            if (this.style('marker-start').Definition.isUrl()) { var c = this.style('marker-start').Definition.getDefinition(); c.render(d, b[0][0], b[0][1]) } if (this.style('marker-mid').Definition.isUrl()) for (var c = this.style('marker-mid').Definition.getDefinition(), e = 1; e < b.length - 1; e++)c.render(d, b[e][0], b[e][1]); this.style('marker-end').Definition.isUrl() &&
  (c = this.style('marker-end').Definition.getDefinition(), c.render(d, b[b.length - 1][0], b[b.length - 1][1]))
          }
        }; this.getBoundingBox = function() { return this.path() }; this.getMarkers = function() { return null }
      }; a.Element.PathElementBase.prototype = new a.Element.RenderedElementBase(); a.Element.svg = function(c) {
        this.base = a.Element.RenderedElementBase; this.base(c); this.baseClearContext = this.clearContext; this.clearContext = function(d) { this.baseClearContext(d); a.ViewPort.RemoveCurrent() }; this.baseSetContext = this.setContext
        this.setContext = function(d) {
          d.strokeStyle = 'rgba(0,0,0,0)'; d.lineCap = 'butt'; d.lineJoin = 'miter'; d.miterLimit = 4; this.baseSetContext(d); this.attribute('x').hasValue() && this.attribute('y').hasValue() && d.translate(this.attribute('x').Length.toPixels('x'), this.attribute('y').Length.toPixels('y')); var b = a.ViewPort.width(), c = a.ViewPort.height(); if (typeof this.root === 'undefined' && this.attribute('width').hasValue() && this.attribute('height').hasValue()) {
            var b = this.attribute('width').Length.toPixels('x'), c = this.attribute('height').Length.toPixels('y'),
              e = 0, f = 0; this.attribute('refX').hasValue() && this.attribute('refY').hasValue() && (e = -this.attribute('refX').Length.toPixels('x'), f = -this.attribute('refY').Length.toPixels('y')); d.beginPath(); d.moveTo(e, f); d.lineTo(b, f); d.lineTo(b, c); d.lineTo(e, c); d.closePath(); d.clip()
          }a.ViewPort.SetCurrent(b, c); if (this.attribute('viewBox').hasValue()) {
            var e = a.ToNumberArray(this.attribute('viewBox').value), f = e[0], g = e[1], b = e[2], c = e[3]; a.AspectRatio(d, this.attribute('preserveAspectRatio').value, a.ViewPort.width(), b, a.ViewPort.height(),
              c, f, g, this.attribute('refX').value, this.attribute('refY').value); a.ViewPort.RemoveCurrent(); a.ViewPort.SetCurrent(e[2], e[3])
          }
        }
      }; a.Element.svg.prototype = new a.Element.RenderedElementBase(); a.Element.rect = function(c) {
        this.base = a.Element.PathElementBase; this.base(c); this.path = function(d) {
          var b = this.attribute('x').Length.toPixels('x'), c = this.attribute('y').Length.toPixels('y'), e = this.attribute('width').Length.toPixels('x'), f = this.attribute('height').Length.toPixels('y'), g = this.attribute('rx').Length.toPixels('x'),
            j = this.attribute('ry').Length.toPixels('y'); this.attribute('rx').hasValue() && !this.attribute('ry').hasValue() && (j = g); this.attribute('ry').hasValue() && !this.attribute('rx').hasValue() && (g = j); d != null && (d.beginPath(), d.moveTo(b + g, c), d.lineTo(b + e - g, c), d.quadraticCurveTo(b + e, c, b + e, c + j), d.lineTo(b + e, c + f - j), d.quadraticCurveTo(b + e, c + f, b + e - g, c + f), d.lineTo(b + g, c + f), d.quadraticCurveTo(b, c + f, b, c + f - j), d.lineTo(b, c + j), d.quadraticCurveTo(b, c, b + g, c), d.closePath()); return new a.BoundingBox(b, c, b + e, c + f)
        }
      }; a.Element.rect.prototype =
  new a.Element.PathElementBase(); a.Element.circle = function(c) { this.base = a.Element.PathElementBase; this.base(c); this.path = function(d) { var b = this.attribute('cx').Length.toPixels('x'), c = this.attribute('cy').Length.toPixels('y'), e = this.attribute('r').Length.toPixels(); d != null && (d.beginPath(), d.arc(b, c, e, 0, Math.PI * 2, !0), d.closePath()); return new a.BoundingBox(b - e, c - e, b + e, c + e) } }; a.Element.circle.prototype = new a.Element.PathElementBase(); a.Element.ellipse = function(c) {
        this.base = a.Element.PathElementBase; this.base(c)
        this.path = function(d) { var b = 4 * ((Math.sqrt(2) - 1) / 3), c = this.attribute('rx').Length.toPixels('x'), e = this.attribute('ry').Length.toPixels('y'), f = this.attribute('cx').Length.toPixels('x'), g = this.attribute('cy').Length.toPixels('y'); d != null && (d.beginPath(), d.moveTo(f, g - e), d.bezierCurveTo(f + b * c, g - e, f + c, g - b * e, f + c, g), d.bezierCurveTo(f + c, g + b * e, f + b * c, g + e, f, g + e), d.bezierCurveTo(f - b * c, g + e, f - c, g + b * e, f - c, g), d.bezierCurveTo(f - c, g - b * e, f - b * c, g - e, f, g - e), d.closePath()); return new a.BoundingBox(f - c, g - e, f + c, g + e) }
      }; a.Element.ellipse.prototype =
  new a.Element.PathElementBase(); a.Element.line = function(c) {
        this.base = a.Element.PathElementBase; this.base(c); this.getPoints = function() { return [new a.Point(this.attribute('x1').Length.toPixels('x'), this.attribute('y1').Length.toPixels('y')), new a.Point(this.attribute('x2').Length.toPixels('x'), this.attribute('y2').Length.toPixels('y'))] }; this.path = function(d) { var b = this.getPoints(); d != null && (d.beginPath(), d.moveTo(b[0].x, b[0].y), d.lineTo(b[1].x, b[1].y)); return new a.BoundingBox(b[0].x, b[0].y, b[1].x, b[1].y) }
        this.getMarkers = function() { var a = this.getPoints(), b = a[0].angleTo(a[1]); return [[a[0], b], [a[1], b]] }
      }; a.Element.line.prototype = new a.Element.PathElementBase(); a.Element.polyline = function(c) {
        this.base = a.Element.PathElementBase; this.base(c); this.points = a.CreatePath(this.attribute('points').value); this.path = function(d) {
          var b = new a.BoundingBox(this.points[0].x, this.points[0].y); d != null && (d.beginPath(), d.moveTo(this.points[0].x, this.points[0].y)); for (var c = 1; c < this.points.length; c++) {
            b.addPoint(this.points[c].x,
              this.points[c].y), d != null && d.lineTo(this.points[c].x, this.points[c].y)
          } return b
        }; this.getMarkers = function() { for (var a = [], b = 0; b < this.points.length - 1; b++)a.push([this.points[b], this.points[b].angleTo(this.points[b + 1])]); a.push([this.points[this.points.length - 1], a[a.length - 1][1]]); return a }
      }; a.Element.polyline.prototype = new a.Element.PathElementBase(); a.Element.polygon = function(c) {
        this.base = a.Element.polyline; this.base(c); this.basePath = this.path; this.path = function(a) {
          var b = this.basePath(a); a != null && (a.lineTo(this.points[0].x,
            this.points[0].y), a.closePath()); return b
        }
      }; a.Element.polygon.prototype = new a.Element.polyline(); a.Element.path = function(c) {
        this.base = a.Element.PathElementBase; this.base(c); c = this.attribute('d').value; c = c.replace(/,/gm, ' '); c = c.replace(/([MmZzLlHhVvCcSsQqTtAa])([MmZzLlHhVvCcSsQqTtAa])/gm, '$1 $2'); c = c.replace(/([MmZzLlHhVvCcSsQqTtAa])([MmZzLlHhVvCcSsQqTtAa])/gm, '$1 $2'); c = c.replace(/([MmZzLlHhVvCcSsQqTtAa])([^\s])/gm, '$1 $2'); c = c.replace(/([^\s])([MmZzLlHhVvCcSsQqTtAa])/gm, '$1 $2'); c = c.replace(/([0-9])([+\-])/gm,
          '$1 $2'); c = c.replace(/(\.[0-9]*)(\.)/gm, '$1 $2'); c = c.replace(/([Aa](\s+[0-9]+){3})\s+([01])\s*([01])/gm, '$1 $3 $4 '); c = a.compressSpaces(c); c = a.trim(c); this.PathParser = new function(d) {
          this.tokens = d.split(' '); this.reset = function() { this.i = -1; this.previousCommand = this.command = ''; this.start = new a.Point(0, 0); this.control = new a.Point(0, 0); this.current = new a.Point(0, 0); this.points = []; this.angles = [] }; this.isEnd = function() { return this.i >= this.tokens.length - 1 }; this.isCommandOrEnd = function() {
            return this.isEnd()
              ? !0 : this.tokens[this.i + 1].match(/^[A-Za-z]$/) != null
          }; this.isRelativeCommand = function() { return this.command == this.command.toLowerCase() }; this.getToken = function() { this.i += 1; return this.tokens[this.i] }; this.getScalar = function() { return parseFloat(this.getToken()) }; this.nextCommand = function() { this.previousCommand = this.command; this.command = this.getToken() }; this.getPoint = function() { return this.makeAbsolute(new a.Point(this.getScalar(), this.getScalar())) }; this.getAsControlPoint = function() {
            var b = this.getPoint()
            return this.control = b
          }; this.getAsCurrentPoint = function() { var b = this.getPoint(); return this.current = b }; this.getReflectedControlPoint = function() { return this.previousCommand.toLowerCase() != 'c' && this.previousCommand.toLowerCase() != 's' ? this.current : new a.Point(2 * this.current.x - this.control.x, 2 * this.current.y - this.control.y) }; this.makeAbsolute = function(b) { if (this.isRelativeCommand())b.x = this.current.x + b.x, b.y = this.current.y + b.y; return b }; this.addMarker = function(b, a, d) {
            d != null && this.angles.length > 0 && this.angles[this.angles.length -
  1] == null && (this.angles[this.angles.length - 1] = this.points[this.points.length - 1].angleTo(d)); this.addMarkerAngle(b, a == null ? null : a.angleTo(b))
          }; this.addMarkerAngle = function(b, a) { this.points.push(b); this.angles.push(a) }; this.getMarkerPoints = function() { return this.points }; this.getMarkerAngles = function() { for (var b = 0; b < this.angles.length; b++) if (this.angles[b] == null) for (var a = b + 1; a < this.angles.length; a++) if (this.angles[a] != null) { this.angles[b] = this.angles[a]; break } return this.angles }
        }(c); this.path = function(d) {
          var b =
  this.PathParser; b.reset(); var c = new a.BoundingBox(); for (d != null && d.beginPath(); !b.isEnd();) {
            switch (b.nextCommand(), b.command.toUpperCase()) {
              case 'M':var e = b.getAsCurrentPoint(); b.addMarker(e); c.addPoint(e.x, e.y); d != null && d.moveTo(e.x, e.y); for (b.start = b.current; !b.isCommandOrEnd();)e = b.getAsCurrentPoint(), b.addMarker(e, b.start), c.addPoint(e.x, e.y), d != null && d.lineTo(e.x, e.y); break; case 'L':for (;!b.isCommandOrEnd();) {
                var f = b.current, e = b.getAsCurrentPoint(); b.addMarker(e, f); c.addPoint(e.x, e.y); d != null &&
  d.lineTo(e.x, e.y)
              } break; case 'H':for (;!b.isCommandOrEnd();)e = new a.Point((b.isRelativeCommand() ? b.current.x : 0) + b.getScalar(), b.current.y), b.addMarker(e, b.current), b.current = e, c.addPoint(b.current.x, b.current.y), d != null && d.lineTo(b.current.x, b.current.y); break; case 'V':for (;!b.isCommandOrEnd();)e = new a.Point(b.current.x, (b.isRelativeCommand() ? b.current.y : 0) + b.getScalar()), b.addMarker(e, b.current), b.current = e, c.addPoint(b.current.x, b.current.y), d != null && d.lineTo(b.current.x, b.current.y); break; case 'C':for (;!b.isCommandOrEnd();) {
                var g =
  b.current, f = b.getPoint(), j = b.getAsControlPoint(), e = b.getAsCurrentPoint(); b.addMarker(e, j, f); c.addBezierCurve(g.x, g.y, f.x, f.y, j.x, j.y, e.x, e.y); d != null && d.bezierCurveTo(f.x, f.y, j.x, j.y, e.x, e.y)
              } break; case 'S':for (;!b.isCommandOrEnd();)g = b.current, f = b.getReflectedControlPoint(), j = b.getAsControlPoint(), e = b.getAsCurrentPoint(), b.addMarker(e, j, f), c.addBezierCurve(g.x, g.y, f.x, f.y, j.x, j.y, e.x, e.y), d != null && d.bezierCurveTo(f.x, f.y, j.x, j.y, e.x, e.y); break; case 'Q':for (;!b.isCommandOrEnd();) {
                g = b.current, j = b.getAsControlPoint(),
                e = b.getAsCurrentPoint(), b.addMarker(e, j, j), c.addQuadraticCurve(g.x, g.y, j.x, j.y, e.x, e.y), d != null && d.quadraticCurveTo(j.x, j.y, e.x, e.y)
              } break; case 'T':for (;!b.isCommandOrEnd();)g = b.current, j = b.getReflectedControlPoint(), b.control = j, e = b.getAsCurrentPoint(), b.addMarker(e, j, j), c.addQuadraticCurve(g.x, g.y, j.x, j.y, e.x, e.y), d != null && d.quadraticCurveTo(j.x, j.y, e.x, e.y); break; case 'A':for (;!b.isCommandOrEnd();) {
                var g = b.current, h = b.getScalar(), l = b.getScalar(), f = b.getScalar() * (Math.PI / 180), o = b.getScalar(), j = b.getScalar(),
                  e = b.getAsCurrentPoint(), n = new a.Point(Math.cos(f) * (g.x - e.x) / 2 + Math.sin(f) * (g.y - e.y) / 2, -Math.sin(f) * (g.x - e.x) / 2 + Math.cos(f) * (g.y - e.y) / 2), q = Math.pow(n.x, 2) / Math.pow(h, 2) + Math.pow(n.y, 2) / Math.pow(l, 2); q > 1 && (h *= Math.sqrt(q), l *= Math.sqrt(q)); o = (o == j ? -1 : 1) * Math.sqrt((Math.pow(h, 2) * Math.pow(l, 2) - Math.pow(h, 2) * Math.pow(n.y, 2) - Math.pow(l, 2) * Math.pow(n.x, 2)) / (Math.pow(h, 2) * Math.pow(n.y, 2) + Math.pow(l, 2) * Math.pow(n.x, 2))); isNaN(o) && (o = 0); var p = new a.Point(o * h * n.y / l, o * -l * n.x / h), g = new a.Point((g.x + e.x) / 2 + Math.cos(f) *
  p.x - Math.sin(f) * p.y, (g.y + e.y) / 2 + Math.sin(f) * p.x + Math.cos(f) * p.y), m = function(b, a) { return (b[0] * a[0] + b[1] * a[1]) / (Math.sqrt(Math.pow(b[0], 2) + Math.pow(b[1], 2)) * Math.sqrt(Math.pow(a[0], 2) + Math.pow(a[1], 2))) }, s = function(b, a) { return (b[0] * a[1] < b[1] * a[0] ? -1 : 1) * Math.acos(m(b, a)) }, o = s([1, 0], [(n.x - p.x) / h, (n.y - p.y) / l]), q = [(n.x - p.x) / h, (n.y - p.y) / l], p = [(-n.x - p.x) / h, (-n.y - p.y) / l], n = s(q, p); if (m(q, p) <= -1)n = Math.PI; m(q, p) >= 1 && (n = 0); j == 0 && n > 0 && (n -= 2 * Math.PI); j == 1 && n < 0 && (n += 2 * Math.PI); q = new a.Point(g.x - h * Math.cos((o + n) /
  2), g.y - l * Math.sin((o + n) / 2)); b.addMarkerAngle(q, (o + n) / 2 + (j == 0 ? 1 : -1) * Math.PI / 2); b.addMarkerAngle(e, n + (j == 0 ? 1 : -1) * Math.PI / 2); c.addPoint(e.x, e.y); d != null && (m = h > l ? h : l, e = h > l ? 1 : h / l, h = h > l ? l / h : 1, d.translate(g.x, g.y), d.rotate(f), d.scale(e, h), d.arc(0, 0, m, o, o + n, 1 - j), d.scale(1 / e, 1 / h), d.rotate(-f), d.translate(-g.x, -g.y))
              } break; case 'Z':d != null && d.closePath(), b.current = b.start
            }
          } return c
        }; this.getMarkers = function() {
          for (var a = this.PathParser.getMarkerPoints(), b = this.PathParser.getMarkerAngles(), c = [], e = 0; e < a.length; e++) {
            c.push([a[e],
              b[e]])
          } return c
        }
      }; a.Element.path.prototype = new a.Element.PathElementBase(); a.Element.pattern = function(c) {
        this.base = a.Element.ElementBase; this.base(c); this.createPattern = function(d) {
          var b = new a.Element.svg(); b.attributes.viewBox = new a.Property('viewBox', this.attribute('viewBox').value); b.attributes.x = new a.Property('x', this.attribute('x').value); b.attributes.y = new a.Property('y', this.attribute('y').value); b.attributes.width = new a.Property('width', this.attribute('width').value); b.attributes.height = new a.Property('height',
            this.attribute('height').value); b.children = this.children; var c = document.createElement('canvas'); c.width = this.attribute('width').Length.toPixels('x'); c.height = this.attribute('height').Length.toPixels('y'); b.render(c.getContext('2d')); return d.createPattern(c, 'repeat')
        }
      }; a.Element.pattern.prototype = new a.Element.ElementBase(); a.Element.marker = function(c) {
        this.base = a.Element.ElementBase; this.base(c); this.baseRender = this.render; this.render = function(d, b, c) {
          d.translate(b.x, b.y); this.attribute('orient').valueOrDefault('auto') ==
  'auto' && d.rotate(c); this.attribute('markerUnits').valueOrDefault('strokeWidth') == 'strokeWidth' && d.scale(d.lineWidth, d.lineWidth); d.save(); var e = new a.Element.svg(); e.attributes.viewBox = new a.Property('viewBox', this.attribute('viewBox').value); e.attributes.refX = new a.Property('refX', this.attribute('refX').value); e.attributes.refY = new a.Property('refY', this.attribute('refY').value); e.attributes.width = new a.Property('width', this.attribute('markerWidth').value); e.attributes.height = new a.Property('height',
            this.attribute('markerHeight').value); e.attributes.fill = new a.Property('fill', this.attribute('fill').valueOrDefault('black')); e.attributes.stroke = new a.Property('stroke', this.attribute('stroke').valueOrDefault('none')); e.children = this.children; e.render(d); d.restore(); this.attribute('markerUnits').valueOrDefault('strokeWidth') == 'strokeWidth' && d.scale(1 / d.lineWidth, 1 / d.lineWidth); this.attribute('orient').valueOrDefault('auto') == 'auto' && d.rotate(-c); d.translate(-b.x, -b.y)
        }
      }; a.Element.marker.prototype =
  new a.Element.ElementBase(); a.Element.defs = function(c) { this.base = a.Element.ElementBase; this.base(c); this.render = function() {} }; a.Element.defs.prototype = new a.Element.ElementBase(); a.Element.GradientBase = function(c) {
        this.base = a.Element.ElementBase; this.base(c); this.gradientUnits = this.attribute('gradientUnits').valueOrDefault('objectBoundingBox'); this.stops = []; for (c = 0; c < this.children.length; c++) this.stops.push(this.children[c]); this.getGradient = function() {}; this.createGradient = function(d, b) {
          var c = this; this.attribute('xlink:href').hasValue() &&
  (c = this.attribute('xlink:href').Definition.getDefinition()); for (var e = this.getGradient(d, b), f = 0; f < c.stops.length; f++)e.addColorStop(c.stops[f].offset, c.stops[f].color); if (this.attribute('gradientTransform').hasValue()) {
            c = a.ViewPort.viewPorts[0]; f = new a.Element.rect(); f.attributes.x = new a.Property('x', -a.MAX_VIRTUAL_PIXELS / 3); f.attributes.y = new a.Property('y', -a.MAX_VIRTUAL_PIXELS / 3); f.attributes.width = new a.Property('width', a.MAX_VIRTUAL_PIXELS); f.attributes.height = new a.Property('height', a.MAX_VIRTUAL_PIXELS)
            var g = new a.Element.g(); g.attributes.transform = new a.Property('transform', this.attribute('gradientTransform').value); g.children = [f]; f = new a.Element.svg(); f.attributes.x = new a.Property('x', 0); f.attributes.y = new a.Property('y', 0); f.attributes.width = new a.Property('width', c.width); f.attributes.height = new a.Property('height', c.height); f.children = [g]; g = document.createElement('canvas'); g.width = c.width; g.height = c.height; c = g.getContext('2d'); c.fillStyle = e; f.render(c); return c.createPattern(g, 'no-repeat')
          } return e
        }
      }
      a.Element.GradientBase.prototype = new a.Element.ElementBase(); a.Element.linearGradient = function(c) {
        this.base = a.Element.GradientBase; this.base(c); this.getGradient = function(a, b) {
          var c = b.getBoundingBox(), e = this.gradientUnits == 'objectBoundingBox' ? c.x() + c.width() * this.attribute('x1').numValue() : this.attribute('x1').Length.toPixels('x'), f = this.gradientUnits == 'objectBoundingBox' ? c.y() + c.height() * this.attribute('y1').numValue() : this.attribute('y1').Length.toPixels('y'), g = this.gradientUnits == 'objectBoundingBox'
              ? c.x() + c.width() * this.attribute('x2').numValue() : this.attribute('x2').Length.toPixels('x'), c = this.gradientUnits == 'objectBoundingBox' ? c.y() + c.height() * this.attribute('y2').numValue() : this.attribute('y2').Length.toPixels('y'); return a.createLinearGradient(e, f, g, c)
        }
      }; a.Element.linearGradient.prototype = new a.Element.GradientBase(); a.Element.radialGradient = function(c) {
        this.base = a.Element.GradientBase; this.base(c); this.getGradient = function(a, b) {
          var c = b.getBoundingBox(), e = this.gradientUnits == 'objectBoundingBox'
              ? c.x() + c.width() * this.attribute('cx').numValue() : this.attribute('cx').Length.toPixels('x'), f = this.gradientUnits == 'objectBoundingBox' ? c.y() + c.height() * this.attribute('cy').numValue() : this.attribute('cy').Length.toPixels('y'), g = e, j = f; this.attribute('fx').hasValue() && (g = this.gradientUnits == 'objectBoundingBox' ? c.x() + c.width() * this.attribute('fx').numValue() : this.attribute('fx').Length.toPixels('x')); this.attribute('fy').hasValue() && (j = this.gradientUnits == 'objectBoundingBox' ? c.y() + c.height() * this.attribute('fy').numValue()
            : this.attribute('fy').Length.toPixels('y')); c = this.gradientUnits == 'objectBoundingBox' ? (c.width() + c.height()) / 2 * this.attribute('r').numValue() : this.attribute('r').Length.toPixels(); return a.createRadialGradient(g, j, 0, e, f, c)
        }
      }; a.Element.radialGradient.prototype = new a.Element.GradientBase(); a.Element.stop = function(c) {
        this.base = a.Element.ElementBase; this.base(c); this.offset = this.attribute('offset').numValue(); c = this.style('stop-color'); this.style('stop-opacity').hasValue() && (c = c.Color.addOpacity(this.style('stop-opacity').value))
        this.color = c.value
      }; a.Element.stop.prototype = new a.Element.ElementBase(); a.Element.AnimateBase = function(c) {
        this.base = a.Element.ElementBase; this.base(c); a.Animations.push(this); this.duration = 0; this.begin = this.attribute('begin').Time.toMilliseconds(); this.maxDuration = this.begin + this.attribute('dur').Time.toMilliseconds(); this.getProperty = function() { var a = this.attribute('attributeType').value, b = this.attribute('attributeName').value; return a == 'CSS' ? this.parent.style(b, !0) : this.parent.attribute(b, !0) }; this.initialValue =
  null; this.removed = !1; this.calcValue = function() { return '' }; this.update = function(a) {
          if (this.initialValue == null) this.initialValue = this.getProperty().value; if (this.duration > this.maxDuration) if (this.attribute('repeatCount').value == 'indefinite') this.duration = 0; else return this.attribute('fill').valueOrDefault('remove') == 'remove' && !this.removed ? (this.removed = !0, this.getProperty().value = this.initialValue, !0) : !1; this.duration += a; a = !1; if (this.begin < this.duration) {
            a = this.calcValue(), this.attribute('type').hasValue() &&
  (a = this.attribute('type').value + '(' + a + ')'), this.getProperty().value = a, a = !0
          } return a
        }; this.progress = function() { return (this.duration - this.begin) / (this.maxDuration - this.begin) }
      }; a.Element.AnimateBase.prototype = new a.Element.ElementBase(); a.Element.animate = function(c) { this.base = a.Element.AnimateBase; this.base(c); this.calcValue = function() { var a = this.attribute('from').numValue(), b = this.attribute('to').numValue(); return a + (b - a) * this.progress() } }; a.Element.animate.prototype = new a.Element.AnimateBase(); a.Element.animateColor =
  function(c) { this.base = a.Element.AnimateBase; this.base(c); this.calcValue = function() { var a = new RGBColor(this.attribute('from').value), b = new RGBColor(this.attribute('to').value); if (a.ok && b.ok) { var c = a.r + (b.r - a.r) * this.progress(), e = a.g + (b.g - a.g) * this.progress(), a = a.b + (b.b - a.b) * this.progress(); return 'rgb(' + parseInt(c, 10) + ',' + parseInt(e, 10) + ',' + parseInt(a, 10) + ')' } return this.attribute('from').value } }; a.Element.animateColor.prototype = new a.Element.AnimateBase(); a.Element.animateTransform = function(c) {
        this.base =
  a.Element.animate; this.base(c)
      }; a.Element.animateTransform.prototype = new a.Element.animate(); a.Element.font = function(c) {
        this.base = a.Element.ElementBase; this.base(c); this.horizAdvX = this.attribute('horiz-adv-x').numValue(); this.isArabic = this.isRTL = !1; this.missingGlyph = this.fontFace = null; this.glyphs = []; for (c = 0; c < this.children.length; c++) {
          var d = this.children[c]; if (d.type == 'font-face') this.fontFace = d, d.style('font-family').hasValue() && (a.Definitions[d.style('font-family').value] = this); else if (d.type == 'missing-glyph') {
            this.missingGlyph =
  d
          } else if (d.type == 'glyph')d.arabicForm != '' ? (this.isArabic = this.isRTL = !0, typeof this.glyphs[d.unicode] === 'undefined' && (this.glyphs[d.unicode] = []), this.glyphs[d.unicode][d.arabicForm] = d) : this.glyphs[d.unicode] = d
        }
      }; a.Element.font.prototype = new a.Element.ElementBase(); a.Element.fontface = function(c) { this.base = a.Element.ElementBase; this.base(c); this.ascent = this.attribute('ascent').value; this.descent = this.attribute('descent').value; this.unitsPerEm = this.attribute('units-per-em').numValue() }; a.Element.fontface.prototype =
  new a.Element.ElementBase(); a.Element.missingglyph = function(c) { this.base = a.Element.path; this.base(c); this.horizAdvX = 0 }; a.Element.missingglyph.prototype = new a.Element.path(); a.Element.glyph = function(c) { this.base = a.Element.path; this.base(c); this.horizAdvX = this.attribute('horiz-adv-x').numValue(); this.unicode = this.attribute('unicode').value; this.arabicForm = this.attribute('arabic-form').value }; a.Element.glyph.prototype = new a.Element.path(); a.Element.text = function(c) {
        this.base = a.Element.RenderedElementBase
        this.base(c); if (c != null) { this.children = []; for (var d = 0; d < c.childNodes.length; d++) { var b = c.childNodes[d]; b.nodeType == 1 ? this.addChild(b, !0) : b.nodeType == 3 && this.addChild(new a.Element.tspan(b), !1) } } this.baseSetContext = this.setContext; this.setContext = function(b) { this.baseSetContext(b); if (this.style('dominant-baseline').hasValue())b.textBaseline = this.style('dominant-baseline').value; if (this.style('alignment-baseline').hasValue())b.textBaseline = this.style('alignment-baseline').value }; this.renderChildren =
  function(b) {
    for (var a = this.style('text-anchor').valueOrDefault('start'), c = this.attribute('x').Length.toPixels('x'), d = this.attribute('y').Length.toPixels('y'), j = 0; j < this.children.length; j++) {
      var h = this.children[j]; h.attribute('x').hasValue() ? h.x = h.attribute('x').Length.toPixels('x') : (h.attribute('dx').hasValue() && (c += h.attribute('dx').Length.toPixels('x')), h.x = c); c = h.measureText(b); if (a != 'start' && (j == 0 || h.attribute('x').hasValue())) {
        for (var l = c, o = j + 1; o < this.children.length; o++) {
          var n = this.children[o]
          if (n.attribute('x').hasValue()) break; l += n.measureText(b)
        }h.x -= a == 'end' ? l : l / 2
      }c = h.x + c; h.attribute('y').hasValue() ? h.y = h.attribute('y').Length.toPixels('y') : (h.attribute('dy').hasValue() && (d += h.attribute('dy').Length.toPixels('y')), h.y = d); d = h.y; h.render(b)
    }
  }
      }; a.Element.text.prototype = new a.Element.RenderedElementBase(); a.Element.TextElementBase = function(c) {
        this.base = a.Element.RenderedElementBase; this.base(c); this.getGlyph = function(a, b, c) {
          var e = b[c], f = null; if (a.isArabic) {
            var g = 'isolated'; if ((c == 0 || b[c -
  1] == ' ') && c < b.length - 2 && b[c + 1] != ' ')g = 'terminal'; c > 0 && b[c - 1] != ' ' && c < b.length - 2 && b[c + 1] != ' ' && (g = 'medial'); if (c > 0 && b[c - 1] != ' ' && (c == b.length - 1 || b[c + 1] == ' '))g = 'initial'; typeof a.glyphs[e] !== 'undefined' && (f = a.glyphs[e][g], f == null && a.glyphs[e].type == 'glyph' && (f = a.glyphs[e]))
          } else f = a.glyphs[e]; if (f == null)f = a.missingGlyph; return f
        }; this.renderChildren = function(c) {
          var b = this.parent.style('font-family').Definition.getDefinition(); if (b != null) {
            var k = this.parent.style('font-size').numValueOrDefault(a.Font.Parse(a.ctx.font).fontSize),
              e = this.parent.style('font-style').valueOrDefault(a.Font.Parse(a.ctx.font).fontStyle), f = this.getText(); b.isRTL && (f = f.split('').reverse().join('')); for (var g = a.ToNumberArray(this.parent.attribute('dx').value), j = 0; j < f.length; j++) {
              var h = this.getGlyph(b, f, j), l = k / b.fontFace.unitsPerEm; c.translate(this.x, this.y); c.scale(l, -l); var o = c.lineWidth; c.lineWidth = c.lineWidth * b.fontFace.unitsPerEm / k; e == 'italic' && c.transform(1, 0, 0.4, 1, 0, 0); h.render(c); e == 'italic' && c.transform(1, 0, -0.4, 1, 0, 0); c.lineWidth = o; c.scale(1 /
  l, -1 / l); c.translate(-this.x, -this.y); this.x += k * (h.horizAdvX || b.horizAdvX) / b.fontFace.unitsPerEm; typeof g[j] !== 'undefined' && !isNaN(g[j]) && (this.x += g[j])
            }
          } else c.strokeStyle != '' && c.strokeText(a.compressSpaces(this.getText()), this.x, this.y), c.fillStyle != '' && c.fillText(a.compressSpaces(this.getText()), this.x, this.y)
        }; this.getText = function() {}; this.measureText = function(c) {
          var b = this.parent.style('font-family').Definition.getDefinition(); if (b != null) {
            var c = this.parent.style('font-size').numValueOrDefault(a.Font.Parse(a.ctx.font).fontSize),
              k = 0, e = this.getText(); b.isRTL && (e = e.split('').reverse().join('')); for (var f = a.ToNumberArray(this.parent.attribute('dx').value), g = 0; g < e.length; g++) { var j = this.getGlyph(b, e, g); k += (j.horizAdvX || b.horizAdvX) * c / b.fontFace.unitsPerEm; typeof f[g] !== 'undefined' && !isNaN(f[g]) && (k += f[g]) } return k
          }b = a.compressSpaces(this.getText()); if (!c.measureText) return b.length * 10; c.save(); this.setContext(c); b = c.measureText(b).width; c.restore(); return b
        }
      }; a.Element.TextElementBase.prototype = new a.Element.RenderedElementBase()
      a.Element.tspan = function(c) { this.base = a.Element.TextElementBase; this.base(c); this.text = c.nodeType == 3 ? c.nodeValue : c.childNodes.length > 0 ? c.childNodes[0].nodeValue : c.text; this.getText = function() { return this.text } }; a.Element.tspan.prototype = new a.Element.TextElementBase(); a.Element.tref = function(c) { this.base = a.Element.TextElementBase; this.base(c); this.getText = function() { var a = this.attribute('xlink:href').Definition.getDefinition(); if (a != null) return a.children[0].getText() } }; a.Element.tref.prototype = new a.Element.TextElementBase()
      a.Element.a = function(c) {
        this.base = a.Element.TextElementBase; this.base(c); this.hasText = !0; for (var d = 0; d < c.childNodes.length; d++) if (c.childNodes[d].nodeType != 3) this.hasText = !1; this.text = this.hasText ? c.childNodes[0].nodeValue : ''; this.getText = function() { return this.text }; this.baseRenderChildren = this.renderChildren; this.renderChildren = function(b) {
          if (this.hasText) {
            this.baseRenderChildren(b); var c = new a.Property('fontSize', a.Font.Parse(a.ctx.font).fontSize); a.Mouse.checkBoundingBox(this, new a.BoundingBox(this.x,
              this.y - c.Length.toPixels('y'), this.x + this.measureText(b), this.y))
          } else c = new a.Element.g(), c.children = this.children, c.parent = this, c.render(b)
        }; this.onclick = function() { window.open(this.attribute('xlink:href').value) }; this.onmousemove = function() { a.ctx.canvas.style.cursor = 'pointer' }
      }; a.Element.a.prototype = new a.Element.TextElementBase(); a.Element.image = function(c) {
        this.base = a.Element.RenderedElementBase; this.base(c); a.Images.push(this); this.img = document.createElement('img'); this.loaded = !1; var d = this; this.img.onload =
  function() { d.loaded = !0 }; this.img.src = this.attribute('xlink:href').value; this.renderChildren = function(b) { var c = this.attribute('x').Length.toPixels('x'), d = this.attribute('y').Length.toPixels('y'), f = this.attribute('width').Length.toPixels('x'), g = this.attribute('height').Length.toPixels('y'); f == 0 || g == 0 || (b.save(), b.translate(c, d), a.AspectRatio(b, this.attribute('preserveAspectRatio').value, f, this.img.width, g, this.img.height, 0, 0), b.drawImage(this.img, 0, 0), b.restore()) }
      }; a.Element.image.prototype = new a.Element.RenderedElementBase()
      a.Element.g = function(c) { this.base = a.Element.RenderedElementBase; this.base(c); this.getBoundingBox = function() { for (var c = new a.BoundingBox(), b = 0; b < this.children.length; b++)c.addBoundingBox(this.children[b].getBoundingBox()); return c } }; a.Element.g.prototype = new a.Element.RenderedElementBase(); a.Element.symbol = function(c) {
        this.base = a.Element.RenderedElementBase; this.base(c); this.baseSetContext = this.setContext; this.setContext = function(c) {
          this.baseSetContext(c); if (this.attribute('viewBox').hasValue()) {
            var b =
  a.ToNumberArray(this.attribute('viewBox').value), k = b[0], e = b[1]; width = b[2]; height = b[3]; a.AspectRatio(c, this.attribute('preserveAspectRatio').value, this.attribute('width').Length.toPixels('x'), width, this.attribute('height').Length.toPixels('y'), height, k, e); a.ViewPort.SetCurrent(b[2], b[3])
          }
        }
      }; a.Element.symbol.prototype = new a.Element.RenderedElementBase(); a.Element.style = function(c) {
        this.base = a.Element.ElementBase; this.base(c); for (var c = c.childNodes[0].nodeValue + (c.childNodes.length > 1 ? c.childNodes[1].nodeValue
            : ''), c = c.replace(/(\/\*([^*]|[\r\n]|(\*+([^*\/]|[\r\n])))*\*+\/)|(^[\s]*\/\/.*)/gm, ''), c = a.compressSpaces(c), c = c.split('}'), d = 0; d < c.length; d++) {
          if (a.trim(c[d]) != '') {
            for (var b = c[d].split('{'), k = b[0].split(','), b = b[1].split(';'), e = 0; e < k.length; e++) {
              var f = a.trim(k[e]); if (f != '') {
                for (var g = {}, j = 0; j < b.length; j++) { var h = b[j].indexOf(':'), l = b[j].substr(0, h), h = b[j].substr(h + 1, b[j].length - h); l != null && h != null && (g[a.trim(l)] = new a.Property(a.trim(l), a.trim(h))) }a.Styles[f] = g; if (f == '@font-face') {
                  f = g['font-family'].value.replace(/"/g,
                    ''); g = g.src.value.split(','); for (j = 0; j < g.length; j++) if (g[j].indexOf('format("svg")') > 0) { l = g[j].indexOf('url'); h = g[j].indexOf(')', l); l = g[j].substr(l + 5, h - l - 6); l = a.parseXml(a.ajax(l)).getElementsByTagName('font'); for (h = 0; h < l.length; h++) { var o = a.CreateElement(l[h]); a.Definitions[f] = o } }
                }
              }
            }
          }
        }
      }; a.Element.style.prototype = new a.Element.ElementBase(); a.Element.use = function(c) {
        this.base = a.Element.RenderedElementBase; this.base(c); this.baseSetContext = this.setContext; this.setContext = function(a) {
          this.baseSetContext(a)
          this.attribute('x').hasValue() && a.translate(this.attribute('x').Length.toPixels('x'), 0); this.attribute('y').hasValue() && a.translate(0, this.attribute('y').Length.toPixels('y'))
        }; this.getDefinition = function() { var a = this.attribute('xlink:href').Definition.getDefinition(); if (this.attribute('width').hasValue())a.attribute('width', !0).value = this.attribute('width').value; if (this.attribute('height').hasValue())a.attribute('height', !0).value = this.attribute('height').value; return a }; this.path = function(a) {
          var b =
  this.getDefinition(); b != null && b.path(a)
        }; this.renderChildren = function(a) { var b = this.getDefinition(); b != null && b.render(a) }
      }; a.Element.use.prototype = new a.Element.RenderedElementBase(); a.Element.mask = function(c) {
        this.base = a.Element.ElementBase; this.base(c); this.apply = function(a, b) {
          var c = this.attribute('x').Length.toPixels('x'), e = this.attribute('y').Length.toPixels('y'), f = this.attribute('width').Length.toPixels('x'), g = this.attribute('height').Length.toPixels('y'), j = b.attribute('mask').value; b.attribute('mask').value =
  ''; var h = document.createElement('canvas'); h.width = c + f; h.height = e + g; var l = h.getContext('2d'); this.renderChildren(l); var o = document.createElement('canvas'); o.width = c + f; o.height = e + g; var n = o.getContext('2d'); b.render(n); n.globalCompositeOperation = 'destination-in'; n.fillStyle = l.createPattern(h, 'no-repeat'); n.fillRect(0, 0, c + f, e + g); a.fillStyle = n.createPattern(o, 'no-repeat'); a.fillRect(0, 0, c + f, e + g); b.attribute('mask').value = j
        }; this.render = function() {}
      }; a.Element.mask.prototype = new a.Element.ElementBase(); a.Element.clipPath =
  function(c) { this.base = a.Element.ElementBase; this.base(c); this.apply = function(a) { for (var b = 0; b < this.children.length; b++) this.children[b].path && (this.children[b].path(a), a.clip()) }; this.render = function() {} }; a.Element.clipPath.prototype = new a.Element.ElementBase(); a.Element.filter = function(c) {
        this.base = a.Element.ElementBase; this.base(c); this.apply = function(a, b) {
          var c = b.getBoundingBox(), e = this.attribute('x').Length.toPixels('x'), f = this.attribute('y').Length.toPixels('y'); if (e == 0 || f == 0)e = c.x1, f = c.y1; var g =
  this.attribute('width').Length.toPixels('x'), j = this.attribute('height').Length.toPixels('y'); if (g == 0 || j == 0)g = c.width(), j = c.height(); c = b.style('filter').value; b.style('filter').value = ''; var h = 0.2 * g, l = 0.2 * j, o = document.createElement('canvas'); o.width = g + 2 * h; o.height = j + 2 * l; var n = o.getContext('2d'); n.translate(-e + h, -f + l); b.render(n); for (var q = 0; q < this.children.length; q++) this.children[q].apply(n, 0, 0, g + 2 * h, j + 2 * l); a.drawImage(o, 0, 0, g + 2 * h, j + 2 * l, e - h, f - l, g + 2 * h, j + 2 * l); b.style('filter', !0).value = c
        }; this.render =
  function() {}
      }; a.Element.filter.prototype = new a.Element.ElementBase(); a.Element.feGaussianBlur = function(c) {
        function d(a, c, d, f, g) {
          for (var j = 0; j < g; j++) {
            for (var h = 0; h < f; h++) {
              for (var l = a[j * f * 4 + h * 4 + 3] / 255, o = 0; o < 4; o++) {
                for (var n = d[0] * (l == 0 ? 255 : a[j * f * 4 + h * 4 + o]) * (l == 0 || o == 3 ? 1 : l), q = 1; q < d.length; q++) {
                  var p = Math.max(h - q, 0), m = a[j * f * 4 + p * 4 + 3] / 255, p = Math.min(h + q, f - 1), p = a[j * f * 4 + p * 4 + 3] / 255, s = d[q], r; m == 0 ? r = 255 : (r = Math.max(h - q, 0), r = a[j * f * 4 + r * 4 + o]); m = r * (m == 0 || o == 3 ? 1 : m); p == 0 ? r = 255 : (r = Math.min(h + q, f - 1), r = a[j * f * 4 + r * 4 + o]); n +=
  s * (m + r * (p == 0 || o == 3 ? 1 : p))
                }c[h * g * 4 + j * 4 + o] = n
              }
            }
          }
        } this.base = a.Element.ElementBase; this.base(c); this.apply = function(a, c, e, f, g) { var e = this.attribute('stdDeviation').numValue(), c = a.getImageData(0, 0, f, g), e = Math.max(e, 0.01), j = Math.ceil(e * 4) + 1; mask = []; for (var h = 0; h < j; h++)mask[h] = Math.exp(-0.5 * (h / e) * (h / e)); e = mask; j = 0; for (h = 1; h < e.length; h++)j += Math.abs(e[h]); j = 2 * j + Math.abs(e[0]); for (h = 0; h < e.length; h++)e[h] /= j; tmp = []; d(c.data, tmp, e, f, g); d(tmp, c.data, e, g, f); a.clearRect(0, 0, f, g); a.putImageData(c, 0, 0) }
      }; a.Element.filter.prototype =
  new a.Element.feGaussianBlur(); a.Element.title = function() {}; a.Element.title.prototype = new a.Element.ElementBase(); a.Element.desc = function() {}; a.Element.desc.prototype = new a.Element.ElementBase(); a.Element.MISSING = function(a) { console.log("ERROR: Element '" + a.nodeName + "' not yet implemented.") }; a.Element.MISSING.prototype = new a.Element.ElementBase(); a.CreateElement = function(c) {
        var d = c.nodeName.replace(/^[^:]+:/, ''), d = d.replace(/\-/g, ''), b = null, b = typeof a.Element[d] !== 'undefined' ? new a.Element[d](c) : new a.Element.MISSING(c)
        b.type = c.nodeName; return b
      }; a.load = function(c, d) { a.loadXml(c, a.ajax(d)) }; a.loadXml = function(c, d) { a.loadXmlDoc(c, a.parseXml(d)) }; a.loadXmlDoc = function(c, d) {
        a.init(c); var b = function(a) { for (var b = c.canvas; b;)a.x -= b.offsetLeft, a.y -= b.offsetTop, b = b.offsetParent; window.scrollX && (a.x += window.scrollX); window.scrollY && (a.y += window.scrollY); return a }; if (a.opts.ignoreMouse != !0) {
          c.canvas.onclick = function(c) { c = b(new a.Point(c != null ? c.clientX : event.clientX, c != null ? c.clientY : event.clientY)); a.Mouse.onclick(c.x, c.y) },
          c.canvas.onmousemove = function(c) { c = b(new a.Point(c != null ? c.clientX : event.clientX, c != null ? c.clientY : event.clientY)); a.Mouse.onmousemove(c.x, c.y) }
        } var k = a.CreateElement(d.documentElement), e = k.root = !0, f = function() {
            a.ViewPort.Clear(); c.canvas.parentNode && a.ViewPort.SetCurrent(c.canvas.parentNode.clientWidth, c.canvas.parentNode.clientHeight); if (a.opts.ignoreDimensions != !0) {
              if (k.style('width').hasValue())c.canvas.width = k.style('width').Length.toPixels('x'), c.canvas.style.width = c.canvas.width + 'px'; if (k.style('height').hasValue()) {
                c.canvas.height =
  k.style('height').Length.toPixels('y'), c.canvas.style.height = c.canvas.height + 'px'
              }
            } var b = c.canvas.clientWidth || c.canvas.width, d = c.canvas.clientHeight || c.canvas.height; a.ViewPort.SetCurrent(b, d); if (a.opts != null && a.opts.offsetX != null)k.attribute('x', !0).value = a.opts.offsetX; if (a.opts != null && a.opts.offsetY != null)k.attribute('y', !0).value = a.opts.offsetY; if (a.opts != null && a.opts.scaleWidth != null && a.opts.scaleHeight != null) {
              var f = 1, g = 1; k.attribute('width').hasValue() && (f = k.attribute('width').Length.toPixels('x') /
  a.opts.scaleWidth); k.attribute('height').hasValue() && (g = k.attribute('height').Length.toPixels('y') / a.opts.scaleHeight); k.attribute('width', !0).value = a.opts.scaleWidth; k.attribute('height', !0).value = a.opts.scaleHeight; k.attribute('viewBox', !0).value = '0 0 ' + b * f + ' ' + d * g; k.attribute('preserveAspectRatio', !0).value = 'none'
            }a.opts.ignoreClear != !0 && c.clearRect(0, 0, b, d); k.render(c); e && (e = !1, a.opts != null && typeof a.opts.renderCallback === 'function' && a.opts.renderCallback())
          }, g = !0; a.ImagesLoaded() && (g = !1, f())
        a.intervalID = setInterval(function() { var b = !1; g && a.ImagesLoaded() && (g = !1, b = !0); a.opts.ignoreMouse != !0 && (b |= a.Mouse.hasEvents()); if (a.opts.ignoreAnimation != !0) for (var c = 0; c < a.Animations.length; c++)b |= a.Animations[c].update(1E3 / a.FRAMERATE); a.opts != null && typeof a.opts.forceRedraw === 'function' && a.opts.forceRedraw() == !0 && (b = !0); b && (f(), a.Mouse.runEvents()) }, 1E3 / a.FRAMERATE)
      }; a.stop = function() { a.intervalID && clearInterval(a.intervalID) }; a.Mouse = new function() {
        this.events = []; this.hasEvents = function() {
          return this.events.length !=
  0
        }; this.onclick = function(a, d) { this.events.push({type: 'onclick', x: a, y: d, run: function(a) { if (a.onclick)a.onclick() }}) }; this.onmousemove = function(a, d) { this.events.push({type: 'onmousemove', x: a, y: d, run: function(a) { if (a.onmousemove)a.onmousemove() }}) }; this.eventElements = []; this.checkPath = function(a, d) { for (var b = 0; b < this.events.length; b++) { var k = this.events[b]; d.isPointInPath && d.isPointInPath(k.x, k.y) && (this.eventElements[b] = a) } }; this.checkBoundingBox = function(a, d) {
          for (var b = 0; b < this.events.length; b++) {
            var k =
  this.events[b]; d.isPointInBox(k.x, k.y) && (this.eventElements[b] = a)
          }
        }; this.runEvents = function() { a.ctx.canvas.style.cursor = ''; for (var c = 0; c < this.events.length; c++) for (var d = this.events[c], b = this.eventElements[c]; b;)d.run(b), b = b.parent; this.events = []; this.eventElements = [] }
      }(); return a
    } this.canvg = function(a, c, d) {
      if (a == null && c == null && d == null) {
        for (var c = document.getElementsByTagName('svg'), b = 0; b < c.length; b++) {
          a = c[b]; d = document.createElement('canvas'); d.width = a.clientWidth; d.height = a.clientHeight; a.parentNode.insertBefore(d,
            a); a.parentNode.removeChild(a); var k = document.createElement('div'); k.appendChild(a); canvg(d, k.innerHTML)
        }
      } else d = d || {}, typeof a === 'string' && (a = document.getElementById(a)), a.svg == null ? (b = m(), a.svg = b) : (b = a.svg, b.stop()), b.opts = d, a = a.getContext('2d'), typeof c.documentElement !== 'undefined' ? b.loadXmlDoc(a, c) : c.substr(0, 1) == '<' ? b.loadXml(a, c) : b.load(a, c)
    }
  })()
  if (CanvasRenderingContext2D)CanvasRenderingContext2D.prototype.drawSvg = function(m, a, c, d, b) { canvg(this.canvas, m, {ignoreMouse: !0, ignoreAnimation: !0, ignoreDimensions: !0, ignoreClear: !0, offsetX: a, offsetY: c, scaleWidth: d, scaleHeight: b}) };
  (function(m) {
    var a = m.css, c = m.CanVGRenderer, d = m.SVGRenderer, b = m.extend, k = m.merge, e = m.addEvent, f = m.createElement, g = m.discardElement; b(c.prototype, d.prototype); b(c.prototype, {create: function(a, b, c, d) { this.setContainer(b, c, d); this.configure(a) },
      setContainer: function(a, b, c) {
        var d = a.style, e = a.parentNode, g = d.left, d = d.top, k = a.offsetWidth, m = a.offsetHeight, s = {visibility: 'hidden', position: 'absolute'}; this.init.apply(this, [a, b, c]); this.canvas = f('canvas', {width: k, height: m}, {position: 'relative', left: g, top: d}, a)
        this.ttLine = f('div', null, s, e); this.ttDiv = f('div', null, s, e); this.ttTimer = void 0; this.hiddenSvg = a = f('div', {width: k, height: m}, {visibility: 'hidden', left: g, top: d}, e); a.appendChild(this.box)
      },
      configure: function(b) {
        var c = this, d = b.options.tooltip, f = d.borderWidth, g = c.ttDiv, m = d.style, p = c.ttLine, t = parseInt(m.padding, 10), m = k(m, {padding: t + 'px', 'background-color': d.backgroundColor, 'border-style': 'solid', 'border-width': f + 'px', 'border-radius': d.borderRadius + 'px'}); d.shadow && (m = k(m, {'box-shadow': '1px 1px 3px gray',
          '-webkit-box-shadow': '1px 1px 3px gray'})); a(g, m); a(p, {'border-left': '1px solid darkgray'}); e(b, 'tooltipRefresh', function(d) {
          var e = b.container, f = e.offsetLeft, e = e.offsetTop, k; g.innerHTML = d.text; k = b.tooltip.getPosition(g.offsetWidth, g.offsetHeight, {plotX: d.x, plotY: d.y}); a(g, {visibility: 'visible', left: k.x + 'px', top: k.y + 'px', 'border-color': d.borderColor}); a(p, {visibility: 'visible', left: f + d.x + 'px', top: e + b.plotTop + 'px', height: b.plotHeight + 'px'}); c.ttTimer !== void 0 && clearTimeout(c.ttTimer); c.ttTimer = setTimeout(function() {
            a(g,
              {visibility: 'hidden'}); a(p, {visibility: 'hidden'})
          }, 3E3)
        })
      },
      destroy: function() { g(this.canvas); this.ttTimer !== void 0 && clearTimeout(this.ttTimer); g(this.ttLine); g(this.ttDiv); g(this.hiddenSvg); return d.prototype.destroy.apply(this) },
      color: function(a, b, c) { a && a.linearGradient && (a = a.stops[a.stops.length - 1][1]); return d.prototype.color.call(this, a, b, c) },
      draw: function() { window.canvg(this.canvas, this.hiddenSvg.innerHTML) }})
  })(Highcharts)
  