Generate json and initial experiments with a treemap.
Tim Bunce [Tue, 11 Sep 2012 22:25:59 +0000 (23:25 +0100)]
13 files changed:
memnodes.pl
static/css/Treemap.css [new file with mode: 0644]
static/css/col1.png [new file with mode: 0644]
static/css/col2.png [new file with mode: 0644]
static/css/gradient.png [new file with mode: 0644]
static/excanvas.js [new file with mode: 0644]
static/jit-yc.js [new file with mode: 0644]
static/jit.js [new file with mode: 0644]
static/tm.html [new file with mode: 0644]
static/tm.js [new file with mode: 0644]
static/tm0.html [new file with mode: 0644]
static/tm0.js [new file with mode: 0644]
static/tm0data.js [new file with mode: 0644]

index d9e204f..c479a68 100644 (file)
@@ -3,37 +3,56 @@
 use strict;
 use warnings;
 
+my $opt_json = 1;
+
 my @stack;
 my %seqn2node;
 
-sub pop_stack {
-    my $x = pop @stack;
+sub enter_node {
+    my $x = shift;
+    if ($opt_json) {
+        print "    " x $x->{depth};
+        print qq({ "id": "$x->{seqn}", "name": "$x->{name}", "depth":$x->{depth}, "children":[ \n);
+    }
+    return;
+}
+
+sub leave_node {
+    my $x = shift;
     delete $seqn2node{$x->{seqn}};
-    my $size = 0; $size += $_  for values %{$x->{leaves}};
-    $x->{self_size} = $size;
+    my $self_size = 0; $self_size += $_  for values %{$x->{leaves}};
+    $x->{self_size} = $self_size;
     if (my $parent = $stack[-1]) {
         # link to parent
         $x->{parent_seqn} = $parent->{seqn};
         # accumulate into parent
         $parent->{kids_node_count} += 1 + ($x->{kids_node_count}||0);
-        $parent->{kids_size} += $size + $x->{kids_size};
+        $parent->{kids_size} += $self_size + $x->{kids_size};
         push @{$parent->{child_seqn}}, $x->{seqn};
     }
     # output
     # ...
-    return $x;
+    if ($opt_json) {
+        print "    " x $x->{depth};
+        my $size = $self_size + $x->{kids_size};
+        print qq(], "data":{ "\$area": $size } },\n);
+    }
+    return;
 }
 
+print "memnodes = [" if $opt_json;
+
 while (<>) {
     chomp;
     my ($type, $seqn, $val, $name, $extra) = split / /, $_, 5;
     if ($type eq "N") {     # Node ($val is depth)
         while ($val < @stack) {
-            my $x = pop_stack();
+            leave_node(my $x = pop @stack);
             warn "N $seqn d$val ends $x->{seqn} d$x->{depth}: size $x->{self_size}+$x->{kids_size}\n";
         }
         die 1 if $stack[$val];
         my $node = $stack[$val] = { seqn => $seqn, name => $name, extra => $extra, attr => [], leaves => {}, depth => $val, self_size=>0, kids_size=>0 };
+        enter_node($node);
         $seqn2node{$seqn} = $node;
     }
     elsif ($type eq "L") {  # Leaf name and memory size
@@ -51,9 +70,11 @@ while (<>) {
 
 my $x;
 while (@stack > 1) {
-    $x = pop_stack() while @stack;
+    leave_node($x = pop @stack) while @stack;
     warn "EOF ends $x->{seqn} d$x->{depth}: size $x->{self_size}+$x->{kids_size}\n";
 }
+print " ];\n" if $opt_json;
+
 use Data::Dumper;
 warn Dumper(\$x);
 warn Dumper(\%seqn2node);
diff --git a/static/css/Treemap.css b/static/css/Treemap.css
new file mode 100644 (file)
index 0000000..c4b3d02
--- /dev/null
@@ -0,0 +1,109 @@
+#right-container {
+  display: none;
+}
+
+#center-container {
+  width:800px;
+}
+
+#infovis {
+  width:800px;
+}
+
+.node {
+  color:#fff;
+  font-size:9px;
+  overflow:hidden;
+  cursor:pointer;
+/*  
+  text-shadow:2px 2px 5px #000;
+  -o-text-shadow:2px 2px 5px #000;
+  -webkit-text-shadow:2px 2px 5px #000;
+  -moz-text-shadow:2px 2px 5px #000;
+*/
+}
+
+/*TOOLTIPS*/
+.tip {
+    color: #fff;
+    width: 139px;
+    background-color: black;
+    opacity:0.9;
+    filter:alpha(opacity=90);
+    font-size:10px;
+    font-family:Verdana, Geneva, Arial, Helvetica, sans-serif;
+    padding:7px;
+}
+
+.album {
+    width:100px;
+    margin:3px;
+}
+
+#id-list {
+       background-color:#EEEEEE;
+       border:1px solid #CCCCCC;
+       margin:10px 20px 0 20px;
+       padding:5px;
+       text-align:left;
+       text-indent:2px;
+}
+
+#id-list table {
+  margin-top:2px;
+}
+
+#back {
+  margin:10px 40px;
+}
+
+.button {
+  display: inline-block;
+  outline: none;
+  cursor: pointer;
+  text-align: center;
+  text-decoration: none;
+  font: 14px / 100% Arial, Helvetica, sans-serif;
+  padding: 0.5em 1em 0.55em;
+  text-shadow: 0px 1px 1px rgba(0, 0, 0, 0.3);
+  -webkit-border-radius: 0.5em;
+  -moz-border-radius: 0.5em;
+  border-radius: 0.5em;
+  -webkit-box-shadow: 0px 1px 2px rgba(0, 0, 0, 0.2);
+  -moz-box-shadow: 0px 1px 2px rgba(0, 0, 0, 0.2);
+  box-shadow: 0px 1px 2px rgba(0, 0, 0, 0.2);
+}
+
+.button:hover {
+  text-decoration: none;
+}
+
+.button:active {
+  position: relative;
+  top: 1px;
+}
+
+/* white */
+.white {
+  color: #606060;
+  border: solid 1px #b7b7b7;
+  background: #fff;
+  background: -webkit-gradient(linear, left top, left bottom, from(#fff), to(#ededed));
+  background: -moz-linear-gradient(top,  #fff,  #ededed);
+  filter:  progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffff', endColorstr='#ededed');
+}
+
+.white:hover {
+  background: #ededed;
+  background: -webkit-gradient(linear, left top, left bottom, from(#fff), to(#dcdcdc));
+  background: -moz-linear-gradient(top,  #fff,  #dcdcdc);
+  filter:  progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffff', endColorstr='#dcdcdc');
+}
+
+.white:active {
+  color: #999;
+  background: -webkit-gradient(linear, left top, left bottom, from(#ededed), to(#fff));
+  background: -moz-linear-gradient(top,  #ededed,  #fff);
+  filter:  progid:DXImageTransform.Microsoft.gradient(startColorstr='#ededed', endColorstr='#ffffff');
+}
+
diff --git a/static/css/col1.png b/static/css/col1.png
new file mode 100644 (file)
index 0000000..7ab008f
Binary files /dev/null and b/static/css/col1.png differ
diff --git a/static/css/col2.png b/static/css/col2.png
new file mode 100644 (file)
index 0000000..c0d3891
Binary files /dev/null and b/static/css/col2.png differ
diff --git a/static/css/gradient.png b/static/css/gradient.png
new file mode 100644 (file)
index 0000000..e283966
Binary files /dev/null and b/static/css/gradient.png differ
diff --git a/static/excanvas.js b/static/excanvas.js
new file mode 100644 (file)
index 0000000..00b316c
--- /dev/null
@@ -0,0 +1,1416 @@
+// Copyright 2006 Google Inc.
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//   http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+
+// Known Issues:
+//
+// * Patterns only support repeat.
+// * Radial gradient are not implemented. The VML version of these look very
+//   different from the canvas one.
+// * Clipping paths are not implemented.
+// * Coordsize. The width and height attribute have higher priority than the
+//   width and height style values which isn't correct.
+// * Painting mode isn't implemented.
+// * Canvas width/height should is using content-box by default. IE in
+//   Quirks mode will draw the canvas using border-box. Either change your
+//   doctype to HTML5
+//   (http://www.whatwg.org/specs/web-apps/current-work/#the-doctype)
+//   or use Box Sizing Behavior from WebFX
+//   (http://webfx.eae.net/dhtml/boxsizing/boxsizing.html)
+// * Non uniform scaling does not correctly scale strokes.
+// * Optimize. There is always room for speed improvements.
+
+// Only add this code if we do not already have a canvas implementation
+if (!document.createElement('canvas').getContext) {
+
+(function() {
+
+  // alias some functions to make (compiled) code shorter
+  var m = Math;
+  var mr = m.round;
+  var ms = m.sin;
+  var mc = m.cos;
+  var abs = m.abs;
+  var sqrt = m.sqrt;
+
+  // this is used for sub pixel precision
+  var Z = 10;
+  var Z2 = Z / 2;
+
+  var IE_VERSION = +navigator.userAgent.match(/MSIE ([\d.]+)?/)[1];
+
+  /**
+   * This funtion is assigned to the <canvas> elements as element.getContext().
+   * @this {HTMLElement}
+   * @return {CanvasRenderingContext2D_}
+   */
+  function getContext() {
+    return this.context_ ||
+        (this.context_ = new CanvasRenderingContext2D_(this));
+  }
+
+  var slice = Array.prototype.slice;
+
+  /**
+   * Binds a function to an object. The returned function will always use the
+   * passed in {@code obj} as {@code this}.
+   *
+   * Example:
+   *
+   *   g = bind(f, obj, a, b)
+   *   g(c, d) // will do f.call(obj, a, b, c, d)
+   *
+   * @param {Function} f The function to bind the object to
+   * @param {Object} obj The object that should act as this when the function
+   *     is called
+   * @param {*} var_args Rest arguments that will be used as the initial
+   *     arguments when the function is called
+   * @return {Function} A new function that has bound this
+   */
+  function bind(f, obj, var_args) {
+    var a = slice.call(arguments, 2);
+    return function() {
+      return f.apply(obj, a.concat(slice.call(arguments)));
+    };
+  }
+
+  function encodeHtmlAttribute(s) {
+    return String(s).replace(/&/g, '&amp;').replace(/"/g, '&quot;');
+  }
+
+  function addNamespace(doc, prefix, urn) {
+    if (!doc.namespaces[prefix]) {
+      doc.namespaces.add(prefix, urn, '#default#VML');
+    }
+  }
+
+  function addNamespacesAndStylesheet(doc) {
+    addNamespace(doc, 'g_vml_', 'urn:schemas-microsoft-com:vml');
+    addNamespace(doc, 'g_o_', 'urn:schemas-microsoft-com:office:office');
+
+    // Setup default CSS.  Only add one style sheet per document
+    if (!doc.styleSheets['ex_canvas_']) {
+      var ss = doc.createStyleSheet();
+      ss.owningElement.id = 'ex_canvas_';
+      ss.cssText = 'canvas{display:inline-block;overflow:hidden;' +
+          // default size is 300x150 in Gecko and Opera
+          'text-align:left;width:300px;height:150px}';
+    }
+  }
+
+  // Add namespaces and stylesheet at startup.
+  addNamespacesAndStylesheet(document);
+
+  var G_vmlCanvasManager_ = {
+    init: function(opt_doc) {
+      var doc = opt_doc || document;
+      // Create a dummy element so that IE will allow canvas elements to be
+      // recognized.
+      doc.createElement('canvas');
+      doc.attachEvent('onreadystatechange', bind(this.init_, this, doc));
+    },
+
+    init_: function(doc) {
+      // find all canvas elements
+      var els = doc.getElementsByTagName('canvas');
+      for (var i = 0; i < els.length; i++) {
+        this.initElement(els[i]);
+      }
+    },
+
+    /**
+     * Public initializes a canvas element so that it can be used as canvas
+     * element from now on. This is called automatically before the page is
+     * loaded but if you are creating elements using createElement you need to
+     * make sure this is called on the element.
+     * @param {HTMLElement} el The canvas element to initialize.
+     * @return {HTMLElement} the element that was created.
+     */
+    initElement: function(el) {
+      if (!el.getContext) {
+        el.getContext = getContext;
+
+        // Add namespaces and stylesheet to document of the element.
+        addNamespacesAndStylesheet(el.ownerDocument);
+
+        // Remove fallback content. There is no way to hide text nodes so we
+        // just remove all childNodes. We could hide all elements and remove
+        // text nodes but who really cares about the fallback content.
+        el.innerHTML = '';
+
+        // do not use inline function because that will leak memory
+        el.attachEvent('onpropertychange', onPropertyChange);
+        el.attachEvent('onresize', onResize);
+
+        var attrs = el.attributes;
+        if (attrs.width && attrs.width.specified) {
+          // TODO: use runtimeStyle and coordsize
+          // el.getContext().setWidth_(attrs.width.nodeValue);
+          el.style.width = attrs.width.nodeValue + 'px';
+        } else {
+          el.width = el.clientWidth;
+        }
+        if (attrs.height && attrs.height.specified) {
+          // TODO: use runtimeStyle and coordsize
+          // el.getContext().setHeight_(attrs.height.nodeValue);
+          el.style.height = attrs.height.nodeValue + 'px';
+        } else {
+          el.height = el.clientHeight;
+        }
+        //el.getContext().setCoordsize_()
+      }
+      return el;
+    }
+  };
+
+  function onPropertyChange(e) {
+    var el = e.srcElement;
+
+    switch (e.propertyName) {
+      case 'width':
+        el.getContext().clearRect();
+        el.style.width = el.attributes.width.nodeValue + 'px';
+        // In IE8 this does not trigger onresize.
+        el.firstChild.style.width =  el.clientWidth + 'px';
+        break;
+      case 'height':
+        el.getContext().clearRect();
+        el.style.height = el.attributes.height.nodeValue + 'px';
+        el.firstChild.style.height = el.clientHeight + 'px';
+        break;
+    }
+  }
+
+  function onResize(e) {
+    var el = e.srcElement;
+    if (el.firstChild) {
+      el.firstChild.style.width =  el.clientWidth + 'px';
+      el.firstChild.style.height = el.clientHeight + 'px';
+    }
+  }
+
+  G_vmlCanvasManager_.init();
+
+  // precompute "00" to "FF"
+  var decToHex = [];
+  for (var i = 0; i < 16; i++) {
+    for (var j = 0; j < 16; j++) {
+      decToHex[i * 16 + j] = i.toString(16) + j.toString(16);
+    }
+  }
+
+  function createMatrixIdentity() {
+    return [
+      [1, 0, 0],
+      [0, 1, 0],
+      [0, 0, 1]
+    ];
+  }
+
+  function matrixMultiply(m1, m2) {
+    var result = createMatrixIdentity();
+
+    for (var x = 0; x < 3; x++) {
+      for (var y = 0; y < 3; y++) {
+        var sum = 0;
+
+        for (var z = 0; z < 3; z++) {
+          sum += m1[x][z] * m2[z][y];
+        }
+
+        result[x][y] = sum;
+      }
+    }
+    return result;
+  }
+
+  function copyState(o1, o2) {
+    o2.fillStyle     = o1.fillStyle;
+    o2.lineCap       = o1.lineCap;
+    o2.lineJoin      = o1.lineJoin;
+    o2.lineWidth     = o1.lineWidth;
+    o2.miterLimit    = o1.miterLimit;
+    o2.shadowBlur    = o1.shadowBlur;
+    o2.shadowColor   = o1.shadowColor;
+    o2.shadowOffsetX = o1.shadowOffsetX;
+    o2.shadowOffsetY = o1.shadowOffsetY;
+    o2.strokeStyle   = o1.strokeStyle;
+    o2.globalAlpha   = o1.globalAlpha;
+    o2.font          = o1.font;
+    o2.textAlign     = o1.textAlign;
+    o2.textBaseline  = o1.textBaseline;
+    o2.arcScaleX_    = o1.arcScaleX_;
+    o2.arcScaleY_    = o1.arcScaleY_;
+    o2.lineScale_    = o1.lineScale_;
+  }
+
+  var colorData = {
+    aliceblue: '#F0F8FF',
+    antiquewhite: '#FAEBD7',
+    aquamarine: '#7FFFD4',
+    azure: '#F0FFFF',
+    beige: '#F5F5DC',
+    bisque: '#FFE4C4',
+    black: '#000000',
+    blanchedalmond: '#FFEBCD',
+    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',
+    darkgrey: '#A9A9A9',
+    darkkhaki: '#BDB76B',
+    darkmagenta: '#8B008B',
+    darkolivegreen: '#556B2F',
+    darkorange: '#FF8C00',
+    darkorchid: '#9932CC',
+    darkred: '#8B0000',
+    darksalmon: '#E9967A',
+    darkseagreen: '#8FBC8F',
+    darkslateblue: '#483D8B',
+    darkslategray: '#2F4F4F',
+    darkslategrey: '#2F4F4F',
+    darkturquoise: '#00CED1',
+    darkviolet: '#9400D3',
+    deeppink: '#FF1493',
+    deepskyblue: '#00BFFF',
+    dimgray: '#696969',
+    dimgrey: '#696969',
+    dodgerblue: '#1E90FF',
+    firebrick: '#B22222',
+    floralwhite: '#FFFAF0',
+    forestgreen: '#228B22',
+    gainsboro: '#DCDCDC',
+    ghostwhite: '#F8F8FF',
+    gold: '#FFD700',
+    goldenrod: '#DAA520',
+    grey: '#808080',
+    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',
+    lightgreen: '#90EE90',
+    lightgrey: '#D3D3D3',
+    lightpink: '#FFB6C1',
+    lightsalmon: '#FFA07A',
+    lightseagreen: '#20B2AA',
+    lightskyblue: '#87CEFA',
+    lightslategray: '#778899',
+    lightslategrey: '#778899',
+    lightsteelblue: '#B0C4DE',
+    lightyellow: '#FFFFE0',
+    limegreen: '#32CD32',
+    linen: '#FAF0E6',
+    magenta: '#FF00FF',
+    mediumaquamarine: '#66CDAA',
+    mediumblue: '#0000CD',
+    mediumorchid: '#BA55D3',
+    mediumpurple: '#9370DB',
+    mediumseagreen: '#3CB371',
+    mediumslateblue: '#7B68EE',
+    mediumspringgreen: '#00FA9A',
+    mediumturquoise: '#48D1CC',
+    mediumvioletred: '#C71585',
+    midnightblue: '#191970',
+    mintcream: '#F5FFFA',
+    mistyrose: '#FFE4E1',
+    moccasin: '#FFE4B5',
+    navajowhite: '#FFDEAD',
+    oldlace: '#FDF5E6',
+    olivedrab: '#6B8E23',
+    orange: '#FFA500',
+    orangered: '#FF4500',
+    orchid: '#DA70D6',
+    palegoldenrod: '#EEE8AA',
+    palegreen: '#98FB98',
+    paleturquoise: '#AFEEEE',
+    palevioletred: '#DB7093',
+    papayawhip: '#FFEFD5',
+    peachpuff: '#FFDAB9',
+    peru: '#CD853F',
+    pink: '#FFC0CB',
+    plum: '#DDA0DD',
+    powderblue: '#B0E0E6',
+    rosybrown: '#BC8F8F',
+    royalblue: '#4169E1',
+    saddlebrown: '#8B4513',
+    salmon: '#FA8072',
+    sandybrown: '#F4A460',
+    seagreen: '#2E8B57',
+    seashell: '#FFF5EE',
+    sienna: '#A0522D',
+    skyblue: '#87CEEB',
+    slateblue: '#6A5ACD',
+    slategray: '#708090',
+    slategrey: '#708090',
+    snow: '#FFFAFA',
+    springgreen: '#00FF7F',
+    steelblue: '#4682B4',
+    tan: '#D2B48C',
+    thistle: '#D8BFD8',
+    tomato: '#FF6347',
+    turquoise: '#40E0D0',
+    violet: '#EE82EE',
+    wheat: '#F5DEB3',
+    whitesmoke: '#F5F5F5',
+    yellowgreen: '#9ACD32'
+  };
+
+
+  function getRgbHslContent(styleString) {
+    var start = styleString.indexOf('(', 3);
+    var end = styleString.indexOf(')', start + 1);
+    var parts = styleString.substring(start + 1, end).split(',');
+    // add alpha if needed
+    if (parts.length != 4 || styleString.charAt(3) != 'a') {
+      parts[3] = 1;
+    }
+    return parts;
+  }
+
+  function percent(s) {
+    return parseFloat(s) / 100;
+  }
+
+  function clamp(v, min, max) {
+    return Math.min(max, Math.max(min, v));
+  }
+
+  function hslToRgb(parts){
+    var r, g, b, h, s, l;
+    h = parseFloat(parts[0]) / 360 % 360;
+    if (h < 0)
+      h++;
+    s = clamp(percent(parts[1]), 0, 1);
+    l = clamp(percent(parts[2]), 0, 1);
+    if (s == 0) {
+      r = g = b = l; // achromatic
+    } else {
+      var q = l < 0.5 ? l * (1 + s) : l + s - l * s;
+      var p = 2 * l - q;
+      r = hueToRgb(p, q, h + 1 / 3);
+      g = hueToRgb(p, q, h);
+      b = hueToRgb(p, q, h - 1 / 3);
+    }
+
+    return '#' + decToHex[Math.floor(r * 255)] +
+        decToHex[Math.floor(g * 255)] +
+        decToHex[Math.floor(b * 255)];
+  }
+
+  function hueToRgb(m1, m2, h) {
+    if (h < 0)
+      h++;
+    if (h > 1)
+      h--;
+
+    if (6 * h < 1)
+      return m1 + (m2 - m1) * 6 * h;
+    else if (2 * h < 1)
+      return m2;
+    else if (3 * h < 2)
+      return m1 + (m2 - m1) * (2 / 3 - h) * 6;
+    else
+      return m1;
+  }
+
+  var processStyleCache = {};
+
+  function processStyle(styleString) {
+    if (styleString in processStyleCache) {
+      return processStyleCache[styleString];
+    }
+
+    var str, alpha = 1;
+
+    styleString = String(styleString);
+    if (styleString.charAt(0) == '#') {
+      str = styleString;
+    } else if (/^rgb/.test(styleString)) {
+      var parts = getRgbHslContent(styleString);
+      var str = '#', n;
+      for (var i = 0; i < 3; i++) {
+        if (parts[i].indexOf('%') != -1) {
+          n = Math.floor(percent(parts[i]) * 255);
+        } else {
+          n = +parts[i];
+        }
+        str += decToHex[clamp(n, 0, 255)];
+      }
+      alpha = +parts[3];
+    } else if (/^hsl/.test(styleString)) {
+      var parts = getRgbHslContent(styleString);
+      str = hslToRgb(parts);
+      alpha = parts[3];
+    } else {
+      str = colorData[styleString] || styleString;
+    }
+    return processStyleCache[styleString] = {color: str, alpha: alpha};
+  }
+
+  var DEFAULT_STYLE = {
+    style: 'normal',
+    variant: 'normal',
+    weight: 'normal',
+    size: 10,
+    family: 'sans-serif'
+  };
+
+  // Internal text style cache
+  var fontStyleCache = {};
+
+  function processFontStyle(styleString) {
+    if (fontStyleCache[styleString]) {
+      return fontStyleCache[styleString];
+    }
+
+    var el = document.createElement('div');
+    var style = el.style;
+    try {
+      style.font = styleString;
+    } catch (ex) {
+      // Ignore failures to set to invalid font.
+    }
+
+    return fontStyleCache[styleString] = {
+      style: style.fontStyle || DEFAULT_STYLE.style,
+      variant: style.fontVariant || DEFAULT_STYLE.variant,
+      weight: style.fontWeight || DEFAULT_STYLE.weight,
+      size: style.fontSize || DEFAULT_STYLE.size,
+      family: style.fontFamily || DEFAULT_STYLE.family
+    };
+  }
+
+  function getComputedStyle(style, element) {
+    var computedStyle = {};
+
+    for (var p in style) {
+      computedStyle[p] = style[p];
+    }
+
+    // Compute the size
+    var canvasFontSize = parseFloat(element.currentStyle.fontSize),
+        fontSize = parseFloat(style.size);
+
+    if (typeof style.size == 'number') {
+      computedStyle.size = style.size;
+    } else if (style.size.indexOf('px') != -1) {
+      computedStyle.size = fontSize;
+    } else if (style.size.indexOf('em') != -1) {
+      computedStyle.size = canvasFontSize * fontSize;
+    } else if(style.size.indexOf('%') != -1) {
+      computedStyle.size = (canvasFontSize / 100) * fontSize;
+    } else if (style.size.indexOf('pt') != -1) {
+      computedStyle.size = fontSize / .75;
+    } else {
+      computedStyle.size = canvasFontSize;
+    }
+
+    // Different scaling between normal text and VML text. This was found using
+    // trial and error to get the same size as non VML text.
+    computedStyle.size *= 0.981;
+
+    return computedStyle;
+  }
+
+  function buildStyle(style) {
+    return style.style + ' ' + style.variant + ' ' + style.weight + ' ' +
+        style.size + 'px ' + style.family;
+  }
+
+  var lineCapMap = {
+    'butt': 'flat',
+    'round': 'round'
+  };
+
+  function processLineCap(lineCap) {
+    return lineCapMap[lineCap] || 'square';
+  }
+
+  /**
+   * This class implements CanvasRenderingContext2D interface as described by
+   * the WHATWG.
+   * @param {HTMLElement} canvasElement The element that the 2D context should
+   * be associated with
+   */
+  function CanvasRenderingContext2D_(canvasElement) {
+    this.m_ = createMatrixIdentity();
+
+    this.mStack_ = [];
+    this.aStack_ = [];
+    this.currentPath_ = [];
+
+    // Canvas context properties
+    this.strokeStyle = '#000';
+    this.fillStyle = '#000';
+
+    this.lineWidth = 1;
+    this.lineJoin = 'miter';
+    this.lineCap = 'butt';
+    this.miterLimit = Z * 1;
+    this.globalAlpha = 1;
+    this.font = '10px sans-serif';
+    this.textAlign = 'left';
+    this.textBaseline = 'alphabetic';
+    this.canvas = canvasElement;
+
+    var cssText = 'width:' + canvasElement.clientWidth + 'px;height:' +
+        canvasElement.clientHeight + 'px;overflow:hidden;position:absolute';
+    var el = canvasElement.ownerDocument.createElement('div');
+    el.style.cssText = cssText;
+    canvasElement.appendChild(el);
+
+    var overlayEl = el.cloneNode(false);
+    // Use a non transparent background.
+    overlayEl.style.backgroundColor = 'red';
+    overlayEl.style.filter = 'alpha(opacity=0)';
+    canvasElement.appendChild(overlayEl);
+
+    this.element_ = el;
+    this.arcScaleX_ = 1;
+    this.arcScaleY_ = 1;
+    this.lineScale_ = 1;
+  }
+
+  var contextPrototype = CanvasRenderingContext2D_.prototype;
+  contextPrototype.clearRect = function() {
+    if (this.textMeasureEl_) {
+      this.textMeasureEl_.removeNode(true);
+      this.textMeasureEl_ = null;
+    }
+    this.element_.innerHTML = '';
+  };
+
+  contextPrototype.beginPath = function() {
+    // TODO: Branch current matrix so that save/restore has no effect
+    //       as per safari docs.
+    this.currentPath_ = [];
+  };
+
+  contextPrototype.moveTo = function(aX, aY) {
+    var p = getCoords(this, aX, aY);
+    this.currentPath_.push({type: 'moveTo', x: p.x, y: p.y});
+    this.currentX_ = p.x;
+    this.currentY_ = p.y;
+  };
+
+  contextPrototype.lineTo = function(aX, aY) {
+    var p = getCoords(this, aX, aY);
+    this.currentPath_.push({type: 'lineTo', x: p.x, y: p.y});
+
+    this.currentX_ = p.x;
+    this.currentY_ = p.y;
+  };
+
+  contextPrototype.bezierCurveTo = function(aCP1x, aCP1y,
+                                            aCP2x, aCP2y,
+                                            aX, aY) {
+    var p = getCoords(this, aX, aY);
+    var cp1 = getCoords(this, aCP1x, aCP1y);
+    var cp2 = getCoords(this, aCP2x, aCP2y);
+    bezierCurveTo(this, cp1, cp2, p);
+  };
+
+  // Helper function that takes the already fixed cordinates.
+  function bezierCurveTo(self, cp1, cp2, p) {
+    self.currentPath_.push({
+      type: 'bezierCurveTo',
+      cp1x: cp1.x,
+      cp1y: cp1.y,
+      cp2x: cp2.x,
+      cp2y: cp2.y,
+      x: p.x,
+      y: p.y
+    });
+    self.currentX_ = p.x;
+    self.currentY_ = p.y;
+  }
+
+  contextPrototype.quadraticCurveTo = function(aCPx, aCPy, aX, aY) {
+    // the following is lifted almost directly from
+    // http://developer.mozilla.org/en/docs/Canvas_tutorial:Drawing_shapes
+
+    var cp = getCoords(this, aCPx, aCPy);
+    var p = getCoords(this, aX, aY);
+
+    var cp1 = {
+      x: this.currentX_ + 2.0 / 3.0 * (cp.x - this.currentX_),
+      y: this.currentY_ + 2.0 / 3.0 * (cp.y - this.currentY_)
+    };
+    var cp2 = {
+      x: cp1.x + (p.x - this.currentX_) / 3.0,
+      y: cp1.y + (p.y - this.currentY_) / 3.0
+    };
+
+    bezierCurveTo(this, cp1, cp2, p);
+  };
+
+  contextPrototype.arc = function(aX, aY, aRadius,
+                                  aStartAngle, aEndAngle, aClockwise) {
+    aRadius *= Z;
+    var arcType = aClockwise ? 'at' : 'wa';
+
+    var xStart = aX + mc(aStartAngle) * aRadius - Z2;
+    var yStart = aY + ms(aStartAngle) * aRadius - Z2;
+
+    var xEnd = aX + mc(aEndAngle) * aRadius - Z2;
+    var yEnd = aY + ms(aEndAngle) * aRadius - Z2;
+
+    // IE won't render arches drawn counter clockwise if xStart == xEnd.
+    if (xStart == xEnd && !aClockwise) {
+      xStart += 0.125; // Offset xStart by 1/80 of a pixel. Use something
+                       // that can be represented in binary
+    }
+
+    var p = getCoords(this, aX, aY);
+    var pStart = getCoords(this, xStart, yStart);
+    var pEnd = getCoords(this, xEnd, yEnd);
+
+    this.currentPath_.push({type: arcType,
+                           x: p.x,
+                           y: p.y,
+                           radius: aRadius,
+                           xStart: pStart.x,
+                           yStart: pStart.y,
+                           xEnd: pEnd.x,
+                           yEnd: pEnd.y});
+
+  };
+
+  contextPrototype.rect = function(aX, aY, aWidth, aHeight) {
+    this.moveTo(aX, aY);
+    this.lineTo(aX + aWidth, aY);
+    this.lineTo(aX + aWidth, aY + aHeight);
+    this.lineTo(aX, aY + aHeight);
+    this.closePath();
+  };
+
+  contextPrototype.strokeRect = function(aX, aY, aWidth, aHeight) {
+    var oldPath = this.currentPath_;
+    this.beginPath();
+
+    this.moveTo(aX, aY);
+    this.lineTo(aX + aWidth, aY);
+    this.lineTo(aX + aWidth, aY + aHeight);
+    this.lineTo(aX, aY + aHeight);
+    this.closePath();
+    this.stroke();
+
+    this.currentPath_ = oldPath;
+  };
+
+  contextPrototype.fillRect = function(aX, aY, aWidth, aHeight) {
+    var oldPath = this.currentPath_;
+    this.beginPath();
+
+    this.moveTo(aX, aY);
+    this.lineTo(aX + aWidth, aY);
+    this.lineTo(aX + aWidth, aY + aHeight);
+    this.lineTo(aX, aY + aHeight);
+    this.closePath();
+    this.fill();
+
+    this.currentPath_ = oldPath;
+  };
+
+  contextPrototype.createLinearGradient = function(aX0, aY0, aX1, aY1) {
+    var gradient = new CanvasGradient_('gradient');
+    gradient.x0_ = aX0;
+    gradient.y0_ = aY0;
+    gradient.x1_ = aX1;
+    gradient.y1_ = aY1;
+    return gradient;
+  };
+
+  contextPrototype.createRadialGradient = function(aX0, aY0, aR0,
+                                                   aX1, aY1, aR1) {
+    var gradient = new CanvasGradient_('gradientradial');
+    gradient.x0_ = aX0;
+    gradient.y0_ = aY0;
+    gradient.r0_ = aR0;
+    gradient.x1_ = aX1;
+    gradient.y1_ = aY1;
+    gradient.r1_ = aR1;
+    return gradient;
+  };
+
+  contextPrototype.drawImage = function(image, var_args) {
+    var dx, dy, dw, dh, sx, sy, sw, sh;
+
+    // to find the original width we overide the width and height
+    var oldRuntimeWidth = image.runtimeStyle.width;
+    var oldRuntimeHeight = image.runtimeStyle.height;
+    image.runtimeStyle.width = 'auto';
+    image.runtimeStyle.height = 'auto';
+
+    // get the original size
+    var w = image.width;
+    var h = image.height;
+
+    // and remove overides
+    image.runtimeStyle.width = oldRuntimeWidth;
+    image.runtimeStyle.height = oldRuntimeHeight;
+
+    if (arguments.length == 3) {
+      dx = arguments[1];
+      dy = arguments[2];
+      sx = sy = 0;
+      sw = dw = w;
+      sh = dh = h;
+    } else if (arguments.length == 5) {
+      dx = arguments[1];
+      dy = arguments[2];
+      dw = arguments[3];
+      dh = arguments[4];
+      sx = sy = 0;
+      sw = w;
+      sh = h;
+    } else if (arguments.length == 9) {
+      sx = arguments[1];
+      sy = arguments[2];
+      sw = arguments[3];
+      sh = arguments[4];
+      dx = arguments[5];
+      dy = arguments[6];
+      dw = arguments[7];
+      dh = arguments[8];
+    } else {
+      throw Error('Invalid number of arguments');
+    }
+
+    var d = getCoords(this, dx, dy);
+
+    var w2 = sw / 2;
+    var h2 = sh / 2;
+
+    var vmlStr = [];
+
+    var W = 10;
+    var H = 10;
+
+    // For some reason that I've now forgotten, using divs didn't work
+    vmlStr.push(' <g_vml_:group',
+                ' coordsize="', Z * W, ',', Z * H, '"',
+                ' coordorigin="0,0"' ,
+                ' style="width:', W, 'px;height:', H, 'px;position:absolute;');
+
+    // If filters are necessary (rotation exists), create them
+    // filters are bog-slow, so only create them if abbsolutely necessary
+    // The following check doesn't account for skews (which don't exist
+    // in the canvas spec (yet) anyway.
+
+    if (this.m_[0][0] != 1 || this.m_[0][1] ||
+        this.m_[1][1] != 1 || this.m_[1][0]) {
+      var filter = [];
+
+      // Note the 12/21 reversal
+      filter.push('M11=', this.m_[0][0], ',',
+                  'M12=', this.m_[1][0], ',',
+                  'M21=', this.m_[0][1], ',',
+                  'M22=', this.m_[1][1], ',',
+                  'Dx=', mr(d.x / Z), ',',
+                  'Dy=', mr(d.y / Z), '');
+
+      // Bounding box calculation (need to minimize displayed area so that
+      // filters don't waste time on unused pixels.
+      var max = d;
+      var c2 = getCoords(this, dx + dw, dy);
+      var c3 = getCoords(this, dx, dy + dh);
+      var c4 = getCoords(this, dx + dw, dy + dh);
+
+      max.x = m.max(max.x, c2.x, c3.x, c4.x);
+      max.y = m.max(max.y, c2.y, c3.y, c4.y);
+
+      vmlStr.push('padding:0 ', mr(max.x / Z), 'px ', mr(max.y / Z),
+                  'px 0;filter:progid:DXImageTransform.Microsoft.Matrix(',
+                  filter.join(''), ", sizingmethod='clip');");
+
+    } else {
+      vmlStr.push('top:', mr(d.y / Z), 'px;left:', mr(d.x / Z), 'px;');
+    }
+
+    vmlStr.push(' ">' ,
+                '<g_vml_:image src="', image.src, '"',
+                ' style="width:', Z * dw, 'px;',
+                ' height:', Z * dh, 'px"',
+                ' cropleft="', sx / w, '"',
+                ' croptop="', sy / h, '"',
+                ' cropright="', (w - sx - sw) / w, '"',
+                ' cropbottom="', (h - sy - sh) / h, '"',
+                ' />',
+                '</g_vml_:group>');
+
+    this.element_.insertAdjacentHTML('BeforeEnd', vmlStr.join(''));
+  };
+
+  contextPrototype.stroke = function(aFill) {
+    var lineStr = [];
+    var lineOpen = false;
+
+    var W = 10;
+    var H = 10;
+
+    lineStr.push('<g_vml_:shape',
+                 ' filled="', !!aFill, '"',
+                 ' style="position:absolute;width:', W, 'px;height:', H, 'px;"',
+                 ' coordorigin="0,0"',
+                 ' coordsize="', Z * W, ',', Z * H, '"',
+                 ' stroked="', !aFill, '"',
+                 ' path="');
+
+    var newSeq = false;
+    var min = {x: null, y: null};
+    var max = {x: null, y: null};
+
+    for (var i = 0; i < this.currentPath_.length; i++) {
+      var p = this.currentPath_[i];
+      var c;
+
+      switch (p.type) {
+        case 'moveTo':
+          c = p;
+          lineStr.push(' m ', mr(p.x), ',', mr(p.y));
+          break;
+        case 'lineTo':
+          lineStr.push(' l ', mr(p.x), ',', mr(p.y));
+          break;
+        case 'close':
+          lineStr.push(' x ');
+          p = null;
+          break;
+        case 'bezierCurveTo':
+          lineStr.push(' c ',
+                       mr(p.cp1x), ',', mr(p.cp1y), ',',
+                       mr(p.cp2x), ',', mr(p.cp2y), ',',
+                       mr(p.x), ',', mr(p.y));
+          break;
+        case 'at':
+        case 'wa':
+          lineStr.push(' ', p.type, ' ',
+                       mr(p.x - this.arcScaleX_ * p.radius), ',',
+                       mr(p.y - this.arcScaleY_ * p.radius), ' ',
+                       mr(p.x + this.arcScaleX_ * p.radius), ',',
+                       mr(p.y + this.arcScaleY_ * p.radius), ' ',
+                       mr(p.xStart), ',', mr(p.yStart), ' ',
+                       mr(p.xEnd), ',', mr(p.yEnd));
+          break;
+      }
+
+
+      // TODO: Following is broken for curves due to
+      //       move to proper paths.
+
+      // Figure out dimensions so we can do gradient fills
+      // properly
+      if (p) {
+        if (min.x == null || p.x < min.x) {
+          min.x = p.x;
+        }
+        if (max.x == null || p.x > max.x) {
+          max.x = p.x;
+        }
+        if (min.y == null || p.y < min.y) {
+          min.y = p.y;
+        }
+        if (max.y == null || p.y > max.y) {
+          max.y = p.y;
+        }
+      }
+    }
+    lineStr.push(' ">');
+
+    if (!aFill) {
+      appendStroke(this, lineStr);
+    } else {
+      appendFill(this, lineStr, min, max);
+    }
+
+    lineStr.push('</g_vml_:shape>');
+
+    this.element_.insertAdjacentHTML('beforeEnd', lineStr.join(''));
+  };
+
+  function appendStroke(ctx, lineStr) {
+    var a = processStyle(ctx.strokeStyle);
+    var color = a.color;
+    var opacity = a.alpha * ctx.globalAlpha;
+    var lineWidth = ctx.lineScale_ * ctx.lineWidth;
+
+    // VML cannot correctly render a line if the width is less than 1px.
+    // In that case, we dilute the color to make the line look thinner.
+    if (lineWidth < 1) {
+      opacity *= lineWidth;
+    }
+
+    lineStr.push(
+      '<g_vml_:stroke',
+      ' opacity="', opacity, '"',
+      ' joinstyle="', ctx.lineJoin, '"',
+      ' miterlimit="', ctx.miterLimit, '"',
+      ' endcap="', processLineCap(ctx.lineCap), '"',
+      ' weight="', lineWidth, 'px"',
+      ' color="', color, '" />'
+    );
+  }
+
+  function appendFill(ctx, lineStr, min, max) {
+    var fillStyle = ctx.fillStyle;
+    var arcScaleX = ctx.arcScaleX_;
+    var arcScaleY = ctx.arcScaleY_;
+    var width = max.x - min.x;
+    var height = max.y - min.y;
+    if (fillStyle instanceof CanvasGradient_) {
+      // TODO: Gradients transformed with the transformation matrix.
+      var angle = 0;
+      var focus = {x: 0, y: 0};
+
+      // additional offset
+      var shift = 0;
+      // scale factor for offset
+      var expansion = 1;
+
+      if (fillStyle.type_ == 'gradient') {
+        var x0 = fillStyle.x0_ / arcScaleX;
+        var y0 = fillStyle.y0_ / arcScaleY;
+        var x1 = fillStyle.x1_ / arcScaleX;
+        var y1 = fillStyle.y1_ / arcScaleY;
+        var p0 = getCoords(ctx, x0, y0);
+        var p1 = getCoords(ctx, x1, y1);
+        var dx = p1.x - p0.x;
+        var dy = p1.y - p0.y;
+        angle = Math.atan2(dx, dy) * 180 / Math.PI;
+
+        // The angle should be a non-negative number.
+        if (angle < 0) {
+          angle += 360;
+        }
+
+        // Very small angles produce an unexpected result because they are
+        // converted to a scientific notation string.
+        if (angle < 1e-6) {
+          angle = 0;
+        }
+      } else {
+        var p0 = getCoords(ctx, fillStyle.x0_, fillStyle.y0_);
+        focus = {
+          x: (p0.x - min.x) / width,
+          y: (p0.y - min.y) / height
+        };
+
+        width  /= arcScaleX * Z;
+        height /= arcScaleY * Z;
+        var dimension = m.max(width, height);
+        shift = 2 * fillStyle.r0_ / dimension;
+        expansion = 2 * fillStyle.r1_ / dimension - shift;
+      }
+
+      // We need to sort the color stops in ascending order by offset,
+      // otherwise IE won't interpret it correctly.
+      var stops = fillStyle.colors_;
+      stops.sort(function(cs1, cs2) {
+        return cs1.offset - cs2.offset;
+      });
+
+      var length = stops.length;
+      var color1 = stops[0].color;
+      var color2 = stops[length - 1].color;
+      var opacity1 = stops[0].alpha * ctx.globalAlpha;
+      var opacity2 = stops[length - 1].alpha * ctx.globalAlpha;
+
+      var colors = [];
+      for (var i = 0; i < length; i++) {
+        var stop = stops[i];
+        colors.push(stop.offset * expansion + shift + ' ' + stop.color);
+      }
+
+      // When colors attribute is used, the meanings of opacity and o:opacity2
+      // are reversed.
+      lineStr.push('<g_vml_:fill type="', fillStyle.type_, '"',
+                   ' method="none" focus="100%"',
+                   ' color="', color1, '"',
+                   ' color2="', color2, '"',
+                   ' colors="', colors.join(','), '"',
+                   ' opacity="', opacity2, '"',
+                   ' g_o_:opacity2="', opacity1, '"',
+                   ' angle="', angle, '"',
+                   ' focusposition="', focus.x, ',', focus.y, '" />');
+    } else if (fillStyle instanceof CanvasPattern_) {
+      if (width && height) {
+        var deltaLeft = -min.x;
+        var deltaTop = -min.y;
+        lineStr.push('<g_vml_:fill',
+                     ' position="',
+                     deltaLeft / width * arcScaleX * arcScaleX, ',',
+                     deltaTop / height * arcScaleY * arcScaleY, '"',
+                     ' type="tile"',
+                     // TODO: Figure out the correct size to fit the scale.
+                     //' size="', w, 'px ', h, 'px"',
+                     ' src="', fillStyle.src_, '" />');
+       }
+    } else {
+      var a = processStyle(ctx.fillStyle);
+      var color = a.color;
+      var opacity = a.alpha * ctx.globalAlpha;
+      lineStr.push('<g_vml_:fill color="', color, '" opacity="', opacity,
+                   '" />');
+    }
+  }
+
+  contextPrototype.fill = function() {
+    this.stroke(true);
+  };
+
+  contextPrototype.closePath = function() {
+    this.currentPath_.push({type: 'close'});
+  };
+
+  function getCoords(ctx, aX, aY) {
+    var m = ctx.m_;
+    return {
+      x: Z * (aX * m[0][0] + aY * m[1][0] + m[2][0]) - Z2,
+      y: Z * (aX * m[0][1] + aY * m[1][1] + m[2][1]) - Z2
+    };
+  };
+
+  contextPrototype.save = function() {
+    var o = {};
+    copyState(this, o);
+    this.aStack_.push(o);
+    this.mStack_.push(this.m_);
+    this.m_ = matrixMultiply(createMatrixIdentity(), this.m_);
+  };
+
+  contextPrototype.restore = function() {
+    if (this.aStack_.length) {
+      copyState(this.aStack_.pop(), this);
+      this.m_ = this.mStack_.pop();
+    }
+  };
+
+  function matrixIsFinite(m) {
+    return isFinite(m[0][0]) && isFinite(m[0][1]) &&
+        isFinite(m[1][0]) && isFinite(m[1][1]) &&
+        isFinite(m[2][0]) && isFinite(m[2][1]);
+  }
+
+  function setM(ctx, m, updateLineScale) {
+    if (!matrixIsFinite(m)) {
+      return;
+    }
+    ctx.m_ = m;
+
+    if (updateLineScale) {
+      // Get the line scale.
+      // Determinant of this.m_ means how much the area is enlarged by the
+      // transformation. So its square root can be used as a scale factor
+      // for width.
+      var det = m[0][0] * m[1][1] - m[0][1] * m[1][0];
+      ctx.lineScale_ = sqrt(abs(det));
+    }
+  }
+
+  contextPrototype.translate = function(aX, aY) {
+    var m1 = [
+      [1,  0,  0],
+      [0,  1,  0],
+      [aX, aY, 1]
+    ];
+
+    setM(this, matrixMultiply(m1, this.m_), false);
+  };
+
+  contextPrototype.rotate = function(aRot) {
+    var c = mc(aRot);
+    var s = ms(aRot);
+
+    var m1 = [
+      [c,  s, 0],
+      [-s, c, 0],
+      [0,  0, 1]
+    ];
+
+    setM(this, matrixMultiply(m1, this.m_), false);
+  };
+
+  contextPrototype.scale = function(aX, aY) {
+    this.arcScaleX_ *= aX;
+    this.arcScaleY_ *= aY;
+    var m1 = [
+      [aX, 0,  0],
+      [0,  aY, 0],
+      [0,  0,  1]
+    ];
+
+    setM(this, matrixMultiply(m1, this.m_), true);
+  };
+
+  contextPrototype.transform = function(m11, m12, m21, m22, dx, dy) {
+    var m1 = [
+      [m11, m12, 0],
+      [m21, m22, 0],
+      [dx,  dy,  1]
+    ];
+
+    setM(this, matrixMultiply(m1, this.m_), true);
+  };
+
+  contextPrototype.setTransform = function(m11, m12, m21, m22, dx, dy) {
+    var m = [
+      [m11, m12, 0],
+      [m21, m22, 0],
+      [dx,  dy,  1]
+    ];
+
+    setM(this, m, true);
+  };
+
+  /**
+   * The text drawing function.
+   * The maxWidth argument isn't taken in account, since no browser supports
+   * it yet.
+   */
+  contextPrototype.drawText_ = function(text, x, y, maxWidth, stroke) {
+    var m = this.m_,
+        delta = 1000,
+        left = 0,
+        right = delta,
+        offset = {x: 0, y: 0},
+        lineStr = [];
+
+    var fontStyle = getComputedStyle(processFontStyle(this.font),
+                                     this.element_);
+
+    var fontStyleString = buildStyle(fontStyle);
+
+    var elementStyle = this.element_.currentStyle;
+    var textAlign = this.textAlign.toLowerCase();
+    switch (textAlign) {
+      case 'left':
+      case 'center':
+      case 'right':
+        break;
+      case 'end':
+        textAlign = elementStyle.direction == 'ltr' ? 'right' : 'left';
+        break;
+      case 'start':
+        textAlign = elementStyle.direction == 'rtl' ? 'right' : 'left';
+        break;
+      default:
+        textAlign = 'left';
+    }
+
+    // 1.75 is an arbitrary number, as there is no info about the text baseline
+    switch (this.textBaseline) {
+      case 'hanging':
+      case 'top':
+        offset.y = fontStyle.size / 1.75;
+        break;
+      case 'middle':
+        break;
+      default:
+      case null:
+      case 'alphabetic':
+      case 'ideographic':
+      case 'bottom':
+        offset.y = -fontStyle.size / 2.25;
+        break;
+    }
+
+    switch(textAlign) {
+      case 'right':
+        left = delta;
+        right = 0.05;
+        break;
+      case 'center':
+        left = right = delta / 2;
+        break;
+    }
+
+    var d = getCoords(this, x + offset.x, y + offset.y);
+
+    lineStr.push('<g_vml_:line from="', -left ,' 0" to="', right ,' 0.05" ',
+                 ' coordsize="100 100" coordorigin="0 0"',
+                 ' filled="', !stroke, '" stroked="', !!stroke,
+                 '" style="position:absolute;width:1px;height:1px;">');
+
+    if (stroke) {
+      appendStroke(this, lineStr);
+    } else {
+      // TODO: Fix the min and max params.
+      appendFill(this, lineStr, {x: -left, y: 0},
+                 {x: right, y: fontStyle.size});
+    }
+
+    var skewM = m[0][0].toFixed(3) + ',' + m[1][0].toFixed(3) + ',' +
+                m[0][1].toFixed(3) + ',' + m[1][1].toFixed(3) + ',0,0';
+
+    var skewOffset = mr(d.x / Z) + ',' + mr(d.y / Z);
+
+    lineStr.push('<g_vml_:skew on="t" matrix="', skewM ,'" ',
+                 ' offset="', skewOffset, '" origin="', left ,' 0" />',
+                 '<g_vml_:path textpathok="true" />',
+                 '<g_vml_:textpath on="true" string="',
+                 encodeHtmlAttribute(text),
+                 '" style="v-text-align:', textAlign,
+                 ';font:', encodeHtmlAttribute(fontStyleString),
+                 '" /></g_vml_:line>');
+
+    this.element_.insertAdjacentHTML('beforeEnd', lineStr.join(''));
+  };
+
+  contextPrototype.fillText = function(text, x, y, maxWidth) {
+    this.drawText_(text, x, y, maxWidth, false);
+  };
+
+  contextPrototype.strokeText = function(text, x, y, maxWidth) {
+    this.drawText_(text, x, y, maxWidth, true);
+  };
+
+  contextPrototype.measureText = function(text) {
+    if (!this.textMeasureEl_) {
+      var s = '<span style="position:absolute;' +
+          'top:-20000px;left:0;padding:0;margin:0;border:none;' +
+          'white-space:pre;"></span>';
+      this.element_.insertAdjacentHTML('beforeEnd', s);
+      this.textMeasureEl_ = this.element_.lastChild;
+    }
+    var doc = this.element_.ownerDocument;
+    this.textMeasureEl_.innerHTML = '';
+    this.textMeasureEl_.style.font = this.font;
+    // Don't use innerHTML or innerText because they allow markup/whitespace.
+    this.textMeasureEl_.appendChild(doc.createTextNode(text));
+    return {width: this.textMeasureEl_.offsetWidth};
+  };
+
+  /******** STUBS ********/
+  contextPrototype.clip = function() {
+    // TODO: Implement
+  };
+
+  contextPrototype.arcTo = function() {
+    // TODO: Implement
+  };
+
+  contextPrototype.createPattern = function(image, repetition) {
+    return new CanvasPattern_(image, repetition);
+  };
+
+  // Gradient / Pattern Stubs
+  function CanvasGradient_(aType) {
+    this.type_ = aType;
+    this.x0_ = 0;
+    this.y0_ = 0;
+    this.r0_ = 0;
+    this.x1_ = 0;
+    this.y1_ = 0;
+    this.r1_ = 0;
+    this.colors_ = [];
+  }
+
+  CanvasGradient_.prototype.addColorStop = function(aOffset, aColor) {
+    aColor = processStyle(aColor);
+    this.colors_.push({offset: aOffset,
+                       color: aColor.color,
+                       alpha: aColor.alpha});
+  };
+
+  function CanvasPattern_(image, repetition) {
+    assertImageIsValid(image);
+    switch (repetition) {
+      case 'repeat':
+      case null:
+      case '':
+        this.repetition_ = 'repeat';
+        break
+      case 'repeat-x':
+      case 'repeat-y':
+      case 'no-repeat':
+        this.repetition_ = repetition;
+        break;
+      default:
+        throwException('SYNTAX_ERR');
+    }
+
+    this.src_ = image.src;
+    this.width_ = image.width;
+    this.height_ = image.height;
+  }
+
+  function throwException(s) {
+    throw new DOMException_(s);
+  }
+
+  function assertImageIsValid(img) {
+    if (!img || img.nodeType != 1 || img.tagName != 'IMG') {
+      throwException('TYPE_MISMATCH_ERR');
+    }
+    if (img.readyState != 'complete') {
+      throwException('INVALID_STATE_ERR');
+    }
+  }
+
+  function DOMException_(s) {
+    this.code = this[s];
+    this.message = s +': DOM Exception ' + this.code;
+  }
+  var p = DOMException_.prototype = new Error;
+  p.INDEX_SIZE_ERR = 1;
+  p.DOMSTRING_SIZE_ERR = 2;
+  p.HIERARCHY_REQUEST_ERR = 3;
+  p.WRONG_DOCUMENT_ERR = 4;
+  p.INVALID_CHARACTER_ERR = 5;
+  p.NO_DATA_ALLOWED_ERR = 6;
+  p.NO_MODIFICATION_ALLOWED_ERR = 7;
+  p.NOT_FOUND_ERR = 8;
+  p.NOT_SUPPORTED_ERR = 9;
+  p.INUSE_ATTRIBUTE_ERR = 10;
+  p.INVALID_STATE_ERR = 11;
+  p.SYNTAX_ERR = 12;
+  p.INVALID_MODIFICATION_ERR = 13;
+  p.NAMESPACE_ERR = 14;
+  p.INVALID_ACCESS_ERR = 15;
+  p.VALIDATION_ERR = 16;
+  p.TYPE_MISMATCH_ERR = 17;
+
+  // set up externs
+  G_vmlCanvasManager = G_vmlCanvasManager_;
+  CanvasRenderingContext2D = CanvasRenderingContext2D_;
+  CanvasGradient = CanvasGradient_;
+  CanvasPattern = CanvasPattern_;
+  DOMException = DOMException_;
+})();
+
+} // if
\ No newline at end of file
diff --git a/static/jit-yc.js b/static/jit-yc.js
new file mode 100644 (file)
index 0000000..abdcf7a
--- /dev/null
@@ -0,0 +1,23 @@
+/*
+Copyright (c) 2011 Sencha Inc. - Author: Nicolas Garcia Belmonte (http://philogb.github.com/)
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+
+ */
+ (function(){window.$jit=function(x){x=x||window;for(var y in $jit){if($jit[y].$extend){x[y]=$jit[y]}}};$jit.version="2.0.1";var c=function(w){return document.getElementById(w)};c.empty=function(){};c.extend=function(y,w){for(var x in (w||{})){y[x]=w[x]}return y};c.lambda=function(w){return(typeof w=="function")?w:function(){return w}};c.time=Date.now||function(){return +new Date};c.splat=function(x){var w=c.type(x);return w?((w!="array")?[x]:x):[]};c.type=function(x){var w=c.type.s.call(x).match(/^\[object\s(.*)\]$/)[1].toLowerCase();if(w!="object"){return w}if(x&&x.$$family){return x.$$family}return(x&&x.nodeName&&x.nodeType==1)?"element":w};c.type.s=Object.prototype.toString;c.each=function(B,A){var z=c.type(B);if(z=="object"){for(var y in B){A(B[y],y)}}else{for(var x=0,w=B.length;x<w;x++){A(B[x],x)}}};c.indexOf=function(z,y){if(Array.indexOf){return z.indexOf(y)}for(var x=0,w=z.length;x<w;x++){if(z[x]===y){return x}}return -1};c.map=function(y,x){var w=[];c.each(y,function(A,z){w.push(x(A,z))});return w};c.reduce=function(A,y,x){var w=A.length;if(w==0){return x}var z=arguments.length==3?x:A[--w];while(w--){z=y(z,A[w])}return z};c.merge=function(){var A={};for(var z=0,w=arguments.length;z<w;z++){var x=arguments[z];if(c.type(x)!="object"){continue}for(var y in x){var C=x[y],B=A[y];A[y]=(B&&c.type(C)=="object"&&c.type(B)=="object")?c.merge(B,C):c.unlink(C)}}return A};c.unlink=function(y){var x;switch(c.type(y)){case"object":x={};for(var A in y){x[A]=c.unlink(y[A])}break;case"array":x=[];for(var z=0,w=y.length;z<w;z++){x[z]=c.unlink(y[z])}break;default:return y}return x};c.zip=function(){if(arguments.length===0){return[]}for(var y=0,x=[],w=arguments.length,B=arguments[0].length;y<B;y++){for(var z=0,A=[];z<w;z++){A.push(arguments[z][y])}x.push(A)}return x};c.rgbToHex=function(A,z){if(A.length<3){return null}if(A.length==4&&A[3]==0&&!z){return"transparent"}var x=[];for(var w=0;w<3;w++){var y=(A[w]-0).toString(16);x.push(y.length==1?"0"+y:y)}return z?x:"#"+x.join("")};c.hexToRgb=function(y){if(y.length!=7){y=y.match(/^#?(\w{1,2})(\w{1,2})(\w{1,2})$/);y.shift();if(y.length!=3){return null}var w=[];for(var x=0;x<3;x++){var z=y[x];if(z.length==1){z+=z}w.push(parseInt(z,16))}return w}else{y=parseInt(y.slice(1),16);return[y>>16,y>>8&255,y&255]}};c.destroy=function(w){c.clean(w);if(w.parentNode){w.parentNode.removeChild(w)}if(w.clearAttributes){w.clearAttributes()}};c.clean=function(z){for(var y=z.childNodes,x=0,w=y.length;x<w;x++){c.destroy(y[x])}};c.addEvent=function(y,x,w){if(y.addEventListener){y.addEventListener(x,w,false)}else{y.attachEvent("on"+x,w)}};c.addEvents=function(x,y){for(var w in y){c.addEvent(x,w,y[w])}};c.hasClass=function(x,w){return(" "+x.className+" ").indexOf(" "+w+" ")>-1};c.addClass=function(x,w){if(!c.hasClass(x,w)){x.className=(x.className+" "+w)}};c.removeClass=function(x,w){x.className=x.className.replace(new RegExp("(^|\\s)"+w+"(?:\\s|$)"),"$1")};c.getPos=function(y){var B=A(y);var w=z(y);return{x:B.x-w.x,y:B.y-w.y};function A(D){var C={x:0,y:0};while(D&&!x(D)){C.x+=D.offsetLeft;C.y+=D.offsetTop;D=D.offsetParent}return C}function z(D){var C={x:0,y:0};while(D&&!x(D)){C.x+=D.scrollLeft;C.y+=D.scrollTop;D=D.parentNode}return C}function x(C){return(/^(?:body|html)$/i).test(C.tagName)}};c.event={get:function(x,w){w=w||window;return x||w.event},getWheel:function(w){return w.wheelDelta?w.wheelDelta/120:-(w.detail||0)/3},isRightClick:function(w){return(w.which==3||w.button==2)},getPos:function(z,y){y=y||window;z=z||y.event;var x=y.document;x=x.documentElement||x.body;if(z.touches&&z.touches.length){z=z.touches[0]}var w={x:z.pageX||(z.clientX+x.scrollLeft),y:z.pageY||(z.clientY+x.scrollTop)};return w},stop:function(w){if(w.stopPropagation){w.stopPropagation()}w.cancelBubble=true;if(w.preventDefault){w.preventDefault()}else{w.returnValue=false}}};$jit.util=$jit.id=c;var q=function(x){x=x||{};var w=function(){for(var A in this){if(typeof this[A]!="function"){this[A]=c.unlink(this[A])}}this.constructor=w;if(q.prototyping){return this}var z=this.initialize?this.initialize.apply(this,arguments):this;this.$$family="class";return z};for(var y in q.Mutators){if(!x[y]){continue}x=q.Mutators[y](x,x[y]);delete x[y]}c.extend(w,this);w.constructor=q;w.prototype=x;return w};q.Mutators={Implements:function(w,x){c.each(c.splat(x),function(z){q.prototyping=z;var y=(typeof z=="function")?new z:z;for(var A in y){if(!(A in w)){w[A]=y[A]}}delete q.prototyping});return w}};c.extend(q,{inherit:function(w,z){for(var y in z){var x=z[y];var B=w[y];var A=c.type(x);if(B&&A=="function"){if(x!=B){q.override(w,y,x)}}else{if(A=="object"){w[y]=c.merge(B,x)}else{w[y]=x}}}return w},override:function(x,w,A){var z=q.prototyping;if(z&&x[w]!=z[w]){z=null}var y=function(){var B=this.parent;this.parent=z?z[w]:x[w];var C=A.apply(this,arguments);this.parent=B;return C};x[w]=y}});q.prototype.implement=function(){var w=this.prototype;c.each(Array.prototype.slice.call(arguments||[]),function(x){q.inherit(w,x)});return this};$jit.Class=q;$jit.json={prune:function(x,w){this.each(x,function(z,y){if(y==w&&z.children){delete z.children;z.children=[]}})},getParent:function(w,A){if(w.id==A){return false}var z=w.children;if(z&&z.length>0){for(var y=0;y<z.length;y++){if(z[y].id==A){return w}else{var x=this.getParent(z[y],A);if(x){return x}}}}return false},getSubtree:function(w,A){if(w.id==A){return w}for(var y=0,z=w.children;z&&y<z.length;y++){var x=this.getSubtree(z[y],A);if(x!=null){return x}}return null},eachLevel:function(w,B,y,A){if(B<=y){A(w,B);if(!w.children){return}for(var x=0,z=w.children;x<z.length;x++){this.eachLevel(z[x],B+1,y,A)}}},each:function(w,x){this.eachLevel(w,0,Number.MAX_VALUE,x)}};$jit.Trans={$extend:true,linear:function(w){return w}};var i=$jit.Trans;(function(){var w=function(z,y){y=c.splat(y);return c.extend(z,{easeIn:function(A){return z(A,y)},easeOut:function(A){return 1-z(1-A,y)},easeInOut:function(A){return(A<=0.5)?z(2*A,y)/2:(2-z(2*(1-A),y))/2}})};var x={Pow:function(z,y){return Math.pow(z,y[0]||6)},Expo:function(y){return Math.pow(2,8*(y-1))},Circ:function(y){return 1-Math.sin(Math.acos(y))},Sine:function(y){return 1-Math.sin((1-y)*Math.PI/2)},Back:function(z,y){y=y[0]||1.618;return Math.pow(z,2)*((y+1)*z-y)},Bounce:function(B){var A;for(var z=0,y=1;1;z+=y,y/=2){if(B>=(7-4*z)/11){A=y*y-Math.pow((11-6*z-11*B)/4,2);break}}return A},Elastic:function(z,y){return Math.pow(2,10*--z)*Math.cos(20*z*Math.PI*(y[0]||1)/3)}};c.each(x,function(z,y){i[y]=w(z)});c.each(["Quad","Cubic","Quart","Quint"],function(z,y){i[z]=w(function(A){return Math.pow(A,[y+2])})})})();var u=new q({initialize:function(w){this.setOptions(w)},setOptions:function(w){var x={duration:2500,fps:40,transition:i.Quart.easeInOut,compute:c.empty,complete:c.empty,link:"ignore"};this.opt=c.merge(x,w||{});return this},step:function(){var x=c.time(),w=this.opt;if(x<this.time+w.duration){var y=w.transition((x-this.time)/w.duration);w.compute(y)}else{this.timer=clearInterval(this.timer);w.compute(1);w.complete()}},start:function(){if(!this.check()){return this}this.time=0;this.startTimer();return this},startTimer:function(){var w=this,x=this.opt.fps;if(this.timer){return false}this.time=c.time()-this.time;this.timer=setInterval((function(){w.step()}),Math.round(1000/x));return true},pause:function(){this.stopTimer();return this},resume:function(){this.startTimer();return this},stopTimer:function(){if(!this.timer){return false}this.time=c.time()-this.time;this.timer=clearInterval(this.timer);return true},check:function(){if(!this.timer){return true}if(this.opt.link=="cancel"){this.stopTimer();return true}return false}});var n=function(){var y=arguments;for(var A=0,w=y.length,x={};A<w;A++){var z=n[y[A]];if(z.$extend){c.extend(x,z)}else{x[y[A]]=z}}return x};n.AreaChart={$extend:true,animate:true,labelOffset:3,type:"stacked",Tips:{enable:false,onShow:c.empty,onHide:c.empty},Events:{enable:false,onClick:c.empty},selectOnHover:true,showAggregates:true,showLabels:true,filterOnClick:false,restoreOnRightClick:false};n.Margin={$extend:false,top:0,left:0,right:0,bottom:0};n.Canvas={$extend:true,injectInto:"id",type:"2D",width:false,height:false,useCanvas:false,withLabels:true,background:false,Scene:{Lighting:{enable:false,ambient:[1,1,1],directional:{direction:{x:-100,y:-100,z:-100},color:[0.5,0.3,0.1]}}}};n.Tree={$extend:true,orientation:"left",subtreeOffset:8,siblingOffset:5,indent:10,multitree:false,align:"center"};n.Node={$extend:false,overridable:false,type:"circle",color:"#ccb",alpha:1,dim:3,height:20,width:90,autoHeight:false,autoWidth:false,lineWidth:1,transform:true,align:"center",angularWidth:1,span:1,CanvasStyles:{}};n.Edge={$extend:false,overridable:false,type:"line",color:"#ccb",lineWidth:1,dim:15,alpha:1,epsilon:7,CanvasStyles:{}};n.Fx={$extend:true,fps:40,duration:2500,transition:$jit.Trans.Quart.easeInOut,clearCanvas:true};n.Label={$extend:false,overridable:false,type:"HTML",style:" ",size:10,family:"sans-serif",textAlign:"center",textBaseline:"alphabetic",color:"#fff"};n.Tips={$extend:false,enable:false,type:"auto",offsetX:20,offsetY:20,force:false,onShow:c.empty,onHide:c.empty};n.NodeStyles={$extend:false,enable:false,type:"auto",stylesHover:false,stylesClick:false};n.Events={$extend:false,enable:false,enableForEdges:false,type:"auto",onClick:c.empty,onRightClick:c.empty,onMouseMove:c.empty,onMouseEnter:c.empty,onMouseLeave:c.empty,onDragStart:c.empty,onDragMove:c.empty,onDragCancel:c.empty,onDragEnd:c.empty,onTouchStart:c.empty,onTouchMove:c.empty,onTouchEnd:c.empty,onMouseWheel:c.empty};n.Navigation={$extend:false,enable:false,type:"auto",panning:false,zooming:false};n.Controller={$extend:true,onBeforeCompute:c.empty,onAfterCompute:c.empty,onCreateLabel:c.empty,onPlaceLabel:c.empty,onComplete:c.empty,onBeforePlotLine:c.empty,onAfterPlotLine:c.empty,onBeforePlotNode:c.empty,onAfterPlotNode:c.empty,request:false};var t={initialize:function(y,w){this.viz=w;this.canvas=w.canvas;this.config=w.config[y];this.nodeTypes=w.fx.nodeTypes;var x=this.config.type;this.dom=x=="auto"?(w.config.Label.type!="Native"):(x!="Native");this.labelContainer=this.dom&&w.labels.getLabelContainer();this.isEnabled()&&this.initializePost()},initializePost:c.empty,setAsProperty:c.lambda(false),isEnabled:function(){return this.config.enable},isLabel:function(B,A,z){B=c.event.get(B,A);var w=this.labelContainer,y=B.target||B.srcElement,x=B.relatedTarget;if(z){return x&&x==this.viz.canvas.getCtx().canvas&&!!y&&this.isDescendantOf(y,w)}else{return this.isDescendantOf(y,w)}},isDescendantOf:function(x,w){while(x&&x.parentNode){if(x.parentNode==w){return x}x=x.parentNode}return false}};var h={onMouseUp:c.empty,onMouseDown:c.empty,onMouseMove:c.empty,onMouseOver:c.empty,onMouseOut:c.empty,onMouseWheel:c.empty,onTouchStart:c.empty,onTouchMove:c.empty,onTouchEnd:c.empty,onTouchCancel:c.empty};var s=new q({initialize:function(w){this.viz=w;this.canvas=w.canvas;this.node=false;this.edge=false;this.registeredObjects=[];this.attachEvents()},attachEvents:function(){var y=this.canvas.getElement(),x=this;y.oncontextmenu=c.lambda(false);c.addEvents(y,{mouseup:function(B,A){var z=c.event.get(B,A);x.handleEvent("MouseUp",B,A,x.makeEventObject(B,A),c.event.isRightClick(z))},mousedown:function(B,A){var z=c.event.get(B,A);x.handleEvent("MouseDown",B,A,x.makeEventObject(B,A),c.event.isRightClick(z))},mousemove:function(A,z){x.handleEvent("MouseMove",A,z,x.makeEventObject(A,z))},mouseover:function(A,z){x.handleEvent("MouseOver",A,z,x.makeEventObject(A,z))},mouseout:function(A,z){x.handleEvent("MouseOut",A,z,x.makeEventObject(A,z))},touchstart:function(A,z){x.handleEvent("TouchStart",A,z,x.makeEventObject(A,z))},touchmove:function(A,z){x.handleEvent("TouchMove",A,z,x.makeEventObject(A,z))},touchend:function(A,z){x.handleEvent("TouchEnd",A,z,x.makeEventObject(A,z))}});var w=function(C,B){var A=c.event.get(C,B);var z=c.event.getWheel(A);x.handleEvent("MouseWheel",C,B,z)};if(!document.getBoxObjectFor&&window.mozInnerScreenX==null){c.addEvent(y,"mousewheel",w)}else{y.addEventListener("DOMMouseScroll",w,false)}},register:function(w){this.registeredObjects.push(w)},handleEvent:function(){var x=Array.prototype.slice.call(arguments),A=x.shift();for(var z=0,y=this.registeredObjects,w=y.length;z<w;z++){y[z]["on"+A].apply(y[z],x)}},makeEventObject:function(C,B){var z=this,A=this.viz.graph,y=this.viz.fx,x=y.nodeTypes,w=y.edgeTypes;return{pos:false,node:false,edge:false,contains:false,getNodeCalled:false,getEdgeCalled:false,getPos:function(){var F=z.viz.canvas,G=F.getSize(),H=F.getPos(),E=F.translateOffsetX,D=F.translateOffsetY,K=F.scaleOffsetX,I=F.scaleOffsetY,J=c.event.getPos(C,B);this.pos={x:(J.x-H.x-G.width/2-E)*1/K,y:(J.y-H.y-G.height/2-D)*1/I};return this.pos},getNode:function(){if(this.getNodeCalled){return this.node}this.getNodeCalled=true;for(var G in A.nodes){var F=A.nodes[G],E=F&&x[F.getData("type")],D=E&&E.contains&&E.contains.call(y,F,this.getPos());if(D){this.contains=D;return z.node=this.node=F}}return z.node=this.node=false},getEdge:function(){if(this.getEdgeCalled){return this.edge}this.getEdgeCalled=true;var F={};for(var J in A.edges){var H=A.edges[J];F[J]=true;for(var I in H){if(I in F){continue}var G=H[I],E=G&&w[G.getData("type")],D=E&&E.contains&&E.contains.call(y,G,this.getPos());if(D){this.contains=D;return z.edge=this.edge=G}}}return z.edge=this.edge=false},getContains:function(){if(this.getNodeCalled){return this.contains}this.getNode();return this.contains}}}});var o={initializeExtras:function(){var x=new s(this),w=this;c.each(["NodeStyles","Tips","Navigation","Events"],function(y){var z=new o.Classes[y](y,w);if(z.isEnabled()){x.register(z)}if(z.setAsProperty()){w[y.toLowerCase()]=z}})}};o.Classes={};o.Classes.Events=new q({Implements:[t,h],initializePost:function(){this.fx=this.viz.fx;this.ntypes=this.viz.fx.nodeTypes;this.etypes=this.viz.fx.edgeTypes;this.hovered=false;this.pressed=false;this.touched=false;this.touchMoved=false;this.moved=false},setAsProperty:c.lambda(true),onMouseUp:function(A,z,x,y){var w=c.event.get(A,z);if(!this.moved){if(y){this.config.onRightClick(this.hovered,x,w)}else{this.config.onClick(this.pressed,x,w)}}if(this.pressed){if(this.moved){this.config.onDragEnd(this.pressed,x,w)}else{this.config.onDragCancel(this.pressed,x,w)}this.pressed=this.moved=false}},onMouseOut:function(B,A,z){var x=c.event.get(B,A),y;if(this.dom&&(y=this.isLabel(B,A,true))){this.config.onMouseLeave(this.viz.graph.getNode(y.id),z,x);this.hovered=false;return}var w=x.relatedTarget,C=this.canvas.getElement();while(w&&w.parentNode){if(C==w.parentNode){return}w=w.parentNode}if(this.hovered){this.config.onMouseLeave(this.hovered,z,x);this.hovered=false}},onMouseOver:function(A,z,y){var w=c.event.get(A,z),x;if(this.dom&&(x=this.isLabel(A,z,true))){this.hovered=this.viz.graph.getNode(x.id);this.config.onMouseEnter(this.hovered,y,w)}},onMouseMove:function(C,B,A){var x,w=c.event.get(C,B);if(this.pressed){this.moved=true;this.config.onDragMove(this.pressed,A,w);return}if(this.dom){this.config.onMouseMove(this.hovered,A,w)}else{if(this.hovered){var D=this.hovered;var z=D.nodeFrom?this.etypes[D.getData("type")]:this.ntypes[D.getData("type")];var y=z&&z.contains&&z.contains.call(this.fx,D,A.getPos());if(y){this.config.onMouseMove(D,A,w);return}else{this.config.onMouseLeave(D,A,w);this.hovered=false}}if(this.hovered=(A.getNode()||(this.config.enableForEdges&&A.getEdge()))){this.config.onMouseEnter(this.hovered,A,w)}else{this.config.onMouseMove(false,A,w)}}},onMouseWheel:function(x,w,y){this.config.onMouseWheel(y,c.event.get(x,w))},onMouseDown:function(A,z,y){var w=c.event.get(A,z),x;if(this.dom){if(x=this.isLabel(A,z)){this.pressed=this.viz.graph.getNode(x.id)}}else{this.pressed=y.getNode()||(this.config.enableForEdges&&y.getEdge())}this.pressed&&this.config.onDragStart(this.pressed,y,w)},onTouchStart:function(A,z,y){var w=c.event.get(A,z),x;if(this.dom&&(x=this.isLabel(A,z))){this.touched=this.viz.graph.getNode(x.id)}else{this.touched=y.getNode()||(this.config.enableForEdges&&y.getEdge())}this.touched&&this.config.onTouchStart(this.touched,y,w)},onTouchMove:function(z,y,x){var w=c.event.get(z,y);if(this.touched){this.touchMoved=true;this.config.onTouchMove(this.touched,x,w)}},onTouchEnd:function(z,y,x){var w=c.event.get(z,y);if(this.touched){if(this.touchMoved){this.config.onTouchEnd(this.touched,x,w)}else{this.config.onTouchCancel(this.touched,x,w)}this.touched=this.touchMoved=false}}});o.Classes.Tips=new q({Implements:[t,h],initializePost:function(){if(document.body){var w=c("_tooltip")||document.createElement("div");w.id="_tooltip";w.className="tip";c.extend(w.style,{position:"absolute",display:"none",zIndex:13000});document.body.appendChild(w);this.tip=w;this.node=false}},setAsProperty:c.lambda(true),onMouseOut:function(z,y){var x=c.event.get(z,y);if(this.dom&&this.isLabel(z,y,true)){this.hide(true);return}var w=z.relatedTarget,A=this.canvas.getElement();while(w&&w.parentNode){if(A==w.parentNode){return}w=w.parentNode}this.hide(false)},onMouseOver:function(y,x){var w;if(this.dom&&(w=this.isLabel(y,x,false))){this.node=this.viz.graph.getNode(w.id);this.config.onShow(this.tip,this.node,w)}},onMouseMove:function(z,y,w){if(this.dom&&this.isLabel(z,y)){this.setTooltipPosition(c.event.getPos(z,y))}if(!this.dom){var x=w.getNode();if(!x){this.hide(true);return}if(this.config.force||!this.node||this.node.id!=x.id){this.node=x;this.config.onShow(this.tip,x,w.getContains())}this.setTooltipPosition(c.event.getPos(z,y))}},setTooltipPosition:function(F){var B=this.tip,A=B.style,z=this.config;A.display="";var D={height:document.body.clientHeight,width:document.body.clientWidth};var C={width:B.offsetWidth,height:B.offsetHeight};var w=z.offsetX,E=z.offsetY;A.top=((F.y+E+C.height>D.height)?(F.y-C.height-E):F.y+E)+"px";A.left=((F.x+C.width+w>D.width)?(F.x-C.width-w):F.x+w)+"px"},hide:function(w){this.tip.style.display="none";w&&this.config.onHide()}});o.Classes.NodeStyles=new q({Implements:[t,h],initializePost:function(){this.fx=this.viz.fx;this.types=this.viz.fx.nodeTypes;this.nStyles=this.config;this.nodeStylesOnHover=this.nStyles.stylesHover;this.nodeStylesOnClick=this.nStyles.stylesClick;this.hoveredNode=false;this.fx.nodeFxAnimation=new u();this.down=false;this.move=false},onMouseOut:function(y,x){this.down=this.move=false;if(!this.hoveredNode){return}if(this.dom&&this.isLabel(y,x,true)){this.toggleStylesOnHover(this.hoveredNode,false)}var w=y.relatedTarget,z=this.canvas.getElement();while(w&&w.parentNode){if(z==w.parentNode){return}w=w.parentNode}this.toggleStylesOnHover(this.hoveredNode,false);this.hoveredNode=false},onMouseOver:function(z,y){var w;if(this.dom&&(w=this.isLabel(z,y,true))){var x=this.viz.graph.getNode(w.id);if(x.selected){return}this.hoveredNode=x;this.toggleStylesOnHover(this.hoveredNode,true)}},onMouseDown:function(A,z,x,y){if(y){return}var w;if(this.dom&&(w=this.isLabel(A,z))){this.down=this.viz.graph.getNode(w.id)}else{if(!this.dom){this.down=x.getNode()}}this.move=false},onMouseUp:function(z,y,w,x){if(x){return}if(!this.move){this.onClick(w.getNode())}this.down=this.move=false},getRestoredStyles:function(x,w){var z={},y=this["nodeStylesOn"+w];for(var A in y){z[A]=x.styles["$"+A]}return z},toggleStylesOnHover:function(w,x){if(this.nodeStylesOnHover){this.toggleStylesOn("Hover",w,x)}},toggleStylesOnClick:function(w,x){if(this.nodeStylesOnClick){this.toggleStylesOn("Click",w,x)}},toggleStylesOn:function(A,w,C){var D=this.viz;var B=this.nStyles;if(C){var z=this;if(!w.styles){w.styles=c.merge(w.data,{})}for(var E in this["nodeStylesOn"+A]){var x="$"+E;if(!(x in w.styles)){w.styles[x]=w.getData(E)}}D.fx.nodeFx(c.extend({elements:{id:w.id,properties:z["nodeStylesOn"+A]},transition:i.Quart.easeOut,duration:300,fps:40},this.config))}else{var y=this.getRestoredStyles(w,A);D.fx.nodeFx(c.extend({elements:{id:w.id,properties:y},transition:i.Quart.easeOut,duration:300,fps:40},this.config))}},onClick:function(w){if(!w){return}var x=this.nodeStylesOnClick;if(!x){return}if(w.selected){this.toggleStylesOnClick(w,false);delete w.selected}else{this.viz.graph.eachNode(function(z){if(z.selected){for(var y in x){z.setData(y,z.styles["$"+y],"end")}delete z.selected}});this.toggleStylesOnClick(w,true);w.selected=true;delete w.hovered;this.hoveredNode=false}},onMouseMove:function(C,B,z){if(this.down){this.move=true}if(this.dom&&this.isLabel(C,B)){return}var A=this.nodeStylesOnHover;if(!A){return}if(!this.dom){if(this.hoveredNode){var x=this.types[this.hoveredNode.getData("type")];var w=x&&x.contains&&x.contains.call(this.fx,this.hoveredNode,z.getPos());if(w){return}}var y=z.getNode();if(!this.hoveredNode&&!y){return}if(y.hovered){return}if(y&&!y.selected){this.fx.nodeFxAnimation.stopTimer();this.viz.graph.eachNode(function(E){if(E.hovered&&!E.selected){for(var D in A){E.setData(D,E.styles["$"+D],"end")}delete E.hovered}});y.hovered=true;this.hoveredNode=y;this.toggleStylesOnHover(y,true)}else{if(this.hoveredNode&&!this.hoveredNode.selected){this.fx.nodeFxAnimation.stopTimer();this.toggleStylesOnHover(this.hoveredNode,false);delete this.hoveredNode.hovered;this.hoveredNode=false}}}}});o.Classes.Navigation=new q({Implements:[t,h],initializePost:function(){this.pos=false;this.pressed=false},onMouseWheel:function(z,y,w){if(!this.config.zooming){return}c.event.stop(c.event.get(z,y));var A=this.config.zooming/1000,x=1+w*A;this.canvas.scale(x,x)},onMouseDown:function(B,A,z){if(!this.config.panning){return}if(this.config.panning=="avoid nodes"&&(this.dom?this.isLabel(B,A):z.getNode())){return}this.pressed=true;this.pos=z.getPos();var y=this.canvas,x=y.translateOffsetX,w=y.translateOffsetY,D=y.scaleOffsetX,C=y.scaleOffsetY;this.pos.x*=D;this.pos.x+=x;this.pos.y*=C;this.pos.y+=w},onMouseMove:function(D,C,F){if(!this.config.panning){return}if(!this.pressed){return}if(this.config.panning=="avoid nodes"&&(this.dom?this.isLabel(D,C):F.getNode())){return}var B=this.pos,E=F.getPos(),z=this.canvas,A=z.translateOffsetX,w=z.translateOffsetY,J=z.scaleOffsetX,H=z.scaleOffsetY;E.x*=J;E.y*=H;E.x+=A;E.y+=w;var I=E.x-B.x,G=E.y-B.y;this.pos=E;this.canvas.translate(I*1/J,G*1/H)},onMouseUp:function(z,y,x,w){if(!this.config.panning){return}this.pressed=false}});var l;(function(){var w=typeof HTMLCanvasElement,y=(w=="object"||w=="function");function x(z,A){var B=document.createElement(z);for(var C in A){if(typeof A[C]=="object"){c.extend(B[C],A[C])}else{B[C]=A[C]}}if(z=="canvas"&&!y&&G_vmlCanvasManager){B=G_vmlCanvasManager.initElement(document.body.appendChild(B))}return B}$jit.Canvas=l=new q({canvases:[],pos:false,element:false,labelContainer:false,translateOffsetX:0,translateOffsetY:0,scaleOffsetX:1,scaleOffsetY:1,initialize:function(L,E){this.viz=L;this.opt=this.config=E;var B=c.type(E.injectInto)=="string"?E.injectInto:E.injectInto.id,K=E.type,C=B+"-label",z=c(B),D=E.width||z.offsetWidth,M=E.height||z.offsetHeight;this.id=B;var F={injectInto:B,width:D,height:M};this.element=x("div",{id:B+"-canvaswidget",style:{position:"relative",width:D+"px",height:M+"px"}});this.labelContainer=this.createLabelContainer(E.Label.type,C,F);this.canvases.push(new l.Base[K]({config:c.extend({idSuffix:"-canvas"},F),plot:function(N){L.fx.plot()},resize:function(){L.refresh()}}));var G=E.background;if(G){var J=new l.Background[G.type](L,c.extend(G,F));this.canvases.push(new l.Base[K](J))}var I=this.canvases.length;while(I--){this.element.appendChild(this.canvases[I].canvas);if(I>0){this.canvases[I].plot()}}this.element.appendChild(this.labelContainer);z.appendChild(this.element);var A=null,H=this;c.addEvent(window,"scroll",function(){clearTimeout(A);A=setTimeout(function(){H.getPos(true)},500)})},getCtx:function(z){return this.canvases[z||0].getCtx()},getConfig:function(){return this.opt},getElement:function(){return this.element},getSize:function(z){return this.canvases[z||0].getSize()},resize:function(D,z){this.getPos(true);this.translateOffsetX=this.translateOffsetY=0;this.scaleOffsetX=this.scaleOffsetY=1;for(var B=0,A=this.canvases.length;B<A;B++){this.canvases[B].resize(D,z)}var C=this.element.style;C.width=D+"px";C.height=z+"px";if(this.labelContainer){this.labelContainer.style.width=D+"px"}},translate:function(z,D,C){this.translateOffsetX+=z*this.scaleOffsetX;this.translateOffsetY+=D*this.scaleOffsetY;for(var B=0,A=this.canvases.length;B<A;B++){this.canvases[B].translate(z,D,C)}},scale:function(E,B,C){var F=this.scaleOffsetX*E,D=this.scaleOffsetY*B;var H=this.translateOffsetX*(E-1)/F,G=this.translateOffsetY*(B-1)/D;this.scaleOffsetX=F;this.scaleOffsetY=D;for(var A=0,z=this.canvases.length;A<z;A++){this.canvases[A].scale(E,B,true)}this.translate(H,G,false)},getPos:function(z){if(z||!this.pos){return this.pos=c.getPos(this.getElement())}return this.pos},clear:function(z){this.canvases[z||0].clear()},path:function(A,B){var z=this.canvases[0].getCtx();z.beginPath();B(z);z[A]();z.closePath()},createLabelContainer:function(B,F,E){var D="http://www.w3.org/2000/svg";if(B=="HTML"||B=="Native"){return x("div",{id:F,style:{overflow:"visible",position:"absolute",top:0,left:0,width:E.width+"px",height:0}})}else{if(B=="SVG"){var C=document.createElementNS(D,"svg:svg");C.setAttribute("width",E.width);C.setAttribute("height",E.height);var A=C.style;A.position="absolute";A.left=A.top="0px";var z=document.createElementNS(D,"svg:g");z.setAttribute("width",E.width);z.setAttribute("height",E.height);z.setAttribute("x",0);z.setAttribute("y",0);z.setAttribute("id",F);C.appendChild(z);return C}}}});l.Base={};l.Base["2D"]=new q({translateOffsetX:0,translateOffsetY:0,scaleOffsetX:1,scaleOffsetY:1,initialize:function(z){this.viz=z;this.opt=z.config;this.size=false;this.createCanvas();this.translateToCenter()},createCanvas:function(){var A=this.opt,B=A.width,z=A.height;this.canvas=x("canvas",{id:A.injectInto+A.idSuffix,width:B,height:z,style:{position:"absolute",top:0,left:0,width:B+"px",height:z+"px"}})},getCtx:function(){if(!this.ctx){return this.ctx=this.canvas.getContext("2d")}return this.ctx},getSize:function(){if(this.size){return this.size}var z=this.canvas;return this.size={width:z.width,height:z.height}},translateToCenter:function(C){var A=this.getSize(),B=C?(A.width-C.width-this.translateOffsetX*2):A.width;height=C?(A.height-C.height-this.translateOffsetY*2):A.height;var z=this.getCtx();C&&z.scale(1/this.scaleOffsetX,1/this.scaleOffsetY);z.translate(B/2,height/2)},resize:function(C,z){var B=this.getSize(),A=this.canvas,D=A.style;this.size=false;A.width=C;A.height=z;D.width=C+"px";D.height=z+"px";if(!y){this.translateToCenter(B)}else{this.translateToCenter()}this.translateOffsetX=this.translateOffsetY=0;this.scaleOffsetX=this.scaleOffsetY=1;this.clear();this.viz.resize(C,z,this)},translate:function(z,D,A){var C=this.scaleOffsetX,B=this.scaleOffsetY;this.translateOffsetX+=z*C;this.translateOffsetY+=D*B;this.getCtx().translate(z,D);!A&&this.plot()},scale:function(z,B,A){this.scaleOffsetX*=z;this.scaleOffsetY*=B;this.getCtx().scale(z,B);!A&&this.plot()},clear:function(){var B=this.getSize(),A=this.translateOffsetX,z=this.translateOffsetY,D=this.scaleOffsetX,C=this.scaleOffsetY;this.getCtx().clearRect((-B.width/2-A)*1/D,(-B.height/2-z)*1/C,B.width*1/D,B.height*1/C)},plot:function(){this.clear();this.viz.plot(this)}});l.Background={};l.Background.Circles=new q({initialize:function(z,A){this.viz=z;this.config=c.merge({idSuffix:"-bkcanvas",levelDistance:100,numberOfCircles:6,CanvasStyles:{},offset:0},A)},resize:function(A,z,B){this.plot(B)},plot:function(z){var A=z.canvas,G=z.getCtx(),D=this.config,F=D.CanvasStyles;for(var H in F){G[H]=F[H]}var B=D.numberOfCircles,E=D.levelDistance;for(var C=1;C<=B;C++){G.beginPath();G.arc(0,0,E*C,0,2*Math.PI,false);G.stroke();G.closePath()}}})})();var b=function(x,w){this.theta=x||0;this.rho=w||0};$jit.Polar=b;b.prototype={getc:function(w){return this.toComplex(w)},getp:function(){return this},set:function(w){w=w.getp();this.theta=w.theta;this.rho=w.rho},setc:function(w,z){this.rho=Math.sqrt(w*w+z*z);this.theta=Math.atan2(z,w);if(this.theta<0){this.theta+=Math.PI*2}},setp:function(x,w){this.theta=x;this.rho=w},clone:function(){return new b(this.theta,this.rho)},toComplex:function(A){var w=Math.cos(this.theta)*this.rho;var z=Math.sin(this.theta)*this.rho;if(A){return{x:w,y:z}}return new p(w,z)},add:function(w){return new b(this.theta+w.theta,this.rho+w.rho)},scale:function(w){return new b(this.theta,this.rho*w)},equals:function(w){return this.theta==w.theta&&this.rho==w.rho},$add:function(w){this.theta=this.theta+w.theta;this.rho+=w.rho;return this},$madd:function(w){this.theta=(this.theta+w.theta)%(Math.PI*2);this.rho+=w.rho;return this},$scale:function(w){this.rho*=w;return this},isZero:function(){var x=0.0001,w=Math.abs;return w(this.theta)<x&&w(this.rho)<x},interpolate:function(y,F){var z=Math.PI,C=z*2;var x=function(H){var G=(H<0)?(H%C)+C:H%C;return G};var B=this.theta,E=y.theta;var A,D=Math.abs(B-E);if(D==z){if(B>E){A=x((E+((B-C)-E)*F))}else{A=x((E-C+(B-(E))*F))}}else{if(D>=z){if(B>E){A=x((E+((B-C)-E)*F))}else{A=x((E-C+(B-(E-C))*F))}}else{A=x((E+(B-E)*F))}}var w=(this.rho-y.rho)*F+y.rho;return{theta:A,rho:w}}};var k=function(x,w){return new b(x,w)};b.KER=k(0,0);var p=function(w,z){this.x=w||0;this.y=z||0};$jit.Complex=p;p.prototype={getc:function(){return this},getp:function(w){return this.toPolar(w)},set:function(w){w=w.getc(true);this.x=w.x;this.y=w.y},setc:function(w,z){this.x=w;this.y=z},setp:function(x,w){this.x=Math.cos(x)*w;this.y=Math.sin(x)*w},clone:function(){return new p(this.x,this.y)},toPolar:function(y){var w=this.norm();var x=Math.atan2(this.y,this.x);if(x<0){x+=Math.PI*2}if(y){return{theta:x,rho:w}}return new b(x,w)},norm:function(){return Math.sqrt(this.squaredNorm())},squaredNorm:function(){return this.x*this.x+this.y*this.y},add:function(w){return new p(this.x+w.x,this.y+w.y)},prod:function(w){return new p(this.x*w.x-this.y*w.y,this.y*w.x+this.x*w.y)},conjugate:function(){return new p(this.x,-this.y)},scale:function(w){return new p(this.x*w,this.y*w)},equals:function(w){return this.x==w.x&&this.y==w.y},$add:function(w){this.x+=w.x;this.y+=w.y;return this},$prod:function(A){var w=this.x,z=this.y;this.x=w*A.x-z*A.y;this.y=z*A.x+w*A.y;return this},$conjugate:function(){this.y=-this.y;return this},$scale:function(w){this.x*=w;this.y*=w;return this},$div:function(B){var w=this.x,A=this.y;var z=B.squaredNorm();this.x=w*B.x+A*B.y;this.y=A*B.x-w*B.y;return this.$scale(1/z)},isZero:function(){var x=0.0001,w=Math.abs;return w(this.x)<x&&w(this.y)<x}};var r=function(x,w){return new p(x,w)};p.KER=r(0,0);$jit.Graph=new q({initialize:function(y,x,w,C){var A={klass:p,Node:{}};this.Node=x;this.Edge=w;this.Label=C;this.opt=c.merge(A,y||{});this.nodes={};this.edges={};var z=this;this.nodeList={};for(var B in j){z.nodeList[B]=(function(D){return function(){var E=Array.prototype.slice.call(arguments);z.eachNode(function(F){F[D].apply(F,E)})}})(B)}},getNode:function(w){if(this.hasNode(w)){return this.nodes[w]}return false},get:function(w){return this.getNode(w)},getByName:function(w){for(var y in this.nodes){var x=this.nodes[y];if(x.name==w){return x}}return false},getAdjacence:function(x,w){if(x in this.edges){return this.edges[x][w]}return false},addNode:function(x){if(!this.nodes[x.id]){var w=this.edges[x.id]={};this.nodes[x.id]=new e.Node(c.extend({id:x.id,name:x.name,data:c.merge(x.data||{},{}),adjacencies:w},this.opt.Node),this.opt.klass,this.Node,this.Edge,this.Label)}return this.nodes[x.id]},addAdjacence:function(z,y,x){if(!this.hasNode(z.id)){this.addNode(z)}if(!this.hasNode(y.id)){this.addNode(y)}z=this.nodes[z.id];y=this.nodes[y.id];if(!z.adjacentTo(y)){var A=this.edges[z.id]=this.edges[z.id]||{};var w=this.edges[y.id]=this.edges[y.id]||{};A[y.id]=w[z.id]=new e.Adjacence(z,y,x,this.Edge,this.Label);return A[y.id]}return this.edges[z.id][y.id]},removeNode:function(y){if(this.hasNode(y)){delete this.nodes[y];var x=this.edges[y];for(var w in x){delete this.edges[w][y]}delete this.edges[y]}},removeAdjacence:function(x,w){delete this.edges[x][w];delete this.edges[w][x]},hasNode:function(w){return w in this.nodes},empty:function(){this.nodes={};this.edges={}}});var e=$jit.Graph;var j;(function(){var w=function(D,F,A,C,E){var B;A=A||"current";D="$"+(D?D+"-":"");if(A=="current"){B=this.data}else{if(A=="start"){B=this.startData}else{if(A=="end"){B=this.endData}}}var z=D+F;if(C){return B[z]}if(!this.Config.overridable){return E[F]||0}return(z in B)?B[z]:((z in this.data)?this.data[z]:(E[F]||0))};var y=function(C,D,B,z){z=z||"current";C="$"+(C?C+"-":"");var A;if(z=="current"){A=this.data}else{if(z=="start"){A=this.startData}else{if(z=="end"){A=this.endData}}}A[C+D]=B};var x=function(B,z){B="$"+(B?B+"-":"");var A=this;c.each(z,function(D){var C=B+D;delete A.data[C];delete A.endData[C];delete A.startData[C]})};j={getData:function(B,z,A){return w.call(this,"",B,z,A,this.Config)},setData:function(B,A,z){y.call(this,"",B,A,z)},setDataset:function(C,D){C=c.splat(C);for(var z in D){for(var B=0,E=c.splat(D[z]),A=C.length;B<A;B++){this.setData(z,E[B],C[B])}}},removeData:function(){x.call(this,"",Array.prototype.slice.call(arguments))},getCanvasStyle:function(B,z,A){return w.call(this,"canvas",B,z,A,this.Config.CanvasStyles)},setCanvasStyle:function(B,A,z){y.call(this,"canvas",B,A,z)},setCanvasStyles:function(C,D){C=c.splat(C);for(var z in D){for(var B=0,E=c.splat(D[z]),A=C.length;B<A;B++){this.setCanvasStyle(z,E[B],C[B])}}},removeCanvasStyle:function(){x.call(this,"canvas",Array.prototype.slice.call(arguments))},getLabelData:function(B,z,A){return w.call(this,"label",B,z,A,this.Label)},setLabelData:function(B,A,z){y.call(this,"label",B,A,z)},setLabelDataset:function(C,D){C=c.splat(C);for(var z in D){for(var B=0,E=c.splat(D[z]),A=C.length;B<A;B++){this.setLabelData(z,E[B],C[B])}}},removeLabelData:function(){x.call(this,"label",Array.prototype.slice.call(arguments))}}})();e.Node=new q({initialize:function(z,w,y,x,B){var A={id:"",name:"",data:{},startData:{},endData:{},adjacencies:{},selected:false,drawn:false,exist:false,angleSpan:{begin:0,end:0},pos:new w,startPos:new w,endPos:new w};c.extend(this,c.extend(A,z));this.Config=this.Node=y;this.Edge=x;this.Label=B},adjacentTo:function(w){return w.id in this.adjacencies},getAdjacency:function(w){return this.adjacencies[w]},getPos:function(w){w=w||"current";if(w=="current"){return this.pos}else{if(w=="end"){return this.endPos}else{if(w=="start"){return this.startPos}}}},setPos:function(x,w){w=w||"current";var y;if(w=="current"){y=this.pos}else{if(w=="end"){y=this.endPos}else{if(w=="start"){y=this.startPos}}}y.set(x)}});e.Node.implement(j);e.Adjacence=new q({initialize:function(x,A,y,w,z){this.nodeFrom=x;this.nodeTo=A;this.data=y||{};this.startData={};this.endData={};this.Config=this.Edge=w;this.Label=z}});e.Adjacence.implement(j);e.Util={filter:function(x){if(!x||!(c.type(x)=="string")){return function(){return true}}var w=x.split(" ");return function(z){for(var y=0;y<w.length;y++){if(z[w[y]]){return false}}return true}},getNode:function(w,x){return w.nodes[x]},eachNode:function(A,z,w){var y=this.filter(w);for(var x in A.nodes){if(y(A.nodes[x])){z(A.nodes[x])}}},each:function(y,x,w){this.eachNode(y,x,w)},eachAdjacency:function(B,C,x){var y=B.adjacencies,A=this.filter(x);for(var D in y){var w=y[D];if(A(w)){if(w.nodeFrom!=B){var z=w.nodeFrom;w.nodeFrom=w.nodeTo;w.nodeTo=z}C(w,D)}}},computeLevels:function(C,D,z,y){z=z||0;var A=this.filter(y);this.eachNode(C,function(E){E._flag=false;E._depth=-1},y);var x=C.getNode(D);x._depth=z;var w=[x];while(w.length!=0){var B=w.pop();B._flag=true;this.eachAdjacency(B,function(E){var F=E.nodeTo;if(F._flag==false&&A(F)){if(F._depth<0){F._depth=B._depth+1+z}w.unshift(F)}},y)}},eachBFS:function(B,C,A,x){var y=this.filter(x);this.clean(B);var w=[B.getNode(C)];while(w.length!=0){var z=w.pop();z._flag=true;A(z,z._depth);this.eachAdjacency(z,function(D){var E=D.nodeTo;if(E._flag==false&&y(E)){E._flag=true;w.unshift(E)}},x)}},eachLevel:function(A,E,x,B,z){var D=A._depth,w=this.filter(z),C=this;x=x===false?Number.MAX_VALUE-D:x;(function y(H,F,G){var I=H._depth;if(I>=F&&I<=G&&w(H)){B(H,I)}if(I<G){C.eachAdjacency(H,function(J){var K=J.nodeTo;if(K._depth>I){y(K,F,G)}})}})(A,E+D,x+D)},eachSubgraph:function(x,y,w){this.eachLevel(x,0,false,y,w)},eachSubnode:function(x,y,w){this.eachLevel(x,1,1,y,w)},anySubnode:function(z,y,x){var w=false;y=y||c.lambda(true);var A=c.type(y)=="string"?function(B){return B[y]}:y;this.eachSubnode(z,function(B){if(A(B)){w=true}},x);return w},getSubnodes:function(B,C,w){var y=[],A=this;C=C||0;var z,x;if(c.type(C)=="array"){z=C[0];x=C[1]}else{z=C;x=Number.MAX_VALUE-B._depth}this.eachLevel(B,z,x,function(D){y.push(D)},w);return y},getParents:function(x){var w=[];this.eachAdjacency(x,function(y){var z=y.nodeTo;if(z._depth<x._depth){w.push(z)}});return w},isDescendantOf:function(z,A){if(z.id==A){return true}var y=this.getParents(z),w=false;for(var x=0;!w&&x<y.length;x++){w=w||this.isDescendantOf(y[x],A)}return w},clean:function(w){this.eachNode(w,function(x){x._flag=false})},getClosestNodeToOrigin:function(x,y,w){return this.getClosestNodeToPos(x,b.KER,y,w)},getClosestNodeToPos:function(y,B,A,w){var x=null;A=A||"current";B=B&&B.getc(true)||p.KER;var z=function(D,C){var F=D.x-C.x,E=D.y-C.y;return F*F+E*E};this.eachNode(y,function(C){x=(x==null||z(C.getPos(A).getc(true),B)<z(x.getPos(A).getc(true),B))?C:x},w);return x}};c.each(["get","getNode","each","eachNode","computeLevels","eachBFS","clean","getClosestNodeToPos","getClosestNodeToOrigin"],function(w){e.prototype[w]=function(){return e.Util[w].apply(e.Util,[this].concat(Array.prototype.slice.call(arguments)))}});c.each(["eachAdjacency","eachLevel","eachSubgraph","eachSubnode","anySubnode","getSubnodes","getParents","isDescendantOf"],function(w){e.Node.prototype[w]=function(){return e.Util[w].apply(e.Util,[this].concat(Array.prototype.slice.call(arguments)))}});e.Op={options:{type:"nothing",duration:2000,hideLabels:true,fps:30},initialize:function(w){this.viz=w},removeNode:function(B,z){var w=this.viz;var x=c.merge(this.options,w.controller,z);var D=c.splat(B);var y,A,C;switch(x.type){case"nothing":for(y=0;y<D.length;y++){w.graph.removeNode(D[y])}break;case"replot":this.removeNode(D,{type:"nothing"});w.labels.clearLabels();w.refresh(true);break;case"fade:seq":case"fade":A=this;for(y=0;y<D.length;y++){C=w.graph.getNode(D[y]);C.setData("alpha",0,"end")}w.fx.animate(c.merge(x,{modes:["node-property:alpha"],onComplete:function(){A.removeNode(D,{type:"nothing"});w.labels.clearLabels();w.reposition();w.fx.animate(c.merge(x,{modes:["linear"]}))}}));break;case"fade:con":A=this;for(y=0;y<D.length;y++){C=w.graph.getNode(D[y]);C.setData("alpha",0,"end");C.ignore=true}w.reposition();w.fx.animate(c.merge(x,{modes:["node-property:alpha","linear"],onComplete:function(){A.removeNode(D,{type:"nothing"});x.onComplete&&x.onComplete()}}));break;case"iter":A=this;w.fx.sequence({condition:function(){return D.length!=0},step:function(){A.removeNode(D.shift(),{type:"nothing"});w.labels.clearLabels()},onComplete:function(){x.onComplete&&x.onComplete()},duration:Math.ceil(x.duration/D.length)});break;default:this.doError()}},removeEdge:function(D,B){var w=this.viz;var z=c.merge(this.options,w.controller,B);var y=(c.type(D[0])=="string")?[D]:D;var A,C,x;switch(z.type){case"nothing":for(A=0;A<y.length;A++){w.graph.removeAdjacence(y[A][0],y[A][1])}break;case"replot":this.removeEdge(y,{type:"nothing"});w.refresh(true);break;case"fade:seq":case"fade":C=this;for(A=0;A<y.length;A++){x=w.graph.getAdjacence(y[A][0],y[A][1]);if(x){x.setData("alpha",0,"end")}}w.fx.animate(c.merge(z,{modes:["edge-property:alpha"],onComplete:function(){C.removeEdge(y,{type:"nothing"});w.reposition();w.fx.animate(c.merge(z,{modes:["linear"]}))}}));break;case"fade:con":C=this;for(A=0;A<y.length;A++){x=w.graph.getAdjacence(y[A][0],y[A][1]);if(x){x.setData("alpha",0,"end");x.ignore=true}}w.reposition();w.fx.animate(c.merge(z,{modes:["edge-property:alpha","linear"],onComplete:function(){C.removeEdge(y,{type:"nothing"});z.onComplete&&z.onComplete()}}));break;case"iter":C=this;w.fx.sequence({condition:function(){return y.length!=0},step:function(){C.removeEdge(y.shift(),{type:"nothing"});w.labels.clearLabels()},onComplete:function(){z.onComplete()},duration:Math.ceil(z.duration/y.length)});break;default:this.doError()}},sum:function(A,z){var w=this.viz;var y=c.merge(this.options,w.controller,z),x=w.root;var C;w.root=z.id||w.root;switch(y.type){case"nothing":C=w.construct(A);C.eachNode(function(E){E.eachAdjacency(function(F){w.graph.addAdjacence(F.nodeFrom,F.nodeTo,F.data)})});break;case"replot":w.refresh(true);this.sum(A,{type:"nothing"});w.refresh(true);break;case"fade:seq":case"fade":case"fade:con":that=this;C=w.construct(A);var D=this.preprocessSum(C);var B=!D?["node-property:alpha"]:["node-property:alpha","edge-property:alpha"];w.reposition();if(y.type!="fade:con"){w.fx.animate(c.merge(y,{modes:["linear"],onComplete:function(){w.fx.animate(c.merge(y,{modes:B,onComplete:function(){y.onComplete()}}))}}))}else{w.graph.eachNode(function(E){if(E.id!=x&&E.pos.isZero()){E.pos.set(E.endPos);E.startPos.set(E.endPos)}});w.fx.animate(c.merge(y,{modes:["linear"].concat(B)}))}break;default:this.doError()}},morph:function(E,x,z){z=z||{};var B=this.viz;var F=c.merge(this.options,B.controller,x),A=B.root;var C;B.root=x.id||B.root;switch(F.type){case"nothing":C=B.construct(E);C.eachNode(function(I){var H=B.graph.hasNode(I.id);I.eachAdjacency(function(M){var L=!!B.graph.getAdjacence(M.nodeFrom.id,M.nodeTo.id);B.graph.addAdjacence(M.nodeFrom,M.nodeTo,M.data);if(L){var K=B.graph.getAdjacence(M.nodeFrom.id,M.nodeTo.id);for(var N in (M.data||{})){K.data[N]=M.data[N]}}});if(H){var G=B.graph.getNode(I.id);for(var J in (I.data||{})){G.data[J]=I.data[J]}}});B.graph.eachNode(function(G){G.eachAdjacency(function(H){if(!C.getAdjacence(H.nodeFrom.id,H.nodeTo.id)){B.graph.removeAdjacence(H.nodeFrom.id,H.nodeTo.id)}});if(!C.hasNode(G.id)){B.graph.removeNode(G.id)}});break;case"replot":B.labels.clearLabels(true);this.morph(E,{type:"nothing"});B.refresh(true);B.refresh(true);break;case"fade:seq":case"fade":case"fade:con":that=this;C=B.construct(E);var D=("node-property" in z)&&c.map(c.splat(z["node-property"]),function(G){return"$"+G});B.graph.eachNode(function(H){var I=C.getNode(H.id);if(!I){H.setData("alpha",1);H.setData("alpha",1,"start");H.setData("alpha",0,"end");H.ignore=true}else{var G=I.data;for(var J in G){if(D&&(c.indexOf(D,J)>-1)){H.endData[J]=G[J]}else{H.data[J]=G[J]}}}});B.graph.eachNode(function(G){if(G.ignore){return}G.eachAdjacency(function(H){if(H.nodeFrom.ignore||H.nodeTo.ignore){return}var I=C.getNode(H.nodeFrom.id);var J=C.getNode(H.nodeTo.id);if(!I.adjacentTo(J)){var H=B.graph.getAdjacence(I.id,J.id);w=true;H.setData("alpha",1);H.setData("alpha",1,"start");H.setData("alpha",0,"end")}})});var w=this.preprocessSum(C);var y=!w?["node-property:alpha"]:["node-property:alpha","edge-property:alpha"];y[0]=y[0]+(("node-property" in z)?(":"+c.splat(z["node-property"]).join(":")):"");y[1]=(y[1]||"edge-property:alpha")+(("edge-property" in z)?(":"+c.splat(z["edge-property"]).join(":")):"");if("label-property" in z){y.push("label-property:"+c.splat(z["label-property"]).join(":"))}if(B.reposition){B.reposition()}else{B.compute("end")}B.graph.eachNode(function(G){if(G.id!=A&&G.pos.getp().equals(b.KER)){G.pos.set(G.endPos);G.startPos.set(G.endPos)}});B.fx.animate(c.merge(F,{modes:[z.position||"polar"].concat(y),onComplete:function(){B.graph.eachNode(function(G){if(G.ignore){B.graph.removeNode(G.id)}});B.graph.eachNode(function(G){G.eachAdjacency(function(H){if(H.ignore){B.graph.removeAdjacence(H.nodeFrom.id,H.nodeTo.id)}})});F.onComplete()}}));break;default:}},contract:function(y,x){var w=this.viz;if(y.collapsed||!y.anySubnode(c.lambda(true))){return}x=c.merge(this.options,w.config,x||{},{modes:["node-property:alpha:span","linear"]});y.collapsed=true;(function z(A){A.eachSubnode(function(B){B.ignore=true;B.setData("alpha",0,x.type=="animate"?"end":"current");z(B)})})(y);if(x.type=="animate"){w.compute("end");if(w.rotated){w.rotate(w.rotated,"none",{property:"end"})}(function z(A){A.eachSubnode(function(B){B.setPos(y.getPos("end"),"end");z(B)})})(y);w.fx.animate(x)}else{if(x.type=="replot"){w.refresh()}}},expand:function(y,x){if(!("collapsed" in y)){return}var w=this.viz;x=c.merge(this.options,w.config,x||{},{modes:["node-property:alpha:span","linear"]});delete y.collapsed;(function z(A){A.eachSubnode(function(B){delete B.ignore;B.setData("alpha",1,x.type=="animate"?"end":"current");z(B)})})(y);if(x.type=="animate"){w.compute("end");if(w.rotated){w.rotate(w.rotated,"none",{property:"end"})}w.fx.animate(x)}else{if(x.type=="replot"){w.refresh()}}},preprocessSum:function(x){var w=this.viz;x.eachNode(function(z){if(!w.graph.hasNode(z.id)){w.graph.addNode(z);var A=w.graph.getNode(z.id);A.setData("alpha",0);A.setData("alpha",0,"start");A.setData("alpha",1,"end")}});var y=false;x.eachNode(function(z){z.eachAdjacency(function(A){var B=w.graph.getNode(A.nodeFrom.id);var C=w.graph.getNode(A.nodeTo.id);if(!B.adjacentTo(C)){var A=w.graph.addAdjacence(B,C,A.data);if(B.startAlpha==B.endAlpha&&C.startAlpha==C.endAlpha){y=true;A.setData("alpha",0);A.setData("alpha",0,"start");A.setData("alpha",1,"end")}}})});return y}};var a={none:{render:c.empty,contains:c.lambda(false)},circle:{render:function(z,A,w,y){var x=y.getCtx();x.beginPath();x.arc(A.x,A.y,w,0,Math.PI*2,true);x.closePath();x[z]()},contains:function(B,A,w){var y=B.x-A.x,x=B.y-A.y,z=y*y+x*x;return z<=w*w}},ellipse:{render:function(C,E,w,F,x){var G=x.getCtx(),z=1,y=1,D=1,B=1,A=0;if(w>F){A=w/2;y=F/w;B=w/F}else{A=F/2;z=w/F;D=F/w}G.save();G.scale(z,y);G.beginPath();G.arc(E.x*D,E.y*B,A,0,Math.PI*2,true);G.closePath();G[C]();G.restore()},contains:function(w,D,x,F){var C=0,B=1,A=1,z=0,y=0,E=0;if(x>F){C=x/2;A=F/x}else{C=F/2;B=x/F}z=(w.x-D.x)*(1/B);y=(w.y-D.y)*(1/A);E=z*z+y*y;return E<=C*C}},square:{render:function(x,z,y,w){w.getCtx()[x+"Rect"](z.x-y,z.y-y,2*y,2*y)},contains:function(y,x,w){return Math.abs(x.x-y.x)<=w&&Math.abs(x.y-y.y)<=w}},rectangle:{render:function(z,A,y,w,x){x.getCtx()[z+"Rect"](A.x-y/2,A.y-w/2,y,w)},contains:function(z,y,x,w){return Math.abs(y.x-z.x)<=x/2&&Math.abs(y.y-z.y)<=w/2}},triangle:{render:function(C,D,z,w){var G=w.getCtx(),y=D.x,x=D.y-z,F=y-z,E=D.y+z,B=y+z,A=E;G.beginPath();G.moveTo(y,x);G.lineTo(F,E);G.lineTo(B,A);G.closePath();G[C]()},contains:function(y,x,w){return a.circle.contains(y,x,w)}},star:{render:function(A,C,B,x){var w=x.getCtx(),z=Math.PI/5;w.save();w.translate(C.x,C.y);w.beginPath();w.moveTo(B,0);for(var y=0;y<9;y++){w.rotate(z);if(y%2==0){w.lineTo((B/0.525731)*0.200811,0)}else{w.lineTo(B,0)}}w.closePath();w[A]();w.restore()},contains:function(y,x,w){return a.circle.contains(y,x,w)}}};var m={line:{render:function(z,y,x){var w=x.getCtx();w.beginPath();w.moveTo(z.x,z.y);w.lineTo(y.x,y.y);w.stroke()},contains:function(G,y,B,E){var z=Math.min,C=Math.max,x=z(G.x,y.x),F=C(G.x,y.x),w=z(G.y,y.y),D=C(G.y,y.y);if(B.x>=x&&B.x<=F&&B.y>=w&&B.y<=D){if(Math.abs(y.x-G.x)<=E){return true}var A=(y.y-G.y)/(y.x-G.x)*(B.x-G.x)+G.y;return Math.abs(A-B.y)<=E}return false}},arrow:{render:function(F,G,z,x,w){var H=w.getCtx();if(x){var y=F;F=G;G=y}var C=new p(G.x-F.x,G.y-F.y);C.$scale(z/C.norm());var A=new p(G.x-C.x,G.y-C.y),B=new p(-C.y/2,C.x/2),E=A.add(B),D=A.$add(B.$scale(-1));H.beginPath();H.moveTo(F.x,F.y);H.lineTo(G.x,G.y);H.stroke();H.beginPath();H.moveTo(E.x,E.y);H.lineTo(D.x,D.y);H.lineTo(G.x,G.y);H.closePath();H.fill()},contains:function(x,w,z,y){return m.line.contains(x,w,z,y)}},hyperline:{render:function(D,E,w,y){var F=y.getCtx();var z=A(D,E);if(z.a>1000||z.b>1000||z.ratio<0){F.beginPath();F.moveTo(D.x*w,D.y*w);F.lineTo(E.x*w,E.y*w);F.stroke()}else{var C=Math.atan2(E.y-z.y,E.x-z.x);var B=Math.atan2(D.y-z.y,D.x-z.x);var x=x(C,B);F.beginPath();F.arc(z.x*w,z.y*w,z.ratio*w,C,B,x);F.stroke()}function A(S,R){var K=(S.x*R.y-S.y*R.x),G=K;var J=S.squaredNorm(),I=R.squaredNorm();if(K==0){return{x:0,y:0,ratio:-1}}var Q=(S.y*I-R.y*J+S.y-R.y)/K;var O=(R.x*J-S.x*I+R.x-S.x)/G;var P=-Q/2;var N=-O/2;var M=(Q*Q+O*O)/4-1;if(M<0){return{x:0,y:0,ratio:-1}}var L=Math.sqrt(M);var H={x:P,y:N,ratio:L>1000?-1:L,a:Q,b:O};return H}function x(G,H){return(G<H)?((G+Math.PI>H)?false:true):((H+Math.PI>G)?true:false)}},contains:c.lambda(false)}};e.Plot={initialize:function(x,w){this.viz=x;this.config=x.config;this.node=x.config.Node;this.edge=x.config.Edge;this.animation=new u;this.nodeTypes=new w.Plot.NodeTypes;this.edgeTypes=new w.Plot.EdgeTypes;this.labels=x.labels},nodeHelper:a,edgeHelper:m,Interpolator:{map:{border:"color",color:"color",width:"number",height:"number",dim:"number",alpha:"number",lineWidth:"number",angularWidth:"number",span:"number",valueArray:"array-number",dimArray:"array-number"},canvas:{globalAlpha:"number",fillStyle:"color",strokeStyle:"color",lineWidth:"number",shadowBlur:"number",shadowColor:"color",shadowOffsetX:"number",shadowOffsetY:"number",miterLimit:"number"},label:{size:"number",color:"color"},compute:function(y,x,w){return y+(x-y)*w},moebius:function(D,C,F,z){var B=z.scale(-F);if(B.norm()<1){var w=B.x,E=B.y;var A=D.startPos.getc().moebiusTransformation(B);D.pos.setc(A.x,A.y);B.x=w;B.y=E}},linear:function(x,w,A){var z=x.startPos.getc(true);var y=x.endPos.getc(true);x.pos.setc(this.compute(z.x,y.x,A),this.compute(z.y,y.y,A))},polar:function(y,x,B){var A=y.startPos.getp(true);var z=y.endPos.getp();var w=z.interpolate(A,B);y.pos.setp(w.theta,w.rho)},number:function(x,C,B,w,A){var z=x[w](C,"start");var y=x[w](C,"end");x[A](C,this.compute(z,y,B))},color:function(y,w,E,B,z){var C=c.hexToRgb(y[B](w,"start"));var D=c.hexToRgb(y[B](w,"end"));var A=this.compute;var x=c.rgbToHex([parseInt(A(C[0],D[0],E)),parseInt(A(C[1],D[1],E)),parseInt(A(C[2],D[2],E))]);y[z](w,x)},"array-number":function(z,y,J,G,B){var H=z[G](y,"start"),I=z[G](y,"end"),K=[];for(var E=0,A=H.length;E<A;E++){var x=H[E],w=I[E];if(x.length){for(var D=0,F=x.length,C=[];D<F;D++){C.push(this.compute(x[D],w[D],J))}K.push(C)}else{K.push(this.compute(x,w,J))}}z[B](y,K)},node:function(x,C,E,w,D,y){w=this[w];if(C){var B=C.length;for(var z=0;z<B;z++){var A=C[z];this[w[A]](x,A,E,D,y)}}else{for(var A in w){this[w[A]](x,A,E,D,y)}}},edge:function(y,x,D,z,w,C){var B=y.adjacencies;for(var A in B){this["node"](B[A],x,D,z,w,C)}},"node-property":function(x,w,y){this["node"](x,w,y,"map","getData","setData")},"edge-property":function(x,w,y){this["edge"](x,w,y,"map","getData","setData")},"label-property":function(x,w,y){this["node"](x,w,y,"label","getLabelData","setLabelData")},"node-style":function(x,w,y){this["node"](x,w,y,"canvas","getCanvasStyle","setCanvasStyle")},"edge-style":function(x,w,y){this["edge"](x,w,y,"canvas","getCanvasStyle","setCanvasStyle")}},sequence:function(x){var y=this;x=c.merge({condition:c.lambda(false),step:c.empty,onComplete:c.empty,duration:200},x||{});var w=setInterval(function(){if(x.condition()){x.step()}else{clearInterval(w);x.onComplete()}y.viz.refresh(true)},x.duration)},prepare:function(C){var B=this.viz.graph,z={"node-property":{getter:"getData",setter:"setData"},"edge-property":{getter:"getData",setter:"setData"},"node-style":{getter:"getCanvasStyle",setter:"setCanvasStyle"},"edge-style":{getter:"getCanvasStyle",setter:"setCanvasStyle"}};var x={};if(c.type(C)=="array"){for(var A=0,w=C.length;A<w;A++){var y=C[A].split(":");x[y.shift()]=y}}else{for(var D in C){if(D=="position"){x[C.position]=[]}else{x[D]=c.splat(C[D])}}}B.eachNode(function(E){E.startPos.set(E.pos);c.each(["node-property","node-style"],function(H){if(H in x){var I=x[H];for(var G=0,F=I.length;G<F;G++){E[z[H].setter](I[G],E[z[H].getter](I[G]),"start")}}});c.each(["edge-property","edge-style"],function(F){if(F in x){var G=x[F];E.eachAdjacency(function(I){for(var J=0,H=G.length;J<H;J++){I[z[F].setter](G[J],I[z[F].getter](G[J]),"start")}})}})});return x},animate:function(z,y){z=c.merge(this.viz.config,z||{});var A=this,x=this.viz,C=x.graph,D=this.Interpolator,B=z.type==="nodefx"?this.nodeFxAnimation:this.animation;var w=this.prepare(z.modes);if(z.hideLabels){this.labels.hideLabels(true)}B.setOptions(c.extend(z,{$animating:false,compute:function(E){C.eachNode(function(F){for(var G in w){D[G](F,w[G],E,y)}});A.plot(z,this.$animating,E);this.$animating=true},complete:function(){if(z.hideLabels){A.labels.hideLabels(false)}A.plot(z);z.onComplete()}})).start()},nodeFx:function(y){var D=this.viz,E=D.graph,B=this.nodeFxAnimation,F=c.merge(this.viz.config,{elements:{id:false,properties:{}},reposition:false});y=c.merge(F,y||{},{onBeforeCompute:c.empty,onAfterCompute:c.empty});B.stopTimer();var C=y.elements.properties;if(!y.elements.id){E.eachNode(function(H){for(var G in C){H.setData(G,C[G],"end")}})}else{var w=c.splat(y.elements.id);c.each(w,function(I){var H=E.getNode(I);if(H){for(var G in C){H.setData(G,C[G],"end")}}})}var A=[];for(var x in C){A.push(x)}var z=["node-property:"+A.join(":")];if(y.reposition){z.push("linear");D.compute("end")}this.animate(c.merge(y,{modes:z,type:"nodefx"}))},plot:function(x,G){var E=this.viz,B=E.graph,y=E.canvas,w=E.root,C=this,F=y.getCtx(),A=Math.min,x=x||this.viz.controller;x.clearCanvas&&y.clear();var D=B.getNode(w);if(!D){return}var z=!!D.visited;B.eachNode(function(I){var H=I.getData("alpha");I.eachAdjacency(function(J){var K=J.nodeTo;if(!!K.visited===z&&I.drawn&&K.drawn){!G&&x.onBeforePlotLine(J);C.plotLine(J,y,G);!G&&x.onAfterPlotLine(J)}});if(I.drawn){!G&&x.onBeforePlotNode(I);C.plotNode(I,y,G);!G&&x.onAfterPlotNode(I)}if(!C.labelsHidden&&x.withLabels){if(I.drawn&&H>=0.95){C.labels.plotLabel(y,I,x)}else{C.labels.hideLabel(I,false)}}I.visited=!z})},plotTree:function(A,x,E){var B=this,C=this.viz,y=C.canvas,z=this.config,D=y.getCtx();var w=A.getData("alpha");A.eachSubnode(function(G){if(x.plotSubtree(A,G)&&G.exist&&G.drawn){var F=A.getAdjacency(G.id);!E&&x.onBeforePlotLine(F);B.plotLine(F,y,E);!E&&x.onAfterPlotLine(F);B.plotTree(G,x,E)}});if(A.drawn){!E&&x.onBeforePlotNode(A);this.plotNode(A,y,E);!E&&x.onAfterPlotNode(A);if(!x.hideLabels&&x.withLabels&&w>=0.95){this.labels.plotLabel(y,A,x)}else{this.labels.hideLabel(A,false)}}else{this.labels.hideLabel(A,true)}},plotNode:function(y,x,F){var C=y.getData("type"),B=this.node.CanvasStyles;if(C!="none"){var w=y.getData("lineWidth"),A=y.getData("color"),z=y.getData("alpha"),D=x.getCtx();D.save();D.lineWidth=w;D.fillStyle=D.strokeStyle=A;D.globalAlpha=z;for(var E in B){D[E]=y.getCanvasStyle(E)}this.nodeTypes[C].render.call(this,y,x,F);D.restore()}},plotLine:function(C,x,G){var B=C.getData("type"),z=this.edge.CanvasStyles;if(B!="none"){var w=C.getData("lineWidth"),y=C.getData("color"),E=x.getCtx(),A=C.nodeFrom,D=C.nodeTo;E.save();E.lineWidth=w;E.fillStyle=E.strokeStyle=y;E.globalAlpha=Math.min(A.getData("alpha"),D.getData("alpha"),C.getData("alpha"));for(var F in z){E[F]=C.getCanvasStyle(F)}this.edgeTypes[B].render.call(this,C,x,G);E.restore()}}};e.Plot3D=c.merge(e.Plot,{Interpolator:{linear:function(x,w,A){var z=x.startPos.getc(true);var y=x.endPos.getc(true);x.pos.setc(this.compute(z.x,y.x,A),this.compute(z.y,y.y,A),this.compute(z.z,y.z,A))}},plotNode:function(x,w){if(x.getData("type")=="none"){return}this.plotElement(x,w,{getAlpha:function(){return x.getData("alpha")}})},plotLine:function(w,x){if(w.getData("type")=="none"){return}this.plotElement(w,x,{getAlpha:function(){return Math.min(w.nodeFrom.getData("alpha"),w.nodeTo.getData("alpha"),w.getData("alpha"))}})},plotElement:function(Y,E,z){var V=E.getCtx(),F=new Matrix4,x=E.config.Scene.Lighting,Z=E.canvases[0],K=Z.program,X=Z.camera;if(!Y.geometry){Y.geometry=new O3D[Y.getData("type")]}Y.geometry.update(Y);if(!Y.webGLVertexBuffer){var J=[],B=[],P=[],N=0,S=Y.geometry;for(var W=0,U=S.vertices,H=S.faces,G=H.length;W<G;W++){var M=H[W],D=U[M.a],C=U[M.b],A=U[M.c],y=M.d?U[M.d]:false,R=M.normal;J.push(D.x,D.y,D.z);J.push(C.x,C.y,C.z);J.push(A.x,A.y,A.z);if(y){J.push(y.x,y.y,y.z)}P.push(R.x,R.y,R.z);P.push(R.x,R.y,R.z);P.push(R.x,R.y,R.z);if(y){P.push(R.x,R.y,R.z)}B.push(N,N+1,N+2);if(y){B.push(N,N+2,N+3);N+=4}else{N+=3}}Y.webGLVertexBuffer=V.createBuffer();V.bindBuffer(V.ARRAY_BUFFER,Y.webGLVertexBuffer);V.bufferData(V.ARRAY_BUFFER,new Float32Array(J),V.STATIC_DRAW);Y.webGLFaceBuffer=V.createBuffer();V.bindBuffer(V.ELEMENT_ARRAY_BUFFER,Y.webGLFaceBuffer);V.bufferData(V.ELEMENT_ARRAY_BUFFER,new Uint16Array(B),V.STATIC_DRAW);Y.webGLFaceCount=B.length;Y.webGLNormalBuffer=V.createBuffer();V.bindBuffer(V.ARRAY_BUFFER,Y.webGLNormalBuffer);V.bufferData(V.ARRAY_BUFFER,new Float32Array(P),V.STATIC_DRAW)}F.multiply(X.matrix,Y.geometry.matrix);V.uniformMatrix4fv(K.viewMatrix,false,F.flatten());V.uniformMatrix4fv(K.projectionMatrix,false,X.projectionMatrix.flatten());var L=Matrix4.makeInvert(F);L.$transpose();V.uniformMatrix4fv(K.normalMatrix,false,L.flatten());var T=c.hexToRgb(Y.getData("color"));T.push(z.getAlpha());V.uniform4f(K.color,T[0]/255,T[1]/255,T[2]/255,T[3]);V.uniform1i(K.enableLighting,x.enable);if(x.enable){if(x.ambient){var O=x.ambient;V.uniform3f(K.ambientColor,O[0],O[1],O[2])}if(x.directional){var Q=x.directional,T=Q.color,I=Q.direction,w=new Vector3(I.x,I.y,I.z).normalize().$scale(-1);V.uniform3f(K.lightingDirection,w.x,w.y,w.z);V.uniform3f(K.directionalColor,T[0],T[1],T[2])}}V.bindBuffer(V.ARRAY_BUFFER,Y.webGLVertexBuffer);V.vertexAttribPointer(K.position,3,V.FLOAT,false,0,0);V.bindBuffer(V.ARRAY_BUFFER,Y.webGLNormalBuffer);V.vertexAttribPointer(K.normal,3,V.FLOAT,false,0,0);V.bindBuffer(V.ELEMENT_ARRAY_BUFFER,Y.webGLFaceBuffer);V.drawElements(V.TRIANGLES,Y.webGLFaceCount,V.UNSIGNED_SHORT,0)}});e.Label={};e.Label.Native=new q({initialize:function(w){this.viz=w},plotLabel:function(y,z,x){var w=y.getCtx();var A=z.pos.getc(true);w.font=z.getLabelData("style")+" "+z.getLabelData("size")+"px "+z.getLabelData("family");w.textAlign=z.getLabelData("textAlign");w.fillStyle=w.strokeStyle=z.getLabelData("color");w.textBaseline=z.getLabelData("textBaseline");this.renderLabel(y,z,x)},renderLabel:function(y,z,x){var w=y.getCtx();var A=z.pos.getc(true);w.fillText(z.name,A.x,A.y+z.getData("height")/2)},hideLabel:c.empty,hideLabels:c.empty});e.Label.DOM=new q({labelsHidden:false,labelContainer:false,labels:{},getLabelContainer:function(){return this.labelContainer?this.labelContainer:this.labelContainer=document.getElementById(this.viz.config.labelContainer)},getLabel:function(w){return(w in this.labels&&this.labels[w]!=null)?this.labels[w]:this.labels[w]=document.getElementById(w)},hideLabels:function(x){var w=this.getLabelContainer();if(x){w.style.display="none"}else{w.style.display=""}this.labelsHidden=x},clearLabels:function(w){for(var x in this.labels){if(w||!this.viz.graph.hasNode(x)){this.disposeLabel(x);delete this.labels[x]}}},disposeLabel:function(x){var w=this.getLabel(x);if(w&&w.parentNode){w.parentNode.removeChild(w)}},hideLabel:function(A,w){A=c.splat(A);var x=w?"":"none",y,z=this;c.each(A,function(C){var B=z.getLabel(C.id);if(B){B.style.display=x}})},fitsInCanvas:function(y,w){var x=w.getSize();if(y.x>=x.width||y.x<0||y.y>=x.height||y.y<0){return false}return true}});e.Label.HTML=new q({Implements:e.Label.DOM,plotLabel:function(z,A,y){var B=A.id,w=this.getLabel(B);if(!w&&!(w=document.getElementById(B))){w=document.createElement("div");var x=this.getLabelContainer();w.id=B;w.className="node";w.style.position="absolute";y.onCreateLabel(w,A);x.appendChild(w);this.labels[A.id]=w}this.placeLabel(w,A,y)}});e.Label.SVG=new q({Implements:e.Label.DOM,plotLabel:function(z,B,y){var D=B.id,w=this.getLabel(D);if(!w&&!(w=document.getElementById(D))){var A="http://www.w3.org/2000/svg";w=document.createElementNS(A,"svg:text");var C=document.createElementNS(A,"svg:tspan");w.appendChild(C);var x=this.getLabelContainer();w.setAttribute("id",D);w.setAttribute("class","node");x.appendChild(w);y.onCreateLabel(w,B);this.labels[B.id]=w}this.placeLabel(w,B,y)}});e.Geom=new q({initialize:function(w){this.viz=w;this.config=w.config;this.node=w.config.Node;this.edge=w.config.Edge},translate:function(x,w){w=c.splat(w);this.viz.graph.eachNode(function(y){c.each(w,function(z){y.getPos(z).$add(x)})})},setRightLevelToShow:function(z,w,B){var A=this.getRightLevelToShow(z,w),y=this.viz.labels,x=c.merge({execShow:true,execHide:true,onHide:c.empty,onShow:c.empty},B||{});z.eachLevel(0,this.config.levelsToShow,function(D){var C=D._depth-z._depth;if(C>A){x.onHide(D);if(x.execHide){D.drawn=false;D.exist=false;y.hideLabel(D,false)}}else{x.onShow(D);if(x.execShow){D.exist=true}}});z.drawn=true},getRightLevelToShow:function(z,x){var w=this.config;var A=w.levelsToShow;var y=w.constrained;if(!y){return A}while(!this.treeFitsInCanvas(z,x,A)&&A>1){A--}return A}});var d={construct:function(x){var y=(c.type(x)=="array");var w=new e(this.graphOptions,this.config.Node,this.config.Edge,this.config.Label);if(!y){(function(z,B){z.addNode(B);if(B.children){for(var A=0,C=B.children;A<C.length;A++){z.addAdjacence(B,C[A]);arguments.callee(z,C[A])}}})(w,x)}else{(function(H,I){var A=function(M){for(var L=0,J=I.length;L<J;L++){if(I[L].id==M){return I[L]}}var K={id:M,name:M};return H.addNode(K)};for(var E=0,B=I.length;E<B;E++){H.addNode(I[E]);var F=I[E].adjacencies;if(F){for(var C=0,G=F.length;C<G;C++){var z=F[C],D={};if(typeof F[C]!="string"){D=c.merge(z.data,{});z=z.nodeTo}H.addAdjacence(I[E],A(z),D)}}}})(w,x)}return w},loadJSON:function(x,w){this.json=x;if(this.labels&&this.labels.clearLabels){this.labels.clearLabels(true)}this.graph=this.construct(x);if(c.type(x)!="array"){this.root=x.id}else{this.root=x[w?w:0].id}},toJSON:function(A){A=A||"tree";if(A=="tree"){var y={};var x=this.graph.getNode(this.root);var y=(function w(D){var B={};B.id=D.id;B.name=D.name;B.data=D.data;var C=[];D.eachSubnode(function(E){C.push(w(E))});B.children=C;return B})(x);return y}else{var y=[];var z=!!this.graph.getNode(this.root).visited;this.graph.eachNode(function(C){var B={};B.id=C.id;B.name=C.name;B.data=C.data;var D=[];C.eachAdjacency(function(E){var G=E.nodeTo;if(!!G.visited===z){var F={};F.nodeTo=G.id;F.data=E.data;D.push(F)}});B.adjacencies=D;y.push(B);C.visited=!z});return y}}};var g=$jit.Layouts={};var f={label:null,compute:function(z,A,x){this.initializeLabel(x);var w=this.label,y=w.style;z.eachNode(function(D){var H=D.getData("autoWidth"),I=D.getData("autoHeight");if(H||I){delete D.data.$width;delete D.data.$height;delete D.data.$dim;var B=D.getData("width"),J=D.getData("height");y.width=H?"auto":B+"px";y.height=I?"auto":J+"px";w.innerHTML=D.name;var F=w.offsetWidth,C=w.offsetHeight;var G=D.getData("type");if(c.indexOf(["circle","square","triangle","star"],G)===-1){D.setData("width",F);D.setData("height",C)}else{var E=F>C?F:C;D.setData("width",E);D.setData("height",E);D.setData("dim",E)}}})},initializeLabel:function(w){if(!this.label){this.label=document.createElement("div");document.body.appendChild(this.label)}this.setLabelStyles(w)},setLabelStyles:function(w){c.extend(this.label.style,{visibility:"hidden",position:"absolute",width:"auto",height:"auto"});this.label.className="jit-autoadjust-label"}};g.Tree=(function(){var F=Array.prototype.slice;function D(P,K,H,N,I){var M=K.Node;var J=K.multitree;if(M.overridable){var O=-1,L=-1;P.eachNode(function(S){if(S._depth==H&&(!J||("$orn" in S.data)&&S.data.$orn==N)){var Q=S.getData("width",I);var R=S.getData("height",I);O=(O<Q)?Q:O;L=(L<R)?R:L}});return{width:O<0?M.width:O,height:L<0?M.height:L}}else{return M}}function G(I,L,K,H){var J=(H=="left"||H=="right")?"y":"x";I.getPos(L)[J]+=K}function B(I,J){var H=[];c.each(I,function(K){K=F.call(K);K[0]+=J;K[1]+=J;H.push(K)});return H}function E(K,H){if(K.length==0){return H}if(H.length==0){return K}var J=K.shift(),I=H.shift();return[[J[0],I[1]]].concat(E(K,H))}function z(H,I){I=I||[];if(H.length==0){return I}var J=H.pop();return z(H,E(J,I))}function C(K,I,L,H,J){if(K.length<=J||I.length<=J){return 0}var N=K[J][1],M=I[J][0];return Math.max(C(K,I,L,H,++J)+L,N-M+H)}function A(K,I,H){function J(N,P,M){if(P.length<=M){return[]}var O=P[M],L=C(N,O,I,H,0);return[L].concat(J(E(N,B(O,L)),P,++M))}return J([],K,0)}function x(L,K,J){function H(O,Q,N){if(Q.length<=N){return[]}var P=Q[N],M=-C(P,O,K,J,0);return[M].concat(H(E(B(P,M),O),Q,++N))}L=F.call(L);var I=H([],L.reverse(),0);return I.reverse()}function w(N,L,I,O){var J=A(N,L,I),M=x(N,L,I);if(O=="left"){M=J}else{if(O=="right"){J=M}}for(var K=0,H=[];K<J.length;K++){H[K]=(J[K]+M[K])/2}return H}function y(H,R,I,Y,W){var K=Y.multitree;var Q=["x","y"],N=["width","height"];var J=+(W=="left"||W=="right");var O=Q[J],X=Q[1-J];var T=Y.Node;var M=N[J],V=N[1-J];var L=Y.siblingOffset;var U=Y.subtreeOffset;var S=Y.align;function P(ab,af,aj){var aa=ab.getData(M,I);var ai=af||(ab.getData(V,I));var am=[],ak=[],ag=false;var Z=ai+Y.levelDistance;ab.eachSubnode(function(ao){if(ao.exist&&(!K||("$orn" in ao.data)&&ao.data.$orn==W)){if(!ag){ag=D(H,Y,ao._depth,W,I)}var an=P(ao,ag[V],aj+Z);am.push(an.tree);ak.push(an.extent)}});var ae=w(ak,U,L,S);for(var ad=0,ac=[],ah=[];ad<am.length;ad++){G(am[ad],I,ae[ad],W);ah.push(B(ak[ad],ae[ad]))}var al=[[-aa/2,aa/2]].concat(z(ah));ab.getPos(I)[O]=0;if(W=="top"||W=="left"){ab.getPos(I)[X]=aj}else{ab.getPos(I)[X]=-aj}return{tree:ab,extent:al}}P(R,false,0)}return new q({compute:function(J,I){var K=J||"start";var H=this.graph.getNode(this.root);c.extend(H,{drawn:true,exist:true,selected:true});f.compute(this.graph,K,this.config);if(!!I||!("_depth" in H)){this.graph.computeLevels(this.root,0,"ignore")}this.computePositions(H,K)},computePositions:function(L,H){var J=this.config;var I=J.multitree;var O=J.align;var K=O!=="center"&&J.indent;var P=J.orientation;var N=I?["top","right","bottom","left"]:[P];var M=this;c.each(N,function(Q){y(M.graph,L,H,M.config,Q,H);var R=["x","y"][+(Q=="left"||Q=="right")];(function S(T){T.eachSubnode(function(U){if(U.exist&&(!I||("$orn" in U.data)&&U.data.$orn==Q)){U.getPos(H)[R]+=T.getPos(H)[R];if(K){U.getPos(H)[R]+=O=="left"?K:-K}S(U)}})})(L)})}})})();$jit.ST=(function(){var x=[];function y(D){D=D||this.clickedNode;if(!this.config.constrained){return[]}var A=this.geom;var H=this.graph;var B=this.canvas;var z=D._depth,E=[];H.eachNode(function(I){if(I.exist&&!I.selected){if(I.isDescendantOf(D.id)){if(I._depth<=z){E.push(I)}}else{E.push(I)}}});var F=A.getRightLevelToShow(D,B);D.eachLevel(F,F,function(I){if(I.exist&&!I.selected){E.push(I)}});for(var G=0;G<x.length;G++){var C=this.graph.getNode(x[G]);if(!C.isDescendantOf(D.id)){E.push(C)}}return E}function w(B){var A=[],z=this.config;B=B||this.clickedNode;this.clickedNode.eachLevel(0,z.levelsToShow,function(C){if(z.multitree&&!("$orn" in C.data)&&C.anySubnode(function(D){return D.exist&&!D.drawn})){A.push(C)}else{if(C.drawn&&!C.anySubnode("drawn")){A.push(C)}}});return A}return new q({Implements:[d,o,g.Tree],initialize:function(z){var B=$jit.ST;var A={levelsToShow:2,levelDistance:30,constrained:true,Node:{type:"rectangle"},duration:700,offsetX:0,offsetY:0};this.controller=this.config=c.merge(n("Canvas","Fx","Tree","Node","Edge","Controller","Tips","NodeStyles","Events","Navigation","Label"),A,z);var C=this.config;if(C.useCanvas){this.canvas=C.useCanvas;this.config.labelContainer=this.canvas.id+"-label"}else{if(C.background){C.background=c.merge({type:"Circles"},C.background)}this.canvas=new l(this,C);this.config.labelContainer=(typeof C.injectInto=="string"?C.injectInto:C.injectInto.id)+"-label"}this.graphOptions={klass:p};this.graph=new e(this.graphOptions,this.config.Node,this.config.Edge);this.labels=new B.Label[C.Label.type](this);this.fx=new B.Plot(this,B);this.op=new B.Op(this);this.group=new B.Group(this);this.geom=new B.Geom(this);this.clickedNode=null;this.initializeExtras()},plot:function(){this.fx.plot(this.controller)},switchPosition:function(E,D,C){var z=this.geom,A=this.fx,B=this;if(!A.busy){A.busy=true;this.contract({onComplete:function(){z.switchOrientation(E);B.compute("end",false);A.busy=false;if(D=="animate"){B.onClick(B.clickedNode.id,C)}else{if(D=="replot"){B.select(B.clickedNode.id,C)}}}},E)}},switchAlignment:function(B,A,z){this.config.align=B;if(A=="animate"){this.select(this.clickedNode.id,z)}else{if(A=="replot"){this.onClick(this.clickedNode.id,z)}}},addNodeInPath:function(z){x.push(z);this.select((this.clickedNode&&this.clickedNode.id)||this.root)},clearNodesInPath:function(z){x.length=0;this.select((this.clickedNode&&this.clickedNode.id)||this.root)},refresh:function(){this.reposition();this.select((this.clickedNode&&this.clickedNode.id)||this.root)},reposition:function(){this.graph.computeLevels(this.root,0,"ignore");this.geom.setRightLevelToShow(this.clickedNode,this.canvas);this.graph.eachNode(function(z){if(z.exist){z.drawn=true}});this.compute("end")},requestNodes:function(B,C){var A=c.merge(this.controller,C),z=this.config.levelsToShow;if(A.request){var E=[],D=B._depth;B.eachLevel(0,z,function(F){if(F.drawn&&!F.anySubnode()){E.push(F);F._level=z-(F._depth-D)}});this.group.requestNodes(E,A)}else{A.onComplete()}},contract:function(D,E){var C=this.config.orientation;var z=this.geom,B=this.group;if(E){z.switchOrientation(E)}var A=y.call(this);if(E){z.switchOrientation(C)}B.contract(A,c.merge(this.controller,D))},move:function(A,B){this.compute("end",false);var z=B.Move,C={x:z.offsetX,y:z.offsetY};if(z.enable){this.geom.translate(A.endPos.add(C).$scale(-1),"end")}this.fx.animate(c.merge(this.controller,{modes:["linear"]},B))},expand:function(A,B){var z=w.call(this,A);this.group.expand(z,c.merge(this.controller,B))},selectPath:function(C){var B=this;this.graph.eachNode(function(E){E.selected=false});function D(F){if(F==null||F.selected){return}F.selected=true;c.each(B.group.getSiblings([F])[F.id],function(G){G.exist=true;G.drawn=true});var E=F.getParents();E=(E.length>0)?E[0]:null;D(E)}for(var z=0,A=[C.id].concat(x);z<A.length;z++){D(this.graph.getNode(A[z]))}},setRoot:function(G,F,E){if(this.busy){return}this.busy=true;var D=this,B=this.canvas;var z=this.graph.getNode(this.root);var A=this.graph.getNode(G);function C(){if(this.config.multitree&&A.data.$orn){var I=A.data.$orn;var J={left:"right",right:"left",top:"bottom",bottom:"top"}[I];z.data.$orn=J;(function H(K){K.eachSubnode(function(L){if(L.id!=G){L.data.$orn=J;H(L)}})})(z);delete A.data.$orn}this.root=G;this.clickedNode=A;this.graph.computeLevels(this.root,0,"ignore");this.geom.setRightLevelToShow(A,B,{execHide:false,onShow:function(K){if(!K.drawn){K.drawn=true;K.setData("alpha",1,"end");K.setData("alpha",0);K.pos.setc(A.pos.x,A.pos.y)}}});this.compute("end");this.busy=true;this.fx.animate({modes:["linear","node-property:alpha"],onComplete:function(){D.busy=false;D.onClick(G,{onComplete:function(){E&&E.onComplete()}})}})}delete z.data.$orns;if(F=="animate"){C.call(this);D.selectPath(A)}else{if(F=="replot"){C.call(this);this.select(this.root)}}},addSubtree:function(z,B,A){if(B=="replot"){this.op.sum(z,c.extend({type:"replot"},A||{}))}else{if(B=="animate"){this.op.sum(z,c.extend({type:"fade:seq"},A||{}))}}},removeSubtree:function(E,A,D,C){var B=this.graph.getNode(E),z=[];B.eachLevel(+!A,false,function(F){z.push(F.id)});if(D=="replot"){this.op.removeNode(z,c.extend({type:"replot"},C||{}))}else{if(D=="animate"){this.op.removeNode(z,c.extend({type:"fade:seq"},C||{}))}}},select:function(z,C){var H=this.group,F=this.geom;var D=this.graph.getNode(z),B=this.canvas;var G=this.graph.getNode(this.root);var A=c.merge(this.controller,C);var E=this;A.onBeforeCompute(D);this.selectPath(D);this.clickedNode=D;this.requestNodes(D,{onComplete:function(){H.hide(H.prepare(y.call(E)),A);F.setRightLevelToShow(D,B);E.compute("current");E.graph.eachNode(function(K){var J=K.pos.getc(true);K.startPos.setc(J.x,J.y);K.endPos.setc(J.x,J.y);K.visited=false});var I={x:A.offsetX,y:A.offsetY};E.geom.translate(D.endPos.add(I).$scale(-1),["start","current","end"]);H.show(w.call(E));E.plot();A.onAfterCompute(E.clickedNode);A.onComplete()}})},onClick:function(A,H){var C=this.canvas,G=this,z=this.geom,D=this.config;var F={Move:{enable:true,offsetX:D.offsetX||0,offsetY:D.offsetY||0},setRightLevelToShowConfig:false,onBeforeRequest:c.empty,onBeforeContract:c.empty,onBeforeMove:c.empty,onBeforeExpand:c.empty};var B=c.merge(this.controller,F,H);if(!this.busy){this.busy=true;var E=this.graph.getNode(A);this.selectPath(E,this.clickedNode);this.clickedNode=E;B.onBeforeCompute(E);B.onBeforeRequest(E);this.requestNodes(E,{onComplete:function(){B.onBeforeContract(E);G.contract({onComplete:function(){z.setRightLevelToShow(E,C,B.setRightLevelToShowConfig);B.onBeforeMove(E);G.move(E,{Move:B.Move,onComplete:function(){B.onBeforeExpand(E);G.expand(E,{onComplete:function(){G.busy=false;B.onAfterCompute(A);B.onComplete()}})}})}})}})}}})})();$jit.ST.$extend=true;$jit.ST.Op=new q({Implements:e.Op});$jit.ST.Group=new q({initialize:function(w){this.viz=w;this.canvas=w.canvas;this.config=w.config;this.animation=new u;this.nodes=null},requestNodes:function(B,A){var z=0,x=B.length,D={};var y=function(){A.onComplete()};var w=this.viz;if(x==0){y()}for(var C=0;C<x;C++){D[B[C].id]=B[C];A.request(B[C].id,B[C]._level,{onComplete:function(F,E){if(E&&E.children){E.id=F;w.op.sum(E,{type:"nothing"})}if(++z==x){w.graph.computeLevels(w.root,0);y()}}})}},contract:function(y,x){var w=this.viz;var z=this;y=this.prepare(y);this.animation.setOptions(c.merge(x,{$animating:false,compute:function(A){if(A==1){A=0.99}z.plotStep(1-A,x,this.$animating);this.$animating="contract"},complete:function(){z.hide(y,x)}})).start()},hide:function(y,x){var w=this.viz;for(var z=0;z<y.length;z++){if(true||!x||!x.request){y[z].eachLevel(1,false,function(B){if(B.exist){c.extend(B,{drawn:false,exist:false})}})}else{var A=[];y[z].eachLevel(1,false,function(B){A.push(B.id)});w.op.removeNode(A,{type:"nothing"});w.labels.clearLabels()}}x.onComplete()},expand:function(x,w){var y=this;this.show(x);this.animation.setOptions(c.merge(w,{$animating:false,compute:function(z){y.plotStep(z,w,this.$animating);this.$animating="expand"},complete:function(){y.plotStep(undefined,w,false);w.onComplete()}})).start()},show:function(w){var x=this.config;this.prepare(w);c.each(w,function(z){if(x.multitree&&!("$orn" in z.data)){delete z.data.$orns;var y=" ";z.eachSubnode(function(A){if(("$orn" in A.data)&&y.indexOf(A.data.$orn)<0&&A.exist&&!A.drawn){y+=A.data.$orn+" "}});z.data.$orns=y}z.eachLevel(0,x.levelsToShow,function(A){if(A.exist){A.drawn=true}})})},prepare:function(w){this.nodes=this.getNodesWithChildren(w);return this.nodes},getNodesWithChildren:function(y){var x=[],A=this.config,w=this.viz.root;y.sort(function(E,D){return(E._depth<=D._depth)-(E._depth>=D._depth)});for(var B=0;B<y.length;B++){if(y[B].anySubnode("exist")){for(var z=B+1,C=false;!C&&z<y.length;z++){if(!A.multitree||"$orn" in y[z].data){C=C||y[B].isDescendantOf(y[z].id)}}if(!C){x.push(y[B])}}}return x},plotStep:function(G,C,I){var F=this.viz,z=this.config,y=F.canvas,H=y.getCtx(),w=this.nodes;var B,A;var x={};for(B=0;B<w.length;B++){A=w[B];x[A.id]=[];var E=z.multitree&&!("$orn" in A.data);var D=E&&A.data.$orns;A.eachSubgraph(function(J){if(E&&D&&D.indexOf(J.data.$orn)>0&&J.drawn){J.drawn=false;x[A.id].push(J)}else{if((!E||!D)&&J.drawn){J.drawn=false;x[A.id].push(J)}}});A.drawn=true}if(w.length>0){F.fx.plot()}for(B in x){c.each(x[B],function(J){J.drawn=true})}for(B=0;B<w.length;B++){A=w[B];H.save();F.fx.plotSubtree(A,C,G,I);H.restore()}},getSiblings:function(w){var x={};c.each(w,function(A){var z=A.getParents();if(z.length==0){x[A.id]=[A]}else{var y=[];z[0].eachSubnode(function(B){y.push(B)});x[A.id]=y}});return x}});$jit.ST.Geom=new q({Implements:e.Geom,switchOrientation:function(w){this.config.orientation=w},dispatch:function(){var x=Array.prototype.slice.call(arguments);var y=x.shift(),w=x.length;var z=function(A){return typeof A=="function"?A():A};if(w==2){return(y=="top"||y=="bottom")?z(x[0]):z(x[1])}else{if(w==4){switch(y){case"top":return z(x[0]);case"right":return z(x[1]);case"bottom":return z(x[2]);case"left":return z(x[3])}}}return undefined},getSize:function(E,D){var C=E.data,z=this.config;var y=z.siblingOffset;var B=(z.multitree&&("$orn" in C)&&C.$orn)||z.orientation;var x=E.getData("width")+y;var A=E.getData("height")+y;if(!D){return this.dispatch(B,A,x)}else{return this.dispatch(B,x,A)}},getTreeBaseSize:function(A,B,x){var y=this.getSize(A,true),w=0,z=this;if(x(B,A)){return y}if(B===0){return 0}A.eachSubnode(function(C){w+=z.getTreeBaseSize(C,B-1,x)});return(y>w?y:w)+this.config.subtreeOffset},getEdge:function(C,B,A){var y=function(E,w){return function(){return C.pos.add(new p(E,w))}};var D=this.node;var x=C.getData("width");var z=C.getData("height");if(B=="begin"){if(D.align=="center"){return this.dispatch(A,y(0,z/2),y(-x/2,0),y(0,-z/2),y(x/2,0))}else{if(D.align=="left"){return this.dispatch(A,y(0,z),y(0,0),y(0,0),y(x,0))}else{if(D.align=="right"){return this.dispatch(A,y(0,0),y(-x,0),y(0,-z),y(0,0))}else{throw"align: not implemented"}}}}else{if(B=="end"){if(D.align=="center"){return this.dispatch(A,y(0,-z/2),y(x/2,0),y(0,z/2),y(-x/2,0))}else{if(D.align=="left"){return this.dispatch(A,y(0,0),y(x,0),y(0,z),y(0,0))}else{if(D.align=="right"){return this.dispatch(A,y(0,-z),y(0,0),y(0,0),y(-x,0))}else{throw"align: not implemented"}}}}}},getScaledTreePosition:function(B,D){var C=this.node;var x=B.getData("width");var A=B.getData("height");var z=(this.config.multitree&&("$orn" in B.data)&&B.data.$orn)||this.config.orientation;var y=function(E,w){return function(){return B.pos.add(new p(E,w)).$scale(1-D)}};if(C.align=="left"){return this.dispatch(z,y(0,A),y(0,0),y(0,0),y(x,0))}else{if(C.align=="center"){return this.dispatch(z,y(0,A/2),y(-x/2,0),y(0,-A/2),y(x/2,0))}else{if(C.align=="right"){return this.dispatch(z,y(0,0),y(-x,0),y(0,-A),y(0,0))}else{throw"align: not implemented"}}}},treeFitsInCanvas:function(B,w,C){var y=w.getSize();var z=(this.config.multitree&&("$orn" in B.data)&&B.data.$orn)||this.config.orientation;var x=this.dispatch(z,y.width,y.height);var A=this.getTreeBaseSize(B,C,function(E,D){return E===0||!D.anySubnode()});return(A<x)}});$jit.ST.Plot=new q({Implements:e.Plot,plotSubtree:function(z,w,A,E){var C=this.viz,x=C.canvas,y=C.config;A=Math.min(Math.max(0.001,A),1);if(A>=0){z.drawn=false;var D=x.getCtx();var B=C.geom.getScaledTreePosition(z,A);D.translate(B.x,B.y);D.scale(A,A)}this.plotTree(z,c.merge(w,{withLabels:true,hideLabels:!!A,plotSubtree:function(I,G){var F=y.multitree&&!("$orn" in z.data);var H=F&&z.getData("orns");return !F||H.indexOf(z.getData("orn"))>-1}}),E);if(A>=0){z.drawn=true}},getAlignedPos:function(B,z,w){var y=this.node;var A,x;if(y.align=="center"){A={x:B.x-z/2,y:B.y-w/2}}else{if(y.align=="left"){x=this.config.orientation;if(x=="bottom"||x=="top"){A={x:B.x-z/2,y:B.y}}else{A={x:B.x,y:B.y-w/2}}}else{if(y.align=="right"){x=this.config.orientation;if(x=="bottom"||x=="top"){A={x:B.x-z/2,y:B.y-w}}else{A={x:B.x-z,y:B.y-w/2}}}else{throw"align: not implemented"}}}return A},getOrientation:function(w){var y=this.config;var x=y.orientation;if(y.multitree){var z=w.nodeFrom;var A=w.nodeTo;x=(("$orn" in z.data)&&z.data.$orn)||(("$orn" in A.data)&&A.data.$orn)}return x}});$jit.ST.Label={};$jit.ST.Label.Native=new q({Implements:e.Label.Native,renderLabel:function(z,B,y){var x=z.getCtx(),D=B.pos.getc(true),A=B.getData("width"),w=B.getData("height"),C=this.viz.fx.getAlignedPos(D,A,w);x.fillText(B.name,C.x+A/2,C.y+w/2)}});$jit.ST.Label.DOM=new q({Implements:e.Label.DOM,placeLabel:function(P,J,F){var B=J.pos.getc(true),O=this.viz.config,K=O.Node,x=this.viz.canvas,C=J.getData("width"),M=J.getData("height"),y=x.getSize(),G,N;var A=x.translateOffsetX,z=x.translateOffsetY,E=x.scaleOffsetX,D=x.scaleOffsetY,I=B.x*E+A,H=B.y*D+z;if(K.align=="center"){G={x:Math.round(I-C/2+y.width/2),y:Math.round(H-M/2+y.height/2)}}else{if(K.align=="left"){N=O.orientation;if(N=="bottom"||N=="top"){G={x:Math.round(I-C/2+y.width/2),y:Math.round(H+y.height/2)}}else{G={x:Math.round(I+y.width/2),y:Math.round(H-M/2+y.height/2)}}}else{if(K.align=="right"){N=O.orientation;if(N=="bottom"||N=="top"){G={x:Math.round(I-C/2+y.width/2),y:Math.round(H-M+y.height/2)}}else{G={x:Math.round(I-C+y.width/2),y:Math.round(H-M/2+y.height/2)}}}else{throw"align: not implemented"}}}var L=P.style;L.left=G.x+"px";L.top=G.y+"px";L.display=this.fitsInCanvas(G,x)?"":"none";F.onPlaceLabel(P,J)}});$jit.ST.Label.SVG=new q({Implements:[$jit.ST.Label.DOM,e.Label.SVG],initialize:function(w){this.viz=w}});$jit.ST.Label.HTML=new q({Implements:[$jit.ST.Label.DOM,e.Label.HTML],initialize:function(w){this.viz=w}});$jit.ST.Plot.NodeTypes=new q({none:{render:c.empty,contains:c.lambda(false)},circle:{render:function(x,w){var z=x.getData("dim"),A=this.getAlignedPos(x.pos.getc(true),z,z),y=z/2;this.nodeHelper.circle.render("fill",{x:A.x+y,y:A.y+y},y,w)},contains:function(w,A){var y=w.getData("dim"),z=this.getAlignedPos(w.pos.getc(true),y,y),x=y/2;this.nodeHelper.circle.contains({x:z.x+x,y:z.y+x},A,x)}},square:{render:function(x,w){var z=x.getData("dim"),y=z/2,A=this.getAlignedPos(x.pos.getc(true),z,z);this.nodeHelper.square.render("fill",{x:A.x+y,y:A.y+y},y,w)},contains:function(w,A){var y=w.getData("dim"),z=this.getAlignedPos(w.pos.getc(true),y,y),x=y/2;this.nodeHelper.square.contains({x:z.x+x,y:z.y+x},A,x)}},ellipse:{render:function(z,x){var y=z.getData("width"),w=z.getData("height"),A=this.getAlignedPos(z.pos.getc(true),y,w);this.nodeHelper.ellipse.render("fill",{x:A.x+y/2,y:A.y+w/2},y,w,x)},contains:function(y,A){var x=y.getData("width"),w=y.getData("height"),z=this.getAlignedPos(y.pos.getc(true),x,w);this.nodeHelper.ellipse.contains({x:z.x+x/2,y:z.y+w/2},A,x,w)}},rectangle:{render:function(z,x){var y=z.getData("width"),w=z.getData("height"),A=this.getAlignedPos(z.pos.getc(true),y,w);this.nodeHelper.rectangle.render("fill",{x:A.x+y/2,y:A.y+w/2},y,w,x)},contains:function(y,A){var x=y.getData("width"),w=y.getData("height"),z=this.getAlignedPos(y.pos.getc(true),x,w);this.nodeHelper.rectangle.contains({x:z.x+x/2,y:z.y+w/2},A,x,w)}}});$jit.ST.Plot.EdgeTypes=new q({none:c.empty,line:{render:function(x,z){var y=this.getOrientation(x),A=x.nodeFrom,B=x.nodeTo,w=A._depth<B._depth,D=this.viz.geom.getEdge(w?A:B,"begin",y),C=this.viz.geom.getEdge(w?B:A,"end",y);this.edgeHelper.line.render(D,C,z)},contains:function(x,D){var y=this.getOrientation(x),z=x.nodeFrom,A=x.nodeTo,w=z._depth<A._depth,C=this.viz.geom.getEdge(w?z:A,"begin",y),B=this.viz.geom.getEdge(w?A:z,"end",y);return this.edgeHelper.line.contains(C,B,D,this.edge.epsilon)}},arrow:{render:function(C,x){var B=this.getOrientation(C),y=C.nodeFrom,w=C.nodeTo,A=C.getData("dim"),E=this.viz.geom.getEdge(y,"begin",B),F=this.viz.geom.getEdge(w,"end",B),D=C.data.$direction,z=(D&&D.length>1&&D[0]!=y.id);this.edgeHelper.arrow.render(E,F,A,z,x)},contains:function(x,D){var y=this.getOrientation(x),z=x.nodeFrom,A=x.nodeTo,w=z._depth<A._depth,C=this.viz.geom.getEdge(w?z:A,"begin",y),B=this.viz.geom.getEdge(w?A:z,"end",y);return this.edgeHelper.arrow.contains(C,B,D,this.edge.epsilon)}},"quadratic:begin":{render:function(C,w){var B=this.getOrientation(C);var A=C.nodeFrom,D=C.nodeTo,F=A._depth<D._depth,x=this.viz.geom.getEdge(F?A:D,"begin",B),y=this.viz.geom.getEdge(F?D:A,"end",B),z=C.getData("dim"),E=w.getCtx();E.beginPath();E.moveTo(x.x,x.y);switch(B){case"left":E.quadraticCurveTo(x.x+z,x.y,y.x,y.y);break;case"right":E.quadraticCurveTo(x.x-z,x.y,y.x,y.y);break;case"top":E.quadraticCurveTo(x.x,x.y+z,y.x,y.y);break;case"bottom":E.quadraticCurveTo(x.x,x.y-z,y.x,y.y);break}E.stroke()}},"quadratic:end":{render:function(C,w){var B=this.getOrientation(C);var A=C.nodeFrom,D=C.nodeTo,F=A._depth<D._depth,x=this.viz.geom.getEdge(F?A:D,"begin",B),y=this.viz.geom.getEdge(F?D:A,"end",B),z=C.getData("dim"),E=w.getCtx();E.beginPath();E.moveTo(x.x,x.y);switch(B){case"left":E.quadraticCurveTo(y.x-z,y.y,y.x,y.y);break;case"right":E.quadraticCurveTo(y.x+z,y.y,y.x,y.y);break;case"top":E.quadraticCurveTo(y.x,y.y-z,y.x,y.y);break;case"bottom":E.quadraticCurveTo(y.x,y.y+z,y.x,y.y);break}E.stroke()}},bezier:{render:function(C,w){var B=this.getOrientation(C),A=C.nodeFrom,D=C.nodeTo,F=A._depth<D._depth,x=this.viz.geom.getEdge(F?A:D,"begin",B),y=this.viz.geom.getEdge(F?D:A,"end",B),z=C.getData("dim"),E=w.getCtx();E.beginPath();E.moveTo(x.x,x.y);switch(B){case"left":E.bezierCurveTo(x.x+z,x.y,y.x-z,y.y,y.x,y.y);break;case"right":E.bezierCurveTo(x.x-z,x.y,y.x+z,y.y,y.x,y.y);break;case"top":E.bezierCurveTo(x.x,x.y+z,y.x,y.y-z,y.x,y.y);break;case"bottom":E.bezierCurveTo(x.x,x.y-z,y.x,y.y+z,y.x,y.y);break}E.stroke()}}});$jit.ST.Plot.NodeTypes.implement({"areachart-stacked":{render:function(W,D){var U=W.pos.getc(true),w=W.getData("width"),A=W.getData("height"),G=this.getAlignedPos(U,w,A),ab=G.x,aa=G.y,L=W.getData("stringArray"),F=W.getData("dimArray"),B=W.getData("valueArray"),ad=c.reduce(B,function(aj,ak){return aj+ak[0]},0),ac=c.reduce(B,function(aj,ak){return aj+ak[1]},0),I=W.getData("colorArray"),C=I.length,Y=W.getData("config"),J=W.getData("gradient"),ai=Y.showLabels,N=Y.showAggregates,ae=Y.Label,T=W.getData("prev");var M=D.getCtx(),H=W.getData("border");if(I&&F&&L){for(var ah=0,af=F.length,K=0,E=0,X=0;ah<af;ah++){M.fillStyle=M.strokeStyle=I[ah%C];M.save();if(J&&(F[ah][0]>0||F[ah][1]>0)){var R=K+F[ah][0],P=E+F[ah][1],ag=Math.atan((P-R)/w),Z=55;var V=M.createLinearGradient(ab+w/2,aa-(R+P)/2,ab+w/2+Z*Math.sin(ag),aa-(R+P)/2+Z*Math.cos(ag));var Q=c.rgbToHex(c.map(c.hexToRgb(I[ah%C].slice(1)),function(x){return(x*0.85)>>0}));V.addColorStop(0,I[ah%C]);V.addColorStop(1,Q);M.fillStyle=V}M.beginPath();M.moveTo(ab,aa-K);M.lineTo(ab+w,aa-E);M.lineTo(ab+w,aa-E-F[ah][1]);M.lineTo(ab,aa-K-F[ah][0]);M.lineTo(ab,aa-K);M.fill();M.restore();if(H){var S=H.name==L[ah];var z=S?0.7:0.8;var Q=c.rgbToHex(c.map(c.hexToRgb(I[ah%C].slice(1)),function(x){return(x*z)>>0}));M.strokeStyle=Q;M.lineWidth=S?4:1;M.save();M.beginPath();if(H.index===0){M.moveTo(ab,aa-K);M.lineTo(ab,aa-K-F[ah][0])}else{M.moveTo(ab+w,aa-E);M.lineTo(ab+w,aa-E-F[ah][1])}M.stroke();M.restore()}K+=(F[ah][0]||0);E+=(F[ah][1]||0);if(F[ah][0]>0){X+=(B[ah][0]||0)}}if(T&&ae.type=="Native"){M.save();M.beginPath();M.fillStyle=M.strokeStyle=ae.color;M.font=ae.style+" "+ae.size+"px "+ae.family;M.textAlign="center";M.textBaseline="middle";var O=N(W.name,ad,ac,W,X);if(O!==false){M.fillText(O!==true?O:X,ab,aa-K-Y.labelOffset-ae.size/2,w)}if(ai(W.name,ad,ac,W)){M.fillText(W.name,ab,aa+ae.size/2+Y.labelOffset)}M.restore()}}},contains:function(C,E){var J=C.pos.getc(true),z=C.getData("width"),N=C.getData("height"),M=this.getAlignedPos(J,z,N),L=M.x,K=M.y,O=C.getData("dimArray"),w=E.x-L;if(E.x<L||E.x>L+z||E.y>K||E.y<K-N){return false}for(var F=0,D=O.length,I=K,A=K;F<D;F++){var B=O[F];I-=B[0];A-=B[1];var G=I+(A-I)*w/z;if(E.y>=G){var H=+(w>z/2);return{name:C.getData("stringArray")[F],color:C.getData("colorArray")[F],value:C.getData("valueArray")[F][H],index:H}}}return false}}});$jit.AreaChart=new q({st:null,colors:["#416D9C","#70A35E","#EBB056","#C74243","#83548B","#909291","#557EAA"],selected:{},busy:false,initialize:function(y){this.controller=this.config=c.merge(n("Canvas","Margin","Label","AreaChart"),{Label:{type:"Native"}},y);var z=this.config.showLabels,x=c.type(z),A=this.config.showAggregates,w=c.type(A);this.config.showLabels=x=="function"?z:c.lambda(z);this.config.showAggregates=w=="function"?A:c.lambda(A);this.initializeViz()},initializeViz:function(){var x=this.config,B=this,w=x.type.split(":")[0],A={};var z=new $jit.ST({injectInto:x.injectInto,width:x.width,height:x.height,orientation:"bottom",levelDistance:0,siblingOffset:0,subtreeOffset:0,withLabels:x.Label.type!="Native",useCanvas:x.useCanvas,Label:{type:x.Label.type},Node:{overridable:true,type:"areachart-"+w,align:"left",width:1,height:1},Edge:{type:"none"},Tips:{enable:x.Tips.enable,type:"Native",force:true,onShow:function(G,F,D){var E=D;x.Tips.onShow(G,E,F)}},Events:{enable:true,type:"Native",onClick:function(F,G,D){if(!x.filterOnClick&&!x.Events.enable){return}var E=G.getContains();if(E){x.filterOnClick&&B.filter(E.name)}x.Events.enable&&x.Events.onClick(E,G,D)},onRightClick:function(E,F,D){if(!x.restoreOnRightClick){return}B.restore()},onMouseMove:function(F,G,D){if(!x.selectOnHover){return}if(F){var E=G.getContains();B.select(F.id,E.name,E.index)}else{B.select(false,false,false)}}},onCreateLabel:function(J,G){var P=x.Label,O=G.getData("valueArray"),H=c.reduce(O,function(Q,R){return Q+R[0]},0),M=c.reduce(O,function(Q,R){return Q+R[1]},0);if(G.getData("prev")){var L={wrapper:document.createElement("div"),aggregate:document.createElement("div"),label:document.createElement("div")};var D=L.wrapper,N=L.label,E=L.aggregate,F=D.style,K=N.style,I=E.style;A[G.id]=L;D.appendChild(N);D.appendChild(E);if(!x.showLabels(G.name,H,M,G)){N.style.display="none"}if(!x.showAggregates(G.name,H,M,G)){E.style.display="none"}F.position="relative";F.overflow="visible";F.fontSize=P.size+"px";F.fontFamily=P.family;F.color=P.color;F.textAlign="center";I.position=K.position="absolute";J.style.width=G.getData("width")+"px";J.style.height=G.getData("height")+"px";N.innerHTML=G.name;J.appendChild(D)}},onPlaceLabel:function(V,P){if(!P.getData("prev")){return}var T=A[P.id],E=T.wrapper.style,D=T.label.style,O=T.aggregate.style,M=P.getData("width"),K=P.getData("height"),J=P.getData("dimArray"),G=P.getData("valueArray"),L=c.reduce(G,function(W,X){return W+X[0]},0),H=c.reduce(G,function(W,X){return W+X[1]},0),I=parseInt(E.fontSize,10),N=V.style;if(J&&G){if(x.showLabels(P.name,L,H,P)){D.display=""}else{D.display="none"}var F=x.showAggregates(P.name,L,H,P);if(F!==false){O.display=""}else{O.display="none"}E.width=O.width=D.width=V.style.width=M+"px";O.left=D.left=-M/2+"px";for(var S=0,Q=G.length,R=0,U=0;S<Q;S++){if(J[S][0]>0){R+=G[S][0];U+=J[S][0]}}O.top=(-I-x.labelOffset)+"px";D.top=(x.labelOffset+U)+"px";V.style.top=parseInt(V.style.top,10)-U+"px";V.style.height=E.height=U+"px";T.aggregate.innerHTML=F!==true?F:R}}});var y=z.canvas.getSize(),C=x.Margin;z.config.offsetY=-y.height/2+C.bottom+(x.showLabels&&(x.labelOffset+x.Label.size));z.config.offsetX=(C.right-C.left)/2;this.delegate=z;this.canvas=this.delegate.canvas},loadJSON:function(N){var J=c.time(),B=[],M=this.delegate,Q=c.splat(N.label),I=c.splat(N.color||this.colors),O=this.config,x=!!O.type.split(":")[1],z=O.animate;for(var K=0,y=N.values,H=y.length;K<H-1;K++){var P=y[K],E=y[K-1],F=y[K+1];var L=c.splat(y[K].values),w=c.splat(y[K+1].values);var A=c.zip(L,w);var D=0,C=0;B.push({id:J+P.label,name:P.label,data:{value:A,"$valueArray":A,"$colorArray":I,"$stringArray":Q,"$next":F.label,"$prev":E?E.label:false,"$config":O,"$gradient":x},children:[]})}var G={id:J+"$root",name:"",data:{"$type":"none","$width":1,"$height":1},children:B};M.loadJSON(G);this.normalizeDims();M.compute();M.select(M.root);if(z){M.fx.animate({modes:["node-property:height:dimArray"],duration:1500})}},updateJSON:function(G,x){if(this.busy){return}this.busy=true;var D=this.delegate,F=D.graph,A=G.label&&c.splat(G.label),E=G.values,w=this.config.animate,C=this,B={};for(var z=0,y=E.length;z<y;z++){B[E[z].label]=E[z]}F.eachNode(function(L){var H=B[L.name],I=L.getData("stringArray"),K=L.getData("valueArray"),J=L.getData("next");if(H){H.values=c.splat(H.values);c.each(K,function(M,N){M[0]=H.values[N];if(A){I[N]=A[N]}});L.setData("valueArray",K)}if(J){H=B[J];if(H){c.each(K,function(M,N){M[1]=H.values[N]})}}});this.normalizeDims();D.compute();D.select(D.root);if(w){D.fx.animate({modes:["node-property:height:dimArray"],duration:1500,onComplete:function(){C.busy=false;x&&x.onComplete()}})}},filter:function(z,A){if(this.busy){return}this.busy=true;if(this.config.Tips.enable){this.delegate.tips.hide()}this.select(false,false,false);var x=c.splat(z);var w=this.delegate.graph.getNode(this.delegate.root);var y=this;this.normalizeDims();w.eachAdjacency(function(B){var E=B.nodeTo,D=E.getData("dimArray","end"),C=E.getData("stringArray");E.setData("dimArray",c.map(D,function(G,F){return(c.indexOf(x,C[F])>-1)?G:[0,0]}),"end")});this.delegate.fx.animate({modes:["node-property:dimArray"],duration:1500,onComplete:function(){y.busy=false;A&&A.onComplete()}})},restore:function(x){if(this.busy){return}this.busy=true;if(this.config.Tips.enable){this.delegate.tips.hide()}this.select(false,false,false);this.normalizeDims();var w=this;this.delegate.fx.animate({modes:["node-property:height:dimArray"],duration:1500,onComplete:function(){w.busy=false;x&&x.onComplete()}})},select:function(B,x,w){if(!this.config.selectOnHover){return}var y=this.selected;if(y.id!=B||y.name!=x||y.index!=w){y.id=B;y.name=x;y.index=w;this.delegate.graph.eachNode(function(C){C.setData("border",false)});if(B){var A=this.delegate.graph.getNode(B);A.setData("border",y);var z=w===0?"prev":"next";z=A.getData(z);if(z){A=this.delegate.graph.getByName(z);if(A){A.setData("border",{name:x,index:1-w})}}}this.delegate.plot()}},getLegend:function(){var y={};var z;this.delegate.graph.getNode(this.delegate.root).eachAdjacency(function(A){z=A.nodeTo});var x=z.getData("colorArray"),w=x.length;c.each(z.getData("stringArray"),function(B,A){y[B]=x[A%w]});return y},getMaxValue:function(){var w=0;this.delegate.graph.eachNode(function(B){var y=B.getData("valueArray"),x=0,A=0;c.each(y,function(C){x+=+C[0];A+=+C[1]});var z=A>x?A:x;w=w>z?w:z});return w},normalizeDims:function(){var C=this.delegate.graph.getNode(this.delegate.root),z=0;C.eachAdjacency(function(){z++});var B=this.getMaxValue()||1,F=this.delegate.canvas.getSize(),y=this.config,A=y.Margin,D=y.labelOffset+y.Label.size,w=(F.width-(A.left+A.right))/z,x=y.animate,E=F.height-(A.top+A.bottom)-(y.showAggregates&&D)-(y.showLabels&&D);this.delegate.graph.eachNode(function(L){var I=0,K=0,G=[];c.each(L.getData("valueArray"),function(M){I+=+M[0];K+=+M[1];G.push([0,0])});var J=K>I?K:I;L.setData("width",w);if(x){L.setData("height",J*E/B,"end");L.setData("dimArray",c.map(L.getData("valueArray"),function(M){return[M[0]*E/B,M[1]*E/B]}),"end");var H=L.getData("dimArray");if(!H){L.setData("dimArray",G)}}else{L.setData("height",J*E/B);L.setData("dimArray",c.map(L.getData("valueArray"),function(M){return[M[0]*E/B,M[1]*E/B]}))}})}});n.BarChart={$extend:true,animate:true,type:"stacked",labelOffset:3,barsOffset:0,hoveredColor:"#9fd4ff",orientation:"horizontal",showAggregates:true,showLabels:true,Tips:{enable:false,onShow:c.empty,onHide:c.empty},Events:{enable:false,onClick:c.empty}};$jit.ST.Plot.NodeTypes.implement({"barchart-stacked":{render:function(R,C){var H=R.pos.getc(true),Q=R.getData("width"),O=R.getData("height"),M=this.getAlignedPos(H,Q,O),L=M.x,K=M.y,N=R.getData("dimArray"),F=R.getData("valueArray"),E=R.getData("colorArray"),B=E.length,Y=R.getData("stringArray");var T=C.getCtx(),w={},U=R.getData("border"),z=R.getData("gradient"),aa=R.getData("config"),A=aa.orientation=="horizontal",D=aa.showAggregates,P=aa.showLabels,J=aa.Label;if(E&&N&&Y){for(var X=0,S=N.length,W=0,G=0;X<S;X++){T.fillStyle=T.strokeStyle=E[X%B];if(z){var Z;if(A){Z=T.createLinearGradient(L+W+N[X]/2,K,L+W+N[X]/2,K+O)}else{Z=T.createLinearGradient(L,K-W-N[X]/2,L+Q,K-W-N[X]/2)}var V=c.rgbToHex(c.map(c.hexToRgb(E[X%B].slice(1)),function(x){return(x*0.5)>>0}));Z.addColorStop(0,V);Z.addColorStop(0.5,E[X%B]);Z.addColorStop(1,V);T.fillStyle=Z}if(A){T.fillRect(L+W,K,N[X],O)}else{T.fillRect(L,K-W-N[X],Q,N[X])}if(U&&U.name==Y[X]){w.acum=W;w.dimValue=N[X]}W+=(N[X]||0);G+=(F[X]||0)}if(U){T.save();T.lineWidth=2;T.strokeStyle=U.color;if(A){T.strokeRect(L+w.acum+1,K+1,w.dimValue-2,O-2)}else{T.strokeRect(L+1,K-w.acum-w.dimValue+1,Q-2,w.dimValue-2)}T.restore()}if(J.type=="Native"){T.save();T.fillStyle=T.strokeStyle=J.color;T.font=J.style+" "+J.size+"px "+J.family;T.textBaseline="middle";var I=D(R.name,G,R);if(I!==false){I=I!==true?I:G;if(A){T.textAlign="right";T.fillText(I,L+W-aa.labelOffset,K+O/2)}else{T.textAlign="center";T.fillText(I,L+Q/2,K-O-J.size/2-aa.labelOffset)}}if(P(R.name,G,R)){if(A){T.textAlign="center";T.translate(L-aa.labelOffset-J.size/2,K+O/2);T.rotate(Math.PI/2);T.fillText(R.name,0,0)}else{T.textAlign="center";T.fillText(R.name,L+Q/2,K+J.size/2+aa.labelOffset)}}T.restore()}}},contains:function(D,F){var I=D.pos.getc(true),A=D.getData("width"),N=D.getData("height"),M=this.getAlignedPos(I,A,N),L=M.x,J=M.y,O=D.getData("dimArray"),B=D.getData("config"),z=F.x-L,w=B.orientation=="horizontal";if(w){if(F.x<L||F.x>L+A||F.y>J+N||F.y<J){return false}}else{if(F.x<L||F.x>L+A||F.y>J||F.y<J-N){return false}}for(var G=0,E=O.length,K=(w?L:J);G<E;G++){var C=O[G];if(w){K+=C;var H=K;if(F.x<=H){return{name:D.getData("stringArray")[G],color:D.getData("colorArray")[G],value:D.getData("valueArray")[G],label:D.name}}}else{K-=C;var H=K;if(F.y>=H){return{name:D.getData("stringArray")[G],color:D.getData("colorArray")[G],value:D.getData("valueArray")[G],label:D.name}}}}return false}},"barchart-grouped":{render:function(S,C){var I=S.pos.getc(true),R=S.getData("width"),P=S.getData("height"),N=this.getAlignedPos(I,R,P),M=N.x,L=N.y,O=S.getData("dimArray"),G=S.getData("valueArray"),Y=G.length,F=S.getData("colorArray"),B=F.length,aa=S.getData("stringArray");var U=C.getCtx(),w={},V=S.getData("border"),z=S.getData("gradient"),ac=S.getData("config"),A=ac.orientation=="horizontal",E=ac.showAggregates,Q=ac.showLabels,K=ac.Label,D=(A?P:R)/Y;if(F&&O&&aa){for(var Z=0,T=Y,X=0,H=0;Z<T;Z++){U.fillStyle=U.strokeStyle=F[Z%B];if(z){var ab;if(A){ab=U.createLinearGradient(M+O[Z]/2,L+D*Z,M+O[Z]/2,L+D*(Z+1))}else{ab=U.createLinearGradient(M+D*Z,L-O[Z]/2,M+D*(Z+1),L-O[Z]/2)}var W=c.rgbToHex(c.map(c.hexToRgb(F[Z%B].slice(1)),function(x){return(x*0.5)>>0}));ab.addColorStop(0,W);ab.addColorStop(0.5,F[Z%B]);ab.addColorStop(1,W);U.fillStyle=ab}if(A){U.fillRect(M,L+D*Z,O[Z],D)}else{U.fillRect(M+D*Z,L-O[Z],D,O[Z])}if(V&&V.name==aa[Z]){w.acum=D*Z;w.dimValue=O[Z]}X+=(O[Z]||0);H+=(G[Z]||0)}if(V){U.save();U.lineWidth=2;U.strokeStyle=V.color;if(A){U.strokeRect(M+1,L+w.acum+1,w.dimValue-2,D-2)}else{U.strokeRect(M+w.acum+1,L-w.dimValue+1,D-2,w.dimValue-2)}U.restore()}if(K.type=="Native"){U.save();U.fillStyle=U.strokeStyle=K.color;U.font=K.style+" "+K.size+"px "+K.family;U.textBaseline="middle";var J=E(S.name,H,S);if(J!==false){J=J!==true?J:H;if(A){U.textAlign="right";U.fillText(J,M+Math.max.apply(null,O)-ac.labelOffset,L+P/2)}else{U.textAlign="center";U.fillText(J,M+R/2,L-Math.max.apply(null,O)-K.size/2-ac.labelOffset)}}if(Q(S.name,H,S)){if(A){U.textAlign="center";U.translate(M-ac.labelOffset-K.size/2,L+P/2);U.rotate(Math.PI/2);U.fillText(S.name,0,0)}else{U.textAlign="center";U.fillText(S.name,M+R/2,L+K.size/2+ac.labelOffset)}}U.restore()}}},contains:function(J,F){var B=J.pos.getc(true),I=J.getData("width"),H=J.getData("height"),E=this.getAlignedPos(B,I,H),D=E.x,C=E.y,G=J.getData("dimArray"),M=G.length,P=J.getData("config"),A=F.x-D,w=P.orientation=="horizontal",z=(w?H:I)/M;if(w){if(F.x<D||F.x>D+I||F.y>C+H||F.y<C){return false}}else{if(F.x<D||F.x>D+I||F.y>C||F.y<C-H){return false}}for(var L=0,K=G.length;L<K;L++){var O=G[L];if(w){var N=C+z*L;if(F.x<=D+O&&F.y>=N&&F.y<=N+z){return{name:J.getData("stringArray")[L],color:J.getData("colorArray")[L],value:J.getData("valueArray")[L],label:J.name}}}else{var N=D+z*L;if(F.x>=N&&F.x<=N+z&&F.y>=C-O){return{name:J.getData("stringArray")[L],color:J.getData("colorArray")[L],value:J.getData("valueArray")[L],label:J.name}}}}return false}}});$jit.BarChart=new q({st:null,colors:["#416D9C","#70A35E","#EBB056","#C74243","#83548B","#909291","#557EAA"],selected:{},busy:false,initialize:function(y){this.controller=this.config=c.merge(n("Canvas","Margin","Label","BarChart"),{Label:{type:"Native"}},y);var z=this.config.showLabels,x=c.type(z),A=this.config.showAggregates,w=c.type(A);this.config.showLabels=x=="function"?z:c.lambda(z);this.config.showAggregates=w=="function"?A:c.lambda(A);this.initializeViz()},initializeViz:function(){var x=this.config,B=this;var w=x.type.split(":")[0],D=x.orientation=="horizontal",A={};var z=new $jit.ST({injectInto:x.injectInto,width:x.width,height:x.height,orientation:D?"left":"bottom",levelDistance:0,siblingOffset:x.barsOffset,subtreeOffset:0,withLabels:x.Label.type!="Native",useCanvas:x.useCanvas,Label:{type:x.Label.type},Node:{overridable:true,type:"barchart-"+w,align:"left",width:1,height:1},Edge:{type:"none"},Tips:{enable:x.Tips.enable,type:"Native",force:true,onShow:function(H,G,E){var F=E;x.Tips.onShow(H,F,G)}},Events:{enable:true,type:"Native",onClick:function(G,H,E){if(!x.Events.enable){return}var F=H.getContains();x.Events.onClick(F,H,E)},onMouseMove:function(G,H,E){if(!x.hoveredColor){return}if(G){var F=H.getContains();B.select(G.id,F.name,F.index)}else{B.select(false,false,false)}}},onCreateLabel:function(J,H){var P=x.Label,N=H.getData("valueArray"),M=c.reduce(N,function(Q,R){return Q+R},0);var L={wrapper:document.createElement("div"),aggregate:document.createElement("div"),label:document.createElement("div")};var E=L.wrapper,O=L.label,F=L.aggregate,G=E.style,K=O.style,I=F.style;A[H.id]=L;E.appendChild(O);E.appendChild(F);if(!x.showLabels(H.name,M,H)){K.display="none"}if(!x.showAggregates(H.name,M,H)){I.display="none"}G.position="relative";G.overflow="visible";G.fontSize=P.size+"px";G.fontFamily=P.family;G.color=P.color;G.textAlign="center";I.position=K.position="absolute";J.style.width=H.getData("width")+"px";J.style.height=H.getData("height")+"px";I.left=K.left="0px";O.innerHTML=H.name;J.appendChild(E)},onPlaceLabel:function(U,P){if(!A[P.id]){return}var T=A[P.id],G=T.wrapper.style,E=T.label.style,O=T.aggregate.style,V=x.type.split(":")[0]=="grouped",F=x.orientation=="horizontal",K=P.getData("dimArray"),I=P.getData("valueArray"),M=(V&&F)?Math.max.apply(null,K):P.getData("width"),L=(V&&!F)?Math.max.apply(null,K):P.getData("height"),J=parseInt(G.fontSize,10),N=U.style;if(K&&I){G.width=O.width=E.width=U.style.width=M+"px";for(var S=0,Q=I.length,R=0;S<Q;S++){if(K[S]>0){R+=I[S]}}if(x.showLabels(P.name,R,P)){E.display=""}else{E.display="none"}var H=x.showAggregates(P.name,R,P);if(H!==false){O.display=""}else{O.display="none"}if(x.orientation=="horizontal"){O.textAlign="right";E.textAlign="left";E.textIndex=O.textIndent=x.labelOffset+"px";O.top=E.top=(L-J)/2+"px";U.style.height=G.height=L+"px"}else{O.top=(-J-x.labelOffset)+"px";E.top=(x.labelOffset+L)+"px";U.style.top=parseInt(U.style.top,10)-L+"px";U.style.height=G.height=L+"px"}T.aggregate.innerHTML=H!==true?H:R}}});var y=z.canvas.getSize(),C=x.Margin;if(D){z.config.offsetX=y.width/2-C.left-(x.showLabels&&(x.labelOffset+x.Label.size));z.config.offsetY=(C.bottom-C.top)/2}else{z.config.offsetY=-y.height/2+C.bottom+(x.showLabels&&(x.labelOffset+x.Label.size));z.config.offsetX=(C.right-C.left)/2}this.delegate=z;this.canvas=this.delegate.canvas},loadJSON:function(K){if(this.busy){return}this.busy=true;var H=c.time(),C=[],J=this.delegate,N=c.splat(K.label),G=c.splat(K.color||this.colors),L=this.config,w=!!L.type.split(":")[1],z=L.animate,y=L.orientation=="horizontal",A=this;for(var I=0,x=K.values,E=x.length;I<E;I++){var M=x[I];var B=c.splat(x[I].values);var F=0;C.push({id:H+M.label,name:M.label,data:{value:B,"$valueArray":B,"$colorArray":G,"$stringArray":N,"$gradient":w,"$config":L},children:[]})}var D={id:H+"$root",name:"",data:{"$type":"none","$width":1,"$height":1},children:C};J.loadJSON(D);this.normalizeDims();J.compute();J.select(J.root);if(z){if(y){J.fx.animate({modes:["node-property:width:dimArray"],duration:1500,onComplete:function(){A.busy=false}})}else{J.fx.animate({modes:["node-property:height:dimArray"],duration:1500,onComplete:function(){A.busy=false}})}}else{this.busy=false}},updateJSON:function(y,C){if(this.busy){return}this.busy=true;this.select(false,false,false);var z=this.delegate;var B=z.graph;var x=y.values;var w=this.config.animate;var A=this;var D=this.config.orientation=="horizontal";c.each(x,function(E){var F=B.getByName(E.label);if(F){F.setData("valueArray",c.splat(E.values));if(y.label){F.setData("stringArray",c.splat(y.label))}}});this.normalizeDims();z.compute();z.select(z.root);if(w){if(D){z.fx.animate({modes:["node-property:width:dimArray"],duration:1500,onComplete:function(){A.busy=false;C&&C.onComplete()}})}else{z.fx.animate({modes:["node-property:height:dimArray"],duration:1500,onComplete:function(){A.busy=false;C&&C.onComplete()}})}}},select:function(y,w){if(!this.config.hoveredColor){return}var x=this.selected;if(x.id!=y||x.name!=w){x.id=y;x.name=w;x.color=this.config.hoveredColor;this.delegate.graph.eachNode(function(z){if(y==z.id){z.setData("border",x)}else{z.setData("border",false)}});this.delegate.plot()}},getLegend:function(){var y={};var z;this.delegate.graph.getNode(this.delegate.root).eachAdjacency(function(A){z=A.nodeTo});var x=z.getData("colorArray"),w=x.length;c.each(z.getData("stringArray"),function(B,A){y[B]=x[A%w]});return y},getMaxValue:function(){var x=0,w=this.config.type.split(":")[0]=="stacked";this.delegate.graph.eachNode(function(A){var y=A.getData("valueArray"),z=0;if(!y){return}if(w){c.each(y,function(B){z+=+B})}else{z=Math.max.apply(null,y)}x=x>z?x:z});return x},setBarType:function(w){this.config.type=w;this.delegate.config.Node.type="barchart-"+w.split(":")[0]},normalizeDims:function(){var G=this.delegate.graph.getNode(this.delegate.root),B=0;G.eachAdjacency(function(){B++});var D=this.getMaxValue()||1,J=this.delegate.canvas.getSize(),z=this.config,C=z.Margin,H=C.left+C.right,A=C.top+C.bottom,x=z.orientation=="horizontal",w=(J[x?"height":"width"]-(x?A:H)-(B-1)*z.barsOffset)/B,y=z.animate,I=J[x?"width":"height"]-(x?H:A)-(!x&&z.showAggregates&&(z.Label.size+z.labelOffset))-(z.showLabels&&(z.Label.size+z.labelOffset)),F=x?"height":"width",E=x?"width":"height";this.delegate.graph.eachNode(function(N){var M=0,K=[];c.each(N.getData("valueArray"),function(O){M+=+O;K.push(0)});N.setData(F,w);if(y){N.setData(E,M*I/D,"end");N.setData("dimArray",c.map(N.getData("valueArray"),function(O){return O*I/D}),"end");var L=N.getData("dimArray");if(!L){N.setData("dimArray",K)}}else{N.setData(E,M*I/D);N.setData("dimArray",c.map(N.getData("valueArray"),function(O){return O*I/D}))}})}});n.PieChart={$extend:true,animate:true,offset:25,sliceOffset:0,labelOffset:3,type:"stacked",hoveredColor:"#9fd4ff",Events:{enable:false,onClick:c.empty},Tips:{enable:false,onShow:c.empty,onHide:c.empty},showLabels:true,resizeLabels:false,updateHeights:false};g.Radial=new q({compute:function(x){var y=c.splat(x||["current","start","end"]);f.compute(this.graph,y,this.config);this.graph.computeLevels(this.root,0,"ignore");var w=this.createLevelDistanceFunc();this.computeAngularWidths(y);this.computePositions(y,w)},computePositions:function(D,A){var F=D;var E=this.graph;var B=E.getNode(this.root);var C=this.parent;var w=this.config;for(var y=0,x=F.length;y<x;y++){var z=F[y];B.setPos(k(0,0),z);B.setData("span",Math.PI*2,z)}B.angleSpan={begin:0,end:2*Math.PI};E.eachBFS(this.root,function(K){var Q=K.angleSpan.end-K.angleSpan.begin;var S=K.angleSpan.begin;var R=A(K);var T=0,G=[],J={};K.eachSubnode(function(W){T+=W._treeAngularWidth;for(var X=0,V=F.length;X<V;X++){var Z=F[X],Y=W.getData("dim",Z);J[Z]=(Z in J)?(Y>J[Z]?Y:J[Z]):Y}G.push(W)},"ignore");if(C&&C.id==K.id&&G.length>0&&G[0].dist){G.sort(function(W,V){return(W.dist>=V.dist)-(W.dist<=V.dist)})}for(var M=0,O=G.length;M<O;M++){var I=G[M];if(!I._flag){var U=I._treeAngularWidth/T*Q;var H=S+U/2;for(var N=0,L=F.length;N<L;N++){var P=F[N];I.setPos(k(H,R),P);I.setData("span",U,P);I.setData("dim-quotient",I.getData("dim",P)/J[P],P)}I.angleSpan={begin:S,end:S+U};S+=U}}},"ignore")},setAngularWidthForNodes:function(w){this.graph.eachBFS(this.root,function(z,x){var y=z.getData("angularWidth",w[0])||5;z._angularWidth=y/x},"ignore")},setSubtreesAngularWidth:function(){var w=this;this.graph.eachNode(function(x){w.setSubtreeAngularWidth(x)},"ignore")},setSubtreeAngularWidth:function(z){var y=this,x=z._angularWidth,w=0;z.eachSubnode(function(A){y.setSubtreeAngularWidth(A);w+=A._treeAngularWidth},"ignore");z._treeAngularWidth=Math.max(x,w)},computeAngularWidths:function(w){this.setAngularWidthForNodes(w);this.setSubtreesAngularWidth()}});$jit.Sunburst=new q({Implements:[d,o,g.Radial],initialize:function(w){var y=$jit.Sunburst;var x={interpolation:"linear",levelDistance:100,Node:{type:"multipie",height:0},Edge:{type:"none"},Label:{textAlign:"start",textBaseline:"middle"}};this.controller=this.config=c.merge(n("Canvas","Node","Edge","Fx","Tips","NodeStyles","Events","Navigation","Controller","Label"),x,w);var z=this.config;if(z.useCanvas){this.canvas=z.useCanvas;this.config.labelContainer=this.canvas.id+"-label"}else{if(z.background){z.background=c.merge({type:"Circles"},z.background)}this.canvas=new l(this,z);this.config.labelContainer=(typeof z.injectInto=="string"?z.injectInto:z.injectInto.id)+"-label"}this.graphOptions={klass:b,Node:{selected:false,exist:true,drawn:true}};this.graph=new e(this.graphOptions,this.config.Node,this.config.Edge);this.labels=new y.Label[z.Label.type](this);this.fx=new y.Plot(this,y);this.op=new y.Op(this);this.json=null;this.root=null;this.rotated=null;this.busy=false;this.initializeExtras()},createLevelDistanceFunc:function(){var w=this.config.levelDistance;return function(x){return(x._depth+1)*w}},refresh:function(){this.compute();this.plot()},reposition:function(){this.compute("end")},rotate:function(y,z,x){var w=y.getPos(x.property||"current").getp(true).theta;this.rotated=y;this.rotateAngle(-w,z,x)},rotateAngle:function(y,B,x){var z=this;var w=c.merge(this.config,x||{},{modes:["polar"]});var A=x.property||(B==="animate"?"end":"current");if(B==="animate"){this.fx.animation.pause()}this.graph.eachNode(function(D){var C=D.getPos(A);C.theta+=y;if(C.theta<0){C.theta+=Math.PI*2}});if(B=="animate"){this.fx.animate(w)}else{if(B=="replot"){this.fx.plot();this.busy=false}}},plot:function(){this.fx.plot()}});$jit.Sunburst.$extend=true;(function(w){w.Op=new q({Implements:e.Op});w.Plot=new q({Implements:e.Plot});w.Label={};w.Label.Native=new q({Implements:e.Label.Native,initialize:function(x){this.viz=x;this.label=x.config.Label;this.config=x.config},renderLabel:function(C,E,G){var N=E.getData("span");if(N<Math.PI/2&&Math.tan(N)*this.config.levelDistance*E._depth<10){return}var O=C.getCtx();var A=O.measureText(E.name);if(E.id==this.viz.root){var M=-A.width/2,K=0,L=0;var z=0}else{var D=5;var z=G.levelDistance-D;var J=E.pos.clone();J.rho+=D;var B=J.getp(true);var H=J.getc(true);var M=H.x,K=H.y;var F=Math.PI;var I=(B.theta>F/2&&B.theta<3*F/2);var L=I?B.theta+F:B.theta;if(I){M-=Math.abs(Math.cos(B.theta)*A.width);K+=Math.sin(B.theta)*A.width}else{if(E.id==this.viz.root){M-=A.width/2}}}O.save();O.translate(M,K);O.rotate(L);O.fillText(E.name,0,0);O.restore()}});w.Label.SVG=new q({Implements:e.Label.SVG,initialize:function(x){this.viz=x},placeLabel:function(N,C,E){var J=C.pos.getc(true),M=this.viz,A=this.viz.canvas;var F=A.getSize();var B={x:Math.round(J.x+F.width/2),y:Math.round(J.y+F.height/2)};N.setAttribute("x",B.x);N.setAttribute("y",B.y);var G=N.getBBox();if(G){var L=N.getAttribute("x");var I=N.getAttribute("y");var z=C.pos.getp(true);var D=Math.PI;var H=(z.theta>D/2&&z.theta<3*D/2);if(H){N.setAttribute("x",L-G.width);N.setAttribute("y",I-G.height)}else{if(C.id==M.root){N.setAttribute("x",L-G.width/2)}}var K=H?z.theta+D:z.theta;if(C._depth){N.setAttribute("transform","rotate("+K*360/(2*D)+" "+L+" "+I+")")}}E.onPlaceLabel(N,C)}});w.Label.HTML=new q({Implements:e.Label.HTML,initialize:function(x){this.viz=x},placeLabel:function(G,A,C){var E=A.pos.clone(),y=this.viz.canvas,F=A.getData("height"),B=((F||A._depth==0)?F:this.viz.config.levelDistance)/2,D=y.getSize();E.rho+=B;E=E.getc(true);var z={x:Math.round(E.x+D.width/2),y:Math.round(E.y+D.height/2)};var x=G.style;x.left=z.x+"px";x.top=z.y+"px";x.display=this.fitsInCanvas(z,y)?"":"none";C.onPlaceLabel(G,A)}});w.Plot.NodeTypes=new q({none:{render:c.empty,contains:c.lambda(false),anglecontains:function(B,D){var A=B.getData("span")/2,y=B.pos.theta;var z=y-A,x=y+A;if(z<0){z+=Math.PI*2}var C=Math.atan2(D.y,D.x);if(C<0){C+=Math.PI*2}if(z>x){return(C>z&&C<=Math.PI*2)||C<x}else{return C>z&&C<x}}},pie:{render:function(C,A){var G=C.getData("span")/2,z=C.pos.theta;var B=z-G,D=z+G;var F=C.pos.getp(true);var x=new b(F.rho,B);var y=x.getc(true);x.theta=D;var E=x.getc(true);var H=A.getCtx();H.beginPath();H.moveTo(0,0);H.lineTo(y.x,y.y);H.moveTo(0,0);H.lineTo(E.x,E.y);H.moveTo(0,0);H.arc(0,0,F.rho*C.getData("dim-quotient"),B,D,false);H.fill()},contains:function(z,B){if(this.nodeTypes.none.anglecontains.call(this,z,B)){var x=Math.sqrt(B.x*B.x+B.y*B.y);var y=this.config.levelDistance,A=z._depth;return(x<=y*A)}return false}},multipie:{render:function(D,B){var K=D.getData("height");var E=K?K:this.config.levelDistance;var J=D.getData("span")/2,A=D.pos.theta;var C=A-J,G=A+J;var I=D.pos.getp(true);var y=new b(I.rho,C);var z=y.getc(true);y.theta=G;var H=y.getc(true);y.rho+=E;var x=y.getc(true);y.theta=C;var F=y.getc(true);var L=B.getCtx();L.moveTo(0,0);L.beginPath();L.arc(0,0,I.rho,C,G,false);L.arc(0,0,I.rho+E,G,C,true);L.moveTo(z.x,z.y);L.lineTo(F.x,F.y);L.moveTo(H.x,H.y);L.lineTo(x.x,x.y);L.fill();if(D.collapsed){L.save();L.lineWidth=2;L.moveTo(0,0);L.beginPath();L.arc(0,0,I.rho+E+5,G-0.01,C+0.01,true);L.stroke();L.restore()}},contains:function(A,D){if(this.nodeTypes.none.anglecontains.call(this,A,D)){var y=Math.sqrt(D.x*D.x+D.y*D.y);var x=A.getData("height");var B=x?x:this.config.levelDistance;var z=this.config.levelDistance,C=A._depth;return(y>=z*C)&&(y<=(z*C+B))}return false}},"gradient-multipie":{render:function(A,x){var F=x.getCtx();var E=A.getData("height");var B=E?E:this.config.levelDistance;var y=F.createRadialGradient(0,0,A.getPos().rho,0,0,A.getPos().rho+B);var D=c.hexToRgb(A.getData("color")),C=[];c.each(D,function(G){C.push(parseInt(G*0.5,10))});var z=c.rgbToHex(C);y.addColorStop(0,z);y.addColorStop(1,A.getData("color"));F.fillStyle=y;this.nodeTypes.multipie.render.call(this,A,x)},contains:function(x,y){return this.nodeTypes.multipie.contains.call(this,x,y)}},"gradient-pie":{render:function(C,z){var x=z.getCtx();var D=x.createRadialGradient(0,0,0,0,0,C.getPos().rho);var B=c.hexToRgb(C.getData("color")),y=[];c.each(B,function(E){y.push(parseInt(E*0.5,10))});var A=c.rgbToHex(y);D.addColorStop(1,A);D.addColorStop(0,C.getData("color"));x.fillStyle=D;this.nodeTypes.pie.render.call(this,C,z)},contains:function(x,y){return this.nodeTypes.pie.contains.call(this,x,y)}}});w.Plot.EdgeTypes=new q({none:c.empty,line:{render:function(x,y){var A=x.nodeFrom.pos.getc(true),z=x.nodeTo.pos.getc(true);this.edgeHelper.line.render(A,z,y)},contains:function(x,A){var z=x.nodeFrom.pos.getc(true),y=x.nodeTo.pos.getc(true);return this.edgeHelper.line.contains(z,y,A,this.edge.epsilon)}},arrow:{render:function(y,z){var D=y.nodeFrom.pos.getc(true),C=y.nodeTo.pos.getc(true),B=y.getData("dim"),A=y.data.$direction,x=(A&&A.length>1&&A[0]!=y.nodeFrom.id);this.edgeHelper.arrow.render(D,C,B,x,z)},contains:function(x,A){var z=x.nodeFrom.pos.getc(true),y=x.nodeTo.pos.getc(true);return this.edgeHelper.arrow.contains(z,y,A,this.edge.epsilon)}},hyperline:{render:function(x,y){var B=x.nodeFrom.pos.getc(),A=x.nodeTo.pos.getc(),z=Math.max(B.norm(),A.norm());this.edgeHelper.hyperline.render(B.$scale(1/z),A.$scale(1/z),z,y)},contains:c.lambda(false)}})})($jit.Sunburst);$jit.Sunburst.Plot.NodeTypes.implement({"piechart-stacked":{render:function(U,A){var T=U.pos.getp(true),C=U.getData("dimArray"),S=U.getData("valueArray"),G=U.getData("colorArray"),z=G.length,M=U.getData("stringArray"),P=U.getData("span")/2,K=U.pos.theta,F=K-P,J=K+P,R=new b;var N=A.getCtx(),L={},I=U.getData("gradient"),D=U.getData("border"),Z=U.getData("config"),ai=Z.showLabels,Y=Z.resizeLabels,ab=Z.Label;var ae=Z.sliceOffset*Math.cos((F+J)/2);var E=Z.sliceOffset*Math.sin((F+J)/2);if(G&&C&&M){for(var af=0,ac=C.length,w=0,X=0;af<ac;af++){var B=C[af],ag=G[af%z];if(B<=0){continue}N.fillStyle=N.strokeStyle=ag;if(I&&B){var ad=N.createRadialGradient(ae,E,w+Z.sliceOffset,ae,E,w+B+Z.sliceOffset);var x=c.hexToRgb(ag),W=c.map(x,function(al){return(al*0.8)>>0}),y=c.rgbToHex(W);ad.addColorStop(0,ag);ad.addColorStop(0.5,ag);ad.addColorStop(1,y);N.fillStyle=ad}R.rho=w+Z.sliceOffset;R.theta=F;var ah=R.getc(true);R.theta=J;var O=R.getc(true);R.rho+=B;var aj=R.getc(true);R.theta=F;var Q=R.getc(true);N.beginPath();N.arc(ae,E,w+0.01,F,J,false);N.arc(ae,E,w+B+0.01,J,F,true);N.fill();if(D&&D.name==M[af]){L.acum=w;L.dimValue=C[af];L.begin=F;L.end=J}w+=(B||0);X+=(S[af]||0)}if(D){N.save();N.globalCompositeOperation="source-over";N.lineWidth=2;N.strokeStyle=D.color;var aa=F<J?1:-1;N.beginPath();N.arc(ae,E,L.acum+0.01+1,L.begin,L.end,false);N.arc(ae,E,L.acum+L.dimValue+0.01-1,L.end,L.begin,true);N.closePath();N.stroke();N.restore()}if(ai&&ab.type=="Native"){N.save();N.fillStyle=N.strokeStyle=ab.color;var V=Y?U.getData("normalizedDim"):1,H=(ab.size*V)>>0;H=H<+Y?+Y:H;N.font=ab.style+" "+H+"px "+ab.family;N.textBaseline="middle";N.textAlign="center";R.rho=w+Z.labelOffset+Z.sliceOffset;R.theta=U.pos.theta;var ak=R.getc(true);N.fillText(U.name,ak.x,ak.y);N.restore()}}},contains:function(z,D){if(this.nodeTypes.none.anglecontains.call(this,z,D)){var F=Math.sqrt(D.x*D.x+D.y*D.y);var w=this.config.levelDistance,C=z._depth;var x=z.getData("config");if(F<=w*C+x.sliceOffset){var G=z.getData("dimArray");for(var B=0,A=G.length,E=x.sliceOffset;B<A;B++){var y=G[B];if(F>=E&&F<=E+y){return{name:z.getData("stringArray")[B],color:z.getData("colorArray")[B],value:z.getData("valueArray")[B],label:z.name}}E+=y}}return false}return false}}});$jit.PieChart=new q({sb:null,colors:["#416D9C","#70A35E","#EBB056","#C74243","#83548B","#909291","#557EAA"],selected:{},busy:false,initialize:function(w){this.controller=this.config=c.merge(n("Canvas","PieChart","Label"),{Label:{type:"Native"}},w);this.initializeViz()},initializeViz:function(){var x=this.config,B=this;var w=x.type.split(":")[0];var A=new $jit.Sunburst({injectInto:x.injectInto,width:x.width,height:x.height,useCanvas:x.useCanvas,withLabels:x.Label.type!="Native",Label:{type:x.Label.type},Node:{overridable:true,type:"piechart-"+w,width:1,height:1},Edge:{type:"none"},Tips:{enable:x.Tips.enable,type:"Native",force:true,onShow:function(F,E,C){var D=C;x.Tips.onShow(F,D,E)}},Events:{enable:true,type:"Native",onClick:function(E,F,C){if(!x.Events.enable){return}var D=F.getContains();x.Events.onClick(D,F,C)},onMouseMove:function(E,F,C){if(!x.hoveredColor){return}if(E){var D=F.getContains();B.select(E.id,D.name,D.index)}else{B.select(false,false,false)}}},onCreateLabel:function(F,E){var C=x.Label;if(x.showLabels){var D=F.style;D.fontSize=C.size+"px";D.fontFamily=C.family;D.color=C.color;D.textAlign="center";F.innerHTML=E.name}},onPlaceLabel:function(S,M){if(!x.showLabels){return}var G=M.pos.getp(true),J=M.getData("dimArray"),P=M.getData("span")/2,H=M.pos.theta,R=H-P,D=H+P,U=new b;var L=x.showLabels,F=x.resizeLabels,I=x.Label;if(J){for(var Q=0,N=J.length,O=0;Q<N;Q++){O+=J[Q]}var T=F?M.getData("normalizedDim"):1,C=(I.size*T)>>0;C=C<+F?+F:C;S.style.fontSize=C+"px";U.rho=O+x.labelOffset+x.sliceOffset;U.theta=(R+D)/2;var G=U.getc(true);var E=B.canvas.getSize();var K={x:Math.round(G.x+E.width/2),y:Math.round(G.y+E.height/2)};S.style.left=K.x+"px";S.style.top=K.y+"px"}}});var z=A.canvas.getSize(),y=Math.min;A.config.levelDistance=y(z.width,z.height)/2-x.offset-x.sliceOffset;this.delegate=A;this.canvas=this.delegate.canvas;this.canvas.getCtx().globalCompositeOperation="lighter"},loadJSON:function(K){var H=c.time(),B=[],J=this.delegate,N=c.splat(K.label),D=N.length,G=c.splat(K.color||this.colors),y=G.length,L=this.config,w=!!L.type.split(":")[1],z=L.animate,F=D==1;for(var I=0,x=K.values,E=x.length;I<E;I++){var M=x[I];var A=c.splat(M.values);B.push({id:H+M.label,name:M.label,data:{value:A,"$valueArray":A,"$colorArray":F?c.splat(G[I%y]):G,"$stringArray":N,"$gradient":w,"$config":L,"$angularWidth":c.reduce(A,function(O,P){return O+P})},children:[]})}var C={id:H+"$root",name:"",data:{"$type":"none","$width":1,"$height":1},children:B};J.loadJSON(C);this.normalizeDims();J.refresh();if(z){J.fx.animate({modes:["node-property:dimArray"],duration:1500})}},updateJSON:function(y,C){if(this.busy){return}this.busy=true;var z=this.delegate;var B=z.graph;var x=y.values;var w=this.config.animate;var A=this;c.each(x,function(D){var F=B.getByName(D.label),E=c.splat(D.values);if(F){F.setData("valueArray",E);F.setData("angularWidth",c.reduce(E,function(G,H){return G+H}));if(y.label){F.setData("stringArray",c.splat(y.label))}}});this.normalizeDims();if(w){z.compute("end");z.fx.animate({modes:["node-property:dimArray:span","linear"],duration:1500,onComplete:function(){A.busy=false;C&&C.onComplete()}})}else{z.refresh()}},select:function(y,w){if(!this.config.hoveredColor){return}var x=this.selected;if(x.id!=y||x.name!=w){x.id=y;x.name=w;x.color=this.config.hoveredColor;this.delegate.graph.eachNode(function(z){if(y==z.id){z.setData("border",x)}else{z.setData("border",false)}});this.delegate.plot()}},getLegend:function(){var y={};var z;this.delegate.graph.getNode(this.delegate.root).eachAdjacency(function(A){z=A.nodeTo});var x=z.getData("colorArray"),w=x.length;c.each(z.getData("stringArray"),function(B,A){y[B]=x[A%w]});return y},getMaxValue:function(){var w=0;this.delegate.graph.eachNode(function(z){var x=z.getData("valueArray"),y=0;c.each(x,function(A){y+=+A});w=w>y?w:y});return w},normalizeDims:function(){var x=this.delegate.graph.getNode(this.delegate.root),w=0;x.eachAdjacency(function(){w++});var B=this.getMaxValue()||1,A=this.config,y=A.animate,z=this.delegate.config.levelDistance;this.delegate.graph.eachNode(function(G){var F=0,C=[];c.each(G.getData("valueArray"),function(H){F+=+H;C.push(1)});var E=(C.length==1)&&!A.updateHeights;if(y){G.setData("dimArray",c.map(G.getData("valueArray"),function(H){return E?z:(H*z/B)}),"end");var D=G.getData("dimArray");if(!D){G.setData("dimArray",C)}}else{G.setData("dimArray",c.map(G.getData("valueArray"),function(H){return E?z:(H*z/B)}))}G.setData("normalizedDim",F/B)})}});g.TM={};g.TM.SliceAndDice=new q({compute:function(B){var x=this.graph.getNode(this.clickedNode&&this.clickedNode.id||this.root);this.controller.onBeforeCompute(x);var z=this.canvas.getSize(),y=this.config,A=z.width,w=z.height;this.graph.computeLevels(this.root,0,"ignore");x.getPos(B).setc(-A/2,-w/2);x.setData("width",A,B);x.setData("height",w+y.titleHeight,B);this.computePositions(x,x,this.layout.orientation,B);this.controller.onAfterCompute(x)},computePositions:function(F,D,P,y){var M=0;F.eachSubnode(function(R){M+=R.getData("area",y)});var Q=this.config,N=Q.offset,J=F.getData("width",y),H=Math.max(F.getData("height",y)-Q.titleHeight,0),x=F==D?1:(D.getData("area",y)/M);var I,G,L,B,A,E,C;var O=(P=="h");if(O){P="v";I=H;G=J*x;L="height";B="y";A="x";E=Q.titleHeight;C=0}else{P="h";I=H*x;G=J;L="width";B="x";A="y";E=0;C=Q.titleHeight}var w=D.getPos(y);D.setData("width",G,y);D.setData("height",I,y);var K=0,z=this;D.eachSubnode(function(S){var R=S.getPos(y);R[B]=K+w[B]+E;R[A]=w[A]+C;z.computePositions(D,S,P,y);K+=S.getData(L,y)})}});g.TM.Area={compute:function(w){w=w||"current";var C=this.graph.getNode(this.clickedNode&&this.clickedNode.id||this.root);this.controller.onBeforeCompute(C);var y=this.config,F=this.canvas.getSize(),x=F.width,E=F.height,D=y.offset,z=x-D,B=E-D;this.graph.computeLevels(this.root,0,"ignore");C.getPos(w).setc(-x/2,-E/2);C.setData("width",x,w);C.setData("height",E,w);var A={top:-E/2+y.titleHeight,left:-x/2,width:z,height:B-y.titleHeight};this.computePositions(C,A,w);this.controller.onAfterCompute(C)},computeDim:function(B,C,E,A,z,x){if(B.length+C.length==1){var y=(B.length==1)?B:C;this.layoutLast(y,E,A,x);return}if(B.length>=2&&C.length==0){C=[B.shift()]}if(B.length==0){if(C.length>0){this.layoutRow(C,E,A,x)}return}var D=B[0];if(z(C,E)>=z([D].concat(C),E)){this.computeDim(B.slice(1),C.concat([D]),E,A,z,x)}else{var F=this.layoutRow(C,E,A,x);this.computeDim(B,[],F.dim,F,z,x)}},worstAspectRatio:function(x,F){if(!x||x.length==0){return Number.MAX_VALUE}var y=0,G=0,B=Number.MAX_VALUE;for(var D=0,C=x.length;D<C;D++){var z=x[D]._area;y+=z;B=B<z?B:z;G=G>z?G:z}var E=F*F,A=y*y;return Math.max(E*G/A,A/(E*B))},avgAspectRatio:function(B,y){if(!B||B.length==0){return Number.MAX_VALUE}var D=0;for(var z=0,x=B.length;z<x;z++){var C=B[z]._area;var A=C/y;D+=y>A?y/A:A/y}return D/x},layoutLast:function(y,x,B,A){var z=y[0];z.getPos(A).setc(B.left,B.top);z.setData("width",B.width,A);z.setData("height",B.height,A)}};g.TM.Squarified=new q({Implements:g.TM.Area,computePositions:function(A,D,x){var z=this.config,F=Math.max;if(D.width>=D.height){this.layout.orientation="h"}else{this.layout.orientation="v"}var w=A.getSubnodes([1,1],"ignore");if(w.length>0){this.processChildrenLayout(A,w,D,x);for(var C=0,B=w.length;C<B;C++){var G=w[C],H=z.offset,I=F(G.getData("height",x)-H-z.titleHeight,0),y=F(G.getData("width",x)-H,0),E=G.getPos(x);D={width:y,height:I,top:E.y+z.titleHeight,left:E.x};this.computePositions(G,D,x)}}},processChildrenLayout:function(G,w,C,x){var A=C.width*C.height;var B,y=w.length,D=0,H=[];for(B=0;B<y;B++){H[B]=parseFloat(w[B].getData("area",x));D+=H[B]}for(B=0;B<y;B++){w[B]._area=A*H[B]/D}var z=this.layout.horizontal()?C.height:C.width;w.sort(function(J,I){var K=I._area-J._area;return K?K:(I.id==J.id?0:(I.id<J.id?1:-1))});var F=[w[0]];var E=w.slice(1);this.squarify(E,F,z,C,x)},squarify:function(y,B,x,A,z){this.computeDim(y,B,x,A,this.worstAspectRatio,z)},layoutRow:function(y,x,A,z){if(this.layout.horizontal()){return this.layoutV(y,x,A,z)}else{return this.layoutH(y,x,A,z)}},layoutV:function(x,I,E,y){var J=0,A=function(w){return w};c.each(x,function(w){J+=w._area});var z=A(J/I),F=0;for(var C=0,B=x.length;C<B;C++){var D=A(x[C]._area/z);var G=x[C];G.getPos(y).setc(E.left,E.top+F);G.setData("width",z,y);G.setData("height",D,y);F+=D}var H={height:E.height,width:E.width-z,top:E.top,left:E.left+z};H.dim=Math.min(H.width,H.height);if(H.dim!=H.height){this.layout.change()}return H},layoutH:function(x,G,C,y){var I=0;c.each(x,function(w){I+=w._area});var H=I/G,D=C.top,z=0;for(var B=0,A=x.length;B<A;B++){var E=x[B];var G=E._area/H;E.getPos(y).setc(C.left+z,D);E.setData("width",G,y);E.setData("height",H,y);z+=G}var F={height:C.height-H,width:C.width,top:C.top+H,left:C.left};F.dim=Math.min(F.width,F.height);if(F.dim!=F.width){this.layout.change()}return F}});g.TM.Strip=new q({Implements:g.TM.Area,computePositions:function(A,D,x){var w=A.getSubnodes([1,1],"ignore"),z=this.config,F=Math.max;if(w.length>0){this.processChildrenLayout(A,w,D,x);for(var C=0,B=w.length;C<B;C++){var G=w[C];var H=z.offset,I=F(G.getData("height",x)-H-z.titleHeight,0),y=F(G.getData("width",x)-H,0);var E=G.getPos(x);D={width:y,height:I,top:E.y+z.titleHeight,left:E.x};this.computePositions(G,D,x)}}},processChildrenLayout:function(G,w,B,x){var z=B.width*B.height;var A,y=w.length,C=0,H=[];for(A=0;A<y;A++){H[A]=+w[A].getData("area",x);C+=H[A]}for(A=0;A<y;A++){w[A]._area=z*H[A]/C}var F=this.layout.horizontal()?B.width:B.height;var E=[w[0]];var D=w.slice(1);this.stripify(D,E,F,B,x)},stripify:function(y,B,x,A,z){this.computeDim(y,B,x,A,this.avgAspectRatio,z)},layoutRow:function(y,x,A,z){if(this.layout.horizontal()){return this.layoutH(y,x,A,z)}else{return this.layoutV(y,x,A,z)}},layoutV:function(x,G,D,y){var H=0;c.each(x,function(w){H+=w._area});var z=H/G,E=0;for(var B=0,A=x.length;B<A;B++){var F=x[B];var C=F._area/z;F.getPos(y).setc(D.left,D.top+(G-C-E));F.setData("width",z,y);F.setData("height",C,y);E+=C}return{height:D.height,width:D.width-z,top:D.top,left:D.left+z,dim:G}},layoutH:function(x,F,C,y){var H=0;c.each(x,function(w){H+=w._area});var G=H/F,D=C.height-G,z=0;for(var B=0,A=x.length;B<A;B++){var E=x[B];var I=E._area/G;E.getPos(y).setc(C.left+z,C.top+D);E.setData("width",I,y);E.setData("height",G,y);z+=I}return{height:C.height-G,width:C.width,top:C.top,left:C.left,dim:F}}});g.Icicle=new q({compute:function(E){E=E||"current";var D=this.graph.getNode(this.root),z=this.config,H=this.canvas.getSize(),w=H.width,G=H.height,A=z.offset,C=z.constrained?z.levelsToShow:Number.MAX_VALUE;this.controller.onBeforeCompute(D);e.Util.computeLevels(this.graph,D.id,0,"ignore");var F=0;e.Util.eachLevel(D,0,false,function(J,I){if(I>F){F=I}});var y=this.graph.getNode(this.clickedNode&&this.clickedNode.id||D.id);var x=Math.min(F,C-1);var B=y._depth;if(this.layout.horizontal()){this.computeSubtree(y,-w/2,-G/2,w/(x+1),G,B,x,E)}else{this.computeSubtree(y,-w/2,-G/2,w,G/(x+1),B,x,E)}},computeSubtree:function(G,I,F,w,L,E,A,H){G.getPos(H).setc(I,F);G.setData("width",w,H);G.setData("height",L,H);var C,K=0,J=0;var z=e.Util.getSubnodes(G,[1,1],"ignore");if(!z.length){return}c.each(z,function(x){J+=x.getData("dim")});for(var D=0,B=z.length;D<B;D++){if(this.layout.horizontal()){C=L*z[D].getData("dim")/J;this.computeSubtree(z[D],I+w,F,w,C,E,A,H);F+=C}else{C=w*z[D].getData("dim")/J;this.computeSubtree(z[D],I,F+L,C,L,E,A,H);I+=C}}}});$jit.Icicle=new q({Implements:[d,o,g.Icicle],layout:{orientation:"h",vertical:function(){return this.orientation=="v"},horizontal:function(){return this.orientation=="h"},change:function(){this.orientation=this.vertical()?"h":"v"}},initialize:function(w){var x={animate:false,orientation:"h",offset:2,levelsToShow:Number.MAX_VALUE,constrained:false,Node:{type:"rectangle",overridable:true},Edge:{type:"none"},Label:{type:"Native"},duration:700,fps:45};var z=n("Canvas","Node","Edge","Fx","Tips","NodeStyles","Events","Navigation","Controller","Label");this.controller=this.config=c.merge(z,x,w);this.layout.orientation=this.config.orientation;var y=this.config;if(y.useCanvas){this.canvas=y.useCanvas;this.config.labelContainer=this.canvas.id+"-label"}else{this.canvas=new l(this,y);this.config.labelContainer=(typeof y.injectInto=="string"?y.injectInto:y.injectInto.id)+"-label"}this.graphOptions={klass:p,Node:{selected:false,exist:true,drawn:true}};this.graph=new e(this.graphOptions,this.config.Node,this.config.Edge,this.config.Label);this.labels=new $jit.Icicle.Label[this.config.Label.type](this);this.fx=new $jit.Icicle.Plot(this,$jit.Icicle);this.op=new $jit.Icicle.Op(this);this.group=new $jit.Icicle.Group(this);this.clickedNode=null;this.initializeExtras()},refresh:function(){var w=this.config.Label.type;if(w!="Native"){var x=this;this.graph.eachNode(function(y){x.labels.hideLabel(y,false)})}this.compute();this.plot()},plot:function(){this.fx.plot(this.config)},enter:function(y){if(this.busy){return}this.busy=true;var x=this,w=this.config;var z={onComplete:function(){if(w.request){x.compute()}if(w.animate){x.graph.nodeList.setDataset(["current","end"],{alpha:[1,0]});e.Util.eachSubgraph(y,function(A){A.setData("alpha",1,"end")},"ignore");x.fx.animate({duration:500,modes:["node-property:alpha"],onComplete:function(){x.clickedNode=y;x.compute("end");x.fx.animate({modes:["linear","node-property:width:height"],duration:1000,onComplete:function(){x.busy=false;x.clickedNode=y}})}})}else{x.clickedNode=y;x.busy=false;x.refresh()}}};if(w.request){this.requestNodes(clickedNode,z)}else{z.onComplete()}},out:function(){if(this.busy){return}var B=this,A=e.Util,y=this.config,D=this.graph,x=A.getParents(D.getNode(this.clickedNode&&this.clickedNode.id||this.root)),z=x[0],w=z,C=this.clickedNode;this.busy=true;this.events.hoveredNode=false;if(!z){this.busy=false;return}callback={onComplete:function(){B.clickedNode=z;if(y.request){B.requestNodes(z,{onComplete:function(){B.compute();B.plot();B.busy=false}})}else{B.compute();B.plot();B.busy=false}}};if(y.animate){this.clickedNode=w;this.compute("end");this.clickedNode=C;this.fx.animate({modes:["linear","node-property:width:height"],duration:1000,onComplete:function(){B.clickedNode=w;D.nodeList.setDataset(["current","end"],{alpha:[0,1]});A.eachSubgraph(C,function(E){E.setData("alpha",1)},"ignore");B.fx.animate({duration:500,modes:["node-property:alpha"],onComplete:function(){callback.onComplete()}})}})}else{callback.onComplete()}},requestNodes:function(y,z){var x=c.merge(this.controller,z),w=this.config.constrained?this.config.levelsToShow:Number.MAX_VALUE;if(x.request){var B=[],A=y._depth;e.Util.eachLevel(y,0,w,function(C){if(C.drawn&&!e.Util.anySubnode(C)){B.push(C);C._level=C._depth-A;if(this.config.constrained){C._level=w-C._level}}});this.group.requestNodes(B,x)}else{x.onComplete()}}});$jit.Icicle.Op=new q({Implements:e.Op});$jit.Icicle.Group=new q({initialize:function(w){this.viz=w;this.canvas=w.canvas;this.config=w.config},requestNodes:function(B,A){var z=0,x=B.length,D={};var y=function(){A.onComplete()};var w=this.viz;if(x==0){y()}for(var C=0;C<x;C++){D[B[C].id]=B[C];A.request(B[C].id,B[C]._level,{onComplete:function(F,E){if(E&&E.children){E.id=F;w.op.sum(E,{type:"nothing"})}if(++z==x){e.Util.computeLevels(w.graph,w.root,0);y()}}})}}});$jit.Icicle.Plot=new q({Implements:e.Plot,plot:function(A,y){A=A||this.viz.controller;var w=this.viz,B=w.graph,x=B.getNode(w.clickedNode&&w.clickedNode.id||w.root),z=x._depth;w.canvas.clear();this.plotTree(x,c.merge(A,{withLabels:true,hideLabels:false,plotSubtree:function(C,D){return !w.config.constrained||(D._depth-z<w.config.levelsToShow)}}),y)}});$jit.Icicle.Label={};$jit.Icicle.Label.Native=new q({Implements:e.Label.Native,renderLabel:function(x,y,A){var D=x.getCtx(),w=y.getData("width"),C=y.getData("height"),E=y.getLabelData("size"),z=D.measureText(y.name);if(C<(E*1.5)||w<z.width){return}var B=y.pos.getc(true);D.fillText(y.name,B.x+w/2,B.y+C/2)}});$jit.Icicle.Label.SVG=new q({Implements:e.Label.SVG,initialize:function(w){this.viz=w},placeLabel:function(x,A,y){var C=A.pos.getc(true),z=this.viz.canvas;var w=z.getSize();var B={x:Math.round(C.x+w.width/2),y:Math.round(C.y+w.height/2)};x.setAttribute("x",B.x);x.setAttribute("y",B.y);y.onPlaceLabel(x,A)}});$jit.Icicle.Label.HTML=new q({Implements:e.Label.HTML,initialize:function(w){this.viz=w},placeLabel:function(x,B,y){var D=B.pos.getc(true),z=this.viz.canvas;var w=z.getSize();var C={x:Math.round(D.x+w.width/2),y:Math.round(D.y+w.height/2)};var A=x.style;A.left=C.x+"px";A.top=C.y+"px";A.display="";y.onPlaceLabel(x,B)}});$jit.Icicle.Plot.NodeTypes=new q({none:{render:c.empty},rectangle:{render:function(z,x,K){var y=this.viz.config;var C=y.offset;var w=z.getData("width");var H=z.getData("height");var B=z.getData("border");var G=z.pos.getc(true);var F=G.x+C/2,D=G.y+C/2;var J=x.getCtx();if(w-C<2||H-C<2){return}if(y.cushion){var A=z.getData("color");var I=J.createRadialGradient(F+(w-C)/2,D+(H-C)/2,1,F+(w-C)/2,D+(H-C)/2,w<H?H:w);var E=c.rgbToHex(c.map(c.hexToRgb(A),function(L){return L*0.3>>0}));I.addColorStop(0,A);I.addColorStop(1,E);J.fillStyle=I}if(B){J.strokeStyle=B;J.lineWidth=3}J.fillRect(F,D,Math.max(0,w-C),Math.max(0,H-C));B&&J.strokeRect(G.x,G.y,w,H)},contains:function(y,A){if(this.viz.clickedNode&&!$jit.Graph.Util.isDescendantOf(y,this.viz.clickedNode.id)){return false}var z=y.pos.getc(true),x=y.getData("width"),w=y.getData("height");return this.nodeHelper.rectangle.contains({x:z.x+x/2,y:z.y+w/2},A,x,w)}}});$jit.Icicle.Plot.EdgeTypes=new q({none:c.empty});g.ForceDirected=new q({getOptions:function(D){var B=this.canvas.getSize();var y=B.width,A=B.height;var C=0;this.graph.eachNode(function(w){C++});var E=y*A/C,z=Math.sqrt(E);var x=this.config.levelDistance;return{width:y,height:A,tstart:y*0.1,nodef:function(w){return E/(w||1)},edgef:function(w){return z*(w-x)}}},compute:function(x,y){var z=c.splat(x||["current","start","end"]);var w=this.getOptions();f.compute(this.graph,z,this.config);this.graph.computeLevels(this.root,0,"ignore");this.graph.eachNode(function(A){c.each(z,function(B){var C=A.getPos(B);if(C.equals(p.KER)){C.x=w.width/5*(Math.random()-0.5);C.y=w.height/5*(Math.random()-0.5)}A.disp={};c.each(z,function(D){A.disp[D]=r(0,0)})})});this.computePositions(z,w,y)},computePositions:function(A,y,B){var C=this.config.iterations,x=0,z=this;if(B){(function w(){for(var E=B.iter,D=0;D<E;D++){y.t=y.tstart;if(C){y.t*=(1-x++/(C-1))}z.computePositionStep(A,y);if(C&&x>=C){B.onComplete();return}}B.onStep(Math.round(x/(C-1)*100));setTimeout(w,1)})()}else{for(;x<C;x++){y.t=y.tstart*(1-x/(C-1));this.computePositionStep(A,y)}}},computePositionStep:function(D,w){var E=this.graph;var y=Math.min,C=Math.max;var B=r(0,0);E.eachNode(function(G){c.each(D,function(H){G.disp[H].x=0;G.disp[H].y=0});E.eachNode(function(H){if(H.id!=G.id){c.each(D,function(L){var J=G.getPos(L),I=H.getPos(L);B.x=J.x-I.x;B.y=J.y-I.y;var K=B.norm()||1;G.disp[L].$add(B.$scale(w.nodef(K)/K))})}})});var x=!!E.getNode(this.root).visited;E.eachNode(function(G){G.eachAdjacency(function(H){var I=H.nodeTo;if(!!I.visited===x){c.each(D,function(M){var K=G.getPos(M),J=I.getPos(M);B.x=K.x-J.x;B.y=K.y-J.y;var L=B.norm()||1;G.disp[M].$add(B.$scale(-w.edgef(L)/L));I.disp[M].$add(B.$scale(-1))})}});G.visited=!x});var F=w.t,z=w.width/2,A=w.height/2;E.eachNode(function(G){c.each(D,function(J){var H=G.disp[J];var I=H.norm()||1;var J=G.getPos(J);J.$add(r(H.x*y(Math.abs(H.x),F)/I,H.y*y(Math.abs(H.y),F)/I));J.x=y(z,C(-z,J.x));J.y=y(A,C(-A,J.y))})})}});$jit.ForceDirected=new q({Implements:[d,o,g.ForceDirected],initialize:function(x){var w=$jit.ForceDirected;var y={iterations:50,levelDistance:50};this.controller=this.config=c.merge(n("Canvas","Node","Edge","Fx","Tips","NodeStyles","Events","Navigation","Controller","Label"),y,x);var z=this.config;if(z.useCanvas){this.canvas=z.useCanvas;this.config.labelContainer=this.canvas.id+"-label"}else{if(z.background){z.background=c.merge({type:"Circles"},z.background)}this.canvas=new l(this,z);this.config.labelContainer=(typeof z.injectInto=="string"?z.injectInto:z.injectInto.id)+"-label"}this.graphOptions={klass:p,Node:{selected:false,exist:true,drawn:true}};this.graph=new e(this.graphOptions,this.config.Node,this.config.Edge);this.labels=new w.Label[z.Label.type](this);this.fx=new w.Plot(this,w);this.op=new w.Op(this);this.json=null;this.busy=false;this.initializeExtras()},refresh:function(){this.compute();this.plot()},reposition:function(){this.compute("end")},computeIncremental:function(w){w=c.merge({iter:20,property:"end",onStep:c.empty,onComplete:c.empty},w||{});this.config.onBeforeCompute(this.graph.getNode(this.root));this.compute(w.property,w)},plot:function(){this.fx.plot()},animate:function(w){this.fx.animate(c.merge({modes:["linear"]},w||{}))}});$jit.ForceDirected.$extend=true;(function(w){w.Op=new q({Implements:e.Op});w.Plot=new q({Implements:e.Plot});w.Label={};w.Label.Native=new q({Implements:e.Label.Native});w.Label.SVG=new q({Implements:e.Label.SVG,initialize:function(x){this.viz=x},placeLabel:function(H,B,C){var F=B.pos.getc(true),y=this.viz.canvas,z=y.translateOffsetX,x=y.translateOffsetY,G=y.scaleOffsetX,E=y.scaleOffsetY,D=y.getSize();var A={x:Math.round(F.x*G+z+D.width/2),y:Math.round(F.y*E+x+D.height/2)};H.setAttribute("x",A.x);H.setAttribute("y",A.y);C.onPlaceLabel(H,B)}});w.Label.HTML=new q({Implements:e.Label.HTML,initialize:function(x){this.viz=x},placeLabel:function(I,C,D){var G=C.pos.getc(true),z=this.viz.canvas,A=z.translateOffsetX,y=z.translateOffsetY,H=z.scaleOffsetX,F=z.scaleOffsetY,E=z.getSize();var B={x:Math.round(G.x*H+A+E.width/2),y:Math.round(G.y*F+y+E.height/2)};var x=I.style;x.left=B.x+"px";x.top=B.y+"px";x.display=this.fitsInCanvas(B,z)?"":"none";D.onPlaceLabel(I,C)}});w.Plot.NodeTypes=new q({none:{render:c.empty,contains:c.lambda(false)},circle:{render:function(y,x){var A=y.pos.getc(true),z=y.getData("dim");this.nodeHelper.circle.render("fill",A,z,x)},contains:function(x,A){var z=x.pos.getc(true),y=x.getData("dim");return this.nodeHelper.circle.contains(z,A,y)}},ellipse:{render:function(A,y){var B=A.pos.getc(true),z=A.getData("width"),x=A.getData("height");this.nodeHelper.ellipse.render("fill",B,z,x,y)},contains:function(z,B){var A=z.pos.getc(true),y=z.getData("width"),x=z.getData("height");return this.nodeHelper.ellipse.contains(A,B,y,x)}},square:{render:function(y,x){var A=y.pos.getc(true),z=y.getData("dim");this.nodeHelper.square.render("fill",A,z,x)},contains:function(x,A){var z=x.pos.getc(true),y=x.getData("dim");return this.nodeHelper.square.contains(z,A,y)}},rectangle:{render:function(A,y){var B=A.pos.getc(true),z=A.getData("width"),x=A.getData("height");this.nodeHelper.rectangle.render("fill",B,z,x,y)},contains:function(z,B){var A=z.pos.getc(true),y=z.getData("width"),x=z.getData("height");return this.nodeHelper.rectangle.contains(A,B,y,x)}},triangle:{render:function(y,x){var A=y.pos.getc(true),z=y.getData("dim");this.nodeHelper.triangle.render("fill",A,z,x)},contains:function(x,A){var z=x.pos.getc(true),y=x.getData("dim");return this.nodeHelper.triangle.contains(z,A,y)}},star:{render:function(y,x){var A=y.pos.getc(true),z=y.getData("dim");this.nodeHelper.star.render("fill",A,z,x)},contains:function(x,A){var z=x.pos.getc(true),y=x.getData("dim");return this.nodeHelper.star.contains(z,A,y)}}});w.Plot.EdgeTypes=new q({none:c.empty,line:{render:function(x,y){var A=x.nodeFrom.pos.getc(true),z=x.nodeTo.pos.getc(true);this.edgeHelper.line.render(A,z,y)},contains:function(x,A){var z=x.nodeFrom.pos.getc(true),y=x.nodeTo.pos.getc(true);return this.edgeHelper.line.contains(z,y,A,this.edge.epsilon)}},arrow:{render:function(y,z){var D=y.nodeFrom.pos.getc(true),C=y.nodeTo.pos.getc(true),B=y.getData("dim"),A=y.data.$direction,x=(A&&A.length>1&&A[0]!=y.nodeFrom.id);this.edgeHelper.arrow.render(D,C,B,x,z)},contains:function(x,A){var z=x.nodeFrom.pos.getc(true),y=x.nodeTo.pos.getc(true);return this.edgeHelper.arrow.contains(z,y,A,this.edge.epsilon)}}})})($jit.ForceDirected);$jit.TM={};var v=$jit.TM;$jit.TM.$extend=true;v.Base={layout:{orientation:"h",vertical:function(){return this.orientation=="v"},horizontal:function(){return this.orientation=="h"},change:function(){this.orientation=this.vertical()?"h":"v"}},initialize:function(w){var x={orientation:"h",titleHeight:13,offset:2,levelsToShow:0,constrained:false,animate:false,Node:{type:"rectangle",overridable:true,width:3,height:3,color:"#444"},Label:{textAlign:"center",textBaseline:"top"},Edge:{type:"none"},duration:700,fps:45};this.controller=this.config=c.merge(n("Canvas","Node","Edge","Fx","Controller","Tips","NodeStyles","Events","Navigation","Label"),x,w);this.layout.orientation=this.config.orientation;var y=this.config;if(y.useCanvas){this.canvas=y.useCanvas;this.config.labelContainer=this.canvas.id+"-label"}else{if(y.background){y.background=c.merge({type:"Circles"},y.background)}this.canvas=new l(this,y);this.config.labelContainer=(typeof y.injectInto=="string"?y.injectInto:y.injectInto.id)+"-label"}this.graphOptions={klass:p,Node:{selected:false,exist:true,drawn:true}};this.graph=new e(this.graphOptions,this.config.Node,this.config.Edge);this.labels=new v.Label[y.Label.type](this);this.fx=new v.Plot(this);this.op=new v.Op(this);this.group=new v.Group(this);this.geom=new v.Geom(this);this.clickedNode=null;this.busy=false;this.initializeExtras()},refresh:function(){if(this.busy){return}this.busy=true;var x=this;if(this.config.animate){this.compute("end");this.config.levelsToShow>0&&this.geom.setRightLevelToShow(this.graph.getNode(this.clickedNode&&this.clickedNode.id||this.root));this.fx.animate(c.merge(this.config,{modes:["linear","node-property:width:height"],onComplete:function(){x.busy=false}}))}else{var w=this.config.Label.type;if(w!="Native"){var x=this;this.graph.eachNode(function(y){x.labels.hideLabel(y,false)})}this.busy=false;this.compute();this.config.levelsToShow>0&&this.geom.setRightLevelToShow(this.graph.getNode(this.clickedNode&&this.clickedNode.id||this.root));this.plot()}},plot:function(){this.fx.plot()},leaf:function(w){return w.getSubnodes([1,1],"ignore").length==0},enter:function(C){if(this.busy){return}this.busy=true;var y=this,x=this.config,A=this.graph,w=C,z=this.clickedNode;var B={onComplete:function(){if(x.levelsToShow>0){y.geom.setRightLevelToShow(C)}if(x.levelsToShow>0||x.request){y.compute()}if(x.animate){A.nodeList.setData("alpha",0,"end");C.eachSubgraph(function(D){D.setData("alpha",1,"end")},"ignore");y.fx.animate({duration:500,modes:["node-property:alpha"],onComplete:function(){y.clickedNode=w;y.compute("end");y.clickedNode=z;y.fx.animate({modes:["linear","node-property:width:height"],duration:1000,onComplete:function(){y.busy=false;y.clickedNode=w}})}})}else{y.busy=false;y.clickedNode=C;y.refresh()}}};if(x.request){this.requestNodes(w,B)}else{B.onComplete()}},out:function(){if(this.busy){return}this.busy=true;this.events.hoveredNode=false;var A=this,y=this.config,C=this.graph,x=C.getNode(this.clickedNode&&this.clickedNode.id||this.root).getParents(),z=x[0],w=z,B=this.clickedNode;if(!z){this.busy=false;return}callback={onComplete:function(){A.clickedNode=z;if(y.request){A.requestNodes(z,{onComplete:function(){A.compute();A.plot();A.busy=false}})}else{A.compute();A.plot();A.busy=false}}};if(y.levelsToShow>0){this.geom.setRightLevelToShow(z)}if(y.animate){this.clickedNode=w;this.compute("end");this.clickedNode=B;this.fx.animate({modes:["linear","node-property:width:height"],duration:1000,onComplete:function(){A.clickedNode=w;C.eachNode(function(D){D.setDataset(["current","end"],{alpha:[0,1]})},"ignore");B.eachSubgraph(function(D){D.setData("alpha",1)},"ignore");A.fx.animate({duration:500,modes:["node-property:alpha"],onComplete:function(){callback.onComplete()}})}})}else{callback.onComplete()}},requestNodes:function(y,z){var x=c.merge(this.controller,z),w=this.config.levelsToShow;if(x.request){var B=[],A=y._depth;y.eachLevel(0,w,function(D){var C=w-(D._depth-A);if(D.drawn&&!D.anySubnode()&&C>0){B.push(D);D._level=C}});this.group.requestNodes(B,x)}else{x.onComplete()}},reposition:function(){this.compute("end")}};v.Op=new q({Implements:e.Op,initialize:function(w){this.viz=w}});v.Geom=new q({Implements:e.Geom,getRightLevelToShow:function(){return this.viz.config.levelsToShow},setRightLevelToShow:function(x){var y=this.getRightLevelToShow(),w=this.viz.labels;x.eachLevel(0,y+1,function(A){var z=A._depth-x._depth;if(z>y){A.drawn=false;A.exist=false;A.ignore=true;w.hideLabel(A,false)}else{A.drawn=true;A.exist=true;delete A.ignore}});x.drawn=true;delete x.ignore}});v.Group=new q({initialize:function(w){this.viz=w;this.canvas=w.canvas;this.config=w.config},requestNodes:function(B,A){var z=0,x=B.length,D={};var y=function(){A.onComplete()};var w=this.viz;if(x==0){y()}for(var C=0;C<x;C++){D[B[C].id]=B[C];A.request(B[C].id,B[C]._level,{onComplete:function(F,E){if(E&&E.children){E.id=F;w.op.sum(E,{type:"nothing"})}if(++z==x){w.graph.computeLevels(w.root,0);y()}}})}}});v.Plot=new q({Implements:e.Plot,initialize:function(w){this.viz=w;this.config=w.config;this.node=this.config.Node;this.edge=this.config.Edge;this.animation=new u;this.nodeTypes=new v.Plot.NodeTypes;this.edgeTypes=new v.Plot.EdgeTypes;this.labels=w.labels},plot:function(y,x){var w=this.viz,z=w.graph;w.canvas.clear();this.plotTree(z.getNode(w.clickedNode&&w.clickedNode.id||w.root),c.merge(w.config,y||{},{withLabels:true,hideLabels:false,plotSubtree:function(B,A){return B.anySubnode("exist")}}),x)}});v.Label={};v.Label.Native=new q({Implements:e.Label.Native,initialize:function(w){this.config=w.config;this.leaf=w.leaf},renderLabel:function(z,A,B){if(!this.leaf(A)&&!this.config.titleHeight){return}var D=A.pos.getc(true),G=z.getCtx(),w=A.getData("width"),F=A.getData("height"),E=D.x+w/2,C=D.y;G.fillText(A.name,E,C,w)}});v.Label.SVG=new q({Implements:e.Label.SVG,initialize:function(w){this.viz=w;this.leaf=w.leaf;this.config=w.config},placeLabel:function(G,A,B){var E=A.pos.getc(true),x=this.viz.canvas,y=x.translateOffsetX,w=x.translateOffsetY,F=x.scaleOffsetX,D=x.scaleOffsetY,C=x.getSize();var z={x:Math.round(E.x*F+y+C.width/2),y:Math.round(E.y*D+w+C.height/2)};G.setAttribute("x",z.x);G.setAttribute("y",z.y);if(!this.leaf(A)&&!this.config.titleHeight){G.style.display="none"}B.onPlaceLabel(G,A)}});v.Label.HTML=new q({Implements:e.Label.HTML,initialize:function(w){this.viz=w;this.leaf=w.leaf;this.config=w.config},placeLabel:function(H,B,C){var F=B.pos.getc(true),y=this.viz.canvas,z=y.translateOffsetX,x=y.translateOffsetY,G=y.scaleOffsetX,E=y.scaleOffsetY,D=y.getSize();var A={x:Math.round(F.x*G+z+D.width/2),y:Math.round(F.y*E+x+D.height/2)};var w=H.style;w.left=A.x+"px";w.top=A.y+"px";w.width=B.getData("width")*G+"px";w.height=B.getData("height")*E+"px";w.zIndex=B._depth*100;w.display="";if(!this.leaf(B)&&!this.config.titleHeight){H.style.display="none"}C.onPlaceLabel(H,B)}});v.Plot.NodeTypes=new q({none:{render:c.empty},rectangle:{render:function(z,x,M){var D=this.viz.leaf(z),y=this.config,I=y.offset,C=y.titleHeight,H=z.pos.getc(true),w=z.getData("width"),J=z.getData("height"),B=z.getData("border"),L=x.getCtx(),G=H.x+I/2,E=H.y+I/2;if(w<=I||J<=I){return}if(D){if(y.cushion){var K=L.createRadialGradient(G+(w-I)/2,E+(J-I)/2,1,G+(w-I)/2,E+(J-I)/2,w<J?J:w);var A=z.getData("color");var F=c.rgbToHex(c.map(c.hexToRgb(A),function(N){return N*0.2>>0}));K.addColorStop(0,A);K.addColorStop(1,F);L.fillStyle=K}L.fillRect(G,E,w-I,J-I);if(B){L.save();L.strokeStyle=B;L.strokeRect(G,E,w-I,J-I);L.restore()}}else{if(C>0){L.fillRect(H.x+I/2,H.y+I/2,w-I,C-I);if(B){L.save();L.strokeStyle=B;L.strokeRect(H.x+I/2,H.y+I/2,w-I,J-I);L.restore()}}}},contains:function(z,B){if(this.viz.clickedNode&&!z.isDescendantOf(this.viz.clickedNode.id)||z.ignore){return false}var A=z.pos.getc(true),y=z.getData("width"),x=this.viz.leaf(z),w=x?z.getData("height"):this.config.titleHeight;return this.nodeHelper.rectangle.contains({x:A.x+y/2,y:A.y+w/2},B,y,w)}}});v.Plot.EdgeTypes=new q({none:c.empty});v.SliceAndDice=new q({Implements:[d,o,v.Base,g.TM.SliceAndDice]});v.Squarified=new q({Implements:[d,o,v.Base,g.TM.Squarified]});v.Strip=new q({Implements:[d,o,v.Base,g.TM.Strip]});$jit.RGraph=new q({Implements:[d,o,g.Radial],initialize:function(w){var x=$jit.RGraph;var y={interpolation:"linear",levelDistance:100};this.controller=this.config=c.merge(n("Canvas","Node","Edge","Fx","Controller","Tips","NodeStyles","Events","Navigation","Label"),y,w);var z=this.config;if(z.useCanvas){this.canvas=z.useCanvas;this.config.labelContainer=this.canvas.id+"-label"}else{if(z.background){z.background=c.merge({type:"Circles"},z.background)}this.canvas=new l(this,z);this.config.labelContainer=(typeof z.injectInto=="string"?z.injectInto:z.injectInto.id)+"-label"}this.graphOptions={klass:b,Node:{selected:false,exist:true,drawn:true}};this.graph=new e(this.graphOptions,this.config.Node,this.config.Edge);this.labels=new x.Label[z.Label.type](this);this.fx=new x.Plot(this,x);this.op=new x.Op(this);this.json=null;this.root=null;this.busy=false;this.parent=false;this.initializeExtras()},createLevelDistanceFunc:function(){var w=this.config.levelDistance;return function(x){return(x._depth+1)*w}},refresh:function(){this.compute();this.plot()},reposition:function(){this.compute("end")},plot:function(){this.fx.plot()},getNodeAndParentAngle:function(D){var y=false;var C=this.graph.getNode(D);var A=C.getParents();var z=(A.length>0)?A[0]:false;if(z){var w=z.pos.getc(),B=C.pos.getc();var x=w.add(B.scale(-1));y=Math.atan2(x.y,x.x);if(y<0){y+=2*Math.PI}}return{parent:z,theta:y}},tagChildren:function(A,C){if(A.angleSpan){var B=[];A.eachAdjacency(function(D){B.push(D.nodeTo)},"ignore");var w=B.length;for(var z=0;z<w&&C!=B[z].id;z++){}for(var y=(z+1)%w,x=0;C!=B[y].id;y=(y+1)%w){B[y].dist=x++}}},onClick:function(B,x){if(this.root!=B&&!this.busy){this.busy=true;this.root=B;var y=this;this.controller.onBeforeCompute(this.graph.getNode(B));var z=this.getNodeAndParentAngle(B);this.tagChildren(z.parent,B);this.parent=z.parent;this.compute("end");var w=z.theta-z.parent.endPos.theta;this.graph.eachNode(function(C){C.endPos.set(C.endPos.getp().add(k(w,0)))});var A=this.config.interpolation;x=c.merge({onComplete:c.empty},x||{});this.fx.animate(c.merge({hideLabels:true,modes:[A]},x,{onComplete:function(){y.busy=false;x.onComplete()}}))}}});$jit.RGraph.$extend=true;(function(w){w.Op=new q({Implements:e.Op});w.Plot=new q({Implements:e.Plot});w.Label={};w.Label.Native=new q({Implements:e.Label.Native});w.Label.SVG=new q({Implements:e.Label.SVG,initialize:function(x){this.viz=x},placeLabel:function(H,B,C){var F=B.pos.getc(true),y=this.viz.canvas,z=y.translateOffsetX,x=y.translateOffsetY,G=y.scaleOffsetX,E=y.scaleOffsetY,D=y.getSize();var A={x:Math.round(F.x*G+z+D.width/2),y:Math.round(F.y*E+x+D.height/2)};H.setAttribute("x",A.x);H.setAttribute("y",A.y);C.onPlaceLabel(H,B)}});w.Label.HTML=new q({Implements:e.Label.HTML,initialize:function(x){this.viz=x},placeLabel:function(I,C,D){var G=C.pos.getc(true),z=this.viz.canvas,A=z.translateOffsetX,y=z.translateOffsetY,H=z.scaleOffsetX,F=z.scaleOffsetY,E=z.getSize();var B={x:Math.round(G.x*H+A+E.width/2),y:Math.round(G.y*F+y+E.height/2)};var x=I.style;x.left=B.x+"px";x.top=B.y+"px";x.display=this.fitsInCanvas(B,z)?"":"none";D.onPlaceLabel(I,C)}});w.Plot.NodeTypes=new q({none:{render:c.empty,contains:c.lambda(false)},circle:{render:function(y,x){var A=y.pos.getc(true),z=y.getData("dim");this.nodeHelper.circle.render("fill",A,z,x)},contains:function(x,A){var z=x.pos.getc(true),y=x.getData("dim");return this.nodeHelper.circle.contains(z,A,y)}},ellipse:{render:function(A,y){var B=A.pos.getc(true),z=A.getData("width"),x=A.getData("height");this.nodeHelper.ellipse.render("fill",B,z,x,y)},contains:function(z,B){var A=z.pos.getc(true),y=z.getData("width"),x=z.getData("height");return this.nodeHelper.ellipse.contains(A,B,y,x)}},square:{render:function(y,x){var A=y.pos.getc(true),z=y.getData("dim");this.nodeHelper.square.render("fill",A,z,x)},contains:function(x,A){var z=x.pos.getc(true),y=x.getData("dim");return this.nodeHelper.square.contains(z,A,y)}},rectangle:{render:function(A,y){var B=A.pos.getc(true),z=A.getData("width"),x=A.getData("height");this.nodeHelper.rectangle.render("fill",B,z,x,y)},contains:function(z,B){var A=z.pos.getc(true),y=z.getData("width"),x=z.getData("height");return this.nodeHelper.rectangle.contains(A,B,y,x)}},triangle:{render:function(y,x){var A=y.pos.getc(true),z=y.getData("dim");this.nodeHelper.triangle.render("fill",A,z,x)},contains:function(x,A){var z=x.pos.getc(true),y=x.getData("dim");return this.nodeHelper.triangle.contains(z,A,y)}},star:{render:function(y,x){var A=y.pos.getc(true),z=y.getData("dim");this.nodeHelper.star.render("fill",A,z,x)},contains:function(x,A){var z=x.pos.getc(true),y=x.getData("dim");return this.nodeHelper.star.contains(z,A,y)}}});w.Plot.EdgeTypes=new q({none:c.empty,line:{render:function(x,y){var A=x.nodeFrom.pos.getc(true),z=x.nodeTo.pos.getc(true);this.edgeHelper.line.render(A,z,y)},contains:function(x,A){var z=x.nodeFrom.pos.getc(true),y=x.nodeTo.pos.getc(true);return this.edgeHelper.line.contains(z,y,A,this.edge.epsilon)}},arrow:{render:function(y,z){var D=y.nodeFrom.pos.getc(true),C=y.nodeTo.pos.getc(true),B=y.getData("dim"),A=y.data.$direction,x=(A&&A.length>1&&A[0]!=y.nodeFrom.id);this.edgeHelper.arrow.render(D,C,B,x,z)},contains:function(x,A){var z=x.nodeFrom.pos.getc(true),y=x.nodeTo.pos.getc(true);return this.edgeHelper.arrow.contains(z,y,A,this.edge.epsilon)}}})})($jit.RGraph);p.prototype.moebiusTransformation=function(y){var w=this.add(y);var x=y.$conjugate().$prod(this);x.x++;return w.$div(x)};e.Util.moebiusTransformation=function(y,A,z,x,w){this.eachNode(y,function(C){for(var B=0;B<z.length;B++){var E=A[B].scale(-1),D=x?x:z[B];C.getPos(z[B]).set(C.getPos(D).getc().moebiusTransformation(E))}},w)};$jit.Hypertree=new q({Implements:[d,o,g.Radial],initialize:function(w){var z=$jit.Hypertree;var x={radius:"auto",offset:0,Edge:{type:"hyperline"},duration:1500,fps:35};this.controller=this.config=c.merge(n("Canvas","Node","Edge","Fx","Tips","NodeStyles","Events","Navigation","Controller","Label"),x,w);var y=this.config;if(y.useCanvas){this.canvas=y.useCanvas;this.config.labelContainer=this.canvas.id+"-label"}else{if(y.background){y.background=c.merge({type:"Circles"},y.background)}this.canvas=new l(this,y);this.config.labelContainer=(typeof y.injectInto=="string"?y.injectInto:y.injectInto.id)+"-label"}this.graphOptions={klass:b,Node:{selected:false,exist:true,drawn:true}};this.graph=new e(this.graphOptions,this.config.Node,this.config.Edge);this.labels=new z.Label[y.Label.type](this);this.fx=new z.Plot(this,z);this.op=new z.Op(this);this.json=null;this.root=null;this.busy=false;this.initializeExtras()},createLevelDistanceFunc:function(){var A=this.getRadius();var C=0,w=Math.max,x=this.config;this.graph.eachNode(function(D){C=w(D._depth,C)},"ignore");C++;var B=function(D){return function(F){F.scale=A;var H=F._depth+1;var G=0,E=Math.pow;while(H){G+=E(D,H--)}return G-x.offset}};for(var z=0.51;z<=1;z+=0.01){var y=(1-Math.pow(z,C))/(1-z);if(y>=2){return B(z-0.01)}}return B(0.75)},getRadius:function(){var w=this.config.radius;if(w!=="auto"){return w}var x=this.canvas.getSize();return Math.min(x.width,x.height)/2},refresh:function(w){if(w){this.reposition();this.graph.eachNode(function(x){x.startPos.rho=x.pos.rho=x.endPos.rho;x.startPos.theta=x.pos.theta=x.endPos.theta})}else{this.compute()}this.plot()},reposition:function(){this.compute("end");var w=this.graph.getNode(this.root).pos.getc().scale(-1);e.Util.moebiusTransformation(this.graph,[w],["end"],"end","ignore");this.graph.eachNode(function(x){if(x.ignore){x.endPos.rho=x.pos.rho;x.endPos.theta=x.pos.theta}})},plot:function(){this.fx.plot()},onClick:function(y,w){var x=this.graph.getNode(y).pos.getc(true);this.move(x,w)},move:function(A,y){var x=r(A.x,A.y);if(this.busy===false&&x.norm()<1){this.busy=true;var w=this.graph.getClosestNodeToPos(x),z=this;this.graph.computeLevels(w.id,0);this.controller.onBeforeCompute(w);y=c.merge({onComplete:c.empty},y||{});this.fx.animate(c.merge({modes:["moebius"],hideLabels:true},y,{onComplete:function(){z.busy=false;y.onComplete()}}),x)}}});$jit.Hypertree.$extend=true;(function(w){w.Op=new q({Implements:e.Op});w.Plot=new q({Implements:e.Plot});w.Label={};w.Label.Native=new q({Implements:e.Label.Native,initialize:function(x){this.viz=x},renderLabel:function(z,B,y){var x=z.getCtx();var C=B.pos.getc(true);var A=this.viz.getRadius();x.fillText(B.name,C.x*A,C.y*A)}});w.Label.SVG=new q({Implements:e.Label.SVG,initialize:function(x){this.viz=x},placeLabel:function(I,C,D){var G=C.pos.getc(true),z=this.viz.canvas,A=z.translateOffsetX,y=z.translateOffsetY,H=z.scaleOffsetX,F=z.scaleOffsetY,E=z.getSize(),x=this.viz.getRadius();var B={x:Math.round((G.x*H)*x+A+E.width/2),y:Math.round((G.y*F)*x+y+E.height/2)};I.setAttribute("x",B.x);I.setAttribute("y",B.y);D.onPlaceLabel(I,C)}});w.Label.HTML=new q({Implements:e.Label.HTML,initialize:function(x){this.viz=x},placeLabel:function(J,D,E){var H=D.pos.getc(true),A=this.viz.canvas,B=A.translateOffsetX,z=A.translateOffsetY,I=A.scaleOffsetX,G=A.scaleOffsetY,F=A.getSize(),x=this.viz.getRadius();var C={x:Math.round((H.x*I)*x+B+F.width/2),y:Math.round((H.y*G)*x+z+F.height/2)};var y=J.style;y.left=C.x+"px";y.top=C.y+"px";y.display=this.fitsInCanvas(C,A)?"":"none";E.onPlaceLabel(J,D)}});w.Plot.NodeTypes=new q({none:{render:c.empty,contains:c.lambda(false)},circle:{render:function(z,x){var y=this.node,B=z.getData("dim"),A=z.pos.getc();B=y.transform?B*(1-A.squaredNorm()):B;A.$scale(z.scale);if(B>0.2){this.nodeHelper.circle.render("fill",A,B,x)}},contains:function(x,A){var y=x.getData("dim"),z=x.pos.getc().$scale(x.scale);return this.nodeHelper.circle.contains(z,A,y)}},ellipse:{render:function(A,y){var B=A.pos.getc().$scale(A.scale),z=A.getData("width"),x=A.getData("height");this.nodeHelper.ellipse.render("fill",B,z,x,y)},contains:function(z,B){var y=z.getData("width"),x=z.getData("height"),A=z.pos.getc().$scale(z.scale);return this.nodeHelper.circle.contains(A,B,y,x)}},square:{render:function(z,x){var y=this.node,B=z.getData("dim"),A=z.pos.getc();B=y.transform?B*(1-A.squaredNorm()):B;A.$scale(z.scale);if(B>0.2){this.nodeHelper.square.render("fill",A,B,x)}},contains:function(x,A){var y=x.getData("dim"),z=x.pos.getc().$scale(x.scale);return this.nodeHelper.square.contains(z,A,y)}},rectangle:{render:function(B,y){var A=this.node,z=B.getData("width"),x=B.getData("height"),C=B.pos.getc();z=A.transform?z*(1-C.squaredNorm()):z;x=A.transform?x*(1-C.squaredNorm()):x;C.$scale(B.scale);if(z>0.2&&x>0.2){this.nodeHelper.rectangle.render("fill",C,z,x,y)}},contains:function(z,B){var y=z.getData("width"),x=z.getData("height"),A=z.pos.getc().$scale(z.scale);return this.nodeHelper.rectangle.contains(A,B,y,x)}},triangle:{render:function(z,x){var y=this.node,B=z.getData("dim"),A=z.pos.getc();B=y.transform?B*(1-A.squaredNorm()):B;A.$scale(z.scale);if(B>0.2){this.nodeHelper.triangle.render("fill",A,B,x)}},contains:function(x,A){var y=x.getData("dim"),z=x.pos.getc().$scale(x.scale);return this.nodeHelper.triangle.contains(z,A,y)}},star:{render:function(z,x){var y=this.node,B=z.getData("dim"),A=z.pos.getc();B=y.transform?B*(1-A.squaredNorm()):B;A.$scale(z.scale);if(B>0.2){this.nodeHelper.star.render("fill",A,B,x)}},contains:function(x,A){var y=x.getData("dim"),z=x.pos.getc().$scale(x.scale);return this.nodeHelper.star.contains(z,A,y)}}});w.Plot.EdgeTypes=new q({none:c.empty,line:{render:function(x,y){var B=x.nodeFrom.pos.getc(true),A=x.nodeTo.pos.getc(true),z=x.nodeFrom.scale;this.edgeHelper.line.render({x:B.x*z,y:B.y*z},{x:A.x*z,y:A.y*z},y)},contains:function(x,B){var A=x.nodeFrom.pos.getc(true),z=x.nodeTo.pos.getc(true),y=x.nodeFrom.scale;this.edgeHelper.line.contains({x:A.x*y,y:A.y*y},{x:z.x*y,y:z.y*y},B,this.edge.epsilon)}},arrow:{render:function(y,z){var E=y.nodeFrom.pos.getc(true),D=y.nodeTo.pos.getc(true),A=y.nodeFrom.scale,C=y.getData("dim"),B=y.data.$direction,x=(B&&B.length>1&&B[0]!=y.nodeFrom.id);this.edgeHelper.arrow.render({x:E.x*A,y:E.y*A},{x:D.x*A,y:D.y*A},C,x,z)},contains:function(x,B){var A=x.nodeFrom.pos.getc(true),z=x.nodeTo.pos.getc(true),y=x.nodeFrom.scale;this.edgeHelper.arrow.contains({x:A.x*y,y:A.y*y},{x:z.x*y,y:z.y*y},B,this.edge.epsilon)}},hyperline:{render:function(x,y){var B=x.nodeFrom.pos.getc(),A=x.nodeTo.pos.getc(),z=this.viz.getRadius();this.edgeHelper.hyperline.render(B,A,z,y)},contains:c.lambda(false)}})})($jit.Hypertree)})();
\ No newline at end of file
diff --git a/static/jit.js b/static/jit.js
new file mode 100644 (file)
index 0000000..9bf6e9e
--- /dev/null
@@ -0,0 +1,17163 @@
+/*
+Copyright (c) 2011 Sencha Inc. - Author: Nicolas Garcia Belmonte (http://philogb.github.com/)
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+
+ */
+ (function () { 
+
+/*
+  File: Core.js
+
+ */
+
+/*
+ Object: $jit
+ Defines the namespace for all library Classes and Objects. 
+ This variable is the *only* global variable defined in the Toolkit. 
+ There are also other interesting properties attached to this variable described below.
+ */
+window.$jit = function(w) {
+  w = w || window;
+  for(var k in $jit) {
+    if($jit[k].$extend) {
+      w[k] = $jit[k];
+    }
+  }
+};
+
+$jit.version = '2.0.1';
+/*
+  Object: $jit.id
+  
+  Works just like *document.getElementById*
+  
+  Example:
+  (start code js)
+  var element = $jit.id('elementId');
+  (end code)
+
+*/
+
+/*
+ Object: $jit.util
+ Contains utility functions.
+ Some of the utility functions and the Class system were based in the MooTools Framework 
+ <http://mootools.net>. Copyright (c) 2006-2010 Valerio Proietti, <http://mad4milk.net/>. 
+ MIT license <http://mootools.net/license.txt>.
+ These methods are generally also implemented in DOM manipulation frameworks like JQuery, MooTools and Prototype.
+ I'd suggest you to use the functions from those libraries instead of using these, since their functions 
+ are widely used and tested in many different platforms/browsers. Use these functions only if you have to.
+ */
+var $ = function(d) {
+  return document.getElementById(d);
+};
+
+$.empty = function() {
+};
+
+/*
+  Method: extend
+  
+  Augment an object by appending another object's properties.
+  
+  Parameters:
+  
+  original - (object) The object to be extended.
+  extended - (object) An object which properties are going to be appended to the original object.
+  
+  Example:
+  (start code js)
+  $jit.util.extend({ 'a': 1, 'b': 2 }, { 'b': 3, 'c': 4 }); //{ 'a':1, 'b': 3, 'c': 4 }
+  (end code)
+*/
+$.extend = function(original, extended) {
+  for ( var key in (extended || {}))
+    original[key] = extended[key];
+  return original;
+};
+
+$.lambda = function(value) {
+  return (typeof value == 'function') ? value : function() {
+    return value;
+  };
+};
+
+$.time = Date.now || function() {
+  return +new Date;
+};
+
+/*
+  Method: splat
+  
+  Returns an array wrapping *obj* if *obj* is not an array. Returns *obj* otherwise.
+  
+  Parameters:
+  
+  obj - (mixed) The object to be wrapped in an array.
+  
+  Example:
+  (start code js)
+  $jit.util.splat(3);   //[3]
+  $jit.util.splat([3]); //[3]
+  (end code)
+*/
+$.splat = function(obj) {
+  var type = $.type(obj);
+  return type ? ((type != 'array') ? [ obj ] : obj) : [];
+};
+
+$.type = function(elem) {
+  var type = $.type.s.call(elem).match(/^\[object\s(.*)\]$/)[1].toLowerCase();
+  if(type != 'object') return type;
+  if(elem && elem.$$family) return elem.$$family;
+  return (elem && elem.nodeName && elem.nodeType == 1)? 'element' : type;
+};
+$.type.s = Object.prototype.toString;
+
+/*
+  Method: each
+  
+  Iterates through an iterable applying *f*.
+  
+  Parameters:
+  
+  iterable - (array) The original array.
+  fn - (function) The function to apply to the array elements.
+  
+  Example:
+  (start code js)
+  $jit.util.each([3, 4, 5], function(n) { alert('number ' + n); });
+  (end code)
+*/
+$.each = function(iterable, fn) {
+  var type = $.type(iterable);
+  if (type == 'object') {
+    for ( var key in iterable)
+      fn(iterable[key], key);
+  } else {
+    for ( var i = 0, l = iterable.length; i < l; i++)
+      fn(iterable[i], i);
+  }
+};
+
+$.indexOf = function(array, item) {
+  if(Array.indexOf) return array.indexOf(item);
+  for(var i=0,l=array.length; i<l; i++) {
+    if(array[i] === item) return i;
+  }
+  return -1;
+};
+
+/*
+  Method: map
+  
+  Maps or collects an array by applying *f*.
+  
+  Parameters:
+  
+  array - (array) The original array.
+  f - (function) The function to apply to the array elements.
+  
+  Example:
+  (start code js)
+  $jit.util.map([3, 4, 5], function(n) { return n*n; }); //[9, 16, 25]
+  (end code)
+*/
+$.map = function(array, f) {
+  var ans = [];
+  $.each(array, function(elem, i) {
+    ans.push(f(elem, i));
+  });
+  return ans;
+};
+
+/*
+  Method: reduce
+  
+  Iteratively applies the binary function *f* storing the result in an accumulator.
+  
+  Parameters:
+  
+  array - (array) The original array.
+  f - (function) The function to apply to the array elements.
+  opt - (optional|mixed) The starting value for the acumulator.
+  
+  Example:
+  (start code js)
+  $jit.util.reduce([3, 4, 5], function(x, y) { return x + y; }, 0); //12
+  (end code)
+*/
+$.reduce = function(array, f, opt) {
+  var l = array.length;
+  if(l==0) return opt;
+  var acum = arguments.length == 3? opt : array[--l];
+  while(l--) {
+    acum = f(acum, array[l]);
+  }
+  return acum;
+};
+
+/*
+  Method: merge
+  
+  Merges n-objects and their sub-objects creating a new, fresh object.
+  
+  Parameters:
+  
+  An arbitrary number of objects.
+  
+  Example:
+  (start code js)
+  $jit.util.merge({ 'a': 1, 'b': 2 }, { 'b': 3, 'c': 4 }); //{ 'a':1, 'b': 3, 'c': 4 }
+  (end code)
+*/
+$.merge = function() {
+  var mix = {};
+  for ( var i = 0, l = arguments.length; i < l; i++) {
+    var object = arguments[i];
+    if ($.type(object) != 'object')
+      continue;
+    for ( var key in object) {
+      var op = object[key], mp = mix[key];
+      mix[key] = (mp && $.type(op) == 'object' && $.type(mp) == 'object') ? $
+          .merge(mp, op) : $.unlink(op);
+    }
+  }
+  return mix;
+};
+
+$.unlink = function(object) {
+  var unlinked;
+  switch ($.type(object)) {
+  case 'object':
+    unlinked = {};
+    for ( var p in object)
+      unlinked[p] = $.unlink(object[p]);
+    break;
+  case 'array':
+    unlinked = [];
+    for ( var i = 0, l = object.length; i < l; i++)
+      unlinked[i] = $.unlink(object[i]);
+    break;
+  default:
+    return object;
+  }
+  return unlinked;
+};
+
+$.zip = function() {
+  if(arguments.length === 0) return [];
+  for(var j=0, ans=[], l=arguments.length, ml=arguments[0].length; j<ml; j++) {
+    for(var i=0, row=[]; i<l; i++) {
+      row.push(arguments[i][j]);
+    }
+    ans.push(row);
+  }
+  return ans;
+};
+
+/*
+  Method: rgbToHex
+  
+  Converts an RGB array into a Hex string.
+  
+  Parameters:
+  
+  srcArray - (array) An array with R, G and B values
+  
+  Example:
+  (start code js)
+  $jit.util.rgbToHex([255, 255, 255]); //'#ffffff'
+  (end code)
+*/
+$.rgbToHex = function(srcArray, array) {
+  if (srcArray.length < 3)
+    return null;
+  if (srcArray.length == 4 && srcArray[3] == 0 && !array)
+    return 'transparent';
+  var hex = [];
+  for ( var i = 0; i < 3; i++) {
+    var bit = (srcArray[i] - 0).toString(16);
+    hex.push(bit.length == 1 ? '0' + bit : bit);
+  }
+  return array ? hex : '#' + hex.join('');
+};
+
+/*
+  Method: hexToRgb
+  
+  Converts an Hex color string into an RGB array.
+  
+  Parameters:
+  
+  hex - (string) A color hex string.
+  
+  Example:
+  (start code js)
+  $jit.util.hexToRgb('#fff'); //[255, 255, 255]
+  (end code)
+*/
+$.hexToRgb = function(hex) {
+  if (hex.length != 7) {
+    hex = hex.match(/^#?(\w{1,2})(\w{1,2})(\w{1,2})$/);
+    hex.shift();
+    if (hex.length != 3)
+      return null;
+    var rgb = [];
+    for ( var i = 0; i < 3; i++) {
+      var value = hex[i];
+      if (value.length == 1)
+        value += value;
+      rgb.push(parseInt(value, 16));
+    }
+    return rgb;
+  } else {
+    hex = parseInt(hex.slice(1), 16);
+    return [ hex >> 16, hex >> 8 & 0xff, hex & 0xff ];
+  }
+};
+
+$.destroy = function(elem) {
+  $.clean(elem);
+  if (elem.parentNode)
+    elem.parentNode.removeChild(elem);
+  if (elem.clearAttributes)
+    elem.clearAttributes();
+};
+
+$.clean = function(elem) {
+  for (var ch = elem.childNodes, i = 0, l = ch.length; i < l; i++) {
+    $.destroy(ch[i]);
+  }
+};
+
+/*
+  Method: addEvent
+  
+  Cross-browser add event listener.
+  
+  Parameters:
+  
+  obj - (obj) The Element to attach the listener to.
+  type - (string) The listener type. For example 'click', or 'mousemove'.
+  fn - (function) The callback function to be used when the event is fired.
+  
+  Example:
+  (start code js)
+  $jit.util.addEvent(elem, 'click', function(){ alert('hello'); });
+  (end code)
+*/
+$.addEvent = function(obj, type, fn) {
+  if (obj.addEventListener)
+    obj.addEventListener(type, fn, false);
+  else
+    obj.attachEvent('on' + type, fn);
+};
+
+$.addEvents = function(obj, typeObj) {
+  for(var type in typeObj) {
+    $.addEvent(obj, type, typeObj[type]);
+  }
+};
+
+$.hasClass = function(obj, klass) {
+  return (' ' + obj.className + ' ').indexOf(' ' + klass + ' ') > -1;
+};
+
+$.addClass = function(obj, klass) {
+  if (!$.hasClass(obj, klass))
+    obj.className = (obj.className + " " + klass);
+};
+
+$.removeClass = function(obj, klass) {
+  obj.className = obj.className.replace(new RegExp(
+      '(^|\\s)' + klass + '(?:\\s|$)'), '$1');
+};
+
+$.getPos = function(elem) {
+  var offset = getOffsets(elem);
+  var scroll = getScrolls(elem);
+  return {
+    x: offset.x - scroll.x,
+    y: offset.y - scroll.y
+  };
+
+  function getOffsets(elem) {
+    var position = {
+      x: 0,
+      y: 0
+    };
+    while (elem && !isBody(elem)) {
+      position.x += elem.offsetLeft;
+      position.y += elem.offsetTop;
+      elem = elem.offsetParent;
+    }
+    return position;
+  }
+
+  function getScrolls(elem) {
+    var position = {
+      x: 0,
+      y: 0
+    };
+    while (elem && !isBody(elem)) {
+      position.x += elem.scrollLeft;
+      position.y += elem.scrollTop;
+      elem = elem.parentNode;
+    }
+    return position;
+  }
+
+  function isBody(element) {
+    return (/^(?:body|html)$/i).test(element.tagName);
+  }
+};
+
+$.event = {
+  get: function(e, win) {
+    win = win || window;
+    return e || win.event;
+  },
+  getWheel: function(e) {
+    return e.wheelDelta? e.wheelDelta / 120 : -(e.detail || 0) / 3;
+  },
+  isRightClick: function(e) {
+    return (e.which == 3 || e.button == 2);
+  },
+  getPos: function(e, win) {
+    // get mouse position
+    win = win || window;
+    e = e || win.event;
+    var doc = win.document;
+    doc = doc.documentElement || doc.body;
+    //TODO(nico): make touch event handling better
+    if(e.touches && e.touches.length) {
+      e = e.touches[0];
+    }
+    var page = {
+      x: e.pageX || (e.clientX + doc.scrollLeft),
+      y: e.pageY || (e.clientY + doc.scrollTop)
+    };
+    return page;
+  },
+  stop: function(e) {
+    if (e.stopPropagation) e.stopPropagation();
+    e.cancelBubble = true;
+    if (e.preventDefault) e.preventDefault();
+    else e.returnValue = false;
+  }
+};
+
+$jit.util = $jit.id = $;
+
+var Class = function(properties) {
+  properties = properties || {};
+  var klass = function() {
+    for ( var key in this) {
+      if (typeof this[key] != 'function')
+        this[key] = $.unlink(this[key]);
+    }
+    this.constructor = klass;
+    if (Class.prototyping)
+      return this;
+    var instance = this.initialize ? this.initialize.apply(this, arguments)
+        : this;
+    //typize
+    this.$$family = 'class';
+    return instance;
+  };
+
+  for ( var mutator in Class.Mutators) {
+    if (!properties[mutator])
+      continue;
+    properties = Class.Mutators[mutator](properties, properties[mutator]);
+    delete properties[mutator];
+  }
+
+  $.extend(klass, this);
+  klass.constructor = Class;
+  klass.prototype = properties;
+  return klass;
+};
+
+Class.Mutators = {
+
+  Implements: function(self, klasses) {
+    $.each($.splat(klasses), function(klass) {
+      Class.prototyping = klass;
+      var instance = (typeof klass == 'function') ? new klass : klass;
+      for ( var prop in instance) {
+        if (!(prop in self)) {
+          self[prop] = instance[prop];
+        }
+      }
+      delete Class.prototyping;
+    });
+    return self;
+  }
+
+};
+
+$.extend(Class, {
+
+  inherit: function(object, properties) {
+    for ( var key in properties) {
+      var override = properties[key];
+      var previous = object[key];
+      var type = $.type(override);
+      if (previous && type == 'function') {
+        if (override != previous) {
+          Class.override(object, key, override);
+        }
+      } else if (type == 'object') {
+        object[key] = $.merge(previous, override);
+      } else {
+        object[key] = override;
+      }
+    }
+    return object;
+  },
+
+  override: function(object, name, method) {
+    var parent = Class.prototyping;
+    if (parent && object[name] != parent[name])
+      parent = null;
+    var override = function() {
+      var previous = this.parent;
+      this.parent = parent ? parent[name] : object[name];
+      var value = method.apply(this, arguments);
+      this.parent = previous;
+      return value;
+    };
+    object[name] = override;
+  }
+
+});
+
+Class.prototype.implement = function() {
+  var proto = this.prototype;
+  $.each(Array.prototype.slice.call(arguments || []), function(properties) {
+    Class.inherit(proto, properties);
+  });
+  return this;
+};
+
+$jit.Class = Class;
+
+/*
+  Object: $jit.json
+  
+  Provides JSON utility functions.
+  
+  Most of these functions are JSON-tree traversal and manipulation functions.
+*/
+$jit.json = {
+  /*
+     Method: prune
+  
+     Clears all tree nodes having depth greater than maxLevel.
+  
+     Parameters:
+  
+        tree - (object) A JSON tree object. For more information please see <Loader.loadJSON>.
+        maxLevel - (number) An integer specifying the maximum level allowed for this tree. All nodes having depth greater than max level will be deleted.
+
+  */
+  prune: function(tree, maxLevel) {
+    this.each(tree, function(elem, i) {
+      if (i == maxLevel && elem.children) {
+        delete elem.children;
+        elem.children = [];
+      }
+    });
+  },
+  /*
+     Method: getParent
+  
+     Returns the parent node of the node having _id_ as id.
+  
+     Parameters:
+  
+        tree - (object) A JSON tree object. See also <Loader.loadJSON>.
+        id - (string) The _id_ of the child node whose parent will be returned.
+
+    Returns:
+
+        A tree JSON node if any, or false otherwise.
+  
+  */
+  getParent: function(tree, id) {
+    if (tree.id == id)
+      return false;
+    var ch = tree.children;
+    if (ch && ch.length > 0) {
+      for ( var i = 0; i < ch.length; i++) {
+        if (ch[i].id == id)
+          return tree;
+        else {
+          var ans = this.getParent(ch[i], id);
+          if (ans)
+            return ans;
+        }
+      }
+    }
+    return false;
+  },
+  /*
+     Method: getSubtree
+  
+     Returns the subtree that matches the given id.
+  
+     Parameters:
+  
+        tree - (object) A JSON tree object. See also <Loader.loadJSON>.
+        id - (string) A node *unique* identifier.
+  
+     Returns:
+  
+        A subtree having a root node matching the given id. Returns null if no subtree matching the id is found.
+
+  */
+  getSubtree: function(tree, id) {
+    if (tree.id == id)
+      return tree;
+    for ( var i = 0, ch = tree.children; ch && i < ch.length; i++) {
+      var t = this.getSubtree(ch[i], id);
+      if (t != null)
+        return t;
+    }
+    return null;
+  },
+  /*
+     Method: eachLevel
+  
+      Iterates on tree nodes with relative depth less or equal than a specified level.
+  
+     Parameters:
+  
+        tree - (object) A JSON tree or subtree. See also <Loader.loadJSON>.
+        initLevel - (number) An integer specifying the initial relative level. Usually zero.
+        toLevel - (number) An integer specifying a top level. This method will iterate only through nodes with depth less than or equal this number.
+        action - (function) A function that receives a node and an integer specifying the actual level of the node.
+          
+    Example:
+   (start code js)
+     $jit.json.eachLevel(tree, 0, 3, function(node, depth) {
+        alert(node.name + ' ' + depth);
+     });
+   (end code)
+  */
+  eachLevel: function(tree, initLevel, toLevel, action) {
+    if (initLevel <= toLevel) {
+      action(tree, initLevel);
+      if(!tree.children) return;
+      for ( var i = 0, ch = tree.children; i < ch.length; i++) {
+        this.eachLevel(ch[i], initLevel + 1, toLevel, action);
+      }
+    }
+  },
+  /*
+     Method: each
+  
+      A JSON tree iterator.
+  
+     Parameters:
+  
+        tree - (object) A JSON tree or subtree. See also <Loader.loadJSON>.
+        action - (function) A function that receives a node.
+
+    Example:
+    (start code js)
+      $jit.json.each(tree, function(node) {
+        alert(node.name);
+      });
+    (end code)
+          
+  */
+  each: function(tree, action) {
+    this.eachLevel(tree, 0, Number.MAX_VALUE, action);
+  }
+};
+
+
+/*
+     An object containing multiple type of transformations. 
+*/
+
+$jit.Trans = {
+  $extend: true,
+  
+  linear: function(p){
+    return p;
+  }
+};
+
+var Trans = $jit.Trans;
+
+(function(){
+
+  var makeTrans = function(transition, params){
+    params = $.splat(params);
+    return $.extend(transition, {
+      easeIn: function(pos){
+        return transition(pos, params);
+      },
+      easeOut: function(pos){
+        return 1 - transition(1 - pos, params);
+      },
+      easeInOut: function(pos){
+        return (pos <= 0.5)? transition(2 * pos, params) / 2 : (2 - transition(
+            2 * (1 - pos), params)) / 2;
+      }
+    });
+  };
+
+  var transitions = {
+
+    Pow: function(p, x){
+      return Math.pow(p, x[0] || 6);
+    },
+
+    Expo: function(p){
+      return Math.pow(2, 8 * (p - 1));
+    },
+
+    Circ: function(p){
+      return 1 - Math.sin(Math.acos(p));
+    },
+
+    Sine: function(p){
+      return 1 - Math.sin((1 - p) * Math.PI / 2);
+    },
+
+    Back: function(p, x){
+      x = x[0] || 1.618;
+      return Math.pow(p, 2) * ((x + 1) * p - x);
+    },
+
+    Bounce: function(p){
+      var value;
+      for ( var a = 0, b = 1; 1; a += b, b /= 2) {
+        if (p >= (7 - 4 * a) / 11) {
+          value = b * b - Math.pow((11 - 6 * a - 11 * p) / 4, 2);
+          break;
+        }
+      }
+      return value;
+    },
+
+    Elastic: function(p, x){
+      return Math.pow(2, 10 * --p)
+          * Math.cos(20 * p * Math.PI * (x[0] || 1) / 3);
+    }
+
+  };
+
+  $.each(transitions, function(val, key){
+    Trans[key] = makeTrans(val);
+  });
+
+  $.each( [
+      'Quad', 'Cubic', 'Quart', 'Quint'
+  ], function(elem, i){
+    Trans[elem] = makeTrans(function(p){
+      return Math.pow(p, [
+        i + 2
+      ]);
+    });
+  });
+
+})();
+
+/*
+   A Class that can perform animations for generic objects.
+
+   If you are looking for animation transitions please take a look at the <Trans> object.
+
+   Used by:
+
+   <Graph.Plot>
+   
+   Based on:
+   
+   The Animation class is based in the MooTools Framework <http://mootools.net>. Copyright (c) 2006-2009 Valerio Proietti, <http://mad4milk.net/>. MIT license <http://mootools.net/license.txt>.
+
+*/
+
+var Animation = new Class( {
+
+  initialize: function(options){
+    this.setOptions(options);
+  },
+
+  setOptions: function(options){
+    var opt = {
+      duration: 2500,
+      fps: 40,
+      transition: Trans.Quart.easeInOut,
+      compute: $.empty,
+      complete: $.empty,
+      link: 'ignore'
+    };
+    this.opt = $.merge(opt, options || {});
+    return this;
+  },
+
+  step: function(){
+    var time = $.time(), opt = this.opt;
+    if (time < this.time + opt.duration) {
+      var delta = opt.transition((time - this.time) / opt.duration);
+      opt.compute(delta);
+    } else {
+      this.timer = clearInterval(this.timer);
+      opt.compute(1);
+      opt.complete();
+    }
+  },
+
+  start: function(){
+    if (!this.check())
+      return this;
+    this.time = 0;
+    this.startTimer();
+    return this;
+  },
+
+  startTimer: function(){
+    var that = this, fps = this.opt.fps;
+    if (this.timer)
+      return false;
+    this.time = $.time() - this.time;
+    this.timer = setInterval((function(){
+      that.step();
+    }), Math.round(1000 / fps));
+    return true;
+  },
+
+  pause: function(){
+    this.stopTimer();
+    return this;
+  },
+
+  resume: function(){
+    this.startTimer();
+    return this;
+  },
+
+  stopTimer: function(){
+    if (!this.timer)
+      return false;
+    this.time = $.time() - this.time;
+    this.timer = clearInterval(this.timer);
+    return true;
+  },
+
+  check: function(){
+    if (!this.timer)
+      return true;
+    if (this.opt.link == 'cancel') {
+      this.stopTimer();
+      return true;
+    }
+    return false;
+  }
+});
+
+
+var Options = function() {
+  var args = arguments;
+  for(var i=0, l=args.length, ans={}; i<l; i++) {
+    var opt = Options[args[i]];
+    if(opt.$extend) {
+      $.extend(ans, opt);
+    } else {
+      ans[args[i]] = opt;  
+    }
+  }
+  return ans;
+};
+
+/*
+ * File: Options.AreaChart.js
+ *
+*/
+
+/*
+  Object: Options.AreaChart
+  
+  <AreaChart> options. 
+  Other options included in the AreaChart are <Options.Canvas>, <Options.Label>, <Options.Margin>, <Options.Tips> and <Options.Events>.
+  
+  Syntax:
+  
+  (start code js)
+
+  Options.AreaChart = {
+    animate: true,
+    labelOffset: 3,
+    type: 'stacked',
+    selectOnHover: true,
+    showAggregates: true,
+    showLabels: true,
+    filterOnClick: false,
+    restoreOnRightClick: false
+  };
+  
+  (end code)
+  
+  Example:
+  
+  (start code js)
+
+  var areaChart = new $jit.AreaChart({
+    animate: true,
+    type: 'stacked:gradient',
+    selectOnHover: true,
+    filterOnClick: true,
+    restoreOnRightClick: true
+  });
+  
+  (end code)
+
+  Parameters:
+  
+  animate - (boolean) Default's *true*. Whether to add animated transitions when filtering/restoring stacks.
+  labelOffset - (number) Default's *3*. Adds margin between the label and the default place where it should be drawn.
+  type - (string) Default's *'stacked'*. Stack style. Posible values are 'stacked', 'stacked:gradient' to add gradients.
+  selectOnHover - (boolean) Default's *true*. If true, it will add a mark to the hovered stack.
+  showAggregates - (boolean, function) Default's *true*. Display the values of the stacks. Can also be a function that returns *true* or *false* to display or filter some values. That same function can also return a string with the formatted value.
+  showLabels - (boolean, function) Default's *true*. Display the name of the slots. Can also be a function that returns *true* or *false* to display or not each label.
+  filterOnClick - (boolean) Default's *true*. Select the clicked stack by hiding all other stacks.
+  restoreOnRightClick - (boolean) Default's *true*. Show all stacks by right clicking.
+  
+*/
+  
+Options.AreaChart = {
+  $extend: true,
+
+  animate: true,
+  labelOffset: 3, // label offset
+  type: 'stacked', // gradient
+  Tips: {
+    enable: false,
+    onShow: $.empty,
+    onHide: $.empty
+  },
+  Events: {
+    enable: false,
+    onClick: $.empty
+  },
+  selectOnHover: true,
+  showAggregates: true,
+  showLabels: true,
+  filterOnClick: false,
+  restoreOnRightClick: false
+};
+
+/*
+ * File: Options.Margin.js
+ *
+*/
+
+/*
+  Object: Options.Margin
+  
+  Canvas drawing margins. 
+  
+  Syntax:
+  
+  (start code js)
+
+  Options.Margin = {
+    top: 0,
+    left: 0,
+    right: 0,
+    bottom: 0
+  };
+  
+  (end code)
+  
+  Example:
+  
+  (start code js)
+
+  var viz = new $jit.Viz({
+    Margin: {
+      right: 10,
+      bottom: 20
+    }
+  });
+  
+  (end code)
+
+  Parameters:
+  
+  top - (number) Default's *0*. Top margin.
+  left - (number) Default's *0*. Left margin.
+  right - (number) Default's *0*. Right margin.
+  bottom - (number) Default's *0*. Bottom margin.
+  
+*/
+
+Options.Margin = {
+  $extend: false,
+  
+  top: 0,
+  left: 0,
+  right: 0,
+  bottom: 0
+};
+
+/*
+ * File: Options.Canvas.js
+ *
+*/
+
+/*
+  Object: Options.Canvas
+  
+  These are Canvas general options, like where to append it in the DOM, its dimensions, background, 
+  and other more advanced options.
+  
+  Syntax:
+  
+  (start code js)
+
+  Options.Canvas = {
+    injectInto: 'id',
+    type: '2D', //'3D'
+    width: false,
+    height: false,
+    useCanvas: false,
+    withLabels: true,
+    background: false
+  };  
+  (end code)
+  
+  Example:
+  
+  (start code js)
+  var viz = new $jit.Viz({
+    injectInto: 'someContainerId',
+    width: 500,
+    height: 700
+  });
+  (end code)
+  
+  Parameters:
+  
+  injectInto - *required* (string|element) The id of the DOM container for the visualization. It can also be an Element provided that it has an id.
+  type - (string) Context type. Default's 2D but can be 3D for webGL enabled browsers.
+  width - (number) Default's to the *container's offsetWidth*. The width of the canvas.
+  height - (number) Default's to the *container's offsetHeight*. The height of the canvas.
+  useCanvas - (boolean|object) Default's *false*. You can pass another <Canvas> instance to be used by the visualization.
+  withLabels - (boolean) Default's *true*. Whether to use a label container for the visualization.
+  background - (boolean|object) Default's *false*. An object containing information about the rendering of a background canvas.
+*/
+
+Options.Canvas = {
+    $extend: true,
+    
+    injectInto: 'id',
+    type: '2D',
+    width: false,
+    height: false,
+    useCanvas: false,
+    withLabels: true,
+    background: false,
+    
+    Scene: {
+      Lighting: {
+        enable: false,
+        ambient: [1, 1, 1],
+        directional: {
+          direction: { x: -100, y: -100, z: -100 },
+          color: [0.5, 0.3, 0.1]
+        }
+      }
+    }
+};
+
+/*
+ * File: Options.Tree.js
+ *
+*/
+
+/*
+  Object: Options.Tree
+  
+  Options related to (strict) Tree layout algorithms. These options are used by the <ST> visualization.
+  
+  Syntax:
+  
+  (start code js)
+  Options.Tree = {
+    orientation: "left",
+    subtreeOffset: 8,
+    siblingOffset: 5,
+    indent:10,
+    multitree: false,
+    align:"center"
+  };
+  (end code)
+  
+  Example:
+  
+  (start code js)
+  var st = new $jit.ST({
+    orientation: 'left',
+    subtreeOffset: 1,
+    siblingOFfset: 5,
+    multitree: true
+  });
+  (end code)
+
+  Parameters:
+    
+  subtreeOffset - (number) Default's 8. Separation offset between subtrees.
+  siblingOffset - (number) Default's 5. Separation offset between siblings.
+  orientation - (string) Default's 'left'. Tree orientation layout. Possible values are 'left', 'top', 'right', 'bottom'.
+  align - (string) Default's *center*. Whether the tree alignment is 'left', 'center' or 'right'.
+  indent - (number) Default's 10. Used when *align* is left or right and shows an indentation between parent and children.
+  multitree - (boolean) Default's *false*. Used with the node $orn data property for creating multitrees.
+     
+*/
+Options.Tree = {
+    $extend: true,
+    
+    orientation: "left",
+    subtreeOffset: 8,
+    siblingOffset: 5,
+    indent:10,
+    multitree: false,
+    align:"center"
+};
+
+
+/*
+ * File: Options.Node.js
+ *
+*/
+
+/*
+  Object: Options.Node
+
+  Provides Node rendering options for Tree and Graph based visualizations.
+
+  Syntax:
+    
+  (start code js)
+  Options.Node = {
+    overridable: false,
+    type: 'circle',
+    color: '#ccb',
+    alpha: 1,
+    dim: 3,
+    height: 20,
+    width: 90,
+    autoHeight: false,
+    autoWidth: false,
+    lineWidth: 1,
+    transform: true,
+    align: "center",
+    angularWidth:1,
+    span:1,
+    CanvasStyles: {}
+  };
+  (end code)
+  
+  Example:
+  
+  (start code js)
+  var viz = new $jit.Viz({
+    Node: {
+      overridable: true,
+      width: 30,
+      autoHeight: true,
+      type: 'rectangle'
+    }
+  });
+  (end code)
+  
+  Parameters:
+
+  overridable - (boolean) Default's *false*. Determine whether or not general node properties can be overridden by a particular <Graph.Node>.
+  type - (string) Default's *circle*. Node's shape. Node built-in types include 'circle', 'rectangle', 'square', 'ellipse', 'triangle', 'star'. The default Node type might vary in each visualization. You can also implement (non built-in) custom Node types into your visualizations.
+  color - (string) Default's *#ccb*. Node color.
+  alpha - (number) Default's *1*. The Node's alpha value. *1* is for full opacity.
+  dim - (number) Default's *3*. An extra parameter used by 'circle', 'square', 'triangle' and 'star' node types. Depending on each shape, this parameter can set the radius of a circle, half the length of the side of a square, half the base and half the height of a triangle or the length of a side of a star (concave decagon).
+  height - (number) Default's *20*. Used by 'rectangle' and 'ellipse' node types. The height of the node shape.
+  width - (number) Default's *90*. Used by 'rectangle' and 'ellipse' node types. The width of the node shape.
+  autoHeight - (boolean) Default's *false*. Whether to set an auto height for the node depending on the content of the Node's label.
+  autoWidth - (boolean) Default's *false*. Whether to set an auto width for the node depending on the content of the Node's label.
+  lineWidth - (number) Default's *1*. Used only by some Node shapes. The line width of the strokes of a node.
+  transform - (boolean) Default's *true*. Only used by the <Hypertree> visualization. Whether to scale the nodes according to the moebius transformation.
+  align - (string) Default's *center*. Possible values are 'center', 'left' or 'right'. Used only by the <ST> visualization, these parameters are used for aligning nodes when some of they dimensions vary.
+  angularWidth - (number) Default's *1*. Used in radial layouts (like <RGraph> or <Sunburst> visualizations). The amount of relative 'space' set for a node.
+  span - (number) Default's *1*. Used in radial layouts (like <RGraph> or <Sunburst> visualizations). The angle span amount set for a node.
+  CanvasStyles - (object) Default's an empty object (i.e. {}). Attach any other canvas specific property that you'd set to the canvas context before plotting a Node.
+
+*/
+Options.Node = {
+  $extend: false,
+  
+  overridable: false,
+  type: 'circle',
+  color: '#ccb',
+  alpha: 1,
+  dim: 3,
+  height: 20,
+  width: 90,
+  autoHeight: false,
+  autoWidth: false,
+  lineWidth: 1,
+  transform: true,
+  align: "center",
+  angularWidth:1,
+  span:1,
+  //Raw canvas styles to be
+  //applied to the context instance
+  //before plotting a node
+  CanvasStyles: {}
+};
+
+
+/*
+ * File: Options.Edge.js
+ *
+*/
+
+/*
+  Object: Options.Edge
+
+  Provides Edge rendering options for Tree and Graph based visualizations.
+
+  Syntax:
+    
+  (start code js)
+  Options.Edge = {
+    overridable: false,
+    type: 'line',
+    color: '#ccb',
+    lineWidth: 1,
+    dim:15,
+    alpha: 1,
+    CanvasStyles: {}
+  };
+  (end code)
+  
+  Example:
+  
+  (start code js)
+  var viz = new $jit.Viz({
+    Edge: {
+      overridable: true,
+      type: 'line',
+      color: '#fff',
+      CanvasStyles: {
+        shadowColor: '#ccc',
+        shadowBlur: 10
+      }
+    }
+  });
+  (end code)
+  
+  Parameters:
+    
+   overridable - (boolean) Default's *false*. Determine whether or not general edges properties can be overridden by a particular <Graph.Adjacence>.
+   type - (string) Default's 'line'. Edge styles include 'line', 'hyperline', 'arrow'. The default Edge type might vary in each visualization. You can also implement custom Edge types.
+   color - (string) Default's '#ccb'. Edge color.
+   lineWidth - (number) Default's *1*. Line/Edge width.
+   alpha - (number) Default's *1*. The Edge's alpha value. *1* is for full opacity.
+   dim - (number) Default's *15*. An extra parameter used by other complex shapes such as quadratic, bezier or arrow, to determine the shape's diameter.
+   epsilon - (number) Default's *7*. Only used when using *enableForEdges* in <Options.Events>. This dimension is used to create an area for the line where the contains method for the edge returns *true*.
+   CanvasStyles - (object) Default's an empty object (i.e. {}). Attach any other canvas specific property that you'd set to the canvas context before plotting an Edge.
+
+  See also:
+   
+   If you want to know more about how to customize Node/Edge data per element, in the JSON or programmatically, take a look at this article.
+*/
+Options.Edge = {
+  $extend: false,
+  
+  overridable: false,
+  type: 'line',
+  color: '#ccb',
+  lineWidth: 1,
+  dim:15,
+  alpha: 1,
+  epsilon: 7,
+
+  //Raw canvas styles to be
+  //applied to the context instance
+  //before plotting an edge
+  CanvasStyles: {}
+};
+
+
+/*
+ * File: Options.Fx.js
+ *
+*/
+
+/*
+  Object: Options.Fx
+
+  Provides animation options like duration of the animations, frames per second and animation transitions.  
+
+  Syntax:
+  
+  (start code js)
+    Options.Fx = {
+      fps:40,
+      duration: 2500,
+      transition: $jit.Trans.Quart.easeInOut,
+      clearCanvas: true
+    };
+  (end code)
+  
+  Example:
+  
+  (start code js)
+  var viz = new $jit.Viz({
+    duration: 1000,
+    fps: 35,
+    transition: $jit.Trans.linear
+  });
+  (end code)
+  
+  Parameters:
+  
+  clearCanvas - (boolean) Default's *true*. Whether to clear the frame/canvas when the viz is plotted or animated.
+  duration - (number) Default's *2500*. Duration of the animation in milliseconds.
+  fps - (number) Default's *40*. Frames per second.
+  transition - (object) Default's *$jit.Trans.Quart.easeInOut*. The transition used for the animations. See below for a more detailed explanation.
+  
+  Object: $jit.Trans
+  
+  This object is used for specifying different animation transitions in all visualizations.
+
+  There are many different type of animation transitions.
+
+  linear:
+
+  Displays a linear transition
+
+  >Trans.linear
+  
+  (see Linear.png)
+
+  Quad:
+
+  Displays a Quadratic transition.
+
+  >Trans.Quad.easeIn
+  >Trans.Quad.easeOut
+  >Trans.Quad.easeInOut
+  
+ (see Quad.png)
+
+ Cubic:
+
+ Displays a Cubic transition.
+
+ >Trans.Cubic.easeIn
+ >Trans.Cubic.easeOut
+ >Trans.Cubic.easeInOut
+
+ (see Cubic.png)
+
+ Quart:
+
+ Displays a Quartetic transition.
+
+ >Trans.Quart.easeIn
+ >Trans.Quart.easeOut
+ >Trans.Quart.easeInOut
+
+ (see Quart.png)
+
+ Quint:
+
+ Displays a Quintic transition.
+
+ >Trans.Quint.easeIn
+ >Trans.Quint.easeOut
+ >Trans.Quint.easeInOut
+
+ (see Quint.png)
+
+ Expo:
+
+ Displays an Exponential transition.
+
+ >Trans.Expo.easeIn
+ >Trans.Expo.easeOut
+ >Trans.Expo.easeInOut
+
+ (see Expo.png)
+
+ Circ:
+
+ Displays a Circular transition.
+
+ >Trans.Circ.easeIn
+ >Trans.Circ.easeOut
+ >Trans.Circ.easeInOut
+
+ (see Circ.png)
+
+ Sine:
+
+ Displays a Sineousidal transition.
+
+ >Trans.Sine.easeIn
+ >Trans.Sine.easeOut
+ >Trans.Sine.easeInOut
+
+ (see Sine.png)
+
+ Back:
+
+ >Trans.Back.easeIn
+ >Trans.Back.easeOut
+ >Trans.Back.easeInOut
+
+ (see Back.png)
+
+ Bounce:
+
+ Bouncy transition.
+
+ >Trans.Bounce.easeIn
+ >Trans.Bounce.easeOut
+ >Trans.Bounce.easeInOut
+
+ (see Bounce.png)
+
+ Elastic:
+
+ Elastic curve.
+
+ >Trans.Elastic.easeIn
+ >Trans.Elastic.easeOut
+ >Trans.Elastic.easeInOut
+
+ (see Elastic.png)
+ Based on:
+     
+ Easing and Transition animation methods are based in the MooTools Framework <http://mootools.net>. Copyright (c) 2006-2010 Valerio Proietti, <http://mad4milk.net/>. MIT license <http://mootools.net/license.txt>.
+
+
+*/
+Options.Fx = {
+  $extend: true,
+  
+  fps:40,
+  duration: 2500,
+  transition: $jit.Trans.Quart.easeInOut,
+  clearCanvas: true
+};
+
+/*
+ * File: Options.Label.js
+ *
+*/
+/*
+  Object: Options.Label
+
+  Provides styling for Labels such as font size, family, etc. Also sets Node labels as HTML, SVG or Native canvas elements.  
+
+  Syntax:
+  
+  (start code js)
+    Options.Label = {
+      overridable: false,
+      type: 'HTML', //'SVG', 'Native'
+      style: ' ',
+      size: 10,
+      family: 'sans-serif',
+      textAlign: 'center',
+      textBaseline: 'alphabetic',
+      color: '#fff'
+    };
+  (end code)
+  
+  Example:
+  
+  (start code js)
+  var viz = new $jit.Viz({
+    Label: {
+      type: 'Native',
+      size: 11,
+      color: '#ccc'
+    }
+  });
+  (end code)
+  
+  Parameters:
+    
+  overridable - (boolean) Default's *false*. Determine whether or not general label properties can be overridden by a particular <Graph.Node>.
+  type - (string) Default's *HTML*. The type for the labels. Can be 'HTML', 'SVG' or 'Native' canvas labels.
+  style - (string) Default's *empty string*. Can be 'italic' or 'bold'. This parameter is only taken into account when using 'Native' canvas labels. For DOM based labels the className *node* is added to the DOM element for styling via CSS. You can also use <Options.Controller> methods to style individual labels.
+  size - (number) Default's *10*. The font's size. This parameter is only taken into account when using 'Native' canvas labels. For DOM based labels the className *node* is added to the DOM element for styling via CSS. You can also use <Options.Controller> methods to style individual labels.
+  family - (string) Default's *sans-serif*. The font's family. This parameter is only taken into account when using 'Native' canvas labels. For DOM based labels the className *node* is added to the DOM element for styling via CSS. You can also use <Options.Controller> methods to style individual labels.
+  color - (string) Default's *#fff*. The font's color. This parameter is only taken into account when using 'Native' canvas labels. For DOM based labels the className *node* is added to the DOM element for styling via CSS. You can also use <Options.Controller> methods to style individual labels.
+*/
+Options.Label = {
+  $extend: false,
+  
+  overridable: false,
+  type: 'HTML', //'SVG', 'Native'
+  style: ' ',
+  size: 10,
+  family: 'sans-serif',
+  textAlign: 'center',
+  textBaseline: 'alphabetic',
+  color: '#fff'
+};
+
+
+/*
+ * File: Options.Tips.js
+ *
+ */
+
+/*
+  Object: Options.Tips
+  
+  Tips options
+  
+  Syntax:
+    
+  (start code js)
+  Options.Tips = {
+    enable: false,
+    type: 'auto',
+    offsetX: 20,
+    offsetY: 20,
+    onShow: $.empty,
+    onHide: $.empty
+  };
+  (end code)
+  
+  Example:
+  
+  (start code js)
+  var viz = new $jit.Viz({
+    Tips: {
+      enable: true,
+      type: 'Native',
+      offsetX: 10,
+      offsetY: 10,
+      onShow: function(tip, node) {
+        tip.innerHTML = node.name;
+      }
+    }
+  });
+  (end code)
+
+  Parameters:
+
+  enable - (boolean) Default's *false*. If *true*, a tooltip will be shown when a node is hovered. The tooltip is a div DOM element having "tip" as CSS class. 
+  type - (string) Default's *auto*. Defines where to attach the MouseEnter/Leave tooltip events. Possible values are 'Native' to attach them to the canvas or 'HTML' to attach them to DOM label elements (if defined). 'auto' sets this property to the value of <Options.Label>'s *type* property.
+  offsetX - (number) Default's *20*. An offset added to the current tooltip x-position (which is the same as the current mouse position). Default's 20.
+  offsetY - (number) Default's *20*. An offset added to the current tooltip y-position (which is the same as the current mouse position). Default's 20.
+  onShow(tip, node) - This callack is used right before displaying a tooltip. The first formal parameter is the tip itself (which is a DivElement). The second parameter may be a <Graph.Node> for graph based visualizations or an object with label, value properties for charts.
+  onHide() - This callack is used when hiding a tooltip.
+
+*/
+Options.Tips = {
+  $extend: false,
+  
+  enable: false,
+  type: 'auto',
+  offsetX: 20,
+  offsetY: 20,
+  force: false,
+  onShow: $.empty,
+  onHide: $.empty
+};
+
+
+/*
+ * File: Options.NodeStyles.js
+ *
+ */
+
+/*
+  Object: Options.NodeStyles
+  
+  Apply different styles when a node is hovered or selected.
+  
+  Syntax:
+    
+  (start code js)
+  Options.NodeStyles = {
+    enable: false,
+    type: 'auto',
+    stylesHover: false,
+    stylesClick: false
+  };
+  (end code)
+  
+  Example:
+  
+  (start code js)
+  var viz = new $jit.Viz({
+    NodeStyles: {
+      enable: true,
+      type: 'Native',
+      stylesHover: {
+        dim: 30,
+        color: '#fcc'
+      },
+      duration: 600
+    }
+  });
+  (end code)
+
+  Parameters:
+  
+  enable - (boolean) Default's *false*. Whether to enable this option.
+  type - (string) Default's *auto*. Use this to attach the hover/click events in the nodes or the nodes labels (if they have been defined as DOM elements: 'HTML' or 'SVG', see <Options.Label> for more details). The default 'auto' value will set NodeStyles to the same type defined for <Options.Label>.
+  stylesHover - (boolean|object) Default's *false*. An object with node styles just like the ones defined for <Options.Node> or *false* otherwise.
+  stylesClick - (boolean|object) Default's *false*. An object with node styles just like the ones defined for <Options.Node> or *false* otherwise.
+*/
+
+Options.NodeStyles = {
+  $extend: false,
+  
+  enable: false,
+  type: 'auto',
+  stylesHover: false,
+  stylesClick: false
+};
+
+
+/*
+ * File: Options.Events.js
+ *
+*/
+
+/*
+  Object: Options.Events
+  
+  Configuration for adding mouse/touch event handlers to Nodes.
+  
+  Syntax:
+  
+  (start code js)
+  Options.Events = {
+    enable: false,
+    enableForEdges: false,
+    type: 'auto',
+    onClick: $.empty,
+    onRightClick: $.empty,
+    onMouseMove: $.empty,
+    onMouseEnter: $.empty,
+    onMouseLeave: $.empty,
+    onDragStart: $.empty,
+    onDragMove: $.empty,
+    onDragCancel: $.empty,
+    onDragEnd: $.empty,
+    onTouchStart: $.empty,
+    onTouchMove: $.empty,
+    onTouchEnd: $.empty,
+    onTouchCancel: $.empty,
+    onMouseWheel: $.empty
+  };
+  (end code)
+  
+  Example:
+  
+  (start code js)
+  var viz = new $jit.Viz({
+    Events: {
+      enable: true,
+      onClick: function(node, eventInfo, e) {
+        viz.doSomething();
+      },
+      onMouseEnter: function(node, eventInfo, e) {
+        viz.canvas.getElement().style.cursor = 'pointer';
+      },
+      onMouseLeave: function(node, eventInfo, e) {
+        viz.canvas.getElement().style.cursor = '';
+      }
+    }
+  });
+  (end code)
+  
+  Parameters:
+  
+  enable - (boolean) Default's *false*. Whether to enable the Event system.
+  enableForEdges - (boolean) Default's *false*. Whether to track events also in arcs. If *true* the same callbacks -described below- are used for nodes *and* edges. A simple duck type check for edges is to check for *node.nodeFrom*.
+  type - (string) Default's 'auto'. Whether to attach the events onto the HTML labels (via event delegation) or to use the custom 'Native' canvas Event System of the library. 'auto' is set when you let the <Options.Label> *type* parameter decide this.
+  onClick(node, eventInfo, e) - Triggered when a user performs a click in the canvas. *node* is the <Graph.Node> clicked or false if no node has been clicked. *e* is the grabbed event (should return the native event in a cross-browser manner). *eventInfo* is an object containing useful methods like *getPos* to get the mouse position relative to the canvas. 
+  onRightClick(node, eventInfo, e) - Triggered when a user performs a right click in the canvas. *node* is the <Graph.Node> right clicked or false if no node has been clicked. *e* is the grabbed event (should return the native event in a cross-browser manner). *eventInfo* is an object containing useful methods like *getPos* to get the mouse position relative to the canvas. 
+  onMouseMove(node, eventInfo, e) - Triggered when the user moves the mouse. *node* is the <Graph.Node> under the cursor as it's moving over the canvas or false if no node has been clicked. *e* is the grabbed event (should return the native event in a cross-browser manner).  *eventInfo* is an object containing useful methods like *getPos* to get the mouse position relative to the canvas.
+  onMouseEnter(node, eventInfo, e) - Triggered when a user moves the mouse over a node. *node* is the <Graph.Node> that the mouse just entered. *e* is the grabbed event (should return the native event in a cross-browser manner). *eventInfo* is an object containing useful methods like *getPos* to get the mouse position relative to the canvas. 
+  onMouseLeave(node, eventInfo, e) - Triggered when the user mouse-outs a node. *node* is the <Graph.Node> 'mouse-outed'. *e* is the grabbed event (should return the native event in a cross-browser manner). *eventInfo* is an object containing useful methods like *getPos* to get the mouse position relative to the canvas. 
+  onDragStart(node, eventInfo, e) - Triggered when the user mouse-downs over a node. *node* is the <Graph.Node> being pressed. *e* is the grabbed event (should return the native event in a cross-browser manner). *eventInfo* is an object containing useful methods like *getPos* to get the mouse position relative to the canvas. 
+  onDragMove(node, eventInfo, e) - Triggered when a user, after pressing the mouse button over a node, moves the mouse around. *node* is the <Graph.Node> being dragged. *e* is the grabbed event (should return the native event in a cross-browser manner). *eventInfo* is an object containing useful methods like *getPos* to get the mouse position relative to the canvas. 
+  onDragEnd(node, eventInfo, e) - Triggered when a user finished dragging a node. *node* is the <Graph.Node> being dragged. *e* is the grabbed event (should return the native event in a cross-browser manner). *eventInfo* is an object containing useful methods like *getPos* to get the mouse position relative to the canvas. 
+  onDragCancel(node, eventInfo, e) - Triggered when the user releases the mouse button over a <Graph.Node> that wasn't dragged (i.e. the user didn't perform any mouse movement after pressing the mouse button). *node* is the <Graph.Node> being dragged. *e* is the grabbed event (should return the native event in a cross-browser manner). *eventInfo* is an object containing useful methods like *getPos* to get the mouse position relative to the canvas. 
+  onTouchStart(node, eventInfo, e) - Behaves just like onDragStart. 
+  onTouchMove(node, eventInfo, e) - Behaves just like onDragMove. 
+  onTouchEnd(node, eventInfo, e) - Behaves just like onDragEnd. 
+  onTouchCancel(node, eventInfo, e) - Behaves just like onDragCancel.
+  onMouseWheel(delta, e) - Triggered when the user uses the mouse scroll over the canvas. *delta* is 1 or -1 depending on the sense of the mouse scroll.
+*/
+
+Options.Events = {
+  $extend: false,
+  
+  enable: false,
+  enableForEdges: false,
+  type: 'auto',
+  onClick: $.empty,
+  onRightClick: $.empty,
+  onMouseMove: $.empty,
+  onMouseEnter: $.empty,
+  onMouseLeave: $.empty,
+  onDragStart: $.empty,
+  onDragMove: $.empty,
+  onDragCancel: $.empty,
+  onDragEnd: $.empty,
+  onTouchStart: $.empty,
+  onTouchMove: $.empty,
+  onTouchEnd: $.empty,
+  onMouseWheel: $.empty
+};
+
+/*
+ * File: Options.Navigation.js
+ *
+*/
+
+/*
+  Object: Options.Navigation
+  
+  Panning and zooming options for Graph/Tree based visualizations. These options are implemented 
+  by all visualizations except charts (<AreaChart>, <BarChart> and <PieChart>).
+  
+  Syntax:
+  
+  (start code js)
+
+  Options.Navigation = {
+    enable: false,
+    type: 'auto',
+    panning: false, //true, 'avoid nodes'
+    zooming: false
+  };
+  
+  (end code)
+  
+  Example:
+    
+  (start code js)
+  var viz = new $jit.Viz({
+    Navigation: {
+      enable: true,
+      panning: 'avoid nodes',
+      zooming: 20
+    }
+  });
+  (end code)
+  
+  Parameters:
+  
+  enable - (boolean) Default's *false*. Whether to enable Navigation capabilities.
+  type - (string) Default's 'auto'. Whether to attach the navigation events onto the HTML labels (via event delegation) or to use the custom 'Native' canvas Event System of the library. When 'auto' set when you let the <Options.Label> *type* parameter decide this.
+  panning - (boolean|string) Default's *false*. Set this property to *true* if you want to add Drag and Drop panning support to the visualization. You can also set this parameter to 'avoid nodes' to enable DnD panning but disable it if the DnD is taking place over a node. This is useful when some other events like Drag & Drop for nodes are added to <Graph.Nodes>.
+  zooming - (boolean|number) Default's *false*. Set this property to a numeric value to turn mouse-scroll zooming on. The number will be proportional to the mouse-scroll sensitivity.
+  
+*/
+
+Options.Navigation = {
+  $extend: false,
+  
+  enable: false,
+  type: 'auto',
+  panning: false, //true | 'avoid nodes'
+  zooming: false
+};
+
+/*
+ * File: Options.Controller.js
+ *
+*/
+
+/*
+  Object: Options.Controller
+  
+  Provides controller methods. Controller methods are callback functions that get called at different stages 
+  of the animation, computing or plotting of the visualization.
+  
+  Implemented by:
+    
+  All visualizations except charts (<AreaChart>, <BarChart> and <PieChart>).
+  
+  Syntax:
+  
+  (start code js)
+
+  Options.Controller = {
+    onBeforeCompute: $.empty,
+    onAfterCompute:  $.empty,
+    onCreateLabel:   $.empty,
+    onPlaceLabel:    $.empty,
+    onComplete:      $.empty,
+    onBeforePlotLine:$.empty,
+    onAfterPlotLine: $.empty,
+    onBeforePlotNode:$.empty,
+    onAfterPlotNode: $.empty,
+    request:         false
+  };
+  
+  (end code)
+  
+  Example:
+    
+  (start code js)
+  var viz = new $jit.Viz({
+    onBeforePlotNode: function(node) {
+      if(node.selected) {
+        node.setData('color', '#ffc');
+      } else {
+        node.removeData('color');
+      }
+    },
+    onBeforePlotLine: function(adj) {
+      if(adj.nodeFrom.selected && adj.nodeTo.selected) {
+        adj.setData('color', '#ffc');
+      } else {
+        adj.removeData('color');
+      }
+    },
+    onAfterCompute: function() {
+      alert("computed!");
+    }
+  });
+  (end code)
+  
+  Parameters:
+
+   onBeforeCompute(node) - This method is called right before performing all computations and animations. The selected <Graph.Node> is passed as parameter.
+   onAfterCompute() - This method is triggered after all animations or computations ended.
+   onCreateLabel(domElement, node) - This method receives a new label DIV element as first parameter, and the corresponding <Graph.Node> as second parameter. This method will only be called once for each label. This method is useful when adding events or styles to the labels used by the JIT.
+   onPlaceLabel(domElement, node) - This method receives a label DIV element as first parameter and the corresponding <Graph.Node> as second parameter. This method is called each time a label has been placed in the visualization, for example at each step of an animation, and thus it allows you to update the labels properties, such as size or position. Note that onPlaceLabel will be triggered after updating the labels positions. That means that, for example, the left and top css properties are already updated to match the nodes positions. Width and height properties are not set however.
+   onBeforePlotNode(node) - This method is triggered right before plotting each <Graph.Node>. This method is useful for changing a node style right before plotting it.
+   onAfterPlotNode(node) - This method is triggered right after plotting each <Graph.Node>.
+   onBeforePlotLine(adj) - This method is triggered right before plotting a <Graph.Adjacence>. This method is useful for adding some styles to a particular edge before being plotted.
+   onAfterPlotLine(adj) - This method is triggered right after plotting a <Graph.Adjacence>.
+
+    *Used in <ST>, <TM.Base> and <Icicle> visualizations*
+    
+    request(nodeId, level, onComplete) - This method is used for buffering information into the visualization. When clicking on an empty node, the visualization will make a request for this node's subtrees, specifying a given level for this subtree (defined by _levelsToShow_). Once the request is completed, the onComplete callback should be called with the given result. This is useful to provide on-demand information into the visualizations withought having to load the entire information from start. The parameters used by this method are _nodeId_, which is the id of the root of the subtree to request, _level_ which is the depth of the subtree to be requested (0 would mean just the root node). _onComplete_ is an object having the callback method _onComplete.onComplete(json)_ that should be called once the json has been retrieved.  
+ */
+Options.Controller = {
+  $extend: true,
+  
+  onBeforeCompute: $.empty,
+  onAfterCompute:  $.empty,
+  onCreateLabel:   $.empty,
+  onPlaceLabel:    $.empty,
+  onComplete:      $.empty,
+  onBeforePlotLine:$.empty,
+  onAfterPlotLine: $.empty,
+  onBeforePlotNode:$.empty,
+  onAfterPlotNode: $.empty,
+  request:         false
+};
+
+
+/*
+ * File: Extras.js
+ * 
+ * Provides Extras such as Tips and Style Effects.
+ * 
+ * Description:
+ * 
+ * Provides the <Tips> and <NodeStyles> classes and functions.
+ *
+ */
+
+/*
+ * Manager for mouse events (clicking and mouse moving).
+ * 
+ * This class is used for registering objects implementing onClick
+ * and onMousemove methods. These methods are called when clicking or
+ * moving the mouse around  the Canvas.
+ * For now, <Tips> and <NodeStyles> are classes implementing these methods.
+ * 
+ */
+var ExtrasInitializer = {
+  initialize: function(className, viz) {
+    this.viz = viz;
+    this.canvas = viz.canvas;
+    this.config = viz.config[className];
+    this.nodeTypes = viz.fx.nodeTypes;
+    var type = this.config.type;
+    this.dom = type == 'auto'? (viz.config.Label.type != 'Native') : (type != 'Native');
+    this.labelContainer = this.dom && viz.labels.getLabelContainer();
+    this.isEnabled() && this.initializePost();
+  },
+  initializePost: $.empty,
+  setAsProperty: $.lambda(false),
+  isEnabled: function() {
+    return this.config.enable;
+  },
+  isLabel: function(e, win, group) {
+    e = $.event.get(e, win);
+    var labelContainer = this.labelContainer,
+        target = e.target || e.srcElement,
+        related = e.relatedTarget;
+    if(group) {
+      return related && related == this.viz.canvas.getCtx().canvas 
+          && !!target && this.isDescendantOf(target, labelContainer);
+    } else {
+      return this.isDescendantOf(target, labelContainer);
+    }
+  },
+  isDescendantOf: function(elem, par) {
+    while(elem && elem.parentNode) {
+      if(elem.parentNode == par)
+        return elem;
+      elem = elem.parentNode;
+    }
+    return false;
+  }
+};
+
+var EventsInterface = {
+  onMouseUp: $.empty,
+  onMouseDown: $.empty,
+  onMouseMove: $.empty,
+  onMouseOver: $.empty,
+  onMouseOut: $.empty,
+  onMouseWheel: $.empty,
+  onTouchStart: $.empty,
+  onTouchMove: $.empty,
+  onTouchEnd: $.empty,
+  onTouchCancel: $.empty
+};
+
+var MouseEventsManager = new Class({
+  initialize: function(viz) {
+    this.viz = viz;
+    this.canvas = viz.canvas;
+    this.node = false;
+    this.edge = false;
+    this.registeredObjects = [];
+    this.attachEvents();
+  },
+  
+  attachEvents: function() {
+    var htmlCanvas = this.canvas.getElement(), 
+        that = this;
+    htmlCanvas.oncontextmenu = $.lambda(false);
+    $.addEvents(htmlCanvas, {
+      'mouseup': function(e, win) {
+        var event = $.event.get(e, win);
+        that.handleEvent('MouseUp', e, win, 
+            that.makeEventObject(e, win), 
+            $.event.isRightClick(event));
+      },
+      'mousedown': function(e, win) {
+        var event = $.event.get(e, win);
+        that.handleEvent('MouseDown', e, win, that.makeEventObject(e, win), 
+            $.event.isRightClick(event));
+      },
+      'mousemove': function(e, win) {
+        that.handleEvent('MouseMove', e, win, that.makeEventObject(e, win));
+      },
+      'mouseover': function(e, win) {
+        that.handleEvent('MouseOver', e, win, that.makeEventObject(e, win));
+      },
+      'mouseout': function(e, win) {
+        that.handleEvent('MouseOut', e, win, that.makeEventObject(e, win));
+      },
+      'touchstart': function(e, win) {
+        that.handleEvent('TouchStart', e, win, that.makeEventObject(e, win));
+      },
+      'touchmove': function(e, win) {
+        that.handleEvent('TouchMove', e, win, that.makeEventObject(e, win));
+      },
+      'touchend': function(e, win) {
+        that.handleEvent('TouchEnd', e, win, that.makeEventObject(e, win));
+      }
+    });
+    //attach mousewheel event
+    var handleMouseWheel = function(e, win) {
+      var event = $.event.get(e, win);
+      var wheel = $.event.getWheel(event);
+      that.handleEvent('MouseWheel', e, win, wheel);
+    };
+    //TODO(nico): this is a horrible check for non-gecko browsers!
+    if(!document.getBoxObjectFor && window.mozInnerScreenX == null) {
+      $.addEvent(htmlCanvas, 'mousewheel', handleMouseWheel);
+    } else {
+      htmlCanvas.addEventListener('DOMMouseScroll', handleMouseWheel, false);
+    }
+  },
+  
+  register: function(obj) {
+    this.registeredObjects.push(obj);
+  },
+  
+  handleEvent: function() {
+    var args = Array.prototype.slice.call(arguments),
+        type = args.shift();
+    for(var i=0, regs=this.registeredObjects, l=regs.length; i<l; i++) {
+      regs[i]['on' + type].apply(regs[i], args);
+    }
+  },
+  
+  makeEventObject: function(e, win) {
+    var that = this,
+        graph = this.viz.graph,
+        fx = this.viz.fx,
+        ntypes = fx.nodeTypes,
+        etypes = fx.edgeTypes;
+    return {
+      pos: false,
+      node: false,
+      edge: false,
+      contains: false,
+      getNodeCalled: false,
+      getEdgeCalled: false,
+      getPos: function() {
+        //TODO(nico): check why this can't be cache anymore when using edge detection
+        //if(this.pos) return this.pos;
+        var canvas = that.viz.canvas,
+            s = canvas.getSize(),
+            p = canvas.getPos(),
+            ox = canvas.translateOffsetX,
+            oy = canvas.translateOffsetY,
+            sx = canvas.scaleOffsetX,
+            sy = canvas.scaleOffsetY,
+            pos = $.event.getPos(e, win);
+        this.pos = {
+          x: (pos.x - p.x - s.width/2 - ox) * 1/sx,
+          y: (pos.y - p.y - s.height/2 - oy) * 1/sy
+        };
+        return this.pos;
+      },
+      getNode: function() {
+        if(this.getNodeCalled) return this.node;
+        this.getNodeCalled = true;
+        for(var id in graph.nodes) {
+          var n = graph.nodes[id],
+              geom = n && ntypes[n.getData('type')],
+              contains = geom && geom.contains && geom.contains.call(fx, n, this.getPos());
+          if(contains) {
+            this.contains = contains;
+            return that.node = this.node = n;
+          }
+        }
+        return that.node = this.node = false;
+      },
+      getEdge: function() {
+        if(this.getEdgeCalled) return this.edge;
+        this.getEdgeCalled = true;
+        var hashset = {};
+        for(var id in graph.edges) {
+          var edgeFrom = graph.edges[id];
+          hashset[id] = true;
+          for(var edgeId in edgeFrom) {
+            if(edgeId in hashset) continue;
+            var e = edgeFrom[edgeId],
+                geom = e && etypes[e.getData('type')],
+                contains = geom && geom.contains && geom.contains.call(fx, e, this.getPos());
+            if(contains) {
+              this.contains = contains;
+              return that.edge = this.edge = e;
+            }
+          }
+        }
+        return that.edge = this.edge = false;
+      },
+      getContains: function() {
+        if(this.getNodeCalled) return this.contains;
+        this.getNode();
+        return this.contains;
+      }
+    };
+  }
+});
+
+/* 
+ * Provides the initialization function for <NodeStyles> and <Tips> implemented 
+ * by all main visualizations.
+ *
+ */
+var Extras = {
+  initializeExtras: function() {
+    var mem = new MouseEventsManager(this), that = this;
+    $.each(['NodeStyles', 'Tips', 'Navigation', 'Events'], function(k) {
+      var obj = new Extras.Classes[k](k, that);
+      if(obj.isEnabled()) {
+        mem.register(obj);
+      }
+      if(obj.setAsProperty()) {
+        that[k.toLowerCase()] = obj;
+      }
+    });
+  }   
+};
+
+Extras.Classes = {};
+/*
+  Class: Events
+   
+  This class defines an Event API to be accessed by the user.
+  The methods implemented are the ones defined in the <Options.Events> object.
+*/
+
+Extras.Classes.Events = new Class({
+  Implements: [ExtrasInitializer, EventsInterface],
+  
+  initializePost: function() {
+    this.fx = this.viz.fx;
+    this.ntypes = this.viz.fx.nodeTypes;
+    this.etypes = this.viz.fx.edgeTypes;
+    
+    this.hovered = false;
+    this.pressed = false;
+    this.touched = false;
+
+    this.touchMoved = false;
+    this.moved = false;
+    
+  },
+  
+  setAsProperty: $.lambda(true),
+  
+  onMouseUp: function(e, win, event, isRightClick) {
+    var evt = $.event.get(e, win);
+    if(!this.moved) {
+      if(isRightClick) {
+        this.config.onRightClick(this.hovered, event, evt);
+      } else {
+        this.config.onClick(this.pressed, event, evt);
+      }
+    }
+    if(this.pressed) {
+      if(this.moved) {
+        this.config.onDragEnd(this.pressed, event, evt);
+      } else {
+        this.config.onDragCancel(this.pressed, event, evt);
+      }
+      this.pressed = this.moved = false;
+    }
+  },
+
+  onMouseOut: function(e, win, event) {
+   //mouseout a label
+   var evt = $.event.get(e, win), label;
+   if(this.dom && (label = this.isLabel(e, win, true))) {
+     this.config.onMouseLeave(this.viz.graph.getNode(label.id),
+                              event, evt);
+     this.hovered = false;
+     return;
+   }
+   //mouseout canvas
+   var rt = evt.relatedTarget,
+       canvasWidget = this.canvas.getElement();
+   while(rt && rt.parentNode) {
+     if(canvasWidget == rt.parentNode) return;
+     rt = rt.parentNode;
+   }
+   if(this.hovered) {
+     this.config.onMouseLeave(this.hovered,
+         event, evt);
+     this.hovered = false;
+   }
+  },
+  
+  onMouseOver: function(e, win, event) {
+    //mouseover a label
+    var evt = $.event.get(e, win), label;
+    if(this.dom && (label = this.isLabel(e, win, true))) {
+      this.hovered = this.viz.graph.getNode(label.id);
+      this.config.onMouseEnter(this.hovered,
+                               event, evt);
+    }
+  },
+  
+  onMouseMove: function(e, win, event) {
+   var label, evt = $.event.get(e, win);
+   if(this.pressed) {
+     this.moved = true;
+     this.config.onDragMove(this.pressed, event, evt);
+     return;
+   }
+   if(this.dom) {
+     this.config.onMouseMove(this.hovered,
+         event, evt);
+   } else {
+     if(this.hovered) {
+       var hn = this.hovered;
+       var geom = hn.nodeFrom? this.etypes[hn.getData('type')] : this.ntypes[hn.getData('type')];
+       var contains = geom && geom.contains 
+         && geom.contains.call(this.fx, hn, event.getPos());
+       if(contains) {
+         this.config.onMouseMove(hn, event, evt);
+         return;
+       } else {
+         this.config.onMouseLeave(hn, event, evt);
+         this.hovered = false;
+       }
+     }
+     if(this.hovered = (event.getNode() || (this.config.enableForEdges && event.getEdge()))) {
+       this.config.onMouseEnter(this.hovered, event, evt);
+     } else {
+       this.config.onMouseMove(false, event, evt);
+     }
+   }
+  },
+  
+  onMouseWheel: function(e, win, delta) {
+    this.config.onMouseWheel(delta, $.event.get(e, win));
+  },
+  
+  onMouseDown: function(e, win, event) {
+    var evt = $.event.get(e, win), label;
+    if(this.dom) {
+      if(label = this.isLabel(e, win)) {
+        this.pressed = this.viz.graph.getNode(label.id);
+      }
+    } else {
+      this.pressed = event.getNode() || (this.config.enableForEdges && event.getEdge());
+    }
+    this.pressed && this.config.onDragStart(this.pressed, event, evt);
+  },
+  
+  onTouchStart: function(e, win, event) {
+    var evt = $.event.get(e, win), label;
+    if(this.dom && (label = this.isLabel(e, win))) {
+      this.touched = this.viz.graph.getNode(label.id);
+    } else {
+      this.touched = event.getNode() || (this.config.enableForEdges && event.getEdge());
+    }
+    this.touched && this.config.onTouchStart(this.touched, event, evt);
+  },
+  
+  onTouchMove: function(e, win, event) {
+    var evt = $.event.get(e, win);
+    if(this.touched) {
+      this.touchMoved = true;
+      this.config.onTouchMove(this.touched, event, evt);
+    }
+  },
+  
+  onTouchEnd: function(e, win, event) {
+    var evt = $.event.get(e, win);
+    if(this.touched) {
+      if(this.touchMoved) {
+        this.config.onTouchEnd(this.touched, event, evt);
+      } else {
+        this.config.onTouchCancel(this.touched, event, evt);
+      }
+      this.touched = this.touchMoved = false;
+    }
+  }
+});
+
+/*
+   Class: Tips
+    
+   A class containing tip related functions. This class is used internally.
+   
+   Used by:
+   
+   <ST>, <Sunburst>, <Hypertree>, <RGraph>, <TM>, <ForceDirected>, <Icicle>
+   
+   See also:
+   
+   <Options.Tips>
+*/
+
+Extras.Classes.Tips = new Class({
+  Implements: [ExtrasInitializer, EventsInterface],
+  
+  initializePost: function() {
+    //add DOM tooltip
+    if(document.body) {
+      var tip = $('_tooltip') || document.createElement('div');
+      tip.id = '_tooltip';
+      tip.className = 'tip';
+      $.extend(tip.style, {
+        position: 'absolute',
+        display: 'none',
+        zIndex: 13000
+      });
+      document.body.appendChild(tip);
+      this.tip = tip;
+      this.node = false;
+    }
+  },
+  
+  setAsProperty: $.lambda(true),
+  
+  onMouseOut: function(e, win) {
+    //mouseout a label
+    var evt = $.event.get(e, win);
+    if(this.dom && this.isLabel(e, win, true)) {
+      this.hide(true);
+      return;
+    }
+    //mouseout canvas
+    var rt = e.relatedTarget,
+        canvasWidget = this.canvas.getElement();
+    while(rt && rt.parentNode) {
+      if(canvasWidget == rt.parentNode) return;
+      rt = rt.parentNode;
+    }
+    this.hide(false);
+  },
+  
+  onMouseOver: function(e, win) {
+    //mouseover a label
+    var label;
+    if(this.dom && (label = this.isLabel(e, win, false))) {
+      this.node = this.viz.graph.getNode(label.id);
+      this.config.onShow(this.tip, this.node, label);
+    }
+  },
+  
+  onMouseMove: function(e, win, opt) {
+    if(this.dom && this.isLabel(e, win)) {
+      this.setTooltipPosition($.event.getPos(e, win));
+    }
+    if(!this.dom) {
+      var node = opt.getNode();
+      if(!node) {
+        this.hide(true);
+        return;
+      }
+      if(this.config.force || !this.node || this.node.id != node.id) {
+        this.node = node;
+        this.config.onShow(this.tip, node, opt.getContains());
+      }
+      this.setTooltipPosition($.event.getPos(e, win));
+    }
+  },
+  
+  setTooltipPosition: function(pos) {
+    var tip = this.tip, 
+        style = tip.style, 
+        cont = this.config;
+    style.display = '';
+    //get window dimensions
+    var win = {
+      'height': document.body.clientHeight,
+      'width': document.body.clientWidth
+    };
+    //get tooltip dimensions
+    var obj = {
+      'width': tip.offsetWidth,
+      'height': tip.offsetHeight  
+    };
+    //set tooltip position
+    var x = cont.offsetX, y = cont.offsetY;
+    style.top = ((pos.y + y + obj.height > win.height)?  
+        (pos.y - obj.height - y) : pos.y + y) + 'px';
+    style.left = ((pos.x + obj.width + x > win.width)? 
+        (pos.x - obj.width - x) : pos.x + x) + 'px';
+  },
+  
+  hide: function(triggerCallback) {
+    this.tip.style.display = 'none';
+    triggerCallback && this.config.onHide();
+  }
+});
+
+/*
+  Class: NodeStyles
+   
+  Change node styles when clicking or hovering a node. This class is used internally.
+  
+  Used by:
+  
+  <ST>, <Sunburst>, <Hypertree>, <RGraph>, <TM>, <ForceDirected>, <Icicle>
+  
+  See also:
+  
+  <Options.NodeStyles>
+*/
+Extras.Classes.NodeStyles = new Class({
+  Implements: [ExtrasInitializer, EventsInterface],
+  
+  initializePost: function() {
+    this.fx = this.viz.fx;
+    this.types = this.viz.fx.nodeTypes;
+    this.nStyles = this.config;
+    this.nodeStylesOnHover = this.nStyles.stylesHover;
+    this.nodeStylesOnClick = this.nStyles.stylesClick;
+    this.hoveredNode = false;
+    this.fx.nodeFxAnimation = new Animation();
+    
+    this.down = false;
+    this.move = false;
+  },
+  
+  onMouseOut: function(e, win) {
+    this.down = this.move = false;
+    if(!this.hoveredNode) return;
+    //mouseout a label
+    if(this.dom && this.isLabel(e, win, true)) {
+      this.toggleStylesOnHover(this.hoveredNode, false);
+    }
+    //mouseout canvas
+    var rt = e.relatedTarget,
+        canvasWidget = this.canvas.getElement();
+    while(rt && rt.parentNode) {
+      if(canvasWidget == rt.parentNode) return;
+      rt = rt.parentNode;
+    }
+    this.toggleStylesOnHover(this.hoveredNode, false);
+    this.hoveredNode = false;
+  },
+  
+  onMouseOver: function(e, win) {
+    //mouseover a label
+    var label;
+    if(this.dom && (label = this.isLabel(e, win, true))) {
+      var node = this.viz.graph.getNode(label.id);
+      if(node.selected) return;
+      this.hoveredNode = node;
+      this.toggleStylesOnHover(this.hoveredNode, true);
+    }
+  },
+  
+  onMouseDown: function(e, win, event, isRightClick) {
+    if(isRightClick) return;
+    var label;
+    if(this.dom && (label = this.isLabel(e, win))) {
+      this.down = this.viz.graph.getNode(label.id);
+    } else if(!this.dom) {
+      this.down = event.getNode();
+    }
+    this.move = false;
+  },
+  
+  onMouseUp: function(e, win, event, isRightClick) {
+    if(isRightClick) return;
+    if(!this.move) {
+      this.onClick(event.getNode());
+    }
+    this.down = this.move = false;
+  },
+  
+  getRestoredStyles: function(node, type) {
+    var restoredStyles = {}, 
+        nStyles = this['nodeStylesOn' + type];
+    for(var prop in nStyles) {
+      restoredStyles[prop] = node.styles['$' + prop];
+    }
+    return restoredStyles;
+  },
+  
+  toggleStylesOnHover: function(node, set) {
+    if(this.nodeStylesOnHover) {
+      this.toggleStylesOn('Hover', node, set);
+    }
+  },
+
+  toggleStylesOnClick: function(node, set) {
+    if(this.nodeStylesOnClick) {
+      this.toggleStylesOn('Click', node, set);
+    }
+  },
+  
+  toggleStylesOn: function(type, node, set) {
+    var viz = this.viz;
+    var nStyles = this.nStyles;
+    if(set) {
+      var that = this;
+      if(!node.styles) {
+        node.styles = $.merge(node.data, {});
+      }
+      for(var s in this['nodeStylesOn' + type]) {
+        var $s = '$' + s;
+        if(!($s in node.styles)) {
+            node.styles[$s] = node.getData(s); 
+        }
+      }
+      viz.fx.nodeFx($.extend({
+        'elements': {
+          'id': node.id,
+          'properties': that['nodeStylesOn' + type]
+         },
+         transition: Trans.Quart.easeOut,
+         duration:300,
+         fps:40
+      }, this.config));
+    } else {
+      var restoredStyles = this.getRestoredStyles(node, type);
+      viz.fx.nodeFx($.extend({
+        'elements': {
+          'id': node.id,
+          'properties': restoredStyles
+         },
+         transition: Trans.Quart.easeOut,
+         duration:300,
+         fps:40
+      }, this.config));
+    }
+  },
+
+  onClick: function(node) {
+    if(!node) return;
+    var nStyles = this.nodeStylesOnClick;
+    if(!nStyles) return;
+    //if the node is selected then unselect it
+    if(node.selected) {
+      this.toggleStylesOnClick(node, false);
+      delete node.selected;
+    } else {
+      //unselect all selected nodes...
+      this.viz.graph.eachNode(function(n) {
+        if(n.selected) {
+          for(var s in nStyles) {
+            n.setData(s, n.styles['$' + s], 'end');
+          }
+          delete n.selected;
+        }
+      });
+      //select clicked node
+      this.toggleStylesOnClick(node, true);
+      node.selected = true;
+      delete node.hovered;
+      this.hoveredNode = false;
+    }
+  },
+  
+  onMouseMove: function(e, win, event) {
+    //if mouse button is down and moving set move=true
+    if(this.down) this.move = true;
+    //already handled by mouseover/out
+    if(this.dom && this.isLabel(e, win)) return;
+    var nStyles = this.nodeStylesOnHover;
+    if(!nStyles) return;
+    
+    if(!this.dom) {
+      if(this.hoveredNode) {
+        var geom = this.types[this.hoveredNode.getData('type')];
+        var contains = geom && geom.contains && geom.contains.call(this.fx, 
+            this.hoveredNode, event.getPos());
+        if(contains) return;
+      }
+      var node = event.getNode();
+      //if no node is being hovered then just exit
+      if(!this.hoveredNode && !node) return;
+      //if the node is hovered then exit
+      if(node.hovered) return;
+      //select hovered node
+      if(node && !node.selected) {
+        //check if an animation is running and exit it
+        this.fx.nodeFxAnimation.stopTimer();
+        //unselect all hovered nodes...
+        this.viz.graph.eachNode(function(n) {
+          if(n.hovered && !n.selected) {
+            for(var s in nStyles) {
+              n.setData(s, n.styles['$' + s], 'end');
+            }
+            delete n.hovered;
+          }
+        });
+        //select hovered node
+        node.hovered = true;
+        this.hoveredNode = node;
+        this.toggleStylesOnHover(node, true);
+      } else if(this.hoveredNode && !this.hoveredNode.selected) {
+        //check if an animation is running and exit it
+        this.fx.nodeFxAnimation.stopTimer();
+        //unselect hovered node
+        this.toggleStylesOnHover(this.hoveredNode, false);
+        delete this.hoveredNode.hovered;
+        this.hoveredNode = false;
+      }
+    }
+  }
+});
+
+Extras.Classes.Navigation = new Class({
+  Implements: [ExtrasInitializer, EventsInterface],
+  
+  initializePost: function() {
+    this.pos = false;
+    this.pressed = false;
+  },
+  
+  onMouseWheel: function(e, win, scroll) {
+    if(!this.config.zooming) return;
+    $.event.stop($.event.get(e, win));
+    var val = this.config.zooming / 1000,
+        ans = 1 + scroll * val;
+    this.canvas.scale(ans, ans);
+  },
+  
+  onMouseDown: function(e, win, eventInfo) {
+    if(!this.config.panning) return;
+    if(this.config.panning == 'avoid nodes' && (this.dom? this.isLabel(e, win) : eventInfo.getNode())) return;
+    this.pressed = true;
+    this.pos = eventInfo.getPos();
+    var canvas = this.canvas,
+        ox = canvas.translateOffsetX,
+        oy = canvas.translateOffsetY,
+        sx = canvas.scaleOffsetX,
+        sy = canvas.scaleOffsetY;
+    this.pos.x *= sx;
+    this.pos.x += ox;
+    this.pos.y *= sy;
+    this.pos.y += oy;
+  },
+  
+  onMouseMove: function(e, win, eventInfo) {
+    if(!this.config.panning) return;
+    if(!this.pressed) return;
+    if(this.config.panning == 'avoid nodes' && (this.dom? this.isLabel(e, win) : eventInfo.getNode())) return;
+    var thispos = this.pos, 
+        currentPos = eventInfo.getPos(),
+        canvas = this.canvas,
+        ox = canvas.translateOffsetX,
+        oy = canvas.translateOffsetY,
+        sx = canvas.scaleOffsetX,
+        sy = canvas.scaleOffsetY;
+    currentPos.x *= sx;
+    currentPos.y *= sy;
+    currentPos.x += ox;
+    currentPos.y += oy;
+    var x = currentPos.x - thispos.x,
+        y = currentPos.y - thispos.y;
+    this.pos = currentPos;
+    this.canvas.translate(x * 1/sx, y * 1/sy);
+  },
+  
+  onMouseUp: function(e, win, eventInfo, isRightClick) {
+    if(!this.config.panning) return;
+    this.pressed = false;
+  }
+});
+
+
+/*
+ * File: Canvas.js
+ *
+ */
+
+/*
+ Class: Canvas
+       A canvas widget used by all visualizations. The canvas object can be accessed by doing *viz.canvas*. If you want to 
+       know more about <Canvas> options take a look at <Options.Canvas>.
+ A canvas widget is a set of DOM elements that wrap the native canvas DOM Element providing a consistent API and behavior 
+ across all browsers. It can also include Elements to add DOM (SVG or HTML) label support to all visualizations.
+ Example:
+ Suppose we have this HTML
+ (start code xml)
+       <div id="infovis"></div>
+ (end code)
+ Now we create a new Visualization
+ (start code js)
+       var viz = new $jit.Viz({
+               //Where to inject the canvas. Any div container will do.
+               'injectInto':'infovis',
+                //width and height for canvas. 
+                //Default's to the container offsetWidth and Height.
+                'width': 900,
+                'height':500
+        });
+ (end code)
+
+ The generated HTML will look like this
+ (start code xml)
+ <div id="infovis">
+       <div id="infovis-canvaswidget" style="position:relative;">
+       <canvas id="infovis-canvas" width=900 height=500
+       style="position:absolute; top:0; left:0; width:900px; height:500px;" />
+       <div id="infovis-label"
+       style="overflow:visible; position:absolute; top:0; left:0; width:900px; height:0px">
+       </div>
+       </div>
+ </div>
+ (end code)
+ As you can see, the generated HTML consists of a canvas DOM Element of id *infovis-canvas* and a div label container
+ of id *infovis-label*, wrapped in a main div container of id *infovis-canvaswidget*.
+ */
+
+var Canvas;
+(function() {
+  //check for native canvas support
+  var canvasType = typeof HTMLCanvasElement,
+      supportsCanvas = (canvasType == 'object' || canvasType == 'function');
+  //create element function
+  function $E(tag, props) {
+    var elem = document.createElement(tag);
+    for(var p in props) {
+      if(typeof props[p] == "object") {
+        $.extend(elem[p], props[p]);
+      } else {
+        elem[p] = props[p];
+      }
+    }
+    if (tag == "canvas" && !supportsCanvas && G_vmlCanvasManager) {
+      elem = G_vmlCanvasManager.initElement(document.body.appendChild(elem));
+    }
+    return elem;
+  }
+  //canvas widget which we will call just Canvas
+  $jit.Canvas = Canvas = new Class({
+    canvases: [],
+    pos: false,
+    element: false,
+    labelContainer: false,
+    translateOffsetX: 0,
+    translateOffsetY: 0,
+    scaleOffsetX: 1,
+    scaleOffsetY: 1,
+    
+    initialize: function(viz, opt) {
+      this.viz = viz;
+      this.opt = this.config = opt;
+      var id = $.type(opt.injectInto) == 'string'? 
+          opt.injectInto:opt.injectInto.id,
+          type = opt.type,
+          idLabel = id + "-label", 
+          wrapper = $(id),
+          width = opt.width || wrapper.offsetWidth,
+          height = opt.height || wrapper.offsetHeight;
+      this.id = id;
+      //canvas options
+      var canvasOptions = {
+        injectInto: id,
+        width: width,
+        height: height
+      };
+      //create main wrapper
+      this.element = $E('div', {
+        'id': id + '-canvaswidget',
+        'style': {
+          'position': 'relative',
+          'width': width + 'px',
+          'height': height + 'px'
+        }
+      });
+      //create label container
+      this.labelContainer = this.createLabelContainer(opt.Label.type, 
+          idLabel, canvasOptions);
+      //create primary canvas
+      this.canvases.push(new Canvas.Base[type]({
+        config: $.extend({idSuffix: '-canvas'}, canvasOptions),
+        plot: function(base) {
+          viz.fx.plot();
+        },
+        resize: function() {
+          viz.refresh();
+        }
+      }));
+      //create secondary canvas
+      var back = opt.background;
+      if(back) {
+        var backCanvas = new Canvas.Background[back.type](viz, $.extend(back, canvasOptions));
+        this.canvases.push(new Canvas.Base[type](backCanvas));
+      }
+      //insert canvases
+      var len = this.canvases.length;
+      while(len--) {
+        this.element.appendChild(this.canvases[len].canvas);
+        if(len > 0) {
+          this.canvases[len].plot();
+        }
+      }
+      this.element.appendChild(this.labelContainer);
+      wrapper.appendChild(this.element);
+      //Update canvas position when the page is scrolled.
+      var timer = null, that = this;
+      $.addEvent(window, 'scroll', function() {
+        clearTimeout(timer);
+        timer = setTimeout(function() {
+          that.getPos(true); //update canvas position
+        }, 500);
+      });
+    },
+    /*
+      Method: getCtx
+      
+      Returns the main canvas context object
+      
+      Example:
+      
+      (start code js)
+       var ctx = canvas.getCtx();
+       //Now I can use the native canvas context
+       //and for example change some canvas styles
+       ctx.globalAlpha = 1;
+      (end code)
+    */
+    getCtx: function(i) {
+      return this.canvases[i || 0].getCtx();
+    },
+    /*
+      Method: getConfig
+      
+      Returns the current Configuration for this Canvas Widget.
+      
+      Example:
+      
+      (start code js)
+       var config = canvas.getConfig();
+      (end code)
+    */
+    getConfig: function() {
+      return this.opt;
+    },
+    /*
+      Method: getElement
+
+      Returns the main Canvas DOM wrapper
+      
+      Example:
+      
+      (start code js)
+       var wrapper = canvas.getElement();
+       //Returns <div id="infovis-canvaswidget" ... >...</div> as element
+      (end code)
+    */
+    getElement: function() {
+      return this.element;
+    },
+    /*
+      Method: getSize
+      
+      Returns canvas dimensions.
+      
+      Returns:
+      
+      An object with *width* and *height* properties.
+      
+      Example:
+      (start code js)
+      canvas.getSize(); //returns { width: 900, height: 500 }
+      (end code)
+    */
+    getSize: function(i) {
+      return this.canvases[i || 0].getSize();
+    },
+    /*
+      Method: resize
+      
+      Resizes the canvas.
+      
+      Parameters:
+      
+      width - New canvas width.
+      height - New canvas height.
+      
+      Example:
+      
+      (start code js)
+       canvas.resize(width, height);
+      (end code)
+    
+    */
+    resize: function(width, height) {
+      this.getPos(true);
+      this.translateOffsetX = this.translateOffsetY = 0;
+      this.scaleOffsetX = this.scaleOffsetY = 1;
+      for(var i=0, l=this.canvases.length; i<l; i++) {
+        this.canvases[i].resize(width, height);
+      }
+      var style = this.element.style;
+      style.width = width + 'px';
+      style.height = height + 'px';
+      if(this.labelContainer)
+        this.labelContainer.style.width = width + 'px';
+    },
+    /*
+      Method: translate
+      
+      Applies a translation to the canvas.
+      
+      Parameters:
+      
+      x - (number) x offset.
+      y - (number) y offset.
+      disablePlot - (boolean) Default's *false*. Set this to *true* if you don't want to refresh the visualization.
+      
+      Example:
+      
+      (start code js)
+       canvas.translate(30, 30);
+      (end code)
+    
+    */
+    translate: function(x, y, disablePlot) {
+      this.translateOffsetX += x*this.scaleOffsetX;
+      this.translateOffsetY += y*this.scaleOffsetY;
+      for(var i=0, l=this.canvases.length; i<l; i++) {
+        this.canvases[i].translate(x, y, disablePlot);
+      }
+    },
+    /*
+      Method: scale
+      
+      Scales the canvas.
+      
+      Parameters:
+      
+      x - (number) scale value.
+      y - (number) scale value.
+      disablePlot - (boolean) Default's *false*. Set this to *true* if you don't want to refresh the visualization.
+      
+      Example:
+      
+      (start code js)
+       canvas.scale(0.5, 0.5);
+      (end code)
+    
+    */
+    scale: function(x, y, disablePlot) {
+      var px = this.scaleOffsetX * x,
+          py = this.scaleOffsetY * y;
+      var dx = this.translateOffsetX * (x -1) / px,
+          dy = this.translateOffsetY * (y -1) / py;
+      this.scaleOffsetX = px;
+      this.scaleOffsetY = py;
+      for(var i=0, l=this.canvases.length; i<l; i++) {
+        this.canvases[i].scale(x, y, true);
+      }
+      this.translate(dx, dy, false);
+    },
+    /*
+      Method: getPos
+      
+      Returns the canvas position as an *x, y* object.
+      
+      Parameters:
+      
+      force - (boolean) Default's *false*. Set this to *true* if you want to recalculate the position without using any cache information.
+      
+      Returns:
+      
+      An object with *x* and *y* properties.
+      
+      Example:
+      (start code js)
+      canvas.getPos(true); //returns { x: 900, y: 500 }
+      (end code)
+    */
+    getPos: function(force){
+      if(force || !this.pos) {
+        return this.pos = $.getPos(this.getElement());
+      }
+      return this.pos;
+    },
+    /*
+       Method: clear
+       
+       Clears the canvas.
+    */
+    clear: function(i){
+      this.canvases[i||0].clear();
+    },
+    
+    path: function(type, action){
+      var ctx = this.canvases[0].getCtx();
+      ctx.beginPath();
+      action(ctx);
+      ctx[type]();
+      ctx.closePath();
+    },
+    
+    createLabelContainer: function(type, idLabel, dim) {
+      var NS = 'http://www.w3.org/2000/svg';
+      if(type == 'HTML' || type == 'Native') {
+        return $E('div', {
+          'id': idLabel,
+          'style': {
+            'overflow': 'visible',
+            'position': 'absolute',
+            'top': 0,
+            'left': 0,
+            'width': dim.width + 'px',
+            'height': 0
+          }
+        });
+      } else if(type == 'SVG') {
+        var svgContainer = document.createElementNS(NS, 'svg:svg');
+        svgContainer.setAttribute("width", dim.width);
+        svgContainer.setAttribute('height', dim.height);
+        var style = svgContainer.style;
+        style.position = 'absolute';
+        style.left = style.top = '0px';
+        var labelContainer = document.createElementNS(NS, 'svg:g');
+        labelContainer.setAttribute('width', dim.width);
+        labelContainer.setAttribute('height', dim.height);
+        labelContainer.setAttribute('x', 0);
+        labelContainer.setAttribute('y', 0);
+        labelContainer.setAttribute('id', idLabel);
+        svgContainer.appendChild(labelContainer);
+        return svgContainer;
+      }
+    }
+  });
+  //base canvas wrapper
+  Canvas.Base = {};
+  Canvas.Base['2D'] = new Class({
+    translateOffsetX: 0,
+    translateOffsetY: 0,
+    scaleOffsetX: 1,
+    scaleOffsetY: 1,
+
+    initialize: function(viz) {
+      this.viz = viz;
+      this.opt = viz.config;
+      this.size = false;
+      this.createCanvas();
+      this.translateToCenter();
+    },
+    createCanvas: function() {
+      var opt = this.opt,
+          width = opt.width,
+          height = opt.height;
+      this.canvas = $E('canvas', {
+        'id': opt.injectInto + opt.idSuffix,
+        'width': width,
+        'height': height,
+        'style': {
+          'position': 'absolute',
+          'top': 0,
+          'left': 0,
+          'width': width + 'px',
+          'height': height + 'px'
+        }
+      });
+    },
+    getCtx: function() {
+      if(!this.ctx) 
+        return this.ctx = this.canvas.getContext('2d');
+      return this.ctx;
+    },
+    getSize: function() {
+      if(this.size) return this.size;
+      var canvas = this.canvas;
+      return this.size = {
+        width: canvas.width,
+        height: canvas.height
+      };
+    },
+    translateToCenter: function(ps) {
+      var size = this.getSize(),
+          width = ps? (size.width - ps.width - this.translateOffsetX*2) : size.width;
+          height = ps? (size.height - ps.height - this.translateOffsetY*2) : size.height;
+      var ctx = this.getCtx();
+      ps && ctx.scale(1/this.scaleOffsetX, 1/this.scaleOffsetY);
+      ctx.translate(width/2, height/2);
+    },
+    resize: function(width, height) {
+      var size = this.getSize(),
+          canvas = this.canvas,
+          styles = canvas.style;
+      this.size = false;
+      canvas.width = width;
+      canvas.height = height;
+      styles.width = width + "px";
+      styles.height = height + "px";
+      //small ExCanvas fix
+      if(!supportsCanvas) {
+        this.translateToCenter(size);
+      } else {
+        this.translateToCenter();
+      }
+      this.translateOffsetX =
+        this.translateOffsetY = 0;
+      this.scaleOffsetX = 
+        this.scaleOffsetY = 1;
+      this.clear();
+      this.viz.resize(width, height, this);
+    },
+    translate: function(x, y, disablePlot) {
+      var sx = this.scaleOffsetX,
+          sy = this.scaleOffsetY;
+      this.translateOffsetX += x*sx;
+      this.translateOffsetY += y*sy;
+      this.getCtx().translate(x, y);
+      !disablePlot && this.plot();
+    },
+    scale: function(x, y, disablePlot) {
+      this.scaleOffsetX *= x;
+      this.scaleOffsetY *= y;
+      this.getCtx().scale(x, y);
+      !disablePlot && this.plot();
+    },
+    clear: function(){
+      var size = this.getSize(),
+          ox = this.translateOffsetX,
+          oy = this.translateOffsetY,
+          sx = this.scaleOffsetX,
+          sy = this.scaleOffsetY;
+      this.getCtx().clearRect((-size.width / 2 - ox) * 1/sx, 
+                              (-size.height / 2 - oy) * 1/sy, 
+                              size.width * 1/sx, size.height * 1/sy);
+    },
+    plot: function() {
+      this.clear();
+      this.viz.plot(this);
+    }
+  });
+  //background canvases
+  //TODO(nico): document this!
+  Canvas.Background = {};
+  Canvas.Background.Circles = new Class({
+    initialize: function(viz, options) {
+      this.viz = viz;
+      this.config = $.merge({
+        idSuffix: '-bkcanvas',
+        levelDistance: 100,
+        numberOfCircles: 6,
+        CanvasStyles: {},
+        offset: 0
+      }, options);
+    },
+    resize: function(width, height, base) {
+      this.plot(base);
+    },
+    plot: function(base) {
+      var canvas = base.canvas,
+          ctx = base.getCtx(),
+          conf = this.config,
+          styles = conf.CanvasStyles;
+      //set canvas styles
+      for(var s in styles) ctx[s] = styles[s];
+      var n = conf.numberOfCircles,
+          rho = conf.levelDistance;
+      for(var i=1; i<=n; i++) {
+        ctx.beginPath();
+        ctx.arc(0, 0, rho * i, 0, 2 * Math.PI, false);
+        ctx.stroke();
+        ctx.closePath();
+      }
+      //TODO(nico): print labels too!
+    }
+  });
+})();
+
+
+/*
+ * File: Polar.js
+ * 
+ * Defines the <Polar> class.
+ *
+ * Description:
+ *
+ * The <Polar> class, just like the <Complex> class, is used by the <Hypertree>, <ST> and <RGraph> as a 2D point representation.
+ *
+ * See also:
+ *
+ * <http://en.wikipedia.org/wiki/Polar_coordinates>
+ *
+*/
+
+/*
+   Class: Polar
+
+   A multi purpose polar representation.
+
+   Description:
+   The <Polar> class, just like the <Complex> class, is used by the <Hypertree>, <ST> and <RGraph> as a 2D point representation.
+   See also:
+   <http://en.wikipedia.org/wiki/Polar_coordinates>
+   Parameters:
+
+      theta - An angle.
+      rho - The norm.
+*/
+
+var Polar = function(theta, rho) {
+  this.theta = theta || 0;
+  this.rho = rho || 0;
+};
+
+$jit.Polar = Polar;
+
+Polar.prototype = {
+    /*
+       Method: getc
+    
+       Returns a complex number.
+    
+       Parameters:
+
+       simple - _optional_ If *true*, this method will return only an object holding x and y properties and not a <Complex> instance. Default's *false*.
+
+      Returns:
+    
+          A complex number.
+    */
+    getc: function(simple) {
+        return this.toComplex(simple);
+    },
+
+    /*
+       Method: getp
+    
+       Returns a <Polar> representation.
+    
+       Returns:
+    
+          A variable in polar coordinates.
+    */
+    getp: function() {
+        return this;
+    },
+
+
+    /*
+       Method: set
+    
+       Sets a number.
+
+       Parameters:
+
+       v - A <Complex> or <Polar> instance.
+    
+    */
+    set: function(v) {
+        v = v.getp();
+        this.theta = v.theta; this.rho = v.rho;
+    },
+
+    /*
+       Method: setc
+    
+       Sets a <Complex> number.
+
+       Parameters:
+
+       x - A <Complex> number real part.
+       y - A <Complex> number imaginary part.
+    
+    */
+    setc: function(x, y) {
+        this.rho = Math.sqrt(x * x + y * y);
+        this.theta = Math.atan2(y, x);
+        if(this.theta < 0) this.theta += Math.PI * 2;
+    },
+
+    /*
+       Method: setp
+    
+       Sets a polar number.
+
+       Parameters:
+
+       theta - A <Polar> number angle property.
+       rho - A <Polar> number rho property.
+    
+    */
+    setp: function(theta, rho) {
+        this.theta = theta; 
+        this.rho = rho;
+    },
+
+    /*
+       Method: clone
+    
+       Returns a copy of the current object.
+    
+       Returns:
+    
+          A copy of the real object.
+    */
+    clone: function() {
+        return new Polar(this.theta, this.rho);
+    },
+
+    /*
+       Method: toComplex
+    
+        Translates from polar to cartesian coordinates and returns a new <Complex> instance.
+    
+        Parameters:
+
+        simple - _optional_ If *true* this method will only return an object with x and y properties (and not the whole <Complex> instance). Default's *false*.
+        Returns:
+    
+          A new <Complex> instance.
+    */
+    toComplex: function(simple) {
+        var x = Math.cos(this.theta) * this.rho;
+        var y = Math.sin(this.theta) * this.rho;
+        if(simple) return { 'x': x, 'y': y};
+        return new Complex(x, y);
+    },
+
+    /*
+       Method: add
+    
+        Adds two <Polar> instances.
+    
+       Parameters:
+
+       polar - A <Polar> number.
+
+       Returns:
+    
+          A new Polar instance.
+    */
+    add: function(polar) {
+        return new Polar(this.theta + polar.theta, this.rho + polar.rho);
+    },
+    
+    /*
+       Method: scale
+    
+        Scales a polar norm.
+    
+        Parameters:
+
+        number - A scale factor.
+        
+        Returns:
+    
+          A new Polar instance.
+    */
+    scale: function(number) {
+        return new Polar(this.theta, this.rho * number);
+    },
+    
+    /*
+       Method: equals
+    
+       Comparison method.
+
+       Returns *true* if the theta and rho properties are equal.
+
+       Parameters:
+
+       c - A <Polar> number.
+
+       Returns:
+
+       *true* if the theta and rho parameters for these objects are equal. *false* otherwise.
+    */
+    equals: function(c) {
+        return this.theta == c.theta && this.rho == c.rho;
+    },
+    
+    /*
+       Method: $add
+    
+        Adds two <Polar> instances affecting the current object.
+    
+       Paramters:
+
+       polar - A <Polar> instance.
+
+       Returns:
+    
+          The changed object.
+    */
+    $add: function(polar) {
+        this.theta = this.theta + polar.theta; this.rho += polar.rho;
+        return this;
+    },
+
+    /*
+       Method: $madd
+    
+        Adds two <Polar> instances affecting the current object. The resulting theta angle is modulo 2pi.
+    
+       Parameters:
+
+       polar - A <Polar> instance.
+
+       Returns:
+    
+          The changed object.
+    */
+    $madd: function(polar) {
+        this.theta = (this.theta + polar.theta) % (Math.PI * 2); this.rho += polar.rho;
+        return this;
+    },
+
+    
+    /*
+       Method: $scale
+    
+        Scales a polar instance affecting the object.
+    
+      Parameters:
+
+      number - A scaling factor.
+
+      Returns:
+    
+          The changed object.
+    */
+    $scale: function(number) {
+        this.rho *= number;
+        return this;
+    },
+    
+    /*
+      Method: isZero
+   
+      Returns *true* if the number is zero.
+   
+   */
+    isZero: function () {
+      var almostZero = 0.0001, abs = Math.abs;
+      return abs(this.theta) < almostZero && abs(this.rho) < almostZero;
+    },
+
+    /*
+       Method: interpolate
+    
+        Calculates a polar interpolation between two points at a given delta moment.
+
+        Parameters:
+      
+        elem - A <Polar> instance.
+        delta - A delta factor ranging [0, 1].
+    
+       Returns:
+    
+          A new <Polar> instance representing an interpolation between _this_ and _elem_
+    */
+    interpolate: function(elem, delta) {
+        var pi = Math.PI, pi2 = pi * 2;
+        var ch = function(t) {
+            var a =  (t < 0)? (t % pi2) + pi2 : t % pi2;
+            return a;
+        };
+        var tt = this.theta, et = elem.theta;
+        var sum, diff = Math.abs(tt - et);
+        if(diff == pi) {
+          if(tt > et) {
+            sum = ch((et + ((tt - pi2) - et) * delta)) ;
+          } else {
+            sum = ch((et - pi2 + (tt - (et)) * delta));
+          }
+        } else if(diff >= pi) {
+          if(tt > et) {
+            sum = ch((et + ((tt - pi2) - et) * delta)) ;
+          } else {
+            sum = ch((et - pi2 + (tt - (et - pi2)) * delta));
+          }
+        } else {  
+          sum = ch((et + (tt - et) * delta)) ;
+        }
+        var r = (this.rho - elem.rho) * delta + elem.rho;
+        return {
+          'theta': sum,
+          'rho': r
+        };
+    }
+};
+
+
+var $P = function(a, b) { return new Polar(a, b); };
+
+Polar.KER = $P(0, 0);
+
+
+
+/*
+ * File: Complex.js
+ * 
+ * Defines the <Complex> class.
+ *
+ * Description:
+ *
+ * The <Complex> class, just like the <Polar> class, is used by the <Hypertree>, <ST> and <RGraph> as a 2D point representation.
+ *
+ * See also:
+ *
+ * <http://en.wikipedia.org/wiki/Complex_number>
+ *
+*/
+
+/*
+   Class: Complex
+    
+   A multi-purpose Complex Class with common methods.
+   Description:
+   The <Complex> class, just like the <Polar> class, is used by the <Hypertree>, <ST> and <RGraph> as a 2D point representation.
+   See also:
+   <http://en.wikipedia.org/wiki/Complex_number>
+
+   Parameters:
+
+   x - _optional_ A Complex number real part.
+   y - _optional_ A Complex number imaginary part.
+*/
+
+var Complex = function(x, y) {
+  this.x = x || 0;
+  this.y = y || 0;
+};
+
+$jit.Complex = Complex;
+
+Complex.prototype = {
+    /*
+       Method: getc
+    
+       Returns a complex number.
+    
+       Returns:
+    
+          A complex number.
+    */
+    getc: function() {
+        return this;
+    },
+
+    /*
+       Method: getp
+    
+       Returns a <Polar> representation of this number.
+    
+       Parameters:
+
+       simple - _optional_ If *true*, this method will return only an object holding theta and rho properties and not a <Polar> instance. Default's *false*.
+
+       Returns:
+    
+          A variable in <Polar> coordinates.
+    */
+    getp: function(simple) {
+        return this.toPolar(simple);
+    },
+
+
+    /*
+       Method: set
+    
+       Sets a number.
+
+       Parameters:
+
+       c - A <Complex> or <Polar> instance.
+    
+    */
+    set: function(c) {
+      c = c.getc(true);
+      this.x = c.x; 
+      this.y = c.y;
+    },
+
+    /*
+       Method: setc
+    
+       Sets a complex number.
+
+       Parameters:
+
+       x - A <Complex> number Real part.
+       y - A <Complex> number Imaginary part.
+    
+    */
+    setc: function(x, y) {
+        this.x = x; 
+        this.y = y;
+    },
+
+    /*
+       Method: setp
+    
+       Sets a polar number.
+
+       Parameters:
+
+       theta - A <Polar> number theta property.
+       rho - A <Polar> number rho property.
+    
+    */
+    setp: function(theta, rho) {
+        this.x = Math.cos(theta) * rho;
+        this.y = Math.sin(theta) * rho;
+    },
+
+    /*
+       Method: clone
+    
+       Returns a copy of the current object.
+    
+       Returns:
+    
+          A copy of the real object.
+    */
+    clone: function() {
+        return new Complex(this.x, this.y);
+    },
+
+    /*
+       Method: toPolar
+    
+       Transforms cartesian to polar coordinates.
+    
+       Parameters:
+
+       simple - _optional_ If *true* this method will only return an object with theta and rho properties (and not the whole <Polar> instance). Default's *false*.
+       
+       Returns:
+    
+          A new <Polar> instance.
+    */
+    
+    toPolar: function(simple) {
+        var rho = this.norm();
+        var atan = Math.atan2(this.y, this.x);
+        if(atan < 0) atan += Math.PI * 2;
+        if(simple) return { 'theta': atan, 'rho': rho };
+        return new Polar(atan, rho);
+    },
+    /*
+       Method: norm
+    
+       Calculates a <Complex> number norm.
+    
+       Returns:
+    
+          A real number representing the complex norm.
+    */
+    norm: function () {
+        return Math.sqrt(this.squaredNorm());
+    },
+    
+    /*
+       Method: squaredNorm
+    
+       Calculates a <Complex> number squared norm.
+    
+       Returns:
+    
+          A real number representing the complex squared norm.
+    */
+    squaredNorm: function () {
+        return this.x*this.x + this.y*this.y;
+    },
+
+    /*
+       Method: add
+    
+       Returns the result of adding two complex numbers.
+       
+       Does not alter the original object.
+
+       Parameters:
+    
+          pos - A <Complex> instance.
+    
+       Returns:
+    
+         The result of adding two complex numbers.
+    */
+    add: function(pos) {
+        return new Complex(this.x + pos.x, this.y + pos.y);
+    },
+
+    /*
+       Method: prod
+    
+       Returns the result of multiplying two <Complex> numbers.
+       
+       Does not alter the original object.
+
+       Parameters:
+    
+          pos - A <Complex> instance.
+    
+       Returns:
+    
+         The result of multiplying two complex numbers.
+    */
+    prod: function(pos) {
+        return new Complex(this.x*pos.x - this.y*pos.y, this.y*pos.x + this.x*pos.y);
+    },
+
+    /*
+       Method: conjugate
+    
+       Returns the conjugate of this <Complex> number.
+
+       Does not alter the original object.
+
+       Returns:
+    
+         The conjugate of this <Complex> number.
+    */
+    conjugate: function() {
+        return new Complex(this.x, -this.y);
+    },
+
+
+    /*
+       Method: scale
+    
+       Returns the result of scaling a <Complex> instance.
+       
+       Does not alter the original object.
+
+       Parameters:
+    
+          factor - A scale factor.
+    
+       Returns:
+    
+         The result of scaling this complex to a factor.
+    */
+    scale: function(factor) {
+        return new Complex(this.x * factor, this.y * factor);
+    },
+
+    /*
+       Method: equals
+    
+       Comparison method.
+
+       Returns *true* if both real and imaginary parts are equal.
+
+       Parameters:
+
+       c - A <Complex> instance.
+
+       Returns:
+
+       A boolean instance indicating if both <Complex> numbers are equal.
+    */
+    equals: function(c) {
+        return this.x == c.x && this.y == c.y;
+    },
+
+    /*
+       Method: $add
+    
+       Returns the result of adding two <Complex> numbers.
+       
+       Alters the original object.
+
+       Parameters:
+    
+          pos - A <Complex> instance.
+    
+       Returns:
+    
+         The result of adding two complex numbers.
+    */
+    $add: function(pos) {
+        this.x += pos.x; this.y += pos.y;
+        return this;    
+    },
+    
+    /*
+       Method: $prod
+    
+       Returns the result of multiplying two <Complex> numbers.
+       
+       Alters the original object.
+
+       Parameters:
+    
+          pos - A <Complex> instance.
+    
+       Returns:
+    
+         The result of multiplying two complex numbers.
+    */
+    $prod:function(pos) {
+        var x = this.x, y = this.y;
+        this.x = x*pos.x - y*pos.y;
+        this.y = y*pos.x + x*pos.y;
+        return this;
+    },
+    
+    /*
+       Method: $conjugate
+    
+       Returns the conjugate for this <Complex>.
+       
+       Alters the original object.
+
+       Returns:
+    
+         The conjugate for this complex.
+    */
+    $conjugate: function() {
+        this.y = -this.y;
+        return this;
+    },
+    
+    /*
+       Method: $scale
+    
+       Returns the result of scaling a <Complex> instance.
+       
+       Alters the original object.
+
+       Parameters:
+    
+          factor - A scale factor.
+    
+       Returns:
+    
+         The result of scaling this complex to a factor.
+    */
+    $scale: function(factor) {
+        this.x *= factor; this.y *= factor;
+        return this;
+    },
+    
+    /*
+       Method: $div
+    
+       Returns the division of two <Complex> numbers.
+       
+       Alters the original object.
+
+       Parameters:
+    
+          pos - A <Complex> number.
+    
+       Returns:
+    
+         The result of scaling this complex to a factor.
+    */
+    $div: function(pos) {
+        var x = this.x, y = this.y;
+        var sq = pos.squaredNorm();
+        this.x = x * pos.x + y * pos.y; this.y = y * pos.x - x * pos.y;
+        return this.$scale(1 / sq);
+    },
+
+    /*
+      Method: isZero
+   
+      Returns *true* if the number is zero.
+   
+   */
+    isZero: function () {
+      var almostZero = 0.0001, abs = Math.abs;
+      return abs(this.x) < almostZero && abs(this.y) < almostZero;
+    }
+};
+
+var $C = function(a, b) { return new Complex(a, b); };
+
+Complex.KER = $C(0, 0);
+
+
+
+/*
+ * File: Graph.js
+ *
+*/
+
+/*
+ Class: Graph
+
+ A Graph Class that provides useful manipulation functions. You can find more manipulation methods in the <Graph.Util> object.
+
+ An instance of this class can be accessed by using the *graph* parameter of any tree or graph visualization.
+ Example:
+
+ (start code js)
+   //create new visualization
+   var viz = new $jit.Viz(options);
+   //load JSON data
+   viz.loadJSON(json);
+   //access model
+   viz.graph; //<Graph> instance
+ (end code)
+ Implements:
+ The following <Graph.Util> methods are implemented in <Graph>
+  - <Graph.Util.getNode>
+  - <Graph.Util.eachNode>
+  - <Graph.Util.computeLevels>
+  - <Graph.Util.eachBFS>
+  - <Graph.Util.clean>
+  - <Graph.Util.getClosestNodeToPos>
+  - <Graph.Util.getClosestNodeToOrigin>
+*/  
+
+$jit.Graph = new Class({
+
+  initialize: function(opt, Node, Edge, Label) {
+    var innerOptions = {
+    'klass': Complex,
+    'Node': {}
+    };
+    this.Node = Node;
+    this.Edge = Edge;
+    this.Label = Label;
+    this.opt = $.merge(innerOptions, opt || {});
+    this.nodes = {};
+    this.edges = {};
+    
+    //add nodeList methods
+    var that = this;
+    this.nodeList = {};
+    for(var p in Accessors) {
+      that.nodeList[p] = (function(p) {
+        return function() {
+          var args = Array.prototype.slice.call(arguments);
+          that.eachNode(function(n) {
+            n[p].apply(n, args);
+          });
+        };
+      })(p);
+    }
+
+ },
+
+/*
+     Method: getNode
+    
+     Returns a <Graph.Node> by *id*.
+
+     Parameters:
+
+     id - (string) A <Graph.Node> id.
+
+     Example:
+
+     (start code js)
+       var node = graph.getNode('nodeId');
+     (end code)
+*/  
+ getNode: function(id) {
+    if(this.hasNode(id)) return this.nodes[id];
+    return false;
+ },
+
+ /*
+     Method: get
+    
+     An alias for <Graph.Util.getNode>. Returns a node by *id*.
+    
+     Parameters:
+    
+     id - (string) A <Graph.Node> id.
+    
+     Example:
+    
+     (start code js)
+       var node = graph.get('nodeId');
+     (end code)
+*/  
+  get: function(id) {
+    return this.getNode(id);
+  },
+
+ /*
+   Method: getByName
+  
+   Returns a <Graph.Node> by *name*.
+  
+   Parameters:
+  
+   name - (string) A <Graph.Node> name.
+  
+   Example:
+  
+   (start code js)
+     var node = graph.getByName('someName');
+   (end code)
+  */  
+  getByName: function(name) {
+    for(var id in this.nodes) {
+      var n = this.nodes[id];
+      if(n.name == name) return n;
+    }
+    return false;
+  },
+
+/*
+   Method: getAdjacence
+  
+   Returns a <Graph.Adjacence> object connecting nodes with ids *id* and *id2*.
+
+   Parameters:
+
+   id - (string) A <Graph.Node> id.
+   id2 - (string) A <Graph.Node> id.
+*/  
+  getAdjacence: function (id, id2) {
+    if(id in this.edges) {
+      return this.edges[id][id2];
+    }
+    return false;
+ },
+
+    /*
+     Method: addNode
+    
+     Adds a node.
+     
+     Parameters:
+    
+      obj - An object with the properties described below
+
+      id - (string) A node id
+      name - (string) A node's name
+      data - (object) A node's data hash
+
+    See also:
+    <Graph.Node>
+
+  */  
+  addNode: function(obj) { 
+   if(!this.nodes[obj.id]) {  
+     var edges = this.edges[obj.id] = {};
+     this.nodes[obj.id] = new Graph.Node($.extend({
+        'id': obj.id,
+        'name': obj.name,
+        'data': $.merge(obj.data || {}, {}),
+        'adjacencies': edges 
+      }, this.opt.Node), 
+      this.opt.klass, 
+      this.Node, 
+      this.Edge,
+      this.Label);
+    }
+    return this.nodes[obj.id];
+  },
+  
+    /*
+     Method: addAdjacence
+    
+     Connects nodes specified by *obj* and *obj2*. If not found, nodes are created.
+     
+     Parameters:
+    
+      obj - (object) A <Graph.Node> object.
+      obj2 - (object) Another <Graph.Node> object.
+      data - (object) A data object. Used to store some extra information in the <Graph.Adjacence> object created.
+
+    See also:
+
+    <Graph.Node>, <Graph.Adjacence>
+    */  
+  addAdjacence: function (obj, obj2, data) {
+    if(!this.hasNode(obj.id)) { this.addNode(obj); }
+    if(!this.hasNode(obj2.id)) { this.addNode(obj2); }
+    obj = this.nodes[obj.id]; obj2 = this.nodes[obj2.id];
+    if(!obj.adjacentTo(obj2)) {
+      var adjsObj = this.edges[obj.id] = this.edges[obj.id] || {};
+      var adjsObj2 = this.edges[obj2.id] = this.edges[obj2.id] || {};
+      adjsObj[obj2.id] = adjsObj2[obj.id] = new Graph.Adjacence(obj, obj2, data, this.Edge, this.Label);
+      return adjsObj[obj2.id];
+    }
+    return this.edges[obj.id][obj2.id];
+ },
+
+    /*
+     Method: removeNode
+    
+     Removes a <Graph.Node> matching the specified *id*.
+
+     Parameters:
+
+     id - (string) A node's id.
+
+    */  
+  removeNode: function(id) {
+    if(this.hasNode(id)) {
+      delete this.nodes[id];
+      var adjs = this.edges[id];
+      for(var to in adjs) {
+        delete this.edges[to][id];
+      }
+      delete this.edges[id];
+    }
+  },
+  
+/*
+     Method: removeAdjacence
+    
+     Removes a <Graph.Adjacence> matching *id1* and *id2*.
+
+     Parameters:
+
+     id1 - (string) A <Graph.Node> id.
+     id2 - (string) A <Graph.Node> id.
+*/  
+  removeAdjacence: function(id1, id2) {
+    delete this.edges[id1][id2];
+    delete this.edges[id2][id1];
+  },
+
+   /*
+     Method: hasNode
+    
+     Returns a boolean indicating if the node belongs to the <Graph> or not.
+     
+     Parameters:
+    
+        id - (string) Node id.
+   */  
+  hasNode: function(id) {
+    return id in this.nodes;
+  },
+  
+  /*
+    Method: empty
+
+    Empties the Graph
+
+  */
+  empty: function() { this.nodes = {}; this.edges = {};}
+
+});
+
+var Graph = $jit.Graph;
+
+/*
+ Object: Accessors
+ Defines a set of methods for data, canvas and label styles manipulation implemented by <Graph.Node> and <Graph.Adjacence> instances.
+ */
+var Accessors;
+
+(function () {
+  var getDataInternal = function(prefix, prop, type, force, prefixConfig) {
+    var data;
+    type = type || 'current';
+    prefix = "$" + (prefix ? prefix + "-" : "");
+
+    if(type == 'current') {
+      data = this.data;
+    } else if(type == 'start') {
+      data = this.startData;
+    } else if(type == 'end') {
+      data = this.endData;
+    }
+
+    var dollar = prefix + prop;
+
+    if(force) {
+      return data[dollar];
+    }
+
+    if(!this.Config.overridable)
+      return prefixConfig[prop] || 0;
+
+    return (dollar in data) ?
+      data[dollar] : ((dollar in this.data) ? this.data[dollar] : (prefixConfig[prop] || 0));
+  }
+
+  var setDataInternal = function(prefix, prop, value, type) {
+    type = type || 'current';
+    prefix = '$' + (prefix ? prefix + '-' : '');
+
+    var data;
+
+    if(type == 'current') {
+      data = this.data;
+    } else if(type == 'start') {
+      data = this.startData;
+    } else if(type == 'end') {
+      data = this.endData;
+    }
+
+    data[prefix + prop] = value;
+  }
+
+  var removeDataInternal = function(prefix, properties) {
+    prefix = '$' + (prefix ? prefix + '-' : '');
+    var that = this;
+    $.each(properties, function(prop) {
+      var pref = prefix + prop;
+      delete that.data[pref];
+      delete that.endData[pref];
+      delete that.startData[pref];
+    });
+  }
+
+  Accessors = {
+    /*
+    Method: getData
+
+    Returns the specified data value property.
+    This is useful for querying special/reserved <Graph.Node> data properties
+    (i.e dollar prefixed properties).
+
+    Parameters:
+
+      prop  - (string) The name of the property. The dollar sign is not needed. For
+              example *getData(width)* will return *data.$width*.
+      type  - (string) The type of the data property queried. Default's "current". You can access *start* and *end* 
+              data properties also. These properties are used when making animations.
+      force - (boolean) Whether to obtain the true value of the property (equivalent to
+              *data.$prop*) or to check for *node.overridable = true* first.
+
+    Returns:
+
+      The value of the dollar prefixed property or the global Node/Edge property
+      value if *overridable=false*
+
+    Example:
+    (start code js)
+     node.getData('width'); //will return node.data.$width if Node.overridable=true;
+    (end code)
+    */
+    getData: function(prop, type, force) {
+      return getDataInternal.call(this, "", prop, type, force, this.Config);
+    },
+
+
+    /*
+    Method: setData
+
+    Sets the current data property with some specific value.
+    This method is only useful for reserved (dollar prefixed) properties.
+
+    Parameters:
+
+      prop  - (string) The name of the property. The dollar sign is not necessary. For
+              example *setData(width)* will set *data.$width*.
+      value - (mixed) The value to store.
+      type  - (string) The type of the data property to store. Default's "current" but
+              can also be "start" or "end".
+
+    Example:
+    
+    (start code js)
+     node.setData('width', 30);
+    (end code)
+    
+    If we were to make an animation of a node/edge width then we could do
+    
+    (start code js)
+      var node = viz.getNode('nodeId');
+      //set start and end values
+      node.setData('width', 10, 'start');
+      node.setData('width', 30, 'end');
+      //will animate nodes width property
+      viz.fx.animate({
+        modes: ['node-property:width'],
+        duration: 1000
+      });
+    (end code)
+    */
+    setData: function(prop, value, type) {
+      setDataInternal.call(this, "", prop, value, type);
+    },
+
+    /*
+    Method: setDataset
+
+    Convenience method to set multiple data values at once.
+    
+    Parameters:
+    
+    types - (array|string) A set of 'current', 'end' or 'start' values.
+    obj - (object) A hash containing the names and values of the properties to be altered.
+
+    Example:
+    (start code js)
+      node.setDataset(['current', 'end'], {
+        'width': [100, 5],
+        'color': ['#fff', '#ccc']
+      });
+      //...or also
+      node.setDataset('end', {
+        'width': 5,
+        'color': '#ccc'
+      });
+    (end code)
+    
+    See also: 
+    
+    <Accessors.setData>
+    
+    */
+    setDataset: function(types, obj) {
+      types = $.splat(types);
+      for(var attr in obj) {
+        for(var i=0, val = $.splat(obj[attr]), l=types.length; i<l; i++) {
+          this.setData(attr, val[i], types[i]);
+        }
+      }
+    },
+    
+    /*
+    Method: removeData
+
+    Remove data properties.
+
+    Parameters:
+
+    One or more property names as arguments. The dollar sign is not needed.
+
+    Example:
+    (start code js)
+    node.removeData('width'); //now the default width value is returned
+    (end code)
+    */
+    removeData: function() {
+      removeDataInternal.call(this, "", Array.prototype.slice.call(arguments));
+    },
+
+    /*
+    Method: getCanvasStyle
+
+    Returns the specified canvas style data value property. This is useful for
+    querying special/reserved <Graph.Node> canvas style data properties (i.e.
+    dollar prefixed properties that match with $canvas-<name of canvas style>).
+
+    Parameters:
+
+      prop  - (string) The name of the property. The dollar sign is not needed. For
+              example *getCanvasStyle(shadowBlur)* will return *data[$canvas-shadowBlur]*.
+      type  - (string) The type of the data property queried. Default's *current*. You can access *start* and *end* 
+              data properties also.
+              
+    Example:
+    (start code js)
+      node.getCanvasStyle('shadowBlur');
+    (end code)
+    
+    See also:
+    
+    <Accessors.getData>
+    */
+    getCanvasStyle: function(prop, type, force) {
+      return getDataInternal.call(
+          this, 'canvas', prop, type, force, this.Config.CanvasStyles);
+    },
+
+    /*
+    Method: setCanvasStyle
+
+    Sets the canvas style data property with some specific value.
+    This method is only useful for reserved (dollar prefixed) properties.
+    
+    Parameters:
+    
+    prop - (string) Name of the property. Can be any canvas property like 'shadowBlur', 'shadowColor', 'strokeStyle', etc.
+    value - (mixed) The value to set to the property.
+    type - (string) Default's *current*. Whether to set *start*, *current* or *end* type properties.
+    
+    Example:
+    
+    (start code js)
+     node.setCanvasStyle('shadowBlur', 30);
+    (end code)
+    
+    If we were to make an animation of a node/edge shadowBlur canvas style then we could do
+    
+    (start code js)
+      var node = viz.getNode('nodeId');
+      //set start and end values
+      node.setCanvasStyle('shadowBlur', 10, 'start');
+      node.setCanvasStyle('shadowBlur', 30, 'end');
+      //will animate nodes canvas style property for nodes
+      viz.fx.animate({
+        modes: ['node-style:shadowBlur'],
+        duration: 1000
+      });
+    (end code)
+    
+    See also:
+    
+    <Accessors.setData>.
+    */
+    setCanvasStyle: function(prop, value, type) {
+      setDataInternal.call(this, 'canvas', prop, value, type);
+    },
+
+    /*
+    Method: setCanvasStyles
+
+    Convenience method to set multiple styles at once.
+
+    Parameters:
+    
+    types - (array|string) A set of 'current', 'end' or 'start' values.
+    obj - (object) A hash containing the names and values of the properties to be altered.
+
+    See also:
+    
+    <Accessors.setDataset>.
+    */
+    setCanvasStyles: function(types, obj) {
+      types = $.splat(types);
+      for(var attr in obj) {
+        for(var i=0, val = $.splat(obj[attr]), l=types.length; i<l; i++) {
+          this.setCanvasStyle(attr, val[i], types[i]);
+        }
+      }
+    },
+
+    /*
+    Method: removeCanvasStyle
+
+    Remove canvas style properties from data.
+
+    Parameters:
+    
+    A variable number of canvas style strings.
+
+    See also:
+    
+    <Accessors.removeData>.
+    */
+    removeCanvasStyle: function() {
+      removeDataInternal.call(this, 'canvas', Array.prototype.slice.call(arguments));
+    },
+
+    /*
+    Method: getLabelData
+
+    Returns the specified label data value property. This is useful for
+    querying special/reserved <Graph.Node> label options (i.e.
+    dollar prefixed properties that match with $label-<name of label style>).
+
+    Parameters:
+
+      prop  - (string) The name of the property. The dollar sign prefix is not needed. For
+              example *getLabelData(size)* will return *data[$label-size]*.
+      type  - (string) The type of the data property queried. Default's *current*. You can access *start* and *end* 
+              data properties also.
+              
+    See also:
+    
+    <Accessors.getData>.
+    */
+    getLabelData: function(prop, type, force) {
+      return getDataInternal.call(
+          this, 'label', prop, type, force, this.Label);
+    },
+
+    /*
+    Method: setLabelData
+
+    Sets the current label data with some specific value.
+    This method is only useful for reserved (dollar prefixed) properties.
+
+    Parameters:
+    
+    prop - (string) Name of the property. Can be any canvas property like 'shadowBlur', 'shadowColor', 'strokeStyle', etc.
+    value - (mixed) The value to set to the property.
+    type - (string) Default's *current*. Whether to set *start*, *current* or *end* type properties.
+    
+    Example:
+    
+    (start code js)
+     node.setLabelData('size', 30);
+    (end code)
+    
+    If we were to make an animation of a node label size then we could do
+    
+    (start code js)
+      var node = viz.getNode('nodeId');
+      //set start and end values
+      node.setLabelData('size', 10, 'start');
+      node.setLabelData('size', 30, 'end');
+      //will animate nodes label size
+      viz.fx.animate({
+        modes: ['label-property:size'],
+        duration: 1000
+      });
+    (end code)
+    
+    See also:
+    
+    <Accessors.setData>.
+    */
+    setLabelData: function(prop, value, type) {
+      setDataInternal.call(this, 'label', prop, value, type);
+    },
+
+    /*
+    Method: setLabelDataset
+
+    Convenience function to set multiple label data at once.
+
+    Parameters:
+    
+    types - (array|string) A set of 'current', 'end' or 'start' values.
+    obj - (object) A hash containing the names and values of the properties to be altered.
+
+    See also:
+    
+    <Accessors.setDataset>.
+    */
+    setLabelDataset: function(types, obj) {
+      types = $.splat(types);
+      for(var attr in obj) {
+        for(var i=0, val = $.splat(obj[attr]), l=types.length; i<l; i++) {
+          this.setLabelData(attr, val[i], types[i]);
+        }
+      }
+    },
+
+    /*
+    Method: removeLabelData
+
+    Remove label properties from data.
+    
+    Parameters:
+    
+    A variable number of label property strings.
+
+    See also:
+    
+    <Accessors.removeData>.
+    */
+    removeLabelData: function() {
+      removeDataInternal.call(this, 'label', Array.prototype.slice.call(arguments));
+    }
+  };
+})();
+
+/*
+     Class: Graph.Node
+
+     A <Graph> node.
+     
+     Implements:
+     
+     <Accessors> methods.
+     
+     The following <Graph.Util> methods are implemented by <Graph.Node>
+     
+    - <Graph.Util.eachAdjacency>
+    - <Graph.Util.eachLevel>
+    - <Graph.Util.eachSubgraph>
+    - <Graph.Util.eachSubnode>
+    - <Graph.Util.anySubnode>
+    - <Graph.Util.getSubnodes>
+    - <Graph.Util.getParents>
+    - <Graph.Util.isDescendantOf>     
+*/
+Graph.Node = new Class({
+    
+  initialize: function(opt, klass, Node, Edge, Label) {
+    var innerOptions = {
+      'id': '',
+      'name': '',
+      'data': {},
+      'startData': {},
+      'endData': {},
+      'adjacencies': {},
+
+      'selected': false,
+      'drawn': false,
+      'exist': false,
+
+      'angleSpan': {
+        'begin': 0,
+        'end' : 0
+      },
+
+      'pos': new klass,
+      'startPos': new klass,
+      'endPos': new klass
+    };
+    
+    $.extend(this, $.extend(innerOptions, opt));
+    this.Config = this.Node = Node;
+    this.Edge = Edge;
+    this.Label = Label;
+  },
+
+    /*
+       Method: adjacentTo
+    
+       Indicates if the node is adjacent to the node specified by id
+
+       Parameters:
+    
+          id - (string) A node id.
+    
+       Example:
+       (start code js)
+        node.adjacentTo('nodeId') == true;
+       (end code)
+    */
+    adjacentTo: function(node) {
+        return node.id in this.adjacencies;
+    },
+
+    /*
+       Method: getAdjacency
+    
+       Returns a <Graph.Adjacence> object connecting the current <Graph.Node> and the node having *id* as id.
+
+       Parameters:
+    
+          id - (string) A node id.
+    */  
+    getAdjacency: function(id) {
+        return this.adjacencies[id];
+    },
+
+    /*
+      Method: getPos
+   
+      Returns the position of the node.
+  
+      Parameters:
+   
+         type - (string) Default's *current*. Possible values are "start", "end" or "current".
+   
+      Returns:
+   
+        A <Complex> or <Polar> instance.
+  
+      Example:
+      (start code js)
+       var pos = node.getPos('end');
+      (end code)
+   */
+   getPos: function(type) {
+       type = type || "current";
+       if(type == "current") {
+         return this.pos;
+       } else if(type == "end") {
+         return this.endPos;
+       } else if(type == "start") {
+         return this.startPos;
+       }
+   },
+   /*
+     Method: setPos
+  
+     Sets the node's position.
+  
+     Parameters:
+  
+        value - (object) A <Complex> or <Polar> instance.
+        type - (string) Default's *current*. Possible values are "start", "end" or "current".
+  
+     Example:
+     (start code js)
+      node.setPos(new $jit.Complex(0, 0), 'end');
+     (end code)
+  */
+  setPos: function(value, type) {
+      type = type || "current";
+      var pos;
+      if(type == "current") {
+        pos = this.pos;
+      } else if(type == "end") {
+        pos = this.endPos;
+      } else if(type == "start") {
+        pos = this.startPos;
+      }
+      pos.set(value);
+  }
+});
+
+Graph.Node.implement(Accessors);
+
+/*
+     Class: Graph.Adjacence
+
+     A <Graph> adjacence (or edge) connecting two <Graph.Nodes>.
+     
+     Implements:
+     
+     <Accessors> methods.
+
+     See also:
+
+     <Graph>, <Graph.Node>
+
+     Properties:
+     
+      nodeFrom - A <Graph.Node> connected by this edge.
+      nodeTo - Another  <Graph.Node> connected by this edge.
+      data - Node data property containing a hash (i.e {}) with custom options.
+*/
+Graph.Adjacence = new Class({
+  
+  initialize: function(nodeFrom, nodeTo, data, Edge, Label) {
+    this.nodeFrom = nodeFrom;
+    this.nodeTo = nodeTo;
+    this.data = data || {};
+    this.startData = {};
+    this.endData = {};
+    this.Config = this.Edge = Edge;
+    this.Label = Label;
+  }
+});
+
+Graph.Adjacence.implement(Accessors);
+
+/*
+   Object: Graph.Util
+
+   <Graph> traversal and processing utility object.
+   
+   Note:
+   
+   For your convenience some of these methods have also been appended to <Graph> and <Graph.Node> classes.
+*/
+Graph.Util = {
+    /*
+       filter
+    
+       For internal use only. Provides a filtering function based on flags.
+    */
+    filter: function(param) {
+        if(!param || !($.type(param) == 'string')) return function() { return true; };
+        var props = param.split(" ");
+        return function(elem) {
+            for(var i=0; i<props.length; i++) { 
+              if(elem[props[i]]) { 
+                return false; 
+              }
+            }
+            return true;
+        };
+    },
+    /*
+       Method: getNode
+    
+       Returns a <Graph.Node> by *id*.
+       
+       Also implemented by:
+       
+       <Graph>
+
+       Parameters:
+
+       graph - (object) A <Graph> instance.
+       id - (string) A <Graph.Node> id.
+
+       Example:
+
+       (start code js)
+         $jit.Graph.Util.getNode(graph, 'nodeid');
+         //or...
+         graph.getNode('nodeid');
+       (end code)
+    */
+    getNode: function(graph, id) {
+        return graph.nodes[id];
+    },
+    
+    /*
+       Method: eachNode
+    
+       Iterates over <Graph> nodes performing an *action*.
+       
+       Also implemented by:
+       
+       <Graph>.
+
+       Parameters:
+
+       graph - (object) A <Graph> instance.
+       action - (function) A callback function having a <Graph.Node> as first formal parameter.
+
+       Example:
+       (start code js)
+         $jit.Graph.Util.eachNode(graph, function(node) {
+          alert(node.name);
+         });
+         //or...
+         graph.eachNode(function(node) {
+           alert(node.name);
+         });
+       (end code)
+    */
+    eachNode: function(graph, action, flags) {
+        var filter = this.filter(flags);
+        for(var i in graph.nodes) {
+          if(filter(graph.nodes[i])) action(graph.nodes[i]);
+        } 
+    },
+    
+    /*
+      Method: each
+   
+      Iterates over <Graph> nodes performing an *action*. It's an alias for <Graph.Util.eachNode>.
+      
+      Also implemented by:
+      
+      <Graph>.
+  
+      Parameters:
+  
+      graph - (object) A <Graph> instance.
+      action - (function) A callback function having a <Graph.Node> as first formal parameter.
+  
+      Example:
+      (start code js)
+        $jit.Graph.Util.each(graph, function(node) {
+         alert(node.name);
+        });
+        //or...
+        graph.each(function(node) {
+          alert(node.name);
+        });
+      (end code)
+   */
+   each: function(graph, action, flags) {
+      this.eachNode(graph, action, flags); 
+   },
+
+ /*
+       Method: eachAdjacency
+    
+       Iterates over <Graph.Node> adjacencies applying the *action* function.
+       
+       Also implemented by:
+       
+       <Graph.Node>.
+
+       Parameters:
+
+       node - (object) A <Graph.Node>.
+       action - (function) A callback function having <Graph.Adjacence> as first formal parameter.
+
+       Example:
+       (start code js)
+         $jit.Graph.Util.eachAdjacency(node, function(adj) {
+          alert(adj.nodeTo.name);
+         });
+         //or...
+         node.eachAdjacency(function(adj) {
+           alert(adj.nodeTo.name);
+         });
+       (end code)
+    */
+    eachAdjacency: function(node, action, flags) {
+        var adj = node.adjacencies, filter = this.filter(flags);
+        for(var id in adj) {
+          var a = adj[id];
+          if(filter(a)) {
+            if(a.nodeFrom != node) {
+              var tmp = a.nodeFrom;
+              a.nodeFrom = a.nodeTo;
+              a.nodeTo = tmp;
+            }
+            action(a, id);
+          }
+        }
+    },
+
+     /*
+       Method: computeLevels
+    
+       Performs a BFS traversal setting the correct depth for each node.
+        
+       Also implemented by:
+       
+       <Graph>.
+       
+       Note:
+       
+       The depth of each node can then be accessed by 
+       >node._depth
+
+       Parameters:
+
+       graph - (object) A <Graph>.
+       id - (string) A starting node id for the BFS traversal.
+       startDepth - (optional|number) A minimum depth value. Default's 0.
+
+    */
+    computeLevels: function(graph, id, startDepth, flags) {
+        startDepth = startDepth || 0;
+        var filter = this.filter(flags);
+        this.eachNode(graph, function(elem) {
+            elem._flag = false;
+            elem._depth = -1;
+        }, flags);
+        var root = graph.getNode(id);
+        root._depth = startDepth;
+        var queue = [root];
+        while(queue.length != 0) {
+            var node = queue.pop();
+            node._flag = true;
+            this.eachAdjacency(node, function(adj) {
+                var n = adj.nodeTo;
+                if(n._flag == false && filter(n)) {
+                    if(n._depth < 0) n._depth = node._depth + 1 + startDepth;
+                    queue.unshift(n);
+                }
+            }, flags);
+        }
+    },
+
+    /*
+       Method: eachBFS
+    
+       Performs a BFS traversal applying *action* to each <Graph.Node>.
+       
+       Also implemented by:
+       
+       <Graph>.
+
+       Parameters:
+
+       graph - (object) A <Graph>.
+       id - (string) A starting node id for the BFS traversal.
+       action - (function) A callback function having a <Graph.Node> as first formal parameter.
+
+       Example:
+       (start code js)
+         $jit.Graph.Util.eachBFS(graph, 'mynodeid', function(node) {
+          alert(node.name);
+         });
+         //or...
+         graph.eachBFS('mynodeid', function(node) {
+           alert(node.name);
+         });
+       (end code)
+    */
+    eachBFS: function(graph, id, action, flags) {
+        var filter = this.filter(flags);
+        this.clean(graph);
+        var queue = [graph.getNode(id)];
+        while(queue.length != 0) {
+            var node = queue.pop();
+            node._flag = true;
+            action(node, node._depth);
+            this.eachAdjacency(node, function(adj) {
+                var n = adj.nodeTo;
+                if(n._flag == false && filter(n)) {
+                    n._flag = true;
+                    queue.unshift(n);
+                }
+            }, flags);
+        }
+    },
+    
+    /*
+       Method: eachLevel
+    
+       Iterates over a node's subgraph applying *action* to the nodes of relative depth between *levelBegin* and *levelEnd*.
+       
+       Also implemented by:
+       
+       <Graph.Node>.
+
+       Parameters:
+       
+       node - (object) A <Graph.Node>.
+       levelBegin - (number) A relative level value.
+       levelEnd - (number) A relative level value.
+       action - (function) A callback function having a <Graph.Node> as first formal parameter.
+
+    */
+    eachLevel: function(node, levelBegin, levelEnd, action, flags) {
+        var d = node._depth, filter = this.filter(flags), that = this;
+        levelEnd = levelEnd === false? Number.MAX_VALUE -d : levelEnd;
+        (function loopLevel(node, levelBegin, levelEnd) {
+            var d = node._depth;
+            if(d >= levelBegin && d <= levelEnd && filter(node)) action(node, d);
+            if(d < levelEnd) {
+                that.eachAdjacency(node, function(adj) {
+                    var n = adj.nodeTo;
+                    if(n._depth > d) loopLevel(n, levelBegin, levelEnd);
+                });
+            }
+        })(node, levelBegin + d, levelEnd + d);      
+    },
+
+    /*
+       Method: eachSubgraph
+    
+       Iterates over a node's children recursively.
+       
+       Also implemented by:
+       
+       <Graph.Node>.
+
+       Parameters:
+       node - (object) A <Graph.Node>.
+       action - (function) A callback function having a <Graph.Node> as first formal parameter.
+
+       Example:
+       (start code js)
+         $jit.Graph.Util.eachSubgraph(node, function(node) {
+           alert(node.name);
+         });
+         //or...
+         node.eachSubgraph(function(node) {
+           alert(node.name);
+         });
+       (end code)
+    */
+    eachSubgraph: function(node, action, flags) {
+      this.eachLevel(node, 0, false, action, flags);
+    },
+
+    /*
+       Method: eachSubnode
+    
+       Iterates over a node's children (without deeper recursion).
+       
+       Also implemented by:
+       
+       <Graph.Node>.
+       
+       Parameters:
+       node - (object) A <Graph.Node>.
+       action - (function) A callback function having a <Graph.Node> as first formal parameter.
+
+       Example:
+       (start code js)
+         $jit.Graph.Util.eachSubnode(node, function(node) {
+          alert(node.name);
+         });
+         //or...
+         node.eachSubnode(function(node) {
+           alert(node.name);
+         });
+       (end code)
+    */
+    eachSubnode: function(node, action, flags) {
+        this.eachLevel(node, 1, 1, action, flags);
+    },
+
+    /*
+       Method: anySubnode
+    
+       Returns *true* if any subnode matches the given condition.
+       
+       Also implemented by:
+       
+       <Graph.Node>.
+
+       Parameters:
+       node - (object) A <Graph.Node>.
+       cond - (function) A callback function returning a Boolean instance. This function has as first formal parameter a <Graph.Node>.
+
+       Example:
+       (start code js)
+         $jit.Graph.Util.anySubnode(node, function(node) { return node.name == "mynodename"; });
+         //or...
+         node.anySubnode(function(node) { return node.name == 'mynodename'; });
+       (end code)
+    */
+    anySubnode: function(node, cond, flags) {
+      var flag = false;
+      cond = cond || $.lambda(true);
+      var c = $.type(cond) == 'string'? function(n) { return n[cond]; } : cond;
+      this.eachSubnode(node, function(elem) {
+        if(c(elem)) flag = true;
+      }, flags);
+      return flag;
+    },
+  
+    /*
+       Method: getSubnodes
+    
+       Collects all subnodes for a specified node. 
+       The *level* parameter filters nodes having relative depth of *level* from the root node. 
+       
+       Also implemented by:
+       
+       <Graph.Node>.
+
+       Parameters:
+       node - (object) A <Graph.Node>.
+       level - (optional|number) Default's *0*. A starting relative depth for collecting nodes.
+
+       Returns:
+       An array of nodes.
+
+    */
+    getSubnodes: function(node, level, flags) {
+        var ans = [], that = this;
+        level = level || 0;
+        var levelStart, levelEnd;
+        if($.type(level) == 'array') {
+            levelStart = level[0];
+            levelEnd = level[1];
+        } else {
+            levelStart = level;
+            levelEnd = Number.MAX_VALUE - node._depth;
+        }
+        this.eachLevel(node, levelStart, levelEnd, function(n) {
+            ans.push(n);
+        }, flags);
+        return ans;
+    },
+  
+  
+    /*
+       Method: getParents
+    
+       Returns an Array of <Graph.Nodes> which are parents of the given node.
+       
+       Also implemented by:
+       
+       <Graph.Node>.
+
+       Parameters:
+       node - (object) A <Graph.Node>.
+
+       Returns:
+       An Array of <Graph.Nodes>.
+
+       Example:
+       (start code js)
+         var pars = $jit.Graph.Util.getParents(node);
+         //or...
+         var pars = node.getParents();
+         
+         if(pars.length > 0) {
+           //do stuff with parents
+         }
+       (end code)
+    */
+    getParents: function(node) {
+        var ans = [];
+        this.eachAdjacency(node, function(adj) {
+            var n = adj.nodeTo;
+            if(n._depth < node._depth) ans.push(n);
+        });
+        return ans;
+    },
+    
+    /*
+    Method: isDescendantOf
+    Returns a boolean indicating if some node is descendant of the node with the given id. 
+
+    Also implemented by:
+    
+    <Graph.Node>.
+    
+    
+    Parameters:
+    node - (object) A <Graph.Node>.
+    id - (string) A <Graph.Node> id.
+
+    Example:
+    (start code js)
+      $jit.Graph.Util.isDescendantOf(node, "nodeid"); //true|false
+      //or...
+      node.isDescendantOf('nodeid');//true|false
+    (end code)
+ */
+ isDescendantOf: function(node, id) {
+    if(node.id == id) return true;
+    var pars = this.getParents(node), ans = false;
+    for ( var i = 0; !ans && i < pars.length; i++) {
+    ans = ans || this.isDescendantOf(pars[i], id);
+  }
+    return ans;
+ },
+
+ /*
+     Method: clean
+  
+     Cleans flags from nodes.
+
+     Also implemented by:
+     
+     <Graph>.
+     
+     Parameters:
+     graph - A <Graph> instance.
+  */
+  clean: function(graph) { this.eachNode(graph, function(elem) { elem._flag = false; }); },
+  
+  /* 
+    Method: getClosestNodeToOrigin 
+  
+    Returns the closest node to the center of canvas.
+  
+    Also implemented by:
+    
+    <Graph>.
+    
+    Parameters:
+   
+     graph - (object) A <Graph> instance.
+     prop - (optional|string) Default's 'current'. A <Graph.Node> position property. Possible properties are 'start', 'current' or 'end'.
+  
+  */
+  getClosestNodeToOrigin: function(graph, prop, flags) {
+   return this.getClosestNodeToPos(graph, Polar.KER, prop, flags);
+  },
+  
+  /* 
+    Method: getClosestNodeToPos
+  
+    Returns the closest node to the given position.
+  
+    Also implemented by:
+    
+    <Graph>.
+    
+    Parameters:
+   
+     graph - (object) A <Graph> instance.
+     pos - (object) A <Complex> or <Polar> instance.
+     prop - (optional|string) Default's *current*. A <Graph.Node> position property. Possible properties are 'start', 'current' or 'end'.
+  
+  */
+  getClosestNodeToPos: function(graph, pos, prop, flags) {
+   var node = null;
+   prop = prop || 'current';
+   pos = pos && pos.getc(true) || Complex.KER;
+   var distance = function(a, b) {
+     var d1 = a.x - b.x, d2 = a.y - b.y;
+     return d1 * d1 + d2 * d2;
+   };
+   this.eachNode(graph, function(elem) {
+     node = (node == null || distance(elem.getPos(prop).getc(true), pos) < distance(
+         node.getPos(prop).getc(true), pos)) ? elem : node;
+   }, flags);
+   return node;
+  } 
+};
+
+//Append graph methods to <Graph>
+$.each(['get', 'getNode', 'each', 'eachNode', 'computeLevels', 'eachBFS', 'clean', 'getClosestNodeToPos', 'getClosestNodeToOrigin'], function(m) {
+  Graph.prototype[m] = function() {
+    return Graph.Util[m].apply(Graph.Util, [this].concat(Array.prototype.slice.call(arguments)));
+  };
+});
+
+//Append node methods to <Graph.Node>
+$.each(['eachAdjacency', 'eachLevel', 'eachSubgraph', 'eachSubnode', 'anySubnode', 'getSubnodes', 'getParents', 'isDescendantOf'], function(m) {
+  Graph.Node.prototype[m] = function() {
+    return Graph.Util[m].apply(Graph.Util, [this].concat(Array.prototype.slice.call(arguments)));
+  };
+});
+
+/*
+ * File: Graph.Op.js
+ *
+*/
+
+/*
+   Object: Graph.Op
+
+   Perform <Graph> operations like adding/removing <Graph.Nodes> or <Graph.Adjacences>, 
+   morphing a <Graph> into another <Graph>, contracting or expanding subtrees, etc.
+
+*/
+Graph.Op = {
+
+    options: {
+      type: 'nothing',
+      duration: 2000,
+      hideLabels: true,
+      fps:30
+    },
+    
+    initialize: function(viz) {
+      this.viz = viz;
+    },
+
+    /*
+       Method: removeNode
+    
+       Removes one or more <Graph.Nodes> from the visualization. 
+       It can also perform several animations like fading sequentially, fading concurrently, iterating or replotting.
+
+       Parameters:
+    
+        node - (string|array) The node's id. Can also be an array having many ids.
+        opt - (object) Animation options. It's an object with optional properties described below
+        type - (string) Default's *nothing*. Type of the animation. Can be "nothing", "replot", "fade:seq",  "fade:con" or "iter".
+        duration - Described in <Options.Fx>.
+        fps - Described in <Options.Fx>.
+        transition - Described in <Options.Fx>.
+        hideLabels - (boolean) Default's *true*. Hide labels during the animation.
+   
+      Example:
+      (start code js)
+        var viz = new $jit.Viz(options);
+        viz.op.removeNode('nodeId', {
+          type: 'fade:seq',
+          duration: 1000,
+          hideLabels: false,
+          transition: $jit.Trans.Quart.easeOut
+        });
+        //or also
+        viz.op.removeNode(['someId', 'otherId'], {
+          type: 'fade:con',
+          duration: 1500
+        });
+      (end code)
+    */
+  
+    removeNode: function(node, opt) {
+        var viz = this.viz;
+        var options = $.merge(this.options, viz.controller, opt);
+        var n = $.splat(node);
+        var i, that, nodeObj;
+        switch(options.type) {
+            case 'nothing':
+                for(i=0; i<n.length; i++) viz.graph.removeNode(n[i]);
+                break;
+            
+            case 'replot':
+                this.removeNode(n, { type: 'nothing' });
+                viz.labels.clearLabels();
+                viz.refresh(true);
+                break;
+            
+            case 'fade:seq': case 'fade':
+                that = this;
+                //set alpha to 0 for nodes to remove.
+                for(i=0; i<n.length; i++) {
+                    nodeObj = viz.graph.getNode(n[i]);
+                    nodeObj.setData('alpha', 0, 'end');
+                }
+                viz.fx.animate($.merge(options, {
+                    modes: ['node-property:alpha'],
+                    onComplete: function() {
+                        that.removeNode(n, { type: 'nothing' });
+                        viz.labels.clearLabels();
+                        viz.reposition();
+                        viz.fx.animate($.merge(options, {
+                            modes: ['linear']
+                        }));
+                    }
+                }));
+                break;
+            
+            case 'fade:con':
+                that = this;
+                //set alpha to 0 for nodes to remove. Tag them for being ignored on computing positions.
+                for(i=0; i<n.length; i++) {
+                    nodeObj = viz.graph.getNode(n[i]);
+                    nodeObj.setData('alpha', 0, 'end');
+                    nodeObj.ignore = true;
+                }
+                viz.reposition();
+                viz.fx.animate($.merge(options, {
+                    modes: ['node-property:alpha', 'linear'],
+                    onComplete: function() {
+                        that.removeNode(n, { type: 'nothing' });
+                        options.onComplete && options.onComplete();
+                    }
+                }));
+                break;
+            
+            case 'iter':
+                that = this;
+                viz.fx.sequence({
+                    condition: function() { return n.length != 0; },
+                    step: function() { that.removeNode(n.shift(), { type: 'nothing' });  viz.labels.clearLabels(); },
+                    onComplete: function() { options.onComplete && options.onComplete(); },
+                    duration: Math.ceil(options.duration / n.length)
+                });
+                break;
+                
+            default: this.doError();
+        }
+    },
+    
+    /*
+       Method: removeEdge
+    
+       Removes one or more <Graph.Adjacences> from the visualization. 
+       It can also perform several animations like fading sequentially, fading concurrently, iterating or replotting.
+
+       Parameters:
+    
+       vertex - (array) An array having two strings which are the ids of the nodes connected by this edge (i.e ['id1', 'id2']). Can also be a two dimensional array holding many edges (i.e [['id1', 'id2'], ['id3', 'id4'], ...]).
+       opt - (object) Animation options. It's an object with optional properties described below
+       type - (string) Default's *nothing*. Type of the animation. Can be "nothing", "replot", "fade:seq",  "fade:con" or "iter".
+       duration - Described in <Options.Fx>.
+       fps - Described in <Options.Fx>.
+       transition - Described in <Options.Fx>.
+       hideLabels - (boolean) Default's *true*. Hide labels during the animation.
+   
+      Example:
+      (start code js)
+        var viz = new $jit.Viz(options);
+        viz.op.removeEdge(['nodeId', 'otherId'], {
+          type: 'fade:seq',
+          duration: 1000,
+          hideLabels: false,
+          transition: $jit.Trans.Quart.easeOut
+        });
+        //or also
+        viz.op.removeEdge([['someId', 'otherId'], ['id3', 'id4']], {
+          type: 'fade:con',
+          duration: 1500
+        });
+      (end code)
+    
+    */
+    removeEdge: function(vertex, opt) {
+        var viz = this.viz;
+        var options = $.merge(this.options, viz.controller, opt);
+        var v = ($.type(vertex[0]) == 'string')? [vertex] : vertex;
+        var i, that, adj;
+        switch(options.type) {
+            case 'nothing':
+                for(i=0; i<v.length; i++)   viz.graph.removeAdjacence(v[i][0], v[i][1]);
+                break;
+            
+            case 'replot':
+                this.removeEdge(v, { type: 'nothing' });
+                viz.refresh(true);
+                break;
+            
+            case 'fade:seq': case 'fade':
+                that = this;
+                //set alpha to 0 for edges to remove.
+                for(i=0; i<v.length; i++) {
+                    adj = viz.graph.getAdjacence(v[i][0], v[i][1]);
+                    if(adj) {
+                        adj.setData('alpha', 0,'end');
+                    }
+                }
+                viz.fx.animate($.merge(options, {
+                    modes: ['edge-property:alpha'],
+                    onComplete: function() {
+                        that.removeEdge(v, { type: 'nothing' });
+                        viz.reposition();
+                        viz.fx.animate($.merge(options, {
+                            modes: ['linear']
+                        }));
+                    }
+                }));
+                break;
+            
+            case 'fade:con':
+                that = this;
+                //set alpha to 0 for nodes to remove. Tag them for being ignored when computing positions.
+                for(i=0; i<v.length; i++) {
+                    adj = viz.graph.getAdjacence(v[i][0], v[i][1]);
+                    if(adj) {
+                        adj.setData('alpha',0 ,'end');
+                        adj.ignore = true;
+                    }
+                }
+                viz.reposition();
+                viz.fx.animate($.merge(options, {
+                    modes: ['edge-property:alpha', 'linear'],
+                    onComplete: function() {
+                        that.removeEdge(v, { type: 'nothing' });
+                        options.onComplete && options.onComplete();
+                    }
+                }));
+                break;
+            
+            case 'iter':
+                that = this;
+                viz.fx.sequence({
+                    condition: function() { return v.length != 0; },
+                    step: function() { that.removeEdge(v.shift(), { type: 'nothing' }); viz.labels.clearLabels(); },
+                    onComplete: function() { options.onComplete(); },
+                    duration: Math.ceil(options.duration / v.length)
+                });
+                break;
+                
+            default: this.doError();
+        }
+    },
+    
+    /*
+       Method: sum
+    
+       Adds a new graph to the visualization. 
+       The JSON graph (or tree) must at least have a common node with the current graph plotted by the visualization. 
+       The resulting graph can be defined as follows <http://mathworld.wolfram.com/GraphSum.html>
+
+       Parameters:
+    
+       json - (object) A json tree or graph structure. See also <Loader.loadJSON>.
+       opt - (object) Animation options. It's an object with optional properties described below
+       type - (string) Default's *nothing*. Type of the animation. Can be "nothing", "replot", "fade:seq",  "fade:con".
+       duration - Described in <Options.Fx>.
+       fps - Described in <Options.Fx>.
+       transition - Described in <Options.Fx>.
+       hideLabels - (boolean) Default's *true*. Hide labels during the animation.
+   
+      Example:
+      (start code js)
+        //...json contains a tree or graph structure...
+
+        var viz = new $jit.Viz(options);
+        viz.op.sum(json, {
+          type: 'fade:seq',
+          duration: 1000,
+          hideLabels: false,
+          transition: $jit.Trans.Quart.easeOut
+        });
+        //or also
+        viz.op.sum(json, {
+          type: 'fade:con',
+          duration: 1500
+        });
+      (end code)
+    
+    */
+    sum: function(json, opt) {
+        var viz = this.viz;
+        var options = $.merge(this.options, viz.controller, opt), root = viz.root;
+        var graph;
+        viz.root = opt.id || viz.root;
+        switch(options.type) {
+            case 'nothing':
+                graph = viz.construct(json);
+                graph.eachNode(function(elem) {
+                    elem.eachAdjacency(function(adj) {
+                        viz.graph.addAdjacence(adj.nodeFrom, adj.nodeTo, adj.data);
+                    });
+                });
+                break;
+            
+            case 'replot':
+                viz.refresh(true);
+                this.sum(json, { type: 'nothing' });
+                viz.refresh(true);
+                break;
+            
+            case 'fade:seq': case 'fade': case 'fade:con':
+                that = this;
+                graph = viz.construct(json);
+
+                //set alpha to 0 for nodes to add.
+                var fadeEdges = this.preprocessSum(graph);
+                var modes = !fadeEdges? ['node-property:alpha'] : ['node-property:alpha', 'edge-property:alpha'];
+                viz.reposition();
+                if(options.type != 'fade:con') {
+                    viz.fx.animate($.merge(options, {
+                        modes: ['linear'],
+                        onComplete: function() {
+                            viz.fx.animate($.merge(options, {
+                                modes: modes,
+                                onComplete: function() {
+                                    options.onComplete();
+                                }
+                            }));
+                        }
+                    }));
+                } else {
+                    viz.graph.eachNode(function(elem) {
+                        if (elem.id != root && elem.pos.isZero()) {
+                          elem.pos.set(elem.endPos); 
+                          elem.startPos.set(elem.endPos);
+                        }
+                    });
+                    viz.fx.animate($.merge(options, {
+                        modes: ['linear'].concat(modes)
+                    }));
+                }
+                break;
+
+            default: this.doError();
+        }
+    },
+    
+    /*
+       Method: morph
+    
+       This method will transform the current visualized graph into the new JSON representation passed in the method. 
+       The JSON object must at least have the root node in common with the current visualized graph.
+
+       Parameters:
+    
+       json - (object) A json tree or graph structure. See also <Loader.loadJSON>.
+       opt - (object) Animation options. It's an object with optional properties described below
+       type - (string) Default's *nothing*. Type of the animation. Can be "nothing", "replot", "fade:con".
+       duration - Described in <Options.Fx>.
+       fps - Described in <Options.Fx>.
+       transition - Described in <Options.Fx>.
+       hideLabels - (boolean) Default's *true*. Hide labels during the animation.
+       id - (string) The shared <Graph.Node> id between both graphs.
+       
+       extraModes - (optional|object) When morphing with an animation, dollar prefixed data parameters are added to 
+                    *endData* and not *data* itself. This way you can animate dollar prefixed parameters during your morphing operation. 
+                    For animating these extra-parameters you have to specify an object that has animation groups as keys and animation 
+                    properties as values, just like specified in <Graph.Plot.animate>.
+   
+      Example:
+      (start code js)
+        //...json contains a tree or graph structure...
+
+        var viz = new $jit.Viz(options);
+        viz.op.morph(json, {
+          type: 'fade',
+          duration: 1000,
+          hideLabels: false,
+          transition: $jit.Trans.Quart.easeOut
+        });
+        //or also
+        viz.op.morph(json, {
+          type: 'fade',
+          duration: 1500
+        });
+        //if the json data contains dollar prefixed params
+        //like $width or $height these too can be animated
+        viz.op.morph(json, {
+          type: 'fade',
+          duration: 1500
+        }, {
+          'node-property': ['width', 'height']
+        });
+      (end code)
+    
+    */
+    morph: function(json, opt, extraModes) {
+        extraModes = extraModes || {};
+        var viz = this.viz;
+        var options = $.merge(this.options, viz.controller, opt), root = viz.root;
+        var graph;
+        //TODO(nico) this hack makes morphing work with the Hypertree. 
+        //Need to check if it has been solved and this can be removed.
+        viz.root = opt.id || viz.root;
+        switch(options.type) {
+            case 'nothing':
+                graph = viz.construct(json);
+                graph.eachNode(function(elem) {
+                  var nodeExists = viz.graph.hasNode(elem.id);  
+                  elem.eachAdjacency(function(adj) {
+                    var adjExists = !!viz.graph.getAdjacence(adj.nodeFrom.id, adj.nodeTo.id);
+                    viz.graph.addAdjacence(adj.nodeFrom, adj.nodeTo, adj.data);
+                    //Update data properties if the node existed
+                    if(adjExists) {
+                      var addedAdj = viz.graph.getAdjacence(adj.nodeFrom.id, adj.nodeTo.id);
+                      for(var prop in (adj.data || {})) {
+                        addedAdj.data[prop] = adj.data[prop];
+                      }
+                    }
+                  });
+                  //Update data properties if the node existed
+                  if(nodeExists) {
+                    var addedNode = viz.graph.getNode(elem.id);
+                    for(var prop in (elem.data || {})) {
+                      addedNode.data[prop] = elem.data[prop];
+                    }
+                  }
+                });
+                viz.graph.eachNode(function(elem) {
+                    elem.eachAdjacency(function(adj) {
+                        if(!graph.getAdjacence(adj.nodeFrom.id, adj.nodeTo.id)) {
+                            viz.graph.removeAdjacence(adj.nodeFrom.id, adj.nodeTo.id);
+                        }
+                    });
+                    if(!graph.hasNode(elem.id)) viz.graph.removeNode(elem.id);
+                });
+                
+                break;
+            
+            case 'replot':
+                viz.labels.clearLabels(true);
+                this.morph(json, { type: 'nothing' });
+                viz.refresh(true);
+                viz.refresh(true);
+                break;
+                
+            case 'fade:seq': case 'fade': case 'fade:con':
+                that = this;
+                graph = viz.construct(json);
+                //preprocessing for nodes to delete.
+                //get node property modes to interpolate
+                var nodeModes = ('node-property' in extraModes) 
+                  && $.map($.splat(extraModes['node-property']), 
+                      function(n) { return '$' + n; });
+                viz.graph.eachNode(function(elem) {
+                  var graphNode = graph.getNode(elem.id);   
+                  if(!graphNode) {
+                      elem.setData('alpha', 1);
+                      elem.setData('alpha', 1, 'start');
+                      elem.setData('alpha', 0, 'end');
+                      elem.ignore = true;
+                    } else {
+                      //Update node data information
+                      var graphNodeData = graphNode.data;
+                      for(var prop in graphNodeData) {
+                        if(nodeModes && ($.indexOf(nodeModes, prop) > -1)) {
+                          elem.endData[prop] = graphNodeData[prop];
+                        } else {
+                          elem.data[prop] = graphNodeData[prop];
+                        }
+                      }
+                    }
+                }); 
+                viz.graph.eachNode(function(elem) {
+                    if(elem.ignore) return;
+                    elem.eachAdjacency(function(adj) {
+                        if(adj.nodeFrom.ignore || adj.nodeTo.ignore) return;
+                        var nodeFrom = graph.getNode(adj.nodeFrom.id);
+                        var nodeTo = graph.getNode(adj.nodeTo.id);
+                        if(!nodeFrom.adjacentTo(nodeTo)) {
+                            var adj = viz.graph.getAdjacence(nodeFrom.id, nodeTo.id);
+                            fadeEdges = true;
+                            adj.setData('alpha', 1);
+                            adj.setData('alpha', 1, 'start');
+                            adj.setData('alpha', 0, 'end');
+                        }
+                    });
+                }); 
+                //preprocessing for adding nodes.
+                var fadeEdges = this.preprocessSum(graph);
+
+                var modes = !fadeEdges? ['node-property:alpha'] : 
+                                        ['node-property:alpha', 
+                                         'edge-property:alpha'];
+                //Append extra node-property animations (if any)
+                modes[0] = modes[0] + (('node-property' in extraModes)? 
+                    (':' + $.splat(extraModes['node-property']).join(':')) : '');
+                //Append extra edge-property animations (if any)
+                modes[1] = (modes[1] || 'edge-property:alpha') + (('edge-property' in extraModes)? 
+                    (':' + $.splat(extraModes['edge-property']).join(':')) : '');
+                //Add label-property animations (if any)
+                if('label-property' in extraModes) {
+                  modes.push('label-property:' + $.splat(extraModes['label-property']).join(':'))
+                }
+                //only use reposition if its implemented.
+                if (viz.reposition) {
+                  viz.reposition();
+                } else {
+                  viz.compute('end');
+                }
+                viz.graph.eachNode(function(elem) {
+                    if (elem.id != root && elem.pos.getp().equals(Polar.KER)) {
+                      elem.pos.set(elem.endPos); elem.startPos.set(elem.endPos);
+                    }
+                });
+                viz.fx.animate($.merge(options, {
+                    modes: [extraModes.position || 'polar'].concat(modes),
+                    onComplete: function() {
+                        viz.graph.eachNode(function(elem) {
+                            if(elem.ignore) viz.graph.removeNode(elem.id);
+                        });
+                        viz.graph.eachNode(function(elem) {
+                            elem.eachAdjacency(function(adj) {
+                                if(adj.ignore) viz.graph.removeAdjacence(adj.nodeFrom.id, adj.nodeTo.id);
+                            });
+                        });
+                        options.onComplete();
+                    }
+                }));
+                break;
+
+            default:;
+        }
+    },
+
+    
+  /*
+    Method: contract
+    Collapses the subtree of the given node. The node will have a _collapsed=true_ property.
+    
+    Parameters:
+    node - (object) A <Graph.Node>.
+    opt - (object) An object containing options described below
+    type - (string) Whether to 'replot' or 'animate' the contraction.
+   
+    There are also a number of Animation options. For more information see <Options.Fx>.
+
+    Example:
+    (start code js)
+     var viz = new $jit.Viz(options);
+     viz.op.contract(node, {
+       type: 'animate',
+       duration: 1000,
+       hideLabels: true,
+       transition: $jit.Trans.Quart.easeOut
+     });
+   (end code)
+   */
+    contract: function(node, opt) {
+      var viz = this.viz;
+      if(node.collapsed || !node.anySubnode($.lambda(true))) return;
+      opt = $.merge(this.options, viz.config, opt || {}, {
+        'modes': ['node-property:alpha:span', 'linear']
+      });
+      node.collapsed = true;
+      (function subn(n) {
+        n.eachSubnode(function(ch) {
+          ch.ignore = true;
+          ch.setData('alpha', 0, opt.type == 'animate'? 'end' : 'current');
+          subn(ch);
+        });
+      })(node);
+      if(opt.type == 'animate') {
+        viz.compute('end');
+        if(viz.rotated) {
+          viz.rotate(viz.rotated, 'none', {
+            'property':'end'
+          });
+        }
+        (function subn(n) {
+          n.eachSubnode(function(ch) {
+            ch.setPos(node.getPos('end'), 'end');
+            subn(ch);
+          });
+        })(node);
+        viz.fx.animate(opt);
+      } else if(opt.type == 'replot'){
+        viz.refresh();
+      }
+    },
+    
+    /*
+    Method: expand
+    Expands the previously contracted subtree. The given node must have the _collapsed=true_ property.
+    
+    Parameters:
+    node - (object) A <Graph.Node>.
+    opt - (object) An object containing options described below
+    type - (string) Whether to 'replot' or 'animate'.
+     
+    There are also a number of Animation options. For more information see <Options.Fx>.
+
+    Example:
+    (start code js)
+      var viz = new $jit.Viz(options);
+      viz.op.expand(node, {
+        type: 'animate',
+        duration: 1000,
+        hideLabels: true,
+        transition: $jit.Trans.Quart.easeOut
+      });
+    (end code)
+   */
+    expand: function(node, opt) {
+      if(!('collapsed' in node)) return;
+      var viz = this.viz;
+      opt = $.merge(this.options, viz.config, opt || {}, {
+        'modes': ['node-property:alpha:span', 'linear']
+      });
+      delete node.collapsed;
+      (function subn(n) {
+        n.eachSubnode(function(ch) {
+          delete ch.ignore;
+          ch.setData('alpha', 1, opt.type == 'animate'? 'end' : 'current');
+          subn(ch);
+        });
+      })(node);
+      if(opt.type == 'animate') {
+        viz.compute('end');
+        if(viz.rotated) {
+          viz.rotate(viz.rotated, 'none', {
+            'property':'end'
+          });
+        }
+        viz.fx.animate(opt);
+      } else if(opt.type == 'replot'){
+        viz.refresh();
+      }
+    },
+
+    preprocessSum: function(graph) {
+        var viz = this.viz;
+        graph.eachNode(function(elem) {
+            if(!viz.graph.hasNode(elem.id)) {
+                viz.graph.addNode(elem);
+                var n = viz.graph.getNode(elem.id);
+                n.setData('alpha', 0);
+                n.setData('alpha', 0, 'start');
+                n.setData('alpha', 1, 'end');
+            }
+        }); 
+        var fadeEdges = false;
+        graph.eachNode(function(elem) {
+            elem.eachAdjacency(function(adj) {
+                var nodeFrom = viz.graph.getNode(adj.nodeFrom.id);
+                var nodeTo = viz.graph.getNode(adj.nodeTo.id);
+                if(!nodeFrom.adjacentTo(nodeTo)) {
+                    var adj = viz.graph.addAdjacence(nodeFrom, nodeTo, adj.data);
+                    if(nodeFrom.startAlpha == nodeFrom.endAlpha 
+                    && nodeTo.startAlpha == nodeTo.endAlpha) {
+                        fadeEdges = true;
+                        adj.setData('alpha', 0);
+                        adj.setData('alpha', 0, 'start');
+                        adj.setData('alpha', 1, 'end');
+                    } 
+                }
+            });
+        }); 
+        return fadeEdges;
+    }
+};
+
+
+
+/*
+   File: Helpers.js
+   Helpers are objects that contain rendering primitives (like rectangles, ellipses, etc), for plotting nodes and edges.
+   Helpers also contain implementations of the *contains* method, a method returning a boolean indicating whether the mouse
+   position is over the rendered shape.
+   
+   Helpers are very useful when implementing new NodeTypes, since you can access them through *this.nodeHelper* and 
+   *this.edgeHelper* <Graph.Plot> properties, providing you with simple primitives and mouse-position check functions.
+   
+   Example:
+   (start code js)
+   //implement a new node type
+   $jit.Viz.Plot.NodeTypes.implement({
+     'customNodeType': {
+       'render': function(node, canvas) {
+         this.nodeHelper.circle.render ...
+       },
+       'contains': function(node, pos) {
+         this.nodeHelper.circle.contains ...
+       }
+     }
+   });
+   //implement an edge type
+   $jit.Viz.Plot.EdgeTypes.implement({
+     'customNodeType': {
+       'render': function(node, canvas) {
+         this.edgeHelper.circle.render ...
+       },
+       //optional
+       'contains': function(node, pos) {
+         this.edgeHelper.circle.contains ...
+       }
+     }
+   });
+   (end code)
+
+*/
+
+/*
+   Object: NodeHelper
+   
+   Contains rendering and other type of primitives for simple shapes.
+ */
+var NodeHelper = {
+  'none': {
+    'render': $.empty,
+    'contains': $.lambda(false)
+  },
+  /*
+   Object: NodeHelper.circle
+   */
+  'circle': {
+    /*
+     Method: render
+     
+     Renders a circle into the canvas.
+     
+     Parameters:
+     
+     type - (string) Possible options are 'fill' or 'stroke'.
+     pos - (object) An *x*, *y* object with the position of the center of the circle.
+     radius - (number) The radius of the circle to be rendered.
+     canvas - (object) A <Canvas> instance.
+     
+     Example:
+     (start code js)
+     NodeHelper.circle.render('fill', { x: 10, y: 30 }, 30, viz.canvas);
+     (end code)
+     */
+    'render': function(type, pos, radius, canvas){
+      var ctx = canvas.getCtx();
+      ctx.beginPath();
+      ctx.arc(pos.x, pos.y, radius, 0, Math.PI * 2, true);
+      ctx.closePath();
+      ctx[type]();
+    },
+    /*
+    Method: contains
+    
+    Returns *true* if *pos* is contained in the area of the shape. Returns *false* otherwise.
+    
+    Parameters:
+    
+    npos - (object) An *x*, *y* object with the <Graph.Node> position.
+    pos - (object) An *x*, *y* object with the position to check.
+    radius - (number) The radius of the rendered circle.
+    
+    Example:
+    (start code js)
+    NodeHelper.circle.contains({ x: 10, y: 30 }, { x: 15, y: 35 }, 30); //true
+    (end code)
+    */
+    'contains': function(npos, pos, radius){
+      var diffx = npos.x - pos.x, 
+          diffy = npos.y - pos.y, 
+          diff = diffx * diffx + diffy * diffy;
+      return diff <= radius * radius;
+    }
+  },
+  /*
+  Object: NodeHelper.ellipse
+  */
+  'ellipse': {
+    /*
+    Method: render
+    
+    Renders an ellipse into the canvas.
+    
+    Parameters:
+    
+    type - (string) Possible options are 'fill' or 'stroke'.
+    pos - (object) An *x*, *y* object with the position of the center of the ellipse.
+    width - (number) The width of the ellipse.
+    height - (number) The height of the ellipse.
+    canvas - (object) A <Canvas> instance.
+    
+    Example:
+    (start code js)
+    NodeHelper.ellipse.render('fill', { x: 10, y: 30 }, 30, 40, viz.canvas);
+    (end code)
+    */
+    'render': function(type, pos, width, height, canvas){
+      var ctx = canvas.getCtx(),
+          scalex = 1,
+          scaley = 1,
+          scaleposx = 1,
+          scaleposy = 1,
+          radius = 0;
+
+      if (width > height) {
+          radius = width / 2;
+          scaley = height / width;
+          scaleposy = width / height;
+      } else {
+          radius = height / 2;
+          scalex = width / height;
+          scaleposx = height / width;
+      }
+
+      ctx.save();
+      ctx.scale(scalex, scaley);
+      ctx.beginPath();
+      ctx.arc(pos.x * scaleposx, pos.y * scaleposy, radius, 0, Math.PI * 2, true);
+      ctx.closePath();
+      ctx[type]();
+      ctx.restore();
+    },
+    /*
+    Method: contains
+    
+    Returns *true* if *pos* is contained in the area of the shape. Returns *false* otherwise.
+    
+    Parameters:
+    
+    npos - (object) An *x*, *y* object with the <Graph.Node> position.
+    pos - (object) An *x*, *y* object with the position to check.
+    width - (number) The width of the rendered ellipse.
+    height - (number) The height of the rendered ellipse.
+    
+    Example:
+    (start code js)
+    NodeHelper.ellipse.contains({ x: 10, y: 30 }, { x: 15, y: 35 }, 30, 40);
+    (end code)
+    */
+    'contains': function(npos, pos, width, height){
+      var radius = 0,
+          scalex = 1,
+          scaley = 1,
+          diffx = 0,
+          diffy = 0,
+          diff = 0;
+
+      if (width > height) {
+             radius = width / 2;
+             scaley = height / width;
+      } else {
+          radius = height / 2;
+          scalex = width / height;
+      }
+
+      diffx = (npos.x - pos.x) * (1 / scalex);
+      diffy = (npos.y - pos.y) * (1 / scaley);
+      diff = diffx * diffx + diffy * diffy;
+      return diff <= radius * radius;
+    }
+  },
+  /*
+  Object: NodeHelper.square
+  */
+  'square': {
+    /*
+    Method: render
+    
+    Renders a square into the canvas.
+    
+    Parameters:
+    
+    type - (string) Possible options are 'fill' or 'stroke'.
+    pos - (object) An *x*, *y* object with the position of the center of the square.
+    dim - (number) The radius (or half-diameter) of the square.
+    canvas - (object) A <Canvas> instance.
+    
+    Example:
+    (start code js)
+    NodeHelper.square.render('stroke', { x: 10, y: 30 }, 40, viz.canvas);
+    (end code)
+    */
+    'render': function(type, pos, dim, canvas){
+      canvas.getCtx()[type + "Rect"](pos.x - dim, pos.y - dim, 2*dim, 2*dim);
+    },
+    /*
+    Method: contains
+    
+    Returns *true* if *pos* is contained in the area of the shape. Returns *false* otherwise.
+    
+    Parameters:
+    
+    npos - (object) An *x*, *y* object with the <Graph.Node> position.
+    pos - (object) An *x*, *y* object with the position to check.
+    dim - (number) The radius (or half-diameter) of the square.
+    
+    Example:
+    (start code js)
+    NodeHelper.square.contains({ x: 10, y: 30 }, { x: 15, y: 35 }, 30);
+    (end code)
+    */
+    'contains': function(npos, pos, dim){
+      return Math.abs(pos.x - npos.x) <= dim && Math.abs(pos.y - npos.y) <= dim;
+    }
+  },
+  /*
+  Object: NodeHelper.rectangle
+  */
+  'rectangle': {
+    /*
+    Method: render
+    
+    Renders a rectangle into the canvas.
+    
+    Parameters:
+    
+    type - (string) Possible options are 'fill' or 'stroke'.
+    pos - (object) An *x*, *y* object with the position of the center of the rectangle.
+    width - (number) The width of the rectangle.
+    height - (number) The height of the rectangle.
+    canvas - (object) A <Canvas> instance.
+    
+    Example:
+    (start code js)
+    NodeHelper.rectangle.render('fill', { x: 10, y: 30 }, 30, 40, viz.canvas);
+    (end code)
+    */
+    'render': function(type, pos, width, height, canvas){
+      canvas.getCtx()[type + "Rect"](pos.x - width / 2, pos.y - height / 2, 
+                                      width, height);
+    },
+    /*
+    Method: contains
+    
+    Returns *true* if *pos* is contained in the area of the shape. Returns *false* otherwise.
+    
+    Parameters:
+    
+    npos - (object) An *x*, *y* object with the <Graph.Node> position.
+    pos - (object) An *x*, *y* object with the position to check.
+    width - (number) The width of the rendered rectangle.
+    height - (number) The height of the rendered rectangle.
+    
+    Example:
+    (start code js)
+    NodeHelper.rectangle.contains({ x: 10, y: 30 }, { x: 15, y: 35 }, 30, 40);
+    (end code)
+    */
+    'contains': function(npos, pos, width, height){
+      return Math.abs(pos.x - npos.x) <= width / 2
+          && Math.abs(pos.y - npos.y) <= height / 2;
+    }
+  },
+  /*
+  Object: NodeHelper.triangle
+  */
+  'triangle': {
+    /*
+    Method: render
+    
+    Renders a triangle into the canvas.
+    
+    Parameters:
+    
+    type - (string) Possible options are 'fill' or 'stroke'.
+    pos - (object) An *x*, *y* object with the position of the center of the triangle.
+    dim - (number) Half the base and half the height of the triangle.
+    canvas - (object) A <Canvas> instance.
+    
+    Example:
+    (start code js)
+    NodeHelper.triangle.render('stroke', { x: 10, y: 30 }, 40, viz.canvas);
+    (end code)
+    */
+    'render': function(type, pos, dim, canvas){
+      var ctx = canvas.getCtx(), 
+          c1x = pos.x, 
+          c1y = pos.y - dim, 
+          c2x = c1x - dim, 
+          c2y = pos.y + dim, 
+          c3x = c1x + dim, 
+          c3y = c2y;
+      ctx.beginPath();
+      ctx.moveTo(c1x, c1y);
+      ctx.lineTo(c2x, c2y);
+      ctx.lineTo(c3x, c3y);
+      ctx.closePath();
+      ctx[type]();
+    },
+    /*
+    Method: contains
+    
+    Returns *true* if *pos* is contained in the area of the shape. Returns *false* otherwise.
+    
+    Parameters:
+    
+    npos - (object) An *x*, *y* object with the <Graph.Node> position.
+    pos - (object) An *x*, *y* object with the position to check.
+    dim - (number) Half the base and half the height of the triangle.
+    
+    Example:
+    (start code js)
+    NodeHelper.triangle.contains({ x: 10, y: 30 }, { x: 15, y: 35 }, 30);
+    (end code)
+    */
+    'contains': function(npos, pos, dim) {
+      return NodeHelper.circle.contains(npos, pos, dim);
+    }
+  },
+  /*
+  Object: NodeHelper.star
+  */
+  'star': {
+    /*
+    Method: render
+    
+    Renders a star (concave decagon) into the canvas.
+    
+    Parameters:
+    
+    type - (string) Possible options are 'fill' or 'stroke'.
+    pos - (object) An *x*, *y* object with the position of the center of the star.
+    dim - (number) The length of a side of a concave decagon.
+    canvas - (object) A <Canvas> instance.
+    
+    Example:
+    (start code js)
+    NodeHelper.star.render('stroke', { x: 10, y: 30 }, 40, viz.canvas);
+    (end code)
+    */
+    'render': function(type, pos, dim, canvas){
+      var ctx = canvas.getCtx(), 
+          pi5 = Math.PI / 5;
+      ctx.save();
+      ctx.translate(pos.x, pos.y);
+      ctx.beginPath();
+      ctx.moveTo(dim, 0);
+      for (var i = 0; i < 9; i++) {
+        ctx.rotate(pi5);
+        if (i % 2 == 0) {
+          ctx.lineTo((dim / 0.525731) * 0.200811, 0);
+        } else {
+          ctx.lineTo(dim, 0);
+        }
+      }
+      ctx.closePath();
+      ctx[type]();
+      ctx.restore();
+    },
+    /*
+    Method: contains
+    
+    Returns *true* if *pos* is contained in the area of the shape. Returns *false* otherwise.
+    
+    Parameters:
+    
+    npos - (object) An *x*, *y* object with the <Graph.Node> position.
+    pos - (object) An *x*, *y* object with the position to check.
+    dim - (number) The length of a side of a concave decagon.
+    
+    Example:
+    (start code js)
+    NodeHelper.star.contains({ x: 10, y: 30 }, { x: 15, y: 35 }, 30);
+    (end code)
+    */
+    'contains': function(npos, pos, dim) {
+      return NodeHelper.circle.contains(npos, pos, dim);
+    }
+  }
+};
+
+/*
+  Object: EdgeHelper
+  
+  Contains rendering primitives for simple edge shapes.
+*/
+var EdgeHelper = {
+  /*
+    Object: EdgeHelper.line
+  */
+  'line': {
+      /*
+      Method: render
+      
+      Renders a line into the canvas.
+      
+      Parameters:
+      
+      from - (object) An *x*, *y* object with the starting position of the line.
+      to - (object) An *x*, *y* object with the ending position of the line.
+      canvas - (object) A <Canvas> instance.
+      
+      Example:
+      (start code js)
+      EdgeHelper.line.render({ x: 10, y: 30 }, { x: 10, y: 50 }, viz.canvas);
+      (end code)
+      */
+      'render': function(from, to, canvas){
+        var ctx = canvas.getCtx();
+        ctx.beginPath();
+        ctx.moveTo(from.x, from.y);
+        ctx.lineTo(to.x, to.y);
+        ctx.stroke();
+      },
+      /*
+      Method: contains
+      
+      Returns *true* if *pos* is contained in the area of the shape. Returns *false* otherwise.
+      
+      Parameters:
+      
+      posFrom - (object) An *x*, *y* object with a <Graph.Node> position.
+      posTo - (object) An *x*, *y* object with a <Graph.Node> position.
+      pos - (object) An *x*, *y* object with the position to check.
+      epsilon - (number) The dimension of the shape.
+      
+      Example:
+      (start code js)
+      EdgeHelper.line.contains({ x: 10, y: 30 }, { x: 15, y: 35 }, { x: 15, y: 35 }, 30);
+      (end code)
+      */
+      'contains': function(posFrom, posTo, pos, epsilon) {
+        var min = Math.min, 
+            max = Math.max,
+            minPosX = min(posFrom.x, posTo.x),
+            maxPosX = max(posFrom.x, posTo.x),
+            minPosY = min(posFrom.y, posTo.y),
+            maxPosY = max(posFrom.y, posTo.y);
+        
+        if(pos.x >= minPosX && pos.x <= maxPosX 
+            && pos.y >= minPosY && pos.y <= maxPosY) {
+          if(Math.abs(posTo.x - posFrom.x) <= epsilon) {
+            return true;
+          }
+          var dist = (posTo.y - posFrom.y) / (posTo.x - posFrom.x) * (pos.x - posFrom.x) + posFrom.y;
+          return Math.abs(dist - pos.y) <= epsilon;
+        }
+        return false;
+      }
+    },
+  /*
+    Object: EdgeHelper.arrow
+  */
+  'arrow': {
+      /*
+      Method: render
+      
+      Renders an arrow into the canvas.
+      
+      Parameters:
+      
+      from - (object) An *x*, *y* object with the starting position of the arrow.
+      to - (object) An *x*, *y* object with the ending position of the arrow.
+      dim - (number) The dimension of the arrow.
+      swap - (boolean) Whether to set the arrow pointing to the starting position or the ending position.
+      canvas - (object) A <Canvas> instance.
+      
+      Example:
+      (start code js)
+      EdgeHelper.arrow.render({ x: 10, y: 30 }, { x: 10, y: 50 }, 13, false, viz.canvas);
+      (end code)
+      */
+    'render': function(from, to, dim, swap, canvas){
+        var ctx = canvas.getCtx();
+        // invert edge direction
+        if (swap) {
+          var tmp = from;
+          from = to;
+          to = tmp;
+        }
+        var vect = new Complex(to.x - from.x, to.y - from.y);
+        vect.$scale(dim / vect.norm());
+        var intermediatePoint = new Complex(to.x - vect.x, to.y - vect.y),
+            normal = new Complex(-vect.y / 2, vect.x / 2),
+            v1 = intermediatePoint.add(normal), 
+            v2 = intermediatePoint.$add(normal.$scale(-1));
+        
+        ctx.beginPath();
+        ctx.moveTo(from.x, from.y);
+        ctx.lineTo(to.x, to.y);
+        ctx.stroke();
+        ctx.beginPath();
+        ctx.moveTo(v1.x, v1.y);
+        ctx.lineTo(v2.x, v2.y);
+        ctx.lineTo(to.x, to.y);
+        ctx.closePath();
+        ctx.fill();
+    },
+    /*
+    Method: contains
+    
+    Returns *true* if *pos* is contained in the area of the shape. Returns *false* otherwise.
+    
+    Parameters:
+    
+    posFrom - (object) An *x*, *y* object with a <Graph.Node> position.
+    posTo - (object) An *x*, *y* object with a <Graph.Node> position.
+    pos - (object) An *x*, *y* object with the position to check.
+    epsilon - (number) The dimension of the shape.
+    
+    Example:
+    (start code js)
+    EdgeHelper.arrow.contains({ x: 10, y: 30 }, { x: 15, y: 35 }, { x: 15, y: 35 }, 30);
+    (end code)
+    */
+    'contains': function(posFrom, posTo, pos, epsilon) {
+      return EdgeHelper.line.contains(posFrom, posTo, pos, epsilon);
+    }
+  },
+  /*
+    Object: EdgeHelper.hyperline
+  */
+  'hyperline': {
+    /*
+    Method: render
+    
+    Renders a hyperline into the canvas. A hyperline are the lines drawn for the <Hypertree> visualization.
+    
+    Parameters:
+    
+    from - (object) An *x*, *y* object with the starting position of the hyperline. *x* and *y* must belong to [0, 1).
+    to - (object) An *x*, *y* object with the ending position of the hyperline. *x* and *y* must belong to [0, 1).
+    r - (number) The scaling factor.
+    canvas - (object) A <Canvas> instance.
+    
+    Example:
+    (start code js)
+    EdgeHelper.hyperline.render({ x: 10, y: 30 }, { x: 10, y: 50 }, 100, viz.canvas);
+    (end code)
+    */
+    'render': function(from, to, r, canvas){
+      var ctx = canvas.getCtx();  
+      var centerOfCircle = computeArcThroughTwoPoints(from, to);
+      if (centerOfCircle.a > 1000 || centerOfCircle.b > 1000
+          || centerOfCircle.ratio < 0) {
+        ctx.beginPath();
+        ctx.moveTo(from.x * r, from.y * r);
+        ctx.lineTo(to.x * r, to.y * r);
+        ctx.stroke();
+      } else {
+        var angleBegin = Math.atan2(to.y - centerOfCircle.y, to.x
+            - centerOfCircle.x);
+        var angleEnd = Math.atan2(from.y - centerOfCircle.y, from.x
+            - centerOfCircle.x);
+        var sense = sense(angleBegin, angleEnd);
+        ctx.beginPath();
+        ctx.arc(centerOfCircle.x * r, centerOfCircle.y * r, centerOfCircle.ratio
+            * r, angleBegin, angleEnd, sense);
+        ctx.stroke();
+      }
+      /*      
+        Calculates the arc parameters through two points.
+        
+        More information in <http://en.wikipedia.org/wiki/Poincar%C3%A9_disc_model#Analytic_geometry_constructions_in_the_hyperbolic_plane> 
+      
+        Parameters:
+      
+        p1 - A <Complex> instance.
+        p2 - A <Complex> instance.
+        scale - The Disk's diameter.
+      
+        Returns:
+      
+        An object containing some arc properties.
+      */
+      function computeArcThroughTwoPoints(p1, p2){
+        var aDen = (p1.x * p2.y - p1.y * p2.x), bDen = aDen;
+        var sq1 = p1.squaredNorm(), sq2 = p2.squaredNorm();
+        // Fall back to a straight line
+        if (aDen == 0)
+          return {
+            x: 0,
+            y: 0,
+            ratio: -1
+          };
+    
+        var a = (p1.y * sq2 - p2.y * sq1 + p1.y - p2.y) / aDen;
+        var b = (p2.x * sq1 - p1.x * sq2 + p2.x - p1.x) / bDen;
+        var x = -a / 2;
+        var y = -b / 2;
+        var squaredRatio = (a * a + b * b) / 4 - 1;
+        // Fall back to a straight line
+        if (squaredRatio < 0)
+          return {
+            x: 0,
+            y: 0,
+            ratio: -1
+          };
+        var ratio = Math.sqrt(squaredRatio);
+        var out = {
+          x: x,
+          y: y,
+          ratio: ratio > 1000? -1 : ratio,
+          a: a,
+          b: b
+        };
+    
+        return out;
+      }
+      /*      
+        Sets angle direction to clockwise (true) or counterclockwise (false). 
+         
+        Parameters: 
+      
+           angleBegin - Starting angle for drawing the arc. 
+           angleEnd - The HyperLine will be drawn from angleBegin to angleEnd. 
+      
+        Returns: 
+      
+           A Boolean instance describing the sense for drawing the HyperLine. 
+      */
+      function sense(angleBegin, angleEnd){
+        return (angleBegin < angleEnd)? ((angleBegin + Math.PI > angleEnd)? false
+            : true) : ((angleEnd + Math.PI > angleBegin)? true : false);
+      }
+    },
+    /*
+    Method: contains
+    
+    Not Implemented
+    
+    Returns *true* if *pos* is contained in the area of the shape. Returns *false* otherwise.
+    
+    Parameters:
+    
+    posFrom - (object) An *x*, *y* object with a <Graph.Node> position.
+    posTo - (object) An *x*, *y* object with a <Graph.Node> position.
+    pos - (object) An *x*, *y* object with the position to check.
+    epsilon - (number) The dimension of the shape.
+    
+    Example:
+    (start code js)
+    EdgeHelper.hyperline.contains({ x: 10, y: 30 }, { x: 15, y: 35 }, { x: 15, y: 35 }, 30);
+    (end code)
+    */
+    'contains': $.lambda(false)
+  }
+};
+
+
+/*
+ * File: Graph.Plot.js
+ */
+
+/*
+   Object: Graph.Plot
+
+   <Graph> rendering and animation methods.
+   
+   Properties:
+   
+   nodeHelper - <NodeHelper> object.
+   edgeHelper - <EdgeHelper> object.
+*/
+Graph.Plot = {
+    //Default initializer
+    initialize: function(viz, klass){
+      this.viz = viz;
+      this.config = viz.config;
+      this.node = viz.config.Node;
+      this.edge = viz.config.Edge;
+      this.animation = new Animation;
+      this.nodeTypes = new klass.Plot.NodeTypes;
+      this.edgeTypes = new klass.Plot.EdgeTypes;
+      this.labels = viz.labels;
+   },
+
+    //Add helpers
+    nodeHelper: NodeHelper,
+    edgeHelper: EdgeHelper,
+    
+    Interpolator: {
+        //node/edge property parsers
+        'map': {
+          'border': 'color',
+          'color': 'color',
+          'width': 'number',
+          'height': 'number',
+          'dim': 'number',
+          'alpha': 'number',
+          'lineWidth': 'number',
+          'angularWidth':'number',
+          'span':'number',
+          'valueArray':'array-number',
+          'dimArray':'array-number'
+          //'colorArray':'array-color'
+        },
+        
+        //canvas specific parsers
+        'canvas': {
+          'globalAlpha': 'number',
+          'fillStyle': 'color',
+          'strokeStyle': 'color',
+          'lineWidth': 'number',
+          'shadowBlur': 'number',
+          'shadowColor': 'color',
+          'shadowOffsetX': 'number',
+          'shadowOffsetY': 'number',
+          'miterLimit': 'number'
+        },
+  
+        //label parsers
+        'label': {
+          'size': 'number',
+          'color': 'color'
+        },
+  
+        //Number interpolator
+        'compute': function(from, to, delta) {
+          return from + (to - from) * delta;
+        },
+        
+        //Position interpolators
+        'moebius': function(elem, props, delta, vector) {
+          var v = vector.scale(-delta);  
+          if(v.norm() < 1) {
+              var x = v.x, y = v.y;
+              var ans = elem.startPos
+                .getc().moebiusTransformation(v);
+              elem.pos.setc(ans.x, ans.y);
+              v.x = x; v.y = y;
+            }           
+        },
+
+        'linear': function(elem, props, delta) {
+            var from = elem.startPos.getc(true);
+            var to = elem.endPos.getc(true);
+            elem.pos.setc(this.compute(from.x, to.x, delta), 
+                          this.compute(from.y, to.y, delta));
+        },
+
+        'polar': function(elem, props, delta) {
+          var from = elem.startPos.getp(true);
+          var to = elem.endPos.getp();
+          var ans = to.interpolate(from, delta);
+          elem.pos.setp(ans.theta, ans.rho);
+        },
+        
+        //Graph's Node/Edge interpolators
+        'number': function(elem, prop, delta, getter, setter) {
+          var from = elem[getter](prop, 'start');
+          var to = elem[getter](prop, 'end');
+          elem[setter](prop, this.compute(from, to, delta));
+        },
+
+        'color': function(elem, prop, delta, getter, setter) {
+          var from = $.hexToRgb(elem[getter](prop, 'start'));
+          var to = $.hexToRgb(elem[getter](prop, 'end'));
+          var comp = this.compute;
+          var val = $.rgbToHex([parseInt(comp(from[0], to[0], delta)),
+                                parseInt(comp(from[1], to[1], delta)),
+                                parseInt(comp(from[2], to[2], delta))]);
+          
+          elem[setter](prop, val);
+        },
+        
+        'array-number': function(elem, prop, delta, getter, setter) {
+          var from = elem[getter](prop, 'start'),
+              to = elem[getter](prop, 'end'),
+              cur = [];
+          for(var i=0, l=from.length; i<l; i++) {
+            var fromi = from[i], toi = to[i];
+            if(fromi.length) {
+              for(var j=0, len=fromi.length, curi=[]; j<len; j++) {
+                curi.push(this.compute(fromi[j], toi[j], delta));
+              }
+              cur.push(curi);
+            } else {
+              cur.push(this.compute(fromi, toi, delta));
+            }
+          }
+          elem[setter](prop, cur);
+        },
+        
+        'node': function(elem, props, delta, map, getter, setter) {
+          map = this[map];
+          if(props) {
+            var len = props.length;
+            for(var i=0; i<len; i++) {
+              var pi = props[i];
+              this[map[pi]](elem, pi, delta, getter, setter);
+            }
+          } else {
+            for(var pi in map) {
+              this[map[pi]](elem, pi, delta, getter, setter);
+            }
+          }
+        },
+        
+        'edge': function(elem, props, delta, mapKey, getter, setter) {
+            var adjs = elem.adjacencies;
+            for(var id in adjs) this['node'](adjs[id], props, delta, mapKey, getter, setter);
+        },
+        
+        'node-property': function(elem, props, delta) {
+          this['node'](elem, props, delta, 'map', 'getData', 'setData');
+        },
+        
+        'edge-property': function(elem, props, delta) {
+          this['edge'](elem, props, delta, 'map', 'getData', 'setData');  
+        },
+
+        'label-property': function(elem, props, delta) {
+          this['node'](elem, props, delta, 'label', 'getLabelData', 'setLabelData');
+        },
+        
+        'node-style': function(elem, props, delta) {
+          this['node'](elem, props, delta, 'canvas', 'getCanvasStyle', 'setCanvasStyle');
+        },
+        
+        'edge-style': function(elem, props, delta) {
+          this['edge'](elem, props, delta, 'canvas', 'getCanvasStyle', 'setCanvasStyle');  
+        }
+    },
+    
+  
+    /*
+       sequence
+    
+       Iteratively performs an action while refreshing the state of the visualization.
+
+       Parameters:
+
+       options - (object) An object containing some sequence options described below
+       condition - (function) A function returning a boolean instance in order to stop iterations.
+       step - (function) A function to execute on each step of the iteration.
+       onComplete - (function) A function to execute when the sequence finishes.
+       duration - (number) Duration (in milliseconds) of each step.
+
+      Example:
+       (start code js)
+        var rg = new $jit.RGraph(options);
+        var i = 0;
+        rg.fx.sequence({
+          condition: function() {
+           return i == 10;
+          },
+          step: function() {
+            alert(i++);
+          },
+          onComplete: function() {
+           alert('done!');
+          }
+        });
+       (end code)
+
+    */
+    sequence: function(options) {
+        var that = this;
+        options = $.merge({
+          condition: $.lambda(false),
+          step: $.empty,
+          onComplete: $.empty,
+          duration: 200
+        }, options || {});
+
+        var interval = setInterval(function() {
+          if(options.condition()) {
+            options.step();
+          } else {
+            clearInterval(interval);
+            options.onComplete();
+          }
+          that.viz.refresh(true);
+        }, options.duration);
+    },
+    
+    /*
+      prepare
+      Prepare graph position and other attribute values before performing an Animation. 
+      This method is used internally by the Toolkit.
+      
+      See also:
+       
+       <Animation>, <Graph.Plot.animate>
+
+    */
+    prepare: function(modes) {
+      var graph = this.viz.graph,
+          accessors = {
+            'node-property': {
+              'getter': 'getData',
+              'setter': 'setData'
+            },
+            'edge-property': {
+              'getter': 'getData',
+              'setter': 'setData'
+            },
+            'node-style': {
+              'getter': 'getCanvasStyle',
+              'setter': 'setCanvasStyle'
+            },
+            'edge-style': {
+              'getter': 'getCanvasStyle',
+              'setter': 'setCanvasStyle'
+            }
+          };
+
+      //parse modes
+      var m = {};
+      if($.type(modes) == 'array') {
+        for(var i=0, len=modes.length; i < len; i++) {
+          var elems = modes[i].split(':');
+          m[elems.shift()] = elems;
+        }
+      } else {
+        for(var p in modes) {
+          if(p == 'position') {
+            m[modes.position] = [];
+          } else {
+            m[p] = $.splat(modes[p]);
+          }
+        }
+      }
+      
+      graph.eachNode(function(node) { 
+        node.startPos.set(node.pos);
+        $.each(['node-property', 'node-style'], function(p) {
+          if(p in m) {
+            var prop = m[p];
+            for(var i=0, l=prop.length; i < l; i++) {
+              node[accessors[p].setter](prop[i], node[accessors[p].getter](prop[i]), 'start');
+            }
+          }
+        });
+        $.each(['edge-property', 'edge-style'], function(p) {
+          if(p in m) {
+            var prop = m[p];
+            node.eachAdjacency(function(adj) {
+              for(var i=0, l=prop.length; i < l; i++) {
+                adj[accessors[p].setter](prop[i], adj[accessors[p].getter](prop[i]), 'start');
+              }
+            });
+          }
+        });
+      });
+      return m;
+    },
+    
+    /*
+       Method: animate
+    
+       Animates a <Graph> by interpolating some <Graph.Node>, <Graph.Adjacence> or <Graph.Label> properties.
+
+       Parameters:
+
+       opt - (object) Animation options. The object properties are described below
+       duration - (optional) Described in <Options.Fx>.
+       fps - (optional) Described in <Options.Fx>.
+       hideLabels - (optional|boolean) Whether to hide labels during the animation.
+       modes - (required|object) An object with animation modes (described below).
+
+       Animation modes:
+       
+       Animation modes are strings representing different node/edge and graph properties that you'd like to animate. 
+       They are represented by an object that has as keys main categories of properties to animate and as values a list 
+       of these specific properties. The properties are described below
+       
+       position - Describes the way nodes' positions must be interpolated. Possible values are 'linear', 'polar' or 'moebius'.
+       node-property - Describes which Node properties will be interpolated. These properties can be any of the ones defined in <Options.Node>.
+       edge-property - Describes which Edge properties will be interpolated. These properties can be any the ones defined in <Options.Edge>.
+       label-property - Describes which Label properties will be interpolated. These properties can be any of the ones defined in <Options.Label> like color or size.
+       node-style - Describes which Node Canvas Styles will be interpolated. These are specific canvas properties like fillStyle, strokeStyle, lineWidth, shadowBlur, shadowColor, shadowOffsetX, shadowOffsetY, etc.
+       edge-style - Describes which Edge Canvas Styles will be interpolated. These are specific canvas properties like fillStyle, strokeStyle, lineWidth, shadowBlur, shadowColor, shadowOffsetX, shadowOffsetY, etc.
+
+       Example:
+       (start code js)
+       var viz = new $jit.Viz(options);
+       //...tweak some Data, CanvasStyles or LabelData properties...
+       viz.fx.animate({
+         modes: {
+           'position': 'linear',
+           'node-property': ['width', 'height'],
+           'node-style': 'shadowColor',
+           'label-property': 'size'
+         },
+         hideLabels: false
+       });
+       //...can also be written like this...
+       viz.fx.animate({
+         modes: ['linear',
+                 'node-property:width:height',
+                 'node-style:shadowColor',
+                 'label-property:size'],
+         hideLabels: false
+       });
+       (end code)
+    */
+    animate: function(opt, versor) {
+      opt = $.merge(this.viz.config, opt || {});
+      var that = this,
+          viz = this.viz,
+          graph  = viz.graph,
+          interp = this.Interpolator,
+          animation =  opt.type === 'nodefx'? this.nodeFxAnimation : this.animation;
+      //prepare graph values
+      var m = this.prepare(opt.modes);
+      
+      //animate
+      if(opt.hideLabels) this.labels.hideLabels(true);
+      animation.setOptions($.extend(opt, {
+        $animating: false,
+        compute: function(delta) {
+          graph.eachNode(function(node) { 
+            for(var p in m) {
+              interp[p](node, m[p], delta, versor);
+            }
+          });
+          that.plot(opt, this.$animating, delta);
+          this.$animating = true;
+        },
+        complete: function() {
+          if(opt.hideLabels) that.labels.hideLabels(false);
+          that.plot(opt);
+          opt.onComplete();
+          //TODO(nico): This shouldn't be here!
+          //opt.onAfterCompute();
+        }       
+      })).start();
+    },
+    
+    /*
+      nodeFx
+   
+      Apply animation to node properties like color, width, height, dim, etc.
+  
+      Parameters:
+  
+      options - Animation options. This object properties is described below
+      elements - The Elements to be transformed. This is an object that has a properties
+      
+      (start code js)
+      'elements': {
+        //can also be an array of ids
+        'id': 'id-of-node-to-transform',
+        //properties to be modified. All properties are optional.
+        'properties': {
+          'color': '#ccc', //some color
+          'width': 10, //some width
+          'height': 10, //some height
+          'dim': 20, //some dim
+          'lineWidth': 10 //some line width
+        } 
+      }
+      (end code)
+      
+      - _reposition_ Whether to recalculate positions and add a motion animation. 
+      This might be used when changing _width_ or _height_ properties in a <Layouts.Tree> like layout. Default's *false*.
+      
+      - _onComplete_ A method that is called when the animation completes.
+      
+      ...and all other <Graph.Plot.animate> options like _duration_, _fps_, _transition_, etc.
+  
+      Example:
+      (start code js)
+       var rg = new RGraph(canvas, config); //can be also Hypertree or ST
+       rg.fx.nodeFx({
+         'elements': {
+           'id':'mynodeid',
+           'properties': {
+             'color':'#ccf'
+           },
+           'transition': Trans.Quart.easeOut
+         }
+       });
+      (end code)    
+   */
+   nodeFx: function(opt) {
+     var viz = this.viz,
+         graph  = viz.graph,
+         animation = this.nodeFxAnimation,
+         options = $.merge(this.viz.config, {
+           'elements': {
+             'id': false,
+             'properties': {}
+           },
+           'reposition': false
+         });
+     opt = $.merge(options, opt || {}, {
+       onBeforeCompute: $.empty,
+       onAfterCompute: $.empty
+     });
+     //check if an animation is running
+     animation.stopTimer();
+     var props = opt.elements.properties;
+     //set end values for nodes
+     if(!opt.elements.id) {
+       graph.eachNode(function(n) {
+         for(var prop in props) {
+           n.setData(prop, props[prop], 'end');
+         }
+       });
+     } else {
+       var ids = $.splat(opt.elements.id);
+       $.each(ids, function(id) {
+         var n = graph.getNode(id);
+         if(n) {
+           for(var prop in props) {
+             n.setData(prop, props[prop], 'end');
+           }
+         }
+       });
+     }
+     //get keys
+     var propnames = [];
+     for(var prop in props) propnames.push(prop);
+     //add node properties modes
+     var modes = ['node-property:' + propnames.join(':')];
+     //set new node positions
+     if(opt.reposition) {
+       modes.push('linear');
+       viz.compute('end');
+     }
+     //animate
+     this.animate($.merge(opt, {
+       modes: modes,
+       type: 'nodefx'
+     }));
+   },
+
+    
+    /*
+       Method: plot
+    
+       Plots a <Graph>.
+
+       Parameters:
+
+       opt - (optional) Plotting options. Most of them are described in <Options.Fx>.
+
+       Example:
+
+       (start code js)
+       var viz = new $jit.Viz(options);
+       viz.fx.plot(); 
+       (end code)
+
+    */
+   plot: function(opt, animating) {
+     var viz = this.viz, 
+         aGraph = viz.graph, 
+         canvas = viz.canvas, 
+         id = viz.root, 
+         that = this, 
+         ctx = canvas.getCtx(), 
+         min = Math.min,
+         opt = opt || this.viz.controller;
+     
+     opt.clearCanvas && canvas.clear();
+       
+     var root = aGraph.getNode(id);
+     if(!root) return;
+     
+     var T = !!root.visited;
+     aGraph.eachNode(function(node) {
+       var nodeAlpha = node.getData('alpha');
+       node.eachAdjacency(function(adj) {
+         var nodeTo = adj.nodeTo;
+         if(!!nodeTo.visited === T && node.drawn && nodeTo.drawn) {
+           !animating && opt.onBeforePlotLine(adj);
+           that.plotLine(adj, canvas, animating);
+           !animating && opt.onAfterPlotLine(adj);
+         }
+       });
+       if(node.drawn) {
+         !animating && opt.onBeforePlotNode(node);
+         that.plotNode(node, canvas, animating);
+         !animating && opt.onAfterPlotNode(node);
+       }
+       if(!that.labelsHidden && opt.withLabels) {
+         if(node.drawn && nodeAlpha >= 0.95) {
+           that.labels.plotLabel(canvas, node, opt);
+         } else {
+           that.labels.hideLabel(node, false);
+         }
+       }
+       node.visited = !T;
+     });
+    },
+
+  /*
+      Plots a Subtree.
+   */
+   plotTree: function(node, opt, animating) {
+       var that = this, 
+       viz = this.viz, 
+       canvas = viz.canvas,
+       config = this.config,
+       ctx = canvas.getCtx();
+       var nodeAlpha = node.getData('alpha');
+       node.eachSubnode(function(elem) {
+         if(opt.plotSubtree(node, elem) && elem.exist && elem.drawn) {
+             var adj = node.getAdjacency(elem.id);
+             !animating && opt.onBeforePlotLine(adj);
+             that.plotLine(adj, canvas, animating);
+             !animating && opt.onAfterPlotLine(adj);
+             that.plotTree(elem, opt, animating);
+         }
+       });
+       if(node.drawn) {
+           !animating && opt.onBeforePlotNode(node);
+           this.plotNode(node, canvas, animating);
+           !animating && opt.onAfterPlotNode(node);
+           if(!opt.hideLabels && opt.withLabels && nodeAlpha >= 0.95) 
+               this.labels.plotLabel(canvas, node, opt);
+           else 
+               this.labels.hideLabel(node, false);
+       } else {
+           this.labels.hideLabel(node, true);
+       }
+   },
+
+  /*
+       Method: plotNode
+    
+       Plots a <Graph.Node>.
+
+       Parameters:
+       
+       node - (object) A <Graph.Node>.
+       canvas - (object) A <Canvas> element.
+
+    */
+    plotNode: function(node, canvas, animating) {
+        var f = node.getData('type'), 
+            ctxObj = this.node.CanvasStyles;
+        if(f != 'none') {
+          var width = node.getData('lineWidth'),
+              color = node.getData('color'),
+              alpha = node.getData('alpha'),
+              ctx = canvas.getCtx();
+          ctx.save();
+          ctx.lineWidth = width;
+          ctx.fillStyle = ctx.strokeStyle = color;
+          ctx.globalAlpha = alpha;
+          
+          for(var s in ctxObj) {
+            ctx[s] = node.getCanvasStyle(s);
+          }
+
+          this.nodeTypes[f].render.call(this, node, canvas, animating);
+          ctx.restore();
+        }
+    },
+    
+    /*
+       Method: plotLine
+    
+       Plots a <Graph.Adjacence>.
+
+       Parameters:
+
+       adj - (object) A <Graph.Adjacence>.
+       canvas - (object) A <Canvas> instance.
+
+    */
+    plotLine: function(adj, canvas, animating) {
+      var f = adj.getData('type'),
+          ctxObj = this.edge.CanvasStyles;
+      if(f != 'none') {
+        var width = adj.getData('lineWidth'),
+            color = adj.getData('color'),
+            ctx = canvas.getCtx(),
+            nodeFrom = adj.nodeFrom,
+            nodeTo = adj.nodeTo;
+        
+        ctx.save();
+        ctx.lineWidth = width;
+        ctx.fillStyle = ctx.strokeStyle = color;
+        ctx.globalAlpha = Math.min(nodeFrom.getData('alpha'), 
+            nodeTo.getData('alpha'), 
+            adj.getData('alpha'));
+        
+        for(var s in ctxObj) {
+          ctx[s] = adj.getCanvasStyle(s);
+        }
+
+        this.edgeTypes[f].render.call(this, adj, canvas, animating);
+        ctx.restore();
+      }
+    }    
+  
+};
+
+/*
+  Object: Graph.Plot3D
+  
+  <Graph> 3D rendering and animation methods.
+  
+  Properties:
+  
+  nodeHelper - <NodeHelper> object.
+  edgeHelper - <EdgeHelper> object.
+
+*/
+Graph.Plot3D = $.merge(Graph.Plot, {
+  Interpolator: {
+    'linear': function(elem, props, delta) {
+      var from = elem.startPos.getc(true);
+      var to = elem.endPos.getc(true);
+      elem.pos.setc(this.compute(from.x, to.x, delta), 
+                    this.compute(from.y, to.y, delta),
+                    this.compute(from.z, to.z, delta));
+    }
+  },
+  
+  plotNode: function(node, canvas) {
+    if(node.getData('type') == 'none') return;
+    this.plotElement(node, canvas, {
+      getAlpha: function() {
+        return node.getData('alpha');
+      }
+    });
+  },
+  
+  plotLine: function(adj, canvas) {
+    if(adj.getData('type') == 'none') return;
+    this.plotElement(adj, canvas, {
+      getAlpha: function() {
+        return Math.min(adj.nodeFrom.getData('alpha'),
+                        adj.nodeTo.getData('alpha'),
+                        adj.getData('alpha'));
+      }
+    });
+  },
+  
+  plotElement: function(elem, canvas, opt) {
+    var gl = canvas.getCtx(),
+        viewMatrix = new Matrix4,
+        lighting = canvas.config.Scene.Lighting,
+        wcanvas = canvas.canvases[0],
+        program = wcanvas.program,
+        camera = wcanvas.camera;
+    
+    if(!elem.geometry) {
+      elem.geometry = new O3D[elem.getData('type')];
+    }
+    elem.geometry.update(elem);
+    if(!elem.webGLVertexBuffer) {
+      var vertices = [],
+          faces = [],
+          normals = [],
+          vertexIndex = 0,
+          geom = elem.geometry;
+      
+      for(var i=0, vs=geom.vertices, fs=geom.faces, fsl=fs.length; i<fsl; i++) {
+        var face = fs[i],
+            v1 = vs[face.a],
+            v2 = vs[face.b],
+            v3 = vs[face.c],
+            v4 = face.d? vs[face.d] : false,
+            n = face.normal;
+        
+        vertices.push(v1.x, v1.y, v1.z);
+        vertices.push(v2.x, v2.y, v2.z);
+        vertices.push(v3.x, v3.y, v3.z);
+        if(v4) vertices.push(v4.x, v4.y, v4.z);
+            
+        normals.push(n.x, n.y, n.z);
+        normals.push(n.x, n.y, n.z);
+        normals.push(n.x, n.y, n.z);
+        if(v4) normals.push(n.x, n.y, n.z);
+            
+        faces.push(vertexIndex, vertexIndex +1, vertexIndex +2);
+        if(v4) {
+          faces.push(vertexIndex, vertexIndex +2, vertexIndex +3);
+          vertexIndex += 4;
+        } else {
+          vertexIndex += 3;
+        }
+      }
+      //create and store vertex data
+      elem.webGLVertexBuffer = gl.createBuffer();
+      gl.bindBuffer(gl.ARRAY_BUFFER, elem.webGLVertexBuffer);
+      gl.bufferData(gl.ARRAY_BUFFER, new Float32Array(vertices), gl.STATIC_DRAW);
+      //create and store faces index data
+      elem.webGLFaceBuffer = gl.createBuffer();
+      gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, elem.webGLFaceBuffer);
+      gl.bufferData(gl.ELEMENT_ARRAY_BUFFER, new Uint16Array(faces), gl.STATIC_DRAW);
+      elem.webGLFaceCount = faces.length;
+      //calculate vertex normals and store them
+      elem.webGLNormalBuffer = gl.createBuffer();
+      gl.bindBuffer(gl.ARRAY_BUFFER, elem.webGLNormalBuffer);
+      gl.bufferData(gl.ARRAY_BUFFER, new Float32Array(normals), gl.STATIC_DRAW);
+    }
+    viewMatrix.multiply(camera.matrix, elem.geometry.matrix);
+    //send matrix data
+    gl.uniformMatrix4fv(program.viewMatrix, false, viewMatrix.flatten());
+    gl.uniformMatrix4fv(program.projectionMatrix, false, camera.projectionMatrix.flatten());
+    //send normal matrix for lighting
+    var normalMatrix = Matrix4.makeInvert(viewMatrix);
+    normalMatrix.$transpose();
+    gl.uniformMatrix4fv(program.normalMatrix, false, normalMatrix.flatten());
+    //send color data
+    var color = $.hexToRgb(elem.getData('color'));
+    color.push(opt.getAlpha());
+    gl.uniform4f(program.color, color[0] / 255, color[1] / 255, color[2] / 255, color[3]);
+    //send lighting data
+    gl.uniform1i(program.enableLighting, lighting.enable);
+    if(lighting.enable) {
+      //set ambient light color
+      if(lighting.ambient) {
+        var acolor = lighting.ambient;
+        gl.uniform3f(program.ambientColor, acolor[0], acolor[1], acolor[2]);
+      }
+      //set directional light
+      if(lighting.directional) {
+        var dir = lighting.directional,
+            color = dir.color,
+            pos = dir.direction,
+            vd = new Vector3(pos.x, pos.y, pos.z).normalize().$scale(-1);
+        gl.uniform3f(program.lightingDirection, vd.x, vd.y, vd.z);
+        gl.uniform3f(program.directionalColor, color[0], color[1], color[2]);
+      }
+    }
+    //send vertices data
+    gl.bindBuffer(gl.ARRAY_BUFFER, elem.webGLVertexBuffer);
+    gl.vertexAttribPointer(program.position, 3, gl.FLOAT, false, 0, 0);
+    //send normals data
+    gl.bindBuffer(gl.ARRAY_BUFFER, elem.webGLNormalBuffer);
+    gl.vertexAttribPointer(program.normal, 3, gl.FLOAT, false, 0, 0);
+    //draw!
+    gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, elem.webGLFaceBuffer );
+    gl.drawElements(gl.TRIANGLES, elem.webGLFaceCount, gl.UNSIGNED_SHORT, 0);
+  }
+});
+
+
+/*
+ * File: Graph.Label.js
+ *
+*/
+
+/*
+   Object: Graph.Label
+
+   An interface for plotting/hiding/showing labels.
+
+   Description:
+
+   This is a generic interface for plotting/hiding/showing labels.
+   The <Graph.Label> interface is implemented in multiple ways to provide
+   different label types.
+
+   For example, the Graph.Label interface is implemented as <Graph.Label.HTML> to provide
+   HTML label elements. Also we provide the <Graph.Label.SVG> interface for SVG type labels. 
+   The <Graph.Label.Native> interface implements these methods with the native Canvas text rendering functions.
+   
+   All subclasses (<Graph.Label.HTML>, <Graph.Label.SVG> and <Graph.Label.Native>) implement the method plotLabel.
+*/
+
+Graph.Label = {};
+
+/*
+   Class: Graph.Label.Native
+
+   Implements labels natively, using the Canvas text API.
+*/
+Graph.Label.Native = new Class({
+    initialize: function(viz) {
+      this.viz = viz;
+    },
+
+    /*
+       Method: plotLabel
+
+       Plots a label for a given node.
+
+       Parameters:
+
+       canvas - (object) A <Canvas> instance.
+       node - (object) A <Graph.Node>.
+       controller - (object) A configuration object.
+       
+       Example:
+       
+       (start code js)
+       var viz = new $jit.Viz(options);
+       var node = viz.graph.getNode('nodeId');
+       viz.labels.plotLabel(viz.canvas, node, viz.config);
+       (end code)
+    */
+    plotLabel: function(canvas, node, controller) {
+      var ctx = canvas.getCtx();
+      var pos = node.pos.getc(true);
+
+      ctx.font = node.getLabelData('style') + ' ' + node.getLabelData('size') + 'px ' + node.getLabelData('family');
+      ctx.textAlign = node.getLabelData('textAlign');
+      ctx.fillStyle = ctx.strokeStyle = node.getLabelData('color');
+      ctx.textBaseline = node.getLabelData('textBaseline');
+
+      this.renderLabel(canvas, node, controller);
+    },
+
+    /*
+       renderLabel
+
+       Does the actual rendering of the label in the canvas. The default
+       implementation renders the label close to the position of the node, this
+       method should be overriden to position the labels differently.
+
+       Parameters:
+
+       canvas - A <Canvas> instance.
+       node - A <Graph.Node>.
+       controller - A configuration object. See also <Hypertree>, <RGraph>, <ST>.
+    */
+    renderLabel: function(canvas, node, controller) {
+      var ctx = canvas.getCtx();
+      var pos = node.pos.getc(true);
+      ctx.fillText(node.name, pos.x, pos.y + node.getData("height") / 2);
+    },
+
+    hideLabel: $.empty,
+    hideLabels: $.empty
+});
+
+/*
+   Class: Graph.Label.DOM
+
+   Abstract Class implementing some DOM label methods.
+
+   Implemented by:
+
+   <Graph.Label.HTML> and <Graph.Label.SVG>.
+
+*/
+Graph.Label.DOM = new Class({
+    //A flag value indicating if node labels are being displayed or not.
+    labelsHidden: false,
+    //Label container
+    labelContainer: false,
+    //Label elements hash.
+    labels: {},
+
+    /*
+       Method: getLabelContainer
+
+       Lazy fetcher for the label container.
+
+       Returns:
+
+       The label container DOM element.
+
+       Example:
+
+      (start code js)
+        var viz = new $jit.Viz(options);
+        var labelContainer = viz.labels.getLabelContainer();
+        alert(labelContainer.innerHTML);
+      (end code)
+    */
+    getLabelContainer: function() {
+      return this.labelContainer ?
+        this.labelContainer :
+        this.labelContainer = document.getElementById(this.viz.config.labelContainer);
+    },
+
+    /*
+       Method: getLabel
+
+       Lazy fetcher for the label element.
+
+       Parameters:
+
+       id - (string) The label id (which is also a <Graph.Node> id).
+
+       Returns:
+
+       The label element.
+
+       Example:
+
+      (start code js)
+        var viz = new $jit.Viz(options);
+        var label = viz.labels.getLabel('someid');
+        alert(label.innerHTML);
+      (end code)
+
+    */
+    getLabel: function(id) {
+      return (id in this.labels && this.labels[id] != null) ?
+        this.labels[id] :
+        this.labels[id] = document.getElementById(id);
+    },
+
+    /*
+       Method: hideLabels
+
+       Hides all labels (by hiding the label container).
+
+       Parameters:
+
+       hide - (boolean) A boolean value indicating if the label container must be hidden or not.
+
+       Example:
+       (start code js)
+        var viz = new $jit.Viz(options);
+        rg.labels.hideLabels(true);
+       (end code)
+
+    */
+    hideLabels: function (hide) {
+      var container = this.getLabelContainer();
+      if(hide)
+        container.style.display = 'none';
+      else
+        container.style.display = '';
+      this.labelsHidden = hide;
+    },
+
+    /*
+       Method: clearLabels
+
+       Clears the label container.
+
+       Useful when using a new visualization with the same canvas element/widget.
+
+       Parameters:
+
+       force - (boolean) Forces deletion of all labels.
+
+       Example:
+       (start code js)
+        var viz = new $jit.Viz(options);
+        viz.labels.clearLabels();
+        (end code)
+    */
+    clearLabels: function(force) {
+      for(var id in this.labels) {
+        if (force || !this.viz.graph.hasNode(id)) {
+          this.disposeLabel(id);
+          delete this.labels[id];
+        }
+      }
+    },
+
+    /*
+       Method: disposeLabel
+
+       Removes a label.
+
+       Parameters:
+
+       id - (string) A label id (which generally is also a <Graph.Node> id).
+
+       Example:
+       (start code js)
+        var viz = new $jit.Viz(options);
+        viz.labels.disposeLabel('labelid');
+       (end code)
+    */
+    disposeLabel: function(id) {
+      var elem = this.getLabel(id);
+      if(elem && elem.parentNode) {
+        elem.parentNode.removeChild(elem);
+      }
+    },
+
+    /*
+       Method: hideLabel
+
+       Hides the corresponding <Graph.Node> label.
+
+       Parameters:
+
+       node - (object) A <Graph.Node>. Can also be an array of <Graph.Nodes>.
+       show - (boolean) If *true*, nodes will be shown. Otherwise nodes will be hidden.
+
+       Example:
+       (start code js)
+        var rg = new $jit.Viz(options);
+        viz.labels.hideLabel(viz.graph.getNode('someid'), false);
+       (end code)
+    */
+    hideLabel: function(node, show) {
+      node = $.splat(node);
+      var st = show ? "" : "none", lab, that = this;
+      $.each(node, function(n) {
+        var lab = that.getLabel(n.id);
+        if (lab) {
+          lab.style.display = st;
+        }
+      });
+    },
+
+    /*
+       fitsInCanvas
+
+       Returns _true_ or _false_ if the label for the node is contained in the canvas dom element or not.
+
+       Parameters:
+
+       pos - A <Complex> instance (I'm doing duck typing here so any object with _x_ and _y_ parameters will do).
+       canvas - A <Canvas> instance.
+
+       Returns:
+
+       A boolean value specifying if the label is contained in the <Canvas> DOM element or not.
+
+    */
+    fitsInCanvas: function(pos, canvas) {
+      var size = canvas.getSize();
+      if(pos.x >= size.width || pos.x < 0
+         || pos.y >= size.height || pos.y < 0) return false;
+       return true;
+    }
+});
+
+/*
+   Class: Graph.Label.HTML
+
+   Implements HTML labels.
+
+   Extends:
+
+   All <Graph.Label.DOM> methods.
+
+*/
+Graph.Label.HTML = new Class({
+    Implements: Graph.Label.DOM,
+
+    /*
+       Method: plotLabel
+
+       Plots a label for a given node.
+
+       Parameters:
+
+       canvas - (object) A <Canvas> instance.
+       node - (object) A <Graph.Node>.
+       controller - (object) A configuration object.
+       
+      Example:
+       
+       (start code js)
+       var viz = new $jit.Viz(options);
+       var node = viz.graph.getNode('nodeId');
+       viz.labels.plotLabel(viz.canvas, node, viz.config);
+       (end code)
+
+
+    */
+    plotLabel: function(canvas, node, controller) {
+      var id = node.id, tag = this.getLabel(id);
+
+      if(!tag && !(tag = document.getElementById(id))) {
+        tag = document.createElement('div');
+        var container = this.getLabelContainer();
+        tag.id = id;
+        tag.className = 'node';
+        tag.style.position = 'absolute';
+        controller.onCreateLabel(tag, node);
+        container.appendChild(tag);
+        this.labels[node.id] = tag;
+      }
+
+      this.placeLabel(tag, node, controller);
+    }
+});
+
+/*
+   Class: Graph.Label.SVG
+
+   Implements SVG labels.
+
+   Extends:
+
+   All <Graph.Label.DOM> methods.
+*/
+Graph.Label.SVG = new Class({
+    Implements: Graph.Label.DOM,
+
+    /*
+       Method: plotLabel
+
+       Plots a label for a given node.
+
+       Parameters:
+
+       canvas - (object) A <Canvas> instance.
+       node - (object) A <Graph.Node>.
+       controller - (object) A configuration object.
+       
+       Example:
+       
+       (start code js)
+       var viz = new $jit.Viz(options);
+       var node = viz.graph.getNode('nodeId');
+       viz.labels.plotLabel(viz.canvas, node, viz.config);
+       (end code)
+
+
+    */
+    plotLabel: function(canvas, node, controller) {
+      var id = node.id, tag = this.getLabel(id);
+      if(!tag && !(tag = document.getElementById(id))) {
+        var ns = 'http://www.w3.org/2000/svg';
+          tag = document.createElementNS(ns, 'svg:text');
+        var tspan = document.createElementNS(ns, 'svg:tspan');
+        tag.appendChild(tspan);
+        var container = this.getLabelContainer();
+        tag.setAttribute('id', id);
+        tag.setAttribute('class', 'node');
+        container.appendChild(tag);
+        controller.onCreateLabel(tag, node);
+        this.labels[node.id] = tag;
+      }
+      this.placeLabel(tag, node, controller);
+    }
+});
+
+
+
+Graph.Geom = new Class({
+
+  initialize: function(viz) {
+    this.viz = viz;
+    this.config = viz.config;
+    this.node = viz.config.Node;
+    this.edge = viz.config.Edge;
+  },
+  /*
+    Applies a translation to the tree.
+  
+    Parameters:
+  
+    pos - A <Complex> number specifying translation vector.
+    prop - A <Graph.Node> position property ('pos', 'start' or 'end').
+  
+    Example:
+  
+    (start code js)
+      st.geom.translate(new Complex(300, 100), 'end');
+    (end code)
+  */  
+  translate: function(pos, prop) {
+     prop = $.splat(prop);
+     this.viz.graph.eachNode(function(elem) {
+         $.each(prop, function(p) { elem.getPos(p).$add(pos); });
+     });
+  },
+  /*
+    Hides levels of the tree until it properly fits in canvas.
+  */  
+  setRightLevelToShow: function(node, canvas, callback) {
+     var level = this.getRightLevelToShow(node, canvas), 
+         fx = this.viz.labels,
+         opt = $.merge({
+           execShow:true,
+           execHide:true,
+           onHide: $.empty,
+           onShow: $.empty
+         }, callback || {});
+     node.eachLevel(0, this.config.levelsToShow, function(n) {
+         var d = n._depth - node._depth;
+         if(d > level) {
+             opt.onHide(n);
+             if(opt.execHide) {
+               n.drawn = false; 
+               n.exist = false;
+               fx.hideLabel(n, false);
+             }
+         } else {
+             opt.onShow(n);
+             if(opt.execShow) {
+               n.exist = true;
+             }
+         }
+     });
+     node.drawn= true;
+  },
+  /*
+    Returns the right level to show for the current tree in order to fit in canvas.
+  */  
+  getRightLevelToShow: function(node, canvas) {
+     var config = this.config;
+     var level = config.levelsToShow;
+     var constrained = config.constrained;
+     if(!constrained) return level;
+     while(!this.treeFitsInCanvas(node, canvas, level) && level > 1) { level-- ; }
+     return level;
+  }
+});
+
+/*
+ * File: Loader.js
+ * 
+ */
+
+/*
+   Object: Loader
+
+   Provides methods for loading and serving JSON data.
+*/
+var Loader = {
+     construct: function(json) {
+        var isGraph = ($.type(json) == 'array');
+        var ans = new Graph(this.graphOptions, this.config.Node, this.config.Edge, this.config.Label);
+        if(!isGraph) 
+            //make tree
+            (function (ans, json) {
+                ans.addNode(json);
+                if(json.children) {
+                  for(var i=0, ch = json.children; i<ch.length; i++) {
+                    ans.addAdjacence(json, ch[i]);
+                    arguments.callee(ans, ch[i]);
+                  }
+                }
+            })(ans, json);
+        else
+            //make graph
+            (function (ans, json) {
+                var getNode = function(id) {
+                  for(var i=0, l=json.length; i<l; i++) {
+                    if(json[i].id == id) {
+                      return json[i];
+                    }
+                  }
+                  // The node was not defined in the JSON
+                  // Let's create it
+                  var newNode = {
+                               "id" : id,
+                               "name" : id
+                       };
+                  return ans.addNode(newNode);
+                };
+
+                for(var i=0, l=json.length; i<l; i++) {
+                  ans.addNode(json[i]);
+                  var adj = json[i].adjacencies;
+                  if (adj) {
+                    for(var j=0, lj=adj.length; j<lj; j++) {
+                      var node = adj[j], data = {};
+                      if(typeof adj[j] != 'string') {
+                        data = $.merge(node.data, {});
+                        node = node.nodeTo;
+                      }
+                      ans.addAdjacence(json[i], getNode(node), data);
+                    }
+                  }
+                }
+            })(ans, json);
+
+        return ans;
+    },
+
+    /*
+     Method: loadJSON
+    
+     Loads a JSON structure to the visualization. The JSON structure can be a JSON *tree* or *graph* structure.
+     
+      A JSON tree or graph structure consists of nodes, each having as properties
+       
+       id - (string) A unique identifier for the node
+       name - (string) A node's name
+       data - (object) The data optional property contains a hash (i.e {}) 
+       where you can store all the information you want about this node.
+        
+      For JSON *Tree* structures, there's an extra optional property *children* of type Array which contains the node's children.
+      
+      Example:
+
+      (start code js)
+        var json = {  
+          "id": "aUniqueIdentifier",  
+          "name": "usually a nodes name",  
+          "data": {
+            "some key": "some value",
+            "some other key": "some other value"
+           },  
+          "children": [ *other nodes or empty* ]  
+        };  
+      (end code)
+        
+        JSON *Graph* structures consist of an array of nodes, each specifying the nodes to which the current node is connected. 
+        For JSON *Graph* structures, the *children* property is replaced by the *adjacencies* property.
+        
+        There are two types of *Graph* structures, *simple* and *extended* graph structures.
+        
+        For *simple* Graph structures, the adjacencies property contains an array of strings, each specifying the 
+        id of the node connected to the main node.
+        
+        Example:
+        
+        (start code js)
+        var json = [  
+          {  
+            "id": "aUniqueIdentifier",  
+            "name": "usually a nodes name",  
+            "data": {
+              "some key": "some value",
+              "some other key": "some other value"
+             },  
+            "adjacencies": ["anotherUniqueIdentifier", "yetAnotherUniqueIdentifier", 'etc']  
+          },
+
+          'other nodes go here...' 
+        ];          
+        (end code)
+        
+        For *extended Graph structures*, the adjacencies property contains an array of Adjacency objects that have as properties
+        
+        nodeTo - (string) The other node connected by this adjacency.
+        data - (object) A data property, where we can store custom key/value information.
+        
+        Example:
+        
+        (start code js)
+        var json = [  
+          {  
+            "id": "aUniqueIdentifier",  
+            "name": "usually a nodes name",  
+            "data": {
+              "some key": "some value",
+              "some other key": "some other value"
+             },  
+            "adjacencies": [  
+            {  
+              nodeTo:"aNodeId",  
+              data: {} //put whatever you want here  
+            },
+            'other adjacencies go here...'  
+          },
+
+          'other nodes go here...' 
+        ];          
+        (end code)
+       
+       About the data property:
+       
+       As described before, you can store custom data in the *data* property of JSON *nodes* and *adjacencies*. 
+       You can use almost any string as key for the data object. Some keys though are reserved by the toolkit, and 
+       have special meanings. This is the case for keys starting with a dollar sign, for example, *$width*.
+       
+       For JSON *node* objects, adding dollar prefixed properties that match the names of the options defined in 
+       <Options.Node> will override the general value for that option with that particular value. For this to work 
+       however, you do have to set *overridable = true* in <Options.Node>.
+       
+       The same thing is true for JSON adjacencies. Dollar prefixed data properties will alter values set in <Options.Edge> 
+       if <Options.Edge> has *overridable = true*.
+       
+       When loading JSON data into TreeMaps, the *data* property must contain a value for the *$area* key, 
+       since this is the value which will be taken into account when creating the layout. 
+       The same thing goes for the *$color* parameter.
+       
+       In JSON Nodes you can use also *$label-* prefixed properties to refer to <Options.Label> properties. For example, 
+       *$label-size* will refer to <Options.Label> size property. Also, in JSON nodes and adjacencies you can set 
+       canvas specific properties individually by using the *$canvas-* prefix. For example, *$canvas-shadowBlur* will refer 
+       to the *shadowBlur* property.
+       
+       These properties can also be accessed after loading the JSON data from <Graph.Nodes> and <Graph.Adjacences> 
+       by using <Accessors>. For more information take a look at the <Graph> and <Accessors> documentation.
+       
+       Finally, these properties can also be used to create advanced animations like with <Options.NodeStyles>. For more 
+       information about creating animations please take a look at the <Graph.Plot> and <Graph.Plot.animate> documentation.
+       
+       loadJSON Parameters:
+    
+        json - A JSON Tree or Graph structure.
+        i - For Graph structures only. Sets the indexed node as root for the visualization.
+
+    */
+    loadJSON: function(json, i) {
+      this.json = json;
+      //if they're canvas labels erase them.
+      if(this.labels && this.labels.clearLabels) {
+        this.labels.clearLabels(true);
+      }
+      this.graph = this.construct(json);
+      if($.type(json) != 'array'){
+        this.root = json.id;
+      } else {
+        this.root = json[i? i : 0].id;
+      }
+    },
+    
+    /*
+      Method: toJSON
+   
+      Returns a JSON tree/graph structure from the visualization's <Graph>. 
+      See <Loader.loadJSON> for the graph formats available.
+      
+      See also:
+      
+      <Loader.loadJSON>
+      
+      Parameters:
+      
+      type - (string) Default's "tree". The type of the JSON structure to be returned. 
+      Possible options are "tree" or "graph".
+    */    
+    toJSON: function(type) {
+      type = type || "tree";
+      if(type == 'tree') {
+        var ans = {};
+        var rootNode = this.graph.getNode(this.root);
+        var ans = (function recTree(node) {
+          var ans = {};
+          ans.id = node.id;
+          ans.name = node.name;
+          ans.data = node.data;
+          var ch =[];
+          node.eachSubnode(function(n) {
+            ch.push(recTree(n));
+          });
+          ans.children = ch;
+          return ans;
+        })(rootNode);
+        return ans;
+      } else {
+        var ans = [];
+        var T = !!this.graph.getNode(this.root).visited;
+        this.graph.eachNode(function(node) {
+          var ansNode = {};
+          ansNode.id = node.id;
+          ansNode.name = node.name;
+          ansNode.data = node.data;
+          var adjs = [];
+          node.eachAdjacency(function(adj) {
+            var nodeTo = adj.nodeTo;
+            if(!!nodeTo.visited === T) {
+              var ansAdj = {};
+              ansAdj.nodeTo = nodeTo.id;
+              ansAdj.data = adj.data;
+              adjs.push(ansAdj);
+            }
+          });
+          ansNode.adjacencies = adjs;
+          ans.push(ansNode);
+          node.visited = !T;
+        });
+        return ans;
+      }
+    }
+};
+
+
+
+/*
+ * File: Layouts.js
+ * 
+ * Implements base Tree and Graph layouts.
+ *
+ * Description:
+ *
+ * Implements base Tree and Graph layouts like Radial, Tree, etc.
+ * 
+ */
+
+/*
+ * Object: Layouts
+ * 
+ * Parent object for common layouts.
+ *
+ */
+var Layouts = $jit.Layouts = {};
+
+
+//Some util shared layout functions are defined here.
+var NodeDim = {
+  label: null,
+  
+  compute: function(graph, prop, opt) {
+    this.initializeLabel(opt);
+    var label = this.label, style = label.style;
+    graph.eachNode(function(n) {
+      var autoWidth  = n.getData('autoWidth'),
+          autoHeight = n.getData('autoHeight');
+      if(autoWidth || autoHeight) {
+        //delete dimensions since these are
+        //going to be overridden now.
+        delete n.data.$width;
+        delete n.data.$height;
+        delete n.data.$dim;
+        
+        var width  = n.getData('width'),
+            height = n.getData('height');
+        //reset label dimensions
+        style.width  = autoWidth? 'auto' : width + 'px';
+        style.height = autoHeight? 'auto' : height + 'px';
+        
+        //TODO(nico) should let the user choose what to insert here.
+        label.innerHTML = n.name;
+        
+        var offsetWidth  = label.offsetWidth,
+            offsetHeight = label.offsetHeight;
+        var type = n.getData('type');
+        if($.indexOf(['circle', 'square', 'triangle', 'star'], type) === -1) {
+          n.setData('width', offsetWidth);
+          n.setData('height', offsetHeight);
+        } else {
+          var dim = offsetWidth > offsetHeight? offsetWidth : offsetHeight;
+          n.setData('width', dim);
+          n.setData('height', dim);
+          n.setData('dim', dim); 
+        }
+      }
+    });
+  },
+  
+  initializeLabel: function(opt) {
+    if(!this.label) {
+      this.label = document.createElement('div');
+      document.body.appendChild(this.label);
+    }
+    this.setLabelStyles(opt);
+  },
+  
+  setLabelStyles: function(opt) {
+    $.extend(this.label.style, {
+      'visibility': 'hidden',
+      'position': 'absolute',
+      'width': 'auto',
+      'height': 'auto'
+    });
+    this.label.className = 'jit-autoadjust-label';
+  }
+};
+
+
+/*
+ * Class: Layouts.Tree
+ * 
+ * Implements a Tree Layout.
+ * 
+ * Implemented By:
+ * 
+ * <ST>
+ * 
+ * Inspired by:
+ * 
+ * Drawing Trees (Andrew J. Kennedy) <http://research.microsoft.com/en-us/um/people/akenn/fun/drawingtrees.pdf>
+ * 
+ */
+Layouts.Tree = (function() {
+  //Layout functions
+  var slice = Array.prototype.slice;
+
+  /*
+     Calculates the max width and height nodes for a tree level
+  */  
+  function getBoundaries(graph, config, level, orn, prop) {
+    var dim = config.Node;
+    var multitree = config.multitree;
+    if (dim.overridable) {
+      var w = -1, h = -1;
+      graph.eachNode(function(n) {
+        if (n._depth == level
+            && (!multitree || ('$orn' in n.data) && n.data.$orn == orn)) {
+          var dw = n.getData('width', prop);
+          var dh = n.getData('height', prop);
+          w = (w < dw) ? dw : w;
+          h = (h < dh) ? dh : h;
+        }
+      });
+      return {
+        'width' : w < 0 ? dim.width : w,
+        'height' : h < 0 ? dim.height : h
+      };
+    } else {
+      return dim;
+    }
+  }
+
+
+  function movetree(node, prop, val, orn) {
+    var p = (orn == "left" || orn == "right") ? "y" : "x";
+    node.getPos(prop)[p] += val;
+  }
+
+
+  function moveextent(extent, val) {
+    var ans = [];
+    $.each(extent, function(elem) {
+      elem = slice.call(elem);
+      elem[0] += val;
+      elem[1] += val;
+      ans.push(elem);
+    });
+    return ans;
+  }
+
+
+  function merge(ps, qs) {
+    if (ps.length == 0)
+      return qs;
+    if (qs.length == 0)
+      return ps;
+    var p = ps.shift(), q = qs.shift();
+    return [ [ p[0], q[1] ] ].concat(merge(ps, qs));
+  }
+
+
+  function mergelist(ls, def) {
+    def = def || [];
+    if (ls.length == 0)
+      return def;
+    var ps = ls.pop();
+    return mergelist(ls, merge(ps, def));
+  }
+
+
+  function fit(ext1, ext2, subtreeOffset, siblingOffset, i) {
+    if (ext1.length <= i || ext2.length <= i)
+      return 0;
+
+    var p = ext1[i][1], q = ext2[i][0];
+    return Math.max(fit(ext1, ext2, subtreeOffset, siblingOffset, ++i)
+        + subtreeOffset, p - q + siblingOffset);
+  }
+
+
+  function fitlistl(es, subtreeOffset, siblingOffset) {
+    function $fitlistl(acc, es, i) {
+      if (es.length <= i)
+        return [];
+      var e = es[i], ans = fit(acc, e, subtreeOffset, siblingOffset, 0);
+      return [ ans ].concat($fitlistl(merge(acc, moveextent(e, ans)), es, ++i));
+    }
+    ;
+    return $fitlistl( [], es, 0);
+  }
+
+
+  function fitlistr(es, subtreeOffset, siblingOffset) {
+    function $fitlistr(acc, es, i) {
+      if (es.length <= i)
+        return [];
+      var e = es[i], ans = -fit(e, acc, subtreeOffset, siblingOffset, 0);
+      return [ ans ].concat($fitlistr(merge(moveextent(e, ans), acc), es, ++i));
+    }
+    ;
+    es = slice.call(es);
+    var ans = $fitlistr( [], es.reverse(), 0);
+    return ans.reverse();
+  }
+
+
+  function fitlist(es, subtreeOffset, siblingOffset, align) {
+    var esl = fitlistl(es, subtreeOffset, siblingOffset), esr = fitlistr(es,
+        subtreeOffset, siblingOffset);
+
+    if (align == "left")
+      esr = esl;
+    else if (align == "right")
+      esl = esr;
+
+    for ( var i = 0, ans = []; i < esl.length; i++) {
+      ans[i] = (esl[i] + esr[i]) / 2;
+    }
+    return ans;
+  }
+
+
+  function design(graph, node, prop, config, orn) {
+    var multitree = config.multitree;
+    var auxp = [ 'x', 'y' ], auxs = [ 'width', 'height' ];
+    var ind = +(orn == "left" || orn == "right");
+    var p = auxp[ind], notp = auxp[1 - ind];
+
+    var cnode = config.Node;
+    var s = auxs[ind], nots = auxs[1 - ind];
+
+    var siblingOffset = config.siblingOffset;
+    var subtreeOffset = config.subtreeOffset;
+    var align = config.align;
+
+    function $design(node, maxsize, acum) {
+      var sval = node.getData(s, prop);
+      var notsval = maxsize
+          || (node.getData(nots, prop));
+
+      var trees = [], extents = [], chmaxsize = false;
+      var chacum = notsval + config.levelDistance;
+      node.eachSubnode(function(n) {
+            if (n.exist
+                && (!multitree || ('$orn' in n.data) && n.data.$orn == orn)) {
+
+              if (!chmaxsize)
+                chmaxsize = getBoundaries(graph, config, n._depth, orn, prop);
+
+              var s = $design(n, chmaxsize[nots], acum + chacum);
+              trees.push(s.tree);
+              extents.push(s.extent);
+            }
+          });
+      var positions = fitlist(extents, subtreeOffset, siblingOffset, align);
+      for ( var i = 0, ptrees = [], pextents = []; i < trees.length; i++) {
+        movetree(trees[i], prop, positions[i], orn);
+        pextents.push(moveextent(extents[i], positions[i]));
+      }
+      var resultextent = [ [ -sval / 2, sval / 2 ] ]
+          .concat(mergelist(pextents));
+      node.getPos(prop)[p] = 0;
+
+      if (orn == "top" || orn == "left") {
+        node.getPos(prop)[notp] = acum;
+      } else {
+        node.getPos(prop)[notp] = -acum;
+      }
+
+      return {
+        tree : node,
+        extent : resultextent
+      };
+    }
+
+    $design(node, false, 0);
+  }
+
+
+  return new Class({
+    /*
+    Method: compute
+    
+    Computes nodes' positions.
+
+     */
+    compute : function(property, computeLevels) {
+      var prop = property || 'start';
+      var node = this.graph.getNode(this.root);
+      $.extend(node, {
+        'drawn' : true,
+        'exist' : true,
+        'selected' : true
+      });
+      NodeDim.compute(this.graph, prop, this.config);
+      if (!!computeLevels || !("_depth" in node)) {
+        this.graph.computeLevels(this.root, 0, "ignore");
+      }
+      
+      this.computePositions(node, prop);
+    },
+
+    computePositions : function(node, prop) {
+      var config = this.config;
+      var multitree = config.multitree;
+      var align = config.align;
+      var indent = align !== 'center' && config.indent;
+      var orn = config.orientation;
+      var orns = multitree ? [ 'top', 'right', 'bottom', 'left' ] : [ orn ];
+      var that = this;
+      $.each(orns, function(orn) {
+        //calculate layout
+          design(that.graph, node, prop, that.config, orn, prop);
+          var i = [ 'x', 'y' ][+(orn == "left" || orn == "right")];
+          //absolutize
+          (function red(node) {
+            node.eachSubnode(function(n) {
+              if (n.exist
+                  && (!multitree || ('$orn' in n.data) && n.data.$orn == orn)) {
+
+                n.getPos(prop)[i] += node.getPos(prop)[i];
+                if (indent) {
+                  n.getPos(prop)[i] += align == 'left' ? indent : -indent;
+                }
+                red(n);
+              }
+            });
+          })(node);
+        });
+    }
+  });
+  
+})();
+
+/*
+ * File: Spacetree.js
+ */
+
+/*
+   Class: ST
+   
+  A Tree layout with advanced contraction and expansion animations.
+     
+  Inspired by:
+  SpaceTree: Supporting Exploration in Large Node Link Tree, Design Evolution and Empirical Evaluation (Catherine Plaisant, Jesse Grosjean, Benjamin B. Bederson) 
+  <http://hcil.cs.umd.edu/trs/2002-05/2002-05.pdf>
+  
+  Drawing Trees (Andrew J. Kennedy) <http://research.microsoft.com/en-us/um/people/akenn/fun/drawingtrees.pdf>
+  
+  Note:
+  This visualization was built and engineered from scratch, taking only the papers as inspiration, and only shares some features with the visualization described in those papers.
+  Implements:
+  
+  All <Loader> methods
+  
+  Constructor Options:
+  
+  Inherits options from
+  
+  - <Options.Canvas>
+  - <Options.Controller>
+  - <Options.Tree>
+  - <Options.Node>
+  - <Options.Edge>
+  - <Options.Label>
+  - <Options.Events>
+  - <Options.Tips>
+  - <Options.NodeStyles>
+  - <Options.Navigation>
+  
+  Additionally, there are other parameters and some default values changed
+  
+  constrained - (boolean) Default's *true*. Whether to show the entire tree when loaded or just the number of levels specified by _levelsToShow_.
+  levelsToShow - (number) Default's *2*. The number of levels to show for a subtree. This number is relative to the selected node.
+  levelDistance - (number) Default's *30*. The distance between two consecutive levels of the tree.
+  Node.type - Described in <Options.Node>. Default's set to *rectangle*.
+  offsetX - (number) Default's *0*. The x-offset distance from the selected node to the center of the canvas.
+  offsetY - (number) Default's *0*. The y-offset distance from the selected node to the center of the canvas.
+  duration - Described in <Options.Fx>. It's default value has been changed to *700*.
+  
+  Instance Properties:
+  
+  canvas - Access a <Canvas> instance.
+  graph - Access a <Graph> instance.
+  op - Access a <ST.Op> instance.
+  fx - Access a <ST.Plot> instance.
+  labels - Access a <ST.Label> interface implementation.
+
+ */
+
+$jit.ST= (function() {
+    // Define some private methods first...
+    // Nodes in path
+    var nodesInPath = [];
+    // Nodes to contract
+    function getNodesToHide(node) {
+      node = node || this.clickedNode;
+      if(!this.config.constrained) {
+        return [];
+      }
+      var Geom = this.geom;
+      var graph = this.graph;
+      var canvas = this.canvas;
+      var level = node._depth, nodeArray = [];
+         graph.eachNode(function(n) {
+          if(n.exist && !n.selected) {
+              if(n.isDescendantOf(node.id)) {
+                if(n._depth <= level) nodeArray.push(n);
+              } else {
+                nodeArray.push(n);
+              }
+          }
+         });
+         var leafLevel = Geom.getRightLevelToShow(node, canvas);
+         node.eachLevel(leafLevel, leafLevel, function(n) {
+          if(n.exist && !n.selected) nodeArray.push(n);
+         });
+           
+         for (var i = 0; i < nodesInPath.length; i++) {
+           var n = this.graph.getNode(nodesInPath[i]);
+           if(!n.isDescendantOf(node.id)) {
+             nodeArray.push(n);
+           }
+         } 
+         return nodeArray;       
+    };
+    // Nodes to expand
+     function getNodesToShow(node) {
+        var nodeArray = [], config = this.config;
+        node = node || this.clickedNode;
+        this.clickedNode.eachLevel(0, config.levelsToShow, function(n) {
+            if(config.multitree && !('$orn' in n.data) 
+                       && n.anySubnode(function(ch){ return ch.exist && !ch.drawn; })) {
+               nodeArray.push(n);
+            } else if(n.drawn && !n.anySubnode("drawn")) {
+              nodeArray.push(n);
+            }
+        });
+        return nodeArray;
+     };
+    // Now define the actual class.
+    return new Class({
+    
+        Implements: [Loader, Extras, Layouts.Tree],
+        
+        initialize: function(controller) {            
+          var $ST = $jit.ST;
+          
+          var config= {
+                levelsToShow: 2,
+                levelDistance: 30,
+                constrained: true,                
+                Node: {
+                  type: 'rectangle'
+                },
+                duration: 700,
+                offsetX: 0,
+                offsetY: 0
+            };
+            
+            this.controller = this.config = $.merge(
+                Options("Canvas", "Fx", "Tree", "Node", "Edge", "Controller", 
+                    "Tips", "NodeStyles", "Events", "Navigation", "Label"), config, controller);
+
+            var canvasConfig = this.config;
+            if(canvasConfig.useCanvas) {
+              this.canvas = canvasConfig.useCanvas;
+              this.config.labelContainer = this.canvas.id + '-label';
+            } else {
+              if(canvasConfig.background) {
+                canvasConfig.background = $.merge({
+                  type: 'Circles'
+                }, canvasConfig.background);
+              }
+              this.canvas = new Canvas(this, canvasConfig);
+              this.config.labelContainer = (typeof canvasConfig.injectInto == 'string'? canvasConfig.injectInto : canvasConfig.injectInto.id) + '-label';
+            }
+
+            this.graphOptions = {
+                'klass': Complex
+            };
+            this.graph = new Graph(this.graphOptions, this.config.Node, this.config.Edge);
+            this.labels = new $ST.Label[canvasConfig.Label.type](this);
+            this.fx = new $ST.Plot(this, $ST);
+            this.op = new $ST.Op(this);
+            this.group = new $ST.Group(this);
+            this.geom = new $ST.Geom(this);
+            this.clickedNode=  null;
+            // initialize extras
+            this.initializeExtras();
+        },
+    
+        /*
+         Method: plot
+        
+         Plots the <ST>. This is a shortcut to *fx.plot*.
+
+        */  
+        plot: function() { this.fx.plot(this.controller); },
+    
+      
+        /*
+         Method: switchPosition
+        
+         Switches the tree orientation.
+
+         Parameters:
+
+        pos - (string) The new tree orientation. Possible values are "top", "left", "right" and "bottom".
+        method - (string) Set this to "animate" if you want to animate the tree when switching its position. You can also set this parameter to "replot" to just replot the subtree.
+        onComplete - (optional|object) This callback is called once the "switching" animation is complete.
+
+         Example:
+
+         (start code js)
+           st.switchPosition("right", "animate", {
+            onComplete: function() {
+              alert('completed!');
+            } 
+           });
+         (end code)
+        */  
+        switchPosition: function(pos, method, onComplete) {
+          var Geom = this.geom, Plot = this.fx, that = this;
+          if(!Plot.busy) {
+              Plot.busy = true;
+              this.contract({
+                  onComplete: function() {
+                      Geom.switchOrientation(pos);
+                      that.compute('end', false);
+                      Plot.busy = false;
+                      if(method == 'animate') {
+                         that.onClick(that.clickedNode.id, onComplete);  
+                      } else if(method == 'replot') {
+                         that.select(that.clickedNode.id, onComplete);
+                      }
+                  }
+              }, pos);
+          }
+        },
+
+        /*
+        Method: switchAlignment
+       
+        Switches the tree alignment.
+
+        Parameters:
+
+       align - (string) The new tree alignment. Possible values are "left", "center" and "right".
+       method - (string) Set this to "animate" if you want to animate the tree after aligning its position. You can also set this parameter to "replot" to just replot the subtree.
+       onComplete - (optional|object) This callback is called once the "switching" animation is complete.
+
+        Example:
+
+        (start code js)
+          st.switchAlignment("right", "animate", {
+           onComplete: function() {
+             alert('completed!');
+           } 
+          });
+        (end code)
+       */  
+       switchAlignment: function(align, method, onComplete) {
+        this.config.align = align;
+        if(method == 'animate') {
+               this.select(this.clickedNode.id, onComplete);
+        } else if(method == 'replot') {
+               this.onClick(this.clickedNode.id, onComplete);  
+        }
+       },
+
+       /*
+        Method: addNodeInPath
+       
+        Adds a node to the current path as selected node. The selected node will be visible (as in non-collapsed) at all times.
+        
+
+        Parameters:
+
+       id - (string) A <Graph.Node> id.
+
+        Example:
+
+        (start code js)
+          st.addNodeInPath("nodeId");
+        (end code)
+       */  
+       addNodeInPath: function(id) {
+           nodesInPath.push(id);
+           this.select((this.clickedNode && this.clickedNode.id) || this.root);
+       },       
+
+       /*
+       Method: clearNodesInPath
+      
+       Removes all nodes tagged as selected by the <ST.addNodeInPath> method.
+       
+       See also:
+       
+       <ST.addNodeInPath>
+     
+       Example:
+
+       (start code js)
+         st.clearNodesInPath();
+       (end code)
+      */  
+       clearNodesInPath: function(id) {
+           nodesInPath.length = 0;
+           this.select((this.clickedNode && this.clickedNode.id) || this.root);
+       },
+        
+       /*
+         Method: refresh
+        
+         Computes positions and plots the tree.
+         
+       */
+       refresh: function() {
+           this.reposition();
+           this.select((this.clickedNode && this.clickedNode.id) || this.root);
+       },    
+
+       reposition: function() {
+            this.graph.computeLevels(this.root, 0, "ignore");
+             this.geom.setRightLevelToShow(this.clickedNode, this.canvas);
+            this.graph.eachNode(function(n) {
+                if(n.exist) n.drawn = true;
+            });
+            this.compute('end');
+        },
+        
+        requestNodes: function(node, onComplete) {
+          var handler = $.merge(this.controller, onComplete), 
+          lev = this.config.levelsToShow;
+          if(handler.request) {
+              var leaves = [], d = node._depth;
+              node.eachLevel(0, lev, function(n) {
+                  if(n.drawn && 
+                   !n.anySubnode()) {
+                   leaves.push(n);
+                   n._level = lev - (n._depth - d);
+                  }
+              });
+              this.group.requestNodes(leaves, handler);
+          }
+            else
+              handler.onComplete();
+        },
+     
+        contract: function(onComplete, switched) {
+          var orn  = this.config.orientation;
+          var Geom = this.geom, Group = this.group;
+          if(switched) Geom.switchOrientation(switched);
+          var nodes = getNodesToHide.call(this);
+          if(switched) Geom.switchOrientation(orn);
+          Group.contract(nodes, $.merge(this.controller, onComplete));
+        },
+      
+         move: function(node, onComplete) {
+            this.compute('end', false);
+            var move = onComplete.Move, offset = {
+                'x': move.offsetX,
+                'y': move.offsetY 
+            };
+            if(move.enable) {
+                this.geom.translate(node.endPos.add(offset).$scale(-1), "end");
+            }
+            this.fx.animate($.merge(this.controller, { modes: ['linear'] }, onComplete));
+         },
+      
+        expand: function (node, onComplete) {
+            var nodeArray = getNodesToShow.call(this, node);
+            this.group.expand(nodeArray, $.merge(this.controller, onComplete));
+        },
+    
+        selectPath: function(node) {
+          var that = this;
+          this.graph.eachNode(function(n) { n.selected = false; }); 
+          function path(node) {
+              if(node == null || node.selected) return;
+              node.selected = true;
+              $.each(that.group.getSiblings([node])[node.id], 
+              function(n) { 
+                   n.exist = true; 
+                   n.drawn = true; 
+              });    
+              var parents = node.getParents();
+              parents = (parents.length > 0)? parents[0] : null;
+              path(parents);
+          };
+          for(var i=0, ns = [node.id].concat(nodesInPath); i < ns.length; i++) {
+              path(this.graph.getNode(ns[i]));
+          }
+        },
+      
+        /*
+        Method: setRoot
+     
+         Switches the current root node. Changes the topology of the Tree.
+     
+        Parameters:
+           id - (string) The id of the node to be set as root.
+           method - (string) Set this to "animate" if you want to animate the tree after adding the subtree. You can also set this parameter to "replot" to just replot the subtree.
+           onComplete - (optional|object) An action to perform after the animation (if any).
+        Example:
+
+        (start code js)
+          st.setRoot('nodeId', 'animate', {
+             onComplete: function() {
+               alert('complete!');
+             }
+          });
+        (end code)
+     */
+     setRoot: function(id, method, onComplete) {
+               if(this.busy) return;
+               this.busy = true;
+          var that = this, canvas = this.canvas;
+               var rootNode = this.graph.getNode(this.root);
+               var clickedNode = this.graph.getNode(id);
+               function $setRoot() {
+               if(this.config.multitree && clickedNode.data.$orn) {
+                       var orn = clickedNode.data.$orn;
+                       var opp = {
+                                       'left': 'right',
+                                       'right': 'left',
+                                       'top': 'bottom',
+                                       'bottom': 'top'
+                       }[orn];
+                       rootNode.data.$orn = opp;
+                       (function tag(rootNode) {
+                               rootNode.eachSubnode(function(n) {
+                                       if(n.id != id) {
+                                               n.data.$orn = opp;
+                                               tag(n);
+                                       }
+                               });
+                       })(rootNode);
+                       delete clickedNode.data.$orn;
+               }
+               this.root = id;
+               this.clickedNode = clickedNode;
+               this.graph.computeLevels(this.root, 0, "ignore");
+               this.geom.setRightLevelToShow(clickedNode, canvas, {
+                 execHide: false,
+                 onShow: function(node) {
+                   if(!node.drawn) {
+                    node.drawn = true;
+                    node.setData('alpha', 1, 'end');
+                    node.setData('alpha', 0);
+                    node.pos.setc(clickedNode.pos.x, clickedNode.pos.y);
+                   }
+                 }
+               });
+              this.compute('end');
+              this.busy = true;
+              this.fx.animate({
+                modes: ['linear', 'node-property:alpha'],
+                onComplete: function() {
+                  that.busy = false;
+                  that.onClick(id, {
+                    onComplete: function() {
+                      onComplete && onComplete.onComplete();
+                    }
+                  });
+                }
+              });
+               }
+
+               // delete previous orientations (if any)
+               delete rootNode.data.$orns;
+
+               if(method == 'animate') {
+                 $setRoot.call(this);
+                 that.selectPath(clickedNode);
+               } else if(method == 'replot') {
+                       $setRoot.call(this);
+                       this.select(this.root);
+               }
+     },
+
+     /*
+           Method: addSubtree
+        
+            Adds a subtree.
+        
+           Parameters:
+              subtree - (object) A JSON Tree object. See also <Loader.loadJSON>.
+              method - (string) Set this to "animate" if you want to animate the tree after adding the subtree. You can also set this parameter to "replot" to just replot the subtree.
+              onComplete - (optional|object) An action to perform after the animation (if any).
+    
+           Example:
+
+           (start code js)
+             st.addSubtree(json, 'animate', {
+                onComplete: function() {
+                  alert('complete!');
+                }
+             });
+           (end code)
+        */
+        addSubtree: function(subtree, method, onComplete) {
+            if(method == 'replot') {
+                this.op.sum(subtree, $.extend({ type: 'replot' }, onComplete || {}));
+            } else if (method == 'animate') {
+                this.op.sum(subtree, $.extend({ type: 'fade:seq' }, onComplete || {}));
+            }
+        },
+    
+        /*
+           Method: removeSubtree
+        
+            Removes a subtree.
+        
+           Parameters:
+              id - (string) The _id_ of the subtree to be removed.
+              removeRoot - (boolean) Default's *false*. Remove the root of the subtree or only its subnodes.
+              method - (string) Set this to "animate" if you want to animate the tree after removing the subtree. You can also set this parameter to "replot" to just replot the subtree.
+              onComplete - (optional|object) An action to perform after the animation (if any).
+
+          Example:
+
+          (start code js)
+            st.removeSubtree('idOfSubtreeToBeRemoved', false, 'animate', {
+              onComplete: function() {
+                alert('complete!');
+              }
+            });
+          (end code)
+    
+        */
+        removeSubtree: function(id, removeRoot, method, onComplete) {
+            var node = this.graph.getNode(id), subids = [];
+            node.eachLevel(+!removeRoot, false, function(n) {
+                subids.push(n.id);
+            });
+            if(method == 'replot') {
+                this.op.removeNode(subids, $.extend({ type: 'replot' }, onComplete || {}));
+            } else if (method == 'animate') {
+                this.op.removeNode(subids, $.extend({ type: 'fade:seq'}, onComplete || {}));
+            }
+        },
+    
+        /*
+           Method: select
+        
+            Selects a node in the <ST> without performing an animation. Useful when selecting 
+            nodes which are currently hidden or deep inside the tree.
+
+          Parameters:
+            id - (string) The id of the node to select.
+            onComplete - (optional|object) an onComplete callback.
+
+          Example:
+          (start code js)
+            st.select('mynodeid', {
+              onComplete: function() {
+                alert('complete!');
+              }
+            });
+          (end code)
+        */
+        select: function(id, onComplete) {
+            var group = this.group, geom = this.geom;
+            var node=  this.graph.getNode(id), canvas = this.canvas;
+            var root  = this.graph.getNode(this.root);
+            var complete = $.merge(this.controller, onComplete);
+            var that = this;
+    
+            complete.onBeforeCompute(node);
+            this.selectPath(node);
+            this.clickedNode= node;
+            this.requestNodes(node, {
+                onComplete: function(){
+                    group.hide(group.prepare(getNodesToHide.call(that)), complete);
+                    geom.setRightLevelToShow(node, canvas);
+                    that.compute("current");
+                    that.graph.eachNode(function(n) { 
+                        var pos = n.pos.getc(true);
+                        n.startPos.setc(pos.x, pos.y);
+                        n.endPos.setc(pos.x, pos.y);
+                        n.visited = false; 
+                    });
+                    var offset = { x: complete.offsetX, y: complete.offsetY };
+                    that.geom.translate(node.endPos.add(offset).$scale(-1), ["start", "current", "end"]);
+                    group.show(getNodesToShow.call(that));              
+                    that.plot();
+                    complete.onAfterCompute(that.clickedNode);
+                    complete.onComplete();
+                }
+            });     
+        },
+    
+      /*
+         Method: onClick
+    
+        Animates the <ST> to center the node specified by *id*.
+            
+        Parameters:
+        
+        id - (string) A node id.
+        options - (optional|object) A group of options and callbacks described below.
+        onComplete - (object) An object callback called when the animation finishes.
+        Move - (object) An object that has as properties _offsetX_ or _offsetY_ for adding some offset position to the centered node.
+
+        Example:
+
+        (start code js)
+          st.onClick('mynodeid', {
+                 Move: {
+                       enable: true,
+                   offsetX: 30,
+                   offsetY: 5
+                 },
+                 onComplete: function() {
+                     alert('yay!');
+                 }
+          });
+        (end code)
+    
+        */    
+      onClick: function (id, options) {
+        var canvas = this.canvas, that = this, Geom = this.geom, config = this.config;
+        var innerController = {
+            Move: {
+                   enable: true,
+              offsetX: config.offsetX || 0,
+              offsetY: config.offsetY || 0  
+            },
+            setRightLevelToShowConfig: false,
+            onBeforeRequest: $.empty,
+            onBeforeContract: $.empty,
+            onBeforeMove: $.empty,
+            onBeforeExpand: $.empty
+        };
+        var complete = $.merge(this.controller, innerController, options);
+        
+        if(!this.busy) {
+            this.busy = true;
+            var node = this.graph.getNode(id);
+            this.selectPath(node, this.clickedNode);
+               this.clickedNode = node;
+            complete.onBeforeCompute(node);
+            complete.onBeforeRequest(node);
+            this.requestNodes(node, {
+                onComplete: function() {
+                    complete.onBeforeContract(node);
+                    that.contract({
+                        onComplete: function() {
+                            Geom.setRightLevelToShow(node, canvas, complete.setRightLevelToShowConfig);
+                            complete.onBeforeMove(node);
+                            that.move(node, {
+                                Move: complete.Move,
+                                onComplete: function() {
+                                    complete.onBeforeExpand(node);
+                                    that.expand(node, {
+                                        onComplete: function() {
+                                            that.busy = false;
+                                            complete.onAfterCompute(id);
+                                            complete.onComplete();
+                                        }
+                                    }); // expand
+                                }
+                            }); // move
+                        }
+                    });// contract
+                }
+            });// request
+        }
+      }
+    });
+
+})();
+
+$jit.ST.$extend = true;
+
+/*
+   Class: ST.Op
+    
+   Custom extension of <Graph.Op>.
+
+   Extends:
+
+   All <Graph.Op> methods
+   
+   See also:
+   
+   <Graph.Op>
+
+*/
+$jit.ST.Op = new Class({
+
+  Implements: Graph.Op
+    
+});
+
+/*
+    
+     Performs operations on group of nodes.
+
+*/
+$jit.ST.Group = new Class({
+    
+    initialize: function(viz) {
+        this.viz = viz;
+        this.canvas = viz.canvas;
+        this.config = viz.config;
+        this.animation = new Animation;
+        this.nodes = null;
+    },
+    
+    /*
+    
+       Calls the request method on the controller to request a subtree for each node. 
+    */
+    requestNodes: function(nodes, controller) {
+        var counter = 0, len = nodes.length, nodeSelected = {};
+        var complete = function() { controller.onComplete(); };
+        var viz = this.viz;
+        if(len == 0) complete();
+        for(var i=0; i<len; i++) {
+            nodeSelected[nodes[i].id] = nodes[i];
+            controller.request(nodes[i].id, nodes[i]._level, {
+                onComplete: function(nodeId, data) {
+                    if(data && data.children) {
+                        data.id = nodeId;
+                        viz.op.sum(data, { type: 'nothing' });
+                    }
+                    if(++counter == len) {
+                        viz.graph.computeLevels(viz.root, 0);
+                        complete();
+                    }
+                }
+            });
+        }
+    },
+    
+    /*
+    
+       Collapses group of nodes. 
+    */
+    contract: function(nodes, controller) {
+        var viz = this.viz;
+        var that = this;
+
+        nodes = this.prepare(nodes);
+        this.animation.setOptions($.merge(controller, {
+            $animating: false,
+            compute: function(delta) {
+              if(delta == 1) delta = 0.99;
+              that.plotStep(1 - delta, controller, this.$animating);
+              this.$animating = 'contract';
+            },
+            
+            complete: function() {
+                that.hide(nodes, controller);
+            }       
+        })).start();
+    },
+    
+    hide: function(nodes, controller) {
+        var viz = this.viz;
+        for(var i=0; i<nodes.length; i++) {
+            // TODO nodes are requested on demand, but not
+            // deleted when hidden. Would that be a good feature?
+            // Currently that feature is buggy, so I'll turn it off
+            // Actually this feature is buggy because trimming should take
+            // place onAfterCompute and not right after collapsing nodes.
+            if (true || !controller || !controller.request) {
+                nodes[i].eachLevel(1, false, function(elem){
+                    if (elem.exist) {
+                        $.extend(elem, {
+                            'drawn': false,
+                            'exist': false
+                        });
+                    }
+                });
+            } else {
+                var ids = [];
+                nodes[i].eachLevel(1, false, function(n) {
+                    ids.push(n.id);
+                });
+                viz.op.removeNode(ids, { 'type': 'nothing' });
+                viz.labels.clearLabels();
+            }
+        }
+        controller.onComplete();
+    },    
+    
+
+    /*
+       Expands group of nodes. 
+    */
+    expand: function(nodes, controller) {
+        var that = this;
+        this.show(nodes);
+        this.animation.setOptions($.merge(controller, {
+            $animating: false,
+            compute: function(delta) {
+                that.plotStep(delta, controller, this.$animating);
+                this.$animating = 'expand';
+            },
+            
+            complete: function() {
+                that.plotStep(undefined, controller, false);
+                controller.onComplete();
+            }       
+        })).start();
+        
+    },
+    
+    show: function(nodes) {
+        var config = this.config;
+        this.prepare(nodes);
+        $.each(nodes, function(n) {
+               // check for root nodes if multitree
+               if(config.multitree && !('$orn' in n.data)) {
+                       delete n.data.$orns;
+                       var orns = ' ';
+                       n.eachSubnode(function(ch) {
+                               if(('$orn' in ch.data) 
+                                               && orns.indexOf(ch.data.$orn) < 0 
+                                               && ch.exist && !ch.drawn) {
+                                       orns += ch.data.$orn + ' ';
+                               }
+                       });
+                       n.data.$orns = orns;
+               }
+            n.eachLevel(0, config.levelsToShow, function(n) {
+               if(n.exist) n.drawn = true;
+            });     
+        });
+    },
+    
+    prepare: function(nodes) {
+        this.nodes = this.getNodesWithChildren(nodes);
+        return this.nodes;
+    },
+    
+    /*
+       Filters an array of nodes leaving only nodes with children.
+    */
+    getNodesWithChildren: function(nodes) {
+        var ans = [], config = this.config, root = this.viz.root;
+        nodes.sort(function(a, b) { return (a._depth <= b._depth) - (a._depth >= b._depth); });
+        for(var i=0; i<nodes.length; i++) {
+            if(nodes[i].anySubnode("exist")) {
+               for (var j = i+1, desc = false; !desc && j < nodes.length; j++) {
+                    if(!config.multitree || '$orn' in nodes[j].data) {
+                               desc = desc || nodes[i].isDescendantOf(nodes[j].id);                            
+                    }
+                }
+                if(!desc) ans.push(nodes[i]);
+            }
+        }
+        return ans;
+    },
+    
+    plotStep: function(delta, controller, animating) {
+        var viz = this.viz,
+        config = this.config,
+        canvas = viz.canvas, 
+        ctx = canvas.getCtx(),
+        nodes = this.nodes;
+        var i, node;
+        // hide nodes that are meant to be collapsed/expanded
+        var nds = {};
+        for(i=0; i<nodes.length; i++) {
+          node = nodes[i];
+          nds[node.id] = [];
+          var root = config.multitree && !('$orn' in node.data);
+          var orns = root && node.data.$orns;
+          node.eachSubgraph(function(n) { 
+            // TODO(nico): Cleanup
+                 // special check for root node subnodes when
+                 // multitree is checked.
+                 if(root && orns && orns.indexOf(n.data.$orn) > 0 
+                                 && n.drawn) {
+                         n.drawn = false;
+                  nds[node.id].push(n);
+              } else if((!root || !orns) && n.drawn) {
+                n.drawn = false;
+                nds[node.id].push(n);
+              }
+            });        
+            node.drawn = true;
+        }
+        // plot the whole (non-scaled) tree
+        if(nodes.length > 0) viz.fx.plot();
+        // show nodes that were previously hidden
+        for(i in nds) {
+          $.each(nds[i], function(n) { n.drawn = true; });
+        }
+        // plot each scaled subtree
+        for(i=0; i<nodes.length; i++) {
+          node = nodes[i];
+          ctx.save();
+          viz.fx.plotSubtree(node, controller, delta, animating);                
+          ctx.restore();
+        }
+      },
+
+      getSiblings: function(nodes) {
+        var siblings = {};
+        $.each(nodes, function(n) {
+            var par = n.getParents();
+            if (par.length == 0) {
+                siblings[n.id] = [n];
+            } else {
+                var ans = [];
+                par[0].eachSubnode(function(sn) {
+                    ans.push(sn);
+                });
+                siblings[n.id] = ans;
+            }
+        });
+        return siblings;
+    }
+});
+
+/*
+   ST.Geom
+
+   Performs low level geometrical computations.
+
+   Access:
+
+   This instance can be accessed with the _geom_ parameter of the st instance created.
+
+   Example:
+
+   (start code js)
+    var st = new ST(canvas, config);
+    st.geom.translate //or can also call any other <ST.Geom> method
+   (end code)
+
+*/
+
+$jit.ST.Geom = new Class({
+    Implements: Graph.Geom,
+    /*
+       Changes the tree current orientation to the one specified.
+
+       You should usually use <ST.switchPosition> instead.
+    */  
+    switchOrientation: function(orn) {
+       this.config.orientation = orn;
+    },
+
+    /*
+       Makes a value dispatch according to the current layout
+       Works like a CSS property, either _top-right-bottom-left_ or _top|bottom - left|right_.
+     */
+    dispatch: function() {
+         // TODO(nico) should store Array.prototype.slice.call somewhere.
+        var args = Array.prototype.slice.call(arguments);
+        var s = args.shift(), len = args.length;
+        var val = function(a) { return typeof a == 'function'? a() : a; };
+        if(len == 2) {
+            return (s == "top" || s == "bottom")? val(args[0]) : val(args[1]);
+        } else if(len == 4) {
+            switch(s) {
+                case "top": return val(args[0]);
+                case "right": return val(args[1]);
+                case "bottom": return val(args[2]);
+                case "left": return val(args[3]);
+            }
+        }
+        return undefined;
+    },
+
+    /*
+       Returns label height or with, depending on the tree current orientation.
+    */  
+    getSize: function(n, invert) {
+        var data = n.data, config = this.config;
+        var siblingOffset = config.siblingOffset;
+        var s = (config.multitree 
+                       && ('$orn' in data) 
+                       && data.$orn) || config.orientation;
+        var w = n.getData('width') + siblingOffset;
+        var h = n.getData('height') + siblingOffset;
+        if(!invert)
+            return this.dispatch(s, h, w);
+        else
+            return this.dispatch(s, w, h);
+    },
+    
+    /*
+       Calculates a subtree base size. This is an utility function used by _getBaseSize_
+    */  
+    getTreeBaseSize: function(node, level, leaf) {
+        var size = this.getSize(node, true), baseHeight = 0, that = this;
+        if(leaf(level, node)) return size;
+        if(level === 0) return 0;
+        node.eachSubnode(function(elem) {
+            baseHeight += that.getTreeBaseSize(elem, level -1, leaf);
+        });
+        return (size > baseHeight? size : baseHeight) + this.config.subtreeOffset;
+    },
+
+
+    /*
+       getEdge
+       
+       Returns a Complex instance with the begin or end position of the edge to be plotted.
+
+       Parameters:
+
+       node - A <Graph.Node> that is connected to this edge.
+       type - Returns the begin or end edge position. Possible values are 'begin' or 'end'.
+
+       Returns:
+
+       A <Complex> number specifying the begin or end position.
+    */  
+    getEdge: function(node, type, s) {
+       var $C = function(a, b) { 
+          return function(){
+            return node.pos.add(new Complex(a, b));
+          }; 
+        };
+        var dim = this.node;
+        var w = node.getData('width');
+        var h = node.getData('height');
+
+        if(type == 'begin') {
+            if(dim.align == "center") {
+                return this.dispatch(s, $C(0, h/2), $C(-w/2, 0),
+                                     $C(0, -h/2),$C(w/2, 0));
+            } else if(dim.align == "left") {
+                return this.dispatch(s, $C(0, h), $C(0, 0),
+                                     $C(0, 0), $C(w, 0));
+            } else if(dim.align == "right") {
+                return this.dispatch(s, $C(0, 0), $C(-w, 0),
+                                     $C(0, -h),$C(0, 0));
+            } else throw "align: not implemented";
+            
+            
+        } else if(type == 'end') {
+            if(dim.align == "center") {
+                return this.dispatch(s, $C(0, -h/2), $C(w/2, 0),
+                                     $C(0, h/2),  $C(-w/2, 0));
+            } else if(dim.align == "left") {
+                return this.dispatch(s, $C(0, 0), $C(w, 0),
+                                     $C(0, h), $C(0, 0));
+            } else if(dim.align == "right") {
+                return this.dispatch(s, $C(0, -h),$C(0, 0),
+                                     $C(0, 0), $C(-w, 0));
+            } else throw "align: not implemented";
+        }
+    },
+
+    /*
+       Adjusts the tree position due to canvas scaling or translation.
+    */  
+    getScaledTreePosition: function(node, scale) {
+        var dim = this.node;
+        var w = node.getData('width');
+        var h = node.getData('height');
+        var s = (this.config.multitree 
+                       && ('$orn' in node.data) 
+                       && node.data.$orn) || this.config.orientation;
+
+        var $C = function(a, b) { 
+          return function(){
+            return node.pos.add(new Complex(a, b)).$scale(1 - scale);
+          }; 
+        };
+        if(dim.align == "left") {
+            return this.dispatch(s, $C(0, h), $C(0, 0),
+                                 $C(0, 0), $C(w, 0));
+        } else if(dim.align == "center") {
+            return this.dispatch(s, $C(0, h / 2), $C(-w / 2, 0),
+                                 $C(0, -h / 2),$C(w / 2, 0));
+        } else if(dim.align == "right") {
+            return this.dispatch(s, $C(0, 0), $C(-w, 0),
+                                 $C(0, -h),$C(0, 0));
+        } else throw "align: not implemented";
+    },
+
+    /*
+       treeFitsInCanvas
+       
+       Returns a Boolean if the current subtree fits in canvas.
+
+       Parameters:
+
+       node - A <Graph.Node> which is the current root of the subtree.
+       canvas - The <Canvas> object.
+       level - The depth of the subtree to be considered.
+    */  
+    treeFitsInCanvas: function(node, canvas, level) {
+        var csize = canvas.getSize();
+        var s = (this.config.multitree 
+                       && ('$orn' in node.data) 
+                       && node.data.$orn) || this.config.orientation;
+
+        var size = this.dispatch(s, csize.width, csize.height);
+        var baseSize = this.getTreeBaseSize(node, level, function(level, node) { 
+          return level === 0 || !node.anySubnode();
+        });
+        return (baseSize < size);
+    }
+});
+
+/*
+  Class: ST.Plot
+  
+  Custom extension of <Graph.Plot>.
+
+  Extends:
+
+  All <Graph.Plot> methods
+  
+  See also:
+  
+  <Graph.Plot>
+
+*/
+$jit.ST.Plot = new Class({
+    
+    Implements: Graph.Plot,
+    
+    /*
+       Plots a subtree from the spacetree.
+    */
+    plotSubtree: function(node, opt, scale, animating) {
+        var viz = this.viz, canvas = viz.canvas, config = viz.config;
+        scale = Math.min(Math.max(0.001, scale), 1);
+        if(scale >= 0) {
+            node.drawn = false;     
+            var ctx = canvas.getCtx();
+            var diff = viz.geom.getScaledTreePosition(node, scale);
+            ctx.translate(diff.x, diff.y);
+            ctx.scale(scale, scale);
+        }
+        this.plotTree(node, $.merge(opt, {
+          'withLabels': true,
+          'hideLabels': !!scale,
+          'plotSubtree': function(n, ch) {
+            var root = config.multitree && !('$orn' in node.data);
+            var orns = root && node.getData('orns');
+            return !root || orns.indexOf(node.getData('orn')) > -1;
+          }
+        }), animating);
+        if(scale >= 0) node.drawn = true;
+    },   
+   
+    /*
+        Method: getAlignedPos
+        
+        Returns a *x, y* object with the position of the top/left corner of a <ST> node.
+        
+        Parameters:
+        
+        pos - (object) A <Graph.Node> position.
+        width - (number) The width of the node.
+        height - (number) The height of the node.
+        
+     */
+    getAlignedPos: function(pos, width, height) {
+        var nconfig = this.node;
+        var square, orn;
+        if(nconfig.align == "center") {
+            square = {
+                x: pos.x - width / 2,
+                y: pos.y - height / 2
+            };
+        } else if (nconfig.align == "left") {
+            orn = this.config.orientation;
+            if(orn == "bottom" || orn == "top") {
+                square = {
+                    x: pos.x - width / 2,
+                    y: pos.y
+                };
+            } else {
+                square = {
+                    x: pos.x,
+                    y: pos.y - height / 2
+                };
+            }
+        } else if(nconfig.align == "right") {
+            orn = this.config.orientation;
+            if(orn == "bottom" || orn == "top") {
+                square = {
+                    x: pos.x - width / 2,
+                    y: pos.y - height
+                };
+            } else {
+                square = {
+                    x: pos.x - width,
+                    y: pos.y - height / 2
+                };
+            }
+        } else throw "align: not implemented";
+        
+        return square;
+    },
+    
+    getOrientation: function(adj) {
+       var config = this.config;
+       var orn = config.orientation;
+
+       if(config.multitree) {
+               var nodeFrom = adj.nodeFrom;
+               var nodeTo = adj.nodeTo;
+               orn = (('$orn' in nodeFrom.data) 
+                       && nodeFrom.data.$orn) 
+                       || (('$orn' in nodeTo.data) 
+                       && nodeTo.data.$orn);
+       }
+
+       return orn; 
+    }
+});
+
+/*
+  Class: ST.Label
+
+  Custom extension of <Graph.Label>. 
+  Contains custom <Graph.Label.SVG>, <Graph.Label.HTML> and <Graph.Label.Native> extensions.
+
+  Extends:
+
+  All <Graph.Label> methods and subclasses.
+
+  See also:
+
+  <Graph.Label>, <Graph.Label.Native>, <Graph.Label.HTML>, <Graph.Label.SVG>.
+ */ 
+$jit.ST.Label = {};
+
+/*
+   ST.Label.Native
+
+   Custom extension of <Graph.Label.Native>.
+
+   Extends:
+
+   All <Graph.Label.Native> methods
+
+   See also:
+
+   <Graph.Label.Native>
+*/
+$jit.ST.Label.Native = new Class({
+  Implements: Graph.Label.Native,
+
+  renderLabel: function(canvas, node, controller) {
+    var ctx = canvas.getCtx(),
+        coord = node.pos.getc(true),
+        width = node.getData('width'),
+        height = node.getData('height'),
+        pos = this.viz.fx.getAlignedPos(coord, width, height);
+    ctx.fillText(node.name, pos.x + width / 2, pos.y + height / 2);
+  }
+});
+
+$jit.ST.Label.DOM = new Class({
+  Implements: Graph.Label.DOM,
+
+  /* 
+      placeLabel
+
+      Overrides abstract method placeLabel in <Graph.Plot>.
+
+      Parameters:
+
+      tag - A DOM label element.
+      node - A <Graph.Node>.
+      controller - A configuration/controller object passed to the visualization.
+     
+    */
+    placeLabel: function(tag, node, controller) {
+        var pos = node.pos.getc(true), 
+            config = this.viz.config, 
+            dim = config.Node, 
+            canvas = this.viz.canvas,
+            w = node.getData('width'),
+            h = node.getData('height'),
+            radius = canvas.getSize(),
+            labelPos, orn;
+        
+        var ox = canvas.translateOffsetX,
+            oy = canvas.translateOffsetY,
+            sx = canvas.scaleOffsetX,
+            sy = canvas.scaleOffsetY,
+            posx = pos.x * sx + ox,
+            posy = pos.y * sy + oy;
+
+        if(dim.align == "center") {
+            labelPos= {
+                x: Math.round(posx - w / 2 + radius.width/2),
+                y: Math.round(posy - h / 2 + radius.height/2)
+            };
+        } else if (dim.align == "left") {
+            orn = config.orientation;
+            if(orn == "bottom" || orn == "top") {
+                labelPos= {
+                    x: Math.round(posx - w / 2 + radius.width/2),
+                    y: Math.round(posy + radius.height/2)
+                };
+            } else {
+                labelPos= {
+                    x: Math.round(posx + radius.width/2),
+                    y: Math.round(posy - h / 2 + radius.height/2)
+                };
+            }
+        } else if(dim.align == "right") {
+            orn = config.orientation;
+            if(orn == "bottom" || orn == "top") {
+                labelPos= {
+                    x: Math.round(posx - w / 2 + radius.width/2),
+                    y: Math.round(posy - h + radius.height/2)
+                };
+            } else {
+                labelPos= {
+                    x: Math.round(posx - w + radius.width/2),
+                    y: Math.round(posy - h / 2 + radius.height/2)
+                };
+            }
+        } else throw "align: not implemented";
+
+        var style = tag.style;
+        style.left = labelPos.x + 'px';
+        style.top  = labelPos.y + 'px';
+        style.display = this.fitsInCanvas(labelPos, canvas)? '' : 'none';
+        controller.onPlaceLabel(tag, node);
+    }
+});
+
+/*
+  ST.Label.SVG
+
+  Custom extension of <Graph.Label.SVG>.
+
+  Extends:
+
+  All <Graph.Label.SVG> methods
+
+  See also:
+
+  <Graph.Label.SVG>
+*/
+$jit.ST.Label.SVG = new Class({
+  Implements: [$jit.ST.Label.DOM, Graph.Label.SVG],
+
+  initialize: function(viz) {
+    this.viz = viz;
+  }
+});
+
+/*
+   ST.Label.HTML
+
+   Custom extension of <Graph.Label.HTML>.
+
+   Extends:
+
+   All <Graph.Label.HTML> methods.
+
+   See also:
+
+   <Graph.Label.HTML>
+
+*/
+$jit.ST.Label.HTML = new Class({
+  Implements: [$jit.ST.Label.DOM, Graph.Label.HTML],
+
+  initialize: function(viz) {
+    this.viz = viz;
+  }
+});
+
+
+/*
+  Class: ST.Plot.NodeTypes
+
+  This class contains a list of <Graph.Node> built-in types. 
+  Node types implemented are 'none', 'circle', 'rectangle', 'ellipse' and 'square'.
+
+  You can add your custom node types, customizing your visualization to the extreme.
+
+  Example:
+
+  (start code js)
+    ST.Plot.NodeTypes.implement({
+      'mySpecialType': {
+        'render': function(node, canvas) {
+          //print your custom node to canvas
+        },
+        //optional
+        'contains': function(node, pos) {
+          //return true if pos is inside the node or false otherwise
+        }
+      }
+    });
+  (end code)
+
+*/
+$jit.ST.Plot.NodeTypes = new Class({
+  'none': {
+    'render': $.empty,
+    'contains': $.lambda(false)
+  },
+  'circle': {
+    'render': function(node, canvas) {
+      var dim  = node.getData('dim'),
+          pos = this.getAlignedPos(node.pos.getc(true), dim, dim),
+          dim2 = dim/2;
+      this.nodeHelper.circle.render('fill', {x:pos.x+dim2, y:pos.y+dim2}, dim2, canvas);
+    },
+    'contains': function(node, pos) {
+      var dim  = node.getData('dim'),
+          npos = this.getAlignedPos(node.pos.getc(true), dim, dim),
+          dim2 = dim/2;
+      this.nodeHelper.circle.contains({x:npos.x+dim2, y:npos.y+dim2}, pos, dim2);
+    }
+  },
+  'square': {
+    'render': function(node, canvas) {
+      var dim  = node.getData('dim'),
+          dim2 = dim/2,
+          pos = this.getAlignedPos(node.pos.getc(true), dim, dim);
+      this.nodeHelper.square.render('fill', {x:pos.x+dim2, y:pos.y+dim2}, dim2, canvas);
+    },
+    'contains': function(node, pos) {
+      var dim  = node.getData('dim'),
+          npos = this.getAlignedPos(node.pos.getc(true), dim, dim),
+          dim2 = dim/2;
+      this.nodeHelper.square.contains({x:npos.x+dim2, y:npos.y+dim2}, pos, dim2);
+    }
+  },
+  'ellipse': {
+    'render': function(node, canvas) {
+      var width = node.getData('width'),
+          height = node.getData('height'),
+          pos = this.getAlignedPos(node.pos.getc(true), width, height);
+      this.nodeHelper.ellipse.render('fill', {x:pos.x+width/2, y:pos.y+height/2}, width, height, canvas);
+    },
+    'contains': function(node, pos) {
+      var width = node.getData('width'),
+          height = node.getData('height'),
+          npos = this.getAlignedPos(node.pos.getc(true), width, height);
+      this.nodeHelper.ellipse.contains({x:npos.x+width/2, y:npos.y+height/2}, pos, width, height);
+    }
+  },
+  'rectangle': {
+    'render': function(node, canvas) {
+      var width = node.getData('width'),
+          height = node.getData('height'),
+          pos = this.getAlignedPos(node.pos.getc(true), width, height);
+      this.nodeHelper.rectangle.render('fill', {x:pos.x+width/2, y:pos.y+height/2}, width, height, canvas);
+    },
+    'contains': function(node, pos) {
+      var width = node.getData('width'),
+          height = node.getData('height'),
+          npos = this.getAlignedPos(node.pos.getc(true), width, height);
+      this.nodeHelper.rectangle.contains({x:npos.x+width/2, y:npos.y+height/2}, pos, width, height);
+    }
+  }
+});
+
+/*
+  Class: ST.Plot.EdgeTypes
+
+  This class contains a list of <Graph.Adjacence> built-in types. 
+  Edge types implemented are 'none', 'line', 'arrow', 'quadratic:begin', 'quadratic:end', 'bezier'.
+
+  You can add your custom edge types, customizing your visualization to the extreme.
+
+  Example:
+
+  (start code js)
+    ST.Plot.EdgeTypes.implement({
+      'mySpecialType': {
+        'render': function(adj, canvas) {
+          //print your custom edge to canvas
+        },
+        //optional
+        'contains': function(adj, pos) {
+          //return true if pos is inside the arc or false otherwise
+        }
+      }
+    });
+  (end code)
+
+*/
+$jit.ST.Plot.EdgeTypes = new Class({
+    'none': $.empty,
+    'line': {
+      'render': function(adj, canvas) {
+        var orn = this.getOrientation(adj),
+            nodeFrom = adj.nodeFrom, 
+            nodeTo = adj.nodeTo,
+            rel = nodeFrom._depth < nodeTo._depth,
+            from = this.viz.geom.getEdge(rel? nodeFrom:nodeTo, 'begin', orn),
+            to =  this.viz.geom.getEdge(rel? nodeTo:nodeFrom, 'end', orn);
+        this.edgeHelper.line.render(from, to, canvas);
+      },
+      'contains': function(adj, pos) {
+        var orn = this.getOrientation(adj),
+            nodeFrom = adj.nodeFrom, 
+            nodeTo = adj.nodeTo,
+            rel = nodeFrom._depth < nodeTo._depth,
+            from = this.viz.geom.getEdge(rel? nodeFrom:nodeTo, 'begin', orn),
+            to =  this.viz.geom.getEdge(rel? nodeTo:nodeFrom, 'end', orn);
+        return this.edgeHelper.line.contains(from, to, pos, this.edge.epsilon);
+      }
+    },
+     'arrow': {
+       'render': function(adj, canvas) {
+         var orn = this.getOrientation(adj),
+             node = adj.nodeFrom, 
+             child = adj.nodeTo,
+             dim = adj.getData('dim'),
+             from = this.viz.geom.getEdge(node, 'begin', orn),
+             to = this.viz.geom.getEdge(child, 'end', orn),
+             direction = adj.data.$direction,
+             inv = (direction && direction.length>1 && direction[0] != node.id);
+         this.edgeHelper.arrow.render(from, to, dim, inv, canvas);
+       },
+       'contains': function(adj, pos) {
+         var orn = this.getOrientation(adj),
+             nodeFrom = adj.nodeFrom, 
+             nodeTo = adj.nodeTo,
+             rel = nodeFrom._depth < nodeTo._depth,
+             from = this.viz.geom.getEdge(rel? nodeFrom:nodeTo, 'begin', orn),
+             to =  this.viz.geom.getEdge(rel? nodeTo:nodeFrom, 'end', orn);
+         return this.edgeHelper.arrow.contains(from, to, pos, this.edge.epsilon);
+       }
+     },
+    'quadratic:begin': {
+       'render': function(adj, canvas) {
+          var orn = this.getOrientation(adj);
+          var nodeFrom = adj.nodeFrom, 
+              nodeTo = adj.nodeTo,
+              rel = nodeFrom._depth < nodeTo._depth,
+              begin = this.viz.geom.getEdge(rel? nodeFrom:nodeTo, 'begin', orn),
+              end =  this.viz.geom.getEdge(rel? nodeTo:nodeFrom, 'end', orn),
+              dim = adj.getData('dim'),
+              ctx = canvas.getCtx();
+          ctx.beginPath();
+          ctx.moveTo(begin.x, begin.y);
+          switch(orn) {
+            case "left":
+              ctx.quadraticCurveTo(begin.x + dim, begin.y, end.x, end.y);
+              break;
+            case "right":
+              ctx.quadraticCurveTo(begin.x - dim, begin.y, end.x, end.y);
+              break;
+            case "top":
+              ctx.quadraticCurveTo(begin.x, begin.y + dim, end.x, end.y);
+              break;
+            case "bottom":
+              ctx.quadraticCurveTo(begin.x, begin.y - dim, end.x, end.y);
+              break;
+          }
+          ctx.stroke();
+        }
+     },
+    'quadratic:end': {
+       'render': function(adj, canvas) {
+          var orn = this.getOrientation(adj);
+          var nodeFrom = adj.nodeFrom, 
+              nodeTo = adj.nodeTo,
+              rel = nodeFrom._depth < nodeTo._depth,
+              begin = this.viz.geom.getEdge(rel? nodeFrom:nodeTo, 'begin', orn),
+              end =  this.viz.geom.getEdge(rel? nodeTo:nodeFrom, 'end', orn),
+              dim = adj.getData('dim'),
+              ctx = canvas.getCtx();
+          ctx.beginPath();
+          ctx.moveTo(begin.x, begin.y);
+          switch(orn) {
+            case "left":
+              ctx.quadraticCurveTo(end.x - dim, end.y, end.x, end.y);
+              break;
+            case "right":
+              ctx.quadraticCurveTo(end.x + dim, end.y, end.x, end.y);
+              break;
+            case "top":
+              ctx.quadraticCurveTo(end.x, end.y - dim, end.x, end.y);
+              break;
+            case "bottom":
+              ctx.quadraticCurveTo(end.x, end.y + dim, end.x, end.y);
+              break;
+          }
+          ctx.stroke();
+       }
+     },
+    'bezier': {
+       'render': function(adj, canvas) {
+         var orn = this.getOrientation(adj),
+             nodeFrom = adj.nodeFrom, 
+             nodeTo = adj.nodeTo,
+             rel = nodeFrom._depth < nodeTo._depth,
+             begin = this.viz.geom.getEdge(rel? nodeFrom:nodeTo, 'begin', orn),
+             end =  this.viz.geom.getEdge(rel? nodeTo:nodeFrom, 'end', orn),
+             dim = adj.getData('dim'),
+             ctx = canvas.getCtx();
+         ctx.beginPath();
+         ctx.moveTo(begin.x, begin.y);
+         switch(orn) {
+           case "left":
+             ctx.bezierCurveTo(begin.x + dim, begin.y, end.x - dim, end.y, end.x, end.y);
+             break;
+           case "right":
+             ctx.bezierCurveTo(begin.x - dim, begin.y, end.x + dim, end.y, end.x, end.y);
+             break;
+           case "top":
+             ctx.bezierCurveTo(begin.x, begin.y + dim, end.x, end.y - dim, end.x, end.y);
+             break;
+           case "bottom":
+             ctx.bezierCurveTo(begin.x, begin.y - dim, end.x, end.y + dim, end.x, end.y);
+             break;
+         }
+         ctx.stroke();
+       }
+    }
+});
+
+
+
+/*
+ * File: AreaChart.js
+ *
+*/
+
+$jit.ST.Plot.NodeTypes.implement({
+  'areachart-stacked' : {
+    'render' : function(node, canvas) {
+      var pos = node.pos.getc(true), 
+          width = node.getData('width'),
+          height = node.getData('height'),
+          algnPos = this.getAlignedPos(pos, width, height),
+          x = algnPos.x, y = algnPos.y,
+          stringArray = node.getData('stringArray'),
+          dimArray = node.getData('dimArray'),
+          valArray = node.getData('valueArray'),
+          valLeft = $.reduce(valArray, function(x, y) { return x + y[0]; }, 0),
+          valRight = $.reduce(valArray, function(x, y) { return x + y[1]; }, 0),
+          colorArray = node.getData('colorArray'),
+          colorLength = colorArray.length,
+          config = node.getData('config'),
+          gradient = node.getData('gradient'),
+          showLabels = config.showLabels,
+          aggregates = config.showAggregates,
+          label = config.Label,
+          prev = node.getData('prev');
+
+      var ctx = canvas.getCtx(), border = node.getData('border');
+      if (colorArray && dimArray && stringArray) {
+        for (var i=0, l=dimArray.length, acumLeft=0, acumRight=0, valAcum=0; i<l; i++) {
+          ctx.fillStyle = ctx.strokeStyle = colorArray[i % colorLength];
+          ctx.save();
+          if(gradient && (dimArray[i][0] > 0 || dimArray[i][1] > 0)) {
+            var h1 = acumLeft + dimArray[i][0],
+                h2 = acumRight + dimArray[i][1],
+                alpha = Math.atan((h2 - h1) / width),
+                delta = 55;
+            var linear = ctx.createLinearGradient(x + width/2, 
+                y - (h1 + h2)/2,
+                x + width/2 + delta * Math.sin(alpha),
+                y - (h1 + h2)/2 + delta * Math.cos(alpha));
+            var color = $.rgbToHex($.map($.hexToRgb(colorArray[i % colorLength].slice(1)), 
+                function(v) { return (v * 0.85) >> 0; }));
+            linear.addColorStop(0, colorArray[i % colorLength]);
+            linear.addColorStop(1, color);
+            ctx.fillStyle = linear;
+          }
+          ctx.beginPath();
+          ctx.moveTo(x, y - acumLeft);
+          ctx.lineTo(x + width, y - acumRight);
+          ctx.lineTo(x + width, y - acumRight - dimArray[i][1]);
+          ctx.lineTo(x, y - acumLeft - dimArray[i][0]);
+          ctx.lineTo(x, y - acumLeft);
+          ctx.fill();
+          ctx.restore();
+          if(border) {
+            var strong = border.name == stringArray[i];
+            var perc = strong? 0.7 : 0.8;
+            var color = $.rgbToHex($.map($.hexToRgb(colorArray[i % colorLength].slice(1)), 
+                function(v) { return (v * perc) >> 0; }));
+            ctx.strokeStyle = color;
+            ctx.lineWidth = strong? 4 : 1;
+            ctx.save();
+            ctx.beginPath();
+            if(border.index === 0) {
+              ctx.moveTo(x, y - acumLeft);
+              ctx.lineTo(x, y - acumLeft - dimArray[i][0]);
+            } else {
+              ctx.moveTo(x + width, y - acumRight);
+              ctx.lineTo(x + width, y - acumRight - dimArray[i][1]);
+            }
+            ctx.stroke();
+            ctx.restore();
+          }
+          acumLeft += (dimArray[i][0] || 0);
+          acumRight += (dimArray[i][1] || 0);
+          
+          if(dimArray[i][0] > 0)
+            valAcum += (valArray[i][0] || 0);
+        }
+        if(prev && label.type == 'Native') {
+          ctx.save();
+          ctx.beginPath();
+          ctx.fillStyle = ctx.strokeStyle = label.color;
+          ctx.font = label.style + ' ' + label.size + 'px ' + label.family;
+          ctx.textAlign = 'center';
+          ctx.textBaseline = 'middle';
+          var aggValue = aggregates(node.name, valLeft, valRight, node, valAcum);
+          if(aggValue !== false) {
+            ctx.fillText(aggValue !== true? aggValue : valAcum, x, y - acumLeft - config.labelOffset - label.size/2, width);
+          }
+          if(showLabels(node.name, valLeft, valRight, node)) {
+            ctx.fillText(node.name, x, y + label.size/2 + config.labelOffset);
+          }
+          ctx.restore();
+        }
+      }
+    },
+    'contains': function(node, mpos) {
+      var pos = node.pos.getc(true), 
+          width = node.getData('width'),
+          height = node.getData('height'),
+          algnPos = this.getAlignedPos(pos, width, height),
+          x = algnPos.x, y = algnPos.y,
+          dimArray = node.getData('dimArray'),
+          rx = mpos.x - x;
+      //bounding box check
+      if(mpos.x < x || mpos.x > x + width
+        || mpos.y > y || mpos.y < y - height) {
+        return false;
+      }
+      //deep check
+      for(var i=0, l=dimArray.length, lAcum=y, rAcum=y; i<l; i++) {
+        var dimi = dimArray[i];
+        lAcum -= dimi[0];
+        rAcum -= dimi[1];
+        var intersec = lAcum + (rAcum - lAcum) * rx / width;
+        if(mpos.y >= intersec) {
+          var index = +(rx > width/2);
+          return {
+            'name': node.getData('stringArray')[i],
+            'color': node.getData('colorArray')[i],
+            'value': node.getData('valueArray')[i][index],
+            'index': index
+          };
+        }
+      }
+      return false;
+    }
+  }
+});
+
+/*
+  Class: AreaChart
+  
+  A visualization that displays stacked area charts.
+  
+  Constructor Options:
+  
+  See <Options.AreaChart>.
+
+*/
+$jit.AreaChart = new Class({
+  st: null,
+  colors: ["#416D9C", "#70A35E", "#EBB056", "#C74243", "#83548B", "#909291", "#557EAA"],
+  selected: {},
+  busy: false,
+  
+  initialize: function(opt) {
+    this.controller = this.config = 
+      $.merge(Options("Canvas", "Margin", "Label", "AreaChart"), {
+        Label: { type: 'Native' }
+      }, opt);
+    //set functions for showLabels and showAggregates
+    var showLabels = this.config.showLabels,
+        typeLabels = $.type(showLabels),
+        showAggregates = this.config.showAggregates,
+        typeAggregates = $.type(showAggregates);
+    this.config.showLabels = typeLabels == 'function'? showLabels : $.lambda(showLabels);
+    this.config.showAggregates = typeAggregates == 'function'? showAggregates : $.lambda(showAggregates);
+    
+    this.initializeViz();
+  },
+  
+  initializeViz: function() {
+    var config = this.config,
+        that = this,
+        nodeType = config.type.split(":")[0],
+        nodeLabels = {};
+
+    var delegate = new $jit.ST({
+      injectInto: config.injectInto,
+      width: config.width,
+      height: config.height,
+      orientation: "bottom",
+      levelDistance: 0,
+      siblingOffset: 0,
+      subtreeOffset: 0,
+      withLabels: config.Label.type != 'Native',
+      useCanvas: config.useCanvas,
+      Label: {
+        type: config.Label.type
+      },
+      Node: {
+        overridable: true,
+        type: 'areachart-' + nodeType,
+        align: 'left',
+        width: 1,
+        height: 1
+      },
+      Edge: {
+        type: 'none'
+      },
+      Tips: {
+        enable: config.Tips.enable,
+        type: 'Native',
+        force: true,
+        onShow: function(tip, node, contains) {
+          var elem = contains;
+          config.Tips.onShow(tip, elem, node);
+        }
+      },
+      Events: {
+        enable: true,
+        type: 'Native',
+        onClick: function(node, eventInfo, evt) {
+          if(!config.filterOnClick && !config.Events.enable) return;
+          var elem = eventInfo.getContains();
+          if(elem) config.filterOnClick && that.filter(elem.name);
+          config.Events.enable && config.Events.onClick(elem, eventInfo, evt);
+        },
+        onRightClick: function(node, eventInfo, evt) {
+          if(!config.restoreOnRightClick) return;
+          that.restore();
+        },
+        onMouseMove: function(node, eventInfo, evt) {
+          if(!config.selectOnHover) return;
+          if(node) {
+            var elem = eventInfo.getContains();
+            that.select(node.id, elem.name, elem.index);
+          } else {
+            that.select(false, false, false);
+          }
+        }
+      },
+      onCreateLabel: function(domElement, node) {
+        var labelConf = config.Label,
+            valueArray = node.getData('valueArray'),
+            acumLeft = $.reduce(valueArray, function(x, y) { return x + y[0]; }, 0),
+            acumRight = $.reduce(valueArray, function(x, y) { return x + y[1]; }, 0);
+        if(node.getData('prev')) {
+          var nlbs = {
+            wrapper: document.createElement('div'),
+            aggregate: document.createElement('div'),
+            label: document.createElement('div')
+          };
+          var wrapper = nlbs.wrapper,
+              label = nlbs.label,
+              aggregate = nlbs.aggregate,
+              wrapperStyle = wrapper.style,
+              labelStyle = label.style,
+              aggregateStyle = aggregate.style;
+          //store node labels
+          nodeLabels[node.id] = nlbs;
+          //append labels
+          wrapper.appendChild(label);
+          wrapper.appendChild(aggregate);
+          if(!config.showLabels(node.name, acumLeft, acumRight, node)) {
+            label.style.display = 'none';
+          }
+          if(!config.showAggregates(node.name, acumLeft, acumRight, node)) {
+            aggregate.style.display = 'none';
+          }
+          wrapperStyle.position = 'relative';
+          wrapperStyle.overflow = 'visible';
+          wrapperStyle.fontSize = labelConf.size + 'px';
+          wrapperStyle.fontFamily = labelConf.family;
+          wrapperStyle.color = labelConf.color;
+          wrapperStyle.textAlign = 'center';
+          aggregateStyle.position = labelStyle.position = 'absolute';
+          
+          domElement.style.width = node.getData('width') + 'px';
+          domElement.style.height = node.getData('height') + 'px';
+          label.innerHTML = node.name;
+          
+          domElement.appendChild(wrapper);
+        }
+      },
+      onPlaceLabel: function(domElement, node) {
+        if(!node.getData('prev')) return;
+        var labels = nodeLabels[node.id],
+            wrapperStyle = labels.wrapper.style,
+            labelStyle = labels.label.style,
+            aggregateStyle = labels.aggregate.style,
+            width = node.getData('width'),
+            height = node.getData('height'),
+            dimArray = node.getData('dimArray'),
+            valArray = node.getData('valueArray'),
+            acumLeft = $.reduce(valArray, function(x, y) { return x + y[0]; }, 0),
+            acumRight = $.reduce(valArray, function(x, y) { return x + y[1]; }, 0),
+            font = parseInt(wrapperStyle.fontSize, 10),
+            domStyle = domElement.style;
+        
+        if(dimArray && valArray) {
+          if(config.showLabels(node.name, acumLeft, acumRight, node)) {
+            labelStyle.display = '';
+          } else {
+            labelStyle.display = 'none';
+          }
+          var aggValue = config.showAggregates(node.name, acumLeft, acumRight, node);
+          if(aggValue !== false) {
+            aggregateStyle.display = '';
+          } else {
+            aggregateStyle.display = 'none';
+          }
+          wrapperStyle.width = aggregateStyle.width = labelStyle.width = domElement.style.width = width + 'px';
+          aggregateStyle.left = labelStyle.left = -width/2 + 'px';
+          for(var i=0, l=valArray.length, acum=0, leftAcum=0; i<l; i++) {
+            if(dimArray[i][0] > 0) {
+              acum+= valArray[i][0];
+              leftAcum+= dimArray[i][0];
+            }
+          }
+          aggregateStyle.top = (-font - config.labelOffset) + 'px';
+          labelStyle.top = (config.labelOffset + leftAcum) + 'px';
+          domElement.style.top = parseInt(domElement.style.top, 10) - leftAcum + 'px';
+          domElement.style.height = wrapperStyle.height = leftAcum + 'px';
+          labels.aggregate.innerHTML = aggValue !== true? aggValue : acum;
+        }
+      }
+    });
+    
+    var size = delegate.canvas.getSize(),
+        margin = config.Margin;
+    delegate.config.offsetY = -size.height/2 + margin.bottom 
+      + (config.showLabels && (config.labelOffset + config.Label.size));
+    delegate.config.offsetX = (margin.right - margin.left)/2;
+    this.delegate = delegate;
+    this.canvas = this.delegate.canvas;
+  },
+  
+ /*
+  Method: loadJSON
+  Loads JSON data into the visualization. 
+  
+  Parameters:
+  
+  json - The JSON data format. This format is described in <http://blog.thejit.org/2010/04/24/new-javascript-infovis-toolkit-visualizations/#json-data-format>.
+  
+  Example:
+  (start code js)
+  var areaChart = new $jit.AreaChart(options);
+  areaChart.loadJSON(json);
+  (end code)
+ */  
+  loadJSON: function(json) {
+    var prefix = $.time(), 
+        ch = [], 
+        delegate = this.delegate,
+        name = $.splat(json.label), 
+        color = $.splat(json.color || this.colors),
+        config = this.config,
+        gradient = !!config.type.split(":")[1],
+        animate = config.animate;
+    
+    for(var i=0, values=json.values, l=values.length; i<l-1; i++) {
+      var val = values[i], prev = values[i-1], next = values[i+1];
+      var valLeft = $.splat(values[i].values), valRight = $.splat(values[i+1].values);
+      var valArray = $.zip(valLeft, valRight);
+      var acumLeft = 0, acumRight = 0;
+      ch.push({
+        'id': prefix + val.label,
+        'name': val.label,
+        'data': {
+          'value': valArray,
+          '$valueArray': valArray,
+          '$colorArray': color,
+          '$stringArray': name,
+          '$next': next.label,
+          '$prev': prev? prev.label:false,
+          '$config': config,
+          '$gradient': gradient
+        },
+        'children': []
+      });
+    }
+    var root = {
+      'id': prefix + '$root',
+      'name': '',
+      'data': {
+        '$type': 'none',
+        '$width': 1,
+        '$height': 1
+      },
+      'children': ch
+    };
+    delegate.loadJSON(root);
+    
+    this.normalizeDims();
+    delegate.compute();
+    delegate.select(delegate.root);
+    if(animate) {
+      delegate.fx.animate({
+        modes: ['node-property:height:dimArray'],
+        duration:1500
+      });
+    }
+  },
+  
+ /*
+  Method: updateJSON
+  Use this method when updating values for the current JSON data. If the items specified by the JSON data already exist in the graph then their values will be updated.
+  
+  Parameters:
+  
+  json - (object) JSON data to be updated. The JSON format corresponds to the one described in <AreaChart.loadJSON>.
+  onComplete - (object) A callback object to be called when the animation transition when updating the data end.
+  
+  Example:
+  
+  (start code js)
+  areaChart.updateJSON(json, {
+    onComplete: function() {
+      alert('update complete!');
+    }
+  });
+  (end code)
+ */  
+  updateJSON: function(json, onComplete) {
+    if(this.busy) return;
+    this.busy = true;
+    
+    var delegate = this.delegate,
+        graph = delegate.graph,
+        labels = json.label && $.splat(json.label),
+        values = json.values,
+        animate = this.config.animate,
+        that = this,
+        hashValues = {};
+
+    //convert the whole thing into a hash
+    for (var i = 0, l = values.length; i < l; i++) {
+      hashValues[values[i].label] = values[i];
+    }
+  
+    graph.eachNode(function(n) {
+      var v = hashValues[n.name],
+          stringArray = n.getData('stringArray'),
+          valArray = n.getData('valueArray'),
+          next = n.getData('next');
+      
+      if (v) {
+        v.values = $.splat(v.values);
+        $.each(valArray, function(a, i) {
+          a[0] = v.values[i];
+          if(labels) stringArray[i] = labels[i];
+        });
+        n.setData('valueArray', valArray);
+      }
+     
+      if(next) {
+        v = hashValues[next];
+        if(v) {
+          $.each(valArray, function(a, i) {
+            a[1] = v.values[i];
+          });
+        }
+      }
+    });
+    this.normalizeDims();
+    delegate.compute();
+    delegate.select(delegate.root);
+    if(animate) {
+      delegate.fx.animate({
+        modes: ['node-property:height:dimArray'],
+        duration:1500,
+        onComplete: function() {
+          that.busy = false;
+          onComplete && onComplete.onComplete();
+        }
+      });
+    }
+  },
+  
+/*
+  Method: filter
+  Filter selected stacks, collapsing all other stacks. You can filter multiple stacks at the same time.
+  
+  Parameters:
+  
+  filters - (array) An array of strings with the name of the stacks to be filtered.
+  callback - (object) An object with an *onComplete* callback method. 
+  
+  Example:
+  
+  (start code js)
+  areaChart.filter(['label A', 'label C'], {
+      onComplete: function() {
+          console.log('done!');
+      }
+  });
+  (end code)
+  
+  See also:
+  
+  <AreaChart.restore>.
+ */  
+  filter: function(filters, callback) {
+    if(this.busy) return;
+    this.busy = true;
+    if(this.config.Tips.enable) this.delegate.tips.hide();
+    this.select(false, false, false);
+    var args = $.splat(filters);
+    var rt = this.delegate.graph.getNode(this.delegate.root);
+    var that = this;
+    this.normalizeDims();
+    rt.eachAdjacency(function(adj) {
+      var n = adj.nodeTo, 
+          dimArray = n.getData('dimArray', 'end'),
+          stringArray = n.getData('stringArray');
+      n.setData('dimArray', $.map(dimArray, function(d, i) {
+        return ($.indexOf(args, stringArray[i]) > -1)? d:[0, 0];
+      }), 'end');
+    });
+    this.delegate.fx.animate({
+      modes: ['node-property:dimArray'],
+      duration:1500,
+      onComplete: function() {
+        that.busy = false;
+        callback && callback.onComplete();
+      }
+    });
+  },
+  
+  /*
+  Method: restore
+  Sets all stacks that could have been filtered visible.
+  
+  Example:
+  
+  (start code js)
+  areaChart.restore();
+  (end code)
+  
+  See also:
+  
+  <AreaChart.filter>.
+ */  
+  restore: function(callback) {
+    if(this.busy) return;
+    this.busy = true;
+    if(this.config.Tips.enable) this.delegate.tips.hide();
+    this.select(false, false, false);
+    this.normalizeDims();
+    var that = this;
+    this.delegate.fx.animate({
+      modes: ['node-property:height:dimArray'],
+      duration:1500,
+      onComplete: function() {
+        that.busy = false;
+        callback && callback.onComplete();
+      }
+    });
+  },
+  //adds the little brown bar when hovering the node
+  select: function(id, name, index) {
+    if(!this.config.selectOnHover) return;
+    var s = this.selected;
+    if(s.id != id || s.name != name 
+        || s.index != index) {
+      s.id = id;
+      s.name = name;
+      s.index = index;
+      this.delegate.graph.eachNode(function(n) {
+        n.setData('border', false);
+      });
+      if(id) {
+        var n = this.delegate.graph.getNode(id);
+        n.setData('border', s);
+        var link = index === 0? 'prev':'next';
+        link = n.getData(link);
+        if(link) {
+          n = this.delegate.graph.getByName(link);
+          if(n) {
+            n.setData('border', {
+              name: name,
+              index: 1-index
+            });
+          }
+        }
+      }
+      this.delegate.plot();
+    }
+  },
+  
+  /*
+    Method: getLegend
+   
+    Returns an object containing as keys the legend names and as values hex strings with color values.
+    
+    Example:
+    
+    (start code js)
+    var legend = areaChart.getLegend();
+    (end code)
+ */  
+  getLegend: function() {
+    var legend = {};
+    var n;
+    this.delegate.graph.getNode(this.delegate.root).eachAdjacency(function(adj) {
+      n = adj.nodeTo;
+    });
+    var colors = n.getData('colorArray'),
+        len = colors.length;
+    $.each(n.getData('stringArray'), function(s, i) {
+      legend[s] = colors[i % len];
+    });
+    return legend;
+  },
+  
+  /*
+    Method: getMaxValue
+   
+    Returns the maximum accumulated value for the stacks. This method is used for normalizing the graph heights according to the canvas height.
+    
+    Example:
+    
+    (start code js)
+    var ans = areaChart.getMaxValue();
+    (end code)
+    
+    In some cases it could be useful to override this method to normalize heights for a group of AreaCharts, like when doing small multiples.
+    
+    Example:
+    
+    (start code js)
+    //will return 100 for all AreaChart instances,
+    //displaying all of them with the same scale
+    $jit.AreaChart.implement({
+      'getMaxValue': function() {
+        return 100;
+      }
+    });
+    (end code)
+    
+*/  
+  getMaxValue: function() {
+    var maxValue = 0;
+    this.delegate.graph.eachNode(function(n) {
+      var valArray = n.getData('valueArray'),
+          acumLeft = 0, acumRight = 0;
+      $.each(valArray, function(v) { 
+        acumLeft += +v[0];
+        acumRight += +v[1];
+      });
+      var acum = acumRight>acumLeft? acumRight:acumLeft;
+      maxValue = maxValue>acum? maxValue:acum;
+    });
+    return maxValue;
+  },
+  
+  normalizeDims: function() {
+    //number of elements
+    var root = this.delegate.graph.getNode(this.delegate.root), l=0;
+    root.eachAdjacency(function() {
+      l++;
+    });
+    var maxValue = this.getMaxValue() || 1,
+        size = this.delegate.canvas.getSize(),
+        config = this.config,
+        margin = config.Margin,
+        labelOffset = config.labelOffset + config.Label.size,
+        fixedDim = (size.width - (margin.left + margin.right)) / l,
+        animate = config.animate,
+        height = size.height - (margin.top + margin.bottom) - (config.showAggregates && labelOffset) 
+          - (config.showLabels && labelOffset);
+    this.delegate.graph.eachNode(function(n) {
+      var acumLeft = 0, acumRight = 0, animateValue = [];
+      $.each(n.getData('valueArray'), function(v) {
+        acumLeft += +v[0];
+        acumRight += +v[1];
+        animateValue.push([0, 0]);
+      });
+      var acum = acumRight>acumLeft? acumRight:acumLeft;
+      n.setData('width', fixedDim);
+      if(animate) {
+        n.setData('height', acum * height / maxValue, 'end');
+        n.setData('dimArray', $.map(n.getData('valueArray'), function(n) { 
+          return [n[0] * height / maxValue, n[1] * height / maxValue]; 
+        }), 'end');
+        var dimArray = n.getData('dimArray');
+        if(!dimArray) {
+          n.setData('dimArray', animateValue);
+        }
+      } else {
+        n.setData('height', acum * height / maxValue);
+        n.setData('dimArray', $.map(n.getData('valueArray'), function(n) { 
+          return [n[0] * height / maxValue, n[1] * height / maxValue]; 
+        }));
+      }
+    });
+  }
+});
+
+
+/*
+ * File: Options.BarChart.js
+ *
+*/
+
+/*
+  Object: Options.BarChart
+  
+  <BarChart> options. 
+  Other options included in the BarChart are <Options.Canvas>, <Options.Label>, <Options.Margin>, <Options.Tips> and <Options.Events>.
+  
+  Syntax:
+  
+  (start code js)
+
+  Options.BarChart = {
+    animate: true,
+    labelOffset: 3,
+    barsOffset: 0,
+    type: 'stacked',
+    hoveredColor: '#9fd4ff',
+    orientation: 'horizontal',
+    showAggregates: true,
+    showLabels: true
+  };
+  
+  (end code)
+  
+  Example:
+  
+  (start code js)
+
+  var barChart = new $jit.BarChart({
+    animate: true,
+    barsOffset: 10,
+    type: 'stacked:gradient'
+  });
+  
+  (end code)
+
+  Parameters:
+  
+  animate - (boolean) Default's *true*. Whether to add animated transitions when filtering/restoring stacks.
+  offset - (number) Default's *25*. Adds margin between the visualization and the canvas.
+  labelOffset - (number) Default's *3*. Adds margin between the label and the default place where it should be drawn.
+  barsOffset - (number) Default's *0*. Separation between bars.
+  type - (string) Default's *'stacked'*. Stack or grouped styles. Posible values are 'stacked', 'grouped', 'stacked:gradient', 'grouped:gradient' to add gradients.
+  hoveredColor - (boolean|string) Default's *'#9fd4ff'*. Sets the selected color for a hovered bar stack.
+  orientation - (string) Default's 'horizontal'. Sets the direction of the bars. Possible options are 'vertical' or 'horizontal'.
+  showAggregates - (boolean, function) Default's *true*. Display the sum the values of each bar. Can also be a function that returns *true* or *false* to display the value of the bar or not. That same function can also return a string with the formatted data to be added.
+  showLabels - (boolean, function) Default's *true*. Display the name of the slots. Can also be a function that returns *true* or *false* for each bar to decide whether to show the label or not.
+  
+*/
+
+Options.BarChart = {
+  $extend: true,
+  
+  animate: true,
+  type: 'stacked', //stacked, grouped, : gradient
+  labelOffset: 3, //label offset
+  barsOffset: 0, //distance between bars
+  hoveredColor: '#9fd4ff',
+  orientation: 'horizontal',
+  showAggregates: true,
+  showLabels: true,
+  Tips: {
+    enable: false,
+    onShow: $.empty,
+    onHide: $.empty
+  },
+  Events: {
+    enable: false,
+    onClick: $.empty
+  }
+};
+
+/*
+ * File: BarChart.js
+ *
+*/
+
+$jit.ST.Plot.NodeTypes.implement({
+  'barchart-stacked' : {
+    'render' : function(node, canvas) {
+      var pos = node.pos.getc(true), 
+          width = node.getData('width'),
+          height = node.getData('height'),
+          algnPos = this.getAlignedPos(pos, width, height),
+          x = algnPos.x, y = algnPos.y,
+          dimArray = node.getData('dimArray'),
+          valueArray = node.getData('valueArray'),
+          colorArray = node.getData('colorArray'),
+          colorLength = colorArray.length,
+          stringArray = node.getData('stringArray');
+
+      var ctx = canvas.getCtx(),
+          opt = {},
+          border = node.getData('border'),
+          gradient = node.getData('gradient'),
+          config = node.getData('config'),
+          horz = config.orientation == 'horizontal',
+          aggregates = config.showAggregates,
+          showLabels = config.showLabels,
+          label = config.Label;
+      
+      if (colorArray && dimArray && stringArray) {
+        for (var i=0, l=dimArray.length, acum=0, valAcum=0; i<l; i++) {
+          ctx.fillStyle = ctx.strokeStyle = colorArray[i % colorLength];
+          if(gradient) {
+            var linear;
+            if(horz) {
+              linear = ctx.createLinearGradient(x + acum + dimArray[i]/2, y, 
+                  x + acum + dimArray[i]/2, y + height);
+            } else {
+              linear = ctx.createLinearGradient(x, y - acum - dimArray[i]/2, 
+                  x + width, y - acum- dimArray[i]/2);
+            }
+            var color = $.rgbToHex($.map($.hexToRgb(colorArray[i % colorLength].slice(1)), 
+                function(v) { return (v * 0.5) >> 0; }));
+            linear.addColorStop(0, color);
+            linear.addColorStop(0.5, colorArray[i % colorLength]);
+            linear.addColorStop(1, color);
+            ctx.fillStyle = linear;
+          }
+          if(horz) {
+            ctx.fillRect(x + acum, y, dimArray[i], height);
+          } else {
+            ctx.fillRect(x, y - acum - dimArray[i], width, dimArray[i]);
+          }
+          if(border && border.name == stringArray[i]) {
+            opt.acum = acum;
+            opt.dimValue = dimArray[i];
+          }
+          acum += (dimArray[i] || 0);
+          valAcum += (valueArray[i] || 0);
+        }
+        if(border) {
+          ctx.save();
+          ctx.lineWidth = 2;
+          ctx.strokeStyle = border.color;
+          if(horz) {
+            ctx.strokeRect(x + opt.acum + 1, y + 1, opt.dimValue -2, height - 2);
+          } else {
+            ctx.strokeRect(x + 1, y - opt.acum - opt.dimValue + 1, width -2, opt.dimValue -2);
+          }
+          ctx.restore();
+        }
+        if(label.type == 'Native') {
+          ctx.save();
+          ctx.fillStyle = ctx.strokeStyle = label.color;
+          ctx.font = label.style + ' ' + label.size + 'px ' + label.family;
+          ctx.textBaseline = 'middle';
+          var aggValue = aggregates(node.name, valAcum, node);
+          if(aggValue !== false) {
+            aggValue = aggValue !== true? aggValue : valAcum;
+            if(horz) {
+              ctx.textAlign = 'right';
+              ctx.fillText(aggValue, x + acum - config.labelOffset, y + height/2);
+            } else {
+              ctx.textAlign = 'center';
+              ctx.fillText(aggValue, x + width/2, y - height - label.size/2 - config.labelOffset);
+            }
+          }
+          if(showLabels(node.name, valAcum, node)) {
+            if(horz) {
+              ctx.textAlign = 'center';
+              ctx.translate(x - config.labelOffset - label.size/2, y + height/2);
+              ctx.rotate(Math.PI / 2);
+              ctx.fillText(node.name, 0, 0);
+            } else {
+              ctx.textAlign = 'center';
+              ctx.fillText(node.name, x + width/2, y + label.size/2 + config.labelOffset);
+            }
+          }
+          ctx.restore();
+        }
+      }
+    },
+    'contains': function(node, mpos) {
+      var pos = node.pos.getc(true), 
+          width = node.getData('width'),
+          height = node.getData('height'),
+          algnPos = this.getAlignedPos(pos, width, height),
+          x = algnPos.x, y = algnPos.y,
+          dimArray = node.getData('dimArray'),
+          config = node.getData('config'),
+          rx = mpos.x - x,
+          horz = config.orientation == 'horizontal';
+      //bounding box check
+      if(horz) {
+        if(mpos.x < x || mpos.x > x + width
+            || mpos.y > y + height || mpos.y < y) {
+            return false;
+          }
+      } else {
+        if(mpos.x < x || mpos.x > x + width
+            || mpos.y > y || mpos.y < y - height) {
+            return false;
+          }
+      }
+      //deep check
+      for(var i=0, l=dimArray.length, acum=(horz? x:y); i<l; i++) {
+        var dimi = dimArray[i];
+        if(horz) {
+          acum += dimi;
+          var intersec = acum;
+          if(mpos.x <= intersec) {
+            return {
+              'name': node.getData('stringArray')[i],
+              'color': node.getData('colorArray')[i],
+              'value': node.getData('valueArray')[i],
+              'label': node.name
+            };
+          }
+        } else {
+          acum -= dimi;
+          var intersec = acum;
+          if(mpos.y >= intersec) {
+            return {
+              'name': node.getData('stringArray')[i],
+              'color': node.getData('colorArray')[i],
+              'value': node.getData('valueArray')[i],
+              'label': node.name
+            };
+          }
+        }
+      }
+      return false;
+    }
+  },
+  'barchart-grouped' : {
+    'render' : function(node, canvas) {
+      var pos = node.pos.getc(true), 
+          width = node.getData('width'),
+          height = node.getData('height'),
+          algnPos = this.getAlignedPos(pos, width, height),
+          x = algnPos.x, y = algnPos.y,
+          dimArray = node.getData('dimArray'),
+          valueArray = node.getData('valueArray'),
+          valueLength = valueArray.length,
+          colorArray = node.getData('colorArray'),
+          colorLength = colorArray.length,
+          stringArray = node.getData('stringArray'); 
+
+      var ctx = canvas.getCtx(),
+          opt = {},
+          border = node.getData('border'),
+          gradient = node.getData('gradient'),
+          config = node.getData('config'),
+          horz = config.orientation == 'horizontal',
+          aggregates = config.showAggregates,
+          showLabels = config.showLabels,
+          label = config.Label,
+          fixedDim = (horz? height : width) / valueLength;
+      
+      if (colorArray && dimArray && stringArray) {
+        for (var i=0, l=valueLength, acum=0, valAcum=0; i<l; i++) {
+          ctx.fillStyle = ctx.strokeStyle = colorArray[i % colorLength];
+          if(gradient) {
+            var linear;
+            if(horz) {
+              linear = ctx.createLinearGradient(x + dimArray[i]/2, y + fixedDim * i, 
+                  x + dimArray[i]/2, y + fixedDim * (i + 1));
+            } else {
+              linear = ctx.createLinearGradient(x + fixedDim * i, y - dimArray[i]/2, 
+                  x + fixedDim * (i + 1), y - dimArray[i]/2);
+            }
+            var color = $.rgbToHex($.map($.hexToRgb(colorArray[i % colorLength].slice(1)), 
+                function(v) { return (v * 0.5) >> 0; }));
+            linear.addColorStop(0, color);
+            linear.addColorStop(0.5, colorArray[i % colorLength]);
+            linear.addColorStop(1, color);
+            ctx.fillStyle = linear;
+          }
+          if(horz) {
+            ctx.fillRect(x, y + fixedDim * i, dimArray[i], fixedDim);
+          } else {
+            ctx.fillRect(x + fixedDim * i, y - dimArray[i], fixedDim, dimArray[i]);
+          }
+          if(border && border.name == stringArray[i]) {
+            opt.acum = fixedDim * i;
+            opt.dimValue = dimArray[i];
+          }
+          acum += (dimArray[i] || 0);
+          valAcum += (valueArray[i] || 0);
+        }
+        if(border) {
+          ctx.save();
+          ctx.lineWidth = 2;
+          ctx.strokeStyle = border.color;
+          if(horz) {
+            ctx.strokeRect(x + 1, y + opt.acum + 1, opt.dimValue -2, fixedDim - 2);
+          } else {
+            ctx.strokeRect(x + opt.acum + 1, y - opt.dimValue + 1, fixedDim -2, opt.dimValue -2);
+          }
+          ctx.restore();
+        }
+        if(label.type == 'Native') {
+          ctx.save();
+          ctx.fillStyle = ctx.strokeStyle = label.color;
+          ctx.font = label.style + ' ' + label.size + 'px ' + label.family;
+          ctx.textBaseline = 'middle';
+          var aggValue = aggregates(node.name, valAcum, node);
+          if(aggValue !== false) {
+            aggValue = aggValue !== true? aggValue : valAcum;
+            if(horz) {
+              ctx.textAlign = 'right';
+              ctx.fillText(aggValue, x + Math.max.apply(null, dimArray) - config.labelOffset, y + height/2);
+            } else {
+              ctx.textAlign = 'center';
+              ctx.fillText(aggValue, x + width/2, y - Math.max.apply(null, dimArray) - label.size/2 - config.labelOffset);
+            }
+          }
+          if(showLabels(node.name, valAcum, node)) {
+            if(horz) {
+              ctx.textAlign = 'center';
+              ctx.translate(x - config.labelOffset - label.size/2, y + height/2);
+              ctx.rotate(Math.PI / 2);
+              ctx.fillText(node.name, 0, 0);
+            } else {
+              ctx.textAlign = 'center';
+              ctx.fillText(node.name, x + width/2, y + label.size/2 + config.labelOffset);
+            }
+          }
+          ctx.restore();
+        }
+      }
+    },
+    'contains': function(node, mpos) {
+      var pos = node.pos.getc(true), 
+          width = node.getData('width'),
+          height = node.getData('height'),
+          algnPos = this.getAlignedPos(pos, width, height),
+          x = algnPos.x, y = algnPos.y,
+          dimArray = node.getData('dimArray'),
+          len = dimArray.length,
+          config = node.getData('config'),
+          rx = mpos.x - x,
+          horz = config.orientation == 'horizontal',
+          fixedDim = (horz? height : width) / len;
+      //bounding box check
+      if(horz) {
+        if(mpos.x < x || mpos.x > x + width
+            || mpos.y > y + height || mpos.y < y) {
+            return false;
+          }
+      } else {
+        if(mpos.x < x || mpos.x > x + width
+            || mpos.y > y || mpos.y < y - height) {
+            return false;
+          }
+      }
+      //deep check
+      for(var i=0, l=dimArray.length; i<l; i++) {
+        var dimi = dimArray[i];
+        if(horz) {
+          var limit = y + fixedDim * i;
+          if(mpos.x <= x+ dimi && mpos.y >= limit && mpos.y <= limit + fixedDim) {
+            return {
+              'name': node.getData('stringArray')[i],
+              'color': node.getData('colorArray')[i],
+              'value': node.getData('valueArray')[i],
+              'label': node.name
+            };
+          }
+        } else {
+          var limit = x + fixedDim * i;
+          if(mpos.x >= limit && mpos.x <= limit + fixedDim && mpos.y >= y - dimi) {
+            return {
+              'name': node.getData('stringArray')[i],
+              'color': node.getData('colorArray')[i],
+              'value': node.getData('valueArray')[i],
+              'label': node.name
+            };
+          }
+        }
+      }
+      return false;
+    }
+  }
+});
+
+/*
+  Class: BarChart
+  
+  A visualization that displays stacked bar charts.
+  
+  Constructor Options:
+  
+  See <Options.BarChart>.
+
+*/
+$jit.BarChart = new Class({
+  st: null,
+  colors: ["#416D9C", "#70A35E", "#EBB056", "#C74243", "#83548B", "#909291", "#557EAA"],
+  selected: {},
+  busy: false,
+  
+  initialize: function(opt) {
+    this.controller = this.config = 
+      $.merge(Options("Canvas", "Margin", "Label", "BarChart"), {
+        Label: { type: 'Native' }
+      }, opt);
+    //set functions for showLabels and showAggregates
+    var showLabels = this.config.showLabels,
+        typeLabels = $.type(showLabels),
+        showAggregates = this.config.showAggregates,
+        typeAggregates = $.type(showAggregates);
+    this.config.showLabels = typeLabels == 'function'? showLabels : $.lambda(showLabels);
+    this.config.showAggregates = typeAggregates == 'function'? showAggregates : $.lambda(showAggregates);
+    
+    this.initializeViz();
+  },
+  
+  initializeViz: function() {
+    var config = this.config, that = this;
+    var nodeType = config.type.split(":")[0],
+        horz = config.orientation == 'horizontal',
+        nodeLabels = {};
+    
+    var delegate = new $jit.ST({
+      injectInto: config.injectInto,
+      width: config.width,
+      height: config.height,
+      orientation: horz? 'left' : 'bottom',
+      levelDistance: 0,
+      siblingOffset: config.barsOffset,
+      subtreeOffset: 0,
+      withLabels: config.Label.type != 'Native',      
+      useCanvas: config.useCanvas,
+      Label: {
+        type: config.Label.type
+      },
+      Node: {
+        overridable: true,
+        type: 'barchart-' + nodeType,
+        align: 'left',
+        width: 1,
+        height: 1
+      },
+      Edge: {
+        type: 'none'
+      },
+      Tips: {
+        enable: config.Tips.enable,
+        type: 'Native',
+        force: true,
+        onShow: function(tip, node, contains) {
+          var elem = contains;
+          config.Tips.onShow(tip, elem, node);
+        }
+      },
+      Events: {
+        enable: true,
+        type: 'Native',
+        onClick: function(node, eventInfo, evt) {
+          if(!config.Events.enable) return;
+          var elem = eventInfo.getContains();
+          config.Events.onClick(elem, eventInfo, evt);
+        },
+        onMouseMove: function(node, eventInfo, evt) {
+          if(!config.hoveredColor) return;
+          if(node) {
+            var elem = eventInfo.getContains();
+            that.select(node.id, elem.name, elem.index);
+          } else {
+            that.select(false, false, false);
+          }
+        }
+      },
+      onCreateLabel: function(domElement, node) {
+        var labelConf = config.Label,
+            valueArray = node.getData('valueArray'),
+            acum = $.reduce(valueArray, function(x, y) { return x + y; }, 0);
+        var nlbs = {
+          wrapper: document.createElement('div'),
+          aggregate: document.createElement('div'),
+          label: document.createElement('div')
+        };
+        var wrapper = nlbs.wrapper,
+            label = nlbs.label,
+            aggregate = nlbs.aggregate,
+            wrapperStyle = wrapper.style,
+            labelStyle = label.style,
+            aggregateStyle = aggregate.style;
+        //store node labels
+        nodeLabels[node.id] = nlbs;
+        //append labels
+        wrapper.appendChild(label);
+        wrapper.appendChild(aggregate);
+        if(!config.showLabels(node.name, acum, node)) {
+          labelStyle.display = 'none';
+        }
+        if(!config.showAggregates(node.name, acum, node)) {
+          aggregateStyle.display = 'none';
+        }
+        wrapperStyle.position = 'relative';
+        wrapperStyle.overflow = 'visible';
+        wrapperStyle.fontSize = labelConf.size + 'px';
+        wrapperStyle.fontFamily = labelConf.family;
+        wrapperStyle.color = labelConf.color;
+        wrapperStyle.textAlign = 'center';
+        aggregateStyle.position = labelStyle.position = 'absolute';
+        
+        domElement.style.width = node.getData('width') + 'px';
+        domElement.style.height = node.getData('height') + 'px';
+        aggregateStyle.left = labelStyle.left =  '0px';
+
+        label.innerHTML = node.name;
+        
+        domElement.appendChild(wrapper);
+      },
+      onPlaceLabel: function(domElement, node) {
+        if(!nodeLabels[node.id]) return;
+        var labels = nodeLabels[node.id],
+            wrapperStyle = labels.wrapper.style,
+            labelStyle = labels.label.style,
+            aggregateStyle = labels.aggregate.style,
+            grouped = config.type.split(':')[0] == 'grouped',
+            horz = config.orientation == 'horizontal',
+            dimArray = node.getData('dimArray'),
+            valArray = node.getData('valueArray'),
+            width = (grouped && horz)? Math.max.apply(null, dimArray) : node.getData('width'),
+            height = (grouped && !horz)? Math.max.apply(null, dimArray) : node.getData('height'),
+            font = parseInt(wrapperStyle.fontSize, 10),
+            domStyle = domElement.style;
+            
+        
+        if(dimArray && valArray) {
+          wrapperStyle.width = aggregateStyle.width = labelStyle.width = domElement.style.width = width + 'px';
+          for(var i=0, l=valArray.length, acum=0; i<l; i++) {
+            if(dimArray[i] > 0) {
+              acum+= valArray[i];
+            }
+          }
+          if(config.showLabels(node.name, acum, node)) {
+            labelStyle.display = '';
+          } else {
+            labelStyle.display = 'none';
+          }
+          var aggValue = config.showAggregates(node.name, acum, node);
+          if(aggValue !== false) {
+            aggregateStyle.display = '';
+          } else {
+            aggregateStyle.display = 'none';
+          }
+          if(config.orientation == 'horizontal') {
+            aggregateStyle.textAlign = 'right';
+            labelStyle.textAlign = 'left';
+            labelStyle.textIndex = aggregateStyle.textIndent = config.labelOffset + 'px';
+            aggregateStyle.top = labelStyle.top = (height-font)/2 + 'px';
+            domElement.style.height = wrapperStyle.height = height + 'px';
+          } else {
+            aggregateStyle.top = (-font - config.labelOffset) + 'px';
+            labelStyle.top = (config.labelOffset + height) + 'px';
+            domElement.style.top = parseInt(domElement.style.top, 10) - height + 'px';
+            domElement.style.height = wrapperStyle.height = height + 'px';
+          }
+          labels.aggregate.innerHTML = aggValue !== true? aggValue : acum;
+        }
+      }
+    });
+    
+    var size = delegate.canvas.getSize(),
+        margin = config.Margin;
+    if(horz) {
+      delegate.config.offsetX = size.width/2 - margin.left
+        - (config.showLabels && (config.labelOffset + config.Label.size));    
+      delegate.config.offsetY = (margin.bottom - margin.top)/2;
+    } else {
+      delegate.config.offsetY = -size.height/2 + margin.bottom 
+        + (config.showLabels && (config.labelOffset + config.Label.size));
+      delegate.config.offsetX = (margin.right - margin.left)/2;
+    }
+    this.delegate = delegate;
+    this.canvas = this.delegate.canvas;
+  },
+  
+  /*
+    Method: loadJSON
+   
+    Loads JSON data into the visualization. 
+    
+    Parameters:
+    
+    json - The JSON data format. This format is described in <http://blog.thejit.org/2010/04/24/new-javascript-infovis-toolkit-visualizations/#json-data-format>.
+    
+    Example:
+    (start code js)
+    var barChart = new $jit.BarChart(options);
+    barChart.loadJSON(json);
+    (end code)
+ */  
+  loadJSON: function(json) {
+    if(this.busy) return;
+    this.busy = true;
+    
+    var prefix = $.time(), 
+        ch = [], 
+        delegate = this.delegate,
+        name = $.splat(json.label), 
+        color = $.splat(json.color || this.colors),
+        config = this.config,
+        gradient = !!config.type.split(":")[1],
+        animate = config.animate,
+        horz = config.orientation == 'horizontal',
+        that = this;
+    
+    for(var i=0, values=json.values, l=values.length; i<l; i++) {
+      var val = values[i]
+      var valArray = $.splat(values[i].values);
+      var acum = 0;
+      ch.push({
+        'id': prefix + val.label,
+        'name': val.label,
+        'data': {
+          'value': valArray,
+          '$valueArray': valArray,
+          '$colorArray': color,
+          '$stringArray': name,
+          '$gradient': gradient,
+          '$config': config
+        },
+        'children': []
+      });
+    }
+    var root = {
+      'id': prefix + '$root',
+      'name': '',
+      'data': {
+        '$type': 'none',
+        '$width': 1,
+        '$height': 1
+      },
+      'children': ch
+    };
+    delegate.loadJSON(root);
+    
+    this.normalizeDims();
+    delegate.compute();
+    delegate.select(delegate.root);
+    if(animate) {
+      if(horz) {
+        delegate.fx.animate({
+          modes: ['node-property:width:dimArray'],
+          duration:1500,
+          onComplete: function() {
+            that.busy = false;
+          }
+        });
+      } else {
+        delegate.fx.animate({
+          modes: ['node-property:height:dimArray'],
+          duration:1500,
+          onComplete: function() {
+            that.busy = false;
+          }
+        });
+      }
+    } else {
+      this.busy = false;
+    }
+  },
+  
+  /*
+    Method: updateJSON
+   
+    Use this method when updating values for the current JSON data. If the items specified by the JSON data already exist in the graph then their values will be updated.
+    
+    Parameters:
+    
+    json - (object) JSON data to be updated. The JSON format corresponds to the one described in <BarChart.loadJSON>.
+    onComplete - (object) A callback object to be called when the animation transition when updating the data end.
+    
+    Example:
+    
+    (start code js)
+    barChart.updateJSON(json, {
+      onComplete: function() {
+        alert('update complete!');
+      }
+    });
+    (end code)
+ */  
+  updateJSON: function(json, onComplete) {
+    if(this.busy) return;
+    this.busy = true;
+    this.select(false, false, false);
+    var delegate = this.delegate;
+    var graph = delegate.graph;
+    var values = json.values;
+    var animate = this.config.animate;
+    var that = this;
+    var horz = this.config.orientation == 'horizontal';
+    $.each(values, function(v) {
+      var n = graph.getByName(v.label);
+      if(n) {
+        n.setData('valueArray', $.splat(v.values));
+        if(json.label) {
+          n.setData('stringArray', $.splat(json.label));
+        }
+      }
+    });
+    this.normalizeDims();
+    delegate.compute();
+    delegate.select(delegate.root);
+    if(animate) {
+      if(horz) {
+        delegate.fx.animate({
+          modes: ['node-property:width:dimArray'],
+          duration:1500,
+          onComplete: function() {
+            that.busy = false;
+            onComplete && onComplete.onComplete();
+          }
+        });
+      } else {
+        delegate.fx.animate({
+          modes: ['node-property:height:dimArray'],
+          duration:1500,
+          onComplete: function() {
+            that.busy = false;
+            onComplete && onComplete.onComplete();
+          }
+        });
+      }
+    }
+  },
+  
+  //adds the little brown bar when hovering the node
+  select: function(id, name) {
+    if(!this.config.hoveredColor) return;
+    var s = this.selected;
+    if(s.id != id || s.name != name) {
+      s.id = id;
+      s.name = name;
+      s.color = this.config.hoveredColor;
+      this.delegate.graph.eachNode(function(n) {
+        if(id == n.id) {
+          n.setData('border', s);
+        } else {
+          n.setData('border', false);
+        }
+      });
+      this.delegate.plot();
+    }
+  },
+  
+  /*
+    Method: getLegend
+   
+    Returns an object containing as keys the legend names and as values hex strings with color values.
+    
+    Example:
+    
+    (start code js)
+    var legend = barChart.getLegend();
+    (end code)
+  */  
+  getLegend: function() {
+    var legend = {};
+    var n;
+    this.delegate.graph.getNode(this.delegate.root).eachAdjacency(function(adj) {
+      n = adj.nodeTo;
+    });
+    var colors = n.getData('colorArray'),
+        len = colors.length;
+    $.each(n.getData('stringArray'), function(s, i) {
+      legend[s] = colors[i % len];
+    });
+    return legend;
+  },
+  
+  /*
+    Method: getMaxValue
+   
+    Returns the maximum accumulated value for the stacks. This method is used for normalizing the graph heights according to the canvas height.
+    
+    Example:
+    
+    (start code js)
+    var ans = barChart.getMaxValue();
+    (end code)
+    
+    In some cases it could be useful to override this method to normalize heights for a group of BarCharts, like when doing small multiples.
+    
+    Example:
+    
+    (start code js)
+    //will return 100 for all BarChart instances,
+    //displaying all of them with the same scale
+    $jit.BarChart.implement({
+      'getMaxValue': function() {
+        return 100;
+      }
+    });
+    (end code)
+    
+  */  
+  getMaxValue: function() {
+    var maxValue = 0, stacked = this.config.type.split(':')[0] == 'stacked';
+    this.delegate.graph.eachNode(function(n) {
+      var valArray = n.getData('valueArray'),
+          acum = 0;
+      if(!valArray) return;
+      if(stacked) {
+        $.each(valArray, function(v) { 
+          acum += +v;
+        });
+      } else {
+        acum = Math.max.apply(null, valArray);
+      }
+      maxValue = maxValue>acum? maxValue:acum;
+    });
+    return maxValue;
+  },
+  
+  setBarType: function(type) {
+    this.config.type = type;
+    this.delegate.config.Node.type = 'barchart-' + type.split(':')[0];
+  },
+  
+  normalizeDims: function() {
+    //number of elements
+    var root = this.delegate.graph.getNode(this.delegate.root), l=0;
+    root.eachAdjacency(function() {
+      l++;
+    });
+    var maxValue = this.getMaxValue() || 1,
+        size = this.delegate.canvas.getSize(),
+        config = this.config,
+        margin = config.Margin,
+        marginWidth = margin.left + margin.right,
+        marginHeight = margin.top + margin.bottom,
+        horz = config.orientation == 'horizontal',
+        fixedDim = (size[horz? 'height':'width'] - (horz? marginHeight:marginWidth) - (l -1) * config.barsOffset) / l,
+        animate = config.animate,
+        height = size[horz? 'width':'height'] - (horz? marginWidth:marginHeight) 
+          - (!horz && config.showAggregates && (config.Label.size + config.labelOffset))
+          - (config.showLabels && (config.Label.size + config.labelOffset)),
+        dim1 = horz? 'height':'width',
+        dim2 = horz? 'width':'height';
+    this.delegate.graph.eachNode(function(n) {
+      var acum = 0, animateValue = [];
+      $.each(n.getData('valueArray'), function(v) {
+        acum += +v;
+        animateValue.push(0);
+      });
+      n.setData(dim1, fixedDim);
+      if(animate) {
+        n.setData(dim2, acum * height / maxValue, 'end');
+        n.setData('dimArray', $.map(n.getData('valueArray'), function(n) { 
+          return n * height / maxValue; 
+        }), 'end');
+        var dimArray = n.getData('dimArray');
+        if(!dimArray) {
+          n.setData('dimArray', animateValue);
+        }
+      } else {
+        n.setData(dim2, acum * height / maxValue);
+        n.setData('dimArray', $.map(n.getData('valueArray'), function(n) { 
+          return n * height / maxValue; 
+        }));
+      }
+    });
+  }
+});
+
+
+/*
+ * File: Options.PieChart.js
+ *
+*/
+/*
+  Object: Options.PieChart
+  
+  <PieChart> options. 
+  Other options included in the PieChart are <Options.Canvas>, <Options.Label>, <Options.Tips> and <Options.Events>.
+  
+  Syntax:
+  
+  (start code js)
+
+  Options.PieChart = {
+    animate: true,
+    offset: 25,
+    sliceOffset:0,
+    labelOffset: 3,
+    type: 'stacked',
+    hoveredColor: '#9fd4ff',
+    showLabels: true,
+    resizeLabels: false,
+    updateHeights: false
+  };  
+
+  (end code)
+  
+  Example:
+  
+  (start code js)
+
+  var pie = new $jit.PieChart({
+    animate: true,
+    sliceOffset: 5,
+    type: 'stacked:gradient'
+  });  
+
+  (end code)
+  
+  Parameters:
+  
+  animate - (boolean) Default's *true*. Whether to add animated transitions when plotting/updating the visualization.
+  offset - (number) Default's *25*. Adds margin between the visualization and the canvas.
+  sliceOffset - (number) Default's *0*. Separation between the center of the canvas and each pie slice.
+  labelOffset - (number) Default's *3*. Adds margin between the label and the default place where it should be drawn.
+  type - (string) Default's *'stacked'*. Stack style. Posible values are 'stacked', 'stacked:gradient' to add gradients.
+  hoveredColor - (boolean|string) Default's *'#9fd4ff'*. Sets the selected color for a hovered pie stack.
+  showLabels - (boolean) Default's *true*. Display the name of the slots.
+  resizeLabels - (boolean|number) Default's *false*. Resize the pie labels according to their stacked values. Set a number for *resizeLabels* to set a font size minimum.
+  updateHeights - (boolean) Default's *false*. Only for mono-valued (most common) pie charts. Resize the height of the pie slices according to their current values.
+
+*/
+Options.PieChart = {
+  $extend: true,
+
+  animate: true,
+  offset: 25, // page offset
+  sliceOffset:0,
+  labelOffset: 3, // label offset
+  type: 'stacked', // gradient
+  hoveredColor: '#9fd4ff',
+  Events: {
+    enable: false,
+    onClick: $.empty
+  },
+  Tips: {
+    enable: false,
+    onShow: $.empty,
+    onHide: $.empty
+  },
+  showLabels: true,
+  resizeLabels: false,
+  
+  //only valid for mono-valued datasets
+  updateHeights: false
+};
+
+/*
+ * Class: Layouts.Radial
+ * 
+ * Implements a Radial Layout.
+ * 
+ * Implemented By:
+ * 
+ * <RGraph>, <Hypertree>
+ * 
+ */
+Layouts.Radial = new Class({
+
+  /*
+   * Method: compute
+   * 
+   * Computes nodes' positions.
+   * 
+   * Parameters:
+   * 
+   * property - _optional_ A <Graph.Node> position property to store the new
+   * positions. Possible values are 'pos', 'end' or 'start'.
+   * 
+   */
+  compute : function(property) {
+    var prop = $.splat(property || [ 'current', 'start', 'end' ]);
+    NodeDim.compute(this.graph, prop, this.config);
+    this.graph.computeLevels(this.root, 0, "ignore");
+    var lengthFunc = this.createLevelDistanceFunc(); 
+    this.computeAngularWidths(prop);
+    this.computePositions(prop, lengthFunc);
+  },
+
+  /*
+   * computePositions
+   * 
+   * Performs the main algorithm for computing node positions.
+   */
+  computePositions : function(property, getLength) {
+    var propArray = property;
+    var graph = this.graph;
+    var root = graph.getNode(this.root);
+    var parent = this.parent;
+    var config = this.config;
+
+    for ( var i=0, l=propArray.length; i < l; i++) {
+      var pi = propArray[i];
+      root.setPos($P(0, 0), pi);
+      root.setData('span', Math.PI * 2, pi);
+    }
+
+    root.angleSpan = {
+      begin : 0,
+      end : 2 * Math.PI
+    };
+
+    graph.eachBFS(this.root, function(elem) {
+      var angleSpan = elem.angleSpan.end - elem.angleSpan.begin;
+      var angleInit = elem.angleSpan.begin;
+      var len = getLength(elem);
+      //Calculate the sum of all angular widths
+      var totalAngularWidths = 0, subnodes = [], maxDim = {};
+      elem.eachSubnode(function(sib) {
+        totalAngularWidths += sib._treeAngularWidth;
+        //get max dim
+        for ( var i=0, l=propArray.length; i < l; i++) {
+          var pi = propArray[i], dim = sib.getData('dim', pi);
+          maxDim[pi] = (pi in maxDim)? (dim > maxDim[pi]? dim : maxDim[pi]) : dim;
+        }
+        subnodes.push(sib);
+      }, "ignore");
+      //Maintain children order
+      //Second constraint for <http://bailando.sims.berkeley.edu/papers/infovis01.htm>
+      if (parent && parent.id == elem.id && subnodes.length > 0
+          && subnodes[0].dist) {
+        subnodes.sort(function(a, b) {
+          return (a.dist >= b.dist) - (a.dist <= b.dist);
+        });
+      }
+      //Calculate nodes positions.
+      for (var k = 0, ls=subnodes.length; k < ls; k++) {
+        var child = subnodes[k];
+        if (!child._flag) {
+          var angleProportion = child._treeAngularWidth / totalAngularWidths * angleSpan;
+          var theta = angleInit + angleProportion / 2;
+
+          for ( var i=0, l=propArray.length; i < l; i++) {
+            var pi = propArray[i];
+            child.setPos($P(theta, len), pi);
+            child.setData('span', angleProportion, pi);
+            child.setData('dim-quotient', child.getData('dim', pi) / maxDim[pi], pi);
+          }
+
+          child.angleSpan = {
+            begin : angleInit,
+            end : angleInit + angleProportion
+          };
+          angleInit += angleProportion;
+        }
+      }
+    }, "ignore");
+  },
+
+  /*
+   * Method: setAngularWidthForNodes
+   * 
+   * Sets nodes angular widths.
+   */
+  setAngularWidthForNodes : function(prop) {
+    this.graph.eachBFS(this.root, function(elem, i) {
+      var diamValue = elem.getData('angularWidth', prop[0]) || 5;
+      elem._angularWidth = diamValue / i;
+    }, "ignore");
+  },
+
+  /*
+   * Method: setSubtreesAngularWidth
+   * 
+   * Sets subtrees angular widths.
+   */
+  setSubtreesAngularWidth : function() {
+    var that = this;
+    this.graph.eachNode(function(elem) {
+      that.setSubtreeAngularWidth(elem);
+    }, "ignore");
+  },
+
+  /*
+   * Method: setSubtreeAngularWidth
+   * 
+   * Sets the angular width for a subtree.
+   */
+  setSubtreeAngularWidth : function(elem) {
+    var that = this, nodeAW = elem._angularWidth, sumAW = 0;
+    elem.eachSubnode(function(child) {
+      that.setSubtreeAngularWidth(child);
+      sumAW += child._treeAngularWidth;
+    }, "ignore");
+    elem._treeAngularWidth = Math.max(nodeAW, sumAW);
+  },
+
+  /*
+   * Method: computeAngularWidths
+   * 
+   * Computes nodes and subtrees angular widths.
+   */
+  computeAngularWidths : function(prop) {
+    this.setAngularWidthForNodes(prop);
+    this.setSubtreesAngularWidth();
+  }
+
+});
+
+
+/*
+ * File: Sunburst.js
+ */
+
+/*
+   Class: Sunburst
+      
+   A radial space filling tree visualization.
+   
+   Inspired by:
+   Sunburst <http://www.cc.gatech.edu/gvu/ii/sunburst/>.
+   
+   Note:
+   
+   This visualization was built and engineered from scratch, taking only the paper as inspiration, and only shares some features with the visualization described in the paper.
+   
+  Implements:
+  
+  All <Loader> methods
+  
+   Constructor Options:
+   
+   Inherits options from
+   
+   - <Options.Canvas>
+   - <Options.Controller>
+   - <Options.Node>
+   - <Options.Edge>
+   - <Options.Label>
+   - <Options.Events>
+   - <Options.Tips>
+   - <Options.NodeStyles>
+   - <Options.Navigation>
+   
+   Additionally, there are other parameters and some default values changed
+   
+   interpolation - (string) Default's *linear*. Describes the way nodes are interpolated. Possible values are 'linear' and 'polar'.
+   levelDistance - (number) Default's *100*. The distance between levels of the tree. 
+   Node.type - Described in <Options.Node>. Default's to *multipie*.
+   Node.height - Described in <Options.Node>. Default's *0*.
+   Edge.type - Described in <Options.Edge>. Default's *none*.
+   Label.textAlign - Described in <Options.Label>. Default's *start*.
+   Label.textBaseline - Described in <Options.Label>. Default's *middle*.
+     
+   Instance Properties:
+
+   canvas - Access a <Canvas> instance.
+   graph - Access a <Graph> instance.
+   op - Access a <Sunburst.Op> instance.
+   fx - Access a <Sunburst.Plot> instance.
+   labels - Access a <Sunburst.Label> interface implementation.   
+
+*/
+
+$jit.Sunburst = new Class({
+
+  Implements: [ Loader, Extras, Layouts.Radial ],
+
+  initialize: function(controller) {
+    var $Sunburst = $jit.Sunburst;
+
+    var config = {
+      interpolation: 'linear',
+      levelDistance: 100,
+      Node: {
+        'type': 'multipie',
+        'height':0
+      },
+      Edge: {
+        'type': 'none'
+      },
+      Label: {
+        textAlign: 'start',
+        textBaseline: 'middle'
+      }
+    };
+
+    this.controller = this.config = $.merge(Options("Canvas", "Node", "Edge",
+        "Fx", "Tips", "NodeStyles", "Events", "Navigation", "Controller", "Label"), config, controller);
+
+    var canvasConfig = this.config;
+    if(canvasConfig.useCanvas) {
+      this.canvas = canvasConfig.useCanvas;
+      this.config.labelContainer = this.canvas.id + '-label';
+    } else {
+      if(canvasConfig.background) {
+        canvasConfig.background = $.merge({
+          type: 'Circles'
+        }, canvasConfig.background);
+      }
+      this.canvas = new Canvas(this, canvasConfig);
+      this.config.labelContainer = (typeof canvasConfig.injectInto == 'string'? canvasConfig.injectInto : canvasConfig.injectInto.id) + '-label';
+    }
+
+    this.graphOptions = {
+      'klass': Polar,
+      'Node': {
+        'selected': false,
+        'exist': true,
+        'drawn': true
+      }
+    };
+    this.graph = new Graph(this.graphOptions, this.config.Node,
+        this.config.Edge);
+    this.labels = new $Sunburst.Label[canvasConfig.Label.type](this);
+    this.fx = new $Sunburst.Plot(this, $Sunburst);
+    this.op = new $Sunburst.Op(this);
+    this.json = null;
+    this.root = null;
+    this.rotated = null;
+    this.busy = false;
+    // initialize extras
+    this.initializeExtras();
+  },
+
+  /* 
+  
+    createLevelDistanceFunc 
+  
+    Returns the levelDistance function used for calculating a node distance 
+    to its origin. This function returns a function that is computed 
+    per level and not per node, such that all nodes with the same depth will have the 
+    same distance to the origin. The resulting function gets the 
+    parent node as parameter and returns a float.
+
+   */
+  createLevelDistanceFunc: function() {
+    var ld = this.config.levelDistance;
+    return function(elem) {
+      return (elem._depth + 1) * ld;
+    };
+  },
+
+  /* 
+     Method: refresh 
+     
+     Computes positions and plots the tree.
+
+   */
+  refresh: function() {
+    this.compute();
+    this.plot();
+  },
+
+  /*
+   reposition
+  
+   An alias for computing new positions to _endPos_
+
+   See also:
+
+   <Sunburst.compute>
+   
+  */
+  reposition: function() {
+    this.compute('end');
+  },
+
+  /*
+  Method: rotate
+  
+  Rotates the graph so that the selected node is horizontal on the right.
+
+  Parameters:
+  
+  node - (object) A <Graph.Node>.
+  method - (string) Whether to perform an animation or just replot the graph. Possible values are "replot" or "animate".
+  opt - (object) Configuration options merged with this visualization configuration options.
+  
+  See also:
+
+  <Sunburst.rotateAngle>
+  
+  */
+  rotate: function(node, method, opt) {
+    var theta = node.getPos(opt.property || 'current').getp(true).theta;
+    this.rotated = node;
+    this.rotateAngle(-theta, method, opt);
+  },
+
+  /*
+  Method: rotateAngle
+  
+  Rotates the graph of an angle theta.
+  
+   Parameters:
+   
+   node - (object) A <Graph.Node>.
+   method - (string) Whether to perform an animation or just replot the graph. Possible values are "replot" or "animate".
+   opt - (object) Configuration options merged with this visualization configuration options.
+   
+   See also:
+
+   <Sunburst.rotate>
+  
+  */
+  rotateAngle: function(theta, method, opt) {
+    var that = this;
+    var options = $.merge(this.config, opt || {}, {
+      modes: [ 'polar' ]
+    });
+    var prop = opt.property || (method === "animate" ? 'end' : 'current');
+    if(method === 'animate') {
+      this.fx.animation.pause();
+    }
+    this.graph.eachNode(function(n) {
+      var p = n.getPos(prop);
+      p.theta += theta;
+      if (p.theta < 0) {
+        p.theta += Math.PI * 2;
+      }
+    });
+    if (method == 'animate') {
+      this.fx.animate(options);
+    } else if (method == 'replot') {
+      this.fx.plot();
+      this.busy = false;
+    }
+  },
+
+  /*
+   Method: plot
+  
+   Plots the Sunburst. This is a shortcut to *fx.plot*.
+  */
+  plot: function() {
+    this.fx.plot();
+  }
+});
+
+$jit.Sunburst.$extend = true;
+
+(function(Sunburst) {
+
+  /*
+     Class: Sunburst.Op
+
+     Custom extension of <Graph.Op>.
+
+     Extends:
+
+     All <Graph.Op> methods
+     
+     See also:
+     
+     <Graph.Op>
+
+  */
+  Sunburst.Op = new Class( {
+
+    Implements: Graph.Op
+
+  });
+
+  /*
+     Class: Sunburst.Plot
+
+    Custom extension of <Graph.Plot>.
+  
+    Extends:
+  
+    All <Graph.Plot> methods
+    
+    See also:
+    
+    <Graph.Plot>
+  
+  */
+  Sunburst.Plot = new Class( {
+
+    Implements: Graph.Plot
+
+  });
+
+  /*
+    Class: Sunburst.Label
+
+    Custom extension of <Graph.Label>. 
+    Contains custom <Graph.Label.SVG>, <Graph.Label.HTML> and <Graph.Label.Native> extensions.
+  
+    Extends:
+  
+    All <Graph.Label> methods and subclasses.
+  
+    See also:
+  
+    <Graph.Label>, <Graph.Label.Native>, <Graph.Label.HTML>, <Graph.Label.SVG>.
+  
+   */
+  Sunburst.Label = {};
+
+  /*
+     Sunburst.Label.Native
+
+     Custom extension of <Graph.Label.Native>.
+
+     Extends:
+
+     All <Graph.Label.Native> methods
+
+     See also:
+
+     <Graph.Label.Native>
+  */
+  Sunburst.Label.Native = new Class( {
+    Implements: Graph.Label.Native,
+
+    initialize: function(viz) {
+      this.viz = viz;
+      this.label = viz.config.Label;
+      this.config = viz.config;
+    },
+
+    renderLabel: function(canvas, node, controller) {
+      var span = node.getData('span');
+      if(span < Math.PI /2 && Math.tan(span) * 
+          this.config.levelDistance * node._depth < 10) {
+        return;
+      }
+      var ctx = canvas.getCtx();
+      var measure = ctx.measureText(node.name);
+      if (node.id == this.viz.root) {
+        var x = -measure.width / 2, y = 0, thetap = 0;
+        var ld = 0;
+      } else {
+        var indent = 5;
+        var ld = controller.levelDistance - indent;
+        var clone = node.pos.clone();
+        clone.rho += indent;
+        var p = clone.getp(true);
+        var ct = clone.getc(true);
+        var x = ct.x, y = ct.y;
+        // get angle in degrees
+        var pi = Math.PI;
+        var cond = (p.theta > pi / 2 && p.theta < 3 * pi / 2);
+        var thetap = cond ? p.theta + pi : p.theta;
+        if (cond) {
+          x -= Math.abs(Math.cos(p.theta) * measure.width);
+          y += Math.sin(p.theta) * measure.width;
+        } else if (node.id == this.viz.root) {
+          x -= measure.width / 2;
+        }
+      }
+      ctx.save();
+      ctx.translate(x, y);
+      ctx.rotate(thetap);
+      ctx.fillText(node.name, 0, 0);
+      ctx.restore();
+    }
+  });
+
+  /*
+     Sunburst.Label.SVG
+
+    Custom extension of <Graph.Label.SVG>.
+  
+    Extends:
+  
+    All <Graph.Label.SVG> methods
+  
+    See also:
+  
+    <Graph.Label.SVG>
+  
+  */
+  Sunburst.Label.SVG = new Class( {
+    Implements: Graph.Label.SVG,
+
+    initialize: function(viz) {
+      this.viz = viz;
+    },
+
+    /* 
+       placeLabel
+
+       Overrides abstract method placeLabel in <Graph.Plot>.
+
+       Parameters:
+
+       tag - A DOM label element.
+       node - A <Graph.Node>.
+       controller - A configuration/controller object passed to the visualization.
+      
+     */
+    placeLabel: function(tag, node, controller) {
+      var pos = node.pos.getc(true), viz = this.viz, canvas = this.viz.canvas;
+      var radius = canvas.getSize();
+      var labelPos = {
+        x: Math.round(pos.x + radius.width / 2),
+        y: Math.round(pos.y + radius.height / 2)
+      };
+      tag.setAttribute('x', labelPos.x);
+      tag.setAttribute('y', labelPos.y);
+
+      var bb = tag.getBBox();
+      if (bb) {
+        // center the label
+    var x = tag.getAttribute('x');
+    var y = tag.getAttribute('y');
+    // get polar coordinates
+    var p = node.pos.getp(true);
+    // get angle in degrees
+    var pi = Math.PI;
+    var cond = (p.theta > pi / 2 && p.theta < 3 * pi / 2);
+    if (cond) {
+      tag.setAttribute('x', x - bb.width);
+      tag.setAttribute('y', y - bb.height);
+    } else if (node.id == viz.root) {
+      tag.setAttribute('x', x - bb.width / 2);
+    }
+
+    var thetap = cond ? p.theta + pi : p.theta;
+    if(node._depth)
+      tag.setAttribute('transform', 'rotate(' + thetap * 360 / (2 * pi) + ' ' + x
+          + ' ' + y + ')');
+  }
+
+  controller.onPlaceLabel(tag, node);
+}
+  });
+
+  /*
+     Sunburst.Label.HTML
+
+     Custom extension of <Graph.Label.HTML>.
+
+     Extends:
+
+     All <Graph.Label.HTML> methods.
+
+     See also:
+
+     <Graph.Label.HTML>
+
+  */
+  Sunburst.Label.HTML = new Class( {
+    Implements: Graph.Label.HTML,
+
+    initialize: function(viz) {
+      this.viz = viz;
+    },
+    /* 
+       placeLabel
+
+       Overrides abstract method placeLabel in <Graph.Plot>.
+
+       Parameters:
+
+       tag - A DOM label element.
+       node - A <Graph.Node>.
+       controller - A configuration/controller object passed to the visualization.
+      
+     */
+    placeLabel: function(tag, node, controller) {
+      var pos = node.pos.clone(), 
+          canvas = this.viz.canvas,
+          height = node.getData('height'),
+          ldist = ((height || node._depth == 0)? height : this.viz.config.levelDistance) /2,
+          radius = canvas.getSize();
+      pos.rho += ldist;
+      pos = pos.getc(true);
+      
+      var labelPos = {
+        x: Math.round(pos.x + radius.width / 2),
+        y: Math.round(pos.y + radius.height / 2)
+      };
+
+      var style = tag.style;
+      style.left = labelPos.x + 'px';
+      style.top = labelPos.y + 'px';
+      style.display = this.fitsInCanvas(labelPos, canvas) ? '' : 'none';
+
+      controller.onPlaceLabel(tag, node);
+    }
+  });
+
+  /*
+    Class: Sunburst.Plot.NodeTypes
+
+    This class contains a list of <Graph.Node> built-in types. 
+    Node types implemented are 'none', 'pie', 'multipie', 'gradient-pie' and 'gradient-multipie'.
+
+    You can add your custom node types, customizing your visualization to the extreme.
+
+    Example:
+
+    (start code js)
+      Sunburst.Plot.NodeTypes.implement({
+        'mySpecialType': {
+          'render': function(node, canvas) {
+            //print your custom node to canvas
+          },
+          //optional
+          'contains': function(node, pos) {
+            //return true if pos is inside the node or false otherwise
+          }
+        }
+      });
+    (end code)
+
+  */
+  Sunburst.Plot.NodeTypes = new Class( {
+    'none': {
+      'render': $.empty,
+      'contains': $.lambda(false),
+      'anglecontains': function(node, pos) {
+        var span = node.getData('span') / 2, theta = node.pos.theta;
+        var begin = theta - span, end = theta + span;
+        if (begin < 0)
+          begin += Math.PI * 2;
+        var atan = Math.atan2(pos.y, pos.x);
+        if (atan < 0)
+          atan += Math.PI * 2;
+        if (begin > end) {
+          return (atan > begin && atan <= Math.PI * 2) || atan < end;
+        } else {
+          return atan > begin && atan < end;
+        }
+      }
+    },
+
+    'pie': {
+      'render': function(node, canvas) {
+        var span = node.getData('span') / 2, theta = node.pos.theta;
+        var begin = theta - span, end = theta + span;
+        var polarNode = node.pos.getp(true);
+        var polar = new Polar(polarNode.rho, begin);
+        var p1coord = polar.getc(true);
+        polar.theta = end;
+        var p2coord = polar.getc(true);
+
+        var ctx = canvas.getCtx();
+        ctx.beginPath();
+        ctx.moveTo(0, 0);
+        ctx.lineTo(p1coord.x, p1coord.y);
+        ctx.moveTo(0, 0);
+        ctx.lineTo(p2coord.x, p2coord.y);
+        ctx.moveTo(0, 0);
+        ctx.arc(0, 0, polarNode.rho * node.getData('dim-quotient'), begin, end,
+            false);
+        ctx.fill();
+      },
+      'contains': function(node, pos) {
+        if (this.nodeTypes['none'].anglecontains.call(this, node, pos)) {
+          var rho = Math.sqrt(pos.x * pos.x + pos.y * pos.y);
+          var ld = this.config.levelDistance, d = node._depth;
+          return (rho <= ld * d);
+        }
+        return false;
+      }
+    },
+    'multipie': {
+      'render': function(node, canvas) {
+        var height = node.getData('height');
+        var ldist = height? height : this.config.levelDistance;
+        var span = node.getData('span') / 2, theta = node.pos.theta;
+        var begin = theta - span, end = theta + span;
+        var polarNode = node.pos.getp(true);
+
+        var polar = new Polar(polarNode.rho, begin);
+        var p1coord = polar.getc(true);
+
+        polar.theta = end;
+        var p2coord = polar.getc(true);
+
+        polar.rho += ldist;
+        var p3coord = polar.getc(true);
+
+        polar.theta = begin;
+        var p4coord = polar.getc(true);
+
+        var ctx = canvas.getCtx();
+        ctx.moveTo(0, 0);
+        ctx.beginPath();
+        ctx.arc(0, 0, polarNode.rho, begin, end, false);
+        ctx.arc(0, 0, polarNode.rho + ldist, end, begin, true);
+        ctx.moveTo(p1coord.x, p1coord.y);
+        ctx.lineTo(p4coord.x, p4coord.y);
+        ctx.moveTo(p2coord.x, p2coord.y);
+        ctx.lineTo(p3coord.x, p3coord.y);
+        ctx.fill();
+
+        if (node.collapsed) {
+          ctx.save();
+          ctx.lineWidth = 2;
+          ctx.moveTo(0, 0);
+          ctx.beginPath();
+          ctx.arc(0, 0, polarNode.rho + ldist + 5, end - 0.01, begin + 0.01,
+              true);
+          ctx.stroke();
+          ctx.restore();
+        }
+      },
+      'contains': function(node, pos) {
+        if (this.nodeTypes['none'].anglecontains.call(this, node, pos)) {
+          var rho = Math.sqrt(pos.x * pos.x + pos.y * pos.y);
+          var height = node.getData('height');
+          var ldist = height? height : this.config.levelDistance;
+          var ld = this.config.levelDistance, d = node._depth;
+          return (rho >= ld * d) && (rho <= (ld * d + ldist));
+        }
+        return false;
+      }
+    },
+
+    'gradient-multipie': {
+      'render': function(node, canvas) {
+        var ctx = canvas.getCtx();
+        var height = node.getData('height');
+        var ldist = height? height : this.config.levelDistance;
+        var radialGradient = ctx.createRadialGradient(0, 0, node.getPos().rho,
+            0, 0, node.getPos().rho + ldist);
+
+        var colorArray = $.hexToRgb(node.getData('color')), ans = [];
+        $.each(colorArray, function(i) {
+          ans.push(parseInt(i * 0.5, 10));
+        });
+        var endColor = $.rgbToHex(ans);
+        radialGradient.addColorStop(0, endColor);
+        radialGradient.addColorStop(1, node.getData('color'));
+        ctx.fillStyle = radialGradient;
+        this.nodeTypes['multipie'].render.call(this, node, canvas);
+      },
+      'contains': function(node, pos) {
+        return this.nodeTypes['multipie'].contains.call(this, node, pos);
+      }
+    },
+
+    'gradient-pie': {
+      'render': function(node, canvas) {
+        var ctx = canvas.getCtx();
+        var radialGradient = ctx.createRadialGradient(0, 0, 0, 0, 0, node
+            .getPos().rho);
+
+        var colorArray = $.hexToRgb(node.getData('color')), ans = [];
+        $.each(colorArray, function(i) {
+          ans.push(parseInt(i * 0.5, 10));
+        });
+        var endColor = $.rgbToHex(ans);
+        radialGradient.addColorStop(1, endColor);
+        radialGradient.addColorStop(0, node.getData('color'));
+        ctx.fillStyle = radialGradient;
+        this.nodeTypes['pie'].render.call(this, node, canvas);
+      },
+      'contains': function(node, pos) {
+        return this.nodeTypes['pie'].contains.call(this, node, pos);
+      }
+    }
+  });
+
+  /*
+    Class: Sunburst.Plot.EdgeTypes
+
+    This class contains a list of <Graph.Adjacence> built-in types. 
+    Edge types implemented are 'none', 'line' and 'arrow'.
+  
+    You can add your custom edge types, customizing your visualization to the extreme.
+  
+    Example:
+  
+    (start code js)
+      Sunburst.Plot.EdgeTypes.implement({
+        'mySpecialType': {
+          'render': function(adj, canvas) {
+            //print your custom edge to canvas
+          },
+          //optional
+          'contains': function(adj, pos) {
+            //return true if pos is inside the arc or false otherwise
+          }
+        }
+      });
+    (end code)
+  
+  */
+  Sunburst.Plot.EdgeTypes = new Class({
+    'none': $.empty,
+    'line': {
+      'render': function(adj, canvas) {
+        var from = adj.nodeFrom.pos.getc(true),
+            to = adj.nodeTo.pos.getc(true);
+        this.edgeHelper.line.render(from, to, canvas);
+      },
+      'contains': function(adj, pos) {
+        var from = adj.nodeFrom.pos.getc(true),
+            to = adj.nodeTo.pos.getc(true);
+        return this.edgeHelper.line.contains(from, to, pos, this.edge.epsilon);
+      }
+    },
+    'arrow': {
+      'render': function(adj, canvas) {
+        var from = adj.nodeFrom.pos.getc(true),
+            to = adj.nodeTo.pos.getc(true),
+            dim = adj.getData('dim'),
+            direction = adj.data.$direction,
+            inv = (direction && direction.length>1 && direction[0] != adj.nodeFrom.id);
+        this.edgeHelper.arrow.render(from, to, dim, inv, canvas);
+      },
+      'contains': function(adj, pos) {
+        var from = adj.nodeFrom.pos.getc(true),
+            to = adj.nodeTo.pos.getc(true);
+        return this.edgeHelper.arrow.contains(from, to, pos, this.edge.epsilon);
+      }
+    },
+    'hyperline': {
+      'render': function(adj, canvas) {
+        var from = adj.nodeFrom.pos.getc(),
+            to = adj.nodeTo.pos.getc(),
+            dim = Math.max(from.norm(), to.norm());
+        this.edgeHelper.hyperline.render(from.$scale(1/dim), to.$scale(1/dim), dim, canvas);
+      },
+      'contains': $.lambda(false) //TODO(nico): Implement this!
+    }
+  });
+
+})($jit.Sunburst);
+
+
+/*
+ * File: PieChart.js
+ *
+*/
+
+$jit.Sunburst.Plot.NodeTypes.implement({
+  'piechart-stacked' : {
+    'render' : function(node, canvas) {
+      var pos = node.pos.getp(true),
+          dimArray = node.getData('dimArray'),
+          valueArray = node.getData('valueArray'),
+          colorArray = node.getData('colorArray'),
+          colorLength = colorArray.length,
+          stringArray = node.getData('stringArray'),
+          span = node.getData('span') / 2,
+          theta = node.pos.theta,
+          begin = theta - span,
+          end = theta + span,
+          polar = new Polar;
+    
+      var ctx = canvas.getCtx(), 
+          opt = {},
+          gradient = node.getData('gradient'),
+          border = node.getData('border'),
+          config = node.getData('config'),
+          showLabels = config.showLabels,
+          resizeLabels = config.resizeLabels,
+          label = config.Label;
+
+      var xpos = config.sliceOffset * Math.cos((begin + end) /2);
+      var ypos = config.sliceOffset * Math.sin((begin + end) /2);
+
+      if (colorArray && dimArray && stringArray) {
+        for (var i=0, l=dimArray.length, acum=0, valAcum=0; i<l; i++) {
+          var dimi = dimArray[i], colori = colorArray[i % colorLength];
+          if(dimi <= 0) continue;
+          ctx.fillStyle = ctx.strokeStyle = colori;
+          if(gradient && dimi) {
+            var radialGradient = ctx.createRadialGradient(xpos, ypos, acum + config.sliceOffset,
+                xpos, ypos, acum + dimi + config.sliceOffset);
+            var colorRgb = $.hexToRgb(colori), 
+                ans = $.map(colorRgb, function(i) { return (i * 0.8) >> 0; }),
+                endColor = $.rgbToHex(ans);
+
+            radialGradient.addColorStop(0, colori);
+            radialGradient.addColorStop(0.5, colori);
+            radialGradient.addColorStop(1, endColor);
+            ctx.fillStyle = radialGradient;
+          }
+          
+          polar.rho = acum + config.sliceOffset;
+          polar.theta = begin;
+          var p1coord = polar.getc(true);
+          polar.theta = end;
+          var p2coord = polar.getc(true);
+          polar.rho += dimi;
+          var p3coord = polar.getc(true);
+          polar.theta = begin;
+          var p4coord = polar.getc(true);
+
+          ctx.beginPath();
+          //fixing FF arc method + fill
+          ctx.arc(xpos, ypos, acum + .01, begin, end, false);
+          ctx.arc(xpos, ypos, acum + dimi + .01, end, begin, true);
+          ctx.fill();
+          if(border && border.name == stringArray[i]) {
+            opt.acum = acum;
+            opt.dimValue = dimArray[i];
+            opt.begin = begin;
+            opt.end = end;
+          }
+          acum += (dimi || 0);
+          valAcum += (valueArray[i] || 0);
+        }
+        if(border) {
+          ctx.save();
+          ctx.globalCompositeOperation = "source-over";
+          ctx.lineWidth = 2;
+          ctx.strokeStyle = border.color;
+          var s = begin < end? 1 : -1;
+          ctx.beginPath();
+          //fixing FF arc method + fill
+          ctx.arc(xpos, ypos, opt.acum + .01 + 1, opt.begin, opt.end, false);
+          ctx.arc(xpos, ypos, opt.acum + opt.dimValue + .01 - 1, opt.end, opt.begin, true);
+          ctx.closePath();
+          ctx.stroke();
+          ctx.restore();
+        }
+        if(showLabels && label.type == 'Native') {
+          ctx.save();
+          ctx.fillStyle = ctx.strokeStyle = label.color;
+          var scale = resizeLabels? node.getData('normalizedDim') : 1,
+              fontSize = (label.size * scale) >> 0;
+          fontSize = fontSize < +resizeLabels? +resizeLabels : fontSize;
+          
+          ctx.font = label.style + ' ' + fontSize + 'px ' + label.family;
+          ctx.textBaseline = 'middle';
+          ctx.textAlign = 'center';
+          
+          polar.rho = acum + config.labelOffset + config.sliceOffset;
+          polar.theta = node.pos.theta;
+          var cart = polar.getc(true);
+          
+          ctx.fillText(node.name, cart.x, cart.y);
+          ctx.restore();
+        }
+      }
+    },
+    'contains': function(node, pos) {
+      if (this.nodeTypes['none'].anglecontains.call(this, node, pos)) {
+        var rho = Math.sqrt(pos.x * pos.x + pos.y * pos.y);
+        var ld = this.config.levelDistance, d = node._depth;
+        var config = node.getData('config');
+        if(rho <=ld * d + config.sliceOffset) {
+          var dimArray = node.getData('dimArray');
+          for(var i=0,l=dimArray.length,acum=config.sliceOffset; i<l; i++) {
+            var dimi = dimArray[i];
+            if(rho >= acum && rho <= acum + dimi) {
+              return {
+                name: node.getData('stringArray')[i],
+                color: node.getData('colorArray')[i],
+                value: node.getData('valueArray')[i],
+                label: node.name
+              };
+            }
+            acum += dimi;
+          }
+        }
+        return false;
+        
+      }
+      return false;
+    }
+  }
+});
+
+/*
+  Class: PieChart
+  
+  A visualization that displays stacked bar charts.
+  
+  Constructor Options:
+  
+  See <Options.PieChart>.
+
+*/
+$jit.PieChart = new Class({
+  sb: null,
+  colors: ["#416D9C", "#70A35E", "#EBB056", "#C74243", "#83548B", "#909291", "#557EAA"],
+  selected: {},
+  busy: false,
+  
+  initialize: function(opt) {
+    this.controller = this.config = 
+      $.merge(Options("Canvas", "PieChart", "Label"), {
+        Label: { type: 'Native' }
+      }, opt);
+    this.initializeViz();
+  },
+  
+  initializeViz: function() {
+    var config = this.config, that = this;
+    var nodeType = config.type.split(":")[0];
+    var delegate = new $jit.Sunburst({
+      injectInto: config.injectInto,
+      width: config.width,
+      height: config.height,
+      useCanvas: config.useCanvas,
+      withLabels: config.Label.type != 'Native',
+      Label: {
+        type: config.Label.type
+      },
+      Node: {
+        overridable: true,
+        type: 'piechart-' + nodeType,
+        width: 1,
+        height: 1
+      },
+      Edge: {
+        type: 'none'
+      },
+      Tips: {
+        enable: config.Tips.enable,
+        type: 'Native',
+        force: true,
+        onShow: function(tip, node, contains) {
+          var elem = contains;
+          config.Tips.onShow(tip, elem, node);
+        }
+      },
+      Events: {
+        enable: true,
+        type: 'Native',
+        onClick: function(node, eventInfo, evt) {
+          if(!config.Events.enable) return;
+          var elem = eventInfo.getContains();
+          config.Events.onClick(elem, eventInfo, evt);
+        },
+        onMouseMove: function(node, eventInfo, evt) {
+          if(!config.hoveredColor) return;
+          if(node) {
+            var elem = eventInfo.getContains();
+            that.select(node.id, elem.name, elem.index);
+          } else {
+            that.select(false, false, false);
+          }
+        }
+      },
+      onCreateLabel: function(domElement, node) {
+        var labelConf = config.Label;
+        if(config.showLabels) {
+          var style = domElement.style;
+          style.fontSize = labelConf.size + 'px';
+          style.fontFamily = labelConf.family;
+          style.color = labelConf.color;
+          style.textAlign = 'center';
+          domElement.innerHTML = node.name;
+        }
+      },
+      onPlaceLabel: function(domElement, node) {
+        if(!config.showLabels) return;
+        var pos = node.pos.getp(true),
+            dimArray = node.getData('dimArray'),
+            span = node.getData('span') / 2,
+            theta = node.pos.theta,
+            begin = theta - span,
+            end = theta + span,
+            polar = new Polar;
+      
+        var showLabels = config.showLabels,
+            resizeLabels = config.resizeLabels,
+            label = config.Label;
+        
+        if (dimArray) {
+          for (var i=0, l=dimArray.length, acum=0; i<l; i++) {
+            acum += dimArray[i];
+          }
+          var scale = resizeLabels? node.getData('normalizedDim') : 1,
+              fontSize = (label.size * scale) >> 0;
+          fontSize = fontSize < +resizeLabels? +resizeLabels : fontSize;
+          domElement.style.fontSize = fontSize + 'px';
+          polar.rho = acum + config.labelOffset + config.sliceOffset;
+          polar.theta = (begin + end) / 2;
+          var pos = polar.getc(true);
+          var radius = that.canvas.getSize();
+          var labelPos = {
+            x: Math.round(pos.x + radius.width / 2),
+            y: Math.round(pos.y + radius.height / 2)
+          };
+          domElement.style.left = labelPos.x + 'px';
+          domElement.style.top = labelPos.y + 'px';
+        }
+      }
+    });
+    
+    var size = delegate.canvas.getSize(),
+        min = Math.min;
+    delegate.config.levelDistance = min(size.width, size.height)/2 
+      - config.offset - config.sliceOffset;
+    this.delegate = delegate;
+    this.canvas = this.delegate.canvas;
+    this.canvas.getCtx().globalCompositeOperation = 'lighter';
+  },
+  
+  /*
+    Method: loadJSON
+   
+    Loads JSON data into the visualization. 
+    
+    Parameters:
+    
+    json - The JSON data format. This format is described in <http://blog.thejit.org/2010/04/24/new-javascript-infovis-toolkit-visualizations/#json-data-format>.
+    
+    Example:
+    (start code js)
+    var pieChart = new $jit.PieChart(options);
+    pieChart.loadJSON(json);
+    (end code)
+  */  
+  loadJSON: function(json) {
+    var prefix = $.time(), 
+        ch = [], 
+        delegate = this.delegate,
+        name = $.splat(json.label),
+        nameLength = name.length,
+        color = $.splat(json.color || this.colors),
+        colorLength = color.length,
+        config = this.config,
+        gradient = !!config.type.split(":")[1],
+        animate = config.animate,
+        mono = nameLength == 1;
+    
+    for(var i=0, values=json.values, l=values.length; i<l; i++) {
+      var val = values[i];
+      var valArray = $.splat(val.values);
+      ch.push({
+        'id': prefix + val.label,
+        'name': val.label,
+        'data': {
+          'value': valArray,
+          '$valueArray': valArray,
+          '$colorArray': mono? $.splat(color[i % colorLength]) : color,
+          '$stringArray': name,
+          '$gradient': gradient,
+          '$config': config,
+          '$angularWidth': $.reduce(valArray, function(x,y){return x+y;})
+        },
+        'children': []
+      });
+    }
+    var root = {
+      'id': prefix + '$root',
+      'name': '',
+      'data': {
+        '$type': 'none',
+        '$width': 1,
+        '$height': 1
+      },
+      'children': ch
+    };
+    delegate.loadJSON(root);
+    
+    this.normalizeDims();
+    delegate.refresh();
+    if(animate) {
+      delegate.fx.animate({
+        modes: ['node-property:dimArray'],
+        duration:1500
+      });
+    }
+  },
+  
+  /*
+    Method: updateJSON
+   
+    Use this method when updating values for the current JSON data. If the items specified by the JSON data already exist in the graph then their values will be updated.
+    
+    Parameters:
+    
+    json - (object) JSON data to be updated. The JSON format corresponds to the one described in <PieChart.loadJSON>.
+    onComplete - (object) A callback object to be called when the animation transition when updating the data end.
+    
+    Example:
+    
+    (start code js)
+    pieChart.updateJSON(json, {
+      onComplete: function() {
+        alert('update complete!');
+      }
+    });
+    (end code)
+  */  
+  updateJSON: function(json, onComplete) {
+    if(this.busy) return;
+    this.busy = true;
+    
+    var delegate = this.delegate;
+    var graph = delegate.graph;
+    var values = json.values;
+    var animate = this.config.animate;
+    var that = this;
+    $.each(values, function(v) {
+      var n = graph.getByName(v.label),
+          vals = $.splat(v.values);
+      if(n) {
+        n.setData('valueArray', vals);
+        n.setData('angularWidth', $.reduce(vals, function(x,y){return x+y;}));
+        if(json.label) {
+          n.setData('stringArray', $.splat(json.label));
+        }
+      }
+    });
+    this.normalizeDims();
+    if(animate) {
+      delegate.compute('end');
+      delegate.fx.animate({
+        modes: ['node-property:dimArray:span', 'linear'],
+        duration:1500,
+        onComplete: function() {
+          that.busy = false;
+          onComplete && onComplete.onComplete();
+        }
+      });
+    } else {
+      delegate.refresh();
+    }
+  },
+    
+  //adds the little brown bar when hovering the node
+  select: function(id, name) {
+    if(!this.config.hoveredColor) return;
+    var s = this.selected;
+    if(s.id != id || s.name != name) {
+      s.id = id;
+      s.name = name;
+      s.color = this.config.hoveredColor;
+      this.delegate.graph.eachNode(function(n) {
+        if(id == n.id) {
+          n.setData('border', s);
+        } else {
+          n.setData('border', false);
+        }
+      });
+      this.delegate.plot();
+    }
+  },
+  
+  /*
+    Method: getLegend
+   
+    Returns an object containing as keys the legend names and as values hex strings with color values.
+    
+    Example:
+    
+    (start code js)
+    var legend = pieChart.getLegend();
+    (end code)
+  */  
+  getLegend: function() {
+    var legend = {};
+    var n;
+    this.delegate.graph.getNode(this.delegate.root).eachAdjacency(function(adj) {
+      n = adj.nodeTo;
+    });
+    var colors = n.getData('colorArray'),
+        len = colors.length;
+    $.each(n.getData('stringArray'), function(s, i) {
+      legend[s] = colors[i % len];
+    });
+    return legend;
+  },
+  
+  /*
+    Method: getMaxValue
+   
+    Returns the maximum accumulated value for the stacks. This method is used for normalizing the graph heights according to the canvas height.
+    
+    Example:
+    
+    (start code js)
+    var ans = pieChart.getMaxValue();
+    (end code)
+    
+    In some cases it could be useful to override this method to normalize heights for a group of PieCharts, like when doing small multiples.
+    
+    Example:
+    
+    (start code js)
+    //will return 100 for all PieChart instances,
+    //displaying all of them with the same scale
+    $jit.PieChart.implement({
+      'getMaxValue': function() {
+        return 100;
+      }
+    });
+    (end code)
+    
+  */  
+  getMaxValue: function() {
+    var maxValue = 0;
+    this.delegate.graph.eachNode(function(n) {
+      var valArray = n.getData('valueArray'),
+          acum = 0;
+      $.each(valArray, function(v) { 
+        acum += +v;
+      });
+      maxValue = maxValue>acum? maxValue:acum;
+    });
+    return maxValue;
+  },
+  
+  normalizeDims: function() {
+    //number of elements
+    var root = this.delegate.graph.getNode(this.delegate.root), l=0;
+    root.eachAdjacency(function() {
+      l++;
+    });
+    var maxValue = this.getMaxValue() || 1,
+        config = this.config,
+        animate = config.animate,
+        rho = this.delegate.config.levelDistance;
+    this.delegate.graph.eachNode(function(n) {
+      var acum = 0, animateValue = [];
+      $.each(n.getData('valueArray'), function(v) {
+        acum += +v;
+        animateValue.push(1);
+      });
+      var stat = (animateValue.length == 1) && !config.updateHeights;
+      if(animate) {
+        n.setData('dimArray', $.map(n.getData('valueArray'), function(n) { 
+          return stat? rho: (n * rho / maxValue); 
+        }), 'end');
+        var dimArray = n.getData('dimArray');
+        if(!dimArray) {
+          n.setData('dimArray', animateValue);
+        }
+      } else {
+        n.setData('dimArray', $.map(n.getData('valueArray'), function(n) { 
+          return stat? rho : (n * rho / maxValue); 
+        }));
+      }
+      n.setData('normalizedDim', acum / maxValue);
+    });
+  }
+});
+
+
+/*
+ * Class: Layouts.TM
+ * 
+ * Implements TreeMaps layouts (SliceAndDice, Squarified, Strip).
+ * 
+ * Implemented By:
+ * 
+ * <TM>
+ * 
+ */
+Layouts.TM = {};
+
+Layouts.TM.SliceAndDice = new Class({
+  compute: function(prop) {
+    var root = this.graph.getNode(this.clickedNode && this.clickedNode.id || this.root);
+    this.controller.onBeforeCompute(root);
+    var size = this.canvas.getSize(),
+        config = this.config,
+        width = size.width,
+        height = size.height;
+    this.graph.computeLevels(this.root, 0, "ignore");
+    //set root position and dimensions
+    root.getPos(prop).setc(-width/2, -height/2);
+    root.setData('width', width, prop);
+    root.setData('height', height + config.titleHeight, prop);
+    this.computePositions(root, root, this.layout.orientation, prop);
+    this.controller.onAfterCompute(root);
+  },
+  
+  computePositions: function(par, ch, orn, prop) {
+    //compute children areas
+    var totalArea = 0;
+    par.eachSubnode(function(n) {
+      totalArea += n.getData('area', prop);
+    });
+    
+    var config = this.config,
+        offst = config.offset,
+        width  = par.getData('width', prop),
+        height = Math.max(par.getData('height', prop) - config.titleHeight, 0),
+        fact = par == ch? 1 : (ch.getData('area', prop) / totalArea);
+
+    var otherSize, size, dim, pos, pos2, posth, pos2th;
+    var horizontal = (orn == "h");
+    if(horizontal) {
+      orn = 'v';
+      otherSize = height;
+      size = width * fact;
+      dim = 'height';
+      pos = 'y';
+      pos2 = 'x';
+      posth = config.titleHeight;
+      pos2th = 0;
+    } else {
+      orn = 'h';    
+      otherSize = height * fact;
+      size = width;
+      dim = 'width';
+      pos = 'x';
+      pos2 = 'y';
+      posth = 0;
+      pos2th = config.titleHeight;
+    }
+    var cpos = ch.getPos(prop);
+    ch.setData('width', size, prop);
+    ch.setData('height', otherSize, prop);
+    var offsetSize = 0, tm = this;
+    ch.eachSubnode(function(n) {
+      var p = n.getPos(prop);
+      p[pos] = offsetSize + cpos[pos] + posth;
+      p[pos2] = cpos[pos2] + pos2th;
+      tm.computePositions(ch, n, orn, prop);
+      offsetSize += n.getData(dim, prop);
+    });
+  }
+
+});
+
+Layouts.TM.Area = {
+ /*
+    Method: compute
+   Called by loadJSON to calculate recursively all node positions and lay out the tree.
+    Parameters:
+
+       json - A JSON tree. See also <Loader.loadJSON>.
+       coord - A coordinates object specifying width, height, left and top style properties.
+ */
+ compute: function(prop) {
+    prop = prop || "current";
+    var root = this.graph.getNode(this.clickedNode && this.clickedNode.id || this.root);
+    this.controller.onBeforeCompute(root);
+    var config = this.config,
+        size = this.canvas.getSize(),
+        width = size.width,
+        height = size.height,
+        offst = config.offset,
+        offwdth = width - offst,
+        offhght = height - offst;
+    this.graph.computeLevels(this.root, 0, "ignore");
+    //set root position and dimensions
+    root.getPos(prop).setc(-width/2, -height/2);
+    root.setData('width', width, prop);
+    root.setData('height', height, prop);
+    //create a coordinates object
+    var coord = {
+        'top': -height/2 + config.titleHeight,
+        'left': -width/2,
+        'width': offwdth,
+        'height': offhght - config.titleHeight
+    };
+    this.computePositions(root, coord, prop);
+    this.controller.onAfterCompute(root);
+ }, 
+ /*
+    Method: computeDim
+   Computes dimensions and positions of a group of nodes
+   according to a custom layout row condition. 
+    Parameters:
+
+       tail - An array of nodes.  
+       initElem - An array of nodes (containing the initial node to be laid).
+       w - A fixed dimension where nodes will be layed out.
+       coord - A coordinates object specifying width, height, left and top style properties.
+       comp - A custom comparison function
+ */
+ computeDim: function(tail, initElem, w, coord, comp, prop) {
+   if(tail.length + initElem.length == 1) {
+     var l = (tail.length == 1)? tail : initElem;
+     this.layoutLast(l, w, coord, prop);
+     return;
+   }
+   if(tail.length >= 2 && initElem.length == 0) {
+     initElem = [tail.shift()];
+   }
+   if(tail.length == 0) {
+     if(initElem.length > 0) this.layoutRow(initElem, w, coord, prop);
+     return;
+   }
+   var c = tail[0];
+   if(comp(initElem, w) >= comp([c].concat(initElem), w)) {
+     this.computeDim(tail.slice(1), initElem.concat([c]), w, coord, comp, prop);
+   } else {
+     var newCoords = this.layoutRow(initElem, w, coord, prop);
+     this.computeDim(tail, [], newCoords.dim, newCoords, comp, prop);
+   }
+ },
+
+ /*
+    Method: worstAspectRatio
+   Calculates the worst aspect ratio of a group of rectangles. 
+       
+    See also:
+       
+       <http://en.wikipedia.org/wiki/Aspect_ratio>
+   
+    Parameters:
+
+     ch - An array of nodes.  
+     w  - The fixed dimension where rectangles are being laid out.
+
+    Returns:
+        The worst aspect ratio.
+
+
+ */
+ worstAspectRatio: function(ch, w) {
+   if(!ch || ch.length == 0) return Number.MAX_VALUE;
+   var areaSum = 0, maxArea = 0, minArea = Number.MAX_VALUE;
+   for(var i=0, l=ch.length; i<l; i++) {
+     var area = ch[i]._area;
+     areaSum += area; 
+     minArea = minArea < area? minArea : area;
+     maxArea = maxArea > area? maxArea : area; 
+   }
+   var sqw = w * w, sqAreaSum = areaSum * areaSum;
+   return Math.max(sqw * maxArea / sqAreaSum,
+           sqAreaSum / (sqw * minArea));
+ },
+ /*
+    Method: avgAspectRatio
+   Calculates the average aspect ratio of a group of rectangles. 
+       
+       See also:
+       
+       <http://en.wikipedia.org/wiki/Aspect_ratio>
+   
+    Parameters:
+
+     ch - An array of nodes.  
+       w - The fixed dimension where rectangles are being laid out.
+
+    Returns:
+        The average aspect ratio.
+
+
+ */
+ avgAspectRatio: function(ch, w) {
+   if(!ch || ch.length == 0) return Number.MAX_VALUE;
+   var arSum = 0;
+   for(var i=0, l=ch.length; i<l; i++) {
+     var area = ch[i]._area;
+     var h = area / w;
+     arSum += w > h? w / h : h / w;
+   }
+   return arSum / l;
+ },
+
+ /*
+    layoutLast
+   Performs the layout of the last computed sibling.
+    Parameters:
+
+       ch - An array of nodes.  
+       w - A fixed dimension where nodes will be layed out.
+     coord - A coordinates object specifying width, height, left and top style properties.
+ */
+ layoutLast: function(ch, w, coord, prop) {
+   var child = ch[0];
+   child.getPos(prop).setc(coord.left, coord.top);
+   child.setData('width', coord.width, prop);
+   child.setData('height', coord.height, prop);
+ }
+};
+
+
+Layouts.TM.Squarified = new Class({
+ Implements: Layouts.TM.Area,
+ computePositions: function(node, coord, prop) {
+   var config = this.config, 
+       max = Math.max;
+   
+   if (coord.width >= coord.height) 
+     this.layout.orientation = 'h';
+   else
+     this.layout.orientation = 'v';
+   
+   var ch = node.getSubnodes([1, 1], "ignore");
+   if(ch.length > 0) {
+     this.processChildrenLayout(node, ch, coord, prop);
+     for(var i=0, l=ch.length; i<l; i++) {
+       var chi = ch[i], 
+           offst = config.offset,
+           height = max(chi.getData('height', prop) - offst - config.titleHeight, 0),
+           width = max(chi.getData('width', prop) - offst, 0),
+           chipos = chi.getPos(prop);
+
+       coord = {
+         'width': width,
+         'height': height,
+         'top': chipos.y + config.titleHeight,
+         'left': chipos.x
+       };
+       this.computePositions(chi, coord, prop);
+     }
+   }
+ },
+
+ /*
+    Method: processChildrenLayout
+   Computes children real areas and other useful parameters for performing the Squarified algorithm.
+    Parameters:
+
+       par - The parent node of the json subtree.  
+       ch - An Array of nodes
+     coord - A coordinates object specifying width, height, left and top style properties.
+ */
+ processChildrenLayout: function(par, ch, coord, prop) {
+   //compute children real areas
+   var parentArea = coord.width * coord.height;
+   var i, l=ch.length, totalChArea=0, chArea = [];
+   for(i=0; i<l; i++) {
+     chArea[i] = parseFloat(ch[i].getData('area', prop));
+     totalChArea += chArea[i];
+   }
+   for(i=0; i<l; i++) {
+     ch[i]._area = parentArea * chArea[i] / totalChArea;
+   }
+   var minimumSideValue = this.layout.horizontal()? coord.height : coord.width;
+   ch.sort(function(a, b) { 
+     var diff = b._area - a._area; 
+     return diff? diff : (b.id == a.id? 0 : (b.id < a.id? 1 : -1)); 
+   });
+   var initElem = [ch[0]];
+   var tail = ch.slice(1);
+   this.squarify(tail, initElem, minimumSideValue, coord, prop);
+ },
+
+ /*
+   Method: squarify
+   Performs an heuristic method to calculate div elements sizes in order to have a good aspect ratio.
+    Parameters:
+
+       tail - An array of nodes.  
+       initElem - An array of nodes, containing the initial node to be laid out.
+       w - A fixed dimension where nodes will be laid out.
+       coord - A coordinates object specifying width, height, left and top style properties.
+ */
+ squarify: function(tail, initElem, w, coord, prop) {
+   this.computeDim(tail, initElem, w, coord, this.worstAspectRatio, prop);
+ },
+ /*
+    Method: layoutRow
+   Performs the layout of an array of nodes.
+    Parameters:
+
+       ch - An array of nodes.  
+       w - A fixed dimension where nodes will be laid out.
+       coord - A coordinates object specifying width, height, left and top style properties.
+ */
+ layoutRow: function(ch, w, coord, prop) {
+   if(this.layout.horizontal()) {
+     return this.layoutV(ch, w, coord, prop);
+   } else {
+     return this.layoutH(ch, w, coord, prop);
+   }
+ },
+ layoutV: function(ch, w, coord, prop) {
+   var totalArea = 0, rnd = function(x) { return x; }; 
+   $.each(ch, function(elem) { totalArea += elem._area; });
+   var width = rnd(totalArea / w), top =  0; 
+   for(var i=0, l=ch.length; i<l; i++) {
+     var h = rnd(ch[i]._area / width);
+     var chi = ch[i];
+     chi.getPos(prop).setc(coord.left, coord.top + top);
+     chi.setData('width', width, prop);
+     chi.setData('height', h, prop);
+     top += h;
+   }
+   var ans = {
+     'height': coord.height,
+     'width': coord.width - width,
+     'top': coord.top,
+     'left': coord.left + width
+   };
+   //take minimum side value.
+   ans.dim = Math.min(ans.width, ans.height);
+   if(ans.dim != ans.height) this.layout.change();
+   return ans;
+ },
+ layoutH: function(ch, w, coord, prop) {
+   var totalArea = 0; 
+   $.each(ch, function(elem) { totalArea += elem._area; });
+   var height = totalArea / w,
+       top = coord.top, 
+       left = 0;
+   
+   for(var i=0, l=ch.length; i<l; i++) {
+     var chi = ch[i];
+     var w = chi._area / height;
+     chi.getPos(prop).setc(coord.left + left, top);
+     chi.setData('width', w, prop);
+     chi.setData('height', height, prop);
+     left += w;
+   }
+   var ans = {
+     'height': coord.height - height,
+     'width': coord.width,
+     'top': coord.top + height,
+     'left': coord.left
+   };
+   ans.dim = Math.min(ans.width, ans.height);
+   if(ans.dim != ans.width) this.layout.change();
+   return ans;
+ }
+});
+
+Layouts.TM.Strip = new Class({
+  Implements: Layouts.TM.Area,
+
+    /*
+      Method: compute
+    
+     Called by loadJSON to calculate recursively all node positions and lay out the tree.
+    
+      Parameters:
+    
+         json - A JSON subtree. See also <Loader.loadJSON>. 
+       coord - A coordinates object specifying width, height, left and top style properties.
+    */
+    computePositions: function(node, coord, prop) {
+     var  ch = node.getSubnodes([1, 1], "ignore"), 
+          config = this.config,
+          max = Math.max;
+     if(ch.length > 0) {
+       this.processChildrenLayout(node, ch, coord, prop);
+       for(var i=0, l=ch.length; i<l; i++) {
+         var chi = ch[i];
+         var offst = config.offset,
+             height = max(chi.getData('height', prop) - offst - config.titleHeight, 0),
+             width  = max(chi.getData('width', prop)  - offst, 0);
+         var chipos = chi.getPos(prop);
+         coord = {
+           'width': width,
+           'height': height,
+           'top': chipos.y + config.titleHeight,
+           'left': chipos.x
+         };
+         this.computePositions(chi, coord, prop);
+       }
+     }
+    },
+    
+    /*
+      Method: processChildrenLayout
+    
+     Computes children real areas and other useful parameters for performing the Strip algorithm.
+    
+      Parameters:
+    
+         par - The parent node of the json subtree.  
+         ch - An Array of nodes
+         coord - A coordinates object specifying width, height, left and top style properties.
+    */
+    processChildrenLayout: function(par, ch, coord, prop) {
+     //compute children real areas
+      var parentArea = coord.width * coord.height;
+      var i, l=ch.length, totalChArea=0, chArea = [];
+      for(i=0; i<l; i++) {
+        chArea[i] = +ch[i].getData('area', prop);
+        totalChArea += chArea[i];
+      }
+      for(i=0; i<l; i++) {
+        ch[i]._area = parentArea * chArea[i] / totalChArea;
+      }
+     var side = this.layout.horizontal()? coord.width : coord.height;
+     var initElem = [ch[0]];
+     var tail = ch.slice(1);
+     this.stripify(tail, initElem, side, coord, prop);
+    },
+    
+    /*
+      Method: stripify
+    
+     Performs an heuristic method to calculate div elements sizes in order to have 
+     a good compromise between aspect ratio and order.
+    
+      Parameters:
+    
+         tail - An array of nodes.  
+         initElem - An array of nodes.
+         w - A fixed dimension where nodes will be layed out.
+       coord - A coordinates object specifying width, height, left and top style properties.
+    */
+    stripify: function(tail, initElem, w, coord, prop) {
+     this.computeDim(tail, initElem, w, coord, this.avgAspectRatio, prop);
+    },
+    
+    /*
+      Method: layoutRow
+    
+     Performs the layout of an array of nodes.
+    
+      Parameters:
+    
+         ch - An array of nodes.  
+         w - A fixed dimension where nodes will be laid out.
+         coord - A coordinates object specifying width, height, left and top style properties.
+    */
+    layoutRow: function(ch, w, coord, prop) {
+     if(this.layout.horizontal()) {
+       return this.layoutH(ch, w, coord, prop);
+     } else {
+       return this.layoutV(ch, w, coord, prop);
+     }
+    },
+    
+    layoutV: function(ch, w, coord, prop) {
+     var totalArea = 0; 
+     $.each(ch, function(elem) { totalArea += elem._area; });
+     var width = totalArea / w, top =  0; 
+     for(var i=0, l=ch.length; i<l; i++) {
+       var chi = ch[i];
+       var h = chi._area / width;
+       chi.getPos(prop).setc(coord.left, 
+           coord.top + (w - h - top));
+       chi.setData('width', width, prop);
+       chi.setData('height', h, prop);
+       top += h;
+     }
+    
+     return {
+       'height': coord.height,
+       'width': coord.width - width,
+       'top': coord.top,
+       'left': coord.left + width,
+       'dim': w
+     };
+    },
+    
+    layoutH: function(ch, w, coord, prop) {
+     var totalArea = 0; 
+     $.each(ch, function(elem) { totalArea += elem._area; });
+     var height = totalArea / w,
+         top = coord.height - height, 
+         left = 0;
+     
+     for(var i=0, l=ch.length; i<l; i++) {
+       var chi = ch[i];
+       var s = chi._area / height;
+       chi.getPos(prop).setc(coord.left + left, coord.top + top);
+       chi.setData('width', s, prop);
+       chi.setData('height', height, prop);
+       left += s;
+     }
+     return {
+       'height': coord.height - height,
+       'width': coord.width,
+       'top': coord.top,
+       'left': coord.left,
+       'dim': w
+     };
+    }
+ });
+
+
+/*
+ * Class: Layouts.Icicle
+ *
+ * Implements the icicle tree layout.
+ *
+ * Implemented By:
+ *
+ * <Icicle>
+ *
+ */
+
+Layouts.Icicle = new Class({
+ /*
+  * Method: compute
+  *
+  * Called by loadJSON to calculate all node positions.
+  *
+  * Parameters:
+  *
+  * posType - The nodes' position to compute. Either "start", "end" or
+  *            "current". Defaults to "current".
+  */
+  compute: function(posType) {
+    posType = posType || "current";
+
+    var root = this.graph.getNode(this.root),
+        config = this.config,
+        size = this.canvas.getSize(),
+        width = size.width,
+        height = size.height,
+        offset = config.offset,
+        levelsToShow = config.constrained ? config.levelsToShow : Number.MAX_VALUE;
+
+    this.controller.onBeforeCompute(root);
+
+    Graph.Util.computeLevels(this.graph, root.id, 0, "ignore");
+
+    var treeDepth = 0;
+
+    Graph.Util.eachLevel(root, 0, false, function (n, d) { if(d > treeDepth) treeDepth = d; });
+
+    var startNode = this.graph.getNode(this.clickedNode && this.clickedNode.id || root.id);
+    var maxDepth = Math.min(treeDepth, levelsToShow-1);
+    var initialDepth = startNode._depth;
+    if(this.layout.horizontal()) {
+      this.computeSubtree(startNode, -width/2, -height/2, width/(maxDepth+1), height, initialDepth, maxDepth, posType);
+    } else {
+      this.computeSubtree(startNode, -width/2, -height/2, width, height/(maxDepth+1), initialDepth, maxDepth, posType);
+    }
+  },
+
+  computeSubtree: function (root, x, y, width, height, initialDepth, maxDepth, posType) {
+    root.getPos(posType).setc(x, y);
+    root.setData('width', width, posType);
+    root.setData('height', height, posType);
+
+    var nodeLength, prevNodeLength = 0, totalDim = 0;
+    var children = Graph.Util.getSubnodes(root, [1, 1], 'ignore'); // next level from this node
+
+    if(!children.length)
+      return;
+
+    $.each(children, function(e) { totalDim += e.getData('dim'); });
+
+    for(var i=0, l=children.length; i < l; i++) {
+      if(this.layout.horizontal()) {
+        nodeLength = height * children[i].getData('dim') / totalDim;
+        this.computeSubtree(children[i], x+width, y, width, nodeLength, initialDepth, maxDepth, posType);
+        y += nodeLength;
+      } else {
+        nodeLength = width * children[i].getData('dim') / totalDim;
+        this.computeSubtree(children[i], x, y+height, nodeLength, height, initialDepth, maxDepth, posType);
+        x += nodeLength;
+      }
+    }
+  }
+});
+
+
+
+/*
+ * File: Icicle.js
+ *
+*/
+
+/*
+  Class: Icicle
+  
+  Icicle space filling visualization.
+  
+  Implements:
+  
+  All <Loader> methods
+  
+  Constructor Options:
+  
+  Inherits options from
+  
+  - <Options.Canvas>
+  - <Options.Controller>
+  - <Options.Node>
+  - <Options.Edge>
+  - <Options.Label>
+  - <Options.Events>
+  - <Options.Tips>
+  - <Options.NodeStyles>
+  - <Options.Navigation>
+  
+  Additionally, there are other parameters and some default values changed
+
+  orientation - (string) Default's *h*. Whether to set horizontal or vertical layouts. Possible values are 'h' and 'v'.
+  offset - (number) Default's *2*. Boxes offset.
+  constrained - (boolean) Default's *false*. Whether to show the entire tree when loaded or just the number of levels specified by _levelsToShow_.
+  levelsToShow - (number) Default's *3*. The number of levels to show for a subtree. This number is relative to the selected node.
+  animate - (boolean) Default's *false*. Whether to animate transitions.
+  Node.type - Described in <Options.Node>. Default's *rectangle*.
+  Label.type - Described in <Options.Label>. Default's *Native*.
+  duration - Described in <Options.Fx>. Default's *700*.
+  fps - Described in <Options.Fx>. Default's *45*.
+  
+  Instance Properties:
+  
+  canvas - Access a <Canvas> instance.
+  graph - Access a <Graph> instance.
+  op - Access a <Icicle.Op> instance.
+  fx - Access a <Icicle.Plot> instance.
+  labels - Access a <Icicle.Label> interface implementation.
+
+*/
+
+$jit.Icicle = new Class({
+  Implements: [ Loader, Extras, Layouts.Icicle ],
+
+  layout: {
+    orientation: "h",
+    vertical: function(){
+      return this.orientation == "v";
+    },
+    horizontal: function(){
+      return this.orientation == "h";
+    },
+    change: function(){
+      this.orientation = this.vertical()? "h" : "v";
+    }
+  },
+
+  initialize: function(controller) {
+    var config = {
+      animate: false,
+      orientation: "h",
+      offset: 2,
+      levelsToShow: Number.MAX_VALUE,
+      constrained: false,
+      Node: {
+        type: 'rectangle',
+        overridable: true
+      },
+      Edge: {
+        type: 'none'
+      },
+      Label: {
+        type: 'Native'
+      },
+      duration: 700,
+      fps: 45
+    };
+
+    var opts = Options("Canvas", "Node", "Edge", "Fx", "Tips", "NodeStyles",
+                       "Events", "Navigation", "Controller", "Label");
+    this.controller = this.config = $.merge(opts, config, controller);
+    this.layout.orientation = this.config.orientation;
+
+    var canvasConfig = this.config;
+    if (canvasConfig.useCanvas) {
+      this.canvas = canvasConfig.useCanvas;
+      this.config.labelContainer = this.canvas.id + '-label';
+    } else {
+      this.canvas = new Canvas(this, canvasConfig);
+      this.config.labelContainer = (typeof canvasConfig.injectInto == 'string'? canvasConfig.injectInto : canvasConfig.injectInto.id) + '-label';
+    }
+
+    this.graphOptions = {
+      'klass': Complex,
+      'Node': {
+        'selected': false,
+        'exist': true,
+        'drawn': true
+      }
+    };
+
+    this.graph = new Graph(
+      this.graphOptions, this.config.Node, this.config.Edge, this.config.Label);
+
+    this.labels = new $jit.Icicle.Label[this.config.Label.type](this);
+    this.fx = new $jit.Icicle.Plot(this, $jit.Icicle);
+    this.op = new $jit.Icicle.Op(this);
+    this.group = new $jit.Icicle.Group(this);
+    this.clickedNode = null;
+
+    this.initializeExtras();
+  },
+
+  /* 
+    Method: refresh 
+    
+    Computes positions and plots the tree.
+  */
+  refresh: function(){
+    var labelType = this.config.Label.type;
+    if(labelType != 'Native') {
+      var that = this;
+      this.graph.eachNode(function(n) { that.labels.hideLabel(n, false); });
+    }
+    this.compute();
+    this.plot();
+  },
+
+  /* 
+    Method: plot 
+    
+    Plots the Icicle visualization. This is a shortcut to *fx.plot*. 
+  
+   */
+  plot: function(){
+    this.fx.plot(this.config);
+  },
+
+  /* 
+    Method: enter 
+    
+    Sets the node as root.
+    
+     Parameters:
+     
+     node - (object) A <Graph.Node>.
+  
+   */
+  enter: function (node) {
+    if (this.busy)
+      return;
+    this.busy = true;
+
+    var that = this,
+        config = this.config;
+
+    var callback = {
+      onComplete: function() {
+        //compute positions of newly inserted nodes
+        if(config.request)
+          that.compute();
+
+        if(config.animate) {
+          that.graph.nodeList.setDataset(['current', 'end'], {
+            'alpha': [1, 0] //fade nodes
+          });
+
+          Graph.Util.eachSubgraph(node, function(n) {
+            n.setData('alpha', 1, 'end');
+          }, "ignore");
+
+          that.fx.animate({
+            duration: 500,
+            modes:['node-property:alpha'],
+            onComplete: function() {
+              that.clickedNode = node;
+              that.compute('end');
+
+              that.fx.animate({
+                modes:['linear', 'node-property:width:height'],
+                duration: 1000,
+                onComplete: function() {
+                  that.busy = false;
+                  that.clickedNode = node;
+                }
+              });
+            }
+          });
+        } else {
+          that.clickedNode = node;
+          that.busy = false;
+          that.refresh();
+        }
+      }
+    };
+
+    if(config.request) {
+      this.requestNodes(clickedNode, callback);
+    } else {
+      callback.onComplete();
+    }
+  },
+
+  /* 
+    Method: out 
+    
+    Sets the parent node of the current selected node as root.
+  
+   */
+  out: function(){
+    if(this.busy)
+      return;
+
+    var that = this,
+        GUtil = Graph.Util,
+        config = this.config,
+        graph = this.graph,
+        parents = GUtil.getParents(graph.getNode(this.clickedNode && this.clickedNode.id || this.root)),
+        parent = parents[0],
+        clickedNode = parent,
+        previousClickedNode = this.clickedNode;
+
+    this.busy = true;
+    this.events.hoveredNode = false;
+
+    if(!parent) {
+      this.busy = false;
+      return;
+    }
+
+    //final plot callback
+    callback = {
+      onComplete: function() {
+        that.clickedNode = parent;
+        if(config.request) {
+          that.requestNodes(parent, {
+            onComplete: function() {
+              that.compute();
+              that.plot();
+              that.busy = false;
+            }
+          });
+        } else {
+          that.compute();
+          that.plot();
+          that.busy = false;
+        }
+      }
+    };
+
+    //animate node positions
+    if(config.animate) {
+      this.clickedNode = clickedNode;
+      this.compute('end');
+      //animate the visible subtree only
+      this.clickedNode = previousClickedNode;
+      this.fx.animate({
+        modes:['linear', 'node-property:width:height'],
+        duration: 1000,
+        onComplete: function() {
+          //animate the parent subtree
+          that.clickedNode = clickedNode;
+          //change nodes alpha
+          graph.nodeList.setDataset(['current', 'end'], {
+            'alpha': [0, 1]
+          });
+          GUtil.eachSubgraph(previousClickedNode, function(node) {
+            node.setData('alpha', 1);
+          }, "ignore");
+          that.fx.animate({
+            duration: 500,
+            modes:['node-property:alpha'],
+            onComplete: function() {
+              callback.onComplete();
+            }
+          });
+        }
+      });
+    } else {
+      callback.onComplete();
+    }
+  },
+  requestNodes: function(node, onComplete){
+    var handler = $.merge(this.controller, onComplete),
+        levelsToShow = this.config.constrained ? this.config.levelsToShow : Number.MAX_VALUE;
+
+    if (handler.request) {
+      var leaves = [], d = node._depth;
+      Graph.Util.eachLevel(node, 0, levelsToShow, function(n){
+        if (n.drawn && !Graph.Util.anySubnode(n)) {
+          leaves.push(n);
+          n._level = n._depth - d;
+          if (this.config.constrained)
+            n._level = levelsToShow - n._level;
+
+        }
+      });
+      this.group.requestNodes(leaves, handler);
+    } else {
+      handler.onComplete();
+    }
+  }
+});
+
+/*
+  Class: Icicle.Op
+  
+  Custom extension of <Graph.Op>.
+  
+  Extends:
+  
+  All <Graph.Op> methods
+  
+  See also:
+  
+  <Graph.Op>
+  
+  */
+$jit.Icicle.Op = new Class({
+
+  Implements: Graph.Op
+
+});
+
+/*
+ * Performs operations on group of nodes.
+ */
+$jit.Icicle.Group = new Class({
+
+  initialize: function(viz){
+    this.viz = viz;
+    this.canvas = viz.canvas;
+    this.config = viz.config;
+  },
+
+  /*
+   * Calls the request method on the controller to request a subtree for each node.
+   */
+  requestNodes: function(nodes, controller){
+    var counter = 0, len = nodes.length, nodeSelected = {};
+    var complete = function(){
+      controller.onComplete();
+    };
+    var viz = this.viz;
+    if (len == 0)
+      complete();
+    for(var i = 0; i < len; i++) {
+      nodeSelected[nodes[i].id] = nodes[i];
+      controller.request(nodes[i].id, nodes[i]._level, {
+        onComplete: function(nodeId, data){
+          if (data && data.children) {
+            data.id = nodeId;
+            viz.op.sum(data, {
+              type: 'nothing'
+            });
+          }
+          if (++counter == len) {
+            Graph.Util.computeLevels(viz.graph, viz.root, 0);
+            complete();
+          }
+        }
+      });
+    }
+  }
+});
+
+/*
+  Class: Icicle.Plot
+  
+  Custom extension of <Graph.Plot>.
+  
+  Extends:
+  
+  All <Graph.Plot> methods
+  
+  See also:
+  
+  <Graph.Plot>
+  
+  */
+$jit.Icicle.Plot = new Class({
+  Implements: Graph.Plot,
+
+  plot: function(opt, animating){
+    opt = opt || this.viz.controller;
+    var viz = this.viz,
+        graph = viz.graph,
+        root = graph.getNode(viz.clickedNode && viz.clickedNode.id || viz.root),
+        initialDepth = root._depth;
+
+    viz.canvas.clear();
+    this.plotTree(root, $.merge(opt, {
+      'withLabels': true,
+      'hideLabels': false,
+      'plotSubtree': function(root, node) {
+        return !viz.config.constrained ||
+               (node._depth - initialDepth < viz.config.levelsToShow);
+      }
+    }), animating);
+  }
+});
+
+/*
+  Class: Icicle.Label
+  
+  Custom extension of <Graph.Label>. 
+  Contains custom <Graph.Label.SVG>, <Graph.Label.HTML> and <Graph.Label.Native> extensions.
+  
+  Extends:
+  
+  All <Graph.Label> methods and subclasses.
+  
+  See also:
+  
+  <Graph.Label>, <Graph.Label.Native>, <Graph.Label.HTML>, <Graph.Label.SVG>.
+  
+  */
+$jit.Icicle.Label = {};
+
+/*
+  Icicle.Label.Native
+  
+  Custom extension of <Graph.Label.Native>.
+  
+  Extends:
+  
+  All <Graph.Label.Native> methods
+  
+  See also:
+  
+  <Graph.Label.Native>
+
+  */
+$jit.Icicle.Label.Native = new Class({
+  Implements: Graph.Label.Native,
+
+  renderLabel: function(canvas, node, controller) {
+    var ctx = canvas.getCtx(),
+        width = node.getData('width'),
+        height = node.getData('height'),
+        size = node.getLabelData('size'),
+        m = ctx.measureText(node.name);
+
+    // Guess as much as possible if the label will fit in the node
+    if(height < (size * 1.5) || width < m.width)
+      return;
+
+    var pos = node.pos.getc(true);
+    ctx.fillText(node.name,
+                 pos.x + width / 2,
+                 pos.y + height / 2);
+  }
+});
+
+/*
+  Icicle.Label.SVG
+  
+  Custom extension of <Graph.Label.SVG>.
+  
+  Extends:
+  
+  All <Graph.Label.SVG> methods
+  
+  See also:
+  
+  <Graph.Label.SVG>
+*/
+$jit.Icicle.Label.SVG = new Class( {
+  Implements: Graph.Label.SVG,
+
+  initialize: function(viz){
+    this.viz = viz;
+  },
+
+  /*
+    placeLabel
+   
+    Overrides abstract method placeLabel in <Graph.Plot>.
+   
+    Parameters:
+   
+    tag - A DOM label element.
+    node - A <Graph.Node>.
+    controller - A configuration/controller object passed to the visualization.
+   */
+  placeLabel: function(tag, node, controller){
+    var pos = node.pos.getc(true), canvas = this.viz.canvas;
+    var radius = canvas.getSize();
+    var labelPos = {
+      x: Math.round(pos.x + radius.width / 2),
+      y: Math.round(pos.y + radius.height / 2)
+    };
+    tag.setAttribute('x', labelPos.x);
+    tag.setAttribute('y', labelPos.y);
+
+    controller.onPlaceLabel(tag, node);
+  }
+});
+
+/*
+  Icicle.Label.HTML
+  
+  Custom extension of <Graph.Label.HTML>.
+  
+  Extends:
+  
+  All <Graph.Label.HTML> methods.
+  
+  See also:
+  
+  <Graph.Label.HTML>
+  
+  */
+$jit.Icicle.Label.HTML = new Class( {
+  Implements: Graph.Label.HTML,
+
+  initialize: function(viz){
+    this.viz = viz;
+  },
+
+  /*
+    placeLabel
+   
+    Overrides abstract method placeLabel in <Graph.Plot>.
+   
+    Parameters:
+   
+    tag - A DOM label element.
+    node - A <Graph.Node>.
+    controller - A configuration/controller object passed to the visualization.
+   */
+  placeLabel: function(tag, node, controller){
+    var pos = node.pos.getc(true), canvas = this.viz.canvas;
+    var radius = canvas.getSize();
+    var labelPos = {
+      x: Math.round(pos.x + radius.width / 2),
+      y: Math.round(pos.y + radius.height / 2)
+    };
+
+    var style = tag.style;
+    style.left = labelPos.x + 'px';
+    style.top = labelPos.y + 'px';
+    style.display = '';
+
+    controller.onPlaceLabel(tag, node);
+  }
+});
+
+/*
+  Class: Icicle.Plot.NodeTypes
+  
+  This class contains a list of <Graph.Node> built-in types. 
+  Node types implemented are 'none', 'rectangle'.
+  
+  You can add your custom node types, customizing your visualization to the extreme.
+  
+  Example:
+  
+  (start code js)
+    Icicle.Plot.NodeTypes.implement({
+      'mySpecialType': {
+        'render': function(node, canvas) {
+          //print your custom node to canvas
+        },
+        //optional
+        'contains': function(node, pos) {
+          //return true if pos is inside the node or false otherwise
+        }
+      }
+    });
+  (end code)
+  
+  */
+$jit.Icicle.Plot.NodeTypes = new Class( {
+  'none': {
+    'render': $.empty
+  },
+
+  'rectangle': {
+    'render': function(node, canvas, animating) {
+      var config = this.viz.config;
+      var offset = config.offset;
+      var width = node.getData('width');
+      var height = node.getData('height');
+      var border = node.getData('border');
+      var pos = node.pos.getc(true);
+      var posx = pos.x + offset / 2, posy = pos.y + offset / 2;
+      var ctx = canvas.getCtx();
+      
+      if(width - offset < 2 || height - offset < 2) return;
+      
+      if(config.cushion) {
+        var color = node.getData('color');
+        var lg = ctx.createRadialGradient(posx + (width - offset)/2, 
+                                          posy + (height - offset)/2, 1, 
+                                          posx + (width-offset)/2, posy + (height-offset)/2, 
+                                          width < height? height : width);
+        var colorGrad = $.rgbToHex($.map($.hexToRgb(color), 
+            function(r) { return r * 0.3 >> 0; }));
+        lg.addColorStop(0, color);
+        lg.addColorStop(1, colorGrad);
+        ctx.fillStyle = lg;
+      }
+
+      if (border) {
+        ctx.strokeStyle = border;
+        ctx.lineWidth = 3;
+      }
+
+      ctx.fillRect(posx, posy, Math.max(0, width - offset), Math.max(0, height - offset));
+      border && ctx.strokeRect(pos.x, pos.y, width, height);
+    },
+
+    'contains': function(node, pos) {
+      if(this.viz.clickedNode && !$jit.Graph.Util.isDescendantOf(node, this.viz.clickedNode.id)) return false;
+      var npos = node.pos.getc(true),
+          width = node.getData('width'),
+          height = node.getData('height');
+      return this.nodeHelper.rectangle.contains({x: npos.x + width/2, y: npos.y + height/2}, pos, width, height);
+    }
+  }
+});
+
+$jit.Icicle.Plot.EdgeTypes = new Class( {
+  'none': $.empty
+});
+
+
+
+/*
+ * File: Layouts.ForceDirected.js
+ *
+*/
+
+/*
+ * Class: Layouts.ForceDirected
+ * 
+ * Implements a Force Directed Layout.
+ * 
+ * Implemented By:
+ * 
+ * <ForceDirected>
+ * 
+ * Credits:
+ * 
+ * Marcus Cobden <http://marcuscobden.co.uk>
+ * 
+ */
+Layouts.ForceDirected = new Class({
+
+  getOptions: function(random) {
+    var s = this.canvas.getSize();
+    var w = s.width, h = s.height;
+    //count nodes
+    var count = 0;
+    this.graph.eachNode(function(n) { 
+      count++;
+    });
+    var k2 = w * h / count, k = Math.sqrt(k2);
+    var l = this.config.levelDistance;
+    
+    return {
+      width: w,
+      height: h,
+      tstart: w * 0.1,
+      nodef: function(x) { return k2 / (x || 1); },
+      edgef: function(x) { return /* x * x / k; */ k * (x - l); }
+    };
+  },
+  
+  compute: function(property, incremental) {
+    var prop = $.splat(property || ['current', 'start', 'end']);
+    var opt = this.getOptions();
+    NodeDim.compute(this.graph, prop, this.config);
+    this.graph.computeLevels(this.root, 0, "ignore");
+    this.graph.eachNode(function(n) {
+      $.each(prop, function(p) {
+        var pos = n.getPos(p);
+        if(pos.equals(Complex.KER)) {
+          pos.x = opt.width/5 * (Math.random() - 0.5);
+          pos.y = opt.height/5 * (Math.random() - 0.5);
+        }
+        //initialize disp vector
+        n.disp = {};
+        $.each(prop, function(p) {
+          n.disp[p] = $C(0, 0);
+        });
+      });
+    });
+    this.computePositions(prop, opt, incremental);
+  },
+  
+  computePositions: function(property, opt, incremental) {
+    var times = this.config.iterations, i = 0, that = this;
+    if(incremental) {
+      (function iter() {
+        for(var total=incremental.iter, j=0; j<total; j++) {
+          opt.t = opt.tstart;
+          if(times) opt.t *= (1 - i++/(times -1));
+          that.computePositionStep(property, opt);
+          if(times && i >= times) {
+            incremental.onComplete();
+            return;
+          }
+        }
+        incremental.onStep(Math.round(i / (times -1) * 100));
+        setTimeout(iter, 1);
+      })();
+    } else {
+      for(; i < times; i++) {
+        opt.t = opt.tstart * (1 - i/(times -1));
+        this.computePositionStep(property, opt);
+      }
+    }
+  },
+  
+  computePositionStep: function(property, opt) {
+    var graph = this.graph;
+    var min = Math.min, max = Math.max;
+    var dpos = $C(0, 0);
+    //calculate repulsive forces
+    graph.eachNode(function(v) {
+      //initialize disp
+      $.each(property, function(p) {
+        v.disp[p].x = 0; v.disp[p].y = 0;
+      });
+      graph.eachNode(function(u) {
+        if(u.id != v.id) {
+          $.each(property, function(p) {
+            var vp = v.getPos(p), up = u.getPos(p);
+            dpos.x = vp.x - up.x;
+            dpos.y = vp.y - up.y;
+            var norm = dpos.norm() || 1;
+            v.disp[p].$add(dpos
+                .$scale(opt.nodef(norm) / norm));
+          });
+        }
+      });
+    });
+    //calculate attractive forces
+    var T = !!graph.getNode(this.root).visited;
+    graph.eachNode(function(node) {
+      node.eachAdjacency(function(adj) {
+        var nodeTo = adj.nodeTo;
+        if(!!nodeTo.visited === T) {
+          $.each(property, function(p) {
+            var vp = node.getPos(p), up = nodeTo.getPos(p);
+            dpos.x = vp.x - up.x;
+            dpos.y = vp.y - up.y;
+            var norm = dpos.norm() || 1;
+            node.disp[p].$add(dpos.$scale(-opt.edgef(norm) / norm));
+            nodeTo.disp[p].$add(dpos.$scale(-1));
+          });
+        }
+      });
+      node.visited = !T;
+    });
+    //arrange positions to fit the canvas
+    var t = opt.t, w2 = opt.width / 2, h2 = opt.height / 2;
+    graph.eachNode(function(u) {
+      $.each(property, function(p) {
+        var disp = u.disp[p];
+        var norm = disp.norm() || 1;
+        var p = u.getPos(p);
+        p.$add($C(disp.x * min(Math.abs(disp.x), t) / norm, 
+            disp.y * min(Math.abs(disp.y), t) / norm));
+        p.x = min(w2, max(-w2, p.x));
+        p.y = min(h2, max(-h2, p.y));
+      });
+    });
+  }
+});
+
+/*
+ * File: ForceDirected.js
+ */
+
+/*
+   Class: ForceDirected
+      
+   A visualization that lays graphs using a Force-Directed layout algorithm.
+   
+   Inspired by:
+  
+   Force-Directed Drawing Algorithms (Stephen G. Kobourov) <http://www.cs.brown.edu/~rt/gdhandbook/chapters/force-directed.pdf>
+   
+  Implements:
+  
+  All <Loader> methods
+  
+   Constructor Options:
+   
+   Inherits options from
+   
+   - <Options.Canvas>
+   - <Options.Controller>
+   - <Options.Node>
+   - <Options.Edge>
+   - <Options.Label>
+   - <Options.Events>
+   - <Options.Tips>
+   - <Options.NodeStyles>
+   - <Options.Navigation>
+   
+   Additionally, there are two parameters
+   
+   levelDistance - (number) Default's *50*. The natural length desired for the edges.
+   iterations - (number) Default's *50*. The number of iterations for the spring layout simulation. Depending on the browser's speed you could set this to a more 'interesting' number, like *200*. 
+     
+   Instance Properties:
+
+   canvas - Access a <Canvas> instance.
+   graph - Access a <Graph> instance.
+   op - Access a <ForceDirected.Op> instance.
+   fx - Access a <ForceDirected.Plot> instance.
+   labels - Access a <ForceDirected.Label> interface implementation.
+
+*/
+
+$jit.ForceDirected = new Class( {
+
+  Implements: [ Loader, Extras, Layouts.ForceDirected ],
+
+  initialize: function(controller) {
+    var $ForceDirected = $jit.ForceDirected;
+
+    var config = {
+      iterations: 50,
+      levelDistance: 50
+    };
+
+    this.controller = this.config = $.merge(Options("Canvas", "Node", "Edge",
+        "Fx", "Tips", "NodeStyles", "Events", "Navigation", "Controller", "Label"), config, controller);
+
+    var canvasConfig = this.config;
+    if(canvasConfig.useCanvas) {
+      this.canvas = canvasConfig.useCanvas;
+      this.config.labelContainer = this.canvas.id + '-label';
+    } else {
+      if(canvasConfig.background) {
+        canvasConfig.background = $.merge({
+          type: 'Circles'
+        }, canvasConfig.background);
+      }
+      this.canvas = new Canvas(this, canvasConfig);
+      this.config.labelContainer = (typeof canvasConfig.injectInto == 'string'? canvasConfig.injectInto : canvasConfig.injectInto.id) + '-label';
+    }
+
+    this.graphOptions = {
+      'klass': Complex,
+      'Node': {
+        'selected': false,
+        'exist': true,
+        'drawn': true
+      }
+    };
+    this.graph = new Graph(this.graphOptions, this.config.Node,
+        this.config.Edge);
+    this.labels = new $ForceDirected.Label[canvasConfig.Label.type](this);
+    this.fx = new $ForceDirected.Plot(this, $ForceDirected);
+    this.op = new $ForceDirected.Op(this);
+    this.json = null;
+    this.busy = false;
+    // initialize extras
+    this.initializeExtras();
+  },
+
+  /* 
+    Method: refresh 
+    
+    Computes positions and plots the tree.
+  */
+  refresh: function() {
+    this.compute();
+    this.plot();
+  },
+
+  reposition: function() {
+    this.compute('end');
+  },
+
+/*
+  Method: computeIncremental
+  
+  Performs the Force Directed algorithm incrementally.
+  
+  Description:
+  
+  ForceDirected algorithms can perform many computations and lead to JavaScript taking too much time to complete. 
+  This method splits the algorithm into smaller parts allowing the user to track the evolution of the algorithm and 
+  avoiding browser messages such as "This script is taking too long to complete".
+  
+  Parameters:
+  
+  opt - (object) The object properties are described below
+  
+  iter - (number) Default's *20*. Split the algorithm into pieces of _iter_ iterations. For example, if the _iterations_ configuration property 
+  of your <ForceDirected> class is 100, then you could set _iter_ to 20 to split the main algorithm into 5 smaller pieces.
+  
+  property - (string) Default's *end*. Whether to update starting, current or ending node positions. Possible values are 'end', 'start', 'current'. 
+  You can also set an array of these properties. If you'd like to keep the current node positions but to perform these 
+  computations for final animation positions then you can just choose 'end'.
+  
+  onStep - (function) A callback function called when each "small part" of the algorithm completed. This function gets as first formal 
+  parameter a percentage value.
+  
+  onComplete - A callback function called when the algorithm completed.
+  
+  Example:
+  
+  In this example I calculate the end positions and then animate the graph to those positions
+  
+  (start code js)
+  var fd = new $jit.ForceDirected(...);
+  fd.computeIncremental({
+    iter: 20,
+    property: 'end',
+    onStep: function(perc) {
+      Log.write("loading " + perc + "%");
+    },
+    onComplete: function() {
+      Log.write("done");
+      fd.animate();
+    }
+  });
+  (end code)
+  
+  In this example I calculate all positions and (re)plot the graph
+  
+  (start code js)
+  var fd = new ForceDirected(...);
+  fd.computeIncremental({
+    iter: 20,
+    property: ['end', 'start', 'current'],
+    onStep: function(perc) {
+      Log.write("loading " + perc + "%");
+    },
+    onComplete: function() {
+      Log.write("done");
+      fd.plot();
+    }
+  });
+  (end code)
+  
+  */
+  computeIncremental: function(opt) {
+    opt = $.merge( {
+      iter: 20,
+      property: 'end',
+      onStep: $.empty,
+      onComplete: $.empty
+    }, opt || {});
+
+    this.config.onBeforeCompute(this.graph.getNode(this.root));
+    this.compute(opt.property, opt);
+  },
+
+  /*
+    Method: plot
+   
+    Plots the ForceDirected graph. This is a shortcut to *fx.plot*.
+   */
+  plot: function() {
+    this.fx.plot();
+  },
+
+  /*
+     Method: animate
+    
+     Animates the graph from the current positions to the 'end' node positions.
+  */
+  animate: function(opt) {
+    this.fx.animate($.merge( {
+      modes: [ 'linear' ]
+    }, opt || {}));
+  }
+});
+
+$jit.ForceDirected.$extend = true;
+
+(function(ForceDirected) {
+
+  /*
+     Class: ForceDirected.Op
+     
+     Custom extension of <Graph.Op>.
+
+     Extends:
+
+     All <Graph.Op> methods
+     
+     See also:
+     
+     <Graph.Op>
+
+  */
+  ForceDirected.Op = new Class( {
+
+    Implements: Graph.Op
+
+  });
+
+  /*
+    Class: ForceDirected.Plot
+    
+    Custom extension of <Graph.Plot>.
+  
+    Extends:
+  
+    All <Graph.Plot> methods
+    
+    See also:
+    
+    <Graph.Plot>
+  
+  */
+  ForceDirected.Plot = new Class( {
+
+    Implements: Graph.Plot
+
+  });
+
+  /*
+    Class: ForceDirected.Label
+    
+    Custom extension of <Graph.Label>. 
+    Contains custom <Graph.Label.SVG>, <Graph.Label.HTML> and <Graph.Label.Native> extensions.
+  
+    Extends:
+  
+    All <Graph.Label> methods and subclasses.
+  
+    See also:
+  
+    <Graph.Label>, <Graph.Label.Native>, <Graph.Label.HTML>, <Graph.Label.SVG>.
+  
+  */
+  ForceDirected.Label = {};
+
+  /*
+     ForceDirected.Label.Native
+     
+     Custom extension of <Graph.Label.Native>.
+
+     Extends:
+
+     All <Graph.Label.Native> methods
+
+     See also:
+
+     <Graph.Label.Native>
+
+  */
+  ForceDirected.Label.Native = new Class( {
+    Implements: Graph.Label.Native
+  });
+
+  /*
+    ForceDirected.Label.SVG
+    
+    Custom extension of <Graph.Label.SVG>.
+  
+    Extends:
+  
+    All <Graph.Label.SVG> methods
+  
+    See also:
+  
+    <Graph.Label.SVG>
+  
+  */
+  ForceDirected.Label.SVG = new Class( {
+    Implements: Graph.Label.SVG,
+
+    initialize: function(viz) {
+      this.viz = viz;
+    },
+
+    /* 
+       placeLabel
+
+       Overrides abstract method placeLabel in <Graph.Label>.
+
+       Parameters:
+
+       tag - A DOM label element.
+       node - A <Graph.Node>.
+       controller - A configuration/controller object passed to the visualization.
+      
+     */
+    placeLabel: function(tag, node, controller) {
+      var pos = node.pos.getc(true), 
+          canvas = this.viz.canvas,
+          ox = canvas.translateOffsetX,
+          oy = canvas.translateOffsetY,
+          sx = canvas.scaleOffsetX,
+          sy = canvas.scaleOffsetY,
+          radius = canvas.getSize();
+      var labelPos = {
+        x: Math.round(pos.x * sx + ox + radius.width / 2),
+        y: Math.round(pos.y * sy + oy + radius.height / 2)
+      };
+      tag.setAttribute('x', labelPos.x);
+      tag.setAttribute('y', labelPos.y);
+
+      controller.onPlaceLabel(tag, node);
+    }
+  });
+
+  /*
+     ForceDirected.Label.HTML
+     
+     Custom extension of <Graph.Label.HTML>.
+
+     Extends:
+
+     All <Graph.Label.HTML> methods.
+
+     See also:
+
+     <Graph.Label.HTML>
+
+  */
+  ForceDirected.Label.HTML = new Class( {
+    Implements: Graph.Label.HTML,
+
+    initialize: function(viz) {
+      this.viz = viz;
+    },
+    /* 
+       placeLabel
+
+       Overrides abstract method placeLabel in <Graph.Plot>.
+
+       Parameters:
+
+       tag - A DOM label element.
+       node - A <Graph.Node>.
+       controller - A configuration/controller object passed to the visualization.
+      
+     */
+    placeLabel: function(tag, node, controller) {
+      var pos = node.pos.getc(true), 
+          canvas = this.viz.canvas,
+          ox = canvas.translateOffsetX,
+          oy = canvas.translateOffsetY,
+          sx = canvas.scaleOffsetX,
+          sy = canvas.scaleOffsetY,
+          radius = canvas.getSize();
+      var labelPos = {
+        x: Math.round(pos.x * sx + ox + radius.width / 2),
+        y: Math.round(pos.y * sy + oy + radius.height / 2)
+      };
+      var style = tag.style;
+      style.left = labelPos.x + 'px';
+      style.top = labelPos.y + 'px';
+      style.display = this.fitsInCanvas(labelPos, canvas) ? '' : 'none';
+
+      controller.onPlaceLabel(tag, node);
+    }
+  });
+
+  /*
+    Class: ForceDirected.Plot.NodeTypes
+
+    This class contains a list of <Graph.Node> built-in types. 
+    Node types implemented are 'none', 'circle', 'triangle', 'rectangle', 'star', 'ellipse' and 'square'.
+
+    You can add your custom node types, customizing your visualization to the extreme.
+
+    Example:
+
+    (start code js)
+      ForceDirected.Plot.NodeTypes.implement({
+        'mySpecialType': {
+          'render': function(node, canvas) {
+            //print your custom node to canvas
+          },
+          //optional
+          'contains': function(node, pos) {
+            //return true if pos is inside the node or false otherwise
+          }
+        }
+      });
+    (end code)
+
+  */
+  ForceDirected.Plot.NodeTypes = new Class({
+    'none': {
+      'render': $.empty,
+      'contains': $.lambda(false)
+    },
+    'circle': {
+      'render': function(node, canvas){
+        var pos = node.pos.getc(true), 
+            dim = node.getData('dim');
+        this.nodeHelper.circle.render('fill', pos, dim, canvas);
+      },
+      'contains': function(node, pos){
+        var npos = node.pos.getc(true), 
+            dim = node.getData('dim');
+        return this.nodeHelper.circle.contains(npos, pos, dim);
+      }
+    },
+    'ellipse': {
+      'render': function(node, canvas){
+        var pos = node.pos.getc(true), 
+            width = node.getData('width'), 
+            height = node.getData('height');
+        this.nodeHelper.ellipse.render('fill', pos, width, height, canvas);
+        },
+      'contains': function(node, pos){
+        var npos = node.pos.getc(true), 
+            width = node.getData('width'), 
+            height = node.getData('height');
+        return this.nodeHelper.ellipse.contains(npos, pos, width, height);
+      }
+    },
+    'square': {
+      'render': function(node, canvas){
+        var pos = node.pos.getc(true), 
+            dim = node.getData('dim');
+        this.nodeHelper.square.render('fill', pos, dim, canvas);
+      },
+      'contains': function(node, pos){
+        var npos = node.pos.getc(true), 
+            dim = node.getData('dim');
+        return this.nodeHelper.square.contains(npos, pos, dim);
+      }
+    },
+    'rectangle': {
+      'render': function(node, canvas){
+        var pos = node.pos.getc(true), 
+            width = node.getData('width'), 
+            height = node.getData('height');
+        this.nodeHelper.rectangle.render('fill', pos, width, height, canvas);
+      },
+      'contains': function(node, pos){
+        var npos = node.pos.getc(true), 
+            width = node.getData('width'), 
+            height = node.getData('height');
+        return this.nodeHelper.rectangle.contains(npos, pos, width, height);
+      }
+    },
+    'triangle': {
+      'render': function(node, canvas){
+        var pos = node.pos.getc(true), 
+            dim = node.getData('dim');
+        this.nodeHelper.triangle.render('fill', pos, dim, canvas);
+      },
+      'contains': function(node, pos) {
+        var npos = node.pos.getc(true), 
+            dim = node.getData('dim');
+        return this.nodeHelper.triangle.contains(npos, pos, dim);
+      }
+    },
+    'star': {
+      'render': function(node, canvas){
+        var pos = node.pos.getc(true),
+            dim = node.getData('dim');
+        this.nodeHelper.star.render('fill', pos, dim, canvas);
+      },
+      'contains': function(node, pos) {
+        var npos = node.pos.getc(true),
+            dim = node.getData('dim');
+        return this.nodeHelper.star.contains(npos, pos, dim);
+      }
+    }
+  });
+
+  /*
+    Class: ForceDirected.Plot.EdgeTypes
+  
+    This class contains a list of <Graph.Adjacence> built-in types. 
+    Edge types implemented are 'none', 'line' and 'arrow'.
+  
+    You can add your custom edge types, customizing your visualization to the extreme.
+  
+    Example:
+  
+    (start code js)
+      ForceDirected.Plot.EdgeTypes.implement({
+        'mySpecialType': {
+          'render': function(adj, canvas) {
+            //print your custom edge to canvas
+          },
+          //optional
+          'contains': function(adj, pos) {
+            //return true if pos is inside the arc or false otherwise
+          }
+        }
+      });
+    (end code)
+  
+  */
+  ForceDirected.Plot.EdgeTypes = new Class({
+    'none': $.empty,
+    'line': {
+      'render': function(adj, canvas) {
+        var from = adj.nodeFrom.pos.getc(true),
+            to = adj.nodeTo.pos.getc(true);
+        this.edgeHelper.line.render(from, to, canvas);
+      },
+      'contains': function(adj, pos) {
+        var from = adj.nodeFrom.pos.getc(true),
+            to = adj.nodeTo.pos.getc(true);
+        return this.edgeHelper.line.contains(from, to, pos, this.edge.epsilon);
+      }
+    },
+    'arrow': {
+      'render': function(adj, canvas) {
+        var from = adj.nodeFrom.pos.getc(true),
+            to = adj.nodeTo.pos.getc(true),
+            dim = adj.getData('dim'),
+            direction = adj.data.$direction,
+            inv = (direction && direction.length>1 && direction[0] != adj.nodeFrom.id);
+        this.edgeHelper.arrow.render(from, to, dim, inv, canvas);
+      },
+      'contains': function(adj, pos) {
+        var from = adj.nodeFrom.pos.getc(true),
+            to = adj.nodeTo.pos.getc(true);
+        return this.edgeHelper.arrow.contains(from, to, pos, this.edge.epsilon);
+      }
+    }
+  });
+
+})($jit.ForceDirected);
+
+
+/*
+ * File: Treemap.js
+ *
+*/
+
+$jit.TM = {};
+
+var TM = $jit.TM;
+
+$jit.TM.$extend = true;
+
+/*
+  Class: TM.Base
+  
+  Abstract class providing base functionality for <TM.Squarified>, <TM.Strip> and <TM.SliceAndDice> visualizations.
+  
+  Implements:
+  
+  All <Loader> methods
+  
+  Constructor Options:
+  
+  Inherits options from
+  
+  - <Options.Canvas>
+  - <Options.Controller>
+  - <Options.Node>
+  - <Options.Edge>
+  - <Options.Label>
+  - <Options.Events>
+  - <Options.Tips>
+  - <Options.NodeStyles>
+  - <Options.Navigation>
+  
+  Additionally, there are other parameters and some default values changed
+
+  orientation - (string) Default's *h*. Whether to set horizontal or vertical layouts. Possible values are 'h' and 'v'.
+  titleHeight - (number) Default's *13*. The height of the title rectangle for inner (non-leaf) nodes.
+  offset - (number) Default's *2*. Boxes offset.
+  constrained - (boolean) Default's *false*. Whether to show the entire tree when loaded or just the number of levels specified by _levelsToShow_.
+  levelsToShow - (number) Default's *3*. The number of levels to show for a subtree. This number is relative to the selected node.
+  animate - (boolean) Default's *false*. Whether to animate transitions.
+  Node.type - Described in <Options.Node>. Default's *rectangle*.
+  duration - Described in <Options.Fx>. Default's *700*.
+  fps - Described in <Options.Fx>. Default's *45*.
+  
+  Instance Properties:
+  
+  canvas - Access a <Canvas> instance.
+  graph - Access a <Graph> instance.
+  op - Access a <TM.Op> instance.
+  fx - Access a <TM.Plot> instance.
+  labels - Access a <TM.Label> interface implementation.
+
+  Inspired by:
+  
+  Squarified Treemaps (Mark Bruls, Kees Huizing, and Jarke J. van Wijk) <http://www.win.tue.nl/~vanwijk/stm.pdf>
+  
+  Tree visualization with tree-maps: 2-d space-filling approach (Ben Shneiderman) <http://hcil.cs.umd.edu/trs/91-03/91-03.html>
+  
+   Note:
+   
+   This visualization was built and engineered from scratch, taking only the paper as inspiration, and only shares some features with the visualization described in the paper.
+
+*/
+TM.Base = {
+  layout: {
+    orientation: "h",
+    vertical: function(){
+      return this.orientation == "v";
+    },
+    horizontal: function(){
+      return this.orientation == "h";
+    },
+    change: function(){
+      this.orientation = this.vertical()? "h" : "v";
+    }
+  },
+
+  initialize: function(controller){
+    var config = {
+      orientation: "h",
+      titleHeight: 13,
+      offset: 2,
+      levelsToShow: 0,
+      constrained: false,
+      animate: false,
+      Node: {
+        type: 'rectangle',
+        overridable: true,
+        //we all know why this is not zero,
+        //right, Firefox?
+        width: 3,
+        height: 3,
+        color: '#444'
+      },
+      Label: {
+        textAlign: 'center',
+        textBaseline: 'top'
+      },
+      Edge: {
+        type: 'none'
+      },
+      duration: 700,
+      fps: 45
+    };
+
+    this.controller = this.config = $.merge(Options("Canvas", "Node", "Edge",
+        "Fx", "Controller", "Tips", "NodeStyles", "Events", "Navigation", "Label"), config, controller);
+    this.layout.orientation = this.config.orientation;
+
+    var canvasConfig = this.config;
+    if (canvasConfig.useCanvas) {
+      this.canvas = canvasConfig.useCanvas;
+      this.config.labelContainer = this.canvas.id + '-label';
+    } else {
+      if(canvasConfig.background) {
+        canvasConfig.background = $.merge({
+          type: 'Circles'
+        }, canvasConfig.background);
+      }
+      this.canvas = new Canvas(this, canvasConfig);
+      this.config.labelContainer = (typeof canvasConfig.injectInto == 'string'? canvasConfig.injectInto : canvasConfig.injectInto.id) + '-label';
+    }
+
+    this.graphOptions = {
+      'klass': Complex,
+      'Node': {
+        'selected': false,
+        'exist': true,
+        'drawn': true
+      }
+    };
+    this.graph = new Graph(this.graphOptions, this.config.Node,
+        this.config.Edge);
+    this.labels = new TM.Label[canvasConfig.Label.type](this);
+    this.fx = new TM.Plot(this);
+    this.op = new TM.Op(this);
+    this.group = new TM.Group(this);
+    this.geom = new TM.Geom(this);
+    this.clickedNode = null;
+    this.busy = false;
+    // initialize extras
+    this.initializeExtras();
+  },
+
+  /* 
+    Method: refresh 
+    
+    Computes positions and plots the tree.
+  */
+  refresh: function(){
+    if(this.busy) return;
+    this.busy = true;
+    var that = this;
+    if(this.config.animate) {
+      this.compute('end');
+      this.config.levelsToShow > 0 && this.geom.setRightLevelToShow(this.graph.getNode(this.clickedNode 
+          && this.clickedNode.id || this.root));
+      this.fx.animate($.merge(this.config, {
+        modes: ['linear', 'node-property:width:height'],
+        onComplete: function() {
+          that.busy = false;
+        }
+      }));
+    } else {
+      var labelType = this.config.Label.type;
+      if(labelType != 'Native') {
+        var that = this;
+        this.graph.eachNode(function(n) { that.labels.hideLabel(n, false); });
+      }
+      this.busy = false;
+      this.compute();
+      this.config.levelsToShow > 0 && this.geom.setRightLevelToShow(this.graph.getNode(this.clickedNode 
+          && this.clickedNode.id || this.root));
+      this.plot();
+    }
+  },
+
+  /* 
+    Method: plot 
+    
+    Plots the TreeMap. This is a shortcut to *fx.plot*. 
+  
+   */
+  plot: function(){
+    this.fx.plot();
+  },
+
+  /* 
+  Method: leaf 
+  
+  Returns whether the node is a leaf.
+  
+   Parameters:
+   
+   n - (object) A <Graph.Node>.
+
+ */
+  leaf: function(n){
+    return n.getSubnodes([
+        1, 1
+    ], "ignore").length == 0;
+  },
+  
+  /* 
+  Method: enter 
+  
+  Sets the node as root.
+  
+   Parameters:
+   
+   n - (object) A <Graph.Node>.
+
+ */
+  enter: function(n){
+    if(this.busy) return;
+    this.busy = true;
+    
+    var that = this,
+        config = this.config,
+        graph = this.graph,
+        clickedNode = n,
+        previousClickedNode = this.clickedNode;
+
+    var callback = {
+      onComplete: function() {
+        //ensure that nodes are shown for that level
+        if(config.levelsToShow > 0) {
+          that.geom.setRightLevelToShow(n);
+        }
+        //compute positions of newly inserted nodes
+        if(config.levelsToShow > 0 || config.request) that.compute();
+        if(config.animate) {
+          //fade nodes
+          graph.nodeList.setData('alpha', 0, 'end');
+          n.eachSubgraph(function(n) {
+            n.setData('alpha', 1, 'end');
+          }, "ignore");
+          that.fx.animate({
+            duration: 500,
+            modes:['node-property:alpha'],
+            onComplete: function() {
+              //compute end positions
+              that.clickedNode = clickedNode;
+              that.compute('end');
+              //animate positions
+              //TODO(nico) commenting this line didn't seem to throw errors...
+              that.clickedNode = previousClickedNode;
+              that.fx.animate({
+                modes:['linear', 'node-property:width:height'],
+                duration: 1000,
+                onComplete: function() { 
+                  that.busy = false;
+                  //TODO(nico) check comment above
+                  that.clickedNode = clickedNode;
+                }
+              });
+            }
+          });
+        } else {
+          that.busy = false;
+          that.clickedNode = n;
+          that.refresh();
+        }
+      }
+    };
+    if(config.request) {
+      this.requestNodes(clickedNode, callback);
+    } else {
+      callback.onComplete();
+    }
+  },
+
+  /* 
+  Method: out 
+  
+  Sets the parent node of the current selected node as root.
+
+ */
+  out: function(){
+    if(this.busy) return;
+    this.busy = true;
+    this.events.hoveredNode = false;
+    var that = this,
+        config = this.config,
+        graph = this.graph,
+        parents = graph.getNode(this.clickedNode 
+            && this.clickedNode.id || this.root).getParents(),
+        parent = parents[0],
+        clickedNode = parent,
+        previousClickedNode = this.clickedNode;
+    
+    //if no parents return
+    if(!parent) {
+      this.busy = false;
+      return;
+    }
+    //final plot callback
+    callback = {
+      onComplete: function() {
+        that.clickedNode = parent;
+        if(config.request) {
+          that.requestNodes(parent, {
+            onComplete: function() {
+              that.compute();
+              that.plot();
+              that.busy = false;
+            }
+          });
+        } else {
+          that.compute();
+          that.plot();
+          that.busy = false;
+        }
+      }
+    };
+    //prune tree
+    if (config.levelsToShow > 0)
+      this.geom.setRightLevelToShow(parent);
+    //animate node positions
+    if(config.animate) {
+      this.clickedNode = clickedNode;
+      this.compute('end');
+      //animate the visible subtree only
+      this.clickedNode = previousClickedNode;
+      this.fx.animate({
+        modes:['linear', 'node-property:width:height'],
+        duration: 1000,
+        onComplete: function() {
+          //animate the parent subtree
+          that.clickedNode = clickedNode;
+          //change nodes alpha
+          graph.eachNode(function(n) {
+            n.setDataset(['current', 'end'], {
+              'alpha': [0, 1]
+            });
+          }, "ignore");
+          previousClickedNode.eachSubgraph(function(node) {
+            node.setData('alpha', 1);
+          }, "ignore");
+          that.fx.animate({
+            duration: 500,
+            modes:['node-property:alpha'],
+            onComplete: function() {
+              callback.onComplete();
+            }
+          });
+        }
+      });
+    } else {
+      callback.onComplete();
+    }
+  },
+
+  requestNodes: function(node, onComplete){
+    var handler = $.merge(this.controller, onComplete), 
+        lev = this.config.levelsToShow;
+    if (handler.request) {
+      var leaves = [], d = node._depth;
+      node.eachLevel(0, lev, function(n){
+        var nodeLevel = lev - (n._depth - d);
+        if (n.drawn && !n.anySubnode() && nodeLevel > 0) {
+          leaves.push(n);
+          n._level = nodeLevel;
+        }
+      });
+      this.group.requestNodes(leaves, handler);
+    } else {
+      handler.onComplete();
+    }
+  },
+  
+  reposition: function() {
+    this.compute('end');
+  }
+};
+
+/*
+  Class: TM.Op
+  
+  Custom extension of <Graph.Op>.
+  
+  Extends:
+  
+  All <Graph.Op> methods
+  
+  See also:
+  
+  <Graph.Op>
+  
+  */
+TM.Op = new Class({
+  Implements: Graph.Op,
+
+  initialize: function(viz){
+    this.viz = viz;
+  }
+});
+
+//extend level methods of Graph.Geom
+TM.Geom = new Class({
+  Implements: Graph.Geom,
+  
+  getRightLevelToShow: function() {
+    return this.viz.config.levelsToShow;
+  },
+  
+  setRightLevelToShow: function(node) {
+    var level = this.getRightLevelToShow(), 
+        fx = this.viz.labels;
+    node.eachLevel(0, level+1, function(n) {
+      var d = n._depth - node._depth;
+      if(d > level) {
+        n.drawn = false; 
+        n.exist = false;
+        n.ignore = true;
+        fx.hideLabel(n, false);
+      } else {
+        n.drawn = true;
+        n.exist = true;
+        delete n.ignore;
+      }
+    });
+    node.drawn = true;
+    delete node.ignore;
+  }
+});
+
+/*
+
+Performs operations on group of nodes.
+
+*/
+TM.Group = new Class( {
+
+  initialize: function(viz){
+    this.viz = viz;
+    this.canvas = viz.canvas;
+    this.config = viz.config;
+  },
+
+  /*
+  
+    Calls the request method on the controller to request a subtree for each node. 
+  */
+  requestNodes: function(nodes, controller){
+    var counter = 0, len = nodes.length, nodeSelected = {};
+    var complete = function(){
+      controller.onComplete();
+    };
+    var viz = this.viz;
+    if (len == 0)
+      complete();
+    for ( var i = 0; i < len; i++) {
+      nodeSelected[nodes[i].id] = nodes[i];
+      controller.request(nodes[i].id, nodes[i]._level, {
+        onComplete: function(nodeId, data){
+          if (data && data.children) {
+            data.id = nodeId;
+            viz.op.sum(data, {
+              type: 'nothing'
+            });
+          }
+          if (++counter == len) {
+            viz.graph.computeLevels(viz.root, 0);
+            complete();
+          }
+        }
+      });
+    }
+  }
+});
+
+/*
+  Class: TM.Plot
+  
+  Custom extension of <Graph.Plot>.
+  
+  Extends:
+  
+  All <Graph.Plot> methods
+  
+  See also:
+  
+  <Graph.Plot>
+  
+  */
+TM.Plot = new Class({
+
+  Implements: Graph.Plot,
+
+  initialize: function(viz){
+    this.viz = viz;
+    this.config = viz.config;
+    this.node = this.config.Node;
+    this.edge = this.config.Edge;
+    this.animation = new Animation;
+    this.nodeTypes = new TM.Plot.NodeTypes;
+    this.edgeTypes = new TM.Plot.EdgeTypes;
+    this.labels = viz.labels;
+  },
+
+  plot: function(opt, animating){
+    var viz = this.viz, 
+        graph = viz.graph;
+    viz.canvas.clear();
+    this.plotTree(graph.getNode(viz.clickedNode && viz.clickedNode.id || viz.root), $.merge(viz.config, opt || {}, {
+      'withLabels': true,
+      'hideLabels': false,
+      'plotSubtree': function(n, ch){
+        return n.anySubnode("exist");
+      }
+    }), animating);
+  }
+});
+
+/*
+  Class: TM.Label
+  
+  Custom extension of <Graph.Label>. 
+  Contains custom <Graph.Label.SVG>, <Graph.Label.HTML> and <Graph.Label.Native> extensions.
+
+  Extends:
+
+  All <Graph.Label> methods and subclasses.
+
+  See also:
+
+  <Graph.Label>, <Graph.Label.Native>, <Graph.Label.HTML>, <Graph.Label.SVG>.
+  
+*/
+TM.Label = {};
+
+/*
+ TM.Label.Native
+
+ Custom extension of <Graph.Label.Native>.
+
+ Extends:
+
+ All <Graph.Label.Native> methods
+
+ See also:
+
+ <Graph.Label.Native>
+*/
+TM.Label.Native = new Class({
+  Implements: Graph.Label.Native,
+
+  initialize: function(viz) {
+    this.config = viz.config;
+    this.leaf = viz.leaf;
+  },
+  
+  renderLabel: function(canvas, node, controller){
+    if(!this.leaf(node) && !this.config.titleHeight) return;
+    var pos = node.pos.getc(true), 
+        ctx = canvas.getCtx(),
+        width = node.getData('width'),
+        height = node.getData('height'),
+        x = pos.x + width/2,
+        y = pos.y;
+        
+    ctx.fillText(node.name, x, y, width);
+  }
+});
+
+/*
+ TM.Label.SVG
+
+  Custom extension of <Graph.Label.SVG>.
+
+  Extends:
+
+  All <Graph.Label.SVG> methods
+
+  See also:
+
+  <Graph.Label.SVG>
+*/
+TM.Label.SVG = new Class( {
+  Implements: Graph.Label.SVG,
+
+  initialize: function(viz){
+    this.viz = viz;
+    this.leaf = viz.leaf;
+    this.config = viz.config;
+  },
+
+  /* 
+  placeLabel
+
+  Overrides abstract method placeLabel in <Graph.Plot>.
+
+  Parameters:
+
+  tag - A DOM label element.
+  node - A <Graph.Node>.
+  controller - A configuration/controller object passed to the visualization.
+  
+  */
+  placeLabel: function(tag, node, controller){
+    var pos = node.pos.getc(true), 
+        canvas = this.viz.canvas,
+        ox = canvas.translateOffsetX,
+        oy = canvas.translateOffsetY,
+        sx = canvas.scaleOffsetX,
+        sy = canvas.scaleOffsetY,
+        radius = canvas.getSize();
+    var labelPos = {
+      x: Math.round(pos.x * sx + ox + radius.width / 2),
+      y: Math.round(pos.y * sy + oy + radius.height / 2)
+    };
+    tag.setAttribute('x', labelPos.x);
+    tag.setAttribute('y', labelPos.y);
+
+    if(!this.leaf(node) && !this.config.titleHeight) {
+      tag.style.display = 'none';
+    }
+    controller.onPlaceLabel(tag, node);
+  }
+});
+
+/*
+ TM.Label.HTML
+
+ Custom extension of <Graph.Label.HTML>.
+
+ Extends:
+
+ All <Graph.Label.HTML> methods.
+
+ See also:
+
+ <Graph.Label.HTML>
+
+*/
+TM.Label.HTML = new Class( {
+  Implements: Graph.Label.HTML,
+
+  initialize: function(viz){
+    this.viz = viz;
+    this.leaf = viz.leaf;
+    this.config = viz.config;
+  },
+
+  /* 
+    placeLabel
+  
+    Overrides abstract method placeLabel in <Graph.Plot>.
+  
+    Parameters:
+  
+    tag - A DOM label element.
+    node - A <Graph.Node>.
+    controller - A configuration/controller object passed to the visualization.
+  
+  */
+  placeLabel: function(tag, node, controller){
+    var pos = node.pos.getc(true), 
+        canvas = this.viz.canvas,
+        ox = canvas.translateOffsetX,
+        oy = canvas.translateOffsetY,
+        sx = canvas.scaleOffsetX,
+        sy = canvas.scaleOffsetY,
+        radius = canvas.getSize();
+    var labelPos = {
+      x: Math.round(pos.x * sx + ox + radius.width / 2),
+      y: Math.round(pos.y * sy + oy + radius.height / 2)
+    };
+
+    var style = tag.style;
+    style.left = labelPos.x + 'px';
+    style.top = labelPos.y + 'px';
+    style.width = node.getData('width') * sx + 'px';
+    style.height = node.getData('height') * sy + 'px';
+    style.zIndex = node._depth * 100;
+    style.display = '';
+
+    if(!this.leaf(node) && !this.config.titleHeight) {
+      tag.style.display = 'none';
+    }
+    controller.onPlaceLabel(tag, node);
+  }
+});
+
+/*
+  Class: TM.Plot.NodeTypes
+
+  This class contains a list of <Graph.Node> built-in types. 
+  Node types implemented are 'none', 'rectangle'.
+
+  You can add your custom node types, customizing your visualization to the extreme.
+
+  Example:
+
+  (start code js)
+    TM.Plot.NodeTypes.implement({
+      'mySpecialType': {
+        'render': function(node, canvas) {
+          //print your custom node to canvas
+        },
+        //optional
+        'contains': function(node, pos) {
+          //return true if pos is inside the node or false otherwise
+        }
+      }
+    });
+  (end code)
+
+*/
+TM.Plot.NodeTypes = new Class( {
+  'none': {
+    'render': $.empty
+  },
+
+  'rectangle': {
+    'render': function(node, canvas, animating){
+      var leaf = this.viz.leaf(node),
+          config = this.config,
+          offst = config.offset,
+          titleHeight = config.titleHeight,
+          pos = node.pos.getc(true),
+          width = node.getData('width'),
+          height = node.getData('height'),
+          border = node.getData('border'),
+          ctx = canvas.getCtx(),
+          posx = pos.x + offst / 2, 
+          posy = pos.y + offst / 2;
+      if(width <= offst || height <= offst) return;
+      if (leaf) {
+        if(config.cushion) {
+          var lg = ctx.createRadialGradient(posx + (width-offst)/2, posy + (height-offst)/2, 1, 
+              posx + (width-offst)/2, posy + (height-offst)/2, width < height? height : width);
+          var color = node.getData('color');
+          var colorGrad = $.rgbToHex($.map($.hexToRgb(color), 
+              function(r) { return r * 0.2 >> 0; }));
+          lg.addColorStop(0, color);
+          lg.addColorStop(1, colorGrad);
+          ctx.fillStyle = lg;
+        }
+        ctx.fillRect(posx, posy, width - offst, height - offst);
+        if(border) {
+          ctx.save();
+          ctx.strokeStyle = border;
+          ctx.strokeRect(posx, posy, width - offst, height - offst);
+          ctx.restore();
+        }
+      } else if(titleHeight > 0){
+        ctx.fillRect(pos.x + offst / 2, pos.y + offst / 2, width - offst,
+            titleHeight - offst);
+        if(border) {
+          ctx.save();
+          ctx.strokeStyle = border;
+          ctx.strokeRect(pos.x + offst / 2, pos.y + offst / 2, width - offst,
+              height - offst);
+          ctx.restore();
+        }
+      }
+    },
+    'contains': function(node, pos) {
+      if(this.viz.clickedNode && !node.isDescendantOf(this.viz.clickedNode.id) || node.ignore) return false;
+      var npos = node.pos.getc(true),
+          width = node.getData('width'), 
+          leaf = this.viz.leaf(node),
+          height = leaf? node.getData('height') : this.config.titleHeight;
+      return this.nodeHelper.rectangle.contains({x: npos.x + width/2, y: npos.y + height/2}, pos, width, height);
+    }
+  }
+});
+
+TM.Plot.EdgeTypes = new Class( {
+  'none': $.empty
+});
+
+/*
+  Class: TM.SliceAndDice
+  
+  A slice and dice TreeMap visualization.
+  
+  Implements:
+  
+  All <TM.Base> methods and properties.
+*/
+TM.SliceAndDice = new Class( {
+  Implements: [
+      Loader, Extras, TM.Base, Layouts.TM.SliceAndDice
+  ]
+});
+
+/*
+  Class: TM.Squarified
+  
+  A squarified TreeMap visualization.
+
+  Implements:
+  
+  All <TM.Base> methods and properties.
+*/
+TM.Squarified = new Class( {
+  Implements: [
+      Loader, Extras, TM.Base, Layouts.TM.Squarified
+  ]
+});
+
+/*
+  Class: TM.Strip
+  
+  A strip TreeMap visualization.
+
+  Implements:
+  
+  All <TM.Base> methods and properties.
+*/
+TM.Strip = new Class( {
+  Implements: [
+      Loader, Extras, TM.Base, Layouts.TM.Strip
+  ]
+});
+
+
+/*
+ * File: RGraph.js
+ *
+ */
+
+/*
+   Class: RGraph
+   
+   A radial graph visualization with advanced animations.
+   
+   Inspired by:
+   Animated Exploration of Dynamic Graphs with Radial Layout (Ka-Ping Yee, Danyel Fisher, Rachna Dhamija, Marti Hearst) <http://bailando.sims.berkeley.edu/papers/infovis01.htm>
+   
+   Note:
+   
+   This visualization was built and engineered from scratch, taking only the paper as inspiration, and only shares some features with the visualization described in the paper.
+   
+  Implements:
+  
+  All <Loader> methods
+  
+   Constructor Options:
+   
+   Inherits options from
+   
+   - <Options.Canvas>
+   - <Options.Controller>
+   - <Options.Node>
+   - <Options.Edge>
+   - <Options.Label>
+   - <Options.Events>
+   - <Options.Tips>
+   - <Options.NodeStyles>
+   - <Options.Navigation>
+   
+   Additionally, there are other parameters and some default values changed
+   
+   interpolation - (string) Default's *linear*. Describes the way nodes are interpolated. Possible values are 'linear' and 'polar'.
+   levelDistance - (number) Default's *100*. The distance between levels of the tree. 
+     
+   Instance Properties:
+
+   canvas - Access a <Canvas> instance.
+   graph - Access a <Graph> instance.
+   op - Access a <RGraph.Op> instance.
+   fx - Access a <RGraph.Plot> instance.
+   labels - Access a <RGraph.Label> interface implementation.   
+*/
+
+$jit.RGraph = new Class( {
+
+  Implements: [
+      Loader, Extras, Layouts.Radial
+  ],
+
+  initialize: function(controller){
+    var $RGraph = $jit.RGraph;
+
+    var config = {
+      interpolation: 'linear',
+      levelDistance: 100
+    };
+
+    this.controller = this.config = $.merge(Options("Canvas", "Node", "Edge",
+        "Fx", "Controller", "Tips", "NodeStyles", "Events", "Navigation", "Label"), config, controller);
+
+    var canvasConfig = this.config;
+    if(canvasConfig.useCanvas) {
+      this.canvas = canvasConfig.useCanvas;
+      this.config.labelContainer = this.canvas.id + '-label';
+    } else {
+      if(canvasConfig.background) {
+        canvasConfig.background = $.merge({
+          type: 'Circles'
+        }, canvasConfig.background);
+      }
+      this.canvas = new Canvas(this, canvasConfig);
+      this.config.labelContainer = (typeof canvasConfig.injectInto == 'string'? canvasConfig.injectInto : canvasConfig.injectInto.id) + '-label';
+    }
+
+    this.graphOptions = {
+      'klass': Polar,
+      'Node': {
+        'selected': false,
+        'exist': true,
+        'drawn': true
+      }
+    };
+    this.graph = new Graph(this.graphOptions, this.config.Node,
+        this.config.Edge);
+    this.labels = new $RGraph.Label[canvasConfig.Label.type](this);
+    this.fx = new $RGraph.Plot(this, $RGraph);
+    this.op = new $RGraph.Op(this);
+    this.json = null;
+    this.root = null;
+    this.busy = false;
+    this.parent = false;
+    // initialize extras
+    this.initializeExtras();
+  },
+
+  /* 
+  
+    createLevelDistanceFunc 
+  
+    Returns the levelDistance function used for calculating a node distance 
+    to its origin. This function returns a function that is computed 
+    per level and not per node, such that all nodes with the same depth will have the 
+    same distance to the origin. The resulting function gets the 
+    parent node as parameter and returns a float.
+
+   */
+  createLevelDistanceFunc: function(){
+    var ld = this.config.levelDistance;
+    return function(elem){
+      return (elem._depth + 1) * ld;
+    };
+  },
+
+  /* 
+     Method: refresh 
+     
+     Computes positions and plots the tree.
+
+   */
+  refresh: function(){
+    this.compute();
+    this.plot();
+  },
+
+  reposition: function(){
+    this.compute('end');
+  },
+
+  /*
+   Method: plot
+  
+   Plots the RGraph. This is a shortcut to *fx.plot*.
+  */
+  plot: function(){
+    this.fx.plot();
+  },
+  /*
+   getNodeAndParentAngle
+  
+   Returns the _parent_ of the given node, also calculating its angle span.
+  */
+  getNodeAndParentAngle: function(id){
+    var theta = false;
+    var n = this.graph.getNode(id);
+    var ps = n.getParents();
+    var p = (ps.length > 0)? ps[0] : false;
+    if (p) {
+      var posParent = p.pos.getc(), posChild = n.pos.getc();
+      var newPos = posParent.add(posChild.scale(-1));
+      theta = Math.atan2(newPos.y, newPos.x);
+      if (theta < 0)
+        theta += 2 * Math.PI;
+    }
+    return {
+      parent: p,
+      theta: theta
+    };
+  },
+  /*
+   tagChildren
+  
+   Enumerates the children in order to maintain child ordering (second constraint of the paper).
+  */
+  tagChildren: function(par, id){
+    if (par.angleSpan) {
+      var adjs = [];
+      par.eachAdjacency(function(elem){
+        adjs.push(elem.nodeTo);
+      }, "ignore");
+      var len = adjs.length;
+      for ( var i = 0; i < len && id != adjs[i].id; i++)
+        ;
+      for ( var j = (i + 1) % len, k = 0; id != adjs[j].id; j = (j + 1) % len) {
+        adjs[j].dist = k++;
+      }
+    }
+  },
+  /* 
+  Method: onClick 
+  
+  Animates the <RGraph> to center the node specified by *id*.
+
+   Parameters:
+
+   id - A <Graph.Node> id.
+   opt - (optional|object) An object containing some extra properties described below
+   hideLabels - (boolean) Default's *true*. Hide labels when performing the animation.
+
+   Example:
+
+   (start code js)
+     rgraph.onClick('someid');
+     //or also...
+     rgraph.onClick('someid', {
+      hideLabels: false
+     });
+    (end code)
+    
+  */
+  onClick: function(id, opt){
+    if (this.root != id && !this.busy) {
+      this.busy = true;
+      this.root = id;
+      var that = this;
+      this.controller.onBeforeCompute(this.graph.getNode(id));
+      var obj = this.getNodeAndParentAngle(id);
+
+      // second constraint
+      this.tagChildren(obj.parent, id);
+      this.parent = obj.parent;
+      this.compute('end');
+
+      // first constraint
+      var thetaDiff = obj.theta - obj.parent.endPos.theta;
+      this.graph.eachNode(function(elem){
+        elem.endPos.set(elem.endPos.getp().add($P(thetaDiff, 0)));
+      });
+
+      var mode = this.config.interpolation;
+      opt = $.merge( {
+        onComplete: $.empty
+      }, opt || {});
+
+      this.fx.animate($.merge( {
+        hideLabels: true,
+        modes: [
+          mode
+        ]
+      }, opt, {
+        onComplete: function(){
+          that.busy = false;
+          opt.onComplete();
+        }
+      }));
+    }
+  }
+});
+
+$jit.RGraph.$extend = true;
+
+(function(RGraph){
+
+  /*
+     Class: RGraph.Op
+     
+     Custom extension of <Graph.Op>.
+
+     Extends:
+
+     All <Graph.Op> methods
+     
+     See also:
+     
+     <Graph.Op>
+
+  */
+  RGraph.Op = new Class( {
+
+    Implements: Graph.Op
+
+  });
+
+  /*
+     Class: RGraph.Plot
+    
+    Custom extension of <Graph.Plot>.
+  
+    Extends:
+  
+    All <Graph.Plot> methods
+    
+    See also:
+    
+    <Graph.Plot>
+  
+  */
+  RGraph.Plot = new Class( {
+
+    Implements: Graph.Plot
+
+  });
+
+  /*
+    Object: RGraph.Label
+
+    Custom extension of <Graph.Label>. 
+    Contains custom <Graph.Label.SVG>, <Graph.Label.HTML> and <Graph.Label.Native> extensions.
+  
+    Extends:
+  
+    All <Graph.Label> methods and subclasses.
+  
+    See also:
+  
+    <Graph.Label>, <Graph.Label.Native>, <Graph.Label.HTML>, <Graph.Label.SVG>.
+  
+   */
+  RGraph.Label = {};
+
+  /*
+     RGraph.Label.Native
+
+     Custom extension of <Graph.Label.Native>.
+
+     Extends:
+
+     All <Graph.Label.Native> methods
+
+     See also:
+
+     <Graph.Label.Native>
+
+  */
+  RGraph.Label.Native = new Class( {
+    Implements: Graph.Label.Native
+  });
+
+  /*
+     RGraph.Label.SVG
+    
+    Custom extension of <Graph.Label.SVG>.
+  
+    Extends:
+  
+    All <Graph.Label.SVG> methods
+  
+    See also:
+  
+    <Graph.Label.SVG>
+  
+  */
+  RGraph.Label.SVG = new Class( {
+    Implements: Graph.Label.SVG,
+
+    initialize: function(viz){
+      this.viz = viz;
+    },
+
+    /* 
+       placeLabel
+
+       Overrides abstract method placeLabel in <Graph.Plot>.
+
+       Parameters:
+
+       tag - A DOM label element.
+       node - A <Graph.Node>.
+       controller - A configuration/controller object passed to the visualization.
+      
+     */
+    placeLabel: function(tag, node, controller){
+      var pos = node.pos.getc(true), 
+          canvas = this.viz.canvas,
+          ox = canvas.translateOffsetX,
+          oy = canvas.translateOffsetY,
+          sx = canvas.scaleOffsetX,
+          sy = canvas.scaleOffsetY,
+          radius = canvas.getSize();
+      var labelPos = {
+        x: Math.round(pos.x * sx + ox + radius.width / 2),
+        y: Math.round(pos.y * sy + oy + radius.height / 2)
+      };
+      tag.setAttribute('x', labelPos.x);
+      tag.setAttribute('y', labelPos.y);
+
+      controller.onPlaceLabel(tag, node);
+    }
+  });
+
+  /*
+     RGraph.Label.HTML
+
+     Custom extension of <Graph.Label.HTML>.
+
+     Extends:
+
+     All <Graph.Label.HTML> methods.
+
+     See also:
+
+     <Graph.Label.HTML>
+
+  */
+  RGraph.Label.HTML = new Class( {
+    Implements: Graph.Label.HTML,
+
+    initialize: function(viz){
+      this.viz = viz;
+    },
+    /* 
+       placeLabel
+
+       Overrides abstract method placeLabel in <Graph.Plot>.
+
+       Parameters:
+
+       tag - A DOM label element.
+       node - A <Graph.Node>.
+       controller - A configuration/controller object passed to the visualization.
+      
+     */
+    placeLabel: function(tag, node, controller){
+      var pos = node.pos.getc(true), 
+          canvas = this.viz.canvas,
+          ox = canvas.translateOffsetX,
+          oy = canvas.translateOffsetY,
+          sx = canvas.scaleOffsetX,
+          sy = canvas.scaleOffsetY,
+          radius = canvas.getSize();
+      var labelPos = {
+        x: Math.round(pos.x * sx + ox + radius.width / 2),
+        y: Math.round(pos.y * sy + oy + radius.height / 2)
+      };
+
+      var style = tag.style;
+      style.left = labelPos.x + 'px';
+      style.top = labelPos.y + 'px';
+      style.display = this.fitsInCanvas(labelPos, canvas)? '' : 'none';
+
+      controller.onPlaceLabel(tag, node);
+    }
+  });
+
+  /*
+    Class: RGraph.Plot.NodeTypes
+
+    This class contains a list of <Graph.Node> built-in types. 
+    Node types implemented are 'none', 'circle', 'triangle', 'rectangle', 'star', 'ellipse' and 'square'.
+
+    You can add your custom node types, customizing your visualization to the extreme.
+
+    Example:
+
+    (start code js)
+      RGraph.Plot.NodeTypes.implement({
+        'mySpecialType': {
+          'render': function(node, canvas) {
+            //print your custom node to canvas
+          },
+          //optional
+          'contains': function(node, pos) {
+            //return true if pos is inside the node or false otherwise
+          }
+        }
+      });
+    (end code)
+
+  */
+  RGraph.Plot.NodeTypes = new Class({
+    'none': {
+      'render': $.empty,
+      'contains': $.lambda(false)
+    },
+    'circle': {
+      'render': function(node, canvas){
+        var pos = node.pos.getc(true), 
+            dim = node.getData('dim');
+        this.nodeHelper.circle.render('fill', pos, dim, canvas);
+      },
+      'contains': function(node, pos){
+        var npos = node.pos.getc(true), 
+            dim = node.getData('dim');
+        return this.nodeHelper.circle.contains(npos, pos, dim);
+      }
+    },
+    'ellipse': {
+      'render': function(node, canvas){
+        var pos = node.pos.getc(true), 
+            width = node.getData('width'), 
+            height = node.getData('height');
+        this.nodeHelper.ellipse.render('fill', pos, width, height, canvas);
+        },
+      'contains': function(node, pos){
+        var npos = node.pos.getc(true), 
+            width = node.getData('width'), 
+            height = node.getData('height');
+        return this.nodeHelper.ellipse.contains(npos, pos, width, height);
+      }
+    },
+    'square': {
+      'render': function(node, canvas){
+        var pos = node.pos.getc(true), 
+            dim = node.getData('dim');
+        this.nodeHelper.square.render('fill', pos, dim, canvas);
+      },
+      'contains': function(node, pos){
+        var npos = node.pos.getc(true), 
+            dim = node.getData('dim');
+        return this.nodeHelper.square.contains(npos, pos, dim);
+      }
+    },
+    'rectangle': {
+      'render': function(node, canvas){
+        var pos = node.pos.getc(true), 
+            width = node.getData('width'), 
+            height = node.getData('height');
+        this.nodeHelper.rectangle.render('fill', pos, width, height, canvas);
+      },
+      'contains': function(node, pos){
+        var npos = node.pos.getc(true), 
+            width = node.getData('width'), 
+            height = node.getData('height');
+        return this.nodeHelper.rectangle.contains(npos, pos, width, height);
+      }
+    },
+    'triangle': {
+      'render': function(node, canvas){
+        var pos = node.pos.getc(true), 
+            dim = node.getData('dim');
+        this.nodeHelper.triangle.render('fill', pos, dim, canvas);
+      },
+      'contains': function(node, pos) {
+        var npos = node.pos.getc(true), 
+            dim = node.getData('dim');
+        return this.nodeHelper.triangle.contains(npos, pos, dim);
+      }
+    },
+    'star': {
+      'render': function(node, canvas){
+        var pos = node.pos.getc(true),
+            dim = node.getData('dim');
+        this.nodeHelper.star.render('fill', pos, dim, canvas);
+      },
+      'contains': function(node, pos) {
+        var npos = node.pos.getc(true),
+            dim = node.getData('dim');
+        return this.nodeHelper.star.contains(npos, pos, dim);
+      }
+    }
+  });
+
+  /*
+    Class: RGraph.Plot.EdgeTypes
+
+    This class contains a list of <Graph.Adjacence> built-in types. 
+    Edge types implemented are 'none', 'line' and 'arrow'.
+  
+    You can add your custom edge types, customizing your visualization to the extreme.
+  
+    Example:
+  
+    (start code js)
+      RGraph.Plot.EdgeTypes.implement({
+        'mySpecialType': {
+          'render': function(adj, canvas) {
+            //print your custom edge to canvas
+          },
+          //optional
+          'contains': function(adj, pos) {
+            //return true if pos is inside the arc or false otherwise
+          }
+        }
+      });
+    (end code)
+  
+  */
+  RGraph.Plot.EdgeTypes = new Class({
+    'none': $.empty,
+    'line': {
+      'render': function(adj, canvas) {
+        var from = adj.nodeFrom.pos.getc(true),
+            to = adj.nodeTo.pos.getc(true);
+        this.edgeHelper.line.render(from, to, canvas);
+      },
+      'contains': function(adj, pos) {
+        var from = adj.nodeFrom.pos.getc(true),
+            to = adj.nodeTo.pos.getc(true);
+        return this.edgeHelper.line.contains(from, to, pos, this.edge.epsilon);
+      }
+    },
+    'arrow': {
+      'render': function(adj, canvas) {
+        var from = adj.nodeFrom.pos.getc(true),
+            to = adj.nodeTo.pos.getc(true),
+            dim = adj.getData('dim'),
+            direction = adj.data.$direction,
+            inv = (direction && direction.length>1 && direction[0] != adj.nodeFrom.id);
+        this.edgeHelper.arrow.render(from, to, dim, inv, canvas);
+      },
+      'contains': function(adj, pos) {
+        var from = adj.nodeFrom.pos.getc(true),
+            to = adj.nodeTo.pos.getc(true);
+        return this.edgeHelper.arrow.contains(from, to, pos, this.edge.epsilon);
+      }
+    }
+  });
+
+})($jit.RGraph);
+
+
+/*
+ * File: Hypertree.js
+ * 
+*/
+
+/* 
+     Complex 
+     
+     A multi-purpose Complex Class with common methods. Extended for the Hypertree. 
+*/
+/* 
+   moebiusTransformation 
+   Calculates a moebius transformation for this point / complex. 
+    For more information go to: 
+        http://en.wikipedia.org/wiki/Moebius_transformation. 
+   Parameters: 
+      c - An initialized Complex instance representing a translation Vector. 
+*/
+
+Complex.prototype.moebiusTransformation = function(c) {
+  var num = this.add(c);
+  var den = c.$conjugate().$prod(this);
+  den.x++;
+  return num.$div(den);
+};
+
+/* 
+    moebiusTransformation 
+     
+    Calculates a moebius transformation for the hyperbolic tree. 
+     
+    <http://en.wikipedia.org/wiki/Moebius_transformation> 
+      
+     Parameters: 
+     
+        graph - A <Graph> instance.
+        pos - A <Complex>.
+        prop - A property array.
+        theta - Rotation angle. 
+        startPos - _optional_ start position. 
+*/
+Graph.Util.moebiusTransformation = function(graph, pos, prop, startPos, flags) {
+  this.eachNode(graph, function(elem) {
+    for ( var i = 0; i < prop.length; i++) {
+      var p = pos[i].scale(-1), property = startPos ? startPos : prop[i];
+      elem.getPos(prop[i]).set(elem.getPos(property).getc().moebiusTransformation(p));
+    }
+  }, flags);
+};
+
+/* 
+   Class: Hypertree 
+   
+   A Hyperbolic Tree/Graph visualization.
+   
+   Inspired by:
+   A Focus+Context Technique Based on Hyperbolic Geometry for Visualizing Large Hierarchies (John Lamping, Ramana Rao, and Peter Pirolli). 
+   <http://www.cs.tau.ac.il/~asharf/shrek/Projects/HypBrowser/startree-chi95.pdf>
+  Note:
+  This visualization was built and engineered from scratch, taking only the paper as inspiration, and only shares some features with the Hypertree described in the paper.
+
+  Implements:
+  
+  All <Loader> methods
+  
+  Constructor Options:
+  
+  Inherits options from
+  
+  - <Options.Canvas>
+  - <Options.Controller>
+  - <Options.Node>
+  - <Options.Edge>
+  - <Options.Label>
+  - <Options.Events>
+  - <Options.Tips>
+  - <Options.NodeStyles>
+  - <Options.Navigation>
+  
+  Additionally, there are other parameters and some default values changed
+  
+  radius - (string|number) Default's *auto*. The radius of the disc to plot the <Hypertree> in. 'auto' will take the smaller value from the width and height canvas dimensions. You can also set this to a custom value, for example *250*.
+  offset - (number) Default's *0*. A number in the range [0, 1) that will be substracted to each node position to make a more compact <Hypertree>. This will avoid placing nodes too far from each other when a there's a selected node.
+  fps - Described in <Options.Fx>. It's default value has been changed to *35*.
+  duration - Described in <Options.Fx>. It's default value has been changed to *1500*.
+  Edge.type - Described in <Options.Edge>. It's default value has been changed to *hyperline*. 
+  
+  Instance Properties:
+  
+  canvas - Access a <Canvas> instance.
+  graph - Access a <Graph> instance.
+  op - Access a <Hypertree.Op> instance.
+  fx - Access a <Hypertree.Plot> instance.
+  labels - Access a <Hypertree.Label> interface implementation.
+
+*/
+
+$jit.Hypertree = new Class( {
+
+  Implements: [ Loader, Extras, Layouts.Radial ],
+
+  initialize: function(controller) {
+    var $Hypertree = $jit.Hypertree;
+
+    var config = {
+      radius: "auto",
+      offset: 0,
+      Edge: {
+        type: 'hyperline'
+      },
+      duration: 1500,
+      fps: 35
+    };
+    this.controller = this.config = $.merge(Options("Canvas", "Node", "Edge",
+        "Fx", "Tips", "NodeStyles", "Events", "Navigation", "Controller", "Label"), config, controller);
+
+    var canvasConfig = this.config;
+    if(canvasConfig.useCanvas) {
+      this.canvas = canvasConfig.useCanvas;
+      this.config.labelContainer = this.canvas.id + '-label';
+    } else {
+      if(canvasConfig.background) {
+        canvasConfig.background = $.merge({
+          type: 'Circles'
+        }, canvasConfig.background);
+      }
+      this.canvas = new Canvas(this, canvasConfig);
+      this.config.labelContainer = (typeof canvasConfig.injectInto == 'string'? canvasConfig.injectInto : canvasConfig.injectInto.id) + '-label';
+    }
+
+    this.graphOptions = {
+      'klass': Polar,
+      'Node': {
+        'selected': false,
+        'exist': true,
+        'drawn': true
+      }
+    };
+    this.graph = new Graph(this.graphOptions, this.config.Node,
+        this.config.Edge);
+    this.labels = new $Hypertree.Label[canvasConfig.Label.type](this);
+    this.fx = new $Hypertree.Plot(this, $Hypertree);
+    this.op = new $Hypertree.Op(this);
+    this.json = null;
+    this.root = null;
+    this.busy = false;
+    // initialize extras
+    this.initializeExtras();
+  },
+
+  /* 
+  
+  createLevelDistanceFunc 
+
+  Returns the levelDistance function used for calculating a node distance 
+  to its origin. This function returns a function that is computed 
+  per level and not per node, such that all nodes with the same depth will have the 
+  same distance to the origin. The resulting function gets the 
+  parent node as parameter and returns a float.
+
+  */
+  createLevelDistanceFunc: function() {
+    // get max viz. length.
+    var r = this.getRadius();
+    // get max depth.
+    var depth = 0, max = Math.max, config = this.config;
+    this.graph.eachNode(function(node) {
+      depth = max(node._depth, depth);
+    }, "ignore");
+    depth++;
+    // node distance generator
+    var genDistFunc = function(a) {
+      return function(node) {
+        node.scale = r;
+        var d = node._depth + 1;
+        var acum = 0, pow = Math.pow;
+        while (d) {
+          acum += pow(a, d--);
+        }
+        return acum - config.offset;
+      };
+    };
+    // estimate better edge length.
+    for ( var i = 0.51; i <= 1; i += 0.01) {
+      var valSeries = (1 - Math.pow(i, depth)) / (1 - i);
+      if (valSeries >= 2) { return genDistFunc(i - 0.01); }
+    }
+    return genDistFunc(0.75);
+  },
+
+  /* 
+    Method: getRadius 
+    
+    Returns the current radius of the visualization. If *config.radius* is *auto* then it 
+    calculates the radius by taking the smaller size of the <Canvas> widget.
+    
+    See also:
+    
+    <Canvas.getSize>
+   
+  */
+  getRadius: function() {
+    var rad = this.config.radius;
+    if (rad !== "auto") { return rad; }
+    var s = this.canvas.getSize();
+    return Math.min(s.width, s.height) / 2;
+  },
+
+  /* 
+    Method: refresh 
+    
+    Computes positions and plots the tree.
+
+    Parameters:
+
+    reposition - (optional|boolean) Set this to *true* to force all positions (current, start, end) to match.
+
+   */
+  refresh: function(reposition) {
+    if (reposition) {
+      this.reposition();
+      this.graph.eachNode(function(node) {
+        node.startPos.rho = node.pos.rho = node.endPos.rho;
+        node.startPos.theta = node.pos.theta = node.endPos.theta;
+      });
+    } else {
+      this.compute();
+    }
+    this.plot();
+  },
+
+  /* 
+   reposition 
+   
+   Computes nodes' positions and restores the tree to its previous position.
+
+   For calculating nodes' positions the root must be placed on its origin. This method does this 
+     and then attemps to restore the hypertree to its previous position.
+    
+  */
+  reposition: function() {
+    this.compute('end');
+    var vector = this.graph.getNode(this.root).pos.getc().scale(-1);
+    Graph.Util.moebiusTransformation(this.graph, [ vector ], [ 'end' ],
+        'end', "ignore");
+    this.graph.eachNode(function(node) {
+      if (node.ignore) {
+        node.endPos.rho = node.pos.rho;
+        node.endPos.theta = node.pos.theta;
+      }
+    });
+  },
+
+  /* 
+   Method: plot 
+   
+   Plots the <Hypertree>. This is a shortcut to *fx.plot*. 
+
+  */
+  plot: function() {
+    this.fx.plot();
+  },
+
+  /* 
+   Method: onClick 
+   
+   Animates the <Hypertree> to center the node specified by *id*.
+
+   Parameters:
+
+   id - A <Graph.Node> id.
+   opt - (optional|object) An object containing some extra properties described below
+   hideLabels - (boolean) Default's *true*. Hide labels when performing the animation.
+
+   Example:
+
+   (start code js)
+     ht.onClick('someid');
+     //or also...
+     ht.onClick('someid', {
+      hideLabels: false
+     });
+    (end code)
+    
+  */
+  onClick: function(id, opt) {
+    var pos = this.graph.getNode(id).pos.getc(true);
+    this.move(pos, opt);
+  },
+
+  /* 
+   Method: move 
+
+   Translates the tree to the given position. 
+
+   Parameters:
+
+   pos - (object) A *x, y* coordinate object where x, y in [0, 1), to move the tree to.
+   opt - This object has been defined in <Hypertree.onClick>
+   
+   Example:
+   
+   (start code js)
+     ht.move({ x: 0, y: 0.7 }, {
+       hideLabels: false
+     });
+   (end code)
+
+  */
+  move: function(pos, opt) {
+    var versor = $C(pos.x, pos.y);
+    if (this.busy === false && versor.norm() < 1) {
+      this.busy = true;
+      var root = this.graph.getClosestNodeToPos(versor), that = this;
+      this.graph.computeLevels(root.id, 0);
+      this.controller.onBeforeCompute(root);
+      opt = $.merge( {
+        onComplete: $.empty
+      }, opt || {});
+      this.fx.animate($.merge( {
+        modes: [ 'moebius' ],
+        hideLabels: true
+      }, opt, {
+        onComplete: function() {
+          that.busy = false;
+          opt.onComplete();
+        }
+      }), versor);
+    }
+  }
+});
+
+$jit.Hypertree.$extend = true;
+
+(function(Hypertree) {
+
+  /* 
+     Class: Hypertree.Op 
+   
+     Custom extension of <Graph.Op>.
+
+     Extends:
+
+     All <Graph.Op> methods
+     
+     See also:
+     
+     <Graph.Op>
+
+  */
+  Hypertree.Op = new Class( {
+
+    Implements: Graph.Op
+
+  });
+
+  /* 
+     Class: Hypertree.Plot 
+   
+    Custom extension of <Graph.Plot>.
+  
+    Extends:
+  
+    All <Graph.Plot> methods
+    
+    See also:
+    
+    <Graph.Plot>
+  
+  */
+  Hypertree.Plot = new Class( {
+
+    Implements: Graph.Plot
+
+  });
+
+  /*
+    Object: Hypertree.Label
+
+    Custom extension of <Graph.Label>. 
+    Contains custom <Graph.Label.SVG>, <Graph.Label.HTML> and <Graph.Label.Native> extensions.
+  
+    Extends:
+  
+    All <Graph.Label> methods and subclasses.
+  
+    See also:
+  
+    <Graph.Label>, <Graph.Label.Native>, <Graph.Label.HTML>, <Graph.Label.SVG>.
+
+   */
+  Hypertree.Label = {};
+
+  /*
+     Hypertree.Label.Native
+
+     Custom extension of <Graph.Label.Native>.
+
+     Extends:
+
+     All <Graph.Label.Native> methods
+
+     See also:
+
+     <Graph.Label.Native>
+
+  */
+  Hypertree.Label.Native = new Class( {
+    Implements: Graph.Label.Native,
+
+    initialize: function(viz) {
+      this.viz = viz;
+    },
+
+    renderLabel: function(canvas, node, controller) {
+      var ctx = canvas.getCtx();
+      var coord = node.pos.getc(true);
+      var s = this.viz.getRadius();
+      ctx.fillText(node.name, coord.x * s, coord.y * s);
+    }
+  });
+
+  /*
+     Hypertree.Label.SVG
+
+    Custom extension of <Graph.Label.SVG>.
+  
+    Extends:
+  
+    All <Graph.Label.SVG> methods
+  
+    See also:
+  
+    <Graph.Label.SVG>
+  
+  */
+  Hypertree.Label.SVG = new Class( {
+    Implements: Graph.Label.SVG,
+
+    initialize: function(viz) {
+      this.viz = viz;
+    },
+
+    /* 
+       placeLabel
+
+       Overrides abstract method placeLabel in <Graph.Plot>.
+
+       Parameters:
+
+       tag - A DOM label element.
+       node - A <Graph.Node>.
+       controller - A configuration/controller object passed to the visualization.
+      
+     */
+    placeLabel: function(tag, node, controller) {
+      var pos = node.pos.getc(true), 
+          canvas = this.viz.canvas,
+          ox = canvas.translateOffsetX,
+          oy = canvas.translateOffsetY,
+          sx = canvas.scaleOffsetX,
+          sy = canvas.scaleOffsetY,
+          radius = canvas.getSize(),
+          r = this.viz.getRadius();
+      var labelPos = {
+        x: Math.round((pos.x * sx) * r + ox + radius.width / 2),
+        y: Math.round((pos.y * sy) * r + oy + radius.height / 2)
+      };
+      tag.setAttribute('x', labelPos.x);
+      tag.setAttribute('y', labelPos.y);
+      controller.onPlaceLabel(tag, node);
+    }
+  });
+
+  /*
+     Hypertree.Label.HTML
+
+     Custom extension of <Graph.Label.HTML>.
+
+     Extends:
+
+     All <Graph.Label.HTML> methods.
+
+     See also:
+
+     <Graph.Label.HTML>
+
+  */
+  Hypertree.Label.HTML = new Class( {
+    Implements: Graph.Label.HTML,
+
+    initialize: function(viz) {
+      this.viz = viz;
+    },
+    /* 
+       placeLabel
+
+       Overrides abstract method placeLabel in <Graph.Plot>.
+
+       Parameters:
+
+       tag - A DOM label element.
+       node - A <Graph.Node>.
+       controller - A configuration/controller object passed to the visualization.
+      
+     */
+    placeLabel: function(tag, node, controller) {
+      var pos = node.pos.getc(true), 
+          canvas = this.viz.canvas,
+          ox = canvas.translateOffsetX,
+          oy = canvas.translateOffsetY,
+          sx = canvas.scaleOffsetX,
+          sy = canvas.scaleOffsetY,
+          radius = canvas.getSize(),
+          r = this.viz.getRadius();
+      var labelPos = {
+        x: Math.round((pos.x * sx) * r + ox + radius.width / 2),
+        y: Math.round((pos.y * sy) * r + oy + radius.height / 2)
+      };
+      var style = tag.style;
+      style.left = labelPos.x + 'px';
+      style.top = labelPos.y + 'px';
+      style.display = this.fitsInCanvas(labelPos, canvas) ? '' : 'none';
+
+      controller.onPlaceLabel(tag, node);
+    }
+  });
+
+  /*
+    Class: Hypertree.Plot.NodeTypes
+
+    This class contains a list of <Graph.Node> built-in types. 
+    Node types implemented are 'none', 'circle', 'triangle', 'rectangle', 'star', 'ellipse' and 'square'.
+
+    You can add your custom node types, customizing your visualization to the extreme.
+
+    Example:
+
+    (start code js)
+      Hypertree.Plot.NodeTypes.implement({
+        'mySpecialType': {
+          'render': function(node, canvas) {
+            //print your custom node to canvas
+          },
+          //optional
+          'contains': function(node, pos) {
+            //return true if pos is inside the node or false otherwise
+          }
+        }
+      });
+    (end code)
+
+  */
+  Hypertree.Plot.NodeTypes = new Class({
+    'none': {
+      'render': $.empty,
+      'contains': $.lambda(false)
+    },
+    'circle': {
+      'render': function(node, canvas) {
+        var nconfig = this.node,
+            dim = node.getData('dim'),
+            p = node.pos.getc();
+        dim = nconfig.transform? dim * (1 - p.squaredNorm()) : dim;
+        p.$scale(node.scale);
+        if (dim > 0.2) {
+          this.nodeHelper.circle.render('fill', p, dim, canvas);
+        }
+      },
+      'contains': function(node, pos) {
+        var dim = node.getData('dim'),
+            npos = node.pos.getc().$scale(node.scale);
+        return this.nodeHelper.circle.contains(npos, pos, dim);
+      }
+    },
+    'ellipse': {
+      'render': function(node, canvas) {
+        var pos = node.pos.getc().$scale(node.scale),
+            width = node.getData('width'),
+            height = node.getData('height');
+        this.nodeHelper.ellipse.render('fill', pos, width, height, canvas);
+      },
+      'contains': function(node, pos) {
+        var width = node.getData('width'),
+            height = node.getData('height'),
+            npos = node.pos.getc().$scale(node.scale);
+        return this.nodeHelper.circle.contains(npos, pos, width, height);
+      }
+    },
+    'square': {
+      'render': function(node, canvas) {
+        var nconfig = this.node,
+            dim = node.getData('dim'),
+            p = node.pos.getc();
+        dim = nconfig.transform? dim * (1 - p.squaredNorm()) : dim;
+        p.$scale(node.scale);
+        if (dim > 0.2) {
+          this.nodeHelper.square.render('fill', p, dim, canvas);
+        }
+      },
+      'contains': function(node, pos) {
+        var dim = node.getData('dim'),
+            npos = node.pos.getc().$scale(node.scale);
+        return this.nodeHelper.square.contains(npos, pos, dim);
+      }
+    },
+    'rectangle': {
+      'render': function(node, canvas) {
+        var nconfig = this.node,
+            width = node.getData('width'),
+            height = node.getData('height'),
+            pos = node.pos.getc();
+        width = nconfig.transform? width * (1 - pos.squaredNorm()) : width;
+        height = nconfig.transform? height * (1 - pos.squaredNorm()) : height;
+        pos.$scale(node.scale);
+        if (width > 0.2 && height > 0.2) {
+          this.nodeHelper.rectangle.render('fill', pos, width, height, canvas);
+        }
+      },
+      'contains': function(node, pos) {
+        var width = node.getData('width'),
+            height = node.getData('height'),
+            npos = node.pos.getc().$scale(node.scale);
+        return this.nodeHelper.rectangle.contains(npos, pos, width, height);
+      }
+    },
+    'triangle': {
+      'render': function(node, canvas) {
+        var nconfig = this.node,
+            dim = node.getData('dim'),
+            p = node.pos.getc();
+        dim = nconfig.transform? dim * (1 - p.squaredNorm()) : dim;
+        p.$scale(node.scale);
+        if (dim > 0.2) {
+          this.nodeHelper.triangle.render('fill', p, dim, canvas);
+        }
+      },
+      'contains': function(node, pos) {
+        var dim = node.getData('dim'),
+            npos = node.pos.getc().$scale(node.scale);
+        return this.nodeHelper.triangle.contains(npos, pos, dim);
+      }
+    },
+    'star': {
+      'render': function(node, canvas) {
+        var nconfig = this.node,
+            dim = node.getData('dim'),
+            p = node.pos.getc();
+        dim = nconfig.transform? dim * (1 - p.squaredNorm()) : dim;
+        p.$scale(node.scale);
+        if (dim > 0.2) {
+          this.nodeHelper.star.render('fill', p, dim, canvas);
+        }
+      },
+      'contains': function(node, pos) {
+        var dim = node.getData('dim'),
+            npos = node.pos.getc().$scale(node.scale);
+        return this.nodeHelper.star.contains(npos, pos, dim);
+      }
+    }
+  });
+
+  /*
+   Class: Hypertree.Plot.EdgeTypes
+
+    This class contains a list of <Graph.Adjacence> built-in types. 
+    Edge types implemented are 'none', 'line', 'arrow' and 'hyperline'.
+  
+    You can add your custom edge types, customizing your visualization to the extreme.
+  
+    Example:
+  
+    (start code js)
+      Hypertree.Plot.EdgeTypes.implement({
+        'mySpecialType': {
+          'render': function(adj, canvas) {
+            //print your custom edge to canvas
+          },
+          //optional
+          'contains': function(adj, pos) {
+            //return true if pos is inside the arc or false otherwise
+          }
+        }
+      });
+    (end code)
+  
+  */
+  Hypertree.Plot.EdgeTypes = new Class({
+    'none': $.empty,
+    'line': {
+      'render': function(adj, canvas) {
+        var from = adj.nodeFrom.pos.getc(true),
+          to = adj.nodeTo.pos.getc(true),
+          r = adj.nodeFrom.scale;
+          this.edgeHelper.line.render({x:from.x*r, y:from.y*r}, {x:to.x*r, y:to.y*r}, canvas);
+      },
+      'contains': function(adj, pos) {
+        var from = adj.nodeFrom.pos.getc(true),
+            to = adj.nodeTo.pos.getc(true),
+            r = adj.nodeFrom.scale;
+            this.edgeHelper.line.contains({x:from.x*r, y:from.y*r}, {x:to.x*r, y:to.y*r}, pos, this.edge.epsilon);
+      }
+    },
+    'arrow': {
+      'render': function(adj, canvas) {
+        var from = adj.nodeFrom.pos.getc(true),
+            to = adj.nodeTo.pos.getc(true),
+            r = adj.nodeFrom.scale,
+            dim = adj.getData('dim'),
+            direction = adj.data.$direction,
+            inv = (direction && direction.length>1 && direction[0] != adj.nodeFrom.id);
+        this.edgeHelper.arrow.render({x:from.x*r, y:from.y*r}, {x:to.x*r, y:to.y*r}, dim, inv, canvas);
+      },
+      'contains': function(adj, pos) {
+        var from = adj.nodeFrom.pos.getc(true),
+            to = adj.nodeTo.pos.getc(true),
+            r = adj.nodeFrom.scale;
+        this.edgeHelper.arrow.contains({x:from.x*r, y:from.y*r}, {x:to.x*r, y:to.y*r}, pos, this.edge.epsilon);
+      }
+    },
+    'hyperline': {
+      'render': function(adj, canvas) {
+        var from = adj.nodeFrom.pos.getc(),
+            to = adj.nodeTo.pos.getc(),
+            dim = this.viz.getRadius();
+        this.edgeHelper.hyperline.render(from, to, dim, canvas);
+      },
+      'contains': $.lambda(false)
+    }
+  });
+
+})($jit.Hypertree);
+
+
+
+
+ })();
\ No newline at end of file
diff --git a/static/tm.html b/static/tm.html
new file mode 100644 (file)
index 0000000..32b349e
--- /dev/null
@@ -0,0 +1,86 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+<title>Treemap - TreeMap with on-demand nodes</title>
+
+<!-- CSS Files -->
+<link type="text/css" href="css/base.css" rel="stylesheet" />
+<link type="text/css" href="css/Treemap.css" rel="stylesheet" />
+
+<!--[if IE]><script language="javascript" type="text/javascript" src="excanvas.js"></script><![endif]-->
+
+<!-- JIT Library File -->
+<script language="javascript" type="text/javascript" src="jit.js"></script>
+
+<!-- Example File -->
+<script language="javascript" type="text/javascript" src="tm.js"></script>
+</head>
+
+<body onload="init();">
+<div id="container">
+
+<div id="left-container">
+
+
+
+<div class="text">
+<h4>
+TreeMap with on-demand nodes    
+</h4> 
+
+            This example shows how you can use the <b>request</b> controller method to create a TreeMap with on demand nodes<br /><br />
+            This example makes use of native Canvas text and shadows, but can be easily adapted to use HTML like the other examples.<br /><br />
+            There should be only one level shown at a time.<br /><br /> 
+            Clicking on a band should show a new TreeMap with its most listened albums.<br /><br />            
+            
+</div>
+
+<div id="id-list">
+<table>
+    <tr>
+        <td>
+            <label for="r-sq">Squarified </label>
+        </td>
+        <td>
+            <input type="radio" id="r-sq" name="layout" checked="checked" value="left" />
+        </td>
+    </tr>
+    <tr>
+         <td>
+            <label for="r-st">Strip </label>
+         </td>
+         <td>
+            <input type="radio" id="r-st" name="layout" value="top" />
+         </td>
+    <tr>
+         <td>
+            <label for="r-sd">SliceAndDice </label>
+          </td>
+          <td>
+            <input type="radio" id="r-sd" name="layout" value="bottom" />
+          </td>
+    </tr>
+</table>
+</div>
+
+<a id="back" href="#" class="theme button white">Go to Parent</a>
+
+
+<div style="text-align:center;"><a href="example2.js">See the Example Code</a></div>            
+</div>
+
+<div id="center-container">
+    <div id="infovis"></div>    
+</div>
+
+<div id="right-container">
+
+<div id="inner-details"></div>
+
+</div>
+
+<div id="log"></div>
+</div>
+</body>
+</html>
diff --git a/static/tm.js b/static/tm.js
new file mode 100644 (file)
index 0000000..c4792bf
--- /dev/null
@@ -0,0 +1,165 @@
+var labelType, useGradients, nativeTextSupport, animate;
+
+(function() {
+  var ua = navigator.userAgent,
+      iStuff = ua.match(/iPhone/i) || ua.match(/iPad/i),
+      typeOfCanvas = typeof HTMLCanvasElement,
+      nativeCanvasSupport = (typeOfCanvas == 'object' || typeOfCanvas == 'function'),
+      textSupport = nativeCanvasSupport 
+        && (typeof document.createElement('canvas').getContext('2d').fillText == 'function');
+  //I'm setting this based on the fact that ExCanvas provides text support for IE
+  //and that as of today iPhone/iPad current text support is lame
+  labelType = (!nativeCanvasSupport || (textSupport && !iStuff))? 'Native' : 'HTML';
+  nativeTextSupport = labelType == 'Native';
+  useGradients = nativeCanvasSupport;
+  animate = !(iStuff || !nativeCanvasSupport);
+})();
+
+var Log = {
+  elem: false,
+  write: function(text){
+    if (!this.elem) 
+      this.elem = document.getElementById('log');
+    this.elem.innerHTML = text;
+    this.elem.style.left = (500 - this.elem.offsetWidth / 2) + 'px';
+  }
+};
+
+
+function init(){
+  //init data
+  var json = "{\"children\": [{\"children\": [{\"children\": [], \"data\": {\"playcount\": \"276\", \"artist\": \"A Perfect Circle\", \"image\": \"http:\/\/userserve-ak.last.fm\/serve\/300x300\/11403219.jpg\", \"$area\": 276}, \"id\": \"album-Thirteenth Step\", \"name\": \"Thirteenth Step\"}, {\"children\": [], \"data\": {\"playcount\": \"271\", \"artist\": \"A Perfect Circle\", \"image\": \"http:\/\/userserve-ak.last.fm\/serve\/300x300\/11393921.jpg\", \"$area\": 271}, \"id\": \"album-Mer De Noms\", \"name\": \"Mer De Noms\"}], \"data\": {\"playcount\": 547, \"$area\": 547}, \"id\": \"artist_A Perfect Circle\", \"name\": \"A Perfect Circle\"}, {\"children\": [{\"children\": [], \"data\": {\"playcount\": \"209\", \"artist\": \"Mad Season\", \"image\": \"http:\/\/userserve-ak.last.fm\/serve\/300x300\/32349839.jpg\", \"$area\": 209}, \"id\": \"album-Above\", \"name\": \"Above\"}], \"data\": {\"playcount\": 209, \"$area\": 209}, \"id\": \"artist_Mad Season\", \"name\": \"Mad Season\"}, {\"children\": [{\"children\": [], \"data\": {\"playcount\": \"260\", \"artist\": \"Stone Temple Pilots\", \"image\": \"http:\/\/userserve-ak.last.fm\/serve\/300x300\/38753425.jpg\", \"$area\": 260}, \"id\": \"album-Tiny Music... Songs From the Vatican Gift Shop\", \"name\": \"Tiny Music... Songs From the Vatican Gift Shop\"}, {\"children\": [], \"data\": {\"playcount\": \"254\", \"artist\": \"Stone Temple Pilots\", \"image\": \"http:\/\/images.amazon.com\/images\/P\/B000002IU3.01.LZZZZZZZ.jpg\", \"$area\": 254}, \"id\": \"album-Core\", \"name\": \"Core\"}], \"data\": {\"playcount\": 514, \"$area\": 514}, \"id\": \"artist_Stone Temple Pilots\", \"name\": \"Stone Temple Pilots\"}, {\"children\": [{\"children\": [], \"data\": {\"playcount\": \"181\", \"artist\": \"Bush\", \"image\": \"http:\/\/userserve-ak.last.fm\/serve\/300x300\/8673371.jpg\", \"$area\": 181}, \"id\": \"album-The Science of Things\", \"name\": \"The Science of Things\"}], \"data\": {\"playcount\": 181, \"$area\": 181}, \"id\": \"artist_Bush\", \"name\": \"Bush\"}, {\"children\": [{\"children\": [], \"data\": {\"playcount\": \"229\", \"artist\": \"Foo Fighters\", \"image\": \"http:\/\/userserve-ak.last.fm\/serve\/300x300\/32579429.jpg\", \"$area\": 229}, \"id\": \"album-Echoes, Silence, Patience &amp; Grace\", \"name\": \"Echoes, Silence, Patience &amp; Grace\"}, {\"children\": [], \"data\": {\"playcount\": \"185\", \"artist\": \"Foo Fighters\", \"image\": \"http:\/\/images.amazon.com\/images\/P\/B0009HLDFU.01.MZZZZZZZ.jpg\", \"$area\": 185}, \"id\": \"album-In Your Honor (disc 2)\", \"name\": \"In Your Honor (disc 2)\"}], \"data\": {\"playcount\": 414, \"$area\": 414}, \"id\": \"artist_Foo Fighters\", \"name\": \"Foo Fighters\"}, {\"children\": [{\"children\": [], \"data\": {\"playcount\": \"398\", \"artist\": \"Luis Alberto Spinetta\", \"image\": \"http:\/\/images.amazon.com\/images\/P\/B00005LNP5.01._SCMZZZZZZZ_.jpg\", \"$area\": 398}, \"id\": \"album-Elija Y Gane\", \"name\": \"Elija Y Gane\"}, {\"children\": [], \"data\": {\"playcount\": \"203\", \"artist\": \"Luis Alberto Spinetta\", \"image\": \"http:\/\/images.amazon.com\/images\/P\/B0000B193V.01._SCMZZZZZZZ_.jpg\", \"$area\": 203}, \"id\": \"album-Para los Arboles\", \"name\": \"Para los Arboles\"}], \"data\": {\"playcount\": 601, \"$area\": 601}, \"id\": \"artist_Luis Alberto Spinetta\", \"name\": \"Luis Alberto Spinetta\"}, {\"children\": [{\"children\": [], \"data\": {\"playcount\": \"224\", \"artist\": \"Alice in Chains\", \"image\": \"http:\/\/userserve-ak.last.fm\/serve\/300x300\/26497553.jpg\", \"$area\": 224}, \"id\": \"album-Music Bank\", \"name\": \"Music Bank\"}, {\"children\": [], \"data\": {\"playcount\": \"217\", \"artist\": \"Alice in Chains\", \"image\": \"http:\/\/images.amazon.com\/images\/P\/B0000296JW.01.MZZZZZZZ.jpg\", \"$area\": 217}, \"id\": \"album-Music Bank (disc 1)\", \"name\": \"Music Bank (disc 1)\"}, {\"children\": [], \"data\": {\"playcount\": \"215\", \"artist\": \"Alice in Chains\", \"image\": \"http:\/\/images.amazon.com\/images\/P\/B0000296JW.01.MZZZZZZZ.jpg\", \"$area\": 215}, \"id\": \"album-Music Bank (disc 2)\", \"name\": \"Music Bank (disc 2)\"}, {\"children\": [], \"data\": {\"playcount\": \"181\", \"artist\": \"Alice in Chains\", \"image\": \"http:\/\/images.amazon.com\/images\/P\/B0000296JW.01.MZZZZZZZ.jpg\", \"$area\": 181}, \"id\": \"album-Music Bank (disc 3)\", \"name\": \"Music Bank (disc 3)\"}], \"data\": {\"playcount\": 837, \"$area\": 837}, \"id\": \"artist_Alice in Chains\", \"name\": \"Alice in Chains\"}, {\"children\": [{\"children\": [], \"data\": {\"playcount\": \"627\", \"artist\": \"Tool\", \"image\": \"http:\/\/userserve-ak.last.fm\/serve\/300x300\/8480501.jpg\", \"$area\": 627}, \"id\": \"album-10,000 Days\", \"name\": \"10,000 Days\"}], \"data\": {\"playcount\": 627, \"$area\": 627}, \"id\": \"artist_Tool\", \"name\": \"Tool\"}, {\"children\": [{\"children\": [], \"data\": {\"playcount\": \"261\", \"artist\": \"Chris Cornell\", \"image\": \"http:\/\/cdn.last.fm\/flatness\/catalogue\/noimage\/2\/default_album_medium.png\", \"$area\": 261}, \"id\": \"album-2006-09-07: O-Bar, Stockholm, Sweden\", \"name\": \"2006-09-07: O-Bar, Stockholm, Sweden\"}, {\"children\": [], \"data\": {\"playcount\": \"211\", \"artist\": \"Chris Cornell\", \"image\": \"http:\/\/userserve-ak.last.fm\/serve\/300x300\/25402479.jpg\", \"$area\": 211}, \"id\": \"album-Lost and Found\", \"name\": \"Lost and Found\"}], \"data\": {\"playcount\": 472, \"$area\": 472}, \"id\": \"artist_Chris Cornell\", \"name\": \"Chris Cornell\"}, {\"children\": [{\"children\": [], \"data\": {\"playcount\": \"197\", \"artist\": \"Disturbed\", \"image\": \"http:\/\/userserve-ak.last.fm\/serve\/300x300\/8634627.jpg\", \"$area\": 197}, \"id\": \"album-The Sickness\", \"name\": \"The Sickness\"}], \"data\": {\"playcount\": 197, \"$area\": 197}, \"id\": \"artist_Disturbed\", \"name\": \"Disturbed\"}, {\"children\": [{\"children\": [], \"data\": {\"playcount\": \"493\", \"artist\": \"Erykah Badu\", \"image\": \"http:\/\/userserve-ak.last.fm\/serve\/300x300\/8591345.jpg\", \"$area\": 493}, \"id\": \"album-Mama's Gun\", \"name\": \"Mama's Gun\"}], \"data\": {\"playcount\": 493, \"$area\": 493}, \"id\": \"artist_Erykah Badu\", \"name\": \"Erykah Badu\"}, {\"children\": [{\"children\": [], \"data\": {\"playcount\": \"249\", \"artist\": \"Audioslave\", \"image\": \"http:\/\/userserve-ak.last.fm\/serve\/300x300\/32070871.jpg\", \"$area\": 249}, \"id\": \"album-Audioslave\", \"name\": \"Audioslave\"}], \"data\": {\"playcount\": 249, \"$area\": 249}, \"id\": \"artist_Audioslave\", \"name\": \"Audioslave\"}, {\"children\": [{\"children\": [], \"data\": {\"playcount\": \"359\", \"artist\": \"Soda Stereo\", \"image\": \"http:\/\/userserve-ak.last.fm\/serve\/300x300\/15858421.jpg\", \"$area\": 359}, \"id\": \"album-Comfort y M\u00fasica Para Volar\", \"name\": \"Comfort y M\u00fasica Para Volar\"}], \"data\": {\"playcount\": 359, \"$area\": 359}, \"id\": \"artist_Soda Stereo\", \"name\": \"Soda Stereo\"}, {\"children\": [{\"children\": [], \"data\": {\"playcount\": \"302\", \"artist\": \"Sinch\", \"image\": \"http:\/\/userserve-ak.last.fm\/serve\/300x300\/8776205.jpg\", \"$area\": 302}, \"id\": \"album-Clearing the Channel\", \"name\": \"Clearing the Channel\"}], \"data\": {\"playcount\": 302, \"$area\": 302}, \"id\": \"artist_Sinch\", \"name\": \"Sinch\"}, {\"children\": [{\"children\": [], \"data\": {\"playcount\": \"177\", \"artist\": \"Dave Matthews Band\", \"image\": \"http:\/\/userserve-ak.last.fm\/serve\/300x300\/32457599.jpg\", \"$area\": 177}, \"id\": \"album-Crash\", \"name\": \"Crash\"}], \"data\": {\"playcount\": 177, \"$area\": 177}, \"id\": \"artist_Dave Matthews Band\", \"name\": \"Dave Matthews Band\"}, {\"children\": [{\"children\": [], \"data\": {\"playcount\": \"207\", \"artist\": \"Pearl Jam\", \"image\": \"http:\/\/userserve-ak.last.fm\/serve\/300x300\/30352203.jpg\", \"$area\": 207}, \"id\": \"album-Vs.\", \"name\": \"Vs.\"}], \"data\": {\"playcount\": 207, \"$area\": 207}, \"id\": \"artist_Pearl Jam\", \"name\": \"Pearl Jam\"}, {\"children\": [{\"children\": [], \"data\": {\"playcount\": \"486\", \"artist\": \"Kr\u00f8m\", \"image\": \"http:\/\/userserve-ak.last.fm\/serve\/300x300\/26053425.jpg\", \"$area\": 486}, \"id\": \"album-It All Makes Sense Now\", \"name\": \"It All Makes Sense Now\"}, {\"children\": [], \"data\": {\"playcount\": \"251\", \"artist\": \"Agua de Annique\", \"image\": \"http:\/\/userserve-ak.last.fm\/serve\/300x300\/9658733.jpg\", \"$area\": 251}, \"id\": \"album-Air\", \"name\": \"Air\"}], \"data\": {\"playcount\": 737, \"$area\": 737}, \"id\": \"artist_Kr\u00f8m\", \"name\": \"Kr\u00f8m\"}, {\"children\": [{\"children\": [], \"data\": {\"playcount\": \"345\", \"artist\": \"Temple of the Dog\", \"image\": \"http:\/\/userserve-ak.last.fm\/serve\/300x300\/8605651.jpg\", \"$area\": 345}, \"id\": \"album-Temple Of The Dog\", \"name\": \"Temple Of The Dog\"}], \"data\": {\"playcount\": 345, \"$area\": 345}, \"id\": \"artist_Temple of the Dog\", \"name\": \"Temple of the Dog\"}, {\"children\": [{\"children\": [], \"data\": {\"playcount\": \"318\", \"artist\": \"Nine Inch Nails\", \"image\": \"http:\/\/userserve-ak.last.fm\/serve\/300x300\/29274729.jpg\", \"$area\": 318}, \"id\": \"album-And All That Could Have Been (Still)\", \"name\": \"And All That Could Have Been (Still)\"}], \"data\": {\"playcount\": 318, \"$area\": 318}, \"id\": \"artist_Nine Inch Nails\", \"name\": \"Nine Inch Nails\"}, {\"children\": [{\"children\": [], \"data\": {\"playcount\": \"256\", \"artist\": \"Tryo\", \"image\": \"http:\/\/userserve-ak.last.fm\/serve\/300x300\/32595059.jpg\", \"$area\": 256}, \"id\": \"album-Mamagubida\", \"name\": \"Mamagubida\"}, {\"children\": [], \"data\": {\"playcount\": \"220\", \"artist\": \"Tryo\", \"image\": \"http:\/\/cdn.last.fm\/flatness\/catalogue\/noimage\/2\/default_album_medium.png\", \"$area\": 220}, \"id\": \"album-Reggae \u00e0 Coup de Cirque\", \"name\": \"Reggae \u00e0 Coup de Cirque\"}, {\"children\": [], \"data\": {\"playcount\": \"181\", \"artist\": \"Tryo\", \"image\": \"http:\/\/userserve-ak.last.fm\/serve\/300x300\/16799743.jpg\", \"$area\": 181}, \"id\": \"album-Grain de sable\", \"name\": \"Grain de sable\"}], \"data\": {\"playcount\": 657, \"$area\": 657}, \"id\": \"artist_Tryo\", \"name\": \"Tryo\"}, {\"children\": [{\"children\": [], \"data\": {\"playcount\": \"258\", \"artist\": \"Sublime\", \"image\": \"http:\/\/cdn.last.fm\/flatness\/catalogue\/noimage\/2\/default_album_medium.png\", \"$area\": 258}, \"id\": \"album-Best Of\", \"name\": \"Best Of\"}, {\"children\": [], \"data\": {\"playcount\": \"176\", \"artist\": \"Sublime\", \"image\": \"http:\/\/userserve-ak.last.fm\/serve\/300x300\/5264426.jpg\", \"$area\": 176}, \"id\": \"album-Robbin' The Hood\", \"name\": \"Robbin' The Hood\"}], \"data\": {\"playcount\": 434, \"$area\": 434}, \"id\": \"artist_Sublime\", \"name\": \"Sublime\"}, {\"children\": [{\"children\": [], \"data\": {\"playcount\": \"418\", \"artist\": \"Red Hot Chili Peppers\", \"image\": \"http:\/\/userserve-ak.last.fm\/serve\/300x300\/8590493.jpg\", \"$area\": 418}, \"id\": \"album-One Hot Minute\", \"name\": \"One Hot Minute\"}], \"data\": {\"playcount\": 418, \"$area\": 418}, \"id\": \"artist_Red Hot Chili Peppers\", \"name\": \"Red Hot Chili Peppers\"}, {\"children\": [{\"children\": [], \"data\": {\"playcount\": \"275\", \"artist\": \"Guns N' Roses\", \"image\": \"http:\/\/userserve-ak.last.fm\/serve\/300x300\/17597653.jpg\", \"$area\": 275}, \"id\": \"album-Chinese Democracy\", \"name\": \"Chinese Democracy\"}, {\"children\": [], \"data\": {\"playcount\": \"203\", \"artist\": \"Guns N' Roses\", \"image\": \"http:\/\/userserve-ak.last.fm\/serve\/300x300\/15231979.jpg\", \"$area\": 203}, \"id\": \"album-Use Your Illusion II\", \"name\": \"Use Your Illusion II\"}], \"data\": {\"playcount\": 478, \"$area\": 478}, \"id\": \"artist_Guns N' Roses\", \"name\": \"Guns N' Roses\"}, {\"children\": [{\"children\": [], \"data\": {\"playcount\": \"208\", \"artist\": \"Wax Tailor\", \"image\": \"http:\/\/images.amazon.com\/images\/P\/B0007LCNNE.01.MZZZZZZZ.jpg\", \"$area\": 208}, \"id\": \"album-Tales of the Forgotten Melodies\", \"name\": \"Tales of the Forgotten Melodies\"}], \"data\": {\"playcount\": 208, \"$area\": 208}, \"id\": \"artist_Wax Tailor\", \"name\": \"Wax Tailor\"}, {\"children\": [{\"children\": [], \"data\": {\"playcount\": \"208\", \"artist\": \"Radiohead\", \"image\": \"http:\/\/userserve-ak.last.fm\/serve\/300x300\/7862623.png\", \"$area\": 208}, \"id\": \"album-In Rainbows\", \"name\": \"In Rainbows\"}], \"data\": {\"playcount\": 208, \"$area\": 208}, \"id\": \"artist_Radiohead\", \"name\": \"Radiohead\"}, {\"children\": [{\"children\": [], \"data\": {\"playcount\": \"317\", \"artist\": \"Soundgarden\", \"image\": \"http:\/\/userserve-ak.last.fm\/serve\/300x300\/8600371.jpg\", \"$area\": 317}, \"id\": \"album-Down On The Upside\", \"name\": \"Down On The Upside\"}, {\"children\": [], \"data\": {\"playcount\": \"290\", \"artist\": \"Soundgarden\", \"image\": \"http:\/\/userserve-ak.last.fm\/serve\/300x300\/8590515.jpg\", \"$area\": 290}, \"id\": \"album-Superunknown\", \"name\": \"Superunknown\"}], \"data\": {\"playcount\": 607, \"$area\": 607}, \"id\": \"artist_Soundgarden\", \"name\": \"Soundgarden\"}, {\"children\": [{\"children\": [], \"data\": {\"playcount\": \"247\", \"artist\": \"Blind Melon\", \"image\": \"http:\/\/userserve-ak.last.fm\/serve\/300x300\/15113951.jpg\", \"$area\": 247}, \"id\": \"album-Nico\", \"name\": \"Nico\"}, {\"children\": [], \"data\": {\"playcount\": \"218\", \"artist\": \"Blind Melon\", \"image\": \"http:\/\/userserve-ak.last.fm\/serve\/300x300\/45729417.jpg\", \"$area\": 218}, \"id\": \"album-Soup\", \"name\": \"Soup\"}, {\"children\": [], \"data\": {\"playcount\": \"197\", \"artist\": \"Blind Melon\", \"image\": \"http:\/\/images.amazon.com\/images\/P\/B00005V5PW.01.MZZZZZZZ.jpg\", \"$area\": 197}, \"id\": \"album-Classic Masters\", \"name\": \"Classic Masters\"}, {\"children\": [], \"data\": {\"playcount\": \"194\", \"artist\": \"Blind Melon\", \"image\": \"http:\/\/userserve-ak.last.fm\/serve\/300x300\/15157989.jpg\", \"$area\": 194}, \"id\": \"album-Blind Melon\", \"name\": \"Blind Melon\"}], \"data\": {\"playcount\": 856, \"$area\": 856}, \"id\": \"artist_Blind Melon\", \"name\": \"Blind Melon\"}, {\"children\": [{\"children\": [], \"data\": {\"playcount\": \"537\", \"artist\": \"Incubus\", \"image\": \"http:\/\/userserve-ak.last.fm\/serve\/300x300\/17594883.jpg\", \"$area\": 537}, \"id\": \"album-Make Yourself\", \"name\": \"Make Yourself\"}, {\"children\": [], \"data\": {\"playcount\": \"258\", \"artist\": \"Incubus\", \"image\": \"http:\/\/userserve-ak.last.fm\/serve\/300x300\/31550385.jpg\", \"$area\": 258}, \"id\": \"album-Light Grenades\", \"name\": \"Light Grenades\"}, {\"children\": [], \"data\": {\"playcount\": \"181\", \"artist\": \"Incubus\", \"image\": \"http:\/\/userserve-ak.last.fm\/serve\/300x300\/32309285.jpg\", \"$area\": 181}, \"id\": \"album-Morning View\", \"name\": \"Morning View\"}], \"data\": {\"playcount\": 976, \"$area\": 976}, \"id\": \"artist_Incubus\", \"name\": \"Incubus\"}, {\"children\": [{\"children\": [], \"data\": {\"playcount\": \"198\", \"artist\": \"Jack Johnson\", \"image\": \"http:\/\/userserve-ak.last.fm\/serve\/300x300\/8599099.jpg\", \"$area\": 198}, \"id\": \"album-On And On\", \"name\": \"On And On\"}, {\"children\": [], \"data\": {\"playcount\": \"186\", \"artist\": \"Jack Johnson\", \"image\": \"http:\/\/userserve-ak.last.fm\/serve\/300x300\/30082075.jpg\", \"$area\": 186}, \"id\": \"album-Brushfire Fairytales\", \"name\": \"Brushfire Fairytales\"}], \"data\": {\"playcount\": 384, \"$area\": 384}, \"id\": \"artist_Jack Johnson\", \"name\": \"Jack Johnson\"}, {\"children\": [{\"children\": [], \"data\": {\"playcount\": \"349\", \"artist\": \"Mother Love Bone\", \"image\": \"http:\/\/userserve-ak.last.fm\/serve\/300x300\/21881921.jpg\", \"$area\": 349}, \"id\": \"album-Mother Love Bone\", \"name\": \"Mother Love Bone\"}], \"data\": {\"playcount\": 349, \"$area\": 349}, \"id\": \"artist_Mother Love Bone\", \"name\": \"Mother Love Bone\"}], \"data\": {}, \"id\": \"root\", \"name\": \"Top Albums\"}";
+  //end
+  //init TreeMap
+  var tm = new $jit.TM.Squarified({
+    //where to inject the visualization
+    injectInto: 'infovis',
+    //show only one tree level
+    levelsToShow: 1,
+    //parent box title heights
+    titleHeight: 0,
+    //enable animations
+    animate: animate,
+    //box offsets
+    offset: 1,
+    //use canvas text
+    Label: {
+      type: labelType,
+      size: 9,
+      family: 'Tahoma, Verdana, Arial'
+    },
+    //enable specific canvas styles
+    //when rendering nodes
+    Node: {
+      CanvasStyles: {
+        shadowBlur: 0,
+        shadowColor: '#000'
+      }
+    },
+    //Attach left and right click events
+    Events: {
+      enable: true,
+      onClick: function(node) {
+        if(node) tm.enter(node);
+      },
+      onRightClick: function() {
+        tm.out();
+      },
+      //change node styles and canvas styles
+      //when hovering a node
+      onMouseEnter: function(node, eventInfo) {
+        if(node) {
+          //add node selected styles and replot node
+          node.setCanvasStyle('shadowBlur', 7);
+          node.setData('color', '#888');
+          tm.fx.plotNode(node, tm.canvas);
+          tm.labels.plotLabel(tm.canvas, node);
+        }
+      },
+      onMouseLeave: function(node) {
+        if(node) {
+          node.removeData('color');
+          node.removeCanvasStyle('shadowBlur');
+          tm.plot();
+        }
+      }
+    },
+    //duration of the animations
+    duration: 1000,
+    //Enable tips
+    Tips: {
+      enable: true,
+      type: 'Native',
+      //add positioning offsets
+      offsetX: 20,
+      offsetY: 20,
+      //implement the onShow method to
+      //add content to the tooltip when a node
+      //is hovered
+      onShow: function(tip, node, isLeaf, domElement) {
+        var html = "<div class=\"tip-title\">" + node.name 
+          + "</div><div class=\"tip-text\">";
+        var data = node.data;
+        if(data.artist) {
+          html += "Artist: " + data.artist + "<br />";
+        }
+        if(data.playcount) {
+          html += "Play count: " + data.playcount;
+        }
+        if(data.image) {
+          html += "<img src=\""+ data.image +"\" class=\"album\" />";
+        }
+        tip.innerHTML =  html; 
+      }  
+    },
+    //Implement this method for retrieving a requested  
+    //subtree that has as root a node with id = nodeId,  
+    //and level as depth. This method could also make a server-side  
+    //call for the requested subtree. When completed, the onComplete   
+    //callback method should be called.  
+    request: function(nodeId, level, onComplete){  
+      var tree = eval('(' + json + ')');  
+      var subtree = $jit.json.getSubtree(tree, nodeId);  
+      $jit.json.prune(subtree, 1);  
+      onComplete.onComplete(nodeId, subtree);  
+    },
+    //Add the name of the node in the corresponding label
+    //This method is called once, on label creation and only for DOM labels.
+    onCreateLabel: function(domElement, node){
+        domElement.innerHTML = node.name;
+    }
+  });
+  
+  var pjson = eval('(' + json + ')');  
+  $jit.json.prune(pjson, 1);
+  
+  tm.loadJSON(pjson);
+  tm.refresh();
+  //end
+  var sq = $jit.id('r-sq'),
+      st = $jit.id('r-st'),
+      sd = $jit.id('r-sd');
+  var util = $jit.util;
+  util.addEvent(sq, 'change', function() {
+    if(!sq.checked) return;
+    util.extend(tm, new $jit.Layouts.TM.Squarified);
+    tm.refresh();
+  });
+  util.addEvent(st, 'change', function() {
+    if(!st.checked) return;
+    util.extend(tm, new $jit.Layouts.TM.Strip);
+    tm.layout.orientation = "v";
+    tm.refresh();
+  });
+  util.addEvent(sd, 'change', function() {
+    if(!sd.checked) return;
+    util.extend(tm, new $jit.Layouts.TM.SliceAndDice);
+    tm.layout.orientation = "v";
+    tm.refresh();
+  });
+  //add event to the back button
+  var back = $jit.id('back');
+  $jit.util.addEvent(back, 'click', function() {
+    tm.out();
+  });
+}
diff --git a/static/tm0.html b/static/tm0.html
new file mode 100644 (file)
index 0000000..8c3cc60
--- /dev/null
@@ -0,0 +1,87 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+<title>Treemap - TreeMap with on-demand nodes</title>
+
+<!-- CSS Files -->
+<link type="text/css" href="css/base.css" rel="stylesheet" />
+<link type="text/css" href="css/Treemap.css" rel="stylesheet" />
+
+<!--[if IE]><script language="javascript" type="text/javascript" src="excanvas.js"></script><![endif]-->
+
+<!-- JIT Library File -->
+<script language="javascript" type="text/javascript" src="jit.js"></script>
+
+<!-- Example File -->
+<script language="javascript" type="text/javascript" src="tm0data.js"></script>
+<script language="javascript" type="text/javascript" src="tm0.js"></script>
+</head>
+
+<body onload="init();">
+<div id="container">
+
+<div id="left-container">
+
+
+
+<div class="text">
+<h4>
+TreeMap with on-demand nodes    
+</h4> 
+
+            This example shows how you can use the <b>request</b> controller method to create a TreeMap with on demand nodes<br /><br />
+            This example makes use of native Canvas text and shadows, but can be easily adapted to use HTML like the other examples.<br /><br />
+            There should be only one level shown at a time.<br /><br /> 
+            Clicking on a band should show a new TreeMap with its most listened albums.<br /><br />            
+            
+</div>
+
+<div id="id-list">
+<table>
+    <tr>
+        <td>
+            <label for="r-sq">Squarified </label>
+        </td>
+        <td>
+            <input type="radio" id="r-sq" name="layout" checked="checked" value="left" />
+        </td>
+    </tr>
+    <tr>
+         <td>
+            <label for="r-st">Strip </label>
+         </td>
+         <td>
+            <input type="radio" id="r-st" name="layout" value="top" />
+         </td>
+    <tr>
+         <td>
+            <label for="r-sd">SliceAndDice </label>
+          </td>
+          <td>
+            <input type="radio" id="r-sd" name="layout" value="bottom" />
+          </td>
+    </tr>
+</table>
+</div>
+
+<a id="back" href="#" class="theme button white">Go to Parent</a>
+
+
+<div style="text-align:center;"><a href="example2.js">See the Example Code</a></div>            
+</div>
+
+<div id="center-container">
+    <div id="infovis"></div>    
+</div>
+
+<div id="right-container">
+
+<div id="inner-details"></div>
+
+</div>
+
+<div id="log"></div>
+</div>
+</body>
+</html>
diff --git a/static/tm0.js b/static/tm0.js
new file mode 100644 (file)
index 0000000..35046f7
--- /dev/null
@@ -0,0 +1,121 @@
+var labelType, useGradients, nativeTextSupport, animate;
+
+(function() {
+  var ua = navigator.userAgent,
+      iStuff = ua.match(/iPhone/i) || ua.match(/iPad/i),
+      typeOfCanvas = typeof HTMLCanvasElement,
+      nativeCanvasSupport = (typeOfCanvas == 'object' || typeOfCanvas == 'function'),
+      textSupport = nativeCanvasSupport 
+        && (typeof document.createElement('canvas').getContext('2d').fillText == 'function');
+  //I'm setting this based on the fact that ExCanvas provides text support for IE
+  //and that as of today iPhone/iPad current text support is lame
+  labelType = (!nativeCanvasSupport || (textSupport && !iStuff))? 'Native' : 'HTML';
+  nativeTextSupport = labelType == 'Native';
+  useGradients = nativeCanvasSupport;
+  animate = !(iStuff || !nativeCanvasSupport);
+})();
+
+var Log = {
+  elem: false,
+  write: function(text){
+    if (!this.elem) 
+      this.elem = document.getElementById('log');
+    this.elem.innerHTML = text;
+    this.elem.style.left = (500 - this.elem.offsetWidth / 2) + 'px';
+  }
+};
+
+
+function init(){
+  //init data
+  var json = memnodes[0];
+  //end
+  //init TreeMap
+  var tm = new $jit.TM.Squarified({
+    //where to inject the visualization
+    injectInto: 'infovis',
+    //parent box title heights
+    titleHeight: 15,
+    //enable animations
+    animate: animate,
+    //box offsets
+    offset: 1,
+constrained: true,
+      levelsToShow: 2,
+
+    //Attach left and right click events
+    Events: {
+      enable: true,
+      onClick: function(node) {
+        if(node) tm.enter(node);
+      },
+      onRightClick: function() {
+        tm.out();
+      }
+    },
+    duration: 100,
+    //Enable tips
+    Tips: {
+      enable: true,
+      //add positioning offsets
+      offsetX: 20,
+      offsetY: 20,
+      //implement the onShow method to
+      //add content to the tooltip when a node
+      //is hovered
+      onShow: function(tip, node, isLeaf, domElement) {
+        var html = "<div class=\"tip-title\">" + node.name 
+          + "</div><div class=\"tip-text\">";
+        var data = node.data;
+        if(data.playcount) {
+          html += "play count: " + data.playcount;
+        }
+        tip.innerHTML =  html; 
+      }  
+    },
+    //Add the name of the node in the correponding label
+    //This method is called once, on label creation.
+    onCreateLabel: function(domElement, node){
+        domElement.innerHTML = node.name;
+        var style = domElement.style;
+        style.display = '';
+        style.border = '1px solid transparent';
+        domElement.onmouseover = function() {
+          style.border = '1px solid #9FD4FF';
+        };
+        domElement.onmouseout = function() {
+          style.border = '1px solid transparent';
+        };
+    }
+  });
+  tm.loadJSON(json);
+  tm.refresh();
+  //end
+  //add events to radio buttons
+  var sq = $jit.id('r-sq'),
+      st = $jit.id('r-st'),
+      sd = $jit.id('r-sd');
+  var util = $jit.util;
+  util.addEvent(sq, 'change', function() {
+    if(!sq.checked) return;
+    util.extend(tm, new $jit.Layouts.TM.Squarified);
+    tm.refresh();
+  });
+  util.addEvent(st, 'change', function() {
+    if(!st.checked) return;
+    util.extend(tm, new $jit.Layouts.TM.Strip);
+    tm.layout.orientation = "v";
+    tm.refresh();
+  });
+  util.addEvent(sd, 'change', function() {
+    if(!sd.checked) return;
+    util.extend(tm, new $jit.Layouts.TM.SliceAndDice);
+    tm.layout.orientation = "v";
+    tm.refresh();
+  });
+  //add event to the back button
+  var back = $jit.id('back');
+  $jit.util.addEvent(back, 'click', function() {
+    tm.out();
+  });
+}
diff --git a/static/tm0data.js b/static/tm0data.js
new file mode 100644 (file)
index 0000000..1202d8d
--- /dev/null
@@ -0,0 +1,9011 @@
+memnodes = [{ "id": "1", "name": "perl_size", "depth":0, "children":[ 
+    { "id": "2", "name": "PL_defstash->", "depth":1, "children":[ 
+        { "id": "3", "name": "SV(PVHV)", "depth":2, "children":[ 
+            { "id": "4", "name": "HvARRAY->", "depth":3, "children":[ 
+                { "id": "5", "name": "hent_hek->", "depth":4, "children":[ 
+                ], "data":{ "$area": 43 } },
+                { "id": "6", "name": "HeVAL->", "depth":4, "children":[ 
+                    { "id": "7", "name": "SV(PVGV)", "depth":5, "children":[ 
+                        { "id": "8", "name": "GvFILE_HEK->", "depth":6, "children":[ 
+                        ], "data":{ "$area": 36 } },
+                        { "id": "9", "name": "gp_hv->", "depth":6, "children":[ 
+                            { "id": "10", "name": "SV(PVHV)", "depth":7, "children":[ 
+                                { "id": "11", "name": "UNKNOWN(0,0x0)", "depth":8, "children":[ 
+                                    { "id": "12", "name": "MAGIC(c)", "depth":9, "children":[ 
+                                    ], "data":{ "$area": 608 } },
+                                    { "id": "13", "name": "hent_hek->", "depth":9, "children":[ 
+                                    ], "data":{ "$area": 37 } },
+                                    { "id": "14", "name": "HeVAL->", "depth":9, "children":[ 
+                                        { "id": "15", "name": "SV(PVGV)", "depth":10, "children":[ 
+                                            { "id": "16", "name": "UNKNOWN(0,0x0)", "depth":11, "children":[ 
+                                                { "id": "17", "name": "MAGIC(<)", "depth":12, "children":[ 
+                                                    { "id": "18", "name": "mg_obj->", "depth":13, "children":[ 
+                                                        { "id": "19", "name": "SV(PVCV)", "depth":14, "children":[ 
+                                                        ], "data":{ "$area": 128 } },
+                                                    ], "data":{ "$area": 128 } },
+                                                ], "data":{ "$area": 168 } },
+                                            ], "data":{ "$area": 168 } },
+                                        ], "data":{ "$area": 320 } },
+                                    ], "data":{ "$area": 320 } },
+                                    { "id": "20", "name": "hent_hek->", "depth":9, "children":[ 
+                                    ], "data":{ "$area": 40 } },
+                                    { "id": "21", "name": "HeVAL->", "depth":9, "children":[ 
+                                        { "id": "22", "name": "SV(PVGV)", "depth":10, "children":[ 
+                                            { "id": "23", "name": "UNKNOWN(0,0x0)", "depth":11, "children":[ 
+                                                { "id": "24", "name": "MAGIC(<)", "depth":12, "children":[ 
+                                                    { "id": "25", "name": "mg_obj->", "depth":13, "children":[ 
+                                                        { "id": "26", "name": "SV(PVCV)", "depth":14, "children":[ 
+                                                        ], "data":{ "$area": 128 } },
+                                                    ], "data":{ "$area": 128 } },
+                                                ], "data":{ "$area": 168 } },
+                                            ], "data":{ "$area": 168 } },
+                                        ], "data":{ "$area": 320 } },
+                                    ], "data":{ "$area": 320 } },
+                                    { "id": "27", "name": "hent_hek->", "depth":9, "children":[ 
+                                    ], "data":{ "$area": 38 } },
+                                    { "id": "28", "name": "HeVAL->", "depth":9, "children":[ 
+                                        { "id": "29", "name": "SV(PVGV)", "depth":10, "children":[ 
+                                            { "id": "30", "name": "UNKNOWN(0,0x0)", "depth":11, "children":[ 
+                                                { "id": "31", "name": "MAGIC(<)", "depth":12, "children":[ 
+                                                    { "id": "32", "name": "mg_obj->", "depth":13, "children":[ 
+                                                        { "id": "33", "name": "SV(PVCV)", "depth":14, "children":[ 
+                                                        ], "data":{ "$area": 128 } },
+                                                    ], "data":{ "$area": 128 } },
+                                                ], "data":{ "$area": 168 } },
+                                            ], "data":{ "$area": 168 } },
+                                        ], "data":{ "$area": 320 } },
+                                    ], "data":{ "$area": 320 } },
+                                    { "id": "34", "name": "hent_hek->", "depth":9, "children":[ 
+                                    ], "data":{ "$area": 39 } },
+                                    { "id": "35", "name": "HeVAL->", "depth":9, "children":[ 
+                                        { "id": "36", "name": "SV(PVGV)", "depth":10, "children":[ 
+                                            { "id": "37", "name": "UNKNOWN(0,0x0)", "depth":11, "children":[ 
+                                                { "id": "38", "name": "MAGIC(<)", "depth":12, "children":[ 
+                                                    { "id": "39", "name": "mg_obj->", "depth":13, "children":[ 
+                                                        { "id": "40", "name": "SV(PVCV)", "depth":14, "children":[ 
+                                                        ], "data":{ "$area": 128 } },
+                                                    ], "data":{ "$area": 128 } },
+                                                ], "data":{ "$area": 168 } },
+                                            ], "data":{ "$area": 168 } },
+                                        ], "data":{ "$area": 320 } },
+                                    ], "data":{ "$area": 320 } },
+                                    { "id": "41", "name": "hent_hek->", "depth":9, "children":[ 
+                                    ], "data":{ "$area": 38 } },
+                                    { "id": "42", "name": "HeVAL->", "depth":9, "children":[ 
+                                        { "id": "43", "name": "SV(PVGV)", "depth":10, "children":[ 
+                                            { "id": "44", "name": "UNKNOWN(0,0x0)", "depth":11, "children":[ 
+                                                { "id": "45", "name": "MAGIC(<)", "depth":12, "children":[ 
+                                                    { "id": "46", "name": "mg_obj->", "depth":13, "children":[ 
+                                                        { "id": "47", "name": "SV(PVCV)", "depth":14, "children":[ 
+                                                        ], "data":{ "$area": 128 } },
+                                                    ], "data":{ "$area": 128 } },
+                                                ], "data":{ "$area": 168 } },
+                                            ], "data":{ "$area": 168 } },
+                                        ], "data":{ "$area": 320 } },
+                                    ], "data":{ "$area": 320 } },
+                                    { "id": "48", "name": "hent_hek->", "depth":9, "children":[ 
+                                    ], "data":{ "$area": 36 } },
+                                    { "id": "49", "name": "HeVAL->", "depth":9, "children":[ 
+                                        { "id": "50", "name": "SV(PVGV)", "depth":10, "children":[ 
+                                            { "id": "51", "name": "UNKNOWN(0,0x0)", "depth":11, "children":[ 
+                                                { "id": "52", "name": "MAGIC(<)", "depth":12, "children":[ 
+                                                    { "id": "53", "name": "mg_obj->", "depth":13, "children":[ 
+                                                        { "id": "54", "name": "SV(PVCV)", "depth":14, "children":[ 
+                                                        ], "data":{ "$area": 128 } },
+                                                    ], "data":{ "$area": 128 } },
+                                                ], "data":{ "$area": 168 } },
+                                            ], "data":{ "$area": 168 } },
+                                        ], "data":{ "$area": 320 } },
+                                    ], "data":{ "$area": 320 } },
+                                    { "id": "55", "name": "hent_hek->", "depth":9, "children":[ 
+                                    ], "data":{ "$area": 37 } },
+                                    { "id": "56", "name": "HeVAL->", "depth":9, "children":[ 
+                                        { "id": "57", "name": "SV(PVGV)", "depth":10, "children":[ 
+                                            { "id": "58", "name": "UNKNOWN(0,0x0)", "depth":11, "children":[ 
+                                                { "id": "59", "name": "MAGIC(<)", "depth":12, "children":[ 
+                                                    { "id": "60", "name": "mg_obj->", "depth":13, "children":[ 
+                                                        { "id": "61", "name": "SV(PVCV)", "depth":14, "children":[ 
+                                                        ], "data":{ "$area": 128 } },
+                                                    ], "data":{ "$area": 128 } },
+                                                ], "data":{ "$area": 168 } },
+                                            ], "data":{ "$area": 168 } },
+                                        ], "data":{ "$area": 320 } },
+                                    ], "data":{ "$area": 320 } },
+                                    { "id": "62", "name": "hent_hek->", "depth":9, "children":[ 
+                                    ], "data":{ "$area": 41 } },
+                                    { "id": "63", "name": "HeVAL->", "depth":9, "children":[ 
+                                        { "id": "64", "name": "SV(PVGV)", "depth":10, "children":[ 
+                                            { "id": "65", "name": "UNKNOWN(0,0x0)", "depth":11, "children":[ 
+                                                { "id": "66", "name": "MAGIC(<)", "depth":12, "children":[ 
+                                                    { "id": "67", "name": "mg_obj->", "depth":13, "children":[ 
+                                                        { "id": "68", "name": "SV(PVCV)", "depth":14, "children":[ 
+                                                        ], "data":{ "$area": 128 } },
+                                                    ], "data":{ "$area": 128 } },
+                                                ], "data":{ "$area": 168 } },
+                                            ], "data":{ "$area": 168 } },
+                                        ], "data":{ "$area": 320 } },
+                                    ], "data":{ "$area": 320 } },
+                                    { "id": "69", "name": "hent_hek->", "depth":9, "children":[ 
+                                    ], "data":{ "$area": 37 } },
+                                    { "id": "70", "name": "HeVAL->", "depth":9, "children":[ 
+                                        { "id": "71", "name": "SV(PVGV)", "depth":10, "children":[ 
+                                            { "id": "72", "name": "UNKNOWN(0,0x0)", "depth":11, "children":[ 
+                                                { "id": "73", "name": "MAGIC(<)", "depth":12, "children":[ 
+                                                    { "id": "74", "name": "mg_obj->", "depth":13, "children":[ 
+                                                        { "id": "75", "name": "SV(PVCV)", "depth":14, "children":[ 
+                                                        ], "data":{ "$area": 128 } },
+                                                    ], "data":{ "$area": 128 } },
+                                                ], "data":{ "$area": 168 } },
+                                            ], "data":{ "$area": 168 } },
+                                        ], "data":{ "$area": 320 } },
+                                    ], "data":{ "$area": 320 } },
+                                    { "id": "76", "name": "hent_hek->", "depth":9, "children":[ 
+                                    ], "data":{ "$area": 43 } },
+                                    { "id": "77", "name": "HeVAL->", "depth":9, "children":[ 
+                                        { "id": "78", "name": "SV(PVGV)", "depth":10, "children":[ 
+                                            { "id": "79", "name": "UNKNOWN(0,0x0)", "depth":11, "children":[ 
+                                                { "id": "80", "name": "MAGIC(<)", "depth":12, "children":[ 
+                                                    { "id": "81", "name": "mg_obj->", "depth":13, "children":[ 
+                                                        { "id": "82", "name": "SV(PVCV)", "depth":14, "children":[ 
+                                                        ], "data":{ "$area": 128 } },
+                                                    ], "data":{ "$area": 128 } },
+                                                ], "data":{ "$area": 168 } },
+                                            ], "data":{ "$area": 168 } },
+                                        ], "data":{ "$area": 320 } },
+                                    ], "data":{ "$area": 320 } },
+                                    { "id": "83", "name": "hent_hek->", "depth":9, "children":[ 
+                                    ], "data":{ "$area": 42 } },
+                                    { "id": "84", "name": "HeVAL->", "depth":9, "children":[ 
+                                        { "id": "85", "name": "SV(PVGV)", "depth":10, "children":[ 
+                                            { "id": "86", "name": "GvFILE_HEK->", "depth":11, "children":[ 
+                                            ], "data":{ "$area": 102 } },
+                                        ], "data":{ "$area": 254 } },
+                                    ], "data":{ "$area": 254 } },
+                                    { "id": "87", "name": "hent_hek->", "depth":9, "children":[ 
+                                    ], "data":{ "$area": 36 } },
+                                    { "id": "88", "name": "HeVAL->", "depth":9, "children":[ 
+                                        { "id": "89", "name": "SV(PVGV)", "depth":10, "children":[ 
+                                            { "id": "90", "name": "UNKNOWN(0,0x0)", "depth":11, "children":[ 
+                                                { "id": "91", "name": "MAGIC(<)", "depth":12, "children":[ 
+                                                    { "id": "92", "name": "mg_obj->", "depth":13, "children":[ 
+                                                        { "id": "93", "name": "SV(PVCV)", "depth":14, "children":[ 
+                                                        ], "data":{ "$area": 128 } },
+                                                    ], "data":{ "$area": 128 } },
+                                                ], "data":{ "$area": 168 } },
+                                            ], "data":{ "$area": 168 } },
+                                        ], "data":{ "$area": 320 } },
+                                    ], "data":{ "$area": 320 } },
+                                    { "id": "94", "name": "hent_hek->", "depth":9, "children":[ 
+                                    ], "data":{ "$area": 36 } },
+                                    { "id": "95", "name": "HeVAL->", "depth":9, "children":[ 
+                                        { "id": "96", "name": "SV(PVGV)", "depth":10, "children":[ 
+                                            { "id": "97", "name": "UNKNOWN(0,0x0)", "depth":11, "children":[ 
+                                                { "id": "98", "name": "MAGIC(<)", "depth":12, "children":[ 
+                                                    { "id": "99", "name": "mg_obj->", "depth":13, "children":[ 
+                                                        { "id": "100", "name": "SV(PVCV)", "depth":14, "children":[ 
+                                                        ], "data":{ "$area": 128 } },
+                                                    ], "data":{ "$area": 128 } },
+                                                ], "data":{ "$area": 168 } },
+                                            ], "data":{ "$area": 168 } },
+                                        ], "data":{ "$area": 320 } },
+                                    ], "data":{ "$area": 320 } },
+                                    { "id": "101", "name": "hent_hek->", "depth":9, "children":[ 
+                                    ], "data":{ "$area": 37 } },
+                                    { "id": "102", "name": "HeVAL->", "depth":9, "children":[ 
+                                        { "id": "103", "name": "SV(PVGV)", "depth":10, "children":[ 
+                                            { "id": "104", "name": "UNKNOWN(0,0x0)", "depth":11, "children":[ 
+                                                { "id": "105", "name": "MAGIC(<)", "depth":12, "children":[ 
+                                                    { "id": "106", "name": "mg_obj->", "depth":13, "children":[ 
+                                                        { "id": "107", "name": "SV(PVCV)", "depth":14, "children":[ 
+                                                        ], "data":{ "$area": 128 } },
+                                                    ], "data":{ "$area": 128 } },
+                                                ], "data":{ "$area": 168 } },
+                                            ], "data":{ "$area": 168 } },
+                                        ], "data":{ "$area": 320 } },
+                                    ], "data":{ "$area": 320 } },
+                                    { "id": "108", "name": "hent_hek->", "depth":9, "children":[ 
+                                    ], "data":{ "$area": 38 } },
+                                    { "id": "109", "name": "HeVAL->", "depth":9, "children":[ 
+                                        { "id": "110", "name": "SV(PVGV)", "depth":10, "children":[ 
+                                            { "id": "111", "name": "UNKNOWN(0,0x0)", "depth":11, "children":[ 
+                                                { "id": "112", "name": "MAGIC(<)", "depth":12, "children":[ 
+                                                    { "id": "113", "name": "mg_obj->", "depth":13, "children":[ 
+                                                        { "id": "114", "name": "SV(PVCV)", "depth":14, "children":[ 
+                                                        ], "data":{ "$area": 128 } },
+                                                    ], "data":{ "$area": 128 } },
+                                                ], "data":{ "$area": 168 } },
+                                            ], "data":{ "$area": 168 } },
+                                        ], "data":{ "$area": 320 } },
+                                    ], "data":{ "$area": 320 } },
+                                    { "id": "115", "name": "hent_hek->", "depth":9, "children":[ 
+                                    ], "data":{ "$area": 37 } },
+                                    { "id": "116", "name": "HeVAL->", "depth":9, "children":[ 
+                                        { "id": "117", "name": "SV(PVGV)", "depth":10, "children":[ 
+                                            { "id": "118", "name": "UNKNOWN(0,0x0)", "depth":11, "children":[ 
+                                                { "id": "119", "name": "MAGIC(<)", "depth":12, "children":[ 
+                                                    { "id": "120", "name": "mg_obj->", "depth":13, "children":[ 
+                                                        { "id": "121", "name": "SV(PVCV)", "depth":14, "children":[ 
+                                                        ], "data":{ "$area": 128 } },
+                                                    ], "data":{ "$area": 128 } },
+                                                ], "data":{ "$area": 168 } },
+                                            ], "data":{ "$area": 168 } },
+                                        ], "data":{ "$area": 320 } },
+                                    ], "data":{ "$area": 320 } },
+                                    { "id": "122", "name": "hent_hek->", "depth":9, "children":[ 
+                                    ], "data":{ "$area": 38 } },
+                                    { "id": "123", "name": "HeVAL->", "depth":9, "children":[ 
+                                        { "id": "124", "name": "SV(PVGV)", "depth":10, "children":[ 
+                                            { "id": "125", "name": "UNKNOWN(0,0x0)", "depth":11, "children":[ 
+                                                { "id": "126", "name": "MAGIC(<)", "depth":12, "children":[ 
+                                                    { "id": "127", "name": "mg_obj->", "depth":13, "children":[ 
+                                                        { "id": "128", "name": "SV(PVCV)", "depth":14, "children":[ 
+                                                        ], "data":{ "$area": 128 } },
+                                                    ], "data":{ "$area": 128 } },
+                                                ], "data":{ "$area": 168 } },
+                                            ], "data":{ "$area": 168 } },
+                                        ], "data":{ "$area": 320 } },
+                                    ], "data":{ "$area": 320 } },
+                                    { "id": "129", "name": "hent_hek->", "depth":9, "children":[ 
+                                    ], "data":{ "$area": 36 } },
+                                    { "id": "130", "name": "HeVAL->", "depth":9, "children":[ 
+                                        { "id": "131", "name": "SV(PVGV)", "depth":10, "children":[ 
+                                            { "id": "132", "name": "UNKNOWN(0,0x0)", "depth":11, "children":[ 
+                                                { "id": "133", "name": "MAGIC(<)", "depth":12, "children":[ 
+                                                    { "id": "134", "name": "mg_obj->", "depth":13, "children":[ 
+                                                        { "id": "135", "name": "SV(PVCV)", "depth":14, "children":[ 
+                                                        ], "data":{ "$area": 128 } },
+                                                    ], "data":{ "$area": 128 } },
+                                                ], "data":{ "$area": 168 } },
+                                            ], "data":{ "$area": 168 } },
+                                        ], "data":{ "$area": 320 } },
+                                    ], "data":{ "$area": 320 } },
+                                    { "id": "136", "name": "hent_hek->", "depth":9, "children":[ 
+                                    ], "data":{ "$area": 37 } },
+                                    { "id": "137", "name": "HeVAL->", "depth":9, "children":[ 
+                                        { "id": "138", "name": "SV(PVGV)", "depth":10, "children":[ 
+                                            { "id": "139", "name": "UNKNOWN(0,0x0)", "depth":11, "children":[ 
+                                                { "id": "140", "name": "MAGIC(<)", "depth":12, "children":[ 
+                                                    { "id": "141", "name": "mg_obj->", "depth":13, "children":[ 
+                                                        { "id": "142", "name": "SV(PVCV)", "depth":14, "children":[ 
+                                                        ], "data":{ "$area": 128 } },
+                                                    ], "data":{ "$area": 128 } },
+                                                ], "data":{ "$area": 168 } },
+                                            ], "data":{ "$area": 168 } },
+                                        ], "data":{ "$area": 320 } },
+                                    ], "data":{ "$area": 320 } },
+                                    { "id": "143", "name": "hent_hek->", "depth":9, "children":[ 
+                                    ], "data":{ "$area": 41 } },
+                                    { "id": "144", "name": "HeVAL->", "depth":9, "children":[ 
+                                        { "id": "145", "name": "SV(PVGV)", "depth":10, "children":[ 
+                                        ], "data":{ "$area": 152 } },
+                                    ], "data":{ "$area": 152 } },
+                                    { "id": "146", "name": "hent_hek->", "depth":9, "children":[ 
+                                    ], "data":{ "$area": 38 } },
+                                    { "id": "147", "name": "HeVAL->", "depth":9, "children":[ 
+                                        { "id": "148", "name": "SV(PVGV)", "depth":10, "children":[ 
+                                            { "id": "149", "name": "UNKNOWN(0,0x0)", "depth":11, "children":[ 
+                                                { "id": "150", "name": "MAGIC(<)", "depth":12, "children":[ 
+                                                    { "id": "151", "name": "mg_obj->", "depth":13, "children":[ 
+                                                        { "id": "152", "name": "SV(PVCV)", "depth":14, "children":[ 
+                                                        ], "data":{ "$area": 128 } },
+                                                    ], "data":{ "$area": 128 } },
+                                                ], "data":{ "$area": 168 } },
+                                            ], "data":{ "$area": 168 } },
+                                        ], "data":{ "$area": 320 } },
+                                    ], "data":{ "$area": 320 } },
+                                    { "id": "153", "name": "hent_hek->", "depth":9, "children":[ 
+                                    ], "data":{ "$area": 36 } },
+                                    { "id": "154", "name": "HeVAL->", "depth":9, "children":[ 
+                                        { "id": "155", "name": "SV(PVGV)", "depth":10, "children":[ 
+                                            { "id": "156", "name": "UNKNOWN(0,0x0)", "depth":11, "children":[ 
+                                                { "id": "157", "name": "MAGIC(<)", "depth":12, "children":[ 
+                                                    { "id": "158", "name": "mg_obj->", "depth":13, "children":[ 
+                                                        { "id": "159", "name": "SV(PVCV)", "depth":14, "children":[ 
+                                                        ], "data":{ "$area": 128 } },
+                                                    ], "data":{ "$area": 128 } },
+                                                ], "data":{ "$area": 168 } },
+                                            ], "data":{ "$area": 168 } },
+                                        ], "data":{ "$area": 320 } },
+                                    ], "data":{ "$area": 320 } },
+                                    { "id": "160", "name": "hent_hek->", "depth":9, "children":[ 
+                                    ], "data":{ "$area": 41 } },
+                                    { "id": "161", "name": "HeVAL->", "depth":9, "children":[ 
+                                        { "id": "162", "name": "SV(PVGV)", "depth":10, "children":[ 
+                                            { "id": "163", "name": "UNKNOWN(0,0x0)", "depth":11, "children":[ 
+                                                { "id": "164", "name": "MAGIC(<)", "depth":12, "children":[ 
+                                                    { "id": "165", "name": "mg_obj->", "depth":13, "children":[ 
+                                                        { "id": "166", "name": "SV(PVCV)", "depth":14, "children":[ 
+                                                        ], "data":{ "$area": 128 } },
+                                                    ], "data":{ "$area": 128 } },
+                                                ], "data":{ "$area": 168 } },
+                                            ], "data":{ "$area": 168 } },
+                                        ], "data":{ "$area": 320 } },
+                                    ], "data":{ "$area": 320 } },
+                                    { "id": "167", "name": "hent_hek->", "depth":9, "children":[ 
+                                    ], "data":{ "$area": 43 } },
+                                    { "id": "168", "name": "HeVAL->", "depth":9, "children":[ 
+                                        { "id": "169", "name": "SV(PVGV)", "depth":10, "children":[ 
+                                            { "id": "170", "name": "UNKNOWN(0,0x0)", "depth":11, "children":[ 
+                                                { "id": "171", "name": "MAGIC(<)", "depth":12, "children":[ 
+                                                    { "id": "172", "name": "mg_obj->", "depth":13, "children":[ 
+                                                        { "id": "173", "name": "SV(PVCV)", "depth":14, "children":[ 
+                                                        ], "data":{ "$area": 128 } },
+                                                    ], "data":{ "$area": 128 } },
+                                                ], "data":{ "$area": 168 } },
+                                            ], "data":{ "$area": 168 } },
+                                        ], "data":{ "$area": 320 } },
+                                    ], "data":{ "$area": 320 } },
+                                    { "id": "174", "name": "hent_hek->", "depth":9, "children":[ 
+                                    ], "data":{ "$area": 39 } },
+                                    { "id": "175", "name": "HeVAL->", "depth":9, "children":[ 
+                                        { "id": "176", "name": "SV(PVGV)", "depth":10, "children":[ 
+                                            { "id": "177", "name": "UNKNOWN(0,0x0)", "depth":11, "children":[ 
+                                                { "id": "178", "name": "MAGIC(<)", "depth":12, "children":[ 
+                                                    { "id": "179", "name": "mg_obj->", "depth":13, "children":[ 
+                                                        { "id": "180", "name": "SV(PVCV)", "depth":14, "children":[ 
+                                                        ], "data":{ "$area": 128 } },
+                                                    ], "data":{ "$area": 128 } },
+                                                ], "data":{ "$area": 168 } },
+                                            ], "data":{ "$area": 168 } },
+                                        ], "data":{ "$area": 320 } },
+                                    ], "data":{ "$area": 320 } },
+                                    { "id": "181", "name": "hent_hek->", "depth":9, "children":[ 
+                                    ], "data":{ "$area": 39 } },
+                                    { "id": "182", "name": "HeVAL->", "depth":9, "children":[ 
+                                        { "id": "183", "name": "SV(PVGV)", "depth":10, "children":[ 
+                                            { "id": "184", "name": "UNKNOWN(0,0x0)", "depth":11, "children":[ 
+                                                { "id": "185", "name": "MAGIC(<)", "depth":12, "children":[ 
+                                                    { "id": "186", "name": "mg_obj->", "depth":13, "children":[ 
+                                                        { "id": "187", "name": "SV(PVCV)", "depth":14, "children":[ 
+                                                        ], "data":{ "$area": 128 } },
+                                                    ], "data":{ "$area": 128 } },
+                                                ], "data":{ "$area": 168 } },
+                                            ], "data":{ "$area": 168 } },
+                                        ], "data":{ "$area": 320 } },
+                                    ], "data":{ "$area": 320 } },
+                                    { "id": "188", "name": "hent_hek->", "depth":9, "children":[ 
+                                    ], "data":{ "$area": 40 } },
+                                    { "id": "189", "name": "HeVAL->", "depth":9, "children":[ 
+                                        { "id": "190", "name": "SV(PVGV)", "depth":10, "children":[ 
+                                            { "id": "191", "name": "UNKNOWN(0,0x0)", "depth":11, "children":[ 
+                                                { "id": "192", "name": "MAGIC(<)", "depth":12, "children":[ 
+                                                    { "id": "193", "name": "mg_obj->", "depth":13, "children":[ 
+                                                        { "id": "194", "name": "SV(PVCV)", "depth":14, "children":[ 
+                                                        ], "data":{ "$area": 128 } },
+                                                    ], "data":{ "$area": 128 } },
+                                                ], "data":{ "$area": 168 } },
+                                            ], "data":{ "$area": 168 } },
+                                        ], "data":{ "$area": 320 } },
+                                    ], "data":{ "$area": 320 } },
+                                    { "id": "195", "name": "hent_hek->", "depth":9, "children":[ 
+                                    ], "data":{ "$area": 42 } },
+                                    { "id": "196", "name": "HeVAL->", "depth":9, "children":[ 
+                                        { "id": "197", "name": "SV(PVGV)", "depth":10, "children":[ 
+                                            { "id": "198", "name": "UNKNOWN(0,0x0)", "depth":11, "children":[ 
+                                                { "id": "199", "name": "MAGIC(<)", "depth":12, "children":[ 
+                                                    { "id": "200", "name": "mg_obj->", "depth":13, "children":[ 
+                                                        { "id": "201", "name": "SV(PVCV)", "depth":14, "children":[ 
+                                                        ], "data":{ "$area": 128 } },
+                                                    ], "data":{ "$area": 128 } },
+                                                ], "data":{ "$area": 168 } },
+                                            ], "data":{ "$area": 168 } },
+                                        ], "data":{ "$area": 320 } },
+                                    ], "data":{ "$area": 320 } },
+                                    { "id": "202", "name": "hent_hek->", "depth":9, "children":[ 
+                                    ], "data":{ "$area": 37 } },
+                                    { "id": "203", "name": "HeVAL->", "depth":9, "children":[ 
+                                        { "id": "204", "name": "SV(PVGV)", "depth":10, "children":[ 
+                                            { "id": "205", "name": "UNKNOWN(0,0x0)", "depth":11, "children":[ 
+                                                { "id": "206", "name": "MAGIC(<)", "depth":12, "children":[ 
+                                                    { "id": "207", "name": "mg_obj->", "depth":13, "children":[ 
+                                                        { "id": "208", "name": "SV(PVCV)", "depth":14, "children":[ 
+                                                        ], "data":{ "$area": 128 } },
+                                                    ], "data":{ "$area": 128 } },
+                                                ], "data":{ "$area": 168 } },
+                                            ], "data":{ "$area": 168 } },
+                                        ], "data":{ "$area": 320 } },
+                                    ], "data":{ "$area": 320 } },
+                                    { "id": "209", "name": "hent_hek->", "depth":9, "children":[ 
+                                    ], "data":{ "$area": 36 } },
+                                    { "id": "210", "name": "HeVAL->", "depth":9, "children":[ 
+                                        { "id": "211", "name": "SV(PVGV)", "depth":10, "children":[ 
+                                            { "id": "212", "name": "UNKNOWN(0,0x0)", "depth":11, "children":[ 
+                                                { "id": "213", "name": "MAGIC(<)", "depth":12, "children":[ 
+                                                    { "id": "214", "name": "mg_obj->", "depth":13, "children":[ 
+                                                        { "id": "215", "name": "SV(PVCV)", "depth":14, "children":[ 
+                                                        ], "data":{ "$area": 128 } },
+                                                    ], "data":{ "$area": 128 } },
+                                                ], "data":{ "$area": 168 } },
+                                            ], "data":{ "$area": 168 } },
+                                        ], "data":{ "$area": 320 } },
+                                    ], "data":{ "$area": 320 } },
+                                    { "id": "216", "name": "HvNAME_HEK->", "depth":9, "children":[ 
+                                    ], "data":{ "$area": 41 } },
+                                    { "id": "217", "name": "isa->", "depth":9, "children":[ 
+                                        { "id": "218", "name": "SV(PVHV)", "depth":10, "children":[ 
+                                            { "id": "219", "name": "HvARRAY->", "depth":11, "children":[ 
+                                                { "id": "220", "name": "hent_hek->", "depth":12, "children":[ 
+                                                ], "data":{ "$area": 43 } },
+                                            ], "data":{ "$area": 91 } },
+                                        ], "data":{ "$area": 211 } },
+                                    ], "data":{ "$area": 211 } },
+                                    { "id": "221", "name": "mro_linear_current->", "depth":9, "children":[ 
+                                        { "id": "222", "name": "SV(PVAV)", "depth":10, "children":[ 
+                                            { "id": "223", "name": "AVelem->", "depth":11, "children":[ 
+                                                { "id": "224", "name": "SV(PV)", "depth":12, "children":[ 
+                                                ], "data":{ "$area": 40 } },
+                                            ], "data":{ "$area": 40 } },
+                                        ], "data":{ "$area": 136 } },
+                                    ], "data":{ "$area": 136 } },
+                                ], "data":{ "$area": 12325 } },
+                            ], "data":{ "$area": 12637 } },
+                        ], "data":{ "$area": 12637 } },
+                    ], "data":{ "$area": 12825 } },
+                ], "data":{ "$area": 12825 } },
+                { "id": "225", "name": "hent_hek->", "depth":4, "children":[ 
+                ], "data":{ "$area": 35 } },
+                { "id": "226", "name": "HeVAL->", "depth":4, "children":[ 
+                    { "id": "227", "name": "SV(PVGV)", "depth":5, "children":[ 
+                        { "id": "228", "name": "GvFILE_HEK->", "depth":6, "children":[ 
+                        ], "data":{ "$area": 34 } },
+                        { "id": "229", "name": "gp_sv->", "depth":6, "children":[ 
+                            { "id": "230", "name": "SV(PVMG)", "depth":7, "children":[ 
+                                { "id": "231", "name": "UNKNOWN(0,0x0)", "depth":8, "children":[ 
+                                    { "id": "232", "name": "MAGIC(0)", "depth":9, "children":[ 
+                                    ], "data":{ "$area": 41 } },
+                                ], "data":{ "$area": 41 } },
+                            ], "data":{ "$area": 129 } },
+                        ], "data":{ "$area": 129 } },
+                    ], "data":{ "$area": 315 } },
+                ], "data":{ "$area": 315 } },
+                { "id": "233", "name": "hent_hek->", "depth":4, "children":[ 
+                ], "data":{ "$area": 40 } },
+                { "id": "234", "name": "HeVAL->", "depth":4, "children":[ 
+                    { "id": "235", "name": "SV(PVGV)", "depth":5, "children":[ 
+                        { "id": "236", "name": "gp_sv->", "depth":6, "children":[ 
+                            { "id": "237", "name": "SV(NULL)", "depth":7, "children":[ 
+                            ], "data":{ "$area": 24 } },
+                        ], "data":{ "$area": 24 } },
+                    ], "data":{ "$area": 176 } },
+                ], "data":{ "$area": 176 } },
+                { "id": "238", "name": "hent_hek->", "depth":4, "children":[ 
+                ], "data":{ "$area": 37 } },
+                { "id": "239", "name": "HeVAL->", "depth":4, "children":[ 
+                    { "id": "240", "name": "SV(PVGV)", "depth":5, "children":[ 
+                        { "id": "241", "name": "gp_hv->", "depth":6, "children":[ 
+                            { "id": "242", "name": "SV(PVHV)", "depth":7, "children":[ 
+                                { "id": "243", "name": "UNKNOWN(0,0x0)", "depth":8, "children":[ 
+                                    { "id": "244", "name": "MAGIC(S)", "depth":9, "children":[ 
+                                    ], "data":{ "$area": 40 } },
+                                    { "id": "245", "name": "hent_hek->", "depth":9, "children":[ 
+                                    ], "data":{ "$area": 38 } },
+                                    { "id": "246", "name": "HeVAL->", "depth":9, "children":[ 
+                                        { "id": "247", "name": "SV(PVMG)", "depth":10, "children":[ 
+                                            { "id": "248", "name": "UNKNOWN(0,0x0)", "depth":11, "children":[ 
+                                                { "id": "249", "name": "MAGIC(s)", "depth":12, "children":[ 
+                                                ], "data":{ "$area": 44 } },
+                                            ], "data":{ "$area": 44 } },
+                                        ], "data":{ "$area": 116 } },
+                                    ], "data":{ "$area": 116 } },
+                                    { "id": "250", "name": "hent_hek->", "depth":9, "children":[ 
+                                    ], "data":{ "$area": 38 } },
+                                    { "id": "251", "name": "HeVAL->", "depth":9, "children":[ 
+                                        { "id": "252", "name": "SV(PVMG)", "depth":10, "children":[ 
+                                            { "id": "253", "name": "UNKNOWN(0,0x0)", "depth":11, "children":[ 
+                                                { "id": "254", "name": "MAGIC(s)", "depth":12, "children":[ 
+                                                ], "data":{ "$area": 44 } },
+                                            ], "data":{ "$area": 44 } },
+                                        ], "data":{ "$area": 116 } },
+                                    ], "data":{ "$area": 116 } },
+                                    { "id": "255", "name": "hent_hek->", "depth":9, "children":[ 
+                                    ], "data":{ "$area": 37 } },
+                                    { "id": "256", "name": "HeVAL->", "depth":9, "children":[ 
+                                        { "id": "257", "name": "SV(PVMG)", "depth":10, "children":[ 
+                                            { "id": "258", "name": "UNKNOWN(0,0x0)", "depth":11, "children":[ 
+                                                { "id": "259", "name": "MAGIC(s)", "depth":12, "children":[ 
+                                                ], "data":{ "$area": 43 } },
+                                            ], "data":{ "$area": 43 } },
+                                        ], "data":{ "$area": 115 } },
+                                    ], "data":{ "$area": 115 } },
+                                    { "id": "260", "name": "hent_hek->", "depth":9, "children":[ 
+                                    ], "data":{ "$area": 38 } },
+                                    { "id": "261", "name": "HeVAL->", "depth":9, "children":[ 
+                                        { "id": "262", "name": "SV(PVMG)", "depth":10, "children":[ 
+                                            { "id": "263", "name": "UNKNOWN(0,0x0)", "depth":11, "children":[ 
+                                                { "id": "264", "name": "MAGIC(s)", "depth":12, "children":[ 
+                                                ], "data":{ "$area": 44 } },
+                                            ], "data":{ "$area": 44 } },
+                                        ], "data":{ "$area": 116 } },
+                                    ], "data":{ "$area": 116 } },
+                                    { "id": "265", "name": "hent_hek->", "depth":9, "children":[ 
+                                    ], "data":{ "$area": 36 } },
+                                    { "id": "266", "name": "HeVAL->", "depth":9, "children":[ 
+                                        { "id": "267", "name": "SV(PVMG)", "depth":10, "children":[ 
+                                            { "id": "268", "name": "UNKNOWN(0,0x0)", "depth":11, "children":[ 
+                                                { "id": "269", "name": "MAGIC(s)", "depth":12, "children":[ 
+                                                ], "data":{ "$area": 42 } },
+                                            ], "data":{ "$area": 42 } },
+                                        ], "data":{ "$area": 114 } },
+                                    ], "data":{ "$area": 114 } },
+                                    { "id": "270", "name": "hent_hek->", "depth":9, "children":[ 
+                                    ], "data":{ "$area": 37 } },
+                                    { "id": "271", "name": "HeVAL->", "depth":9, "children":[ 
+                                        { "id": "272", "name": "SV(PVMG)", "depth":10, "children":[ 
+                                            { "id": "273", "name": "UNKNOWN(0,0x0)", "depth":11, "children":[ 
+                                                { "id": "274", "name": "MAGIC(s)", "depth":12, "children":[ 
+                                                ], "data":{ "$area": 43 } },
+                                            ], "data":{ "$area": 43 } },
+                                        ], "data":{ "$area": 115 } },
+                                    ], "data":{ "$area": 115 } },
+                                    { "id": "275", "name": "hent_hek->", "depth":9, "children":[ 
+                                    ], "data":{ "$area": 38 } },
+                                    { "id": "276", "name": "HeVAL->", "depth":9, "children":[ 
+                                        { "id": "277", "name": "SV(PVMG)", "depth":10, "children":[ 
+                                            { "id": "278", "name": "UNKNOWN(0,0x0)", "depth":11, "children":[ 
+                                                { "id": "279", "name": "MAGIC(s)", "depth":12, "children":[ 
+                                                ], "data":{ "$area": 44 } },
+                                            ], "data":{ "$area": 44 } },
+                                        ], "data":{ "$area": 116 } },
+                                    ], "data":{ "$area": 116 } },
+                                    { "id": "280", "name": "hent_hek->", "depth":9, "children":[ 
+                                    ], "data":{ "$area": 38 } },
+                                    { "id": "281", "name": "HeVAL->", "depth":9, "children":[ 
+                                        { "id": "282", "name": "SV(PVMG)", "depth":10, "children":[ 
+                                            { "id": "283", "name": "UNKNOWN(0,0x0)", "depth":11, "children":[ 
+                                                { "id": "284", "name": "MAGIC(s)", "depth":12, "children":[ 
+                                                ], "data":{ "$area": 44 } },
+                                            ], "data":{ "$area": 44 } },
+                                        ], "data":{ "$area": 116 } },
+                                    ], "data":{ "$area": 116 } },
+                                    { "id": "285", "name": "hent_hek->", "depth":9, "children":[ 
+                                    ], "data":{ "$area": 38 } },
+                                    { "id": "286", "name": "HeVAL->", "depth":9, "children":[ 
+                                        { "id": "287", "name": "SV(PVMG)", "depth":10, "children":[ 
+                                            { "id": "288", "name": "UNKNOWN(0,0x0)", "depth":11, "children":[ 
+                                                { "id": "289", "name": "MAGIC(s)", "depth":12, "children":[ 
+                                                ], "data":{ "$area": 44 } },
+                                            ], "data":{ "$area": 44 } },
+                                        ], "data":{ "$area": 116 } },
+                                    ], "data":{ "$area": 116 } },
+                                    { "id": "290", "name": "hent_hek->", "depth":9, "children":[ 
+                                    ], "data":{ "$area": 38 } },
+                                    { "id": "291", "name": "HeVAL->", "depth":9, "children":[ 
+                                        { "id": "292", "name": "SV(PVMG)", "depth":10, "children":[ 
+                                            { "id": "293", "name": "UNKNOWN(0,0x0)", "depth":11, "children":[ 
+                                                { "id": "294", "name": "MAGIC(s)", "depth":12, "children":[ 
+                                                ], "data":{ "$area": 44 } },
+                                            ], "data":{ "$area": 44 } },
+                                        ], "data":{ "$area": 116 } },
+                                    ], "data":{ "$area": 116 } },
+                                    { "id": "295", "name": "hent_hek->", "depth":9, "children":[ 
+                                    ], "data":{ "$area": 38 } },
+                                    { "id": "296", "name": "HeVAL->", "depth":9, "children":[ 
+                                        { "id": "297", "name": "SV(PVMG)", "depth":10, "children":[ 
+                                            { "id": "298", "name": "UNKNOWN(0,0x0)", "depth":11, "children":[ 
+                                                { "id": "299", "name": "MAGIC(s)", "depth":12, "children":[ 
+                                                ], "data":{ "$area": 44 } },
+                                            ], "data":{ "$area": 44 } },
+                                        ], "data":{ "$area": 116 } },
+                                    ], "data":{ "$area": 116 } },
+                                    { "id": "300", "name": "hent_hek->", "depth":9, "children":[ 
+                                    ], "data":{ "$area": 38 } },
+                                    { "id": "301", "name": "HeVAL->", "depth":9, "children":[ 
+                                        { "id": "302", "name": "SV(PVMG)", "depth":10, "children":[ 
+                                            { "id": "303", "name": "UNKNOWN(0,0x0)", "depth":11, "children":[ 
+                                                { "id": "304", "name": "MAGIC(s)", "depth":12, "children":[ 
+                                                ], "data":{ "$area": 44 } },
+                                            ], "data":{ "$area": 44 } },
+                                        ], "data":{ "$area": 116 } },
+                                    ], "data":{ "$area": 116 } },
+                                    { "id": "305", "name": "hent_hek->", "depth":9, "children":[ 
+                                    ], "data":{ "$area": 38 } },
+                                    { "id": "306", "name": "HeVAL->", "depth":9, "children":[ 
+                                        { "id": "307", "name": "SV(PVMG)", "depth":10, "children":[ 
+                                            { "id": "308", "name": "UNKNOWN(0,0x0)", "depth":11, "children":[ 
+                                                { "id": "309", "name": "MAGIC(s)", "depth":12, "children":[ 
+                                                ], "data":{ "$area": 44 } },
+                                            ], "data":{ "$area": 44 } },
+                                        ], "data":{ "$area": 116 } },
+                                    ], "data":{ "$area": 116 } },
+                                    { "id": "310", "name": "hent_hek->", "depth":9, "children":[ 
+                                    ], "data":{ "$area": 37 } },
+                                    { "id": "311", "name": "HeVAL->", "depth":9, "children":[ 
+                                        { "id": "312", "name": "SV(PVMG)", "depth":10, "children":[ 
+                                            { "id": "313", "name": "UNKNOWN(0,0x0)", "depth":11, "children":[ 
+                                                { "id": "314", "name": "MAGIC(s)", "depth":12, "children":[ 
+                                                ], "data":{ "$area": 43 } },
+                                            ], "data":{ "$area": 43 } },
+                                        ], "data":{ "$area": 115 } },
+                                    ], "data":{ "$area": 115 } },
+                                    { "id": "315", "name": "hent_hek->", "depth":9, "children":[ 
+                                    ], "data":{ "$area": 40 } },
+                                    { "id": "316", "name": "HeVAL->", "depth":9, "children":[ 
+                                        { "id": "317", "name": "SV(PVMG)", "depth":10, "children":[ 
+                                            { "id": "318", "name": "UNKNOWN(0,0x0)", "depth":11, "children":[ 
+                                                { "id": "319", "name": "MAGIC(s)", "depth":12, "children":[ 
+                                                ], "data":{ "$area": 46 } },
+                                            ], "data":{ "$area": 46 } },
+                                        ], "data":{ "$area": 118 } },
+                                    ], "data":{ "$area": 118 } },
+                                    { "id": "320", "name": "hent_hek->", "depth":9, "children":[ 
+                                    ], "data":{ "$area": 38 } },
+                                    { "id": "321", "name": "HeVAL->", "depth":9, "children":[ 
+                                        { "id": "322", "name": "SV(PVMG)", "depth":10, "children":[ 
+                                            { "id": "323", "name": "UNKNOWN(0,0x0)", "depth":11, "children":[ 
+                                                { "id": "324", "name": "MAGIC(s)", "depth":12, "children":[ 
+                                                ], "data":{ "$area": 44 } },
+                                            ], "data":{ "$area": 44 } },
+                                        ], "data":{ "$area": 116 } },
+                                    ], "data":{ "$area": 116 } },
+                                    { "id": "325", "name": "hent_hek->", "depth":9, "children":[ 
+                                    ], "data":{ "$area": 38 } },
+                                    { "id": "326", "name": "HeVAL->", "depth":9, "children":[ 
+                                        { "id": "327", "name": "SV(PVMG)", "depth":10, "children":[ 
+                                            { "id": "328", "name": "UNKNOWN(0,0x0)", "depth":11, "children":[ 
+                                                { "id": "329", "name": "MAGIC(s)", "depth":12, "children":[ 
+                                                ], "data":{ "$area": 44 } },
+                                            ], "data":{ "$area": 44 } },
+                                        ], "data":{ "$area": 116 } },
+                                    ], "data":{ "$area": 116 } },
+                                    { "id": "330", "name": "hent_hek->", "depth":9, "children":[ 
+                                    ], "data":{ "$area": 38 } },
+                                    { "id": "331", "name": "HeVAL->", "depth":9, "children":[ 
+                                        { "id": "332", "name": "SV(PVMG)", "depth":10, "children":[ 
+                                            { "id": "333", "name": "UNKNOWN(0,0x0)", "depth":11, "children":[ 
+                                                { "id": "334", "name": "MAGIC(s)", "depth":12, "children":[ 
+                                                ], "data":{ "$area": 44 } },
+                                            ], "data":{ "$area": 44 } },
+                                        ], "data":{ "$area": 116 } },
+                                    ], "data":{ "$area": 116 } },
+                                    { "id": "335", "name": "hent_hek->", "depth":9, "children":[ 
+                                    ], "data":{ "$area": 37 } },
+                                    { "id": "336", "name": "HeVAL->", "depth":9, "children":[ 
+                                        { "id": "337", "name": "SV(PVMG)", "depth":10, "children":[ 
+                                            { "id": "338", "name": "UNKNOWN(0,0x0)", "depth":11, "children":[ 
+                                                { "id": "339", "name": "MAGIC(s)", "depth":12, "children":[ 
+                                                ], "data":{ "$area": 43 } },
+                                            ], "data":{ "$area": 43 } },
+                                        ], "data":{ "$area": 115 } },
+                                    ], "data":{ "$area": 115 } },
+                                    { "id": "340", "name": "hent_hek->", "depth":9, "children":[ 
+                                    ], "data":{ "$area": 37 } },
+                                    { "id": "341", "name": "HeVAL->", "depth":9, "children":[ 
+                                        { "id": "342", "name": "SV(PVMG)", "depth":10, "children":[ 
+                                            { "id": "343", "name": "UNKNOWN(0,0x0)", "depth":11, "children":[ 
+                                                { "id": "344", "name": "MAGIC(s)", "depth":12, "children":[ 
+                                                ], "data":{ "$area": 43 } },
+                                            ], "data":{ "$area": 43 } },
+                                        ], "data":{ "$area": 115 } },
+                                    ], "data":{ "$area": 115 } },
+                                    { "id": "345", "name": "hent_hek->", "depth":9, "children":[ 
+                                    ], "data":{ "$area": 37 } },
+                                    { "id": "346", "name": "HeVAL->", "depth":9, "children":[ 
+                                        { "id": "347", "name": "SV(PVMG)", "depth":10, "children":[ 
+                                            { "id": "348", "name": "UNKNOWN(0,0x0)", "depth":11, "children":[ 
+                                                { "id": "349", "name": "MAGIC(s)", "depth":12, "children":[ 
+                                                ], "data":{ "$area": 43 } },
+                                            ], "data":{ "$area": 43 } },
+                                        ], "data":{ "$area": 115 } },
+                                    ], "data":{ "$area": 115 } },
+                                    { "id": "350", "name": "hent_hek->", "depth":9, "children":[ 
+                                    ], "data":{ "$area": 38 } },
+                                    { "id": "351", "name": "HeVAL->", "depth":9, "children":[ 
+                                        { "id": "352", "name": "SV(PVMG)", "depth":10, "children":[ 
+                                            { "id": "353", "name": "UNKNOWN(0,0x0)", "depth":11, "children":[ 
+                                                { "id": "354", "name": "MAGIC(s)", "depth":12, "children":[ 
+                                                ], "data":{ "$area": 44 } },
+                                            ], "data":{ "$area": 44 } },
+                                        ], "data":{ "$area": 116 } },
+                                    ], "data":{ "$area": 116 } },
+                                    { "id": "355", "name": "hent_hek->", "depth":9, "children":[ 
+                                    ], "data":{ "$area": 41 } },
+                                    { "id": "356", "name": "HeVAL->", "depth":9, "children":[ 
+                                        { "id": "357", "name": "SV(PVMG)", "depth":10, "children":[ 
+                                            { "id": "358", "name": "UNKNOWN(0,0x0)", "depth":11, "children":[ 
+                                                { "id": "359", "name": "MAGIC(s)", "depth":12, "children":[ 
+                                                    { "id": "360", "name": "mg_ptr->", "depth":13, "children":[ 
+                                                        { "id": "361", "name": "SV(PV)", "depth":14, "children":[ 
+                                                        ], "data":{ "$area": 56 } },
+                                                    ], "data":{ "$area": 56 } },
+                                                ], "data":{ "$area": 96 } },
+                                            ], "data":{ "$area": 96 } },
+                                        ], "data":{ "$area": 168 } },
+                                    ], "data":{ "$area": 168 } },
+                                    { "id": "362", "name": "hent_hek->", "depth":9, "children":[ 
+                                    ], "data":{ "$area": 37 } },
+                                    { "id": "363", "name": "HeVAL->", "depth":9, "children":[ 
+                                        { "id": "364", "name": "SV(PVMG)", "depth":10, "children":[ 
+                                            { "id": "365", "name": "UNKNOWN(0,0x0)", "depth":11, "children":[ 
+                                                { "id": "366", "name": "MAGIC(s)", "depth":12, "children":[ 
+                                                ], "data":{ "$area": 43 } },
+                                            ], "data":{ "$area": 43 } },
+                                        ], "data":{ "$area": 115 } },
+                                    ], "data":{ "$area": 115 } },
+                                    { "id": "367", "name": "hent_hek->", "depth":9, "children":[ 
+                                    ], "data":{ "$area": 38 } },
+                                    { "id": "368", "name": "HeVAL->", "depth":9, "children":[ 
+                                        { "id": "369", "name": "SV(PVMG)", "depth":10, "children":[ 
+                                            { "id": "370", "name": "UNKNOWN(0,0x0)", "depth":11, "children":[ 
+                                                { "id": "371", "name": "MAGIC(s)", "depth":12, "children":[ 
+                                                ], "data":{ "$area": 44 } },
+                                            ], "data":{ "$area": 44 } },
+                                        ], "data":{ "$area": 116 } },
+                                    ], "data":{ "$area": 116 } },
+                                    { "id": "372", "name": "hent_hek->", "depth":9, "children":[ 
+                                    ], "data":{ "$area": 38 } },
+                                    { "id": "373", "name": "HeVAL->", "depth":9, "children":[ 
+                                        { "id": "374", "name": "SV(PVMG)", "depth":10, "children":[ 
+                                            { "id": "375", "name": "UNKNOWN(0,0x0)", "depth":11, "children":[ 
+                                                { "id": "376", "name": "MAGIC(s)", "depth":12, "children":[ 
+                                                ], "data":{ "$area": 44 } },
+                                            ], "data":{ "$area": 44 } },
+                                        ], "data":{ "$area": 116 } },
+                                    ], "data":{ "$area": 116 } },
+                                    { "id": "377", "name": "hent_hek->", "depth":9, "children":[ 
+                                    ], "data":{ "$area": 37 } },
+                                    { "id": "378", "name": "HeVAL->", "depth":9, "children":[ 
+                                        { "id": "379", "name": "SV(PVMG)", "depth":10, "children":[ 
+                                            { "id": "380", "name": "UNKNOWN(0,0x0)", "depth":11, "children":[ 
+                                                { "id": "381", "name": "MAGIC(s)", "depth":12, "children":[ 
+                                                ], "data":{ "$area": 43 } },
+                                            ], "data":{ "$area": 43 } },
+                                        ], "data":{ "$area": 115 } },
+                                    ], "data":{ "$area": 115 } },
+                                    { "id": "382", "name": "hent_hek->", "depth":9, "children":[ 
+                                    ], "data":{ "$area": 38 } },
+                                    { "id": "383", "name": "HeVAL->", "depth":9, "children":[ 
+                                        { "id": "384", "name": "SV(PVMG)", "depth":10, "children":[ 
+                                            { "id": "385", "name": "UNKNOWN(0,0x0)", "depth":11, "children":[ 
+                                                { "id": "386", "name": "MAGIC(s)", "depth":12, "children":[ 
+                                                ], "data":{ "$area": 44 } },
+                                            ], "data":{ "$area": 44 } },
+                                        ], "data":{ "$area": 116 } },
+                                    ], "data":{ "$area": 116 } },
+                                    { "id": "387", "name": "hent_hek->", "depth":9, "children":[ 
+                                    ], "data":{ "$area": 38 } },
+                                    { "id": "388", "name": "HeVAL->", "depth":9, "children":[ 
+                                        { "id": "389", "name": "SV(PVMG)", "depth":10, "children":[ 
+                                            { "id": "390", "name": "UNKNOWN(0,0x0)", "depth":11, "children":[ 
+                                                { "id": "391", "name": "MAGIC(s)", "depth":12, "children":[ 
+                                                ], "data":{ "$area": 44 } },
+                                            ], "data":{ "$area": 44 } },
+                                        ], "data":{ "$area": 116 } },
+                                    ], "data":{ "$area": 116 } },
+                                    { "id": "392", "name": "hent_hek->", "depth":9, "children":[ 
+                                    ], "data":{ "$area": 42 } },
+                                    { "id": "393", "name": "HeVAL->", "depth":9, "children":[ 
+                                        { "id": "394", "name": "SV(PVMG)", "depth":10, "children":[ 
+                                            { "id": "395", "name": "UNKNOWN(0,0x0)", "depth":11, "children":[ 
+                                                { "id": "396", "name": "MAGIC(s)", "depth":12, "children":[ 
+                                                    { "id": "397", "name": "mg_ptr->", "depth":13, "children":[ 
+                                                        { "id": "398", "name": "SV(PV)", "depth":14, "children":[ 
+                                                        ], "data":{ "$area": 56 } },
+                                                    ], "data":{ "$area": 56 } },
+                                                ], "data":{ "$area": 96 } },
+                                            ], "data":{ "$area": 96 } },
+                                        ], "data":{ "$area": 168 } },
+                                    ], "data":{ "$area": 168 } },
+                                    { "id": "399", "name": "hent_hek->", "depth":9, "children":[ 
+                                    ], "data":{ "$area": 39 } },
+                                    { "id": "400", "name": "HeVAL->", "depth":9, "children":[ 
+                                        { "id": "401", "name": "SV(PVMG)", "depth":10, "children":[ 
+                                            { "id": "402", "name": "UNKNOWN(0,0x0)", "depth":11, "children":[ 
+                                                { "id": "403", "name": "MAGIC(s)", "depth":12, "children":[ 
+                                                ], "data":{ "$area": 45 } },
+                                            ], "data":{ "$area": 45 } },
+                                        ], "data":{ "$area": 117 } },
+                                    ], "data":{ "$area": 117 } },
+                                    { "id": "404", "name": "hent_hek->", "depth":9, "children":[ 
+                                    ], "data":{ "$area": 38 } },
+                                    { "id": "405", "name": "HeVAL->", "depth":9, "children":[ 
+                                        { "id": "406", "name": "SV(PVMG)", "depth":10, "children":[ 
+                                            { "id": "407", "name": "UNKNOWN(0,0x0)", "depth":11, "children":[ 
+                                                { "id": "408", "name": "MAGIC(s)", "depth":12, "children":[ 
+                                                ], "data":{ "$area": 44 } },
+                                            ], "data":{ "$area": 44 } },
+                                        ], "data":{ "$area": 116 } },
+                                    ], "data":{ "$area": 116 } },
+                                    { "id": "409", "name": "hent_hek->", "depth":9, "children":[ 
+                                    ], "data":{ "$area": 37 } },
+                                    { "id": "410", "name": "HeVAL->", "depth":9, "children":[ 
+                                        { "id": "411", "name": "SV(PVMG)", "depth":10, "children":[ 
+                                            { "id": "412", "name": "UNKNOWN(0,0x0)", "depth":11, "children":[ 
+                                                { "id": "413", "name": "MAGIC(s)", "depth":12, "children":[ 
+                                                ], "data":{ "$area": 43 } },
+                                            ], "data":{ "$area": 43 } },
+                                        ], "data":{ "$area": 115 } },
+                                    ], "data":{ "$area": 115 } },
+                                    { "id": "414", "name": "hent_hek->", "depth":9, "children":[ 
+                                    ], "data":{ "$area": 38 } },
+                                    { "id": "415", "name": "HeVAL->", "depth":9, "children":[ 
+                                        { "id": "416", "name": "SV(PVMG)", "depth":10, "children":[ 
+                                            { "id": "417", "name": "UNKNOWN(0,0x0)", "depth":11, "children":[ 
+                                                { "id": "418", "name": "MAGIC(s)", "depth":12, "children":[ 
+                                                ], "data":{ "$area": 44 } },
+                                            ], "data":{ "$area": 44 } },
+                                        ], "data":{ "$area": 116 } },
+                                    ], "data":{ "$area": 116 } },
+                                ], "data":{ "$area": 6187 } },
+                            ], "data":{ "$area": 6755 } },
+                        ], "data":{ "$area": 6755 } },
+                    ], "data":{ "$area": 6907 } },
+                ], "data":{ "$area": 6907 } },
+                { "id": "419", "name": "hent_hek->", "depth":4, "children":[ 
+                ], "data":{ "$area": 35 } },
+                { "id": "420", "name": "HeVAL->", "depth":4, "children":[ 
+                    { "id": "421", "name": "SV(PVGV)", "depth":5, "children":[ 
+                        { "id": "422", "name": "gp_sv->", "depth":6, "children":[ 
+                            { "id": "423", "name": "SV(NULL)", "depth":7, "children":[ 
+                            ], "data":{ "$area": 24 } },
+                        ], "data":{ "$area": 24 } },
+                    ], "data":{ "$area": 176 } },
+                ], "data":{ "$area": 176 } },
+                { "id": "424", "name": "hent_hek->", "depth":4, "children":[ 
+                ], "data":{ "$area": 40 } },
+                { "id": "425", "name": "HeVAL->", "depth":4, "children":[ 
+                    { "id": "426", "name": "SV(PVGV)", "depth":5, "children":[ 
+                        { "id": "427", "name": "gp_hv->", "depth":6, "children":[ 
+                            { "id": "428", "name": "SV(PVHV)", "depth":7, "children":[ 
+                                { "id": "429", "name": "HvARRAY->", "depth":8, "children":[ 
+                                    { "id": "430", "name": "hent_hek->", "depth":9, "children":[ 
+                                    ], "data":{ "$area": 51 } },
+                                    { "id": "431", "name": "HeVAL->", "depth":9, "children":[ 
+                                        { "id": "432", "name": "SV(PVGV)", "depth":10, "children":[ 
+                                            { "id": "433", "name": "UNKNOWN(0,0x0)", "depth":11, "children":[ 
+                                                { "id": "434", "name": "MAGIC(<)", "depth":12, "children":[ 
+                                                    { "id": "435", "name": "mg_obj->", "depth":13, "children":[ 
+                                                        { "id": "436", "name": "SV(PVCV)", "depth":14, "children":[ 
+                                                        ], "data":{ "$area": 128 } },
+                                                    ], "data":{ "$area": 128 } },
+                                                ], "data":{ "$area": 168 } },
+                                            ], "data":{ "$area": 168 } },
+                                        ], "data":{ "$area": 320 } },
+                                    ], "data":{ "$area": 320 } },
+                                    { "id": "437", "name": "hent_hek->", "depth":9, "children":[ 
+                                    ], "data":{ "$area": 40 } },
+                                    { "id": "438", "name": "HeVAL->", "depth":9, "children":[ 
+                                        { "id": "439", "name": "SV(PVGV)", "depth":10, "children":[ 
+                                            { "id": "440", "name": "UNKNOWN(0,0x0)", "depth":11, "children":[ 
+                                                { "id": "441", "name": "MAGIC(<)", "depth":12, "children":[ 
+                                                    { "id": "442", "name": "mg_obj->", "depth":13, "children":[ 
+                                                        { "id": "443", "name": "SV(PVCV)", "depth":14, "children":[ 
+                                                        ], "data":{ "$area": 128 } },
+                                                    ], "data":{ "$area": 128 } },
+                                                ], "data":{ "$area": 168 } },
+                                            ], "data":{ "$area": 168 } },
+                                        ], "data":{ "$area": 320 } },
+                                    ], "data":{ "$area": 320 } },
+                                    { "id": "444", "name": "hent_hek->", "depth":9, "children":[ 
+                                    ], "data":{ "$area": 39 } },
+                                    { "id": "445", "name": "HeVAL->", "depth":9, "children":[ 
+                                        { "id": "446", "name": "SV(PVGV)", "depth":10, "children":[ 
+                                            { "id": "447", "name": "UNKNOWN(0,0x0)", "depth":11, "children":[ 
+                                                { "id": "448", "name": "MAGIC(<)", "depth":12, "children":[ 
+                                                    { "id": "449", "name": "mg_obj->", "depth":13, "children":[ 
+                                                        { "id": "450", "name": "SV(PVCV)", "depth":14, "children":[ 
+                                                        ], "data":{ "$area": 128 } },
+                                                    ], "data":{ "$area": 128 } },
+                                                ], "data":{ "$area": 168 } },
+                                            ], "data":{ "$area": 168 } },
+                                        ], "data":{ "$area": 320 } },
+                                    ], "data":{ "$area": 320 } },
+                                    { "id": "451", "name": "hent_hek->", "depth":9, "children":[ 
+                                    ], "data":{ "$area": 51 } },
+                                    { "id": "452", "name": "HeVAL->", "depth":9, "children":[ 
+                                        { "id": "453", "name": "SV(PVGV)", "depth":10, "children":[ 
+                                            { "id": "454", "name": "UNKNOWN(0,0x0)", "depth":11, "children":[ 
+                                                { "id": "455", "name": "MAGIC(<)", "depth":12, "children":[ 
+                                                    { "id": "456", "name": "mg_obj->", "depth":13, "children":[ 
+                                                        { "id": "457", "name": "SV(PVCV)", "depth":14, "children":[ 
+                                                        ], "data":{ "$area": 128 } },
+                                                    ], "data":{ "$area": 128 } },
+                                                ], "data":{ "$area": 168 } },
+                                            ], "data":{ "$area": 168 } },
+                                        ], "data":{ "$area": 320 } },
+                                    ], "data":{ "$area": 320 } },
+                                    { "id": "458", "name": "hent_hek->", "depth":9, "children":[ 
+                                    ], "data":{ "$area": 40 } },
+                                    { "id": "459", "name": "HeVAL->", "depth":9, "children":[ 
+                                        { "id": "460", "name": "SV(PVGV)", "depth":10, "children":[ 
+                                            { "id": "461", "name": "UNKNOWN(0,0x0)", "depth":11, "children":[ 
+                                                { "id": "462", "name": "MAGIC(<)", "depth":12, "children":[ 
+                                                    { "id": "463", "name": "mg_obj->", "depth":13, "children":[ 
+                                                        { "id": "464", "name": "SV(PVCV)", "depth":14, "children":[ 
+                                                        ], "data":{ "$area": 128 } },
+                                                    ], "data":{ "$area": 128 } },
+                                                ], "data":{ "$area": 168 } },
+                                            ], "data":{ "$area": 168 } },
+                                        ], "data":{ "$area": 320 } },
+                                    ], "data":{ "$area": 320 } },
+                                    { "id": "465", "name": "hent_hek->", "depth":9, "children":[ 
+                                    ], "data":{ "$area": 43 } },
+                                    { "id": "466", "name": "HeVAL->", "depth":9, "children":[ 
+                                        { "id": "467", "name": "SV(PVGV)", "depth":10, "children":[ 
+                                            { "id": "468", "name": "UNKNOWN(0,0x0)", "depth":11, "children":[ 
+                                                { "id": "469", "name": "MAGIC(<)", "depth":12, "children":[ 
+                                                    { "id": "470", "name": "mg_obj->", "depth":13, "children":[ 
+                                                        { "id": "471", "name": "SV(PVCV)", "depth":14, "children":[ 
+                                                        ], "data":{ "$area": 128 } },
+                                                    ], "data":{ "$area": 128 } },
+                                                ], "data":{ "$area": 168 } },
+                                            ], "data":{ "$area": 168 } },
+                                        ], "data":{ "$area": 320 } },
+                                    ], "data":{ "$area": 320 } },
+                                    { "id": "472", "name": "hent_hek->", "depth":9, "children":[ 
+                                    ], "data":{ "$area": 41 } },
+                                    { "id": "473", "name": "HeVAL->", "depth":9, "children":[ 
+                                        { "id": "474", "name": "SV(PVGV)", "depth":10, "children":[ 
+                                            { "id": "475", "name": "UNKNOWN(0,0x0)", "depth":11, "children":[ 
+                                                { "id": "476", "name": "MAGIC(<)", "depth":12, "children":[ 
+                                                    { "id": "477", "name": "mg_obj->", "depth":13, "children":[ 
+                                                        { "id": "478", "name": "SV(PVCV)", "depth":14, "children":[ 
+                                                        ], "data":{ "$area": 128 } },
+                                                    ], "data":{ "$area": 128 } },
+                                                ], "data":{ "$area": 168 } },
+                                            ], "data":{ "$area": 168 } },
+                                        ], "data":{ "$area": 320 } },
+                                    ], "data":{ "$area": 320 } },
+                                    { "id": "479", "name": "hent_hek->", "depth":9, "children":[ 
+                                    ], "data":{ "$area": 41 } },
+                                    { "id": "480", "name": "HeVAL->", "depth":9, "children":[ 
+                                        { "id": "481", "name": "SV(PVGV)", "depth":10, "children":[ 
+                                            { "id": "482", "name": "UNKNOWN(0,0x0)", "depth":11, "children":[ 
+                                                { "id": "483", "name": "MAGIC(<)", "depth":12, "children":[ 
+                                                    { "id": "484", "name": "mg_obj->", "depth":13, "children":[ 
+                                                        { "id": "485", "name": "SV(PVCV)", "depth":14, "children":[ 
+                                                        ], "data":{ "$area": 128 } },
+                                                    ], "data":{ "$area": 128 } },
+                                                ], "data":{ "$area": 168 } },
+                                            ], "data":{ "$area": 168 } },
+                                        ], "data":{ "$area": 320 } },
+                                    ], "data":{ "$area": 320 } },
+                                    { "id": "486", "name": "HvNAME_HEK->", "depth":9, "children":[ 
+                                    ], "data":{ "$area": 38 } },
+                                ], "data":{ "$area": 3224 } },
+                            ], "data":{ "$area": 3408 } },
+                        ], "data":{ "$area": 3408 } },
+                    ], "data":{ "$area": 3560 } },
+                ], "data":{ "$area": 3560 } },
+                { "id": "487", "name": "hent_hek->", "depth":4, "children":[ 
+                ], "data":{ "$area": 35 } },
+                { "id": "488", "name": "HeVAL->", "depth":4, "children":[ 
+                    { "id": "489", "name": "SV(PVGV)", "depth":5, "children":[ 
+                        { "id": "490", "name": "gp_sv->", "depth":6, "children":[ 
+                            { "id": "491", "name": "SV(PV)", "depth":7, "children":[ 
+                            ], "data":{ "$area": 56 } },
+                        ], "data":{ "$area": 56 } },
+                    ], "data":{ "$area": 208 } },
+                ], "data":{ "$area": 208 } },
+                { "id": "492", "name": "hent_hek->", "depth":4, "children":[ 
+                ], "data":{ "$area": 124 } },
+                { "id": "493", "name": "HeVAL->", "depth":4, "children":[ 
+                    { "id": "494", "name": "SV(PVGV)", "depth":5, "children":[ 
+                        { "id": "495", "name": "GvFILE_HEK->", "depth":6, "children":[ 
+                        ], "data":{ "$area": 117 } },
+                        { "id": "496", "name": "gp_sv->", "depth":6, "children":[ 
+                            { "id": "497", "name": "SV(PV)", "depth":7, "children":[ 
+                            ], "data":{ "$area": 136 } },
+                        ], "data":{ "$area": 136 } },
+                    ], "data":{ "$area": 405 } },
+                ], "data":{ "$area": 405 } },
+                { "id": "498", "name": "hent_hek->", "depth":4, "children":[ 
+                ], "data":{ "$area": 38 } },
+                { "id": "499", "name": "HeVAL->", "depth":4, "children":[ 
+                    { "id": "500", "name": "SV(PVGV)", "depth":5, "children":[ 
+                        { "id": "501", "name": "gp_hv->", "depth":6, "children":[ 
+                            { "id": "502", "name": "SV(PVHV)", "depth":7, "children":[ 
+                                { "id": "503", "name": "HvARRAY->", "depth":8, "children":[ 
+                                    { "id": "504", "name": "hent_hek->", "depth":9, "children":[ 
+                                    ], "data":{ "$area": 42 } },
+                                    { "id": "505", "name": "HeVAL->", "depth":9, "children":[ 
+                                        { "id": "506", "name": "SV(PVGV)", "depth":10, "children":[ 
+                                            { "id": "507", "name": "UNKNOWN(0,0x0)", "depth":11, "children":[ 
+                                                { "id": "508", "name": "MAGIC(<)", "depth":12, "children":[ 
+                                                    { "id": "509", "name": "mg_obj->", "depth":13, "children":[ 
+                                                        { "id": "510", "name": "SV(PVCV)", "depth":14, "children":[ 
+                                                        ], "data":{ "$area": 144 } },
+                                                    ], "data":{ "$area": 144 } },
+                                                ], "data":{ "$area": 184 } },
+                                            ], "data":{ "$area": 184 } },
+                                        ], "data":{ "$area": 336 } },
+                                    ], "data":{ "$area": 336 } },
+                                    { "id": "511", "name": "hent_hek->", "depth":9, "children":[ 
+                                    ], "data":{ "$area": 48 } },
+                                    { "id": "512", "name": "HeVAL->", "depth":9, "children":[ 
+                                        { "id": "513", "name": "SV(PVGV)", "depth":10, "children":[ 
+                                            { "id": "514", "name": "UNKNOWN(0,0x0)", "depth":11, "children":[ 
+                                                { "id": "515", "name": "MAGIC(<)", "depth":12, "children":[ 
+                                                    { "id": "516", "name": "mg_obj->", "depth":13, "children":[ 
+                                                        { "id": "517", "name": "SV(PVCV)", "depth":14, "children":[ 
+                                                        ], "data":{ "$area": 144 } },
+                                                    ], "data":{ "$area": 144 } },
+                                                ], "data":{ "$area": 184 } },
+                                            ], "data":{ "$area": 184 } },
+                                        ], "data":{ "$area": 336 } },
+                                    ], "data":{ "$area": 336 } },
+                                    { "id": "518", "name": "hent_hek->", "depth":9, "children":[ 
+                                    ], "data":{ "$area": 41 } },
+                                    { "id": "519", "name": "HeVAL->", "depth":9, "children":[ 
+                                        { "id": "520", "name": "SV(PVGV)", "depth":10, "children":[ 
+                                            { "id": "521", "name": "UNKNOWN(0,0x0)", "depth":11, "children":[ 
+                                                { "id": "522", "name": "MAGIC(<)", "depth":12, "children":[ 
+                                                    { "id": "523", "name": "mg_obj->", "depth":13, "children":[ 
+                                                        { "id": "524", "name": "SV(PVCV)", "depth":14, "children":[ 
+                                                        ], "data":{ "$area": 144 } },
+                                                    ], "data":{ "$area": 144 } },
+                                                ], "data":{ "$area": 184 } },
+                                            ], "data":{ "$area": 184 } },
+                                        ], "data":{ "$area": 336 } },
+                                    ], "data":{ "$area": 336 } },
+                                    { "id": "525", "name": "hent_hek->", "depth":9, "children":[ 
+                                    ], "data":{ "$area": 48 } },
+                                    { "id": "526", "name": "HeVAL->", "depth":9, "children":[ 
+                                        { "id": "527", "name": "SV(PVGV)", "depth":10, "children":[ 
+                                            { "id": "528", "name": "UNKNOWN(0,0x0)", "depth":11, "children":[ 
+                                                { "id": "529", "name": "MAGIC(<)", "depth":12, "children":[ 
+                                                    { "id": "530", "name": "mg_obj->", "depth":13, "children":[ 
+                                                        { "id": "531", "name": "SV(PVCV)", "depth":14, "children":[ 
+                                                        ], "data":{ "$area": 144 } },
+                                                    ], "data":{ "$area": 144 } },
+                                                ], "data":{ "$area": 184 } },
+                                            ], "data":{ "$area": 184 } },
+                                        ], "data":{ "$area": 336 } },
+                                    ], "data":{ "$area": 336 } },
+                                    { "id": "532", "name": "hent_hek->", "depth":9, "children":[ 
+                                    ], "data":{ "$area": 43 } },
+                                    { "id": "533", "name": "HeVAL->", "depth":9, "children":[ 
+                                        { "id": "534", "name": "SV(PVGV)", "depth":10, "children":[ 
+                                            { "id": "535", "name": "UNKNOWN(0,0x0)", "depth":11, "children":[ 
+                                                { "id": "536", "name": "MAGIC(<)", "depth":12, "children":[ 
+                                                    { "id": "537", "name": "mg_obj->", "depth":13, "children":[ 
+                                                        { "id": "538", "name": "SV(PVCV)", "depth":14, "children":[ 
+                                                        ], "data":{ "$area": 144 } },
+                                                    ], "data":{ "$area": 144 } },
+                                                ], "data":{ "$area": 184 } },
+                                            ], "data":{ "$area": 184 } },
+                                        ], "data":{ "$area": 336 } },
+                                    ], "data":{ "$area": 336 } },
+                                    { "id": "539", "name": "HvNAME_HEK->", "depth":9, "children":[ 
+                                    ], "data":{ "$area": 36 } },
+                                ], "data":{ "$area": 2146 } },
+                            ], "data":{ "$area": 2266 } },
+                        ], "data":{ "$area": 2266 } },
+                    ], "data":{ "$area": 2418 } },
+                ], "data":{ "$area": 2418 } },
+                { "id": "540", "name": "hent_hek->", "depth":4, "children":[ 
+                ], "data":{ "$area": 46 } },
+                { "id": "541", "name": "HeVAL->", "depth":4, "children":[ 
+                    { "id": "542", "name": "SV(PVGV)", "depth":5, "children":[ 
+                        { "id": "543", "name": "gp_hv->", "depth":6, "children":[ 
+                            { "id": "544", "name": "SV(PVHV)", "depth":7, "children":[ 
+                                { "id": "545", "name": "HvARRAY->", "depth":8, "children":[ 
+                                    { "id": "546", "name": "hent_hek->", "depth":9, "children":[ 
+                                    ], "data":{ "$area": 42 } },
+                                    { "id": "547", "name": "HeVAL->", "depth":9, "children":[ 
+                                        { "id": "548", "name": "SV(PVGV)", "depth":10, "children":[ 
+                                            { "id": "549", "name": "UNKNOWN(0,0x0)", "depth":11, "children":[ 
+                                                { "id": "550", "name": "MAGIC(<)", "depth":12, "children":[ 
+                                                    { "id": "551", "name": "mg_obj->", "depth":13, "children":[ 
+                                                        { "id": "552", "name": "SV(PVCV)", "depth":14, "children":[ 
+                                                        ], "data":{ "$area": 128 } },
+                                                    ], "data":{ "$area": 128 } },
+                                                ], "data":{ "$area": 168 } },
+                                            ], "data":{ "$area": 168 } },
+                                            { "id": "553", "name": "GvFILE_HEK->", "depth":11, "children":[ 
+                                            ], "data":{ "$area": 102 } },
+                                        ], "data":{ "$area": 422 } },
+                                    ], "data":{ "$area": 422 } },
+                                    { "id": "554", "name": "hent_hek->", "depth":9, "children":[ 
+                                    ], "data":{ "$area": 57 } },
+                                    { "id": "555", "name": "HeVAL->", "depth":9, "children":[ 
+                                        { "id": "556", "name": "SV(PVGV)", "depth":10, "children":[ 
+                                            { "id": "557", "name": "UNKNOWN(0,0x0)", "depth":11, "children":[ 
+                                                { "id": "558", "name": "MAGIC(<)", "depth":12, "children":[ 
+                                                    { "id": "559", "name": "mg_obj->", "depth":13, "children":[ 
+                                                        { "id": "560", "name": "SV(PVCV)", "depth":14, "children":[ 
+                                                            { "id": "561", "name": "CvPADLIST->", "depth":15, "children":[ 
+                                                                { "id": "562", "name": "SV(PVAV)", "depth":16, "children":[ 
+                                                                ], "data":{ "$area": 80 } },
+                                                            ], "data":{ "$area": 80 } },
+                                                            { "id": "563", "name": "CvOUTSIDE->", "depth":15, "children":[ 
+                                                                { "id": "564", "name": "SV(PVCV)", "depth":16, "children":[ 
+                                                                    { "id": "565", "name": "CvPADLIST->", "depth":17, "children":[ 
+                                                                        { "id": "566", "name": "SV(PVAV)", "depth":18, "children":[ 
+                                                                        ], "data":{ "$area": 80 } },
+                                                                    ], "data":{ "$area": 80 } },
+                                                                ], "data":{ "$area": 208 } },
+                                                            ], "data":{ "$area": 208 } },
+                                                            { "id": "567", "name": "CvSTART->", "depth":15, "children":[ 
+                                                                { "id": "568", "name": "cop_filegv->", "depth":16, "children":[ 
+                                                                    { "id": "569", "name": "SV(PVGV)", "depth":17, "children":[ 
+                                                                        { "id": "570", "name": "GvNAME_HEK->", "depth":18, "children":[ 
+                                                                        ], "data":{ "$area": 120 } },
+                                                                        { "id": "571", "name": "gp_sv->", "depth":18, "children":[ 
+                                                                            { "id": "572", "name": "SV(PV)", "depth":19, "children":[ 
+                                                                            ], "data":{ "$area": 136 } },
+                                                                        ], "data":{ "$area": 136 } },
+                                                                    ], "data":{ "$area": 408 } },
+                                                                ], "data":{ "$area": 408 } },
+                                                                { "id": "573", "name": "SVOP->", "depth":16, "children":[ 
+                                                                    { "id": "574", "name": "SV(PVGV)", "depth":17, "children":[ 
+                                                                        { "id": "575", "name": "UNKNOWN(0,0x0)", "depth":18, "children":[ 
+                                                                            { "id": "576", "name": "MAGIC(<)", "depth":19, "children":[ 
+                                                                                { "id": "577", "name": "mg_obj->", "depth":20, "children":[ 
+                                                                                    { "id": "578", "name": "SV(PVCV)", "depth":21, "children":[ 
+                                                                                    ], "data":{ "$area": 128 } },
+                                                                                ], "data":{ "$area": 128 } },
+                                                                            ], "data":{ "$area": 168 } },
+                                                                        ], "data":{ "$area": 168 } },
+                                                                        { "id": "579", "name": "GvNAME_HEK->", "depth":18, "children":[ 
+                                                                        ], "data":{ "$area": 48 } },
+                                                                    ], "data":{ "$area": 368 } },
+                                                                ], "data":{ "$area": 368 } },
+                                                                { "id": "580", "name": "SVOP->", "depth":16, "children":[ 
+                                                                    { "id": "581", "name": "SV(PVGV)", "depth":17, "children":[ 
+                                                                        { "id": "582", "name": "GvNAME_HEK->", "depth":18, "children":[ 
+                                                                        ], "data":{ "$area": 44 } },
+                                                                        { "id": "583", "name": "gp_av->", "depth":18, "children":[ 
+                                                                            { "id": "584", "name": "SV(PVAV)", "depth":19, "children":[ 
+                                                                            ], "data":{ "$area": 96 } },
+                                                                        ], "data":{ "$area": 96 } },
+                                                                    ], "data":{ "$area": 292 } },
+                                                                ], "data":{ "$area": 292 } },
+                                                            ], "data":{ "$area": 3100 } },
+                                                        ], "data":{ "$area": 3516 } },
+                                                    ], "data":{ "$area": 3516 } },
+                                                ], "data":{ "$area": 3556 } },
+                                            ], "data":{ "$area": 3556 } },
+                                            { "id": "585", "name": "GvFILE_HEK->", "depth":11, "children":[ 
+                                            ], "data":{ "$area": 118 } },
+                                        ], "data":{ "$area": 3826 } },
+                                    ], "data":{ "$area": 3826 } },
+                                    { "id": "586", "name": "hent_hek->", "depth":9, "children":[ 
+                                    ], "data":{ "$area": 38 } },
+                                    { "id": "587", "name": "HeVAL->", "depth":9, "children":[ 
+                                        { "id": "588", "name": "SV(PVGV)", "depth":10, "children":[ 
+                                            { "id": "589", "name": "gp_sv->", "depth":11, "children":[ 
+                                                { "id": "590", "name": "SV(NULL)", "depth":12, "children":[ 
+                                                ], "data":{ "$area": 24 } },
+                                            ], "data":{ "$area": 24 } },
+                                        ], "data":{ "$area": 176 } },
+                                    ], "data":{ "$area": 176 } },
+                                    { "id": "591", "name": "hent_hek->", "depth":9, "children":[ 
+                                    ], "data":{ "$area": 40 } },
+                                    { "id": "592", "name": "HeVAL->", "depth":9, "children":[ 
+                                        { "id": "593", "name": "SV(PVGV)", "depth":10, "children":[ 
+                                            { "id": "594", "name": "GvFILE_HEK->", "depth":11, "children":[ 
+                                            ], "data":{ "$area": 114 } },
+                                            { "id": "595", "name": "gp_hv->", "depth":11, "children":[ 
+                                                { "id": "596", "name": "SV(PVHV)", "depth":12, "children":[ 
+                                                    { "id": "597", "name": "UNKNOWN(0,0x0)", "depth":13, "children":[ 
+                                                        { "id": "598", "name": "MAGIC(P)", "depth":14, "children":[ 
+                                                            { "id": "599", "name": "mg_obj->", "depth":15, "children":[ 
+                                                                { "id": "600", "name": "SV(RV)", "depth":16, "children":[ 
+                                                                    { "id": "601", "name": "RV->", "depth":17, "children":[ 
+                                                                        { "id": "602", "name": "SV(PVHV)", "depth":18, "children":[ 
+                                                                            { "id": "603", "name": "HvARRAY->", "depth":19, "children":[ 
+                                                                                { "id": "604", "name": "hent_hek->", "depth":20, "children":[ 
+                                                                                ], "data":{ "$area": 46 } },
+                                                                                { "id": "605", "name": "HeVAL->", "depth":20, "children":[ 
+                                                                                    { "id": "606", "name": "SV(PV)", "depth":21, "children":[ 
+                                                                                    ], "data":{ "$area": 72 } },
+                                                                                ], "data":{ "$area": 72 } },
+                                                                                { "id": "607", "name": "hent_hek->", "depth":20, "children":[ 
+                                                                                ], "data":{ "$area": 40 } },
+                                                                                { "id": "608", "name": "HeVAL->", "depth":20, "children":[ 
+                                                                                    { "id": "609", "name": "SV(PV)", "depth":21, "children":[ 
+                                                                                    ], "data":{ "$area": 56 } },
+                                                                                ], "data":{ "$area": 56 } },
+                                                                                { "id": "610", "name": "hent_hek->", "depth":20, "children":[ 
+                                                                                ], "data":{ "$area": 43 } },
+                                                                                { "id": "611", "name": "HeVAL->", "depth":20, "children":[ 
+                                                                                    { "id": "612", "name": "SV(PV)", "depth":21, "children":[ 
+                                                                                    ], "data":{ "$area": 56 } },
+                                                                                ], "data":{ "$area": 56 } },
+                                                                                { "id": "613", "name": "hent_hek->", "depth":20, "children":[ 
+                                                                                ], "data":{ "$area": 42 } },
+                                                                                { "id": "614", "name": "HeVAL->", "depth":20, "children":[ 
+                                                                                    { "id": "615", "name": "SV(PV)", "depth":21, "children":[ 
+                                                                                    ], "data":{ "$area": 56 } },
+                                                                                ], "data":{ "$area": 56 } },
+                                                                                { "id": "616", "name": "hent_hek->", "depth":20, "children":[ 
+                                                                                ], "data":{ "$area": 36 } },
+                                                                                { "id": "617", "name": "HeVAL->", "depth":20, "children":[ 
+                                                                                    { "id": "618", "name": "SV(PV)", "depth":21, "children":[ 
+                                                                                    ], "data":{ "$area": 56 } },
+                                                                                ], "data":{ "$area": 56 } },
+                                                                                { "id": "619", "name": "hent_hek->", "depth":20, "children":[ 
+                                                                                ], "data":{ "$area": 45 } },
+                                                                                { "id": "620", "name": "HeVAL->", "depth":20, "children":[ 
+                                                                                    { "id": "621", "name": "SV(NULL)", "depth":21, "children":[ 
+                                                                                    ], "data":{ "$area": 24 } },
+                                                                                ], "data":{ "$area": 24 } },
+                                                                                { "id": "622", "name": "hent_hek->", "depth":20, "children":[ 
+                                                                                ], "data":{ "$area": 42 } },
+                                                                                { "id": "623", "name": "HeVAL->", "depth":20, "children":[ 
+                                                                                    { "id": "624", "name": "SV(PV)", "depth":21, "children":[ 
+                                                                                    ], "data":{ "$area": 56 } },
+                                                                                ], "data":{ "$area": 56 } },
+                                                                                { "id": "625", "name": "hent_hek->", "depth":20, "children":[ 
+                                                                                ], "data":{ "$area": 40 } },
+                                                                                { "id": "626", "name": "HeVAL->", "depth":20, "children":[ 
+                                                                                    { "id": "627", "name": "SV(PV)", "depth":21, "children":[ 
+                                                                                    ], "data":{ "$area": 56 } },
+                                                                                ], "data":{ "$area": 56 } },
+                                                                                { "id": "628", "name": "hent_hek->", "depth":20, "children":[ 
+                                                                                ], "data":{ "$area": 43 } },
+                                                                                { "id": "629", "name": "HeVAL->", "depth":20, "children":[ 
+                                                                                    { "id": "630", "name": "SV(PV)", "depth":21, "children":[ 
+                                                                                    ], "data":{ "$area": 104 } },
+                                                                                ], "data":{ "$area": 104 } },
+                                                                                { "id": "631", "name": "hent_hek->", "depth":20, "children":[ 
+                                                                                ], "data":{ "$area": 44 } },
+                                                                                { "id": "632", "name": "HeVAL->", "depth":20, "children":[ 
+                                                                                    { "id": "633", "name": "SV(PV)", "depth":21, "children":[ 
+                                                                                    ], "data":{ "$area": 120 } },
+                                                                                ], "data":{ "$area": 120 } },
+                                                                                { "id": "634", "name": "hent_hek->", "depth":20, "children":[ 
+                                                                                ], "data":{ "$area": 40 } },
+                                                                                { "id": "635", "name": "HeVAL->", "depth":20, "children":[ 
+                                                                                    { "id": "636", "name": "SV(PV)", "depth":21, "children":[ 
+                                                                                    ], "data":{ "$area": 72 } },
+                                                                                ], "data":{ "$area": 72 } },
+                                                                                { "id": "637", "name": "hent_hek->", "depth":20, "children":[ 
+                                                                                ], "data":{ "$area": 36 } },
+                                                                                { "id": "638", "name": "HeVAL->", "depth":20, "children":[ 
+                                                                                    { "id": "639", "name": "SV(PV)", "depth":21, "children":[ 
+                                                                                    ], "data":{ "$area": 56 } },
+                                                                                ], "data":{ "$area": 56 } },
+                                                                                { "id": "640", "name": "HeVAL->", "depth":20, "children":[ 
+                                                                                    { "id": "641", "name": "SV(PV)", "depth":21, "children":[ 
+                                                                                    ], "data":{ "$area": 56 } },
+                                                                                ], "data":{ "$area": 56 } },
+                                                                                { "id": "642", "name": "hent_hek->", "depth":20, "children":[ 
+                                                                                ], "data":{ "$area": 45 } },
+                                                                                { "id": "643", "name": "HeVAL->", "depth":20, "children":[ 
+                                                                                    { "id": "644", "name": "SV(PV)", "depth":21, "children":[ 
+                                                                                    ], "data":{ "$area": 136 } },
+                                                                                ], "data":{ "$area": 136 } },
+                                                                                { "id": "645", "name": "hent_hek->", "depth":20, "children":[ 
+                                                                                ], "data":{ "$area": 50 } },
+                                                                                { "id": "646", "name": "HeVAL->", "depth":20, "children":[ 
+                                                                                    { "id": "647", "name": "SV(PV)", "depth":21, "children":[ 
+                                                                                    ], "data":{ "$area": 56 } },
+                                                                                ], "data":{ "$area": 56 } },
+                                                                                { "id": "648", "name": "hent_hek->", "depth":20, "children":[ 
+                                                                                ], "data":{ "$area": 49 } },
+                                                                                { "id": "649", "name": "HeVAL->", "depth":20, "children":[ 
+                                                                                    { "id": "650", "name": "SV(NULL)", "depth":21, "children":[ 
+                                                                                    ], "data":{ "$area": 24 } },
+                                                                                ], "data":{ "$area": 24 } },
+                                                                                { "id": "651", "name": "hent_hek->", "depth":20, "children":[ 
+                                                                                ], "data":{ "$area": 39 } },
+                                                                                { "id": "652", "name": "HeVAL->", "depth":20, "children":[ 
+                                                                                    { "id": "653", "name": "SV(PV)", "depth":21, "children":[ 
+                                                                                    ], "data":{ "$area": 56 } },
+                                                                                ], "data":{ "$area": 56 } },
+                                                                                { "id": "654", "name": "hent_hek->", "depth":20, "children":[ 
+                                                                                ], "data":{ "$area": 44 } },
+                                                                                { "id": "655", "name": "HeVAL->", "depth":20, "children":[ 
+                                                                                    { "id": "656", "name": "SV(PV)", "depth":21, "children":[ 
+                                                                                    ], "data":{ "$area": 56 } },
+                                                                                ], "data":{ "$area": 56 } },
+                                                                                { "id": "657", "name": "hent_hek->", "depth":20, "children":[ 
+                                                                                ], "data":{ "$area": 44 } },
+                                                                                { "id": "658", "name": "HeVAL->", "depth":20, "children":[ 
+                                                                                    { "id": "659", "name": "SV(PV)", "depth":21, "children":[ 
+                                                                                    ], "data":{ "$area": 120 } },
+                                                                                ], "data":{ "$area": 120 } },
+                                                                                { "id": "660", "name": "hent_hek->", "depth":20, "children":[ 
+                                                                                ], "data":{ "$area": 41 } },
+                                                                                { "id": "661", "name": "HeVAL->", "depth":20, "children":[ 
+                                                                                    { "id": "662", "name": "SV(PV)", "depth":21, "children":[ 
+                                                                                    ], "data":{ "$area": 56 } },
+                                                                                ], "data":{ "$area": 56 } },
+                                                                                { "id": "663", "name": "hent_hek->", "depth":20, "children":[ 
+                                                                                ], "data":{ "$area": 44 } },
+                                                                                { "id": "664", "name": "HeVAL->", "depth":20, "children":[ 
+                                                                                    { "id": "665", "name": "SV(PV)", "depth":21, "children":[ 
+                                                                                    ], "data":{ "$area": 104 } },
+                                                                                ], "data":{ "$area": 104 } },
+                                                                                { "id": "666", "name": "hent_hek->", "depth":20, "children":[ 
+                                                                                ], "data":{ "$area": 39 } },
+                                                                                { "id": "667", "name": "HeVAL->", "depth":20, "children":[ 
+                                                                                    { "id": "668", "name": "SV(PV)", "depth":21, "children":[ 
+                                                                                    ], "data":{ "$area": 56 } },
+                                                                                ], "data":{ "$area": 56 } },
+                                                                                { "id": "669", "name": "hent_hek->", "depth":20, "children":[ 
+                                                                                ], "data":{ "$area": 41 } },
+                                                                                { "id": "670", "name": "HeVAL->", "depth":20, "children":[ 
+                                                                                    { "id": "671", "name": "SV(PV)", "depth":21, "children":[ 
+                                                                                    ], "data":{ "$area": 56 } },
+                                                                                ], "data":{ "$area": 56 } },
+                                                                                { "id": "672", "name": "hent_hek->", "depth":20, "children":[ 
+                                                                                ], "data":{ "$area": 48 } },
+                                                                                { "id": "673", "name": "HeVAL->", "depth":20, "children":[ 
+                                                                                    { "id": "674", "name": "SV(NULL)", "depth":21, "children":[ 
+                                                                                    ], "data":{ "$area": 24 } },
+                                                                                ], "data":{ "$area": 24 } },
+                                                                            ], "data":{ "$area": 3141 } },
+                                                                        ], "data":{ "$area": 3453 } },
+                                                                    ], "data":{ "$area": 3453 } },
+                                                                ], "data":{ "$area": 3477 } },
+                                                            ], "data":{ "$area": 3477 } },
+                                                        ], "data":{ "$area": 3517 } },
+                                                    ], "data":{ "$area": 3517 } },
+                                                ], "data":{ "$area": 3637 } },
+                                            ], "data":{ "$area": 3637 } },
+                                        ], "data":{ "$area": 3903 } },
+                                    ], "data":{ "$area": 3903 } },
+                                    { "id": "675", "name": "hent_hek->", "depth":9, "children":[ 
+                                    ], "data":{ "$area": 43 } },
+                                    { "id": "676", "name": "HeVAL->", "depth":9, "children":[ 
+                                        { "id": "677", "name": "SV(PVGV)", "depth":10, "children":[ 
+                                        ], "data":{ "$area": 152 } },
+                                    ], "data":{ "$area": 152 } },
+                                    { "id": "678", "name": "hent_hek->", "depth":9, "children":[ 
+                                    ], "data":{ "$area": 50 } },
+                                    { "id": "679", "name": "HeVAL->", "depth":9, "children":[ 
+                                        { "id": "680", "name": "SV(PVGV)", "depth":10, "children":[ 
+                                            { "id": "681", "name": "gp_av->", "depth":11, "children":[ 
+                                                { "id": "682", "name": "SV(PVAV)", "depth":12, "children":[ 
+                                                ], "data":{ "$area": 64 } },
+                                            ], "data":{ "$area": 64 } },
+                                        ], "data":{ "$area": 216 } },
+                                    ], "data":{ "$area": 216 } },
+                                    { "id": "683", "name": "hent_hek->", "depth":9, "children":[ 
+                                    ], "data":{ "$area": 43 } },
+                                    { "id": "684", "name": "HeVAL->", "depth":9, "children":[ 
+                                        { "id": "685", "name": "SV(PVGV)", "depth":10, "children":[ 
+                                            { "id": "686", "name": "gp_sv->", "depth":11, "children":[ 
+                                                { "id": "687", "name": "SV(IV)", "depth":12, "children":[ 
+                                                ], "data":{ "$area": 24 } },
+                                            ], "data":{ "$area": 24 } },
+                                        ], "data":{ "$area": 176 } },
+                                    ], "data":{ "$area": 176 } },
+                                    { "id": "688", "name": "hent_hek->", "depth":9, "children":[ 
+                                    ], "data":{ "$area": 49 } },
+                                    { "id": "689", "name": "HeVAL->", "depth":9, "children":[ 
+                                        { "id": "690", "name": "SV(PVGV)", "depth":10, "children":[ 
+                                            { "id": "691", "name": "UNKNOWN(0,0x0)", "depth":11, "children":[ 
+                                                { "id": "692", "name": "MAGIC(<)", "depth":12, "children":[ 
+                                                    { "id": "693", "name": "mg_obj->", "depth":13, "children":[ 
+                                                        { "id": "694", "name": "SV(PVCV)", "depth":14, "children":[ 
+                                                        ], "data":{ "$area": 128 } },
+                                                    ], "data":{ "$area": 128 } },
+                                                ], "data":{ "$area": 168 } },
+                                            ], "data":{ "$area": 168 } },
+                                        ], "data":{ "$area": 320 } },
+                                    ], "data":{ "$area": 320 } },
+                                    { "id": "695", "name": "hent_hek->", "depth":9, "children":[ 
+                                    ], "data":{ "$area": 39 } },
+                                    { "id": "696", "name": "HeVAL->", "depth":9, "children":[ 
+                                        { "id": "697", "name": "SV(PVGV)", "depth":10, "children":[ 
+                                            { "id": "698", "name": "gp_sv->", "depth":11, "children":[ 
+                                                { "id": "699", "name": "SV(PVNV)", "depth":12, "children":[ 
+                                                ], "data":{ "$area": 72 } },
+                                            ], "data":{ "$area": 72 } },
+                                        ], "data":{ "$area": 224 } },
+                                    ], "data":{ "$area": 224 } },
+                                    { "id": "700", "name": "hent_hek->", "depth":9, "children":[ 
+                                    ], "data":{ "$area": 42 } },
+                                    { "id": "701", "name": "HeVAL->", "depth":9, "children":[ 
+                                        { "id": "702", "name": "SV(PVGV)", "depth":10, "children":[ 
+                                            { "id": "703", "name": "gp_sv->", "depth":11, "children":[ 
+                                                { "id": "704", "name": "SV(PVNV)", "depth":12, "children":[ 
+                                                ], "data":{ "$area": 72 } },
+                                            ], "data":{ "$area": 72 } },
+                                        ], "data":{ "$area": 224 } },
+                                    ], "data":{ "$area": 224 } },
+                                    { "id": "705", "name": "hent_hek->", "depth":9, "children":[ 
+                                    ], "data":{ "$area": 52 } },
+                                    { "id": "706", "name": "HeVAL->", "depth":9, "children":[ 
+                                        { "id": "707", "name": "SV(PVGV)", "depth":10, "children":[ 
+                                            { "id": "708", "name": "gp_av->", "depth":11, "children":[ 
+                                                { "id": "709", "name": "SV(PVAV)", "depth":12, "children":[ 
+                                                    { "id": "710", "name": "AVelem->", "depth":13, "children":[ 
+                                                        { "id": "711", "name": "SV(PV)", "depth":14, "children":[ 
+                                                        ], "data":{ "$area": 72 } },
+                                                    ], "data":{ "$area": 72 } },
+                                                ], "data":{ "$area": 168 } },
+                                            ], "data":{ "$area": 168 } },
+                                        ], "data":{ "$area": 320 } },
+                                    ], "data":{ "$area": 320 } },
+                                    { "id": "712", "name": "hent_hek->", "depth":9, "children":[ 
+                                    ], "data":{ "$area": 47 } },
+                                    { "id": "713", "name": "HeVAL->", "depth":9, "children":[ 
+                                        { "id": "714", "name": "SV(PVGV)", "depth":10, "children":[ 
+                                            { "id": "715", "name": "UNKNOWN(0,0x0)", "depth":11, "children":[ 
+                                                { "id": "716", "name": "MAGIC(<)", "depth":12, "children":[ 
+                                                    { "id": "717", "name": "mg_obj->", "depth":13, "children":[ 
+                                                        { "id": "718", "name": "SV(PVCV)", "depth":14, "children":[ 
+                                                            { "id": "719", "name": "CvPADLIST->", "depth":15, "children":[ 
+                                                                { "id": "720", "name": "SV(PVAV)", "depth":16, "children":[ 
+                                                                ], "data":{ "$area": 80 } },
+                                                            ], "data":{ "$area": 80 } },
+                                                            { "id": "721", "name": "CvSTART->", "depth":15, "children":[ 
+                                                                { "id": "722", "name": "SVOP->", "depth":16, "children":[ 
+                                                                    { "id": "723", "name": "SV(PV)", "depth":17, "children":[ 
+                                                                    ], "data":{ "$area": 42 } },
+                                                                ], "data":{ "$area": 42 } },
+                                                                { "id": "724", "name": "SVOP->", "depth":16, "children":[ 
+                                                                    { "id": "725", "name": "SV(PV)", "depth":17, "children":[ 
+                                                                    ], "data":{ "$area": 46 } },
+                                                                ], "data":{ "$area": 46 } },
+                                                                { "id": "726", "name": "SVOP->", "depth":16, "children":[ 
+                                                                    { "id": "727", "name": "SV(PV)", "depth":17, "children":[ 
+                                                                    ], "data":{ "$area": 55 } },
+                                                                ], "data":{ "$area": 55 } },
+                                                                { "id": "728", "name": "SVOP->", "depth":16, "children":[ 
+                                                                    { "id": "729", "name": "SV(PVGV)", "depth":17, "children":[ 
+                                                                        { "id": "730", "name": "GvNAME_HEK->", "depth":18, "children":[ 
+                                                                        ], "data":{ "$area": 40 } },
+                                                                    ], "data":{ "$area": 192 } },
+                                                                ], "data":{ "$area": 192 } },
+                                                                { "id": "731", "name": "SVOP->", "depth":16, "children":[ 
+                                                                    { "id": "732", "name": "SV(PVGV)", "depth":17, "children":[ 
+                                                                        { "id": "733", "name": "GvNAME_HEK->", "depth":18, "children":[ 
+                                                                        ], "data":{ "$area": 42 } },
+                                                                        { "id": "734", "name": "gp_sv->", "depth":18, "children":[ 
+                                                                            { "id": "735", "name": "SV(IV)", "depth":19, "children":[ 
+                                                                            ], "data":{ "$area": 24 } },
+                                                                        ], "data":{ "$area": 24 } },
+                                                                    ], "data":{ "$area": 218 } },
+                                                                ], "data":{ "$area": 218 } },
+                                                                { "id": "736", "name": "SVOP->", "depth":16, "children":[ 
+                                                                    { "id": "737", "name": "SV(PVGV)", "depth":17, "children":[ 
+                                                                        { "id": "738", "name": "GvNAME_HEK->", "depth":18, "children":[ 
+                                                                        ], "data":{ "$area": 35 } },
+                                                                        { "id": "739", "name": "gp_sv->", "depth":18, "children":[ 
+                                                                            { "id": "740", "name": "SV(NULL)", "depth":19, "children":[ 
+                                                                            ], "data":{ "$area": 24 } },
+                                                                        ], "data":{ "$area": 24 } },
+                                                                        { "id": "741", "name": "gp_av->", "depth":18, "children":[ 
+                                                                            { "id": "742", "name": "SV(PVAV)", "depth":19, "children":[ 
+                                                                            ], "data":{ "$area": 64 } },
+                                                                        ], "data":{ "$area": 64 } },
+                                                                    ], "data":{ "$area": 275 } },
+                                                                ], "data":{ "$area": 275 } },
+                                                            ], "data":{ "$area": 3036 } },
+                                                        ], "data":{ "$area": 3244 } },
+                                                    ], "data":{ "$area": 3244 } },
+                                                ], "data":{ "$area": 3284 } },
+                                            ], "data":{ "$area": 3284 } },
+                                        ], "data":{ "$area": 3436 } },
+                                    ], "data":{ "$area": 3436 } },
+                                    { "id": "743", "name": "hent_hek->", "depth":9, "children":[ 
+                                    ], "data":{ "$area": 44 } },
+                                    { "id": "744", "name": "HeVAL->", "depth":9, "children":[ 
+                                        { "id": "745", "name": "SV(PVGV)", "depth":10, "children":[ 
+                                            { "id": "746", "name": "gp_av->", "depth":11, "children":[ 
+                                                { "id": "747", "name": "SV(PVAV)", "depth":12, "children":[ 
+                                                    { "id": "748", "name": "AVelem->", "depth":13, "children":[ 
+                                                        { "id": "749", "name": "SV(PV)", "depth":14, "children":[ 
+                                                            { "id": "750", "name": "SvSHARED_HEK_FROM_PV->", "depth":15, "children":[ 
+                                                            ], "data":{ "$area": 45 } },
+                                                        ], "data":{ "$area": 85 } },
+                                                    ], "data":{ "$area": 85 } },
+                                                    { "id": "751", "name": "AVelem->", "depth":13, "children":[ 
+                                                        { "id": "752", "name": "SV(PV)", "depth":14, "children":[ 
+                                                            { "id": "753", "name": "SvSHARED_HEK_FROM_PV->", "depth":15, "children":[ 
+                                                            ], "data":{ "$area": 37 } },
+                                                        ], "data":{ "$area": 77 } },
+                                                    ], "data":{ "$area": 77 } },
+                                                ], "data":{ "$area": 258 } },
+                                            ], "data":{ "$area": 258 } },
+                                        ], "data":{ "$area": 410 } },
+                                    ], "data":{ "$area": 410 } },
+                                    { "id": "754", "name": "hent_hek->", "depth":9, "children":[ 
+                                    ], "data":{ "$area": 38 } },
+                                    { "id": "755", "name": "HeVAL->", "depth":9, "children":[ 
+                                        { "id": "756", "name": "SV(PVGV)", "depth":10, "children":[ 
+                                            { "id": "757", "name": "gp_av->", "depth":11, "children":[ 
+                                                { "id": "758", "name": "SV(PVAV)", "depth":12, "children":[ 
+                                                ], "data":{ "$area": 64 } },
+                                            ], "data":{ "$area": 64 } },
+                                        ], "data":{ "$area": 216 } },
+                                    ], "data":{ "$area": 216 } },
+                                    { "id": "759", "name": "hent_hek->", "depth":9, "children":[ 
+                                    ], "data":{ "$area": 49 } },
+                                    { "id": "760", "name": "HeVAL->", "depth":9, "children":[ 
+                                        { "id": "761", "name": "SV(PVGV)", "depth":10, "children":[ 
+                                            { "id": "762", "name": "UNKNOWN(0,0x0)", "depth":11, "children":[ 
+                                                { "id": "763", "name": "MAGIC(<)", "depth":12, "children":[ 
+                                                    { "id": "764", "name": "mg_obj->", "depth":13, "children":[ 
+                                                        { "id": "765", "name": "SV(PVCV)", "depth":14, "children":[ 
+                                                        ], "data":{ "$area": 128 } },
+                                                    ], "data":{ "$area": 128 } },
+                                                ], "data":{ "$area": 168 } },
+                                            ], "data":{ "$area": 168 } },
+                                        ], "data":{ "$area": 320 } },
+                                    ], "data":{ "$area": 320 } },
+                                    { "id": "766", "name": "hent_hek->", "depth":9, "children":[ 
+                                    ], "data":{ "$area": 43 } },
+                                    { "id": "767", "name": "HeVAL->", "depth":9, "children":[ 
+                                        { "id": "768", "name": "SV(PVGV)", "depth":10, "children":[ 
+                                            { "id": "769", "name": "UNKNOWN(0,0x0)", "depth":11, "children":[ 
+                                                { "id": "770", "name": "MAGIC(<)", "depth":12, "children":[ 
+                                                    { "id": "771", "name": "mg_obj->", "depth":13, "children":[ 
+                                                        { "id": "772", "name": "SV(PVCV)", "depth":14, "children":[ 
+                                                            { "id": "773", "name": "CvPADLIST->", "depth":15, "children":[ 
+                                                                { "id": "774", "name": "SV(PVAV)", "depth":16, "children":[ 
+                                                                ], "data":{ "$area": 80 } },
+                                                            ], "data":{ "$area": 80 } },
+                                                            { "id": "775", "name": "CvSTART->", "depth":15, "children":[ 
+                                                                { "id": "776", "name": "SVOP->", "depth":16, "children":[ 
+                                                                    { "id": "777", "name": "SV(PVGV)", "depth":17, "children":[ 
+                                                                        { "id": "778", "name": "GvNAME_HEK->", "depth":18, "children":[ 
+                                                                        ], "data":{ "$area": 51 } },
+                                                                        { "id": "779", "name": "gp_av->", "depth":18, "children":[ 
+                                                                            { "id": "780", "name": "SV(PVAV)", "depth":19, "children":[ 
+                                                                            ], "data":{ "$area": 96 } },
+                                                                        ], "data":{ "$area": 96 } },
+                                                                    ], "data":{ "$area": 299 } },
+                                                                ], "data":{ "$area": 299 } },
+                                                                { "id": "781", "name": "SVOP->", "depth":16, "children":[ 
+                                                                    { "id": "782", "name": "SV(PV)", "depth":17, "children":[ 
+                                                                    ], "data":{ "$area": 56 } },
+                                                                ], "data":{ "$area": 56 } },
+                                                                { "id": "783", "name": "SVOP->", "depth":16, "children":[ 
+                                                                    { "id": "784", "name": "SV(PVGV)", "depth":17, "children":[ 
+                                                                        { "id": "785", "name": "GvNAME_HEK->", "depth":18, "children":[ 
+                                                                        ], "data":{ "$area": 40 } },
+                                                                        { "id": "786", "name": "gp_sv->", "depth":18, "children":[ 
+                                                                            { "id": "787", "name": "SV(NULL)", "depth":19, "children":[ 
+                                                                            ], "data":{ "$area": 24 } },
+                                                                        ], "data":{ "$area": 24 } },
+                                                                    ], "data":{ "$area": 216 } },
+                                                                ], "data":{ "$area": 216 } },
+                                                                { "id": "788", "name": "SVOP->", "depth":16, "children":[ 
+                                                                    { "id": "789", "name": "SV(PVGV)", "depth":17, "children":[ 
+                                                                        { "id": "790", "name": "UNKNOWN(0,0x0)", "depth":18, "children":[ 
+                                                                            { "id": "791", "name": "MAGIC(<)", "depth":19, "children":[ 
+                                                                                { "id": "792", "name": "mg_obj->", "depth":20, "children":[ 
+                                                                                    { "id": "793", "name": "SV(PVCV)", "depth":21, "children":[ 
+                                                                                        { "id": "794", "name": "CvPADLIST->", "depth":22, "children":[ 
+                                                                                            { "id": "795", "name": "SV(PVAV)", "depth":23, "children":[ 
+                                                                                            ], "data":{ "$area": 80 } },
+                                                                                        ], "data":{ "$area": 80 } },
+                                                                                        { "id": "796", "name": "CvSTART->", "depth":22, "children":[ 
+                                                                                            { "id": "797", "name": "SVOP->", "depth":23, "children":[ 
+                                                                                                { "id": "798", "name": "SV(PVGV)", "depth":24, "children":[ 
+                                                                                                    { "id": "799", "name": "UNKNOWN(0,0x0)", "depth":25, "children":[ 
+                                                                                                        { "id": "800", "name": "MAGIC(<)", "depth":26, "children":[ 
+                                                                                                            { "id": "801", "name": "mg_obj->", "depth":27, "children":[ 
+                                                                                                                { "id": "802", "name": "SV(PVCV)", "depth":28, "children":[ 
+                                                                                                                    { "id": "803", "name": "CvSTASH->", "depth":29, "children":[ 
+                                                                                                                        { "id": "804", "name": "SV(PVHV)", "depth":30, "children":[ 
+                                                                                                                            { "id": "805", "name": "HvARRAY->", "depth":31, "children":[ 
+                                                                                                                                { "id": "806", "name": "hent_hek->", "depth":32, "children":[ 
+                                                                                                                                ], "data":{ "$area": 45 } },
+                                                                                                                                { "id": "807", "name": "hent_hek->", "depth":32, "children":[ 
+                                                                                                                                ], "data":{ "$area": 42 } },
+                                                                                                                                { "id": "808", "name": "hent_hek->", "depth":32, "children":[ 
+                                                                                                                                ], "data":{ "$area": 43 } },
+                                                                                                                                { "id": "809", "name": "hent_hek->", "depth":32, "children":[ 
+                                                                                                                                ], "data":{ "$area": 42 } },
+                                                                                                                                { "id": "810", "name": "hent_hek->", "depth":32, "children":[ 
+                                                                                                                                ], "data":{ "$area": 38 } },
+                                                                                                                                { "id": "811", "name": "hent_hek->", "depth":32, "children":[ 
+                                                                                                                                ], "data":{ "$area": 40 } },
+                                                                                                                                { "id": "812", "name": "hent_hek->", "depth":32, "children":[ 
+                                                                                                                                ], "data":{ "$area": 45 } },
+                                                                                                                                { "id": "813", "name": "hent_hek->", "depth":32, "children":[ 
+                                                                                                                                ], "data":{ "$area": 42 } },
+                                                                                                                                { "id": "814", "name": "hent_hek->", "depth":32, "children":[ 
+                                                                                                                                ], "data":{ "$area": 46 } },
+                                                                                                                                { "id": "815", "name": "hent_hek->", "depth":32, "children":[ 
+                                                                                                                                ], "data":{ "$area": 42 } },
+                                                                                                                                { "id": "816", "name": "hent_hek->", "depth":32, "children":[ 
+                                                                                                                                ], "data":{ "$area": 47 } },
+                                                                                                                                { "id": "817", "name": "hent_hek->", "depth":32, "children":[ 
+                                                                                                                                ], "data":{ "$area": 43 } },
+                                                                                                                                { "id": "818", "name": "hent_hek->", "depth":32, "children":[ 
+                                                                                                                                ], "data":{ "$area": 44 } },
+                                                                                                                                { "id": "819", "name": "hent_hek->", "depth":32, "children":[ 
+                                                                                                                                ], "data":{ "$area": 44 } },
+                                                                                                                                { "id": "820", "name": "hent_hek->", "depth":32, "children":[ 
+                                                                                                                                ], "data":{ "$area": 46 } },
+                                                                                                                                { "id": "821", "name": "hent_hek->", "depth":32, "children":[ 
+                                                                                                                                ], "data":{ "$area": 41 } },
+                                                                                                                                { "id": "822", "name": "hent_hek->", "depth":32, "children":[ 
+                                                                                                                                ], "data":{ "$area": 45 } },
+                                                                                                                                { "id": "823", "name": "hent_hek->", "depth":32, "children":[ 
+                                                                                                                                ], "data":{ "$area": 45 } },
+                                                                                                                                { "id": "824", "name": "hent_hek->", "depth":32, "children":[ 
+                                                                                                                                ], "data":{ "$area": 37 } },
+                                                                                                                                { "id": "825", "name": "hent_hek->", "depth":32, "children":[ 
+                                                                                                                                ], "data":{ "$area": 49 } },
+                                                                                                                                { "id": "826", "name": "hent_hek->", "depth":32, "children":[ 
+                                                                                                                                ], "data":{ "$area": 43 } },
+                                                                                                                                { "id": "827", "name": "hent_hek->", "depth":32, "children":[ 
+                                                                                                                                ], "data":{ "$area": 41 } },
+                                                                                                                                { "id": "828", "name": "hent_hek->", "depth":32, "children":[ 
+                                                                                                                                ], "data":{ "$area": 39 } },
+                                                                                                                                { "id": "829", "name": "hent_hek->", "depth":32, "children":[ 
+                                                                                                                                ], "data":{ "$area": 44 } },
+                                                                                                                                { "id": "830", "name": "hent_hek->", "depth":32, "children":[ 
+                                                                                                                                ], "data":{ "$area": 49 } },
+                                                                                                                                { "id": "831", "name": "hent_hek->", "depth":32, "children":[ 
+                                                                                                                                ], "data":{ "$area": 48 } },
+                                                                                                                                { "id": "832", "name": "hent_hek->", "depth":32, "children":[ 
+                                                                                                                                ], "data":{ "$area": 58 } },
+                                                                                                                                { "id": "833", "name": "hent_hek->", "depth":32, "children":[ 
+                                                                                                                                ], "data":{ "$area": 49 } },
+                                                                                                                                { "id": "834", "name": "hent_hek->", "depth":32, "children":[ 
+                                                                                                                                ], "data":{ "$area": 40 } },
+                                                                                                                                { "id": "835", "name": "hent_hek->", "depth":32, "children":[ 
+                                                                                                                                ], "data":{ "$area": 39 } },
+                                                                                                                                { "id": "836", "name": "hent_hek->", "depth":32, "children":[ 
+                                                                                                                                ], "data":{ "$area": 40 } },
+                                                                                                                                { "id": "837", "name": "hent_hek->", "depth":32, "children":[ 
+                                                                                                                                ], "data":{ "$area": 43 } },
+                                                                                                                                { "id": "838", "name": "hent_hek->", "depth":32, "children":[ 
+                                                                                                                                ], "data":{ "$area": 38 } },
+                                                                                                                                { "id": "839", "name": "hent_hek->", "depth":32, "children":[ 
+                                                                                                                                ], "data":{ "$area": 41 } },
+                                                                                                                                { "id": "840", "name": "hent_hek->", "depth":32, "children":[ 
+                                                                                                                                ], "data":{ "$area": 48 } },
+                                                                                                                                { "id": "841", "name": "hent_hek->", "depth":32, "children":[ 
+                                                                                                                                ], "data":{ "$area": 45 } },
+                                                                                                                                { "id": "842", "name": "hent_hek->", "depth":32, "children":[ 
+                                                                                                                                ], "data":{ "$area": 44 } },
+                                                                                                                                { "id": "843", "name": "hent_hek->", "depth":32, "children":[ 
+                                                                                                                                ], "data":{ "$area": 39 } },
+                                                                                                                                { "id": "844", "name": "HvNAME_HEK->", "depth":32, "children":[ 
+                                                                                                                                ], "data":{ "$area": 38 } },
+                                                                                                                                { "id": "845", "name": "isa->", "depth":32, "children":[ 
+                                                                                                                                    { "id": "846", "name": "SV(PVHV)", "depth":33, "children":[ 
+                                                                                                                                        { "id": "847", "name": "HvARRAY->", "depth":34, "children":[ 
+                                                                                                                                            { "id": "848", "name": "hent_hek->", "depth":35, "children":[ 
+                                                                                                                                            ], "data":{ "$area": 42 } },
+                                                                                                                                        ], "data":{ "$area": 114 } },
+                                                                                                                                    ], "data":{ "$area": 234 } },
+                                                                                                                                ], "data":{ "$area": 234 } },
+                                                                                                                                { "id": "849", "name": "mro_linear_current->", "depth":32, "children":[ 
+                                                                                                                                    { "id": "850", "name": "SV(PVAV)", "depth":33, "children":[ 
+                                                                                                                                        { "id": "851", "name": "AVelem->", "depth":34, "children":[ 
+                                                                                                                                            { "id": "852", "name": "SV(PV)", "depth":35, "children":[ 
+                                                                                                                                            ], "data":{ "$area": 40 } },
+                                                                                                                                        ], "data":{ "$area": 40 } },
+                                                                                                                                        { "id": "853", "name": "AVelem->", "depth":34, "children":[ 
+                                                                                                                                            { "id": "854", "name": "SV(PV)", "depth":35, "children":[ 
+                                                                                                                                            ], "data":{ "$area": 40 } },
+                                                                                                                                        ], "data":{ "$area": 40 } },
+                                                                                                                                    ], "data":{ "$area": 176 } },
+                                                                                                                                ], "data":{ "$area": 176 } },
+                                                                                                                            ], "data":{ "$area": 3150 } },
+                                                                                                                        ], "data":{ "$area": 3718 } },
+                                                                                                                    ], "data":{ "$area": 3718 } },
+                                                                                                                    { "id": "855", "name": "CvPADLIST->", "depth":29, "children":[ 
+                                                                                                                        { "id": "856", "name": "SV(PVAV)", "depth":30, "children":[ 
+                                                                                                                        ], "data":{ "$area": 80 } },
+                                                                                                                    ], "data":{ "$area": 80 } },
+                                                                                                                    { "id": "857", "name": "CvOUTSIDE->", "depth":29, "children":[ 
+                                                                                                                        { "id": "858", "name": "SV(PVCV)", "depth":30, "children":[ 
+                                                                                                                            { "id": "859", "name": "CvPADLIST->", "depth":31, "children":[ 
+                                                                                                                                { "id": "860", "name": "SV(PVAV)", "depth":32, "children":[ 
+                                                                                                                                ], "data":{ "$area": 80 } },
+                                                                                                                            ], "data":{ "$area": 80 } },
+                                                                                                                        ], "data":{ "$area": 208 } },
+                                                                                                                    ], "data":{ "$area": 208 } },
+                                                                                                                    { "id": "861", "name": "CvSTART->", "depth":29, "children":[ 
+                                                                                                                        { "id": "862", "name": "SVOP->", "depth":30, "children":[ 
+                                                                                                                            { "id": "863", "name": "SV(PVGV)", "depth":31, "children":[ 
+                                                                                                                                { "id": "864", "name": "UNKNOWN(0,0x0)", "depth":32, "children":[ 
+                                                                                                                                    { "id": "865", "name": "MAGIC(<)", "depth":33, "children":[ 
+                                                                                                                                        { "id": "866", "name": "mg_obj->", "depth":34, "children":[ 
+                                                                                                                                            { "id": "867", "name": "SV(PVCV)", "depth":35, "children":[ 
+                                                                                                                                                { "id": "868", "name": "CvPADLIST->", "depth":36, "children":[ 
+                                                                                                                                                    { "id": "869", "name": "SV(PVAV)", "depth":37, "children":[ 
+                                                                                                                                                    ], "data":{ "$area": 80 } },
+                                                                                                                                                ], "data":{ "$area": 80 } },
+                                                                                                                                                { "id": "870", "name": "CvSTART->", "depth":36, "children":[ 
+                                                                                                                                                    { "id": "871", "name": "SVOP->", "depth":37, "children":[ 
+                                                                                                                                                        { "id": "872", "name": "SV(PVGV)", "depth":38, "children":[ 
+                                                                                                                                                            { "id": "873", "name": "UNKNOWN(0,0x0)", "depth":39, "children":[ 
+                                                                                                                                                                { "id": "874", "name": "MAGIC(<)", "depth":40, "children":[ 
+                                                                                                                                                                    { "id": "875", "name": "mg_obj->", "depth":41, "children":[ 
+                                                                                                                                                                        { "id": "876", "name": "SV(PVCV)", "depth":42, "children":[ 
+                                                                                                                                                                            { "id": "877", "name": "CvPADLIST->", "depth":43, "children":[ 
+                                                                                                                                                                                { "id": "878", "name": "SV(PVAV)", "depth":44, "children":[ 
+                                                                                                                                                                                ], "data":{ "$area": 80 } },
+                                                                                                                                                                            ], "data":{ "$area": 80 } },
+                                                                                                                                                                            { "id": "879", "name": "CvSTART->", "depth":43, "children":[ 
+                                                                                                                                                                                { "id": "880", "name": "SVOP->", "depth":44, "children":[ 
+                                                                                                                                                                                    { "id": "881", "name": "SV(PVGV)", "depth":45, "children":[ 
+                                                                                                                                                                                        { "id": "882", "name": "UNKNOWN(0,0x0)", "depth":46, "children":[ 
+                                                                                                                                                                                            { "id": "883", "name": "MAGIC(<)", "depth":47, "children":[ 
+                                                                                                                                                                                                { "id": "884", "name": "mg_obj->", "depth":48, "children":[ 
+                                                                                                                                                                                                    { "id": "885", "name": "SV(PVCV)", "depth":49, "children":[ 
+                                                                                                                                                                                                        { "id": "886", "name": "CvPADLIST->", "depth":50, "children":[ 
+                                                                                                                                                                                                            { "id": "887", "name": "SV(PVAV)", "depth":51, "children":[ 
+                                                                                                                                                                                                            ], "data":{ "$area": 80 } },
+                                                                                                                                                                                                        ], "data":{ "$area": 80 } },
+                                                                                                                                                                                                        { "id": "888", "name": "CvSTART->", "depth":50, "children":[ 
+                                                                                                                                                                                                            { "id": "889", "name": "SVOP->", "depth":51, "children":[ 
+                                                                                                                                                                                                                { "id": "890", "name": "SV(PVGV)", "depth":52, "children":[ 
+                                                                                                                                                                                                                    { "id": "891", "name": "UNKNOWN(0,0x0)", "depth":53, "children":[ 
+                                                                                                                                                                                                                        { "id": "892", "name": "MAGIC(<)", "depth":54, "children":[ 
+                                                                                                                                                                                                                            { "id": "893", "name": "mg_obj->", "depth":55, "children":[ 
+                                                                                                                                                                                                                                { "id": "894", "name": "SV(PVCV)", "depth":56, "children":[ 
+                                                                                                                                                                                                                                    { "id": "895", "name": "CvPADLIST->", "depth":57, "children":[ 
+                                                                                                                                                                                                                                        { "id": "896", "name": "SV(PVAV)", "depth":58, "children":[ 
+                                                                                                                                                                                                                                        ], "data":{ "$area": 80 } },
+                                                                                                                                                                                                                                    ], "data":{ "$area": 80 } },
+                                                                                                                                                                                                                                    { "id": "897", "name": "CvSTART->", "depth":57, "children":[ 
+                                                                                                                                                                                                                                        { "id": "898", "name": "cop_filegv->", "depth":58, "children":[ 
+                                                                                                                                                                                                                                            { "id": "899", "name": "SV(PVGV)", "depth":59, "children":[ 
+                                                                                                                                                                                                                                                { "id": "900", "name": "GvNAME_HEK->", "depth":60, "children":[ 
+                                                                                                                                                                                                                                                ], "data":{ "$area": 100 } },
+                                                                                                                                                                                                                                                { "id": "901", "name": "gp_sv->", "depth":60, "children":[ 
+                                                                                                                                                                                                                                                    { "id": "902", "name": "SV(PV)", "depth":61, "children":[ 
+                                                                                                                                                                                                                                                    ], "data":{ "$area": 120 } },
+                                                                                                                                                                                                                                                ], "data":{ "$area": 120 } },
+                                                                                                                                                                                                                                            ], "data":{ "$area": 372 } },
+                                                                                                                                                                                                                                        ], "data":{ "$area": 372 } },
+                                                                                                                                                                                                                                        { "id": "903", "name": "SVOP->", "depth":58, "children":[ 
+                                                                                                                                                                                                                                            { "id": "904", "name": "SV(PV)", "depth":59, "children":[ 
+                                                                                                                                                                                                                                            ], "data":{ "$area": 42 } },
+                                                                                                                                                                                                                                        ], "data":{ "$area": 42 } },
+                                                                                                                                                                                                                                        { "id": "905", "name": "SVOP->", "depth":58, "children":[ 
+                                                                                                                                                                                                                                            { "id": "906", "name": "SV(PV)", "depth":59, "children":[ 
+                                                                                                                                                                                                                                                { "id": "907", "name": "SvSHARED_HEK_FROM_PV->", "depth":60, "children":[ 
+                                                                                                                                                                                                                                                ], "data":{ "$area": 38 } },
+                                                                                                                                                                                                                                            ], "data":{ "$area": 78 } },
+                                                                                                                                                                                                                                        ], "data":{ "$area": 78 } },
+                                                                                                                                                                                                                                        { "id": "908", "name": "SVOP->", "depth":58, "children":[ 
+                                                                                                                                                                                                                                            { "id": "909", "name": "SV(PV)", "depth":59, "children":[ 
+                                                                                                                                                                                                                                            ], "data":{ "$area": 47 } },
+                                                                                                                                                                                                                                        ], "data":{ "$area": 47 } },
+                                                                                                                                                                                                                                        { "id": "910", "name": "SVOP->", "depth":58, "children":[ 
+                                                                                                                                                                                                                                            { "id": "911", "name": "SV(PV)", "depth":59, "children":[ 
+                                                                                                                                                                                                                                            ], "data":{ "$area": 40 } },
+                                                                                                                                                                                                                                        ], "data":{ "$area": 40 } },
+                                                                                                                                                                                                                                        { "id": "912", "name": "SVOP->", "depth":58, "children":[ 
+                                                                                                                                                                                                                                            { "id": "913", "name": "SV(PV)", "depth":59, "children":[ 
+                                                                                                                                                                                                                                            ], "data":{ "$area": 52 } },
+                                                                                                                                                                                                                                        ], "data":{ "$area": 52 } },
+                                                                                                                                                                                                                                        { "id": "914", "name": "SVOP->", "depth":58, "children":[ 
+                                                                                                                                                                                                                                            { "id": "915", "name": "SV(PV)", "depth":59, "children":[ 
+                                                                                                                                                                                                                                                { "id": "916", "name": "SvSHARED_HEK_FROM_PV->", "depth":60, "children":[ 
+                                                                                                                                                                                                                                                ], "data":{ "$area": 42 } },
+                                                                                                                                                                                                                                            ], "data":{ "$area": 82 } },
+                                                                                                                                                                                                                                        ], "data":{ "$area": 82 } },
+                                                                                                                                                                                                                                        { "id": "917", "name": "SVOP->", "depth":58, "children":[ 
+                                                                                                                                                                                                                                            { "id": "918", "name": "SV(PV)", "depth":59, "children":[ 
+                                                                                                                                                                                                                                            ], "data":{ "$area": 42 } },
+                                                                                                                                                                                                                                        ], "data":{ "$area": 42 } },
+                                                                                                                                                                                                                                        { "id": "919", "name": "SVOP->", "depth":58, "children":[ 
+                                                                                                                                                                                                                                            { "id": "920", "name": "SV(PVGV)", "depth":59, "children":[ 
+                                                                                                                                                                                                                                                { "id": "921", "name": "UNKNOWN(0,0x0)", "depth":60, "children":[ 
+                                                                                                                                                                                                                                                    { "id": "922", "name": "MAGIC(<)", "depth":61, "children":[ 
+                                                                                                                                                                                                                                                        { "id": "923", "name": "mg_obj->", "depth":62, "children":[ 
+                                                                                                                                                                                                                                                            { "id": "924", "name": "SV(PVCV)", "depth":63, "children":[ 
+                                                                                                                                                                                                                                                                { "id": "925", "name": "CvPADLIST->", "depth":64, "children":[ 
+                                                                                                                                                                                                                                                                    { "id": "926", "name": "SV(PVAV)", "depth":65, "children":[ 
+                                                                                                                                                                                                                                                                    ], "data":{ "$area": 80 } },
+                                                                                                                                                                                                                                                                ], "data":{ "$area": 80 } },
+                                                                                                                                                                                                                                                                { "id": "927", "name": "CvSTART->", "depth":64, "children":[ 
+                                                                                                                                                                                                                                                                    { "id": "928", "name": "SVOP->", "depth":65, "children":[ 
+                                                                                                                                                                                                                                                                        { "id": "929", "name": "SV(PV)", "depth":66, "children":[ 
+                                                                                                                                                                                                                                                                        ], "data":{ "$area": 40 } },
+                                                                                                                                                                                                                                                                    ], "data":{ "$area": 40 } },
+                                                                                                                                                                                                                                                                    { "id": "930", "name": "SVOP->", "depth":65, "children":[ 
+                                                                                                                                                                                                                                                                        { "id": "931", "name": "SV(PV)", "depth":66, "children":[ 
+                                                                                                                                                                                                                                                                        ], "data":{ "$area": 56 } },
+                                                                                                                                                                                                                                                                    ], "data":{ "$area": 56 } },
+                                                                                                                                                                                                                                                                    { "id": "932", "name": "SVOP->", "depth":65, "children":[ 
+                                                                                                                                                                                                                                                                        { "id": "933", "name": "SV(PV)", "depth":66, "children":[ 
+                                                                                                                                                                                                                                                                        ], "data":{ "$area": 56 } },
+                                                                                                                                                                                                                                                                    ], "data":{ "$area": 56 } },
+                                                                                                                                                                                                                                                                    { "id": "934", "name": "SVOP->", "depth":65, "children":[ 
+                                                                                                                                                                                                                                                                        { "id": "935", "name": "SV(PV)", "depth":66, "children":[ 
+                                                                                                                                                                                                                                                                        ], "data":{ "$area": 56 } },
+                                                                                                                                                                                                                                                                    ], "data":{ "$area": 56 } },
+                                                                                                                                                                                                                                                                    { "id": "936", "name": "SVOP->", "depth":65, "children":[ 
+                                                                                                                                                                                                                                                                        { "id": "937", "name": "SV(PV)", "depth":66, "children":[ 
+                                                                                                                                                                                                                                                                        ], "data":{ "$area": 56 } },
+                                                                                                                                                                                                                                                                    ], "data":{ "$area": 56 } },
+                                                                                                                                                                                                                                                                    { "id": "938", "name": "SVOP->", "depth":65, "children":[ 
+                                                                                                                                                                                                                                                                        { "id": "939", "name": "SV(PVGV)", "depth":66, "children":[ 
+                                                                                                                                                                                                                                                                            { "id": "940", "name": "GvFILE_HEK->", "depth":67, "children":[ 
+                                                                                                                                                                                                                                                                            ], "data":{ "$area": 98 } },
+                                                                                                                                                                                                                                                                            { "id": "941", "name": "gp_sv->", "depth":67, "children":[ 
+                                                                                                                                                                                                                                                                                { "id": "942", "name": "SV(IV)", "depth":68, "children":[ 
+                                                                                                                                                                                                                                                                                ], "data":{ "$area": 24 } },
+                                                                                                                                                                                                                                                                            ], "data":{ "$area": 24 } },
+                                                                                                                                                                                                                                                                        ], "data":{ "$area": 274 } },
+                                                                                                                                                                                                                                                                    ], "data":{ "$area": 274 } },
+                                                                                                                                                                                                                                                                    { "id": "943", "name": "SVOP->", "depth":65, "children":[ 
+                                                                                                                                                                                                                                                                        { "id": "944", "name": "SV(PVGV)", "depth":66, "children":[ 
+                                                                                                                                                                                                                                                                            { "id": "945", "name": "UNKNOWN(0,0x0)", "depth":67, "children":[ 
+                                                                                                                                                                                                                                                                                { "id": "946", "name": "MAGIC(<)", "depth":68, "children":[ 
+                                                                                                                                                                                                                                                                                    { "id": "947", "name": "mg_obj->", "depth":69, "children":[ 
+                                                                                                                                                                                                                                                                                        { "id": "948", "name": "SV(PVCV)", "depth":70, "children":[ 
+                                                                                                                                                                                                                                                                                            { "id": "949", "name": "CvPADLIST->", "depth":71, "children":[ 
+                                                                                                                                                                                                                                                                                                { "id": "950", "name": "SV(PVAV)", "depth":72, "children":[ 
+                                                                                                                                                                                                                                                                                                ], "data":{ "$area": 80 } },
+                                                                                                                                                                                                                                                                                            ], "data":{ "$area": 80 } },
+                                                                                                                                                                                                                                                                                            { "id": "951", "name": "CvSTART->", "depth":71, "children":[ 
+                                                                                                                                                                                                                                                                                                { "id": "952", "name": "PM_GETRE->", "depth":72, "children":[ 
+                                                                                                                                                                                                                                                                                                    { "id": "953", "name": "regex_size", "depth":73, "children":[ 
+                                                                                                                                                                                                                                                                                                    ], "data":{ "$area": 168 } },
+                                                                                                                                                                                                                                                                                                ], "data":{ "$area": 168 } },
+                                                                                                                                                                                                                                                                                                { "id": "954", "name": "SVOP->", "depth":72, "children":[ 
+                                                                                                                                                                                                                                                                                                    { "id": "955", "name": "SV(PVGV)", "depth":73, "children":[ 
+                                                                                                                                                                                                                                                                                                    ], "data":{ "$area": 152 } },
+                                                                                                                                                                                                                                                                                                ], "data":{ "$area": 152 } },
+                                                                                                                                                                                                                                                                                                { "id": "956", "name": "SVOP->", "depth":72, "children":[ 
+                                                                                                                                                                                                                                                                                                    { "id": "957", "name": "SV(PV)", "depth":73, "children":[ 
+                                                                                                                                                                                                                                                                                                    ], "data":{ "$area": 56 } },
+                                                                                                                                                                                                                                                                                                ], "data":{ "$area": 56 } },
+                                                                                                                                                                                                                                                                                                { "id": "958", "name": "SVOP->", "depth":72, "children":[ 
+                                                                                                                                                                                                                                                                                                    { "id": "959", "name": "SV(PV)", "depth":73, "children":[ 
+                                                                                                                                                                                                                                                                                                    ], "data":{ "$area": 42 } },
+                                                                                                                                                                                                                                                                                                ], "data":{ "$area": 42 } },
+                                                                                                                                                                                                                                                                                                { "id": "960", "name": "SVOP->", "depth":72, "children":[ 
+                                                                                                                                                                                                                                                                                                    { "id": "961", "name": "SV(PV)", "depth":73, "children":[ 
+                                                                                                                                                                                                                                                                                                    ], "data":{ "$area": 42 } },
+                                                                                                                                                                                                                                                                                                ], "data":{ "$area": 42 } },
+                                                                                                                                                                                                                                                                                                { "id": "962", "name": "PM_GETRE->", "depth":72, "children":[ 
+                                                                                                                                                                                                                                                                                                    { "id": "963", "name": "regex_size", "depth":73, "children":[ 
+                                                                                                                                                                                                                                                                                                    ], "data":{ "$area": 160 } },
+                                                                                                                                                                                                                                                                                                ], "data":{ "$area": 160 } },
+                                                                                                                                                                                                                                                                                                { "id": "964", "name": "SVOP->", "depth":72, "children":[ 
+                                                                                                                                                                                                                                                                                                    { "id": "965", "name": "SV(PVGV)", "depth":73, "children":[ 
+                                                                                                                                                                                                                                                                                                    ], "data":{ "$area": 152 } },
+                                                                                                                                                                                                                                                                                                ], "data":{ "$area": 152 } },
+                                                                                                                                                                                                                                                                                                { "id": "966", "name": "SVOP->", "depth":72, "children":[ 
+                                                                                                                                                                                                                                                                                                    { "id": "967", "name": "SV(IV)", "depth":73, "children":[ 
+                                                                                                                                                                                                                                                                                                    ], "data":{ "$area": 24 } },
+                                                                                                                                                                                                                                                                                                ], "data":{ "$area": 24 } },
+                                                                                                                                                                                                                                                                                                { "id": "968", "name": "SVOP->", "depth":72, "children":[ 
+                                                                                                                                                                                                                                                                                                    { "id": "969", "name": "SV(PVGV)", "depth":73, "children":[ 
+                                                                                                                                                                                                                                                                                                        { "id": "970", "name": "UNKNOWN(0,0x0)", "depth":74, "children":[ 
+                                                                                                                                                                                                                                                                                                            { "id": "971", "name": "MAGIC(<)", "depth":75, "children":[ 
+                                                                                                                                                                                                                                                                                                                { "id": "972", "name": "mg_obj->", "depth":76, "children":[ 
+                                                                                                                                                                                                                                                                                                                    { "id": "973", "name": "SV(PVCV)", "depth":77, "children":[ 
+                                                                                                                                                                                                                                                                                                                        { "id": "974", "name": "CvPADLIST->", "depth":78, "children":[ 
+                                                                                                                                                                                                                                                                                                                            { "id": "975", "name": "SV(PVAV)", "depth":79, "children":[ 
+                                                                                                                                                                                                                                                                                                                            ], "data":{ "$area": 80 } },
+                                                                                                                                                                                                                                                                                                                        ], "data":{ "$area": 80 } },
+                                                                                                                                                                                                                                                                                                                        { "id": "976", "name": "CvSTART->", "depth":78, "children":[ 
+                                                                                                                                                                                                                                                                                                                            { "id": "977", "name": "SVOP->", "depth":79, "children":[ 
+                                                                                                                                                                                                                                                                                                                                { "id": "978", "name": "SV(IV)", "depth":80, "children":[ 
+                                                                                                                                                                                                                                                                                                                                ], "data":{ "$area": 24 } },
+                                                                                                                                                                                                                                                                                                                            ], "data":{ "$area": 24 } },
+                                                                                                                                                                                                                                                                                                                            { "id": "979", "name": "SVOP->", "depth":79, "children":[ 
+                                                                                                                                                                                                                                                                                                                                { "id": "980", "name": "SV(PV)", "depth":80, "children":[ 
+                                                                                                                                                                                                                                                                                                                                ], "data":{ "$area": 56 } },
+                                                                                                                                                                                                                                                                                                                            ], "data":{ "$area": 56 } },
+                                                                                                                                                                                                                                                                                                                            { "id": "981", "name": "SVOP->", "depth":79, "children":[ 
+                                                                                                                                                                                                                                                                                                                                { "id": "982", "name": "SV(IV)", "depth":80, "children":[ 
+                                                                                                                                                                                                                                                                                                                                ], "data":{ "$area": 24 } },
+                                                                                                                                                                                                                                                                                                                            ], "data":{ "$area": 24 } },
+                                                                                                                                                                                                                                                                                                                            { "id": "983", "name": "SVOP->", "depth":79, "children":[ 
+                                                                                                                                                                                                                                                                                                                                { "id": "984", "name": "SV(IV)", "depth":80, "children":[ 
+                                                                                                                                                                                                                                                                                                                                ], "data":{ "$area": 24 } },
+                                                                                                                                                                                                                                                                                                                            ], "data":{ "$area": 24 } },
+                                                                                                                                                                                                                                                                                                                        ], "data":{ "$area": 1976 } },
+                                                                                                                                                                                                                                                                                                                    ], "data":{ "$area": 2184 } },
+                                                                                                                                                                                                                                                                                                                ], "data":{ "$area": 2184 } },
+                                                                                                                                                                                                                                                                                                            ], "data":{ "$area": 2224 } },
+                                                                                                                                                                                                                                                                                                        ], "data":{ "$area": 2224 } },
+                                                                                                                                                                                                                                                                                                    ], "data":{ "$area": 2376 } },
+                                                                                                                                                                                                                                                                                                ], "data":{ "$area": 2376 } },
+                                                                                                                                                                                                                                                                                                { "id": "985", "name": "SVOP->", "depth":72, "children":[ 
+                                                                                                                                                                                                                                                                                                    { "id": "986", "name": "SV(PVGV)", "depth":73, "children":[ 
+                                                                                                                                                                                                                                                                                                        { "id": "987", "name": "gp_sv->", "depth":74, "children":[ 
+                                                                                                                                                                                                                                                                                                            { "id": "988", "name": "SV(IV)", "depth":75, "children":[ 
+                                                                                                                                                                                                                                                                                                            ], "data":{ "$area": 24 } },
+                                                                                                                                                                                                                                                                                                        ], "data":{ "$area": 24 } },
+                                                                                                                                                                                                                                                                                                    ], "data":{ "$area": 176 } },
+                                                                                                                                                                                                                                                                                                ], "data":{ "$area": 176 } },
+                                                                                                                                                                                                                                                                                                { "id": "989", "name": "PM_GETRE->", "depth":72, "children":[ 
+                                                                                                                                                                                                                                                                                                    { "id": "990", "name": "regex_size", "depth":73, "children":[ 
+                                                                                                                                                                                                                                                                                                    ], "data":{ "$area": 160 } },
+                                                                                                                                                                                                                                                                                                ], "data":{ "$area": 160 } },
+                                                                                                                                                                                                                                                                                                { "id": "991", "name": "SVOP->", "depth":72, "children":[ 
+                                                                                                                                                                                                                                                                                                    { "id": "992", "name": "SV(PV)", "depth":73, "children":[ 
+                                                                                                                                                                                                                                                                                                    ], "data":{ "$area": 43 } },
+                                                                                                                                                                                                                                                                                                ], "data":{ "$area": 43 } },
+                                                                                                                                                                                                                                                                                                { "id": "993", "name": "SVOP->", "depth":72, "children":[ 
+                                                                                                                                                                                                                                                                                                    { "id": "994", "name": "SV(PVGV)", "depth":73, "children":[ 
+                                                                                                                                                                                                                                                                                                        { "id": "995", "name": "GvNAME_HEK->", "depth":74, "children":[ 
+                                                                                                                                                                                                                                                                                                        ], "data":{ "$area": 40 } },
+                                                                                                                                                                                                                                                                                                    ], "data":{ "$area": 192 } },
+                                                                                                                                                                                                                                                                                                ], "data":{ "$area": 192 } },
+                                                                                                                                                                                                                                                                                                { "id": "996", "name": "SVOP->", "depth":72, "children":[ 
+                                                                                                                                                                                                                                                                                                    { "id": "997", "name": "SV(PVGV)", "depth":73, "children":[ 
+                                                                                                                                                                                                                                                                                                        { "id": "998", "name": "gp_sv->", "depth":74, "children":[ 
+                                                                                                                                                                                                                                                                                                            { "id": "999", "name": "SV(NULL)", "depth":75, "children":[ 
+                                                                                                                                                                                                                                                                                                            ], "data":{ "$area": 24 } },
+                                                                                                                                                                                                                                                                                                        ], "data":{ "$area": 24 } },
+                                                                                                                                                                                                                                                                                                    ], "data":{ "$area": 176 } },
+                                                                                                                                                                                                                                                                                                ], "data":{ "$area": 176 } },
+                                                                                                                                                                                                                                                                                            ], "data":{ "$area": 8223 } },
+                                                                                                                                                                                                                                                                                        ], "data":{ "$area": 8431 } },
+                                                                                                                                                                                                                                                                                    ], "data":{ "$area": 8431 } },
+                                                                                                                                                                                                                                                                                ], "data":{ "$area": 8471 } },
+                                                                                                                                                                                                                                                                            ], "data":{ "$area": 8471 } },
+                                                                                                                                                                                                                                                                        ], "data":{ "$area": 8623 } },
+                                                                                                                                                                                                                                                                    ], "data":{ "$area": 8623 } },
+                                                                                                                                                                                                                                                                    { "id": "1000", "name": "SVOP->", "depth":65, "children":[ 
+                                                                                                                                                                                                                                                                        { "id": "1001", "name": "SV(PVGV)", "depth":66, "children":[ 
+                                                                                                                                                                                                                                                                            { "id": "1002", "name": "GvFILE_HEK->", "depth":67, "children":[ 
+                                                                                                                                                                                                                                                                            ], "data":{ "$area": 102 } },
+                                                                                                                                                                                                                                                                            { "id": "1003", "name": "gp_av->", "depth":67, "children":[ 
+                                                                                                                                                                                                                                                                                { "id": "1004", "name": "SV(PVAV)", "depth":68, "children":[ 
+                                                                                                                                                                                                                                                                                ], "data":{ "$area": 64 } },
+                                                                                                                                                                                                                                                                            ], "data":{ "$area": 64 } },
+                                                                                                                                                                                                                                                                        ], "data":{ "$area": 318 } },
+                                                                                                                                                                                                                                                                    ], "data":{ "$area": 318 } },
+                                                                                                                                                                                                                                                                    { "id": "1005", "name": "SVOP->", "depth":65, "children":[ 
+                                                                                                                                                                                                                                                                        { "id": "1006", "name": "SV(PV)", "depth":66, "children":[ 
+                                                                                                                                                                                                                                                                        ], "data":{ "$area": 72 } },
+                                                                                                                                                                                                                                                                    ], "data":{ "$area": 72 } },
+                                                                                                                                                                                                                                                                    { "id": "1007", "name": "SVOP->", "depth":65, "children":[ 
+                                                                                                                                                                                                                                                                        { "id": "1008", "name": "SV(PV)", "depth":66, "children":[ 
+                                                                                                                                                                                                                                                                        ], "data":{ "$area": 79 } },
+                                                                                                                                                                                                                                                                    ], "data":{ "$area": 79 } },
+                                                                                                                                                                                                                                                                    { "id": "1009", "name": "SVOP->", "depth":65, "children":[ 
+                                                                                                                                                                                                                                                                        { "id": "1010", "name": "SV(PV)", "depth":66, "children":[ 
+                                                                                                                                                                                                                                                                        ], "data":{ "$area": 56 } },
+                                                                                                                                                                                                                                                                    ], "data":{ "$area": 56 } },
+                                                                                                                                                                                                                                                                    { "id": "1011", "name": "SVOP->", "depth":65, "children":[ 
+                                                                                                                                                                                                                                                                        { "id": "1012", "name": "SV(PV)", "depth":66, "children":[ 
+                                                                                                                                                                                                                                                                        ], "data":{ "$area": 43 } },
+                                                                                                                                                                                                                                                                    ], "data":{ "$area": 43 } },
+                                                                                                                                                                                                                                                                    { "id": "1013", "name": "SVOP->", "depth":65, "children":[ 
+                                                                                                                                                                                                                                                                        { "id": "1014", "name": "SV(PV)", "depth":66, "children":[ 
+                                                                                                                                                                                                                                                                        ], "data":{ "$area": 46 } },
+                                                                                                                                                                                                                                                                    ], "data":{ "$area": 46 } },
+                                                                                                                                                                                                                                                                    { "id": "1015", "name": "SVOP->", "depth":65, "children":[ 
+                                                                                                                                                                                                                                                                        { "id": "1016", "name": "SV(PV)", "depth":66, "children":[ 
+                                                                                                                                                                                                                                                                        ], "data":{ "$area": 56 } },
+                                                                                                                                                                                                                                                                    ], "data":{ "$area": 56 } },
+                                                                                                                                                                                                                                                                    { "id": "1017", "name": "SVOP->", "depth":65, "children":[ 
+                                                                                                                                                                                                                                                                        { "id": "1018", "name": "SV(PV)", "depth":66, "children":[ 
+                                                                                                                                                                                                                                                                        ], "data":{ "$area": 56 } },
+                                                                                                                                                                                                                                                                    ], "data":{ "$area": 56 } },
+                                                                                                                                                                                                                                                                    { "id": "1019", "name": "SVOP->", "depth":65, "children":[ 
+                                                                                                                                                                                                                                                                        { "id": "1020", "name": "SV(PV)", "depth":66, "children":[ 
+                                                                                                                                                                                                                                                                            { "id": "1021", "name": "SvSHARED_HEK_FROM_PV->", "depth":67, "children":[ 
+                                                                                                                                                                                                                                                                            ], "data":{ "$area": 38 } },
+                                                                                                                                                                                                                                                                        ], "data":{ "$area": 78 } },
+                                                                                                                                                                                                                                                                    ], "data":{ "$area": 78 } },
+                                                                                                                                                                                                                                                                    { "id": "1022", "name": "SVOP->", "depth":65, "children":[ 
+                                                                                                                                                                                                                                                                        { "id": "1023", "name": "SV(PV)", "depth":66, "children":[ 
+                                                                                                                                                                                                                                                                        ], "data":{ "$area": 40 } },
+                                                                                                                                                                                                                                                                    ], "data":{ "$area": 40 } },
+                                                                                                                                                                                                                                                                    { "id": "1024", "name": "SVOP->", "depth":65, "children":[ 
+                                                                                                                                                                                                                                                                        { "id": "1025", "name": "SV(PV)", "depth":66, "children":[ 
+                                                                                                                                                                                                                                                                            { "id": "1026", "name": "SvSHARED_HEK_FROM_PV->", "depth":67, "children":[ 
+                                                                                                                                                                                                                                                                            ], "data":{ "$area": 39 } },
+                                                                                                                                                                                                                                                                        ], "data":{ "$area": 79 } },
+                                                                                                                                                                                                                                                                    ], "data":{ "$area": 79 } },
+                                                                                                                                                                                                                                                                    { "id": "1027", "name": "SVOP->", "depth":65, "children":[ 
+                                                                                                                                                                                                                                                                        { "id": "1028", "name": "SV(PV)", "depth":66, "children":[ 
+                                                                                                                                                                                                                                                                            { "id": "1029", "name": "SvSHARED_HEK_FROM_PV->", "depth":67, "children":[ 
+                                                                                                                                                                                                                                                                            ], "data":{ "$area": 36 } },
+                                                                                                                                                                                                                                                                        ], "data":{ "$area": 76 } },
+                                                                                                                                                                                                                                                                    ], "data":{ "$area": 76 } },
+                                                                                                                                                                                                                                                                    { "id": "1030", "name": "SVOP->", "depth":65, "children":[ 
+                                                                                                                                                                                                                                                                        { "id": "1031", "name": "SV(PV)", "depth":66, "children":[ 
+                                                                                                                                                                                                                                                                        ], "data":{ "$area": 56 } },
+                                                                                                                                                                                                                                                                    ], "data":{ "$area": 56 } },
+                                                                                                                                                                                                                                                                    { "id": "1032", "name": "SVOP->", "depth":65, "children":[ 
+                                                                                                                                                                                                                                                                        { "id": "1033", "name": "SV(PV)", "depth":66, "children":[ 
+                                                                                                                                                                                                                                                                        ], "data":{ "$area": 56 } },
+                                                                                                                                                                                                                                                                    ], "data":{ "$area": 56 } },
+                                                                                                                                                                                                                                                                    { "id": "1034", "name": "SVOP->", "depth":65, "children":[ 
+                                                                                                                                                                                                                                                                        { "id": "1035", "name": "SV(PV)", "depth":66, "children":[ 
+                                                                                                                                                                                                                                                                            { "id": "1036", "name": "SvSHARED_HEK_FROM_PV->", "depth":67, "children":[ 
+                                                                                                                                                                                                                                                                            ], "data":{ "$area": 47 } },
+                                                                                                                                                                                                                                                                        ], "data":{ "$area": 87 } },
+                                                                                                                                                                                                                                                                    ], "data":{ "$area": 87 } },
+                                                                                                                                                                                                                                                                    { "id": "1037", "name": "SVOP->", "depth":65, "children":[ 
+                                                                                                                                                                                                                                                                        { "id": "1038", "name": "SV(PV)", "depth":66, "children":[ 
+                                                                                                                                                                                                                                                                        ], "data":{ "$area": 56 } },
+                                                                                                                                                                                                                                                                    ], "data":{ "$area": 56 } },
+                                                                                                                                                                                                                                                                    { "id": "1039", "name": "SVOP->", "depth":65, "children":[ 
+                                                                                                                                                                                                                                                                        { "id": "1040", "name": "SV(PV)", "depth":66, "children":[ 
+                                                                                                                                                                                                                                                                            { "id": "1041", "name": "SvSHARED_HEK_FROM_PV->", "depth":67, "children":[ 
+                                                                                                                                                                                                                                                                            ], "data":{ "$area": 37 } },
+                                                                                                                                                                                                                                                                        ], "data":{ "$area": 77 } },
+                                                                                                                                                                                                                                                                    ], "data":{ "$area": 77 } },
+                                                                                                                                                                                                                                                                    { "id": "1042", "name": "SVOP->", "depth":65, "children":[ 
+                                                                                                                                                                                                                                                                        { "id": "1043", "name": "SV(PVGV)", "depth":66, "children":[ 
+                                                                                                                                                                                                                                                                            { "id": "1044", "name": "GvNAME_HEK->", "depth":67, "children":[ 
+                                                                                                                                                                                                                                                                            ], "data":{ "$area": 40 } },
+                                                                                                                                                                                                                                                                        ], "data":{ "$area": 192 } },
+                                                                                                                                                                                                                                                                    ], "data":{ "$area": 192 } },
+                                                                                                                                                                                                                                                                    { "id": "1045", "name": "SVOP->", "depth":65, "children":[ 
+                                                                                                                                                                                                                                                                        { "id": "1046", "name": "SV(PV)", "depth":66, "children":[ 
+                                                                                                                                                                                                                                                                        ], "data":{ "$area": 56 } },
+                                                                                                                                                                                                                                                                    ], "data":{ "$area": 56 } },
+                                                                                                                                                                                                                                                                    { "id": "1047", "name": "SVOP->", "depth":65, "children":[ 
+                                                                                                                                                                                                                                                                        { "id": "1048", "name": "SV(PVGV)", "depth":66, "children":[ 
+                                                                                                                                                                                                                                                                            { "id": "1049", "name": "GvNAME_HEK->", "depth":67, "children":[ 
+                                                                                                                                                                                                                                                                            ], "data":{ "$area": 35 } },
+                                                                                                                                                                                                                                                                            { "id": "1050", "name": "gp_sv->", "depth":67, "children":[ 
+                                                                                                                                                                                                                                                                                { "id": "1051", "name": "SV(PV)", "depth":68, "children":[ 
+                                                                                                                                                                                                                                                                                ], "data":{ "$area": 280 } },
+                                                                                                                                                                                                                                                                            ], "data":{ "$area": 280 } },
+                                                                                                                                                                                                                                                                            { "id": "1052", "name": "gp_hv->", "depth":67, "children":[ 
+                                                                                                                                                                                                                                                                                { "id": "1053", "name": "SV(PVHV)", "depth":68, "children":[ 
+                                                                                                                                                                                                                                                                                ], "data":{ "$area": 120 } },
+                                                                                                                                                                                                                                                                            ], "data":{ "$area": 120 } },
+                                                                                                                                                                                                                                                                        ], "data":{ "$area": 587 } },
+                                                                                                                                                                                                                                                                    ], "data":{ "$area": 587 } },
+                                                                                                                                                                                                                                                                    { "id": "1054", "name": "SVOP->", "depth":65, "children":[ 
+                                                                                                                                                                                                                                                                        { "id": "1055", "name": "SV(IV)", "depth":66, "children":[ 
+                                                                                                                                                                                                                                                                        ], "data":{ "$area": 24 } },
+                                                                                                                                                                                                                                                                    ], "data":{ "$area": 24 } },
+                                                                                                                                                                                                                                                                    { "id": "1056", "name": "SVOP->", "depth":65, "children":[ 
+                                                                                                                                                                                                                                                                        { "id": "1057", "name": "SV(PV)", "depth":66, "children":[ 
+                                                                                                                                                                                                                                                                            { "id": "1058", "name": "SvSHARED_HEK_FROM_PV->", "depth":67, "children":[ 
+                                                                                                                                                                                                                                                                            ], "data":{ "$area": 42 } },
+                                                                                                                                                                                                                                                                        ], "data":{ "$area": 82 } },
+                                                                                                                                                                                                                                                                    ], "data":{ "$area": 82 } },
+                                                                                                                                                                                                                                                                    { "id": "1059", "name": "SVOP->", "depth":65, "children":[ 
+                                                                                                                                                                                                                                                                        { "id": "1060", "name": "SV(PVGV)", "depth":66, "children":[ 
+                                                                                                                                                                                                                                                                            { "id": "1061", "name": "UNKNOWN(0,0x0)", "depth":67, "children":[ 
+                                                                                                                                                                                                                                                                                { "id": "1062", "name": "MAGIC(<)", "depth":68, "children":[ 
+                                                                                                                                                                                                                                                                                    { "id": "1063", "name": "mg_obj->", "depth":69, "children":[ 
+                                                                                                                                                                                                                                                                                        { "id": "1064", "name": "SV(PVCV)", "depth":70, "children":[ 
+                                                                                                                                                                                                                                                                                            { "id": "1065", "name": "CvPADLIST->", "depth":71, "children":[ 
+                                                                                                                                                                                                                                                                                                { "id": "1066", "name": "SV(PVAV)", "depth":72, "children":[ 
+                                                                                                                                                                                                                                                                                                ], "data":{ "$area": 80 } },
+                                                                                                                                                                                                                                                                                            ], "data":{ "$area": 80 } },
+                                                                                                                                                                                                                                                                                            { "id": "1067", "name": "CvSTART->", "depth":71, "children":[ 
+                                                                                                                                                                                                                                                                                                { "id": "1068", "name": "SVOP->", "depth":72, "children":[ 
+                                                                                                                                                                                                                                                                                                    { "id": "1069", "name": "SV(PV)", "depth":73, "children":[ 
+                                                                                                                                                                                                                                                                                                        { "id": "1070", "name": "SvSHARED_HEK_FROM_PV->", "depth":74, "children":[ 
+                                                                                                                                                                                                                                                                                                        ], "data":{ "$area": 37 } },
+                                                                                                                                                                                                                                                                                                    ], "data":{ "$area": 77 } },
+                                                                                                                                                                                                                                                                                                ], "data":{ "$area": 77 } },
+                                                                                                                                                                                                                                                                                                { "id": "1071", "name": "SVOP->", "depth":72, "children":[ 
+                                                                                                                                                                                                                                                                                                    { "id": "1072", "name": "SV(PV)", "depth":73, "children":[ 
+                                                                                                                                                                                                                                                                                                    ], "data":{ "$area": 56 } },
+                                                                                                                                                                                                                                                                                                ], "data":{ "$area": 56 } },
+                                                                                                                                                                                                                                                                                                { "id": "1073", "name": "SVOP->", "depth":72, "children":[ 
+                                                                                                                                                                                                                                                                                                    { "id": "1074", "name": "SV(PV)", "depth":73, "children":[ 
+                                                                                                                                                                                                                                                                                                    ], "data":{ "$area": 56 } },
+                                                                                                                                                                                                                                                                                                ], "data":{ "$area": 56 } },
+                                                                                                                                                                                                                                                                                                { "id": "1075", "name": "SVOP->", "depth":72, "children":[ 
+                                                                                                                                                                                                                                                                                                    { "id": "1076", "name": "SV(PV)", "depth":73, "children":[ 
+                                                                                                                                                                                                                                                                                                    ], "data":{ "$area": 40 } },
+                                                                                                                                                                                                                                                                                                ], "data":{ "$area": 40 } },
+                                                                                                                                                                                                                                                                                                { "id": "1077", "name": "SVOP->", "depth":72, "children":[ 
+                                                                                                                                                                                                                                                                                                    { "id": "1078", "name": "SV(PV)", "depth":73, "children":[ 
+                                                                                                                                                                                                                                                                                                    ], "data":{ "$area": 56 } },
+                                                                                                                                                                                                                                                                                                ], "data":{ "$area": 56 } },
+                                                                                                                                                                                                                                                                                                { "id": "1079", "name": "SVOP->", "depth":72, "children":[ 
+                                                                                                                                                                                                                                                                                                    { "id": "1080", "name": "SV(PVGV)", "depth":73, "children":[ 
+                                                                                                                                                                                                                                                                                                        { "id": "1081", "name": "gp_sv->", "depth":74, "children":[ 
+                                                                                                                                                                                                                                                                                                            { "id": "1082", "name": "SV(IV)", "depth":75, "children":[ 
+                                                                                                                                                                                                                                                                                                            ], "data":{ "$area": 24 } },
+                                                                                                                                                                                                                                                                                                        ], "data":{ "$area": 24 } },
+                                                                                                                                                                                                                                                                                                    ], "data":{ "$area": 176 } },
+                                                                                                                                                                                                                                                                                                ], "data":{ "$area": 176 } },
+                                                                                                                                                                                                                                                                                                { "id": "1083", "name": "SVOP->", "depth":72, "children":[ 
+                                                                                                                                                                                                                                                                                                    { "id": "1084", "name": "SV(PV)", "depth":73, "children":[ 
+                                                                                                                                                                                                                                                                                                    ], "data":{ "$area": 56 } },
+                                                                                                                                                                                                                                                                                                ], "data":{ "$area": 56 } },
+                                                                                                                                                                                                                                                                                                { "id": "1085", "name": "PM_GETRE->", "depth":72, "children":[ 
+                                                                                                                                                                                                                                                                                                    { "id": "1086", "name": "regex_size", "depth":73, "children":[ 
+                                                                                                                                                                                                                                                                                                    ], "data":{ "$area": 168 } },
+                                                                                                                                                                                                                                                                                                ], "data":{ "$area": 168 } },
+                                                                                                                                                                                                                                                                                                { "id": "1087", "name": "SVOP->", "depth":72, "children":[ 
+                                                                                                                                                                                                                                                                                                    { "id": "1088", "name": "SV(PV)", "depth":73, "children":[ 
+                                                                                                                                                                                                                                                                                                    ], "data":{ "$area": 49 } },
+                                                                                                                                                                                                                                                                                                ], "data":{ "$area": 49 } },
+                                                                                                                                                                                                                                                                                                { "id": "1089", "name": "SVOP->", "depth":72, "children":[ 
+                                                                                                                                                                                                                                                                                                    { "id": "1090", "name": "SV(PV)", "depth":73, "children":[ 
+                                                                                                                                                                                                                                                                                                        { "id": "1091", "name": "SvSHARED_HEK_FROM_PV->", "depth":74, "children":[ 
+                                                                                                                                                                                                                                                                                                        ], "data":{ "$area": 44 } },
+                                                                                                                                                                                                                                                                                                    ], "data":{ "$area": 84 } },
+                                                                                                                                                                                                                                                                                                ], "data":{ "$area": 84 } },
+                                                                                                                                                                                                                                                                                                { "id": "1092", "name": "SVOP->", "depth":72, "children":[ 
+                                                                                                                                                                                                                                                                                                    { "id": "1093", "name": "SV(PV)", "depth":73, "children":[ 
+                                                                                                                                                                                                                                                                                                        { "id": "1094", "name": "SvSHARED_HEK_FROM_PV->", "depth":74, "children":[ 
+                                                                                                                                                                                                                                                                                                        ], "data":{ "$area": 42 } },
+                                                                                                                                                                                                                                                                                                    ], "data":{ "$area": 82 } },
+                                                                                                                                                                                                                                                                                                ], "data":{ "$area": 82 } },
+                                                                                                                                                                                                                                                                                                { "id": "1095", "name": "SVOP->", "depth":72, "children":[ 
+                                                                                                                                                                                                                                                                                                    { "id": "1096", "name": "SV(PV)", "depth":73, "children":[ 
+                                                                                                                                                                                                                                                                                                    ], "data":{ "$area": 40 } },
+                                                                                                                                                                                                                                                                                                ], "data":{ "$area": 40 } },
+                                                                                                                                                                                                                                                                                            ], "data":{ "$area": 4580 } },
+                                                                                                                                                                                                                                                                                        ], "data":{ "$area": 4788 } },
+                                                                                                                                                                                                                                                                                    ], "data":{ "$area": 4788 } },
+                                                                                                                                                                                                                                                                                ], "data":{ "$area": 4828 } },
+                                                                                                                                                                                                                                                                            ], "data":{ "$area": 4828 } },
+                                                                                                                                                                                                                                                                        ], "data":{ "$area": 4980 } },
+                                                                                                                                                                                                                                                                    ], "data":{ "$area": 4980 } },
+                                                                                                                                                                                                                                                                    { "id": "1097", "name": "SVOP->", "depth":65, "children":[ 
+                                                                                                                                                                                                                                                                        { "id": "1098", "name": "SV(PV)", "depth":66, "children":[ 
+                                                                                                                                                                                                                                                                            { "id": "1099", "name": "SvSHARED_HEK_FROM_PV->", "depth":67, "children":[ 
+                                                                                                                                                                                                                                                                            ], "data":{ "$area": 38 } },
+                                                                                                                                                                                                                                                                        ], "data":{ "$area": 78 } },
+                                                                                                                                                                                                                                                                    ], "data":{ "$area": 78 } },
+                                                                                                                                                                                                                                                                    { "id": "1100", "name": "SVOP->", "depth":65, "children":[ 
+                                                                                                                                                                                                                                                                        { "id": "1101", "name": "SV(PV)", "depth":66, "children":[ 
+                                                                                                                                                                                                                                                                        ], "data":{ "$area": 56 } },
+                                                                                                                                                                                                                                                                    ], "data":{ "$area": 56 } },
+                                                                                                                                                                                                                                                                    { "id": "1102", "name": "SVOP->", "depth":65, "children":[ 
+                                                                                                                                                                                                                                                                        { "id": "1103", "name": "SV(PV)", "depth":66, "children":[ 
+                                                                                                                                                                                                                                                                        ], "data":{ "$area": 56 } },
+                                                                                                                                                                                                                                                                    ], "data":{ "$area": 56 } },
+                                                                                                                                                                                                                                                                    { "id": "1104", "name": "SVOP->", "depth":65, "children":[ 
+                                                                                                                                                                                                                                                                        { "id": "1105", "name": "SV(PV)", "depth":66, "children":[ 
+                                                                                                                                                                                                                                                                        ], "data":{ "$area": 56 } },
+                                                                                                                                                                                                                                                                    ], "data":{ "$area": 56 } },
+                                                                                                                                                                                                                                                                    { "id": "1106", "name": "SVOP->", "depth":65, "children":[ 
+                                                                                                                                                                                                                                                                        { "id": "1107", "name": "SV(PV)", "depth":66, "children":[ 
+                                                                                                                                                                                                                                                                        ], "data":{ "$area": 56 } },
+                                                                                                                                                                                                                                                                    ], "data":{ "$area": 56 } },
+                                                                                                                                                                                                                                                                    { "id": "1108", "name": "SVOP->", "depth":65, "children":[ 
+                                                                                                                                                                                                                                                                        { "id": "1109", "name": "SV(PV)", "depth":66, "children":[ 
+                                                                                                                                                                                                                                                                        ], "data":{ "$area": 56 } },
+                                                                                                                                                                                                                                                                    ], "data":{ "$area": 56 } },
+                                                                                                                                                                                                                                                                    { "id": "1110", "name": "SVOP->", "depth":65, "children":[ 
+                                                                                                                                                                                                                                                                        { "id": "1111", "name": "SV(PV)", "depth":66, "children":[ 
+                                                                                                                                                                                                                                                                        ], "data":{ "$area": 56 } },
+                                                                                                                                                                                                                                                                    ], "data":{ "$area": 56 } },
+                                                                                                                                                                                                                                                                    { "id": "1112", "name": "SVOP->", "depth":65, "children":[ 
+                                                                                                                                                                                                                                                                        { "id": "1113", "name": "SV(PV)", "depth":66, "children":[ 
+                                                                                                                                                                                                                                                                        ], "data":{ "$area": 56 } },
+                                                                                                                                                                                                                                                                    ], "data":{ "$area": 56 } },
+                                                                                                                                                                                                                                                                    { "id": "1114", "name": "SVOP->", "depth":65, "children":[ 
+                                                                                                                                                                                                                                                                        { "id": "1115", "name": "SV(PV)", "depth":66, "children":[ 
+                                                                                                                                                                                                                                                                        ], "data":{ "$area": 56 } },
+                                                                                                                                                                                                                                                                    ], "data":{ "$area": 56 } },
+                                                                                                                                                                                                                                                                    { "id": "1116", "name": "cop_stash->", "depth":65, "children":[ 
+                                                                                                                                                                                                                                                                        { "id": "1117", "name": "SV(PVHV)", "depth":66, "children":[ 
+                                                                                                                                                                                                                                                                            { "id": "1118", "name": "HvARRAY->", "depth":67, "children":[ 
+                                                                                                                                                                                                                                                                                { "id": "1119", "name": "HvNAME_HEK->", "depth":68, "children":[ 
+                                                                                                                                                                                                                                                                                ], "data":{ "$area": 36 } },
+                                                                                                                                                                                                                                                                            ], "data":{ "$area": 100 } },
+                                                                                                                                                                                                                                                                        ], "data":{ "$area": 220 } },
+                                                                                                                                                                                                                                                                    ], "data":{ "$area": 220 } },
+                                                                                                                                                                                                                                                                    { "id": "1120", "name": "SVOP->", "depth":65, "children":[ 
+                                                                                                                                                                                                                                                                        { "id": "1121", "name": "SV(PVGV)", "depth":66, "children":[ 
+                                                                                                                                                                                                                                                                            { "id": "1122", "name": "UNKNOWN(0,0x0)", "depth":67, "children":[ 
+                                                                                                                                                                                                                                                                                { "id": "1123", "name": "MAGIC(<)", "depth":68, "children":[ 
+                                                                                                                                                                                                                                                                                    { "id": "1124", "name": "mg_obj->", "depth":69, "children":[ 
+                                                                                                                                                                                                                                                                                        { "id": "1125", "name": "SV(PVCV)", "depth":70, "children":[ 
+                                                                                                                                                                                                                                                                                            { "id": "1126", "name": "CvPADLIST->", "depth":71, "children":[ 
+                                                                                                                                                                                                                                                                                                { "id": "1127", "name": "SV(PVAV)", "depth":72, "children":[ 
+                                                                                                                                                                                                                                                                                                ], "data":{ "$area": 80 } },
+                                                                                                                                                                                                                                                                                            ], "data":{ "$area": 80 } },
+                                                                                                                                                                                                                                                                                            { "id": "1128", "name": "CvSTART->", "depth":71, "children":[ 
+                                                                                                                                                                                                                                                                                                { "id": "1129", "name": "SVOP->", "depth":72, "children":[ 
+                                                                                                                                                                                                                                                                                                    { "id": "1130", "name": "SV(PV)", "depth":73, "children":[ 
+                                                                                                                                                                                                                                                                                                    ], "data":{ "$area": 72 } },
+                                                                                                                                                                                                                                                                                                ], "data":{ "$area": 72 } },
+                                                                                                                                                                                                                                                                                                { "id": "1131", "name": "SVOP->", "depth":72, "children":[ 
+                                                                                                                                                                                                                                                                                                    { "id": "1132", "name": "SV(PV)", "depth":73, "children":[ 
+                                                                                                                                                                                                                                                                                                    ], "data":{ "$area": 72 } },
+                                                                                                                                                                                                                                                                                                ], "data":{ "$area": 72 } },
+                                                                                                                                                                                                                                                                                            ], "data":{ "$area": 1288 } },
+                                                                                                                                                                                                                                                                                        ], "data":{ "$area": 1496 } },
+                                                                                                                                                                                                                                                                                    ], "data":{ "$area": 1496 } },
+                                                                                                                                                                                                                                                                                ], "data":{ "$area": 1536 } },
+                                                                                                                                                                                                                                                                            ], "data":{ "$area": 1536 } },
+                                                                                                                                                                                                                                                                        ], "data":{ "$area": 1688 } },
+                                                                                                                                                                                                                                                                    ], "data":{ "$area": 1688 } },
+                                                                                                                                                                                                                                                                    { "id": "1133", "name": "SVOP->", "depth":65, "children":[ 
+                                                                                                                                                                                                                                                                        { "id": "1134", "name": "SV(IV)", "depth":66, "children":[ 
+                                                                                                                                                                                                                                                                        ], "data":{ "$area": 24 } },
+                                                                                                                                                                                                                                                                    ], "data":{ "$area": 24 } },
+                                                                                                                                                                                                                                                                ], "data":{ "$area": 34855 } },
+                                                                                                                                                                                                                                                            ], "data":{ "$area": 35063 } },
+                                                                                                                                                                                                                                                        ], "data":{ "$area": 35063 } },
+                                                                                                                                                                                                                                                    ], "data":{ "$area": 35103 } },
+                                                                                                                                                                                                                                                ], "data":{ "$area": 35103 } },
+                                                                                                                                                                                                                                            ], "data":{ "$area": 35255 } },
+                                                                                                                                                                                                                                        ], "data":{ "$area": 35255 } },
+                                                                                                                                                                                                                                        { "id": "1135", "name": "SVOP->", "depth":58, "children":[ 
+                                                                                                                                                                                                                                            { "id": "1136", "name": "SV(PV)", "depth":59, "children":[ 
+                                                                                                                                                                                                                                            ], "data":{ "$area": 56 } },
+                                                                                                                                                                                                                                        ], "data":{ "$area": 56 } },
+                                                                                                                                                                                                                                        { "id": "1137", "name": "SVOP->", "depth":58, "children":[ 
+                                                                                                                                                                                                                                            { "id": "1138", "name": "SV(PVGV)", "depth":59, "children":[ 
+                                                                                                                                                                                                                                                { "id": "1139", "name": "GvNAME_HEK->", "depth":60, "children":[ 
+                                                                                                                                                                                                                                                ], "data":{ "$area": 35 } },
+                                                                                                                                                                                                                                                { "id": "1140", "name": "GvFILE_HEK->", "depth":60, "children":[ 
+                                                                                                                                                                                                                                                ], "data":{ "$area": 111 } },
+                                                                                                                                                                                                                                                { "id": "1141", "name": "gp_sv->", "depth":60, "children":[ 
+                                                                                                                                                                                                                                                    { "id": "1142", "name": "SV(PVMG)", "depth":61, "children":[ 
+                                                                                                                                                                                                                                                        { "id": "1143", "name": "UNKNOWN(0,0x0)", "depth":62, "children":[ 
+                                                                                                                                                                                                                                                            { "id": "1144", "name": "MAGIC(0)", "depth":63, "children":[ 
+                                                                                                                                                                                                                                                            ], "data":{ "$area": 41 } },
+                                                                                                                                                                                                                                                        ], "data":{ "$area": 41 } },
+                                                                                                                                                                                                                                                    ], "data":{ "$area": 145 } },
+                                                                                                                                                                                                                                                ], "data":{ "$area": 145 } },
+                                                                                                                                                                                                                                            ], "data":{ "$area": 443 } },
+                                                                                                                                                                                                                                        ], "data":{ "$area": 443 } },
+                                                                                                                                                                                                                                        { "id": "1145", "name": "PM_GETRE->", "depth":58, "children":[ 
+                                                                                                                                                                                                                                            { "id": "1146", "name": "regex_size", "depth":59, "children":[ 
+                                                                                                                                                                                                                                            ], "data":{ "$area": 168 } },
+                                                                                                                                                                                                                                        ], "data":{ "$area": 168 } },
+                                                                                                                                                                                                                                        { "id": "1147", "name": "SVOP->", "depth":58, "children":[ 
+                                                                                                                                                                                                                                            { "id": "1148", "name": "SV(PV)", "depth":59, "children":[ 
+                                                                                                                                                                                                                                            ], "data":{ "$area": 40 } },
+                                                                                                                                                                                                                                        ], "data":{ "$area": 40 } },
+                                                                                                                                                                                                                                        { "id": "1149", "name": "SVOP->", "depth":58, "children":[ 
+                                                                                                                                                                                                                                            { "id": "1150", "name": "SV(PV)", "depth":59, "children":[ 
+                                                                                                                                                                                                                                            ], "data":{ "$area": 56 } },
+                                                                                                                                                                                                                                        ], "data":{ "$area": 56 } },
+                                                                                                                                                                                                                                        { "id": "1151", "name": "SVOP->", "depth":58, "children":[ 
+                                                                                                                                                                                                                                            { "id": "1152", "name": "SV(PVGV)", "depth":59, "children":[ 
+                                                                                                                                                                                                                                                { "id": "1153", "name": "GvNAME_HEK->", "depth":60, "children":[ 
+                                                                                                                                                                                                                                                ], "data":{ "$area": 35 } },
+                                                                                                                                                                                                                                                { "id": "1154", "name": "gp_sv->", "depth":60, "children":[ 
+                                                                                                                                                                                                                                                    { "id": "1155", "name": "SV(PVMG)", "depth":61, "children":[ 
+                                                                                                                                                                                                                                                        { "id": "1156", "name": "UNKNOWN(0,0x0)", "depth":62, "children":[ 
+                                                                                                                                                                                                                                                            { "id": "1157", "name": "MAGIC(0)", "depth":63, "children":[ 
+                                                                                                                                                                                                                                                            ], "data":{ "$area": 41 } },
+                                                                                                                                                                                                                                                        ], "data":{ "$area": 41 } },
+                                                                                                                                                                                                                                                    ], "data":{ "$area": 113 } },
+                                                                                                                                                                                                                                                ], "data":{ "$area": 113 } },
+                                                                                                                                                                                                                                            ], "data":{ "$area": 300 } },
+                                                                                                                                                                                                                                        ], "data":{ "$area": 300 } },
+                                                                                                                                                                                                                                        { "id": "1158", "name": "SVOP->", "depth":58, "children":[ 
+                                                                                                                                                                                                                                            { "id": "1159", "name": "SV(PV)", "depth":59, "children":[ 
+                                                                                                                                                                                                                                            ], "data":{ "$area": 40 } },
+                                                                                                                                                                                                                                        ], "data":{ "$area": 40 } },
+                                                                                                                                                                                                                                        { "id": "1160", "name": "SVOP->", "depth":58, "children":[ 
+                                                                                                                                                                                                                                            { "id": "1161", "name": "SV(PV)", "depth":59, "children":[ 
+                                                                                                                                                                                                                                            ], "data":{ "$area": 47 } },
+                                                                                                                                                                                                                                        ], "data":{ "$area": 47 } },
+                                                                                                                                                                                                                                        { "id": "1162", "name": "SVOP->", "depth":58, "children":[ 
+                                                                                                                                                                                                                                            { "id": "1163", "name": "SV(PV)", "depth":59, "children":[ 
+                                                                                                                                                                                                                                            ], "data":{ "$area": 40 } },
+                                                                                                                                                                                                                                        ], "data":{ "$area": 40 } },
+                                                                                                                                                                                                                                        { "id": "1164", "name": "SVOP->", "depth":58, "children":[ 
+                                                                                                                                                                                                                                            { "id": "1165", "name": "SV(PV)", "depth":59, "children":[ 
+                                                                                                                                                                                                                                            ], "data":{ "$area": 45 } },
+                                                                                                                                                                                                                                        ], "data":{ "$area": 45 } },
+                                                                                                                                                                                                                                        { "id": "1166", "name": "SVOP->", "depth":58, "children":[ 
+                                                                                                                                                                                                                                            { "id": "1167", "name": "SV(PV)", "depth":59, "children":[ 
+                                                                                                                                                                                                                                            ], "data":{ "$area": 49 } },
+                                                                                                                                                                                                                                        ], "data":{ "$area": 49 } },
+                                                                                                                                                                                                                                        { "id": "1168", "name": "SVOP->", "depth":58, "children":[ 
+                                                                                                                                                                                                                                            { "id": "1169", "name": "SV(PV)", "depth":59, "children":[ 
+                                                                                                                                                                                                                                                { "id": "1170", "name": "SvSHARED_HEK_FROM_PV->", "depth":60, "children":[ 
+                                                                                                                                                                                                                                                ], "data":{ "$area": 37 } },
+                                                                                                                                                                                                                                            ], "data":{ "$area": 77 } },
+                                                                                                                                                                                                                                        ], "data":{ "$area": 77 } },
+                                                                                                                                                                                                                                        { "id": "1171", "name": "SVOP->", "depth":58, "children":[ 
+                                                                                                                                                                                                                                            { "id": "1172", "name": "SV(PV)", "depth":59, "children":[ 
+                                                                                                                                                                                                                                            ], "data":{ "$area": 56 } },
+                                                                                                                                                                                                                                        ], "data":{ "$area": 56 } },
+                                                                                                                                                                                                                                        { "id": "1173", "name": "SVOP->", "depth":58, "children":[ 
+                                                                                                                                                                                                                                            { "id": "1174", "name": "SV(PVGV)", "depth":59, "children":[ 
+                                                                                                                                                                                                                                            ], "data":{ "$area": 152 } },
+                                                                                                                                                                                                                                        ], "data":{ "$area": 152 } },
+                                                                                                                                                                                                                                        { "id": "1175", "name": "SVOP->", "depth":58, "children":[ 
+                                                                                                                                                                                                                                            { "id": "1176", "name": "SV(PV)", "depth":59, "children":[ 
+                                                                                                                                                                                                                                            ], "data":{ "$area": 56 } },
+                                                                                                                                                                                                                                        ], "data":{ "$area": 56 } },
+                                                                                                                                                                                                                                        { "id": "1177", "name": "SVOP->", "depth":58, "children":[ 
+                                                                                                                                                                                                                                            { "id": "1178", "name": "SV(PV)", "depth":59, "children":[ 
+                                                                                                                                                                                                                                            ], "data":{ "$area": 56 } },
+                                                                                                                                                                                                                                        ], "data":{ "$area": 56 } },
+                                                                                                                                                                                                                                    ], "data":{ "$area": 46291 } },
+                                                                                                                                                                                                                                ], "data":{ "$area": 46499 } },
+                                                                                                                                                                                                                            ], "data":{ "$area": 46499 } },
+                                                                                                                                                                                                                        ], "data":{ "$area": 46539 } },
+                                                                                                                                                                                                                    ], "data":{ "$area": 46539 } },
+                                                                                                                                                                                                                ], "data":{ "$area": 46691 } },
+                                                                                                                                                                                                            ], "data":{ "$area": 46691 } },
+                                                                                                                                                                                                            { "id": "1179", "name": "SVOP->", "depth":51, "children":[ 
+                                                                                                                                                                                                                { "id": "1180", "name": "SV(PVGV)", "depth":52, "children":[ 
+                                                                                                                                                                                                                    { "id": "1181", "name": "UNKNOWN(0,0x0)", "depth":53, "children":[ 
+                                                                                                                                                                                                                        { "id": "1182", "name": "MAGIC(<)", "depth":54, "children":[ 
+                                                                                                                                                                                                                            { "id": "1183", "name": "mg_obj->", "depth":55, "children":[ 
+                                                                                                                                                                                                                                { "id": "1184", "name": "SV(PVCV)", "depth":56, "children":[ 
+                                                                                                                                                                                                                                    { "id": "1185", "name": "CvPADLIST->", "depth":57, "children":[ 
+                                                                                                                                                                                                                                        { "id": "1186", "name": "SV(PVAV)", "depth":58, "children":[ 
+                                                                                                                                                                                                                                        ], "data":{ "$area": 80 } },
+                                                                                                                                                                                                                                    ], "data":{ "$area": 80 } },
+                                                                                                                                                                                                                                    { "id": "1187", "name": "CvSTART->", "depth":57, "children":[ 
+                                                                                                                                                                                                                                        { "id": "1188", "name": "SVOP->", "depth":58, "children":[ 
+                                                                                                                                                                                                                                            { "id": "1189", "name": "SV(IV)", "depth":59, "children":[ 
+                                                                                                                                                                                                                                            ], "data":{ "$area": 24 } },
+                                                                                                                                                                                                                                        ], "data":{ "$area": 24 } },
+                                                                                                                                                                                                                                        { "id": "1190", "name": "SVOP->", "depth":58, "children":[ 
+                                                                                                                                                                                                                                            { "id": "1191", "name": "SV(PVGV)", "depth":59, "children":[ 
+                                                                                                                                                                                                                                                { "id": "1192", "name": "gp_hv->", "depth":60, "children":[ 
+                                                                                                                                                                                                                                                    { "id": "1193", "name": "SV(PVHV)", "depth":61, "children":[ 
+                                                                                                                                                                                                                                                        { "id": "1194", "name": "HvARRAY->", "depth":62, "children":[ 
+                                                                                                                                                                                                                                                            { "id": "1195", "name": "hent_hek->", "depth":63, "children":[ 
+                                                                                                                                                                                                                                                            ], "data":{ "$area": 49 } },
+                                                                                                                                                                                                                                                        ], "data":{ "$area": 97 } },
+                                                                                                                                                                                                                                                    ], "data":{ "$area": 217 } },
+                                                                                                                                                                                                                                                ], "data":{ "$area": 217 } },
+                                                                                                                                                                                                                                            ], "data":{ "$area": 369 } },
+                                                                                                                                                                                                                                        ], "data":{ "$area": 369 } },
+                                                                                                                                                                                                                                        { "id": "1196", "name": "SVOP->", "depth":58, "children":[ 
+                                                                                                                                                                                                                                            { "id": "1197", "name": "SV(IV)", "depth":59, "children":[ 
+                                                                                                                                                                                                                                            ], "data":{ "$area": 24 } },
+                                                                                                                                                                                                                                        ], "data":{ "$area": 24 } },
+                                                                                                                                                                                                                                        { "id": "1198", "name": "SVOP->", "depth":58, "children":[ 
+                                                                                                                                                                                                                                            { "id": "1199", "name": "SV(PVGV)", "depth":59, "children":[ 
+                                                                                                                                                                                                                                                { "id": "1200", "name": "gp_hv->", "depth":60, "children":[ 
+                                                                                                                                                                                                                                                    { "id": "1201", "name": "SV(PVHV)", "depth":61, "children":[ 
+                                                                                                                                                                                                                                                        { "id": "1202", "name": "HvARRAY->", "depth":62, "children":[ 
+                                                                                                                                                                                                                                                            { "id": "1203", "name": "hent_hek->", "depth":63, "children":[ 
+                                                                                                                                                                                                                                                            ], "data":{ "$area": 42 } },
+                                                                                                                                                                                                                                                        ], "data":{ "$area": 90 } },
+                                                                                                                                                                                                                                                    ], "data":{ "$area": 210 } },
+                                                                                                                                                                                                                                                ], "data":{ "$area": 210 } },
+                                                                                                                                                                                                                                            ], "data":{ "$area": 362 } },
+                                                                                                                                                                                                                                        ], "data":{ "$area": 362 } },
+                                                                                                                                                                                                                                        { "id": "1204", "name": "SVOP->", "depth":58, "children":[ 
+                                                                                                                                                                                                                                            { "id": "1205", "name": "SV(IV)", "depth":59, "children":[ 
+                                                                                                                                                                                                                                            ], "data":{ "$area": 24 } },
+                                                                                                                                                                                                                                        ], "data":{ "$area": 24 } },
+                                                                                                                                                                                                                                        { "id": "1206", "name": "SVOP->", "depth":58, "children":[ 
+                                                                                                                                                                                                                                            { "id": "1207", "name": "SV(PVGV)", "depth":59, "children":[ 
+                                                                                                                                                                                                                                                { "id": "1208", "name": "GvFILE_HEK->", "depth":60, "children":[ 
+                                                                                                                                                                                                                                                ], "data":{ "$area": 108 } },
+                                                                                                                                                                                                                                                { "id": "1209", "name": "gp_sv->", "depth":60, "children":[ 
+                                                                                                                                                                                                                                                    { "id": "1210", "name": "SV(IV)", "depth":61, "children":[ 
+                                                                                                                                                                                                                                                    ], "data":{ "$area": 24 } },
+                                                                                                                                                                                                                                                ], "data":{ "$area": 24 } },
+                                                                                                                                                                                                                                            ], "data":{ "$area": 284 } },
+                                                                                                                                                                                                                                        ], "data":{ "$area": 284 } },
+                                                                                                                                                                                                                                    ], "data":{ "$area": 6199 } },
+                                                                                                                                                                                                                                ], "data":{ "$area": 6407 } },
+                                                                                                                                                                                                                            ], "data":{ "$area": 6407 } },
+                                                                                                                                                                                                                        ], "data":{ "$area": 6447 } },
+                                                                                                                                                                                                                    ], "data":{ "$area": 6447 } },
+                                                                                                                                                                                                                ], "data":{ "$area": 6599 } },
+                                                                                                                                                                                                            ], "data":{ "$area": 6599 } },
+                                                                                                                                                                                                        ], "data":{ "$area": 54810 } },
+                                                                                                                                                                                                    ], "data":{ "$area": 55018 } },
+                                                                                                                                                                                                ], "data":{ "$area": 55018 } },
+                                                                                                                                                                                            ], "data":{ "$area": 55058 } },
+                                                                                                                                                                                        ], "data":{ "$area": 55058 } },
+                                                                                                                                                                                    ], "data":{ "$area": 55210 } },
+                                                                                                                                                                                ], "data":{ "$area": 55210 } },
+                                                                                                                                                                                { "id": "1211", "name": "SVOP->", "depth":44, "children":[ 
+                                                                                                                                                                                    { "id": "1212", "name": "SV(PVGV)", "depth":45, "children":[ 
+                                                                                                                                                                                        { "id": "1213", "name": "UNKNOWN(0,0x0)", "depth":46, "children":[ 
+                                                                                                                                                                                            { "id": "1214", "name": "MAGIC(<)", "depth":47, "children":[ 
+                                                                                                                                                                                                { "id": "1215", "name": "mg_obj->", "depth":48, "children":[ 
+                                                                                                                                                                                                    { "id": "1216", "name": "SV(PVCV)", "depth":49, "children":[ 
+                                                                                                                                                                                                        { "id": "1217", "name": "CvPADLIST->", "depth":50, "children":[ 
+                                                                                                                                                                                                            { "id": "1218", "name": "SV(PVAV)", "depth":51, "children":[ 
+                                                                                                                                                                                                            ], "data":{ "$area": 80 } },
+                                                                                                                                                                                                        ], "data":{ "$area": 80 } },
+                                                                                                                                                                                                        { "id": "1219", "name": "CvSTART->", "depth":50, "children":[ 
+                                                                                                                                                                                                            { "id": "1220", "name": "SVOP->", "depth":51, "children":[ 
+                                                                                                                                                                                                                { "id": "1221", "name": "SV(PV)", "depth":52, "children":[ 
+                                                                                                                                                                                                                ], "data":{ "$area": 43 } },
+                                                                                                                                                                                                            ], "data":{ "$area": 43 } },
+                                                                                                                                                                                                            { "id": "1222", "name": "SVOP->", "depth":51, "children":[ 
+                                                                                                                                                                                                                { "id": "1223", "name": "SV(PV)", "depth":52, "children":[ 
+                                                                                                                                                                                                                ], "data":{ "$area": 40 } },
+                                                                                                                                                                                                            ], "data":{ "$area": 40 } },
+                                                                                                                                                                                                            { "id": "1224", "name": "SVOP->", "depth":51, "children":[ 
+                                                                                                                                                                                                                { "id": "1225", "name": "SV(PV)", "depth":52, "children":[ 
+                                                                                                                                                                                                                ], "data":{ "$area": 47 } },
+                                                                                                                                                                                                            ], "data":{ "$area": 47 } },
+                                                                                                                                                                                                            { "id": "1226", "name": "SVOP->", "depth":51, "children":[ 
+                                                                                                                                                                                                                { "id": "1227", "name": "SV(PV)", "depth":52, "children":[ 
+                                                                                                                                                                                                                ], "data":{ "$area": 40 } },
+                                                                                                                                                                                                            ], "data":{ "$area": 40 } },
+                                                                                                                                                                                                            { "id": "1228", "name": "SVOP->", "depth":51, "children":[ 
+                                                                                                                                                                                                                { "id": "1229", "name": "SV(PV)", "depth":52, "children":[ 
+                                                                                                                                                                                                                ], "data":{ "$area": 45 } },
+                                                                                                                                                                                                            ], "data":{ "$area": 45 } },
+                                                                                                                                                                                                            { "id": "1230", "name": "SVOP->", "depth":51, "children":[ 
+                                                                                                                                                                                                                { "id": "1231", "name": "SV(PV)", "depth":52, "children":[ 
+                                                                                                                                                                                                                ], "data":{ "$area": 49 } },
+                                                                                                                                                                                                            ], "data":{ "$area": 49 } },
+                                                                                                                                                                                                            { "id": "1232", "name": "SVOP->", "depth":51, "children":[ 
+                                                                                                                                                                                                                { "id": "1233", "name": "SV(PV)", "depth":52, "children":[ 
+                                                                                                                                                                                                                ], "data":{ "$area": 40 } },
+                                                                                                                                                                                                            ], "data":{ "$area": 40 } },
+                                                                                                                                                                                                            { "id": "1234", "name": "SVOP->", "depth":51, "children":[ 
+                                                                                                                                                                                                                { "id": "1235", "name": "SV(PV)", "depth":52, "children":[ 
+                                                                                                                                                                                                                ], "data":{ "$area": 56 } },
+                                                                                                                                                                                                            ], "data":{ "$area": 56 } },
+                                                                                                                                                                                                            { "id": "1236", "name": "SVOP->", "depth":51, "children":[ 
+                                                                                                                                                                                                                { "id": "1237", "name": "SV(PV)", "depth":52, "children":[ 
+                                                                                                                                                                                                                ], "data":{ "$area": 56 } },
+                                                                                                                                                                                                            ], "data":{ "$area": 56 } },
+                                                                                                                                                                                                            { "id": "1238", "name": "SVOP->", "depth":51, "children":[ 
+                                                                                                                                                                                                                { "id": "1239", "name": "SV(PV)", "depth":52, "children":[ 
+                                                                                                                                                                                                                ], "data":{ "$area": 56 } },
+                                                                                                                                                                                                            ], "data":{ "$area": 56 } },
+                                                                                                                                                                                                        ], "data":{ "$area": 4696 } },
+                                                                                                                                                                                                    ], "data":{ "$area": 4904 } },
+                                                                                                                                                                                                ], "data":{ "$area": 4904 } },
+                                                                                                                                                                                            ], "data":{ "$area": 4944 } },
+                                                                                                                                                                                        ], "data":{ "$area": 4944 } },
+                                                                                                                                                                                    ], "data":{ "$area": 5096 } },
+                                                                                                                                                                                ], "data":{ "$area": 5096 } },
+                                                                                                                                                                                { "id": "1240", "name": "SVOP->", "depth":44, "children":[ 
+                                                                                                                                                                                    { "id": "1241", "name": "SV(PVGV)", "depth":45, "children":[ 
+                                                                                                                                                                                        { "id": "1242", "name": "UNKNOWN(0,0x0)", "depth":46, "children":[ 
+                                                                                                                                                                                            { "id": "1243", "name": "MAGIC(<)", "depth":47, "children":[ 
+                                                                                                                                                                                                { "id": "1244", "name": "mg_obj->", "depth":48, "children":[ 
+                                                                                                                                                                                                    { "id": "1245", "name": "SV(PVCV)", "depth":49, "children":[ 
+                                                                                                                                                                                                        { "id": "1246", "name": "CvPADLIST->", "depth":50, "children":[ 
+                                                                                                                                                                                                            { "id": "1247", "name": "SV(PVAV)", "depth":51, "children":[ 
+                                                                                                                                                                                                            ], "data":{ "$area": 80 } },
+                                                                                                                                                                                                        ], "data":{ "$area": 80 } },
+                                                                                                                                                                                                        { "id": "1248", "name": "CvSTART->", "depth":50, "children":[ 
+                                                                                                                                                                                                            { "id": "1249", "name": "SVOP->", "depth":51, "children":[ 
+                                                                                                                                                                                                                { "id": "1250", "name": "SV(IV)", "depth":52, "children":[ 
+                                                                                                                                                                                                                ], "data":{ "$area": 24 } },
+                                                                                                                                                                                                            ], "data":{ "$area": 24 } },
+                                                                                                                                                                                                            { "id": "1251", "name": "SVOP->", "depth":51, "children":[ 
+                                                                                                                                                                                                                { "id": "1252", "name": "SV(IV)", "depth":52, "children":[ 
+                                                                                                                                                                                                                ], "data":{ "$area": 24 } },
+                                                                                                                                                                                                            ], "data":{ "$area": 24 } },
+                                                                                                                                                                                                            { "id": "1253", "name": "SVOP->", "depth":51, "children":[ 
+                                                                                                                                                                                                                { "id": "1254", "name": "SV(PVGV)", "depth":52, "children":[ 
+                                                                                                                                                                                                                    { "id": "1255", "name": "UNKNOWN(0,0x0)", "depth":53, "children":[ 
+                                                                                                                                                                                                                        { "id": "1256", "name": "MAGIC(<)", "depth":54, "children":[ 
+                                                                                                                                                                                                                            { "id": "1257", "name": "mg_obj->", "depth":55, "children":[ 
+                                                                                                                                                                                                                                { "id": "1258", "name": "SV(PVCV)", "depth":56, "children":[ 
+                                                                                                                                                                                                                                    { "id": "1259", "name": "CvPADLIST->", "depth":57, "children":[ 
+                                                                                                                                                                                                                                        { "id": "1260", "name": "SV(PVAV)", "depth":58, "children":[ 
+                                                                                                                                                                                                                                        ], "data":{ "$area": 80 } },
+                                                                                                                                                                                                                                    ], "data":{ "$area": 80 } },
+                                                                                                                                                                                                                                    { "id": "1261", "name": "CvSTART->", "depth":57, "children":[ 
+                                                                                                                                                                                                                                        { "id": "1262", "name": "SVOP->", "depth":58, "children":[ 
+                                                                                                                                                                                                                                            { "id": "1263", "name": "SV(PVGV)", "depth":59, "children":[ 
+                                                                                                                                                                                                                                                { "id": "1264", "name": "UNKNOWN(0,0x0)", "depth":60, "children":[ 
+                                                                                                                                                                                                                                                    { "id": "1265", "name": "MAGIC(<)", "depth":61, "children":[ 
+                                                                                                                                                                                                                                                        { "id": "1266", "name": "mg_obj->", "depth":62, "children":[ 
+                                                                                                                                                                                                                                                            { "id": "1267", "name": "SV(PVCV)", "depth":63, "children":[ 
+                                                                                                                                                                                                                                                                { "id": "1268", "name": "CvPADLIST->", "depth":64, "children":[ 
+                                                                                                                                                                                                                                                                    { "id": "1269", "name": "SV(PVAV)", "depth":65, "children":[ 
+                                                                                                                                                                                                                                                                    ], "data":{ "$area": 80 } },
+                                                                                                                                                                                                                                                                ], "data":{ "$area": 80 } },
+                                                                                                                                                                                                                                                                { "id": "1270", "name": "CvSTART->", "depth":64, "children":[ 
+                                                                                                                                                                                                                                                                    { "id": "1271", "name": "SVOP->", "depth":65, "children":[ 
+                                                                                                                                                                                                                                                                        { "id": "1272", "name": "SV(PVGV)", "depth":66, "children":[ 
+                                                                                                                                                                                                                                                                            { "id": "1273", "name": "UNKNOWN(0,0x0)", "depth":67, "children":[ 
+                                                                                                                                                                                                                                                                                { "id": "1274", "name": "MAGIC(<)", "depth":68, "children":[ 
+                                                                                                                                                                                                                                                                                    { "id": "1275", "name": "mg_obj->", "depth":69, "children":[ 
+                                                                                                                                                                                                                                                                                        { "id": "1276", "name": "SV(PVCV)", "depth":70, "children":[ 
+                                                                                                                                                                                                                                                                                            { "id": "1277", "name": "CvPADLIST->", "depth":71, "children":[ 
+                                                                                                                                                                                                                                                                                                { "id": "1278", "name": "SV(PVAV)", "depth":72, "children":[ 
+                                                                                                                                                                                                                                                                                                ], "data":{ "$area": 80 } },
+                                                                                                                                                                                                                                                                                            ], "data":{ "$area": 80 } },
+                                                                                                                                                                                                                                                                                            { "id": "1279", "name": "CvSTART->", "depth":71, "children":[ 
+                                                                                                                                                                                                                                                                                                { "id": "1280", "name": "SVOP->", "depth":72, "children":[ 
+                                                                                                                                                                                                                                                                                                    { "id": "1281", "name": "SV(PV)", "depth":73, "children":[ 
+                                                                                                                                                                                                                                                                                                    ], "data":{ "$area": 46 } },
+                                                                                                                                                                                                                                                                                                ], "data":{ "$area": 46 } },
+                                                                                                                                                                                                                                                                                                { "id": "1282", "name": "SVOP->", "depth":72, "children":[ 
+                                                                                                                                                                                                                                                                                                    { "id": "1283", "name": "SV(PV)", "depth":73, "children":[ 
+                                                                                                                                                                                                                                                                                                    ], "data":{ "$area": 51 } },
+                                                                                                                                                                                                                                                                                                ], "data":{ "$area": 51 } },
+                                                                                                                                                                                                                                                                                                { "id": "1284", "name": "SVOP->", "depth":72, "children":[ 
+                                                                                                                                                                                                                                                                                                    { "id": "1285", "name": "SV(PV)", "depth":73, "children":[ 
+                                                                                                                                                                                                                                                                                                    ], "data":{ "$area": 51 } },
+                                                                                                                                                                                                                                                                                                ], "data":{ "$area": 51 } },
+                                                                                                                                                                                                                                                                                            ], "data":{ "$area": 1876 } },
+                                                                                                                                                                                                                                                                                        ], "data":{ "$area": 2084 } },
+                                                                                                                                                                                                                                                                                    ], "data":{ "$area": 2084 } },
+                                                                                                                                                                                                                                                                                ], "data":{ "$area": 2124 } },
+                                                                                                                                                                                                                                                                            ], "data":{ "$area": 2124 } },
+                                                                                                                                                                                                                                                                        ], "data":{ "$area": 2276 } },
+                                                                                                                                                                                                                                                                    ], "data":{ "$area": 2276 } },
+                                                                                                                                                                                                                                                                ], "data":{ "$area": 4276 } },
+                                                                                                                                                                                                                                                            ], "data":{ "$area": 4484 } },
+                                                                                                                                                                                                                                                        ], "data":{ "$area": 4484 } },
+                                                                                                                                                                                                                                                    ], "data":{ "$area": 4524 } },
+                                                                                                                                                                                                                                                ], "data":{ "$area": 4524 } },
+                                                                                                                                                                                                                                            ], "data":{ "$area": 4676 } },
+                                                                                                                                                                                                                                        ], "data":{ "$area": 4676 } },
+                                                                                                                                                                                                                                    ], "data":{ "$area": 10364 } },
+                                                                                                                                                                                                                                ], "data":{ "$area": 10572 } },
+                                                                                                                                                                                                                            ], "data":{ "$area": 10572 } },
+                                                                                                                                                                                                                        ], "data":{ "$area": 10612 } },
+                                                                                                                                                                                                                    ], "data":{ "$area": 10612 } },
+                                                                                                                                                                                                                ], "data":{ "$area": 10764 } },
+                                                                                                                                                                                                            ], "data":{ "$area": 10764 } },
+                                                                                                                                                                                                            { "id": "1286", "name": "SVOP->", "depth":51, "children":[ 
+                                                                                                                                                                                                                { "id": "1287", "name": "SV(IV)", "depth":52, "children":[ 
+                                                                                                                                                                                                                ], "data":{ "$area": 24 } },
+                                                                                                                                                                                                            ], "data":{ "$area": 24 } },
+                                                                                                                                                                                                            { "id": "1288", "name": "SVOP->", "depth":51, "children":[ 
+                                                                                                                                                                                                                { "id": "1289", "name": "SV(IV)", "depth":52, "children":[ 
+                                                                                                                                                                                                                ], "data":{ "$area": 24 } },
+                                                                                                                                                                                                            ], "data":{ "$area": 24 } },
+                                                                                                                                                                                                        ], "data":{ "$area": 16948 } },
+                                                                                                                                                                                                    ], "data":{ "$area": 17156 } },
+                                                                                                                                                                                                ], "data":{ "$area": 17156 } },
+                                                                                                                                                                                            ], "data":{ "$area": 17196 } },
+                                                                                                                                                                                        ], "data":{ "$area": 17196 } },
+                                                                                                                                                                                    ], "data":{ "$area": 17348 } },
+                                                                                                                                                                                ], "data":{ "$area": 17348 } },
+                                                                                                                                                                                { "id": "1290", "name": "SVOP->", "depth":44, "children":[ 
+                                                                                                                                                                                    { "id": "1291", "name": "SV(PVGV)", "depth":45, "children":[ 
+                                                                                                                                                                                        { "id": "1292", "name": "gp_sv->", "depth":46, "children":[ 
+                                                                                                                                                                                            { "id": "1293", "name": "SV(IV)", "depth":47, "children":[ 
+                                                                                                                                                                                            ], "data":{ "$area": 24 } },
+                                                                                                                                                                                        ], "data":{ "$area": 24 } },
+                                                                                                                                                                                    ], "data":{ "$area": 176 } },
+                                                                                                                                                                                ], "data":{ "$area": 176 } },
+                                                                                                                                                                            ], "data":{ "$area": 80462 } },
+                                                                                                                                                                        ], "data":{ "$area": 80670 } },
+                                                                                                                                                                    ], "data":{ "$area": 80670 } },
+                                                                                                                                                                ], "data":{ "$area": 80710 } },
+                                                                                                                                                            ], "data":{ "$area": 80710 } },
+                                                                                                                                                        ], "data":{ "$area": 80862 } },
+                                                                                                                                                    ], "data":{ "$area": 80862 } },
+                                                                                                                                                    { "id": "1294", "name": "SVOP->", "depth":37, "children":[ 
+                                                                                                                                                        { "id": "1295", "name": "SV(PVGV)", "depth":38, "children":[ 
+                                                                                                                                                            { "id": "1296", "name": "gp_av->", "depth":39, "children":[ 
+                                                                                                                                                                { "id": "1297", "name": "SV(PVAV)", "depth":40, "children":[ 
+                                                                                                                                                                ], "data":{ "$area": 64 } },
+                                                                                                                                                            ], "data":{ "$area": 64 } },
+                                                                                                                                                        ], "data":{ "$area": 216 } },
+                                                                                                                                                    ], "data":{ "$area": 216 } },
+                                                                                                                                                ], "data":{ "$area": 82622 } },
+                                                                                                                                            ], "data":{ "$area": 82830 } },
+                                                                                                                                        ], "data":{ "$area": 82830 } },
+                                                                                                                                    ], "data":{ "$area": 82870 } },
+                                                                                                                                ], "data":{ "$area": 82870 } },
+                                                                                                                            ], "data":{ "$area": 83022 } },
+                                                                                                                        ], "data":{ "$area": 83022 } },
+                                                                                                                    ], "data":{ "$area": 83582 } },
+                                                                                                                ], "data":{ "$area": 87716 } },
+                                                                                                            ], "data":{ "$area": 87716 } },
+                                                                                                        ], "data":{ "$area": 87756 } },
+                                                                                                    ], "data":{ "$area": 87756 } },
+                                                                                                    { "id": "1298", "name": "GvFILE_HEK->", "depth":25, "children":[ 
+                                                                                                    ], "data":{ "$area": 100 } },
+                                                                                                ], "data":{ "$area": 88008 } },
+                                                                                            ], "data":{ "$area": 88008 } },
+                                                                                            { "id": "1299", "name": "SVOP->", "depth":23, "children":[ 
+                                                                                                { "id": "1300", "name": "SV(PV)", "depth":24, "children":[ 
+                                                                                                ], "data":{ "$area": 56 } },
+                                                                                            ], "data":{ "$area": 56 } },
+                                                                                        ], "data":{ "$area": 88704 } },
+                                                                                    ], "data":{ "$area": 88912 } },
+                                                                                ], "data":{ "$area": 88912 } },
+                                                                            ], "data":{ "$area": 88952 } },
+                                                                        ], "data":{ "$area": 88952 } },
+                                                                    ], "data":{ "$area": 89104 } },
+                                                                ], "data":{ "$area": 89104 } },
+                                                                { "id": "1301", "name": "SVOP->", "depth":16, "children":[ 
+                                                                    { "id": "1302", "name": "SV(PV)", "depth":17, "children":[ 
+                                                                    ], "data":{ "$area": 42 } },
+                                                                ], "data":{ "$area": 42 } },
+                                                                { "id": "1303", "name": "SVOP->", "depth":16, "children":[ 
+                                                                    { "id": "1304", "name": "SV(PV)", "depth":17, "children":[ 
+                                                                    ], "data":{ "$area": 53 } },
+                                                                ], "data":{ "$area": 53 } },
+                                                                { "id": "1305", "name": "SVOP->", "depth":16, "children":[ 
+                                                                    { "id": "1306", "name": "SV(PV)", "depth":17, "children":[ 
+                                                                    ], "data":{ "$area": 53 } },
+                                                                ], "data":{ "$area": 53 } },
+                                                                { "id": "1307", "name": "SVOP->", "depth":16, "children":[ 
+                                                                    { "id": "1308", "name": "SV(PVGV)", "depth":17, "children":[ 
+                                                                        { "id": "1309", "name": "UNKNOWN(0,0x0)", "depth":18, "children":[ 
+                                                                            { "id": "1310", "name": "MAGIC(<)", "depth":19, "children":[ 
+                                                                                { "id": "1311", "name": "mg_obj->", "depth":20, "children":[ 
+                                                                                    { "id": "1312", "name": "SV(PVCV)", "depth":21, "children":[ 
+                                                                                        { "id": "1313", "name": "CvPADLIST->", "depth":22, "children":[ 
+                                                                                            { "id": "1314", "name": "SV(PVAV)", "depth":23, "children":[ 
+                                                                                            ], "data":{ "$area": 80 } },
+                                                                                        ], "data":{ "$area": 80 } },
+                                                                                        { "id": "1315", "name": "CvSTART->", "depth":22, "children":[ 
+                                                                                        ], "data":{ "$area": 560 } },
+                                                                                    ], "data":{ "$area": 768 } },
+                                                                                ], "data":{ "$area": 768 } },
+                                                                            ], "data":{ "$area": 808 } },
+                                                                        ], "data":{ "$area": 808 } },
+                                                                    ], "data":{ "$area": 960 } },
+                                                                ], "data":{ "$area": 960 } },
+                                                                { "id": "1316", "name": "SVOP->", "depth":16, "children":[ 
+                                                                    { "id": "1317", "name": "SV(PV)", "depth":17, "children":[ 
+                                                                    ], "data":{ "$area": 42 } },
+                                                                ], "data":{ "$area": 42 } },
+                                                                { "id": "1318", "name": "SVOP->", "depth":16, "children":[ 
+                                                                    { "id": "1319", "name": "SV(PV)", "depth":17, "children":[ 
+                                                                    ], "data":{ "$area": 43 } },
+                                                                ], "data":{ "$area": 43 } },
+                                                                { "id": "1320", "name": "SVOP->", "depth":16, "children":[ 
+                                                                    { "id": "1321", "name": "SV(PV)", "depth":17, "children":[ 
+                                                                    ], "data":{ "$area": 81 } },
+                                                                ], "data":{ "$area": 81 } },
+                                                                { "id": "1322", "name": "SVOP->", "depth":16, "children":[ 
+                                                                    { "id": "1323", "name": "SV(PV)", "depth":17, "children":[ 
+                                                                    ], "data":{ "$area": 56 } },
+                                                                ], "data":{ "$area": 56 } },
+                                                                { "id": "1324", "name": "SVOP->", "depth":16, "children":[ 
+                                                                    { "id": "1325", "name": "SV(PVGV)", "depth":17, "children":[ 
+                                                                        { "id": "1326", "name": "UNKNOWN(0,0x0)", "depth":18, "children":[ 
+                                                                            { "id": "1327", "name": "MAGIC(<)", "depth":19, "children":[ 
+                                                                                { "id": "1328", "name": "mg_obj->", "depth":20, "children":[ 
+                                                                                    { "id": "1329", "name": "SV(PVCV)", "depth":21, "children":[ 
+                                                                                    ], "data":{ "$area": 128 } },
+                                                                                ], "data":{ "$area": 128 } },
+                                                                            ], "data":{ "$area": 168 } },
+                                                                        ], "data":{ "$area": 168 } },
+                                                                        { "id": "1330", "name": "GvNAME_HEK->", "depth":18, "children":[ 
+                                                                        ], "data":{ "$area": 50 } },
+                                                                    ], "data":{ "$area": 370 } },
+                                                                ], "data":{ "$area": 370 } },
+                                                                { "id": "1331", "name": "SVOP->", "depth":16, "children":[ 
+                                                                    { "id": "1332", "name": "SV(PV)", "depth":17, "children":[ 
+                                                                    ], "data":{ "$area": 43 } },
+                                                                ], "data":{ "$area": 43 } },
+                                                                { "id": "1333", "name": "SVOP->", "depth":16, "children":[ 
+                                                                    { "id": "1334", "name": "SV(PV)", "depth":17, "children":[ 
+                                                                    ], "data":{ "$area": 54 } },
+                                                                ], "data":{ "$area": 54 } },
+                                                                { "id": "1335", "name": "SVOP->", "depth":16, "children":[ 
+                                                                    { "id": "1336", "name": "SV(PV)", "depth":17, "children":[ 
+                                                                    ], "data":{ "$area": 53 } },
+                                                                ], "data":{ "$area": 53 } },
+                                                                { "id": "1337", "name": "SVOP->", "depth":16, "children":[ 
+                                                                    { "id": "1338", "name": "SV(PVGV)", "depth":17, "children":[ 
+                                                                        { "id": "1339", "name": "UNKNOWN(0,0x0)", "depth":18, "children":[ 
+                                                                            { "id": "1340", "name": "MAGIC(<)", "depth":19, "children":[ 
+                                                                                { "id": "1341", "name": "mg_obj->", "depth":20, "children":[ 
+                                                                                    { "id": "1342", "name": "SV(PVCV)", "depth":21, "children":[ 
+                                                                                    ], "data":{ "$area": 128 } },
+                                                                                ], "data":{ "$area": 128 } },
+                                                                            ], "data":{ "$area": 168 } },
+                                                                        ], "data":{ "$area": 168 } },
+                                                                        { "id": "1343", "name": "GvNAME_HEK->", "depth":18, "children":[ 
+                                                                        ], "data":{ "$area": 46 } },
+                                                                    ], "data":{ "$area": 366 } },
+                                                                ], "data":{ "$area": 366 } },
+                                                                { "id": "1344", "name": "SVOP->", "depth":16, "children":[ 
+                                                                    { "id": "1345", "name": "SV(PV)", "depth":17, "children":[ 
+                                                                        { "id": "1346", "name": "SvSHARED_HEK_FROM_PV->", "depth":18, "children":[ 
+                                                                        ], "data":{ "$area": 47 } },
+                                                                    ], "data":{ "$area": 87 } },
+                                                                ], "data":{ "$area": 87 } },
+                                                                { "id": "1347", "name": "op_pv", "depth":16, "children":[ 
+                                                                ], "data":{ "$area": 5 } },
+                                                                { "id": "1348", "name": "SVOP->", "depth":16, "children":[ 
+                                                                    { "id": "1349", "name": "SV(IV)", "depth":17, "children":[ 
+                                                                    ], "data":{ "$area": 24 } },
+                                                                ], "data":{ "$area": 24 } },
+                                                                { "id": "1350", "name": "SVOP->", "depth":16, "children":[ 
+                                                                    { "id": "1351", "name": "SV(PV)", "depth":17, "children":[ 
+                                                                    ], "data":{ "$area": 42 } },
+                                                                ], "data":{ "$area": 42 } },
+                                                                { "id": "1352", "name": "SVOP->", "depth":16, "children":[ 
+                                                                    { "id": "1353", "name": "SV(PV)", "depth":17, "children":[ 
+                                                                    ], "data":{ "$area": 43 } },
+                                                                ], "data":{ "$area": 43 } },
+                                                                { "id": "1354", "name": "SVOP->", "depth":16, "children":[ 
+                                                                    { "id": "1355", "name": "SV(PV)", "depth":17, "children":[ 
+                                                                    ], "data":{ "$area": 43 } },
+                                                                ], "data":{ "$area": 43 } },
+                                                                { "id": "1356", "name": "SVOP->", "depth":16, "children":[ 
+                                                                    { "id": "1357", "name": "SV(PVGV)", "depth":17, "children":[ 
+                                                                        { "id": "1358", "name": "gp_sv->", "depth":18, "children":[ 
+                                                                            { "id": "1359", "name": "SV(PVNV)", "depth":19, "children":[ 
+                                                                            ], "data":{ "$area": 72 } },
+                                                                        ], "data":{ "$area": 72 } },
+                                                                    ], "data":{ "$area": 224 } },
+                                                                ], "data":{ "$area": 224 } },
+                                                                { "id": "1360", "name": "SVOP->", "depth":16, "children":[ 
+                                                                    { "id": "1361", "name": "SV(PV)", "depth":17, "children":[ 
+                                                                    ], "data":{ "$area": 43 } },
+                                                                ], "data":{ "$area": 43 } },
+                                                                { "id": "1362", "name": "SVOP->", "depth":16, "children":[ 
+                                                                    { "id": "1363", "name": "SV(PVGV)", "depth":17, "children":[ 
+                                                                        { "id": "1364", "name": "GvNAME_HEK->", "depth":18, "children":[ 
+                                                                        ], "data":{ "$area": 35 } },
+                                                                        { "id": "1365", "name": "gp_sv->", "depth":18, "children":[ 
+                                                                            { "id": "1366", "name": "SV(PVMG)", "depth":19, "children":[ 
+                                                                                { "id": "1367", "name": "UNKNOWN(0,0x0)", "depth":20, "children":[ 
+                                                                                    { "id": "1368", "name": "MAGIC(0)", "depth":21, "children":[ 
+                                                                                    ], "data":{ "$area": 41 } },
+                                                                                ], "data":{ "$area": 41 } },
+                                                                            ], "data":{ "$area": 129 } },
+                                                                        ], "data":{ "$area": 129 } },
+                                                                    ], "data":{ "$area": 316 } },
+                                                                ], "data":{ "$area": 316 } },
+                                                                { "id": "1369", "name": "SVOP->", "depth":16, "children":[ 
+                                                                    { "id": "1370", "name": "SV(PV)", "depth":17, "children":[ 
+                                                                    ], "data":{ "$area": 43 } },
+                                                                ], "data":{ "$area": 43 } },
+                                                                { "id": "1371", "name": "SVOP->", "depth":16, "children":[ 
+                                                                    { "id": "1372", "name": "SV(PV)", "depth":17, "children":[ 
+                                                                    ], "data":{ "$area": 45 } },
+                                                                ], "data":{ "$area": 45 } },
+                                                                { "id": "1373", "name": "PM_GETRE->", "depth":16, "children":[ 
+                                                                    { "id": "1374", "name": "regex_size", "depth":17, "children":[ 
+                                                                    ], "data":{ "$area": 176 } },
+                                                                ], "data":{ "$area": 176 } },
+                                                                { "id": "1375", "name": "SVOP->", "depth":16, "children":[ 
+                                                                    { "id": "1376", "name": "SV(PV)", "depth":17, "children":[ 
+                                                                    ], "data":{ "$area": 44 } },
+                                                                ], "data":{ "$area": 44 } },
+                                                                { "id": "1377", "name": "PM_GETRE->", "depth":16, "children":[ 
+                                                                    { "id": "1378", "name": "regex_size", "depth":17, "children":[ 
+                                                                    ], "data":{ "$area": 160 } },
+                                                                ], "data":{ "$area": 160 } },
+                                                                { "id": "1379", "name": "SVOP->", "depth":16, "children":[ 
+                                                                    { "id": "1380", "name": "SV(PV)", "depth":17, "children":[ 
+                                                                    ], "data":{ "$area": 42 } },
+                                                                ], "data":{ "$area": 42 } },
+                                                                { "id": "1381", "name": "SVOP->", "depth":16, "children":[ 
+                                                                    { "id": "1382", "name": "SV(PV)", "depth":17, "children":[ 
+                                                                    ], "data":{ "$area": 46 } },
+                                                                ], "data":{ "$area": 46 } },
+                                                                { "id": "1383", "name": "SVOP->", "depth":16, "children":[ 
+                                                                    { "id": "1384", "name": "SV(PV)", "depth":17, "children":[ 
+                                                                    ], "data":{ "$area": 42 } },
+                                                                ], "data":{ "$area": 42 } },
+                                                                { "id": "1385", "name": "SVOP->", "depth":16, "children":[ 
+                                                                    { "id": "1386", "name": "SV(PVGV)", "depth":17, "children":[ 
+                                                                        { "id": "1387", "name": "GvNAME_HEK->", "depth":18, "children":[ 
+                                                                        ], "data":{ "$area": 37 } },
+                                                                        { "id": "1388", "name": "gp_av->", "depth":18, "children":[ 
+                                                                            { "id": "1389", "name": "SV(PVAV)", "depth":19, "children":[ 
+                                                                            ], "data":{ "$area": 176 } },
+                                                                        ], "data":{ "$area": 176 } },
+                                                                        { "id": "1390", "name": "gp_hv->", "depth":18, "children":[ 
+                                                                            { "id": "1391", "name": "SV(PVHV)", "depth":19, "children":[ 
+                                                                                { "id": "1392", "name": "HvARRAY->", "depth":20, "children":[ 
+                                                                                    { "id": "1393", "name": "hent_hek->", "depth":21, "children":[ 
+                                                                                    ], "data":{ "$area": 41 } },
+                                                                                    { "id": "1394", "name": "hent_hek->", "depth":21, "children":[ 
+                                                                                    ], "data":{ "$area": 45 } },
+                                                                                    { "id": "1395", "name": "hent_hek->", "depth":21, "children":[ 
+                                                                                    ], "data":{ "$area": 54 } },
+                                                                                    { "id": "1396", "name": "hent_hek->", "depth":21, "children":[ 
+                                                                                    ], "data":{ "$area": 41 } },
+                                                                                    { "id": "1397", "name": "hent_hek->", "depth":21, "children":[ 
+                                                                                    ], "data":{ "$area": 51 } },
+                                                                                    { "id": "1398", "name": "hent_hek->", "depth":21, "children":[ 
+                                                                                    ], "data":{ "$area": 51 } },
+                                                                                    { "id": "1399", "name": "hent_hek->", "depth":21, "children":[ 
+                                                                                    ], "data":{ "$area": 41 } },
+                                                                                    { "id": "1400", "name": "hent_hek->", "depth":21, "children":[ 
+                                                                                    ], "data":{ "$area": 45 } },
+                                                                                    { "id": "1401", "name": "hent_hek->", "depth":21, "children":[ 
+                                                                                    ], "data":{ "$area": 43 } },
+                                                                                    { "id": "1402", "name": "hent_hek->", "depth":21, "children":[ 
+                                                                                    ], "data":{ "$area": 40 } },
+                                                                                    { "id": "1403", "name": "hent_hek->", "depth":21, "children":[ 
+                                                                                    ], "data":{ "$area": 45 } },
+                                                                                    { "id": "1404", "name": "hent_hek->", "depth":21, "children":[ 
+                                                                                    ], "data":{ "$area": 46 } },
+                                                                                    { "id": "1405", "name": "hent_hek->", "depth":21, "children":[ 
+                                                                                    ], "data":{ "$area": 43 } },
+                                                                                    { "id": "1406", "name": "hent_hek->", "depth":21, "children":[ 
+                                                                                    ], "data":{ "$area": 47 } },
+                                                                                    { "id": "1407", "name": "hent_hek->", "depth":21, "children":[ 
+                                                                                    ], "data":{ "$area": 47 } },
+                                                                                ], "data":{ "$area": 1040 } },
+                                                                            ], "data":{ "$area": 1224 } },
+                                                                        ], "data":{ "$area": 1224 } },
+                                                                    ], "data":{ "$area": 1589 } },
+                                                                ], "data":{ "$area": 1589 } },
+                                                                { "id": "1408", "name": "SVOP->", "depth":16, "children":[ 
+                                                                    { "id": "1409", "name": "SV(PV)", "depth":17, "children":[ 
+                                                                    ], "data":{ "$area": 66 } },
+                                                                ], "data":{ "$area": 66 } },
+                                                                { "id": "1410", "name": "SVOP->", "depth":16, "children":[ 
+                                                                    { "id": "1411", "name": "SV(PV)", "depth":17, "children":[ 
+                                                                    ], "data":{ "$area": 81 } },
+                                                                ], "data":{ "$area": 81 } },
+                                                                { "id": "1412", "name": "SVOP->", "depth":16, "children":[ 
+                                                                    { "id": "1413", "name": "SV(PVGV)", "depth":17, "children":[ 
+                                                                        { "id": "1414", "name": "UNKNOWN(0,0x0)", "depth":18, "children":[ 
+                                                                            { "id": "1415", "name": "MAGIC(<)", "depth":19, "children":[ 
+                                                                                { "id": "1416", "name": "mg_obj->", "depth":20, "children":[ 
+                                                                                    { "id": "1417", "name": "SV(PVCV)", "depth":21, "children":[ 
+                                                                                        { "id": "1418", "name": "CvPADLIST->", "depth":22, "children":[ 
+                                                                                            { "id": "1419", "name": "SV(PVAV)", "depth":23, "children":[ 
+                                                                                            ], "data":{ "$area": 80 } },
+                                                                                        ], "data":{ "$area": 80 } },
+                                                                                        { "id": "1420", "name": "CvSTART->", "depth":22, "children":[ 
+                                                                                            { "id": "1421", "name": "SVOP->", "depth":23, "children":[ 
+                                                                                                { "id": "1422", "name": "SV(PV)", "depth":24, "children":[ 
+                                                                                                ], "data":{ "$area": 42 } },
+                                                                                            ], "data":{ "$area": 42 } },
+                                                                                            { "id": "1423", "name": "SVOP->", "depth":23, "children":[ 
+                                                                                                { "id": "1424", "name": "SV(PV)", "depth":24, "children":[ 
+                                                                                                ], "data":{ "$area": 60 } },
+                                                                                            ], "data":{ "$area": 60 } },
+                                                                                            { "id": "1425", "name": "SVOP->", "depth":23, "children":[ 
+                                                                                                { "id": "1426", "name": "SV(PV)", "depth":24, "children":[ 
+                                                                                                ], "data":{ "$area": 42 } },
+                                                                                            ], "data":{ "$area": 42 } },
+                                                                                            { "id": "1427", "name": "SVOP->", "depth":23, "children":[ 
+                                                                                                { "id": "1428", "name": "SV(PV)", "depth":24, "children":[ 
+                                                                                                ], "data":{ "$area": 86 } },
+                                                                                            ], "data":{ "$area": 86 } },
+                                                                                            { "id": "1429", "name": "op_pv", "depth":23, "children":[ 
+                                                                                            ], "data":{ "$area": 4 } },
+                                                                                            { "id": "1430", "name": "SVOP->", "depth":23, "children":[ 
+                                                                                                { "id": "1431", "name": "SV(PV)", "depth":24, "children":[ 
+                                                                                                ], "data":{ "$area": 42 } },
+                                                                                            ], "data":{ "$area": 42 } },
+                                                                                            { "id": "1432", "name": "SVOP->", "depth":23, "children":[ 
+                                                                                                { "id": "1433", "name": "SV(PV)", "depth":24, "children":[ 
+                                                                                                ], "data":{ "$area": 46 } },
+                                                                                            ], "data":{ "$area": 46 } },
+                                                                                            { "id": "1434", "name": "SVOP->", "depth":23, "children":[ 
+                                                                                                { "id": "1435", "name": "SV(PV)", "depth":24, "children":[ 
+                                                                                                ], "data":{ "$area": 54 } },
+                                                                                            ], "data":{ "$area": 54 } },
+                                                                                            { "id": "1436", "name": "SVOP->", "depth":23, "children":[ 
+                                                                                                { "id": "1437", "name": "SV(PVGV)", "depth":24, "children":[ 
+                                                                                                    { "id": "1438", "name": "GvNAME_HEK->", "depth":25, "children":[ 
+                                                                                                    ], "data":{ "$area": 49 } },
+                                                                                                    { "id": "1439", "name": "gp_av->", "depth":25, "children":[ 
+                                                                                                        { "id": "1440", "name": "SV(PVAV)", "depth":26, "children":[ 
+                                                                                                        ], "data":{ "$area": 112 } },
+                                                                                                    ], "data":{ "$area": 112 } },
+                                                                                                ], "data":{ "$area": 313 } },
+                                                                                            ], "data":{ "$area": 313 } },
+                                                                                            { "id": "1441", "name": "SVOP->", "depth":23, "children":[ 
+                                                                                                { "id": "1442", "name": "SV(PV)", "depth":24, "children":[ 
+                                                                                                ], "data":{ "$area": 56 } },
+                                                                                            ], "data":{ "$area": 56 } },
+                                                                                            { "id": "1443", "name": "SVOP->", "depth":23, "children":[ 
+                                                                                                { "id": "1444", "name": "SV(PV)", "depth":24, "children":[ 
+                                                                                                ], "data":{ "$area": 43 } },
+                                                                                            ], "data":{ "$area": 43 } },
+                                                                                            { "id": "1445", "name": "SVOP->", "depth":23, "children":[ 
+                                                                                                { "id": "1446", "name": "SV(PV)", "depth":24, "children":[ 
+                                                                                                ], "data":{ "$area": 56 } },
+                                                                                            ], "data":{ "$area": 56 } },
+                                                                                            { "id": "1447", "name": "PM_GETRE->", "depth":23, "children":[ 
+                                                                                                { "id": "1448", "name": "regex_size", "depth":24, "children":[ 
+                                                                                                ], "data":{ "$area": 160 } },
+                                                                                            ], "data":{ "$area": 160 } },
+                                                                                            { "id": "1449", "name": "SVOP->", "depth":23, "children":[ 
+                                                                                                { "id": "1450", "name": "SV(PV)", "depth":24, "children":[ 
+                                                                                                ], "data":{ "$area": 42 } },
+                                                                                            ], "data":{ "$area": 42 } },
+                                                                                            { "id": "1451", "name": "SVOP->", "depth":23, "children":[ 
+                                                                                                { "id": "1452", "name": "SV(PV)", "depth":24, "children":[ 
+                                                                                                ], "data":{ "$area": 44 } },
+                                                                                            ], "data":{ "$area": 44 } },
+                                                                                            { "id": "1453", "name": "PM_GETRE->", "depth":23, "children":[ 
+                                                                                                { "id": "1454", "name": "regex_size", "depth":24, "children":[ 
+                                                                                                ], "data":{ "$area": 160 } },
+                                                                                            ], "data":{ "$area": 160 } },
+                                                                                            { "id": "1455", "name": "SVOP->", "depth":23, "children":[ 
+                                                                                                { "id": "1456", "name": "SV(PV)", "depth":24, "children":[ 
+                                                                                                ], "data":{ "$area": 42 } },
+                                                                                            ], "data":{ "$area": 42 } },
+                                                                                            { "id": "1457", "name": "SVOP->", "depth":23, "children":[ 
+                                                                                                { "id": "1458", "name": "SV(PV)", "depth":24, "children":[ 
+                                                                                                ], "data":{ "$area": 42 } },
+                                                                                            ], "data":{ "$area": 42 } },
+                                                                                            { "id": "1459", "name": "SVOP->", "depth":23, "children":[ 
+                                                                                                { "id": "1460", "name": "SV(PV)", "depth":24, "children":[ 
+                                                                                                ], "data":{ "$area": 43 } },
+                                                                                            ], "data":{ "$area": 43 } },
+                                                                                            { "id": "1461", "name": "SVOP->", "depth":23, "children":[ 
+                                                                                                { "id": "1462", "name": "SV(PV)", "depth":24, "children":[ 
+                                                                                                ], "data":{ "$area": 42 } },
+                                                                                            ], "data":{ "$area": 42 } },
+                                                                                            { "id": "1463", "name": "SVOP->", "depth":23, "children":[ 
+                                                                                                { "id": "1464", "name": "SV(PV)", "depth":24, "children":[ 
+                                                                                                ], "data":{ "$area": 42 } },
+                                                                                            ], "data":{ "$area": 42 } },
+                                                                                            { "id": "1465", "name": "SVOP->", "depth":23, "children":[ 
+                                                                                                { "id": "1466", "name": "SV(PV)", "depth":24, "children":[ 
+                                                                                                ], "data":{ "$area": 43 } },
+                                                                                            ], "data":{ "$area": 43 } },
+                                                                                            { "id": "1467", "name": "SVOP->", "depth":23, "children":[ 
+                                                                                                { "id": "1468", "name": "SV(PV)", "depth":24, "children":[ 
+                                                                                                ], "data":{ "$area": 43 } },
+                                                                                            ], "data":{ "$area": 43 } },
+                                                                                            { "id": "1469", "name": "SVOP->", "depth":23, "children":[ 
+                                                                                                { "id": "1470", "name": "SV(PV)", "depth":24, "children":[ 
+                                                                                                ], "data":{ "$area": 44 } },
+                                                                                            ], "data":{ "$area": 44 } },
+                                                                                            { "id": "1471", "name": "SVOP->", "depth":23, "children":[ 
+                                                                                                { "id": "1472", "name": "SV(PV)", "depth":24, "children":[ 
+                                                                                                ], "data":{ "$area": 42 } },
+                                                                                            ], "data":{ "$area": 42 } },
+                                                                                            { "id": "1473", "name": "SVOP->", "depth":23, "children":[ 
+                                                                                                { "id": "1474", "name": "SV(PV)", "depth":24, "children":[ 
+                                                                                                ], "data":{ "$area": 44 } },
+                                                                                            ], "data":{ "$area": 44 } },
+                                                                                            { "id": "1475", "name": "PM_GETRE->", "depth":23, "children":[ 
+                                                                                                { "id": "1476", "name": "regex_size", "depth":24, "children":[ 
+                                                                                                ], "data":{ "$area": 160 } },
+                                                                                            ], "data":{ "$area": 160 } },
+                                                                                            { "id": "1477", "name": "SVOP->", "depth":23, "children":[ 
+                                                                                                { "id": "1478", "name": "SV(PV)", "depth":24, "children":[ 
+                                                                                                ], "data":{ "$area": 56 } },
+                                                                                            ], "data":{ "$area": 56 } },
+                                                                                            { "id": "1479", "name": "PM_GETRE->", "depth":23, "children":[ 
+                                                                                                { "id": "1480", "name": "regex_size", "depth":24, "children":[ 
+                                                                                                ], "data":{ "$area": 160 } },
+                                                                                            ], "data":{ "$area": 160 } },
+                                                                                            { "id": "1481", "name": "PM_GETRE->", "depth":23, "children":[ 
+                                                                                                { "id": "1482", "name": "regex_size", "depth":24, "children":[ 
+                                                                                                ], "data":{ "$area": 160 } },
+                                                                                            ], "data":{ "$area": 160 } },
+                                                                                            { "id": "1483", "name": "PM_GETRE->", "depth":23, "children":[ 
+                                                                                                { "id": "1484", "name": "regex_size", "depth":24, "children":[ 
+                                                                                                ], "data":{ "$area": 160 } },
+                                                                                            ], "data":{ "$area": 160 } },
+                                                                                            { "id": "1485", "name": "SVOP->", "depth":23, "children":[ 
+                                                                                                { "id": "1486", "name": "SV(PV)", "depth":24, "children":[ 
+                                                                                                ], "data":{ "$area": 56 } },
+                                                                                            ], "data":{ "$area": 56 } },
+                                                                                            { "id": "1487", "name": "PM_GETRE->", "depth":23, "children":[ 
+                                                                                                { "id": "1488", "name": "regex_size", "depth":24, "children":[ 
+                                                                                                ], "data":{ "$area": 160 } },
+                                                                                            ], "data":{ "$area": 160 } },
+                                                                                            { "id": "1489", "name": "op_pv", "depth":23, "children":[ 
+                                                                                            ], "data":{ "$area": 4 } },
+                                                                                            { "id": "1490", "name": "PM_GETRE->", "depth":23, "children":[ 
+                                                                                                { "id": "1491", "name": "regex_size", "depth":24, "children":[ 
+                                                                                                ], "data":{ "$area": 160 } },
+                                                                                            ], "data":{ "$area": 160 } },
+                                                                                            { "id": "1492", "name": "SVOP->", "depth":23, "children":[ 
+                                                                                                { "id": "1493", "name": "SV(PV)", "depth":24, "children":[ 
+                                                                                                ], "data":{ "$area": 43 } },
+                                                                                            ], "data":{ "$area": 43 } },
+                                                                                            { "id": "1494", "name": "SVOP->", "depth":23, "children":[ 
+                                                                                                { "id": "1495", "name": "SV(PV)", "depth":24, "children":[ 
+                                                                                                ], "data":{ "$area": 53 } },
+                                                                                            ], "data":{ "$area": 53 } },
+                                                                                        ], "data":{ "$area": 22785 } },
+                                                                                    ], "data":{ "$area": 22993 } },
+                                                                                ], "data":{ "$area": 22993 } },
+                                                                            ], "data":{ "$area": 23033 } },
+                                                                        ], "data":{ "$area": 23033 } },
+                                                                        { "id": "1496", "name": "GvNAME_HEK->", "depth":18, "children":[ 
+                                                                        ], "data":{ "$area": 45 } },
+                                                                    ], "data":{ "$area": 23230 } },
+                                                                ], "data":{ "$area": 23230 } },
+                                                                { "id": "1497", "name": "SVOP->", "depth":16, "children":[ 
+                                                                    { "id": "1498", "name": "SV(PV)", "depth":17, "children":[ 
+                                                                    ], "data":{ "$area": 43 } },
+                                                                ], "data":{ "$area": 43 } },
+                                                                { "id": "1499", "name": "SVOP->", "depth":16, "children":[ 
+                                                                    { "id": "1500", "name": "SV(PVGV)", "depth":17, "children":[ 
+                                                                        { "id": "1501", "name": "GvNAME_HEK->", "depth":18, "children":[ 
+                                                                        ], "data":{ "$area": 38 } },
+                                                                        { "id": "1502", "name": "gp_av->", "depth":18, "children":[ 
+                                                                            { "id": "1503", "name": "SV(PVAV)", "depth":19, "children":[ 
+                                                                            ], "data":{ "$area": 64 } },
+                                                                        ], "data":{ "$area": 64 } },
+                                                                    ], "data":{ "$area": 254 } },
+                                                                ], "data":{ "$area": 254 } },
+                                                                { "id": "1504", "name": "SVOP->", "depth":16, "children":[ 
+                                                                    { "id": "1505", "name": "SV(PV)", "depth":17, "children":[ 
+                                                                    ], "data":{ "$area": 42 } },
+                                                                ], "data":{ "$area": 42 } },
+                                                                { "id": "1506", "name": "SVOP->", "depth":16, "children":[ 
+                                                                    { "id": "1507", "name": "SV(PV)", "depth":17, "children":[ 
+                                                                    ], "data":{ "$area": 42 } },
+                                                                ], "data":{ "$area": 42 } },
+                                                                { "id": "1508", "name": "SVOP->", "depth":16, "children":[ 
+                                                                    { "id": "1509", "name": "SV(PV)", "depth":17, "children":[ 
+                                                                    ], "data":{ "$area": 47 } },
+                                                                ], "data":{ "$area": 47 } },
+                                                                { "id": "1510", "name": "SVOP->", "depth":16, "children":[ 
+                                                                    { "id": "1511", "name": "SV(PV)", "depth":17, "children":[ 
+                                                                    ], "data":{ "$area": 43 } },
+                                                                ], "data":{ "$area": 43 } },
+                                                                { "id": "1512", "name": "SVOP->", "depth":16, "children":[ 
+                                                                    { "id": "1513", "name": "SV(PV)", "depth":17, "children":[ 
+                                                                    ], "data":{ "$area": 42 } },
+                                                                ], "data":{ "$area": 42 } },
+                                                                { "id": "1514", "name": "SVOP->", "depth":16, "children":[ 
+                                                                    { "id": "1515", "name": "SV(PV)", "depth":17, "children":[ 
+                                                                    ], "data":{ "$area": 42 } },
+                                                                ], "data":{ "$area": 42 } },
+                                                                { "id": "1516", "name": "SVOP->", "depth":16, "children":[ 
+                                                                    { "id": "1517", "name": "SV(PV)", "depth":17, "children":[ 
+                                                                    ], "data":{ "$area": 47 } },
+                                                                ], "data":{ "$area": 47 } },
+                                                                { "id": "1518", "name": "SVOP->", "depth":16, "children":[ 
+                                                                    { "id": "1519", "name": "SV(PV)", "depth":17, "children":[ 
+                                                                    ], "data":{ "$area": 42 } },
+                                                                ], "data":{ "$area": 42 } },
+                                                                { "id": "1520", "name": "SVOP->", "depth":16, "children":[ 
+                                                                    { "id": "1521", "name": "SV(PV)", "depth":17, "children":[ 
+                                                                    ], "data":{ "$area": 67 } },
+                                                                ], "data":{ "$area": 67 } },
+                                                                { "id": "1522", "name": "SVOP->", "depth":16, "children":[ 
+                                                                    { "id": "1523", "name": "SV(PV)", "depth":17, "children":[ 
+                                                                    ], "data":{ "$area": 56 } },
+                                                                ], "data":{ "$area": 56 } },
+                                                                { "id": "1524", "name": "SVOP->", "depth":16, "children":[ 
+                                                                    { "id": "1525", "name": "SV(IV)", "depth":17, "children":[ 
+                                                                    ], "data":{ "$area": 24 } },
+                                                                ], "data":{ "$area": 24 } },
+                                                                { "id": "1526", "name": "SVOP->", "depth":16, "children":[ 
+                                                                    { "id": "1527", "name": "SV(IV)", "depth":17, "children":[ 
+                                                                    ], "data":{ "$area": 24 } },
+                                                                ], "data":{ "$area": 24 } },
+                                                                { "id": "1528", "name": "PM_GETRE->", "depth":16, "children":[ 
+                                                                    { "id": "1529", "name": "regex_size", "depth":17, "children":[ 
+                                                                    ], "data":{ "$area": 160 } },
+                                                                ], "data":{ "$area": 160 } },
+                                                                { "id": "1530", "name": "SVOP->", "depth":16, "children":[ 
+                                                                    { "id": "1531", "name": "SV(PV)", "depth":17, "children":[ 
+                                                                    ], "data":{ "$area": 77 } },
+                                                                ], "data":{ "$area": 77 } },
+                                                                { "id": "1532", "name": "SVOP->", "depth":16, "children":[ 
+                                                                    { "id": "1533", "name": "SV(PV)", "depth":17, "children":[ 
+                                                                    ], "data":{ "$area": 70 } },
+                                                                ], "data":{ "$area": 70 } },
+                                                                { "id": "1534", "name": "SVOP->", "depth":16, "children":[ 
+                                                                    { "id": "1535", "name": "SV(PV)", "depth":17, "children":[ 
+                                                                    ], "data":{ "$area": 120 } },
+                                                                ], "data":{ "$area": 120 } },
+                                                                { "id": "1536", "name": "SVOP->", "depth":16, "children":[ 
+                                                                    { "id": "1537", "name": "SV(PV)", "depth":17, "children":[ 
+                                                                    ], "data":{ "$area": 88 } },
+                                                                ], "data":{ "$area": 88 } },
+                                                                { "id": "1538", "name": "SVOP->", "depth":16, "children":[ 
+                                                                    { "id": "1539", "name": "SV(PV)", "depth":17, "children":[ 
+                                                                    ], "data":{ "$area": 59 } },
+                                                                ], "data":{ "$area": 59 } },
+                                                                { "id": "1540", "name": "SVOP->", "depth":16, "children":[ 
+                                                                    { "id": "1541", "name": "SV(PVGV)", "depth":17, "children":[ 
+                                                                        { "id": "1542", "name": "UNKNOWN(0,0x0)", "depth":18, "children":[ 
+                                                                            { "id": "1543", "name": "MAGIC(<)", "depth":19, "children":[ 
+                                                                                { "id": "1544", "name": "mg_obj->", "depth":20, "children":[ 
+                                                                                    { "id": "1545", "name": "SV(PVCV)", "depth":21, "children":[ 
+                                                                                        { "id": "1546", "name": "CvPADLIST->", "depth":22, "children":[ 
+                                                                                            { "id": "1547", "name": "SV(PVAV)", "depth":23, "children":[ 
+                                                                                            ], "data":{ "$area": 80 } },
+                                                                                        ], "data":{ "$area": 80 } },
+                                                                                        { "id": "1548", "name": "CvSTART->", "depth":22, "children":[ 
+                                                                                            { "id": "1549", "name": "SVOP->", "depth":23, "children":[ 
+                                                                                                { "id": "1550", "name": "SV(PVGV)", "depth":24, "children":[ 
+                                                                                                    { "id": "1551", "name": "UNKNOWN(0,0x0)", "depth":25, "children":[ 
+                                                                                                        { "id": "1552", "name": "MAGIC(<)", "depth":26, "children":[ 
+                                                                                                            { "id": "1553", "name": "mg_obj->", "depth":27, "children":[ 
+                                                                                                                { "id": "1554", "name": "SV(PVCV)", "depth":28, "children":[ 
+                                                                                                                    { "id": "1555", "name": "CvPADLIST->", "depth":29, "children":[ 
+                                                                                                                        { "id": "1556", "name": "SV(PVAV)", "depth":30, "children":[ 
+                                                                                                                        ], "data":{ "$area": 80 } },
+                                                                                                                    ], "data":{ "$area": 80 } },
+                                                                                                                    { "id": "1557", "name": "CvSTART->", "depth":29, "children":[ 
+                                                                                                                        { "id": "1558", "name": "SVOP->", "depth":30, "children":[ 
+                                                                                                                            { "id": "1559", "name": "SV(IV)", "depth":31, "children":[ 
+                                                                                                                            ], "data":{ "$area": 24 } },
+                                                                                                                        ], "data":{ "$area": 24 } },
+                                                                                                                    ], "data":{ "$area": 3056 } },
+                                                                                                                ], "data":{ "$area": 3264 } },
+                                                                                                            ], "data":{ "$area": 3264 } },
+                                                                                                        ], "data":{ "$area": 3304 } },
+                                                                                                    ], "data":{ "$area": 3304 } },
+                                                                                                ], "data":{ "$area": 3456 } },
+                                                                                            ], "data":{ "$area": 3456 } },
+                                                                                        ], "data":{ "$area": 4016 } },
+                                                                                    ], "data":{ "$area": 4224 } },
+                                                                                ], "data":{ "$area": 4224 } },
+                                                                            ], "data":{ "$area": 4264 } },
+                                                                        ], "data":{ "$area": 4264 } },
+                                                                    ], "data":{ "$area": 4416 } },
+                                                                ], "data":{ "$area": 4416 } },
+                                                                { "id": "1560", "name": "SVOP->", "depth":16, "children":[ 
+                                                                    { "id": "1561", "name": "SV(PV)", "depth":17, "children":[ 
+                                                                    ], "data":{ "$area": 88 } },
+                                                                ], "data":{ "$area": 88 } },
+                                                                { "id": "1562", "name": "SVOP->", "depth":16, "children":[ 
+                                                                    { "id": "1563", "name": "SV(PV)", "depth":17, "children":[ 
+                                                                    ], "data":{ "$area": 56 } },
+                                                                ], "data":{ "$area": 56 } },
+                                                            ], "data":{ "$area": 149479 } },
+                                                        ], "data":{ "$area": 149687 } },
+                                                    ], "data":{ "$area": 149687 } },
+                                                ], "data":{ "$area": 149727 } },
+                                            ], "data":{ "$area": 149727 } },
+                                        ], "data":{ "$area": 149879 } },
+                                    ], "data":{ "$area": 149879 } },
+                                    { "id": "1564", "name": "HeVAL->", "depth":9, "children":[ 
+                                        { "id": "1565", "name": "SV(PVGV)", "depth":10, "children":[ 
+                                            { "id": "1566", "name": "UNKNOWN(0,0x0)", "depth":11, "children":[ 
+                                                { "id": "1567", "name": "MAGIC(<)", "depth":12, "children":[ 
+                                                ], "data":{ "$area": 40 } },
+                                            ], "data":{ "$area": 40 } },
+                                        ], "data":{ "$area": 192 } },
+                                    ], "data":{ "$area": 192 } },
+                                    { "id": "1568", "name": "HeVAL->", "depth":9, "children":[ 
+                                        { "id": "1569", "name": "SV(PVGV)", "depth":10, "children":[ 
+                                            { "id": "1570", "name": "UNKNOWN(0,0x0)", "depth":11, "children":[ 
+                                                { "id": "1571", "name": "MAGIC(<)", "depth":12, "children":[ 
+                                                    { "id": "1572", "name": "mg_obj->", "depth":13, "children":[ 
+                                                        { "id": "1573", "name": "SV(PVCV)", "depth":14, "children":[ 
+                                                            { "id": "1574", "name": "CvPADLIST->", "depth":15, "children":[ 
+                                                                { "id": "1575", "name": "SV(PVAV)", "depth":16, "children":[ 
+                                                                ], "data":{ "$area": 80 } },
+                                                            ], "data":{ "$area": 80 } },
+                                                            { "id": "1576", "name": "CvSTART->", "depth":15, "children":[ 
+                                                                { "id": "1577", "name": "SVOP->", "depth":16, "children":[ 
+                                                                    { "id": "1578", "name": "SV(IV)", "depth":17, "children":[ 
+                                                                    ], "data":{ "$area": 24 } },
+                                                                ], "data":{ "$area": 24 } },
+                                                            ], "data":{ "$area": 256 } },
+                                                        ], "data":{ "$area": 464 } },
+                                                    ], "data":{ "$area": 464 } },
+                                                ], "data":{ "$area": 504 } },
+                                            ], "data":{ "$area": 504 } },
+                                        ], "data":{ "$area": 656 } },
+                                    ], "data":{ "$area": 656 } },
+                                    { "id": "1579", "name": "hent_hek->", "depth":9, "children":[ 
+                                    ], "data":{ "$area": 51 } },
+                                    { "id": "1580", "name": "HeVAL->", "depth":9, "children":[ 
+                                        { "id": "1581", "name": "SV(PVGV)", "depth":10, "children":[ 
+                                            { "id": "1582", "name": "UNKNOWN(0,0x0)", "depth":11, "children":[ 
+                                                { "id": "1583", "name": "MAGIC(<)", "depth":12, "children":[ 
+                                                    { "id": "1584", "name": "mg_obj->", "depth":13, "children":[ 
+                                                        { "id": "1585", "name": "SV(PVCV)", "depth":14, "children":[ 
+                                                            { "id": "1586", "name": "CvPADLIST->", "depth":15, "children":[ 
+                                                                { "id": "1587", "name": "SV(PVAV)", "depth":16, "children":[ 
+                                                                ], "data":{ "$area": 80 } },
+                                                            ], "data":{ "$area": 80 } },
+                                                            { "id": "1588", "name": "CvSTART->", "depth":15, "children":[ 
+                                                                { "id": "1589", "name": "SVOP->", "depth":16, "children":[ 
+                                                                    { "id": "1590", "name": "SV(PVGV)", "depth":17, "children":[ 
+                                                                        { "id": "1591", "name": "GvNAME_HEK->", "depth":18, "children":[ 
+                                                                        ], "data":{ "$area": 37 } },
+                                                                        { "id": "1592", "name": "gp_av->", "depth":18, "children":[ 
+                                                                            { "id": "1593", "name": "SV(PVAV)", "depth":19, "children":[ 
+                                                                            ], "data":{ "$area": 64 } },
+                                                                        ], "data":{ "$area": 64 } },
+                                                                    ], "data":{ "$area": 253 } },
+                                                                ], "data":{ "$area": 253 } },
+                                                                { "id": "1594", "name": "SVOP->", "depth":16, "children":[ 
+                                                                    { "id": "1595", "name": "SV(PV)", "depth":17, "children":[ 
+                                                                    ], "data":{ "$area": 56 } },
+                                                                ], "data":{ "$area": 56 } },
+                                                                { "id": "1596", "name": "SVOP->", "depth":16, "children":[ 
+                                                                    { "id": "1597", "name": "SV(PV)", "depth":17, "children":[ 
+                                                                    ], "data":{ "$area": 46 } },
+                                                                ], "data":{ "$area": 46 } },
+                                                            ], "data":{ "$area": 2339 } },
+                                                        ], "data":{ "$area": 2547 } },
+                                                    ], "data":{ "$area": 2547 } },
+                                                ], "data":{ "$area": 2587 } },
+                                            ], "data":{ "$area": 2587 } },
+                                        ], "data":{ "$area": 2739 } },
+                                    ], "data":{ "$area": 2739 } },
+                                    { "id": "1598", "name": "HeVAL->", "depth":9, "children":[ 
+                                        { "id": "1599", "name": "SV(PVGV)", "depth":10, "children":[ 
+                                            { "id": "1600", "name": "gp_sv->", "depth":11, "children":[ 
+                                                { "id": "1601", "name": "SV(PV)", "depth":12, "children":[ 
+                                                ], "data":{ "$area": 56 } },
+                                            ], "data":{ "$area": 56 } },
+                                        ], "data":{ "$area": 208 } },
+                                    ], "data":{ "$area": 208 } },
+                                    { "id": "1602", "name": "hent_hek->", "depth":9, "children":[ 
+                                    ], "data":{ "$area": 48 } },
+                                    { "id": "1603", "name": "HeVAL->", "depth":9, "children":[ 
+                                        { "id": "1604", "name": "SV(PVGV)", "depth":10, "children":[ 
+                                            { "id": "1605", "name": "UNKNOWN(0,0x0)", "depth":11, "children":[ 
+                                                { "id": "1606", "name": "MAGIC(<)", "depth":12, "children":[ 
+                                                    { "id": "1607", "name": "mg_obj->", "depth":13, "children":[ 
+                                                        { "id": "1608", "name": "SV(PVCV)", "depth":14, "children":[ 
+                                                        ], "data":{ "$area": 128 } },
+                                                    ], "data":{ "$area": 128 } },
+                                                ], "data":{ "$area": 168 } },
+                                            ], "data":{ "$area": 168 } },
+                                        ], "data":{ "$area": 320 } },
+                                    ], "data":{ "$area": 320 } },
+                                    { "id": "1609", "name": "HvNAME_HEK->", "depth":9, "children":[ 
+                                    ], "data":{ "$area": 44 } },
+                                    { "id": "1610", "name": "isa->", "depth":9, "children":[ 
+                                        { "id": "1611", "name": "SV(PVHV)", "depth":10, "children":[ 
+                                            { "id": "1612", "name": "HvARRAY->", "depth":11, "children":[ 
+                                            ], "data":{ "$area": 48 } },
+                                        ], "data":{ "$area": 168 } },
+                                    ], "data":{ "$area": 168 } },
+                                    { "id": "1613", "name": "mro_linear_current->", "depth":9, "children":[ 
+                                        { "id": "1614", "name": "SV(PVAV)", "depth":10, "children":[ 
+                                            { "id": "1615", "name": "AVelem->", "depth":11, "children":[ 
+                                                { "id": "1616", "name": "SV(PV)", "depth":12, "children":[ 
+                                                ], "data":{ "$area": 40 } },
+                                            ], "data":{ "$area": 40 } },
+                                        ], "data":{ "$area": 136 } },
+                                    ], "data":{ "$area": 136 } },
+                                ], "data":{ "$area": 170402 } },
+                            ], "data":{ "$area": 170970 } },
+                        ], "data":{ "$area": 170970 } },
+                    ], "data":{ "$area": 171122 } },
+                ], "data":{ "$area": 171122 } },
+                { "id": "1617", "name": "hent_hek->", "depth":4, "children":[ 
+                ], "data":{ "$area": 39 } },
+                { "id": "1618", "name": "HeVAL->", "depth":4, "children":[ 
+                    { "id": "1619", "name": "SV(PVGV)", "depth":5, "children":[ 
+                        { "id": "1620", "name": "gp_hv->", "depth":6, "children":[ 
+                            { "id": "1621", "name": "SV(PVHV)", "depth":7, "children":[ 
+                                { "id": "1622", "name": "HvARRAY->", "depth":8, "children":[ 
+                                    { "id": "1623", "name": "hent_hek->", "depth":9, "children":[ 
+                                    ], "data":{ "$area": 51 } },
+                                    { "id": "1624", "name": "HeVAL->", "depth":9, "children":[ 
+                                        { "id": "1625", "name": "SV(PVGV)", "depth":10, "children":[ 
+                                            { "id": "1626", "name": "UNKNOWN(0,0x0)", "depth":11, "children":[ 
+                                                { "id": "1627", "name": "MAGIC(<)", "depth":12, "children":[ 
+                                                    { "id": "1628", "name": "mg_obj->", "depth":13, "children":[ 
+                                                        { "id": "1629", "name": "SV(PVCV)", "depth":14, "children":[ 
+                                                        ], "data":{ "$area": 144 } },
+                                                    ], "data":{ "$area": 144 } },
+                                                ], "data":{ "$area": 184 } },
+                                            ], "data":{ "$area": 184 } },
+                                        ], "data":{ "$area": 336 } },
+                                    ], "data":{ "$area": 336 } },
+                                    { "id": "1630", "name": "HvNAME_HEK->", "depth":9, "children":[ 
+                                    ], "data":{ "$area": 37 } },
+                                ], "data":{ "$area": 536 } },
+                            ], "data":{ "$area": 656 } },
+                        ], "data":{ "$area": 656 } },
+                    ], "data":{ "$area": 808 } },
+                ], "data":{ "$area": 808 } },
+                { "id": "1631", "name": "hent_hek->", "depth":4, "children":[ 
+                ], "data":{ "$area": 41 } },
+                { "id": "1632", "name": "HeVAL->", "depth":4, "children":[ 
+                    { "id": "1633", "name": "SV(PVGV)", "depth":5, "children":[ 
+                        { "id": "1634", "name": "GvFILE_HEK->", "depth":6, "children":[ 
+                        ], "data":{ "$area": 85 } },
+                        { "id": "1635", "name": "gp_hv->", "depth":6, "children":[ 
+                            { "id": "1636", "name": "SV(PVHV)", "depth":7, "children":[ 
+                                { "id": "1637", "name": "HvARRAY->", "depth":8, "children":[ 
+                                    { "id": "1638", "name": "hent_hek->", "depth":9, "children":[ 
+                                    ], "data":{ "$area": 40 } },
+                                    { "id": "1639", "name": "HeVAL->", "depth":9, "children":[ 
+                                        { "id": "1640", "name": "SV(PVGV)", "depth":10, "children":[ 
+                                            { "id": "1641", "name": "gp_hv->", "depth":11, "children":[ 
+                                                { "id": "1642", "name": "SV(PVHV)", "depth":12, "children":[ 
+                                                    { "id": "1643", "name": "HvARRAY->", "depth":13, "children":[ 
+                                                        { "id": "1644", "name": "hent_hek->", "depth":14, "children":[ 
+                                                        ], "data":{ "$area": 40 } },
+                                                        { "id": "1645", "name": "HeVAL->", "depth":14, "children":[ 
+                                                            { "id": "1646", "name": "SV(PVGV)", "depth":15, "children":[ 
+                                                                { "id": "1647", "name": "GvFILE_HEK->", "depth":16, "children":[ 
+                                                                ], "data":{ "$area": 98 } },
+                                                                { "id": "1648", "name": "gp_sv->", "depth":16, "children":[ 
+                                                                    { "id": "1649", "name": "SV(IV)", "depth":17, "children":[ 
+                                                                    ], "data":{ "$area": 24 } },
+                                                                ], "data":{ "$area": 24 } },
+                                                            ], "data":{ "$area": 274 } },
+                                                        ], "data":{ "$area": 274 } },
+                                                        { "id": "1650", "name": "hent_hek->", "depth":14, "children":[ 
+                                                        ], "data":{ "$area": 43 } },
+                                                        { "id": "1651", "name": "HeVAL->", "depth":14, "children":[ 
+                                                            { "id": "1652", "name": "SV(PVGV)", "depth":15, "children":[ 
+                                                                { "id": "1653", "name": "UNKNOWN(0,0x0)", "depth":16, "children":[ 
+                                                                    { "id": "1654", "name": "MAGIC(<)", "depth":17, "children":[ 
+                                                                        { "id": "1655", "name": "mg_obj->", "depth":18, "children":[ 
+                                                                            { "id": "1656", "name": "SV(PVCV)", "depth":19, "children":[ 
+                                                                            ], "data":{ "$area": 128 } },
+                                                                        ], "data":{ "$area": 128 } },
+                                                                    ], "data":{ "$area": 168 } },
+                                                                ], "data":{ "$area": 168 } },
+                                                            ], "data":{ "$area": 320 } },
+                                                        ], "data":{ "$area": 320 } },
+                                                        { "id": "1657", "name": "hent_hek->", "depth":14, "children":[ 
+                                                        ], "data":{ "$area": 45 } },
+                                                        { "id": "1658", "name": "HeVAL->", "depth":14, "children":[ 
+                                                            { "id": "1659", "name": "SV(PVGV)", "depth":15, "children":[ 
+                                                                { "id": "1660", "name": "gp_hv->", "depth":16, "children":[ 
+                                                                    { "id": "1661", "name": "SV(PVHV)", "depth":17, "children":[ 
+                                                                        { "id": "1662", "name": "HvARRAY->", "depth":18, "children":[ 
+                                                                            { "id": "1663", "name": "hent_hek->", "depth":19, "children":[ 
+                                                                            ], "data":{ "$area": 37 } },
+                                                                            { "id": "1664", "name": "HeVAL->", "depth":19, "children":[ 
+                                                                                { "id": "1665", "name": "SV(RV)", "depth":20, "children":[ 
+                                                                                    { "id": "1666", "name": "RV->", "depth":21, "children":[ 
+                                                                                        { "id": "1667", "name": "SV(PVAV)", "depth":22, "children":[ 
+                                                                                            { "id": "1668", "name": "AVelem->", "depth":23, "children":[ 
+                                                                                                { "id": "1669", "name": "SV(PV)", "depth":24, "children":[ 
+                                                                                                ], "data":{ "$area": 56 } },
+                                                                                            ], "data":{ "$area": 56 } },
+                                                                                            { "id": "1670", "name": "AVelem->", "depth":23, "children":[ 
+                                                                                                { "id": "1671", "name": "SV(PV)", "depth":24, "children":[ 
+                                                                                                ], "data":{ "$area": 56 } },
+                                                                                            ], "data":{ "$area": 56 } },
+                                                                                            { "id": "1672", "name": "AVelem->", "depth":23, "children":[ 
+                                                                                                { "id": "1673", "name": "SV(PV)", "depth":24, "children":[ 
+                                                                                                ], "data":{ "$area": 56 } },
+                                                                                            ], "data":{ "$area": 56 } },
+                                                                                        ], "data":{ "$area": 264 } },
+                                                                                    ], "data":{ "$area": 264 } },
+                                                                                ], "data":{ "$area": 288 } },
+                                                                            ], "data":{ "$area": 288 } },
+                                                                        ], "data":{ "$area": 349 } },
+                                                                    ], "data":{ "$area": 469 } },
+                                                                ], "data":{ "$area": 469 } },
+                                                            ], "data":{ "$area": 621 } },
+                                                        ], "data":{ "$area": 621 } },
+                                                        { "id": "1674", "name": "hent_hek->", "depth":14, "children":[ 
+                                                        ], "data":{ "$area": 44 } },
+                                                        { "id": "1675", "name": "HeVAL->", "depth":14, "children":[ 
+                                                            { "id": "1676", "name": "SV(PVGV)", "depth":15, "children":[ 
+                                                                { "id": "1677", "name": "UNKNOWN(0,0x0)", "depth":16, "children":[ 
+                                                                    { "id": "1678", "name": "MAGIC(<)", "depth":17, "children":[ 
+                                                                        { "id": "1679", "name": "mg_obj->", "depth":18, "children":[ 
+                                                                            { "id": "1680", "name": "SV(PVCV)", "depth":19, "children":[ 
+                                                                            ], "data":{ "$area": 128 } },
+                                                                        ], "data":{ "$area": 128 } },
+                                                                    ], "data":{ "$area": 168 } },
+                                                                ], "data":{ "$area": 168 } },
+                                                            ], "data":{ "$area": 320 } },
+                                                        ], "data":{ "$area": 320 } },
+                                                        { "id": "1681", "name": "HeVAL->", "depth":14, "children":[ 
+                                                            { "id": "1682", "name": "SV(PVGV)", "depth":15, "children":[ 
+                                                                { "id": "1683", "name": "gp_av->", "depth":16, "children":[ 
+                                                                    { "id": "1684", "name": "SV(PVAV)", "depth":17, "children":[ 
+                                                                    ], "data":{ "$area": 64 } },
+                                                                ], "data":{ "$area": 64 } },
+                                                            ], "data":{ "$area": 216 } },
+                                                        ], "data":{ "$area": 216 } },
+                                                        { "id": "1685", "name": "HeVAL->", "depth":14, "children":[ 
+                                                            { "id": "1686", "name": "SV(PVGV)", "depth":15, "children":[ 
+                                                                { "id": "1687", "name": "UNKNOWN(0,0x0)", "depth":16, "children":[ 
+                                                                    { "id": "1688", "name": "MAGIC(<)", "depth":17, "children":[ 
+                                                                        { "id": "1689", "name": "mg_obj->", "depth":18, "children":[ 
+                                                                            { "id": "1690", "name": "SV(PVCV)", "depth":19, "children":[ 
+                                                                            ], "data":{ "$area": 128 } },
+                                                                        ], "data":{ "$area": 128 } },
+                                                                    ], "data":{ "$area": 168 } },
+                                                                ], "data":{ "$area": 168 } },
+                                                            ], "data":{ "$area": 320 } },
+                                                        ], "data":{ "$area": 320 } },
+                                                        { "id": "1691", "name": "HeVAL->", "depth":14, "children":[ 
+                                                            { "id": "1692", "name": "SV(PVGV)", "depth":15, "children":[ 
+                                                            ], "data":{ "$area": 152 } },
+                                                        ], "data":{ "$area": 152 } },
+                                                        { "id": "1693", "name": "HeVAL->", "depth":14, "children":[ 
+                                                            { "id": "1694", "name": "SV(PVGV)", "depth":15, "children":[ 
+                                                                { "id": "1695", "name": "gp_cv->", "depth":16, "children":[ 
+                                                                    { "id": "1696", "name": "SV(PVCV)", "depth":17, "children":[ 
+                                                                        { "id": "1697", "name": "CvSTASH->", "depth":18, "children":[ 
+                                                                            { "id": "1698", "name": "SV(PVHV)", "depth":19, "children":[ 
+                                                                                { "id": "1699", "name": "HvARRAY->", "depth":20, "children":[ 
+                                                                                    { "id": "1700", "name": "hent_hek->", "depth":21, "children":[ 
+                                                                                    ], "data":{ "$area": 45 } },
+                                                                                    { "id": "1701", "name": "hent_hek->", "depth":21, "children":[ 
+                                                                                    ], "data":{ "$area": 39 } },
+                                                                                    { "id": "1702", "name": "hent_hek->", "depth":21, "children":[ 
+                                                                                    ], "data":{ "$area": 41 } },
+                                                                                    { "id": "1703", "name": "hent_hek->", "depth":21, "children":[ 
+                                                                                    ], "data":{ "$area": 48 } },
+                                                                                    { "id": "1704", "name": "hent_hek->", "depth":21, "children":[ 
+                                                                                    ], "data":{ "$area": 39 } },
+                                                                                    { "id": "1705", "name": "hent_hek->", "depth":21, "children":[ 
+                                                                                    ], "data":{ "$area": 40 } },
+                                                                                    { "id": "1706", "name": "hent_hek->", "depth":21, "children":[ 
+                                                                                    ], "data":{ "$area": 45 } },
+                                                                                    { "id": "1707", "name": "hent_hek->", "depth":21, "children":[ 
+                                                                                    ], "data":{ "$area": 42 } },
+                                                                                    { "id": "1708", "name": "hent_hek->", "depth":21, "children":[ 
+                                                                                    ], "data":{ "$area": 49 } },
+                                                                                    { "id": "1709", "name": "hent_hek->", "depth":21, "children":[ 
+                                                                                    ], "data":{ "$area": 43 } },
+                                                                                    { "id": "1710", "name": "hent_hek->", "depth":21, "children":[ 
+                                                                                    ], "data":{ "$area": 49 } },
+                                                                                    { "id": "1711", "name": "isa->", "depth":21, "children":[ 
+                                                                                        { "id": "1712", "name": "SV(PVHV)", "depth":22, "children":[ 
+                                                                                            { "id": "1713", "name": "HvARRAY->", "depth":23, "children":[ 
+                                                                                            ], "data":{ "$area": 48 } },
+                                                                                        ], "data":{ "$area": 168 } },
+                                                                                    ], "data":{ "$area": 168 } },
+                                                                                    { "id": "1714", "name": "mro_linear_current->", "depth":21, "children":[ 
+                                                                                        { "id": "1715", "name": "SV(PVAV)", "depth":22, "children":[ 
+                                                                                            { "id": "1716", "name": "AVelem->", "depth":23, "children":[ 
+                                                                                                { "id": "1717", "name": "SV(PV)", "depth":24, "children":[ 
+                                                                                                ], "data":{ "$area": 40 } },
+                                                                                            ], "data":{ "$area": 40 } },
+                                                                                        ], "data":{ "$area": 136 } },
+                                                                                    ], "data":{ "$area": 136 } },
+                                                                                ], "data":{ "$area": 1280 } },
+                                                                            ], "data":{ "$area": 1592 } },
+                                                                        ], "data":{ "$area": 1592 } },
+                                                                        { "id": "1718", "name": "CvGV->", "depth":18, "children":[ 
+                                                                            { "id": "1719", "name": "SV(PVGV)", "depth":19, "children":[ 
+                                                                                { "id": "1720", "name": "UNKNOWN(0,0x0)", "depth":20, "children":[ 
+                                                                                    { "id": "1721", "name": "MAGIC(<)", "depth":21, "children":[ 
+                                                                                    ], "data":{ "$area": 40 } },
+                                                                                ], "data":{ "$area": 40 } },
+                                                                            ], "data":{ "$area": 192 } },
+                                                                        ], "data":{ "$area": 192 } },
+                                                                        { "id": "1722", "name": "CvPADLIST->", "depth":18, "children":[ 
+                                                                            { "id": "1723", "name": "SV(PVAV)", "depth":19, "children":[ 
+                                                                            ], "data":{ "$area": 80 } },
+                                                                        ], "data":{ "$area": 80 } },
+                                                                        { "id": "1724", "name": "CvOUTSIDE->", "depth":18, "children":[ 
+                                                                            { "id": "1725", "name": "SV(PVCV)", "depth":19, "children":[ 
+                                                                                { "id": "1726", "name": "CvPADLIST->", "depth":20, "children":[ 
+                                                                                    { "id": "1727", "name": "SV(PVAV)", "depth":21, "children":[ 
+                                                                                    ], "data":{ "$area": 80 } },
+                                                                                ], "data":{ "$area": 80 } },
+                                                                            ], "data":{ "$area": 208 } },
+                                                                        ], "data":{ "$area": 208 } },
+                                                                        { "id": "1728", "name": "CvSTART->", "depth":18, "children":[ 
+                                                                            { "id": "1729", "name": "SVOP->", "depth":19, "children":[ 
+                                                                                { "id": "1730", "name": "SV(PV)", "depth":20, "children":[ 
+                                                                                ], "data":{ "$area": 43 } },
+                                                                            ], "data":{ "$area": 43 } },
+                                                                            { "id": "1731", "name": "SVOP->", "depth":19, "children":[ 
+                                                                                { "id": "1732", "name": "SV(PV)", "depth":20, "children":[ 
+                                                                                ], "data":{ "$area": 43 } },
+                                                                            ], "data":{ "$area": 43 } },
+                                                                            { "id": "1733", "name": "cop_filegv->", "depth":19, "children":[ 
+                                                                                { "id": "1734", "name": "SV(PVGV)", "depth":20, "children":[ 
+                                                                                    { "id": "1735", "name": "GvNAME_HEK->", "depth":21, "children":[ 
+                                                                                    ], "data":{ "$area": 104 } },
+                                                                                    { "id": "1736", "name": "gp_sv->", "depth":21, "children":[ 
+                                                                                        { "id": "1737", "name": "SV(PV)", "depth":22, "children":[ 
+                                                                                        ], "data":{ "$area": 120 } },
+                                                                                    ], "data":{ "$area": 120 } },
+                                                                                ], "data":{ "$area": 376 } },
+                                                                            ], "data":{ "$area": 376 } },
+                                                                            { "id": "1738", "name": "SVOP->", "depth":19, "children":[ 
+                                                                                { "id": "1739", "name": "SV(PV)", "depth":20, "children":[ 
+                                                                                ], "data":{ "$area": 40 } },
+                                                                            ], "data":{ "$area": 40 } },
+                                                                            { "id": "1740", "name": "SVOP->", "depth":19, "children":[ 
+                                                                                { "id": "1741", "name": "SV(PV)", "depth":20, "children":[ 
+                                                                                ], "data":{ "$area": 40 } },
+                                                                            ], "data":{ "$area": 40 } },
+                                                                            { "id": "1742", "name": "SVOP->", "depth":19, "children":[ 
+                                                                                { "id": "1743", "name": "SV(PVGV)", "depth":20, "children":[ 
+                                                                                    { "id": "1744", "name": "UNKNOWN(0,0x0)", "depth":21, "children":[ 
+                                                                                        { "id": "1745", "name": "MAGIC(<)", "depth":22, "children":[ 
+                                                                                            { "id": "1746", "name": "mg_obj->", "depth":23, "children":[ 
+                                                                                                { "id": "1747", "name": "SV(PVCV)", "depth":24, "children":[ 
+                                                                                                    { "id": "1748", "name": "CvPADLIST->", "depth":25, "children":[ 
+                                                                                                        { "id": "1749", "name": "SV(PVAV)", "depth":26, "children":[ 
+                                                                                                        ], "data":{ "$area": 80 } },
+                                                                                                    ], "data":{ "$area": 80 } },
+                                                                                                    { "id": "1750", "name": "CvSTART->", "depth":25, "children":[ 
+                                                                                                        { "id": "1751", "name": "SVOP->", "depth":26, "children":[ 
+                                                                                                            { "id": "1752", "name": "SV(PVGV)", "depth":27, "children":[ 
+                                                                                                                { "id": "1753", "name": "UNKNOWN(0,0x0)", "depth":28, "children":[ 
+                                                                                                                    { "id": "1754", "name": "MAGIC(<)", "depth":29, "children":[ 
+                                                                                                                        { "id": "1755", "name": "mg_obj->", "depth":30, "children":[ 
+                                                                                                                            { "id": "1756", "name": "SV(PVCV)", "depth":31, "children":[ 
+                                                                                                                                { "id": "1757", "name": "CvPADLIST->", "depth":32, "children":[ 
+                                                                                                                                    { "id": "1758", "name": "SV(PVAV)", "depth":33, "children":[ 
+                                                                                                                                    ], "data":{ "$area": 80 } },
+                                                                                                                                ], "data":{ "$area": 80 } },
+                                                                                                                                { "id": "1759", "name": "CvSTART->", "depth":32, "children":[ 
+                                                                                                                                    { "id": "1760", "name": "SVOP->", "depth":33, "children":[ 
+                                                                                                                                        { "id": "1761", "name": "SV(PV)", "depth":34, "children":[ 
+                                                                                                                                        ], "data":{ "$area": 64 } },
+                                                                                                                                    ], "data":{ "$area": 64 } },
+                                                                                                                                    { "id": "1762", "name": "PM_GETRE->", "depth":33, "children":[ 
+                                                                                                                                        { "id": "1763", "name": "regex_size", "depth":34, "children":[ 
+                                                                                                                                        ], "data":{ "$area": 160 } },
+                                                                                                                                    ], "data":{ "$area": 160 } },
+                                                                                                                                    { "id": "1764", "name": "SVOP->", "depth":33, "children":[ 
+                                                                                                                                        { "id": "1765", "name": "SV(PV)", "depth":34, "children":[ 
+                                                                                                                                        ], "data":{ "$area": 56 } },
+                                                                                                                                    ], "data":{ "$area": 56 } },
+                                                                                                                                    { "id": "1766", "name": "SVOP->", "depth":33, "children":[ 
+                                                                                                                                        { "id": "1767", "name": "SV(IV)", "depth":34, "children":[ 
+                                                                                                                                        ], "data":{ "$area": 24 } },
+                                                                                                                                    ], "data":{ "$area": 24 } },
+                                                                                                                                    { "id": "1768", "name": "SVOP->", "depth":33, "children":[ 
+                                                                                                                                        { "id": "1769", "name": "SV(IV)", "depth":34, "children":[ 
+                                                                                                                                        ], "data":{ "$area": 24 } },
+                                                                                                                                    ], "data":{ "$area": 24 } },
+                                                                                                                                    { "id": "1770", "name": "SVOP->", "depth":33, "children":[ 
+                                                                                                                                        { "id": "1771", "name": "SV(PV)", "depth":34, "children":[ 
+                                                                                                                                        ], "data":{ "$area": 72 } },
+                                                                                                                                    ], "data":{ "$area": 72 } },
+                                                                                                                                ], "data":{ "$area": 2064 } },
+                                                                                                                            ], "data":{ "$area": 2272 } },
+                                                                                                                        ], "data":{ "$area": 2272 } },
+                                                                                                                    ], "data":{ "$area": 2312 } },
+                                                                                                                ], "data":{ "$area": 2312 } },
+                                                                                                            ], "data":{ "$area": 2464 } },
+                                                                                                        ], "data":{ "$area": 2464 } },
+                                                                                                    ], "data":{ "$area": 3192 } },
+                                                                                                ], "data":{ "$area": 3400 } },
+                                                                                            ], "data":{ "$area": 3400 } },
+                                                                                        ], "data":{ "$area": 3440 } },
+                                                                                    ], "data":{ "$area": 3440 } },
+                                                                                ], "data":{ "$area": 3592 } },
+                                                                            ], "data":{ "$area": 3592 } },
+                                                                            { "id": "1772", "name": "PM_GETRE->", "depth":19, "children":[ 
+                                                                                { "id": "1773", "name": "regex_size", "depth":20, "children":[ 
+                                                                                ], "data":{ "$area": 160 } },
+                                                                            ], "data":{ "$area": 160 } },
+                                                                            { "id": "1774", "name": "SVOP->", "depth":19, "children":[ 
+                                                                                { "id": "1775", "name": "SV(IV)", "depth":20, "children":[ 
+                                                                                ], "data":{ "$area": 24 } },
+                                                                            ], "data":{ "$area": 24 } },
+                                                                            { "id": "1776", "name": "PM_GETRE->", "depth":19, "children":[ 
+                                                                                { "id": "1777", "name": "regex_size", "depth":20, "children":[ 
+                                                                                ], "data":{ "$area": 160 } },
+                                                                            ], "data":{ "$area": 160 } },
+                                                                            { "id": "1778", "name": "SVOP->", "depth":19, "children":[ 
+                                                                                { "id": "1779", "name": "SV(IV)", "depth":20, "children":[ 
+                                                                                ], "data":{ "$area": 24 } },
+                                                                            ], "data":{ "$area": 24 } },
+                                                                            { "id": "1780", "name": "PM_GETRE->", "depth":19, "children":[ 
+                                                                                { "id": "1781", "name": "regex_size", "depth":20, "children":[ 
+                                                                                ], "data":{ "$area": 160 } },
+                                                                            ], "data":{ "$area": 160 } },
+                                                                            { "id": "1782", "name": "SVOP->", "depth":19, "children":[ 
+                                                                                { "id": "1783", "name": "SV(PV)", "depth":20, "children":[ 
+                                                                                ], "data":{ "$area": 56 } },
+                                                                            ], "data":{ "$area": 56 } },
+                                                                            { "id": "1784", "name": "SVOP->", "depth":19, "children":[ 
+                                                                                { "id": "1785", "name": "SV(PV)", "depth":20, "children":[ 
+                                                                                ], "data":{ "$area": 56 } },
+                                                                            ], "data":{ "$area": 56 } },
+                                                                            { "id": "1786", "name": "SVOP->", "depth":19, "children":[ 
+                                                                                { "id": "1787", "name": "SV(PVGV)", "depth":20, "children":[ 
+                                                                                    { "id": "1788", "name": "gp_hv->", "depth":21, "children":[ 
+                                                                                        { "id": "1789", "name": "SV(PVHV)", "depth":22, "children":[ 
+                                                                                            { "id": "1790", "name": "HvARRAY->", "depth":23, "children":[ 
+                                                                                            ], "data":{ "$area": 96 } },
+                                                                                        ], "data":{ "$area": 216 } },
+                                                                                    ], "data":{ "$area": 216 } },
+                                                                                ], "data":{ "$area": 368 } },
+                                                                            ], "data":{ "$area": 368 } },
+                                                                            { "id": "1791", "name": "SVOP->", "depth":19, "children":[ 
+                                                                                { "id": "1792", "name": "SV(IV)", "depth":20, "children":[ 
+                                                                                ], "data":{ "$area": 24 } },
+                                                                            ], "data":{ "$area": 24 } },
+                                                                            { "id": "1793", "name": "SVOP->", "depth":19, "children":[ 
+                                                                                { "id": "1794", "name": "SV(PVGV)", "depth":20, "children":[ 
+                                                                                    { "id": "1795", "name": "gp_sv->", "depth":21, "children":[ 
+                                                                                        { "id": "1796", "name": "SV(IV)", "depth":22, "children":[ 
+                                                                                        ], "data":{ "$area": 24 } },
+                                                                                    ], "data":{ "$area": 24 } },
+                                                                                ], "data":{ "$area": 176 } },
+                                                                            ], "data":{ "$area": 176 } },
+                                                                            { "id": "1797", "name": "SVOP->", "depth":19, "children":[ 
+                                                                                { "id": "1798", "name": "SV(PVGV)", "depth":20, "children":[ 
+                                                                                    { "id": "1799", "name": "gp_sv->", "depth":21, "children":[ 
+                                                                                        { "id": "1800", "name": "SV(IV)", "depth":22, "children":[ 
+                                                                                        ], "data":{ "$area": 24 } },
+                                                                                    ], "data":{ "$area": 24 } },
+                                                                                ], "data":{ "$area": 176 } },
+                                                                            ], "data":{ "$area": 176 } },
+                                                                            { "id": "1801", "name": "SVOP->", "depth":19, "children":[ 
+                                                                                { "id": "1802", "name": "SV(PV)", "depth":20, "children":[ 
+                                                                                ], "data":{ "$area": 56 } },
+                                                                            ], "data":{ "$area": 56 } },
+                                                                            { "id": "1803", "name": "SVOP->", "depth":19, "children":[ 
+                                                                                { "id": "1804", "name": "SV(PV)", "depth":20, "children":[ 
+                                                                                ], "data":{ "$area": 40 } },
+                                                                            ], "data":{ "$area": 40 } },
+                                                                            { "id": "1805", "name": "SVOP->", "depth":19, "children":[ 
+                                                                                { "id": "1806", "name": "SV(PV)", "depth":20, "children":[ 
+                                                                                ], "data":{ "$area": 56 } },
+                                                                            ], "data":{ "$area": 56 } },
+                                                                            { "id": "1807", "name": "SVOP->", "depth":19, "children":[ 
+                                                                                { "id": "1808", "name": "SV(PV)", "depth":20, "children":[ 
+                                                                                ], "data":{ "$area": 49 } },
+                                                                            ], "data":{ "$area": 49 } },
+                                                                            { "id": "1809", "name": "SVOP->", "depth":19, "children":[ 
+                                                                                { "id": "1810", "name": "SV(PV)", "depth":20, "children":[ 
+                                                                                ], "data":{ "$area": 56 } },
+                                                                            ], "data":{ "$area": 56 } },
+                                                                            { "id": "1811", "name": "SVOP->", "depth":19, "children":[ 
+                                                                                { "id": "1812", "name": "SV(PV)", "depth":20, "children":[ 
+                                                                                ], "data":{ "$area": 56 } },
+                                                                            ], "data":{ "$area": 56 } },
+                                                                            { "id": "1813", "name": "SVOP->", "depth":19, "children":[ 
+                                                                                { "id": "1814", "name": "SV(PV)", "depth":20, "children":[ 
+                                                                                ], "data":{ "$area": 56 } },
+                                                                            ], "data":{ "$area": 56 } },
+                                                                            { "id": "1815", "name": "SVOP->", "depth":19, "children":[ 
+                                                                                { "id": "1816", "name": "SV(PVGV)", "depth":20, "children":[ 
+                                                                                    { "id": "1817", "name": "gp_sv->", "depth":21, "children":[ 
+                                                                                        { "id": "1818", "name": "SV(IV)", "depth":22, "children":[ 
+                                                                                        ], "data":{ "$area": 24 } },
+                                                                                    ], "data":{ "$area": 24 } },
+                                                                                ], "data":{ "$area": 176 } },
+                                                                            ], "data":{ "$area": 176 } },
+                                                                        ], "data":{ "$area": 22247 } },
+                                                                    ], "data":{ "$area": 24447 } },
+                                                                ], "data":{ "$area": 24447 } },
+                                                            ], "data":{ "$area": 24599 } },
+                                                        ], "data":{ "$area": 24599 } },
+                                                        { "id": "1819", "name": "hent_hek->", "depth":14, "children":[ 
+                                                        ], "data":{ "$area": 38 } },
+                                                        { "id": "1820", "name": "HeVAL->", "depth":14, "children":[ 
+                                                            { "id": "1821", "name": "SV(PVGV)", "depth":15, "children":[ 
+                                                                { "id": "1822", "name": "UNKNOWN(0,0x0)", "depth":16, "children":[ 
+                                                                    { "id": "1823", "name": "MAGIC(<)", "depth":17, "children":[ 
+                                                                        { "id": "1824", "name": "mg_obj->", "depth":18, "children":[ 
+                                                                            { "id": "1825", "name": "SV(PVCV)", "depth":19, "children":[ 
+                                                                            ], "data":{ "$area": 128 } },
+                                                                        ], "data":{ "$area": 128 } },
+                                                                    ], "data":{ "$area": 168 } },
+                                                                ], "data":{ "$area": 168 } },
+                                                            ], "data":{ "$area": 320 } },
+                                                        ], "data":{ "$area": 320 } },
+                                                        { "id": "1826", "name": "HeVAL->", "depth":14, "children":[ 
+                                                            { "id": "1827", "name": "SV(PVGV)", "depth":15, "children":[ 
+                                                                { "id": "1828", "name": "gp_av->", "depth":16, "children":[ 
+                                                                    { "id": "1829", "name": "SV(PVAV)", "depth":17, "children":[ 
+                                                                    ], "data":{ "$area": 64 } },
+                                                                ], "data":{ "$area": 64 } },
+                                                            ], "data":{ "$area": 216 } },
+                                                        ], "data":{ "$area": 216 } },
+                                                        { "id": "1830", "name": "HeVAL->", "depth":14, "children":[ 
+                                                            { "id": "1831", "name": "SV(PVGV)", "depth":15, "children":[ 
+                                                                { "id": "1832", "name": "gp_av->", "depth":16, "children":[ 
+                                                                    { "id": "1833", "name": "SV(PVAV)", "depth":17, "children":[ 
+                                                                        { "id": "1834", "name": "UNKNOWN(0,0x0)", "depth":18, "children":[ 
+                                                                            { "id": "1835", "name": "MAGIC(I)", "depth":19, "children":[ 
+                                                                            ], "data":{ "$area": 40 } },
+                                                                        ], "data":{ "$area": 40 } },
+                                                                        { "id": "1836", "name": "AVelem->", "depth":18, "children":[ 
+                                                                            { "id": "1837", "name": "SV(PVMG)", "depth":19, "children":[ 
+                                                                                { "id": "1838", "name": "UNKNOWN(0,0x0)", "depth":20, "children":[ 
+                                                                                    { "id": "1839", "name": "MAGIC(i)", "depth":21, "children":[ 
+                                                                                    ], "data":{ "$area": 40 } },
+                                                                                ], "data":{ "$area": 40 } },
+                                                                            ], "data":{ "$area": 128 } },
+                                                                        ], "data":{ "$area": 128 } },
+                                                                    ], "data":{ "$area": 264 } },
+                                                                ], "data":{ "$area": 264 } },
+                                                            ], "data":{ "$area": 416 } },
+                                                        ], "data":{ "$area": 416 } },
+                                                        { "id": "1840", "name": "hent_hek->", "depth":14, "children":[ 
+                                                        ], "data":{ "$area": 38 } },
+                                                        { "id": "1841", "name": "HeVAL->", "depth":14, "children":[ 
+                                                            { "id": "1842", "name": "SV(PVGV)", "depth":15, "children":[ 
+                                                                { "id": "1843", "name": "gp_sv->", "depth":16, "children":[ 
+                                                                    { "id": "1844", "name": "SV(IV)", "depth":17, "children":[ 
+                                                                    ], "data":{ "$area": 24 } },
+                                                                ], "data":{ "$area": 24 } },
+                                                            ], "data":{ "$area": 176 } },
+                                                        ], "data":{ "$area": 176 } },
+                                                        { "id": "1845", "name": "HeVAL->", "depth":14, "children":[ 
+                                                            { "id": "1846", "name": "SV(PVGV)", "depth":15, "children":[ 
+                                                                { "id": "1847", "name": "UNKNOWN(0,0x0)", "depth":16, "children":[ 
+                                                                    { "id": "1848", "name": "MAGIC(<)", "depth":17, "children":[ 
+                                                                    ], "data":{ "$area": 40 } },
+                                                                ], "data":{ "$area": 40 } },
+                                                            ], "data":{ "$area": 192 } },
+                                                        ], "data":{ "$area": 192 } },
+                                                        { "id": "1849", "name": "HeVAL->", "depth":14, "children":[ 
+                                                            { "id": "1850", "name": "SV(PVGV)", "depth":15, "children":[ 
+                                                                { "id": "1851", "name": "gp_sv->", "depth":16, "children":[ 
+                                                                    { "id": "1852", "name": "SV(PV)", "depth":17, "children":[ 
+                                                                    ], "data":{ "$area": 56 } },
+                                                                ], "data":{ "$area": 56 } },
+                                                            ], "data":{ "$area": 208 } },
+                                                        ], "data":{ "$area": 208 } },
+                                                        { "id": "1853", "name": "HeVAL->", "depth":14, "children":[ 
+                                                            { "id": "1854", "name": "SV(PVGV)", "depth":15, "children":[ 
+                                                            ], "data":{ "$area": 152 } },
+                                                        ], "data":{ "$area": 152 } },
+                                                        { "id": "1855", "name": "isa->", "depth":14, "children":[ 
+                                                            { "id": "1856", "name": "SV(PVHV)", "depth":15, "children":[ 
+                                                                { "id": "1857", "name": "HvARRAY->", "depth":16, "children":[ 
+                                                                ], "data":{ "$area": 72 } },
+                                                            ], "data":{ "$area": 192 } },
+                                                        ], "data":{ "$area": 192 } },
+                                                        { "id": "1858", "name": "mro_linear_current->", "depth":14, "children":[ 
+                                                            { "id": "1859", "name": "SV(PVAV)", "depth":15, "children":[ 
+                                                                { "id": "1860", "name": "AVelem->", "depth":16, "children":[ 
+                                                                    { "id": "1861", "name": "SV(PV)", "depth":17, "children":[ 
+                                                                    ], "data":{ "$area": 40 } },
+                                                                ], "data":{ "$area": 40 } },
+                                                                { "id": "1862", "name": "AVelem->", "depth":16, "children":[ 
+                                                                    { "id": "1863", "name": "SV(PV)", "depth":17, "children":[ 
+                                                                    ], "data":{ "$area": 40 } },
+                                                                ], "data":{ "$area": 40 } },
+                                                            ], "data":{ "$area": 176 } },
+                                                        ], "data":{ "$area": 176 } },
+                                                    ], "data":{ "$area": 29566 } },
+                                                ], "data":{ "$area": 29750 } },
+                                            ], "data":{ "$area": 29750 } },
+                                        ], "data":{ "$area": 29902 } },
+                                    ], "data":{ "$area": 29902 } },
+                                    { "id": "1864", "name": "HvNAME_HEK->", "depth":9, "children":[ 
+                                    ], "data":{ "$area": 39 } },
+                                ], "data":{ "$area": 30045 } },
+                            ], "data":{ "$area": 30165 } },
+                        ], "data":{ "$area": 30165 } },
+                    ], "data":{ "$area": 30402 } },
+                ], "data":{ "$area": 30402 } },
+                { "id": "1865", "name": "hent_hek->", "depth":4, "children":[ 
+                ], "data":{ "$area": 42 } },
+                { "id": "1866", "name": "HeVAL->", "depth":4, "children":[ 
+                    { "id": "1867", "name": "SV(PVGV)", "depth":5, "children":[ 
+                        { "id": "1868", "name": "gp_hv->", "depth":6, "children":[ 
+                            { "id": "1869", "name": "SV(PVHV)", "depth":7, "children":[ 
+                                { "id": "1870", "name": "HvARRAY->", "depth":8, "children":[ 
+                                    { "id": "1871", "name": "hent_hek->", "depth":9, "children":[ 
+                                    ], "data":{ "$area": 42 } },
+                                    { "id": "1872", "name": "HeVAL->", "depth":9, "children":[ 
+                                        { "id": "1873", "name": "SV(PVGV)", "depth":10, "children":[ 
+                                            { "id": "1874", "name": "UNKNOWN(0,0x0)", "depth":11, "children":[ 
+                                                { "id": "1875", "name": "MAGIC(<)", "depth":12, "children":[ 
+                                                    { "id": "1876", "name": "mg_obj->", "depth":13, "children":[ 
+                                                        { "id": "1877", "name": "SV(PVCV)", "depth":14, "children":[ 
+                                                            { "id": "1878", "name": "CvPADLIST->", "depth":15, "children":[ 
+                                                                { "id": "1879", "name": "SV(PVAV)", "depth":16, "children":[ 
+                                                                ], "data":{ "$area": 80 } },
+                                                            ], "data":{ "$area": 80 } },
+                                                            { "id": "1880", "name": "CvOUTSIDE->", "depth":15, "children":[ 
+                                                                { "id": "1881", "name": "SV(PVCV)", "depth":16, "children":[ 
+                                                                    { "id": "1882", "name": "CvPADLIST->", "depth":17, "children":[ 
+                                                                        { "id": "1883", "name": "SV(PVAV)", "depth":18, "children":[ 
+                                                                        ], "data":{ "$area": 80 } },
+                                                                    ], "data":{ "$area": 80 } },
+                                                                ], "data":{ "$area": 208 } },
+                                                            ], "data":{ "$area": 208 } },
+                                                            { "id": "1884", "name": "CvSTART->", "depth":15, "children":[ 
+                                                                { "id": "1885", "name": "SVOP->", "depth":16, "children":[ 
+                                                                    { "id": "1886", "name": "SV(PVGV)", "depth":17, "children":[ 
+                                                                        { "id": "1887", "name": "UNKNOWN(0,0x0)", "depth":18, "children":[ 
+                                                                            { "id": "1888", "name": "MAGIC(<)", "depth":19, "children":[ 
+                                                                                { "id": "1889", "name": "mg_obj->", "depth":20, "children":[ 
+                                                                                    { "id": "1890", "name": "SV(PVCV)", "depth":21, "children":[ 
+                                                                                        { "id": "1891", "name": "CvPADLIST->", "depth":22, "children":[ 
+                                                                                            { "id": "1892", "name": "SV(PVAV)", "depth":23, "children":[ 
+                                                                                            ], "data":{ "$area": 80 } },
+                                                                                        ], "data":{ "$area": 80 } },
+                                                                                        { "id": "1893", "name": "CvSTART->", "depth":22, "children":[ 
+                                                                                            { "id": "1894", "name": "cop_filegv->", "depth":23, "children":[ 
+                                                                                                { "id": "1895", "name": "SV(PVGV)", "depth":24, "children":[ 
+                                                                                                    { "id": "1896", "name": "GvNAME_HEK->", "depth":25, "children":[ 
+                                                                                                    ], "data":{ "$area": 102 } },
+                                                                                                    { "id": "1897", "name": "gp_sv->", "depth":25, "children":[ 
+                                                                                                        { "id": "1898", "name": "SV(PV)", "depth":26, "children":[ 
+                                                                                                        ], "data":{ "$area": 120 } },
+                                                                                                    ], "data":{ "$area": 120 } },
+                                                                                                ], "data":{ "$area": 374 } },
+                                                                                            ], "data":{ "$area": 374 } },
+                                                                                            { "id": "1899", "name": "SVOP->", "depth":23, "children":[ 
+                                                                                                { "id": "1900", "name": "SV(PV)", "depth":24, "children":[ 
+                                                                                                ], "data":{ "$area": 42 } },
+                                                                                            ], "data":{ "$area": 42 } },
+                                                                                            { "id": "1901", "name": "SVOP->", "depth":23, "children":[ 
+                                                                                                { "id": "1902", "name": "SV(PV)", "depth":24, "children":[ 
+                                                                                                ], "data":{ "$area": 66 } },
+                                                                                            ], "data":{ "$area": 66 } },
+                                                                                            { "id": "1903", "name": "SVOP->", "depth":23, "children":[ 
+                                                                                                { "id": "1904", "name": "SV(PV)", "depth":24, "children":[ 
+                                                                                                ], "data":{ "$area": 56 } },
+                                                                                            ], "data":{ "$area": 56 } },
+                                                                                            { "id": "1905", "name": "SVOP->", "depth":23, "children":[ 
+                                                                                                { "id": "1906", "name": "SV(IV)", "depth":24, "children":[ 
+                                                                                                ], "data":{ "$area": 24 } },
+                                                                                            ], "data":{ "$area": 24 } },
+                                                                                            { "id": "1907", "name": "SVOP->", "depth":23, "children":[ 
+                                                                                                { "id": "1908", "name": "SV(PVGV)", "depth":24, "children":[ 
+                                                                                                    { "id": "1909", "name": "GvNAME_HEK->", "depth":25, "children":[ 
+                                                                                                    ], "data":{ "$area": 35 } },
+                                                                                                    { "id": "1910", "name": "gp_sv->", "depth":25, "children":[ 
+                                                                                                        { "id": "1911", "name": "SV(PVMG)", "depth":26, "children":[ 
+                                                                                                            { "id": "1912", "name": "UNKNOWN(0,0x0)", "depth":27, "children":[ 
+                                                                                                                { "id": "1913", "name": "MAGIC(0)", "depth":28, "children":[ 
+                                                                                                                ], "data":{ "$area": 41 } },
+                                                                                                            ], "data":{ "$area": 41 } },
+                                                                                                        ], "data":{ "$area": 113 } },
+                                                                                                    ], "data":{ "$area": 113 } },
+                                                                                                    { "id": "1914", "name": "gp_hv->", "depth":25, "children":[ 
+                                                                                                        { "id": "1915", "name": "SV(PVHV)", "depth":26, "children":[ 
+                                                                                                            { "id": "1916", "name": "UNKNOWN(0,0x0)", "depth":27, "children":[ 
+                                                                                                                { "id": "1917", "name": "MAGIC(H)", "depth":28, "children":[ 
+                                                                                                                ], "data":{ "$area": 40 } },
+                                                                                                            ], "data":{ "$area": 40 } },
+                                                                                                        ], "data":{ "$area": 160 } },
+                                                                                                    ], "data":{ "$area": 160 } },
+                                                                                                ], "data":{ "$area": 460 } },
+                                                                                            ], "data":{ "$area": 460 } },
+                                                                                            { "id": "1918", "name": "SVOP->", "depth":23, "children":[ 
+                                                                                                { "id": "1919", "name": "SV(IV)", "depth":24, "children":[ 
+                                                                                                ], "data":{ "$area": 24 } },
+                                                                                            ], "data":{ "$area": 24 } },
+                                                                                        ], "data":{ "$area": 4934 } },
+                                                                                    ], "data":{ "$area": 5142 } },
+                                                                                ], "data":{ "$area": 5142 } },
+                                                                            ], "data":{ "$area": 5182 } },
+                                                                        ], "data":{ "$area": 5182 } },
+                                                                        { "id": "1920", "name": "GvNAME_HEK->", "depth":18, "children":[ 
+                                                                        ], "data":{ "$area": 38 } },
+                                                                    ], "data":{ "$area": 5372 } },
+                                                                ], "data":{ "$area": 5372 } },
+                                                            ], "data":{ "$area": 6348 } },
+                                                        ], "data":{ "$area": 6764 } },
+                                                    ], "data":{ "$area": 6764 } },
+                                                ], "data":{ "$area": 6804 } },
+                                            ], "data":{ "$area": 6804 } },
+                                        ], "data":{ "$area": 6956 } },
+                                    ], "data":{ "$area": 6956 } },
+                                    { "id": "1921", "name": "HeVAL->", "depth":9, "children":[ 
+                                        { "id": "1922", "name": "SV(PVGV)", "depth":10, "children":[ 
+                                            { "id": "1923", "name": "gp_sv->", "depth":11, "children":[ 
+                                                { "id": "1924", "name": "SV(PV)", "depth":12, "children":[ 
+                                                ], "data":{ "$area": 56 } },
+                                            ], "data":{ "$area": 56 } },
+                                        ], "data":{ "$area": 208 } },
+                                    ], "data":{ "$area": 208 } },
+                                    { "id": "1925", "name": "HeVAL->", "depth":9, "children":[ 
+                                        { "id": "1926", "name": "SV(PVGV)", "depth":10, "children":[ 
+                                            { "id": "1927", "name": "UNKNOWN(0,0x0)", "depth":11, "children":[ 
+                                                { "id": "1928", "name": "MAGIC(<)", "depth":12, "children":[ 
+                                                    { "id": "1929", "name": "mg_obj->", "depth":13, "children":[ 
+                                                        { "id": "1930", "name": "SV(PVCV)", "depth":14, "children":[ 
+                                                            { "id": "1931", "name": "CvPADLIST->", "depth":15, "children":[ 
+                                                                { "id": "1932", "name": "SV(PVAV)", "depth":16, "children":[ 
+                                                                ], "data":{ "$area": 80 } },
+                                                            ], "data":{ "$area": 80 } },
+                                                            { "id": "1933", "name": "CvSTART->", "depth":15, "children":[ 
+                                                            ], "data":{ "$area": 928 } },
+                                                        ], "data":{ "$area": 1136 } },
+                                                    ], "data":{ "$area": 1136 } },
+                                                ], "data":{ "$area": 1176 } },
+                                            ], "data":{ "$area": 1176 } },
+                                        ], "data":{ "$area": 1328 } },
+                                    ], "data":{ "$area": 1328 } },
+                                    { "id": "1934", "name": "HvNAME_HEK->", "depth":9, "children":[ 
+                                    ], "data":{ "$area": 40 } },
+                                ], "data":{ "$area": 8758 } },
+                            ], "data":{ "$area": 8878 } },
+                        ], "data":{ "$area": 8878 } },
+                    ], "data":{ "$area": 9030 } },
+                ], "data":{ "$area": 9030 } },
+                { "id": "1935", "name": "hent_hek->", "depth":4, "children":[ 
+                ], "data":{ "$area": 39 } },
+                { "id": "1936", "name": "HeVAL->", "depth":4, "children":[ 
+                    { "id": "1937", "name": "SV(PVGV)", "depth":5, "children":[ 
+                        { "id": "1938", "name": "gp_hv->", "depth":6, "children":[ 
+                            { "id": "1939", "name": "SV(PVHV)", "depth":7, "children":[ 
+                                { "id": "1940", "name": "HvARRAY->", "depth":8, "children":[ 
+                                    { "id": "1941", "name": "HeVAL->", "depth":9, "children":[ 
+                                        { "id": "1942", "name": "SV(PVGV)", "depth":10, "children":[ 
+                                        ], "data":{ "$area": 152 } },
+                                    ], "data":{ "$area": 152 } },
+                                    { "id": "1943", "name": "hent_hek->", "depth":9, "children":[ 
+                                    ], "data":{ "$area": 43 } },
+                                    { "id": "1944", "name": "HeVAL->", "depth":9, "children":[ 
+                                        { "id": "1945", "name": "SV(PVGV)", "depth":10, "children":[ 
+                                            { "id": "1946", "name": "UNKNOWN(0,0x0)", "depth":11, "children":[ 
+                                                { "id": "1947", "name": "MAGIC(<)", "depth":12, "children":[ 
+                                                    { "id": "1948", "name": "mg_obj->", "depth":13, "children":[ 
+                                                        { "id": "1949", "name": "SV(PVCV)", "depth":14, "children":[ 
+                                                            { "id": "1950", "name": "CvPADLIST->", "depth":15, "children":[ 
+                                                                { "id": "1951", "name": "SV(PVAV)", "depth":16, "children":[ 
+                                                                ], "data":{ "$area": 80 } },
+                                                            ], "data":{ "$area": 80 } },
+                                                            { "id": "1952", "name": "CvOUTSIDE->", "depth":15, "children":[ 
+                                                                { "id": "1953", "name": "SV(PVCV)", "depth":16, "children":[ 
+                                                                    { "id": "1954", "name": "CvPADLIST->", "depth":17, "children":[ 
+                                                                        { "id": "1955", "name": "SV(PVAV)", "depth":18, "children":[ 
+                                                                        ], "data":{ "$area": 80 } },
+                                                                    ], "data":{ "$area": 80 } },
+                                                                ], "data":{ "$area": 208 } },
+                                                            ], "data":{ "$area": 208 } },
+                                                            { "id": "1956", "name": "CvSTART->", "depth":15, "children":[ 
+                                                                { "id": "1957", "name": "SVOP->", "depth":16, "children":[ 
+                                                                    { "id": "1958", "name": "SV(PV)", "depth":17, "children":[ 
+                                                                        { "id": "1959", "name": "SvSHARED_HEK_FROM_PV->", "depth":18, "children":[ 
+                                                                        ], "data":{ "$area": 37 } },
+                                                                    ], "data":{ "$area": 77 } },
+                                                                ], "data":{ "$area": 77 } },
+                                                                { "id": "1960", "name": "SVOP->", "depth":16, "children":[ 
+                                                                    { "id": "1961", "name": "SV(PVGV)", "depth":17, "children":[ 
+                                                                        { "id": "1962", "name": "GvNAME_HEK->", "depth":18, "children":[ 
+                                                                        ], "data":{ "$area": 37 } },
+                                                                        { "id": "1963", "name": "gp_hv->", "depth":18, "children":[ 
+                                                                            { "id": "1964", "name": "SV(PVHV)", "depth":19, "children":[ 
+                                                                                { "id": "1965", "name": "UNKNOWN(0,0x0)", "depth":20, "children":[ 
+                                                                                    { "id": "1966", "name": "MAGIC(E)", "depth":21, "children":[ 
+                                                                                    ], "data":{ "$area": 40 } },
+                                                                                    { "id": "1967", "name": "hent_hek->", "depth":21, "children":[ 
+                                                                                    ], "data":{ "$area": 51 } },
+                                                                                    { "id": "1968", "name": "hent_hek->", "depth":21, "children":[ 
+                                                                                    ], "data":{ "$area": 46 } },
+                                                                                    { "id": "1969", "name": "hent_hek->", "depth":21, "children":[ 
+                                                                                    ], "data":{ "$area": 58 } },
+                                                                                    { "id": "1970", "name": "hent_hek->", "depth":21, "children":[ 
+                                                                                    ], "data":{ "$area": 41 } },
+                                                                                    { "id": "1971", "name": "hent_hek->", "depth":21, "children":[ 
+                                                                                    ], "data":{ "$area": 40 } },
+                                                                                    { "id": "1972", "name": "hent_hek->", "depth":21, "children":[ 
+                                                                                    ], "data":{ "$area": 50 } },
+                                                                                    { "id": "1973", "name": "hent_hek->", "depth":21, "children":[ 
+                                                                                    ], "data":{ "$area": 43 } },
+                                                                                    { "id": "1974", "name": "hent_hek->", "depth":21, "children":[ 
+                                                                                    ], "data":{ "$area": 44 } },
+                                                                                    { "id": "1975", "name": "hent_hek->", "depth":21, "children":[ 
+                                                                                    ], "data":{ "$area": 47 } },
+                                                                                    { "id": "1976", "name": "hent_hek->", "depth":21, "children":[ 
+                                                                                    ], "data":{ "$area": 60 } },
+                                                                                    { "id": "1977", "name": "hent_hek->", "depth":21, "children":[ 
+                                                                                    ], "data":{ "$area": 138 } },
+                                                                                    { "id": "1978", "name": "hent_hek->", "depth":21, "children":[ 
+                                                                                    ], "data":{ "$area": 47 } },
+                                                                                    { "id": "1979", "name": "hent_hek->", "depth":21, "children":[ 
+                                                                                    ], "data":{ "$area": 38 } },
+                                                                                    { "id": "1980", "name": "hent_hek->", "depth":21, "children":[ 
+                                                                                    ], "data":{ "$area": 38 } },
+                                                                                    { "id": "1981", "name": "hent_hek->", "depth":21, "children":[ 
+                                                                                    ], "data":{ "$area": 41 } },
+                                                                                    { "id": "1982", "name": "hent_hek->", "depth":21, "children":[ 
+                                                                                    ], "data":{ "$area": 39 } },
+                                                                                    { "id": "1983", "name": "hent_hek->", "depth":21, "children":[ 
+                                                                                    ], "data":{ "$area": 50 } },
+                                                                                    { "id": "1984", "name": "hent_hek->", "depth":21, "children":[ 
+                                                                                    ], "data":{ "$area": 46 } },
+                                                                                    { "id": "1985", "name": "hent_hek->", "depth":21, "children":[ 
+                                                                                    ], "data":{ "$area": 54 } },
+                                                                                    { "id": "1986", "name": "hent_hek->", "depth":21, "children":[ 
+                                                                                    ], "data":{ "$area": 38 } },
+                                                                                    { "id": "1987", "name": "hent_hek->", "depth":21, "children":[ 
+                                                                                    ], "data":{ "$area": 44 } },
+                                                                                    { "id": "1988", "name": "hent_hek->", "depth":21, "children":[ 
+                                                                                    ], "data":{ "$area": 42 } },
+                                                                                    { "id": "1989", "name": "hent_hek->", "depth":21, "children":[ 
+                                                                                    ], "data":{ "$area": 39 } },
+                                                                                    { "id": "1990", "name": "hent_hek->", "depth":21, "children":[ 
+                                                                                    ], "data":{ "$area": 42 } },
+                                                                                    { "id": "1991", "name": "hent_hek->", "depth":21, "children":[ 
+                                                                                    ], "data":{ "$area": 47 } },
+                                                                                    { "id": "1992", "name": "hent_hek->", "depth":21, "children":[ 
+                                                                                    ], "data":{ "$area": 38 } },
+                                                                                    { "id": "1993", "name": "hent_hek->", "depth":21, "children":[ 
+                                                                                    ], "data":{ "$area": 47 } },
+                                                                                    { "id": "1994", "name": "hent_hek->", "depth":21, "children":[ 
+                                                                                    ], "data":{ "$area": 57 } },
+                                                                                    { "id": "1995", "name": "hent_hek->", "depth":21, "children":[ 
+                                                                                    ], "data":{ "$area": 41 } },
+                                                                                    { "id": "1996", "name": "hent_hek->", "depth":21, "children":[ 
+                                                                                    ], "data":{ "$area": 41 } },
+                                                                                    { "id": "1997", "name": "hent_hek->", "depth":21, "children":[ 
+                                                                                    ], "data":{ "$area": 55 } },
+                                                                                    { "id": "1998", "name": "hent_hek->", "depth":21, "children":[ 
+                                                                                    ], "data":{ "$area": 46 } },
+                                                                                    { "id": "1999", "name": "hent_hek->", "depth":21, "children":[ 
+                                                                                    ], "data":{ "$area": 35 } },
+                                                                                    { "id": "2000", "name": "hent_hek->", "depth":21, "children":[ 
+                                                                                    ], "data":{ "$area": 40 } },
+                                                                                    { "id": "2001", "name": "hent_hek->", "depth":21, "children":[ 
+                                                                                    ], "data":{ "$area": 56 } },
+                                                                                    { "id": "2002", "name": "hent_hek->", "depth":21, "children":[ 
+                                                                                    ], "data":{ "$area": 44 } },
+                                                                                    { "id": "2003", "name": "hent_hek->", "depth":21, "children":[ 
+                                                                                    ], "data":{ "$area": 57 } },
+                                                                                    { "id": "2004", "name": "hent_hek->", "depth":21, "children":[ 
+                                                                                    ], "data":{ "$area": 51 } },
+                                                                                    { "id": "2005", "name": "hent_hek->", "depth":21, "children":[ 
+                                                                                    ], "data":{ "$area": 37 } },
+                                                                                    { "id": "2006", "name": "hent_hek->", "depth":21, "children":[ 
+                                                                                    ], "data":{ "$area": 47 } },
+                                                                                    { "id": "2007", "name": "hent_hek->", "depth":21, "children":[ 
+                                                                                    ], "data":{ "$area": 48 } },
+                                                                                    { "id": "2008", "name": "hent_hek->", "depth":21, "children":[ 
+                                                                                    ], "data":{ "$area": 49 } },
+                                                                                    { "id": "2009", "name": "hent_hek->", "depth":21, "children":[ 
+                                                                                    ], "data":{ "$area": 43 } },
+                                                                                    { "id": "2010", "name": "hent_hek->", "depth":21, "children":[ 
+                                                                                    ], "data":{ "$area": 39 } },
+                                                                                    { "id": "2011", "name": "hent_hek->", "depth":21, "children":[ 
+                                                                                    ], "data":{ "$area": 40 } },
+                                                                                    { "id": "2012", "name": "hent_hek->", "depth":21, "children":[ 
+                                                                                    ], "data":{ "$area": 45 } },
+                                                                                ], "data":{ "$area": 3419 } },
+                                                                            ], "data":{ "$area": 3987 } },
+                                                                        ], "data":{ "$area": 3987 } },
+                                                                    ], "data":{ "$area": 4176 } },
+                                                                ], "data":{ "$area": 4176 } },
+                                                                { "id": "2013", "name": "cop_filegv->", "depth":16, "children":[ 
+                                                                    { "id": "2014", "name": "SV(PVGV)", "depth":17, "children":[ 
+                                                                        { "id": "2015", "name": "GvNAME_HEK->", "depth":18, "children":[ 
+                                                                        ], "data":{ "$area": 113 } },
+                                                                        { "id": "2016", "name": "GvFILE_HEK->", "depth":18, "children":[ 
+                                                                        ], "data":{ "$area": 98 } },
+                                                                        { "id": "2017", "name": "gp_sv->", "depth":18, "children":[ 
+                                                                            { "id": "2018", "name": "SV(PV)", "depth":19, "children":[ 
+                                                                            ], "data":{ "$area": 120 } },
+                                                                        ], "data":{ "$area": 120 } },
+                                                                    ], "data":{ "$area": 483 } },
+                                                                ], "data":{ "$area": 483 } },
+                                                                { "id": "2019", "name": "SVOP->", "depth":16, "children":[ 
+                                                                    { "id": "2020", "name": "SV(PV)", "depth":17, "children":[ 
+                                                                    ], "data":{ "$area": 40 } },
+                                                                ], "data":{ "$area": 40 } },
+                                                                { "id": "2021", "name": "SVOP->", "depth":16, "children":[ 
+                                                                    { "id": "2022", "name": "SV(PVGV)", "depth":17, "children":[ 
+                                                                        { "id": "2023", "name": "GvNAME_HEK->", "depth":18, "children":[ 
+                                                                        ], "data":{ "$area": 40 } },
+                                                                    ], "data":{ "$area": 192 } },
+                                                                ], "data":{ "$area": 192 } },
+                                                            ], "data":{ "$area": 5968 } },
+                                                        ], "data":{ "$area": 6384 } },
+                                                    ], "data":{ "$area": 6384 } },
+                                                ], "data":{ "$area": 6424 } },
+                                            ], "data":{ "$area": 6424 } },
+                                        ], "data":{ "$area": 6576 } },
+                                    ], "data":{ "$area": 6576 } },
+                                    { "id": "2024", "name": "hent_hek->", "depth":9, "children":[ 
+                                    ], "data":{ "$area": 51 } },
+                                    { "id": "2025", "name": "HeVAL->", "depth":9, "children":[ 
+                                        { "id": "2026", "name": "SV(PVGV)", "depth":10, "children":[ 
+                                            { "id": "2027", "name": "UNKNOWN(0,0x0)", "depth":11, "children":[ 
+                                                { "id": "2028", "name": "MAGIC(<)", "depth":12, "children":[ 
+                                                    { "id": "2029", "name": "mg_obj->", "depth":13, "children":[ 
+                                                        { "id": "2030", "name": "SV(PVCV)", "depth":14, "children":[ 
+                                                            { "id": "2031", "name": "CvPADLIST->", "depth":15, "children":[ 
+                                                                { "id": "2032", "name": "SV(PVAV)", "depth":16, "children":[ 
+                                                                ], "data":{ "$area": 80 } },
+                                                            ], "data":{ "$area": 80 } },
+                                                            { "id": "2033", "name": "CvSTART->", "depth":15, "children":[ 
+                                                                { "id": "2034", "name": "SVOP->", "depth":16, "children":[ 
+                                                                    { "id": "2035", "name": "SV(PV)", "depth":17, "children":[ 
+                                                                    ], "data":{ "$area": 40 } },
+                                                                ], "data":{ "$area": 40 } },
+                                                                { "id": "2036", "name": "PM_GETRE->", "depth":16, "children":[ 
+                                                                    { "id": "2037", "name": "regex_size", "depth":17, "children":[ 
+                                                                    ], "data":{ "$area": 160 } },
+                                                                ], "data":{ "$area": 160 } },
+                                                                { "id": "2038", "name": "SVOP->", "depth":16, "children":[ 
+                                                                    { "id": "2039", "name": "SV(PV)", "depth":17, "children":[ 
+                                                                    ], "data":{ "$area": 42 } },
+                                                                ], "data":{ "$area": 42 } },
+                                                                { "id": "2040", "name": "SVOP->", "depth":16, "children":[ 
+                                                                    { "id": "2041", "name": "SV(PV)", "depth":17, "children":[ 
+                                                                    ], "data":{ "$area": 40 } },
+                                                                ], "data":{ "$area": 40 } },
+                                                                { "id": "2042", "name": "SVOP->", "depth":16, "children":[ 
+                                                                    { "id": "2043", "name": "SV(PV)", "depth":17, "children":[ 
+                                                                    ], "data":{ "$area": 40 } },
+                                                                ], "data":{ "$area": 40 } },
+                                                                { "id": "2044", "name": "SVOP->", "depth":16, "children":[ 
+                                                                    { "id": "2045", "name": "SV(PV)", "depth":17, "children":[ 
+                                                                    ], "data":{ "$area": 40 } },
+                                                                ], "data":{ "$area": 40 } },
+                                                                { "id": "2046", "name": "SVOP->", "depth":16, "children":[ 
+                                                                    { "id": "2047", "name": "SV(PV)", "depth":17, "children":[ 
+                                                                    ], "data":{ "$area": 43 } },
+                                                                ], "data":{ "$area": 43 } },
+                                                            ], "data":{ "$area": 2149 } },
+                                                        ], "data":{ "$area": 2357 } },
+                                                    ], "data":{ "$area": 2357 } },
+                                                ], "data":{ "$area": 2397 } },
+                                            ], "data":{ "$area": 2397 } },
+                                        ], "data":{ "$area": 2549 } },
+                                    ], "data":{ "$area": 2549 } },
+                                    { "id": "2048", "name": "hent_hek->", "depth":9, "children":[ 
+                                    ], "data":{ "$area": 48 } },
+                                    { "id": "2049", "name": "HeVAL->", "depth":9, "children":[ 
+                                        { "id": "2050", "name": "SV(PVGV)", "depth":10, "children":[ 
+                                            { "id": "2051", "name": "UNKNOWN(0,0x0)", "depth":11, "children":[ 
+                                                { "id": "2052", "name": "MAGIC(<)", "depth":12, "children":[ 
+                                                    { "id": "2053", "name": "mg_obj->", "depth":13, "children":[ 
+                                                        { "id": "2054", "name": "SV(PVCV)", "depth":14, "children":[ 
+                                                            { "id": "2055", "name": "CvPADLIST->", "depth":15, "children":[ 
+                                                                { "id": "2056", "name": "SV(PVAV)", "depth":16, "children":[ 
+                                                                ], "data":{ "$area": 80 } },
+                                                            ], "data":{ "$area": 80 } },
+                                                            { "id": "2057", "name": "CvSTART->", "depth":15, "children":[ 
+                                                                { "id": "2058", "name": "SVOP->", "depth":16, "children":[ 
+                                                                    { "id": "2059", "name": "SV(PV)", "depth":17, "children":[ 
+                                                                    ], "data":{ "$area": 56 } },
+                                                                ], "data":{ "$area": 56 } },
+                                                                { "id": "2060", "name": "SVOP->", "depth":16, "children":[ 
+                                                                    { "id": "2061", "name": "SV(PVGV)", "depth":17, "children":[ 
+                                                                        { "id": "2062", "name": "GvNAME_HEK->", "depth":18, "children":[ 
+                                                                        ], "data":{ "$area": 40 } },
+                                                                    ], "data":{ "$area": 192 } },
+                                                                ], "data":{ "$area": 192 } },
+                                                                { "id": "2063", "name": "SVOP->", "depth":16, "children":[ 
+                                                                    { "id": "2064", "name": "SV(PV)", "depth":17, "children":[ 
+                                                                    ], "data":{ "$area": 42 } },
+                                                                ], "data":{ "$area": 42 } },
+                                                                { "id": "2065", "name": "SVOP->", "depth":16, "children":[ 
+                                                                    { "id": "2066", "name": "SV(PV)", "depth":17, "children":[ 
+                                                                    ], "data":{ "$area": 56 } },
+                                                                ], "data":{ "$area": 56 } },
+                                                                { "id": "2067", "name": "SVOP->", "depth":16, "children":[ 
+                                                                    { "id": "2068", "name": "SV(PV)", "depth":17, "children":[ 
+                                                                    ], "data":{ "$area": 56 } },
+                                                                ], "data":{ "$area": 56 } },
+                                                                { "id": "2069", "name": "SVOP->", "depth":16, "children":[ 
+                                                                    { "id": "2070", "name": "SV(PV)", "depth":17, "children":[ 
+                                                                    ], "data":{ "$area": 56 } },
+                                                                ], "data":{ "$area": 56 } },
+                                                                { "id": "2071", "name": "SVOP->", "depth":16, "children":[ 
+                                                                    { "id": "2072", "name": "SV(IV)", "depth":17, "children":[ 
+                                                                    ], "data":{ "$area": 24 } },
+                                                                ], "data":{ "$area": 24 } },
+                                                                { "id": "2073", "name": "SVOP->", "depth":16, "children":[ 
+                                                                    { "id": "2074", "name": "SV(PV)", "depth":17, "children":[ 
+                                                                    ], "data":{ "$area": 42 } },
+                                                                ], "data":{ "$area": 42 } },
+                                                                { "id": "2075", "name": "SVOP->", "depth":16, "children":[ 
+                                                                    { "id": "2076", "name": "SV(PV)", "depth":17, "children":[ 
+                                                                    ], "data":{ "$area": 56 } },
+                                                                ], "data":{ "$area": 56 } },
+                                                                { "id": "2077", "name": "SVOP->", "depth":16, "children":[ 
+                                                                    { "id": "2078", "name": "SV(PVGV)", "depth":17, "children":[ 
+                                                                        { "id": "2079", "name": "UNKNOWN(0,0x0)", "depth":18, "children":[ 
+                                                                            { "id": "2080", "name": "MAGIC(<)", "depth":19, "children":[ 
+                                                                                { "id": "2081", "name": "mg_obj->", "depth":20, "children":[ 
+                                                                                    { "id": "2082", "name": "SV(PVCV)", "depth":21, "children":[ 
+                                                                                        { "id": "2083", "name": "CvPADLIST->", "depth":22, "children":[ 
+                                                                                            { "id": "2084", "name": "SV(PVAV)", "depth":23, "children":[ 
+                                                                                            ], "data":{ "$area": 80 } },
+                                                                                        ], "data":{ "$area": 80 } },
+                                                                                        { "id": "2085", "name": "CvSTART->", "depth":22, "children":[ 
+                                                                                            { "id": "2086", "name": "SVOP->", "depth":23, "children":[ 
+                                                                                                { "id": "2087", "name": "SV(PV)", "depth":24, "children":[ 
+                                                                                                ], "data":{ "$area": 56 } },
+                                                                                            ], "data":{ "$area": 56 } },
+                                                                                        ], "data":{ "$area": 696 } },
+                                                                                    ], "data":{ "$area": 904 } },
+                                                                                ], "data":{ "$area": 904 } },
+                                                                            ], "data":{ "$area": 944 } },
+                                                                        ], "data":{ "$area": 944 } },
+                                                                        { "id": "2088", "name": "GvNAME_HEK->", "depth":18, "children":[ 
+                                                                        ], "data":{ "$area": 39 } },
+                                                                    ], "data":{ "$area": 1135 } },
+                                                                ], "data":{ "$area": 1135 } },
+                                                                { "id": "2089", "name": "SVOP->", "depth":16, "children":[ 
+                                                                    { "id": "2090", "name": "SV(PVGV)", "depth":17, "children":[ 
+                                                                        { "id": "2091", "name": "GvNAME_HEK->", "depth":18, "children":[ 
+                                                                        ], "data":{ "$area": 35 } },
+                                                                        { "id": "2092", "name": "gp_sv->", "depth":18, "children":[ 
+                                                                            { "id": "2093", "name": "SV(PVMG)", "depth":19, "children":[ 
+                                                                                { "id": "2094", "name": "UNKNOWN(0,0x0)", "depth":20, "children":[ 
+                                                                                    { "id": "2095", "name": "MAGIC(0)", "depth":21, "children":[ 
+                                                                                    ], "data":{ "$area": 41 } },
+                                                                                ], "data":{ "$area": 41 } },
+                                                                            ], "data":{ "$area": 113 } },
+                                                                        ], "data":{ "$area": 113 } },
+                                                                    ], "data":{ "$area": 300 } },
+                                                                ], "data":{ "$area": 300 } },
+                                                                { "id": "2096", "name": "SVOP->", "depth":16, "children":[ 
+                                                                    { "id": "2097", "name": "SV(PV)", "depth":17, "children":[ 
+                                                                    ], "data":{ "$area": 44 } },
+                                                                ], "data":{ "$area": 44 } },
+                                                                { "id": "2098", "name": "SVOP->", "depth":16, "children":[ 
+                                                                    { "id": "2099", "name": "SV(PV)", "depth":17, "children":[ 
+                                                                    ], "data":{ "$area": 49 } },
+                                                                ], "data":{ "$area": 49 } },
+                                                                { "id": "2100", "name": "SVOP->", "depth":16, "children":[ 
+                                                                    { "id": "2101", "name": "SV(PV)", "depth":17, "children":[ 
+                                                                    ], "data":{ "$area": 56 } },
+                                                                ], "data":{ "$area": 56 } },
+                                                                { "id": "2102", "name": "SVOP->", "depth":16, "children":[ 
+                                                                    { "id": "2103", "name": "SV(PV)", "depth":17, "children":[ 
+                                                                    ], "data":{ "$area": 44 } },
+                                                                ], "data":{ "$area": 44 } },
+                                                                { "id": "2104", "name": "SVOP->", "depth":16, "children":[ 
+                                                                    { "id": "2105", "name": "SV(PV)", "depth":17, "children":[ 
+                                                                    ], "data":{ "$area": 46 } },
+                                                                ], "data":{ "$area": 46 } },
+                                                                { "id": "2106", "name": "SVOP->", "depth":16, "children":[ 
+                                                                    { "id": "2107", "name": "SV(PV)", "depth":17, "children":[ 
+                                                                        { "id": "2108", "name": "SvSHARED_HEK_FROM_PV->", "depth":18, "children":[ 
+                                                                        ], "data":{ "$area": 41 } },
+                                                                    ], "data":{ "$area": 81 } },
+                                                                ], "data":{ "$area": 81 } },
+                                                                { "id": "2109", "name": "SVOP->", "depth":16, "children":[ 
+                                                                    { "id": "2110", "name": "SV(PVGV)", "depth":17, "children":[ 
+                                                                        { "id": "2111", "name": "UNKNOWN(0,0x0)", "depth":18, "children":[ 
+                                                                            { "id": "2112", "name": "MAGIC(<)", "depth":19, "children":[ 
+                                                                                { "id": "2113", "name": "mg_obj->", "depth":20, "children":[ 
+                                                                                    { "id": "2114", "name": "SV(PVCV)", "depth":21, "children":[ 
+                                                                                        { "id": "2115", "name": "CvPADLIST->", "depth":22, "children":[ 
+                                                                                            { "id": "2116", "name": "SV(PVAV)", "depth":23, "children":[ 
+                                                                                            ], "data":{ "$area": 80 } },
+                                                                                        ], "data":{ "$area": 80 } },
+                                                                                        { "id": "2117", "name": "CvSTART->", "depth":22, "children":[ 
+                                                                                            { "id": "2118", "name": "SVOP->", "depth":23, "children":[ 
+                                                                                                { "id": "2119", "name": "SV(PV)", "depth":24, "children":[ 
+                                                                                                ], "data":{ "$area": 56 } },
+                                                                                            ], "data":{ "$area": 56 } },
+                                                                                            { "id": "2120", "name": "SVOP->", "depth":23, "children":[ 
+                                                                                                { "id": "2121", "name": "SV(PV)", "depth":24, "children":[ 
+                                                                                                ], "data":{ "$area": 56 } },
+                                                                                            ], "data":{ "$area": 56 } },
+                                                                                            { "id": "2122", "name": "SVOP->", "depth":23, "children":[ 
+                                                                                                { "id": "2123", "name": "SV(PV)", "depth":24, "children":[ 
+                                                                                                ], "data":{ "$area": 56 } },
+                                                                                            ], "data":{ "$area": 56 } },
+                                                                                            { "id": "2124", "name": "SVOP->", "depth":23, "children":[ 
+                                                                                                { "id": "2125", "name": "SV(PV)", "depth":24, "children":[ 
+                                                                                                ], "data":{ "$area": 56 } },
+                                                                                            ], "data":{ "$area": 56 } },
+                                                                                            { "id": "2126", "name": "SVOP->", "depth":23, "children":[ 
+                                                                                                { "id": "2127", "name": "SV(PV)", "depth":24, "children":[ 
+                                                                                                ], "data":{ "$area": 56 } },
+                                                                                            ], "data":{ "$area": 56 } },
+                                                                                            { "id": "2128", "name": "SVOP->", "depth":23, "children":[ 
+                                                                                                { "id": "2129", "name": "SV(PV)", "depth":24, "children":[ 
+                                                                                                ], "data":{ "$area": 56 } },
+                                                                                            ], "data":{ "$area": 56 } },
+                                                                                        ], "data":{ "$area": 2896 } },
+                                                                                    ], "data":{ "$area": 3104 } },
+                                                                                ], "data":{ "$area": 3104 } },
+                                                                            ], "data":{ "$area": 3144 } },
+                                                                        ], "data":{ "$area": 3144 } },
+                                                                        { "id": "2130", "name": "GvNAME_HEK->", "depth":18, "children":[ 
+                                                                        ], "data":{ "$area": 47 } },
+                                                                    ], "data":{ "$area": 3343 } },
+                                                                ], "data":{ "$area": 3343 } },
+                                                                { "id": "2131", "name": "SVOP->", "depth":16, "children":[ 
+                                                                    { "id": "2132", "name": "SV(PV)", "depth":17, "children":[ 
+                                                                    ], "data":{ "$area": 56 } },
+                                                                ], "data":{ "$area": 56 } },
+                                                                { "id": "2133", "name": "SVOP->", "depth":16, "children":[ 
+                                                                    { "id": "2134", "name": "SV(PV)", "depth":17, "children":[ 
+                                                                    ], "data":{ "$area": 56 } },
+                                                                ], "data":{ "$area": 56 } },
+                                                                { "id": "2135", "name": "SVOP->", "depth":16, "children":[ 
+                                                                    { "id": "2136", "name": "SV(PV)", "depth":17, "children":[ 
+                                                                    ], "data":{ "$area": 56 } },
+                                                                ], "data":{ "$area": 56 } },
+                                                                { "id": "2137", "name": "SVOP->", "depth":16, "children":[ 
+                                                                    { "id": "2138", "name": "SV(PV)", "depth":17, "children":[ 
+                                                                    ], "data":{ "$area": 56 } },
+                                                                ], "data":{ "$area": 56 } },
+                                                                { "id": "2139", "name": "SVOP->", "depth":16, "children":[ 
+                                                                    { "id": "2140", "name": "SV(PV)", "depth":17, "children":[ 
+                                                                    ], "data":{ "$area": 42 } },
+                                                                ], "data":{ "$area": 42 } },
+                                                                { "id": "2141", "name": "SVOP->", "depth":16, "children":[ 
+                                                                    { "id": "2142", "name": "SV(PV)", "depth":17, "children":[ 
+                                                                    ], "data":{ "$area": 42 } },
+                                                                ], "data":{ "$area": 42 } },
+                                                                { "id": "2143", "name": "SVOP->", "depth":16, "children":[ 
+                                                                    { "id": "2144", "name": "SV(PVGV)", "depth":17, "children":[ 
+                                                                        { "id": "2145", "name": "UNKNOWN(0,0x0)", "depth":18, "children":[ 
+                                                                            { "id": "2146", "name": "MAGIC(<)", "depth":19, "children":[ 
+                                                                                { "id": "2147", "name": "mg_obj->", "depth":20, "children":[ 
+                                                                                    { "id": "2148", "name": "SV(PVCV)", "depth":21, "children":[ 
+                                                                                    ], "data":{ "$area": 128 } },
+                                                                                ], "data":{ "$area": 128 } },
+                                                                            ], "data":{ "$area": 168 } },
+                                                                        ], "data":{ "$area": 168 } },
+                                                                        { "id": "2149", "name": "GvNAME_HEK->", "depth":18, "children":[ 
+                                                                        ], "data":{ "$area": 42 } },
+                                                                    ], "data":{ "$area": 362 } },
+                                                                ], "data":{ "$area": 362 } },
+                                                                { "id": "2150", "name": "SVOP->", "depth":16, "children":[ 
+                                                                    { "id": "2151", "name": "SV(PV)", "depth":17, "children":[ 
+                                                                    ], "data":{ "$area": 56 } },
+                                                                ], "data":{ "$area": 56 } },
+                                                                { "id": "2152", "name": "SVOP->", "depth":16, "children":[ 
+                                                                    { "id": "2153", "name": "SV(PV)", "depth":17, "children":[ 
+                                                                        { "id": "2154", "name": "SvSHARED_HEK_FROM_PV->", "depth":18, "children":[ 
+                                                                        ], "data":{ "$area": 55 } },
+                                                                    ], "data":{ "$area": 95 } },
+                                                                ], "data":{ "$area": 95 } },
+                                                                { "id": "2155", "name": "SVOP->", "depth":16, "children":[ 
+                                                                    { "id": "2156", "name": "SV(PV)", "depth":17, "children":[ 
+                                                                    ], "data":{ "$area": 56 } },
+                                                                ], "data":{ "$area": 56 } },
+                                                                { "id": "2157", "name": "SVOP->", "depth":16, "children":[ 
+                                                                    { "id": "2158", "name": "SV(PV)", "depth":17, "children":[ 
+                                                                    ], "data":{ "$area": 56 } },
+                                                                ], "data":{ "$area": 56 } },
+                                                                { "id": "2159", "name": "SVOP->", "depth":16, "children":[ 
+                                                                    { "id": "2160", "name": "SV(PV)", "depth":17, "children":[ 
+                                                                    ], "data":{ "$area": 43 } },
+                                                                ], "data":{ "$area": 43 } },
+                                                                { "id": "2161", "name": "SVOP->", "depth":16, "children":[ 
+                                                                    { "id": "2162", "name": "SV(PV)", "depth":17, "children":[ 
+                                                                    ], "data":{ "$area": 60 } },
+                                                                ], "data":{ "$area": 60 } },
+                                                                { "id": "2163", "name": "SVOP->", "depth":16, "children":[ 
+                                                                    { "id": "2164", "name": "SV(PV)", "depth":17, "children":[ 
+                                                                    ], "data":{ "$area": 56 } },
+                                                                ], "data":{ "$area": 56 } },
+                                                                { "id": "2165", "name": "SVOP->", "depth":16, "children":[ 
+                                                                    { "id": "2166", "name": "SV(PVGV)", "depth":17, "children":[ 
+                                                                        { "id": "2167", "name": "GvNAME_HEK->", "depth":18, "children":[ 
+                                                                        ], "data":{ "$area": 37 } },
+                                                                    ], "data":{ "$area": 189 } },
+                                                                ], "data":{ "$area": 189 } },
+                                                                { "id": "2168", "name": "PM_GETRE->", "depth":16, "children":[ 
+                                                                    { "id": "2169", "name": "regex_size", "depth":17, "children":[ 
+                                                                    ], "data":{ "$area": 176 } },
+                                                                ], "data":{ "$area": 176 } },
+                                                                { "id": "2170", "name": "SVOP->", "depth":16, "children":[ 
+                                                                    { "id": "2171", "name": "SV(PV)", "depth":17, "children":[ 
+                                                                    ], "data":{ "$area": 56 } },
+                                                                ], "data":{ "$area": 56 } },
+                                                                { "id": "2172", "name": "SVOP->", "depth":16, "children":[ 
+                                                                    { "id": "2173", "name": "SV(PV)", "depth":17, "children":[ 
+                                                                    ], "data":{ "$area": 44 } },
+                                                                ], "data":{ "$area": 44 } },
+                                                                { "id": "2174", "name": "SVOP->", "depth":16, "children":[ 
+                                                                    { "id": "2175", "name": "SV(PV)", "depth":17, "children":[ 
+                                                                    ], "data":{ "$area": 46 } },
+                                                                ], "data":{ "$area": 46 } },
+                                                                { "id": "2176", "name": "SVOP->", "depth":16, "children":[ 
+                                                                    { "id": "2177", "name": "SV(PV)", "depth":17, "children":[ 
+                                                                    ], "data":{ "$area": 56 } },
+                                                                ], "data":{ "$area": 56 } },
+                                                            ], "data":{ "$area": 26161 } },
+                                                        ], "data":{ "$area": 26369 } },
+                                                    ], "data":{ "$area": 26369 } },
+                                                ], "data":{ "$area": 26409 } },
+                                            ], "data":{ "$area": 26409 } },
+                                        ], "data":{ "$area": 26561 } },
+                                    ], "data":{ "$area": 26561 } },
+                                    { "id": "2178", "name": "hent_hek->", "depth":9, "children":[ 
+                                    ], "data":{ "$area": 42 } },
+                                    { "id": "2179", "name": "HeVAL->", "depth":9, "children":[ 
+                                        { "id": "2180", "name": "SV(PVGV)", "depth":10, "children":[ 
+                                            { "id": "2181", "name": "UNKNOWN(0,0x0)", "depth":11, "children":[ 
+                                                { "id": "2182", "name": "MAGIC(<)", "depth":12, "children":[ 
+                                                    { "id": "2183", "name": "mg_obj->", "depth":13, "children":[ 
+                                                        { "id": "2184", "name": "SV(PVCV)", "depth":14, "children":[ 
+                                                            { "id": "2185", "name": "CvPADLIST->", "depth":15, "children":[ 
+                                                                { "id": "2186", "name": "SV(PVAV)", "depth":16, "children":[ 
+                                                                ], "data":{ "$area": 80 } },
+                                                            ], "data":{ "$area": 80 } },
+                                                            { "id": "2187", "name": "CvSTART->", "depth":15, "children":[ 
+                                                                { "id": "2188", "name": "SVOP->", "depth":16, "children":[ 
+                                                                    { "id": "2189", "name": "SV(PV)", "depth":17, "children":[ 
+                                                                    ], "data":{ "$area": 40 } },
+                                                                ], "data":{ "$area": 40 } },
+                                                                { "id": "2190", "name": "SVOP->", "depth":16, "children":[ 
+                                                                    { "id": "2191", "name": "SV(PV)", "depth":17, "children":[ 
+                                                                    ], "data":{ "$area": 40 } },
+                                                                ], "data":{ "$area": 40 } },
+                                                                { "id": "2192", "name": "SVOP->", "depth":16, "children":[ 
+                                                                    { "id": "2193", "name": "SV(PVGV)", "depth":17, "children":[ 
+                                                                        { "id": "2194", "name": "GvNAME_HEK->", "depth":18, "children":[ 
+                                                                        ], "data":{ "$area": 40 } },
+                                                                    ], "data":{ "$area": 192 } },
+                                                                ], "data":{ "$area": 192 } },
+                                                                { "id": "2195", "name": "PM_GETRE->", "depth":16, "children":[ 
+                                                                    { "id": "2196", "name": "regex_size", "depth":17, "children":[ 
+                                                                    ], "data":{ "$area": 160 } },
+                                                                ], "data":{ "$area": 160 } },
+                                                                { "id": "2197", "name": "SVOP->", "depth":16, "children":[ 
+                                                                    { "id": "2198", "name": "SV(PV)", "depth":17, "children":[ 
+                                                                    ], "data":{ "$area": 42 } },
+                                                                ], "data":{ "$area": 42 } },
+                                                                { "id": "2199", "name": "SVOP->", "depth":16, "children":[ 
+                                                                    { "id": "2200", "name": "SV(PV)", "depth":17, "children":[ 
+                                                                    ], "data":{ "$area": 40 } },
+                                                                ], "data":{ "$area": 40 } },
+                                                                { "id": "2201", "name": "SVOP->", "depth":16, "children":[ 
+                                                                    { "id": "2202", "name": "SV(PV)", "depth":17, "children":[ 
+                                                                    ], "data":{ "$area": 40 } },
+                                                                ], "data":{ "$area": 40 } },
+                                                                { "id": "2203", "name": "SVOP->", "depth":16, "children":[ 
+                                                                    { "id": "2204", "name": "SV(PV)", "depth":17, "children":[ 
+                                                                    ], "data":{ "$area": 40 } },
+                                                                ], "data":{ "$area": 40 } },
+                                                                { "id": "2205", "name": "SVOP->", "depth":16, "children":[ 
+                                                                    { "id": "2206", "name": "SV(PV)", "depth":17, "children":[ 
+                                                                    ], "data":{ "$area": 56 } },
+                                                                ], "data":{ "$area": 56 } },
+                                                            ], "data":{ "$area": 3522 } },
+                                                        ], "data":{ "$area": 3730 } },
+                                                    ], "data":{ "$area": 3730 } },
+                                                ], "data":{ "$area": 3770 } },
+                                            ], "data":{ "$area": 3770 } },
+                                        ], "data":{ "$area": 3922 } },
+                                    ], "data":{ "$area": 3922 } },
+                                    { "id": "2207", "name": "hent_hek->", "depth":9, "children":[ 
+                                    ], "data":{ "$area": 47 } },
+                                    { "id": "2208", "name": "HeVAL->", "depth":9, "children":[ 
+                                        { "id": "2209", "name": "SV(PVGV)", "depth":10, "children":[ 
+                                            { "id": "2210", "name": "UNKNOWN(0,0x0)", "depth":11, "children":[ 
+                                                { "id": "2211", "name": "MAGIC(<)", "depth":12, "children":[ 
+                                                    { "id": "2212", "name": "mg_obj->", "depth":13, "children":[ 
+                                                        { "id": "2213", "name": "SV(PVCV)", "depth":14, "children":[ 
+                                                            { "id": "2214", "name": "CvPADLIST->", "depth":15, "children":[ 
+                                                                { "id": "2215", "name": "SV(PVAV)", "depth":16, "children":[ 
+                                                                ], "data":{ "$area": 80 } },
+                                                            ], "data":{ "$area": 80 } },
+                                                            { "id": "2216", "name": "CvSTART->", "depth":15, "children":[ 
+                                                                { "id": "2217", "name": "SVOP->", "depth":16, "children":[ 
+                                                                    { "id": "2218", "name": "SV(PVGV)", "depth":17, "children":[ 
+                                                                        { "id": "2219", "name": "GvNAME_HEK->", "depth":18, "children":[ 
+                                                                        ], "data":{ "$area": 43 } },
+                                                                    ], "data":{ "$area": 195 } },
+                                                                ], "data":{ "$area": 195 } },
+                                                                { "id": "2220", "name": "SVOP->", "depth":16, "children":[ 
+                                                                    { "id": "2221", "name": "SV(PVGV)", "depth":17, "children":[ 
+                                                                        { "id": "2222", "name": "GvNAME_HEK->", "depth":18, "children":[ 
+                                                                        ], "data":{ "$area": 41 } },
+                                                                    ], "data":{ "$area": 193 } },
+                                                                ], "data":{ "$area": 193 } },
+                                                                { "id": "2223", "name": "SVOP->", "depth":16, "children":[ 
+                                                                    { "id": "2224", "name": "SV(PV)", "depth":17, "children":[ 
+                                                                    ], "data":{ "$area": 43 } },
+                                                                ], "data":{ "$area": 43 } },
+                                                                { "id": "2225", "name": "SVOP->", "depth":16, "children":[ 
+                                                                    { "id": "2226", "name": "SV(PV)", "depth":17, "children":[ 
+                                                                    ], "data":{ "$area": 60 } },
+                                                                ], "data":{ "$area": 60 } },
+                                                                { "id": "2227", "name": "SVOP->", "depth":16, "children":[ 
+                                                                    { "id": "2228", "name": "SV(PVGV)", "depth":17, "children":[ 
+                                                                        { "id": "2229", "name": "GvNAME_HEK->", "depth":18, "children":[ 
+                                                                        ], "data":{ "$area": 45 } },
+                                                                    ], "data":{ "$area": 197 } },
+                                                                ], "data":{ "$area": 197 } },
+                                                                { "id": "2230", "name": "SVOP->", "depth":16, "children":[ 
+                                                                    { "id": "2231", "name": "SV(PVGV)", "depth":17, "children":[ 
+                                                                        { "id": "2232", "name": "GvNAME_HEK->", "depth":18, "children":[ 
+                                                                        ], "data":{ "$area": 46 } },
+                                                                    ], "data":{ "$area": 198 } },
+                                                                ], "data":{ "$area": 198 } },
+                                                                { "id": "2233", "name": "SVOP->", "depth":16, "children":[ 
+                                                                    { "id": "2234", "name": "SV(IV)", "depth":17, "children":[ 
+                                                                    ], "data":{ "$area": 24 } },
+                                                                ], "data":{ "$area": 24 } },
+                                                                { "id": "2235", "name": "SVOP->", "depth":16, "children":[ 
+                                                                    { "id": "2236", "name": "SV(IV)", "depth":17, "children":[ 
+                                                                    ], "data":{ "$area": 24 } },
+                                                                ], "data":{ "$area": 24 } },
+                                                                { "id": "2237", "name": "PM_GETRE->", "depth":16, "children":[ 
+                                                                    { "id": "2238", "name": "regex_size", "depth":17, "children":[ 
+                                                                    ], "data":{ "$area": 160 } },
+                                                                ], "data":{ "$area": 160 } },
+                                                                { "id": "2239", "name": "SVOP->", "depth":16, "children":[ 
+                                                                    { "id": "2240", "name": "SV(IV)", "depth":17, "children":[ 
+                                                                    ], "data":{ "$area": 24 } },
+                                                                ], "data":{ "$area": 24 } },
+                                                                { "id": "2241", "name": "PM_GETRE->", "depth":16, "children":[ 
+                                                                    { "id": "2242", "name": "regex_size", "depth":17, "children":[ 
+                                                                    ], "data":{ "$area": 160 } },
+                                                                ], "data":{ "$area": 160 } },
+                                                                { "id": "2243", "name": "SVOP->", "depth":16, "children":[ 
+                                                                    { "id": "2244", "name": "SV(IV)", "depth":17, "children":[ 
+                                                                    ], "data":{ "$area": 24 } },
+                                                                ], "data":{ "$area": 24 } },
+                                                                { "id": "2245", "name": "PM_GETRE->", "depth":16, "children":[ 
+                                                                    { "id": "2246", "name": "regex_size", "depth":17, "children":[ 
+                                                                    ], "data":{ "$area": 160 } },
+                                                                ], "data":{ "$area": 160 } },
+                                                                { "id": "2247", "name": "SVOP->", "depth":16, "children":[ 
+                                                                    { "id": "2248", "name": "SV(IV)", "depth":17, "children":[ 
+                                                                    ], "data":{ "$area": 24 } },
+                                                                ], "data":{ "$area": 24 } },
+                                                                { "id": "2249", "name": "PM_GETRE->", "depth":16, "children":[ 
+                                                                    { "id": "2250", "name": "regex_size", "depth":17, "children":[ 
+                                                                    ], "data":{ "$area": 160 } },
+                                                                ], "data":{ "$area": 160 } },
+                                                                { "id": "2251", "name": "SVOP->", "depth":16, "children":[ 
+                                                                    { "id": "2252", "name": "SV(IV)", "depth":17, "children":[ 
+                                                                    ], "data":{ "$area": 24 } },
+                                                                ], "data":{ "$area": 24 } },
+                                                                { "id": "2253", "name": "SVOP->", "depth":16, "children":[ 
+                                                                    { "id": "2254", "name": "SV(IV)", "depth":17, "children":[ 
+                                                                    ], "data":{ "$area": 24 } },
+                                                                ], "data":{ "$area": 24 } },
+                                                                { "id": "2255", "name": "SVOP->", "depth":16, "children":[ 
+                                                                    { "id": "2256", "name": "SV(PVGV)", "depth":17, "children":[ 
+                                                                        { "id": "2257", "name": "UNKNOWN(0,0x0)", "depth":18, "children":[ 
+                                                                            { "id": "2258", "name": "MAGIC(<)", "depth":19, "children":[ 
+                                                                                { "id": "2259", "name": "mg_obj->", "depth":20, "children":[ 
+                                                                                    { "id": "2260", "name": "SV(PVCV)", "depth":21, "children":[ 
+                                                                                        { "id": "2261", "name": "CvPADLIST->", "depth":22, "children":[ 
+                                                                                            { "id": "2262", "name": "SV(PVAV)", "depth":23, "children":[ 
+                                                                                            ], "data":{ "$area": 80 } },
+                                                                                        ], "data":{ "$area": 80 } },
+                                                                                        { "id": "2263", "name": "CvSTART->", "depth":22, "children":[ 
+                                                                                            { "id": "2264", "name": "PM_GETRE->", "depth":23, "children":[ 
+                                                                                                { "id": "2265", "name": "regex_size", "depth":24, "children":[ 
+                                                                                                ], "data":{ "$area": 160 } },
+                                                                                            ], "data":{ "$area": 160 } },
+                                                                                            { "id": "2266", "name": "SVOP->", "depth":23, "children":[ 
+                                                                                                { "id": "2267", "name": "SV(PV)", "depth":24, "children":[ 
+                                                                                                ], "data":{ "$area": 56 } },
+                                                                                            ], "data":{ "$area": 56 } },
+                                                                                            { "id": "2268", "name": "SVOP->", "depth":23, "children":[ 
+                                                                                                { "id": "2269", "name": "SV(PV)", "depth":24, "children":[ 
+                                                                                                    { "id": "2270", "name": "SvSHARED_HEK_FROM_PV->", "depth":25, "children":[ 
+                                                                                                    ], "data":{ "$area": 59 } },
+                                                                                                ], "data":{ "$area": 99 } },
+                                                                                            ], "data":{ "$area": 99 } },
+                                                                                            { "id": "2271", "name": "SVOP->", "depth":23, "children":[ 
+                                                                                                { "id": "2272", "name": "SV(PVGV)", "depth":24, "children":[ 
+                                                                                                    { "id": "2273", "name": "GvNAME_HEK->", "depth":25, "children":[ 
+                                                                                                    ], "data":{ "$area": 41 } },
+                                                                                                ], "data":{ "$area": 193 } },
+                                                                                            ], "data":{ "$area": 193 } },
+                                                                                            { "id": "2274", "name": "SVOP->", "depth":23, "children":[ 
+                                                                                                { "id": "2275", "name": "SV(PV)", "depth":24, "children":[ 
+                                                                                                ], "data":{ "$area": 72 } },
+                                                                                            ], "data":{ "$area": 72 } },
+                                                                                        ], "data":{ "$area": 2452 } },
+                                                                                    ], "data":{ "$area": 2660 } },
+                                                                                ], "data":{ "$area": 2660 } },
+                                                                            ], "data":{ "$area": 2700 } },
+                                                                        ], "data":{ "$area": 2700 } },
+                                                                        { "id": "2276", "name": "GvNAME_HEK->", "depth":18, "children":[ 
+                                                                        ], "data":{ "$area": 47 } },
+                                                                    ], "data":{ "$area": 2899 } },
+                                                                ], "data":{ "$area": 2899 } },
+                                                                { "id": "2277", "name": "SVOP->", "depth":16, "children":[ 
+                                                                    { "id": "2278", "name": "SV(PVGV)", "depth":17, "children":[ 
+                                                                        { "id": "2279", "name": "UNKNOWN(0,0x0)", "depth":18, "children":[ 
+                                                                            { "id": "2280", "name": "MAGIC(<)", "depth":19, "children":[ 
+                                                                                { "id": "2281", "name": "mg_obj->", "depth":20, "children":[ 
+                                                                                    { "id": "2282", "name": "SV(PVCV)", "depth":21, "children":[ 
+                                                                                        { "id": "2283", "name": "CvPADLIST->", "depth":22, "children":[ 
+                                                                                            { "id": "2284", "name": "SV(PVAV)", "depth":23, "children":[ 
+                                                                                            ], "data":{ "$area": 80 } },
+                                                                                        ], "data":{ "$area": 80 } },
+                                                                                        { "id": "2285", "name": "CvSTART->", "depth":22, "children":[ 
+                                                                                            { "id": "2286", "name": "PM_GETRE->", "depth":23, "children":[ 
+                                                                                                { "id": "2287", "name": "regex_size", "depth":24, "children":[ 
+                                                                                                ], "data":{ "$area": 160 } },
+                                                                                            ], "data":{ "$area": 160 } },
+                                                                                            { "id": "2288", "name": "SVOP->", "depth":23, "children":[ 
+                                                                                                { "id": "2289", "name": "SV(PV)", "depth":24, "children":[ 
+                                                                                                ], "data":{ "$area": 56 } },
+                                                                                            ], "data":{ "$area": 56 } },
+                                                                                            { "id": "2290", "name": "SVOP->", "depth":23, "children":[ 
+                                                                                                { "id": "2291", "name": "SV(PV)", "depth":24, "children":[ 
+                                                                                                    { "id": "2292", "name": "SvSHARED_HEK_FROM_PV->", "depth":25, "children":[ 
+                                                                                                    ], "data":{ "$area": 50 } },
+                                                                                                ], "data":{ "$area": 90 } },
+                                                                                            ], "data":{ "$area": 90 } },
+                                                                                            { "id": "2293", "name": "SVOP->", "depth":23, "children":[ 
+                                                                                                { "id": "2294", "name": "SV(PV)", "depth":24, "children":[ 
+                                                                                                ], "data":{ "$area": 56 } },
+                                                                                            ], "data":{ "$area": 56 } },
+                                                                                        ], "data":{ "$area": 2234 } },
+                                                                                    ], "data":{ "$area": 2442 } },
+                                                                                ], "data":{ "$area": 2442 } },
+                                                                            ], "data":{ "$area": 2482 } },
+                                                                        ], "data":{ "$area": 2482 } },
+                                                                        { "id": "2295", "name": "GvNAME_HEK->", "depth":18, "children":[ 
+                                                                        ], "data":{ "$area": 42 } },
+                                                                    ], "data":{ "$area": 2676 } },
+                                                                ], "data":{ "$area": 2676 } },
+                                                                { "id": "2296", "name": "SVOP->", "depth":16, "children":[ 
+                                                                    { "id": "2297", "name": "SV(PV)", "depth":17, "children":[ 
+                                                                        { "id": "2298", "name": "SvSHARED_HEK_FROM_PV->", "depth":18, "children":[ 
+                                                                        ], "data":{ "$area": 41 } },
+                                                                    ], "data":{ "$area": 81 } },
+                                                                ], "data":{ "$area": 81 } },
+                                                            ], "data":{ "$area": 17254 } },
+                                                        ], "data":{ "$area": 17462 } },
+                                                    ], "data":{ "$area": 17462 } },
+                                                ], "data":{ "$area": 17502 } },
+                                            ], "data":{ "$area": 17502 } },
+                                        ], "data":{ "$area": 17654 } },
+                                    ], "data":{ "$area": 17654 } },
+                                    { "id": "2299", "name": "hent_hek->", "depth":9, "children":[ 
+                                    ], "data":{ "$area": 44 } },
+                                    { "id": "2300", "name": "HeVAL->", "depth":9, "children":[ 
+                                        { "id": "2301", "name": "SV(PVGV)", "depth":10, "children":[ 
+                                            { "id": "2302", "name": "UNKNOWN(0,0x0)", "depth":11, "children":[ 
+                                                { "id": "2303", "name": "MAGIC(<)", "depth":12, "children":[ 
+                                                    { "id": "2304", "name": "mg_obj->", "depth":13, "children":[ 
+                                                        { "id": "2305", "name": "SV(PVCV)", "depth":14, "children":[ 
+                                                            { "id": "2306", "name": "CvPADLIST->", "depth":15, "children":[ 
+                                                                { "id": "2307", "name": "SV(PVAV)", "depth":16, "children":[ 
+                                                                ], "data":{ "$area": 80 } },
+                                                            ], "data":{ "$area": 80 } },
+                                                            { "id": "2308", "name": "CvSTART->", "depth":15, "children":[ 
+                                                                { "id": "2309", "name": "SVOP->", "depth":16, "children":[ 
+                                                                    { "id": "2310", "name": "SV(IV)", "depth":17, "children":[ 
+                                                                    ], "data":{ "$area": 24 } },
+                                                                ], "data":{ "$area": 24 } },
+                                                                { "id": "2311", "name": "SVOP->", "depth":16, "children":[ 
+                                                                    { "id": "2312", "name": "SV(PV)", "depth":17, "children":[ 
+                                                                    ], "data":{ "$area": 40 } },
+                                                                ], "data":{ "$area": 40 } },
+                                                                { "id": "2313", "name": "SVOP->", "depth":16, "children":[ 
+                                                                    { "id": "2314", "name": "SV(PVGV)", "depth":17, "children":[ 
+                                                                        { "id": "2315", "name": "GvNAME_HEK->", "depth":18, "children":[ 
+                                                                        ], "data":{ "$area": 35 } },
+                                                                        { "id": "2316", "name": "gp_sv->", "depth":18, "children":[ 
+                                                                            { "id": "2317", "name": "SV(PVMG)", "depth":19, "children":[ 
+                                                                                { "id": "2318", "name": "UNKNOWN(0,0x0)", "depth":20, "children":[ 
+                                                                                    { "id": "2319", "name": "MAGIC(0)", "depth":21, "children":[ 
+                                                                                    ], "data":{ "$area": 41 } },
+                                                                                ], "data":{ "$area": 41 } },
+                                                                            ], "data":{ "$area": 113 } },
+                                                                        ], "data":{ "$area": 113 } },
+                                                                    ], "data":{ "$area": 300 } },
+                                                                ], "data":{ "$area": 300 } },
+                                                                { "id": "2320", "name": "SVOP->", "depth":16, "children":[ 
+                                                                    { "id": "2321", "name": "SV(PVGV)", "depth":17, "children":[ 
+                                                                        { "id": "2322", "name": "GvNAME_HEK->", "depth":18, "children":[ 
+                                                                        ], "data":{ "$area": 35 } },
+                                                                        { "id": "2323", "name": "gp_sv->", "depth":18, "children":[ 
+                                                                            { "id": "2324", "name": "SV(PVMG)", "depth":19, "children":[ 
+                                                                                { "id": "2325", "name": "UNKNOWN(0,0x0)", "depth":20, "children":[ 
+                                                                                    { "id": "2326", "name": "MAGIC(0)", "depth":21, "children":[ 
+                                                                                    ], "data":{ "$area": 41 } },
+                                                                                ], "data":{ "$area": 41 } },
+                                                                            ], "data":{ "$area": 113 } },
+                                                                        ], "data":{ "$area": 113 } },
+                                                                    ], "data":{ "$area": 300 } },
+                                                                ], "data":{ "$area": 300 } },
+                                                                { "id": "2327", "name": "PM_GETRE->", "depth":16, "children":[ 
+                                                                    { "id": "2328", "name": "regex_size", "depth":17, "children":[ 
+                                                                    ], "data":{ "$area": 184 } },
+                                                                ], "data":{ "$area": 184 } },
+                                                                { "id": "2329", "name": "SVOP->", "depth":16, "children":[ 
+                                                                    { "id": "2330", "name": "SV(PV)", "depth":17, "children":[ 
+                                                                    ], "data":{ "$area": 40 } },
+                                                                ], "data":{ "$area": 40 } },
+                                                                { "id": "2331", "name": "SVOP->", "depth":16, "children":[ 
+                                                                    { "id": "2332", "name": "SV(PV)", "depth":17, "children":[ 
+                                                                    ], "data":{ "$area": 56 } },
+                                                                ], "data":{ "$area": 56 } },
+                                                                { "id": "2333", "name": "SVOP->", "depth":16, "children":[ 
+                                                                    { "id": "2334", "name": "SV(PV)", "depth":17, "children":[ 
+                                                                    ], "data":{ "$area": 40 } },
+                                                                ], "data":{ "$area": 40 } },
+                                                                { "id": "2335", "name": "SVOP->", "depth":16, "children":[ 
+                                                                    { "id": "2336", "name": "SV(PVGV)", "depth":17, "children":[ 
+                                                                        { "id": "2337", "name": "GvNAME_HEK->", "depth":18, "children":[ 
+                                                                        ], "data":{ "$area": 49 } },
+                                                                    ], "data":{ "$area": 201 } },
+                                                                ], "data":{ "$area": 201 } },
+                                                                { "id": "2338", "name": "SVOP->", "depth":16, "children":[ 
+                                                                    { "id": "2339", "name": "SV(PV)", "depth":17, "children":[ 
+                                                                    ], "data":{ "$area": 56 } },
+                                                                ], "data":{ "$area": 56 } },
+                                                                { "id": "2340", "name": "SVOP->", "depth":16, "children":[ 
+                                                                    { "id": "2341", "name": "SV(PV)", "depth":17, "children":[ 
+                                                                    ], "data":{ "$area": 56 } },
+                                                                ], "data":{ "$area": 56 } },
+                                                                { "id": "2342", "name": "SVOP->", "depth":16, "children":[ 
+                                                                    { "id": "2343", "name": "SV(PV)", "depth":17, "children":[ 
+                                                                    ], "data":{ "$area": 56 } },
+                                                                ], "data":{ "$area": 56 } },
+                                                                { "id": "2344", "name": "SVOP->", "depth":16, "children":[ 
+                                                                    { "id": "2345", "name": "SV(PV)", "depth":17, "children":[ 
+                                                                    ], "data":{ "$area": 40 } },
+                                                                ], "data":{ "$area": 40 } },
+                                                                { "id": "2346", "name": "SVOP->", "depth":16, "children":[ 
+                                                                    { "id": "2347", "name": "SV(PV)", "depth":17, "children":[ 
+                                                                    ], "data":{ "$area": 40 } },
+                                                                ], "data":{ "$area": 40 } },
+                                                                { "id": "2348", "name": "SVOP->", "depth":16, "children":[ 
+                                                                    { "id": "2349", "name": "SV(PV)", "depth":17, "children":[ 
+                                                                    ], "data":{ "$area": 56 } },
+                                                                ], "data":{ "$area": 56 } },
+                                                                { "id": "2350", "name": "SVOP->", "depth":16, "children":[ 
+                                                                    { "id": "2351", "name": "SV(PV)", "depth":17, "children":[ 
+                                                                    ], "data":{ "$area": 56 } },
+                                                                ], "data":{ "$area": 56 } },
+                                                                { "id": "2352", "name": "SVOP->", "depth":16, "children":[ 
+                                                                    { "id": "2353", "name": "SV(PV)", "depth":17, "children":[ 
+                                                                    ], "data":{ "$area": 40 } },
+                                                                ], "data":{ "$area": 40 } },
+                                                            ], "data":{ "$area": 10737 } },
+                                                        ], "data":{ "$area": 10945 } },
+                                                    ], "data":{ "$area": 10945 } },
+                                                ], "data":{ "$area": 10985 } },
+                                            ], "data":{ "$area": 10985 } },
+                                        ], "data":{ "$area": 11137 } },
+                                    ], "data":{ "$area": 11137 } },
+                                    { "id": "2354", "name": "HeVAL->", "depth":9, "children":[ 
+                                        { "id": "2355", "name": "SV(PVGV)", "depth":10, "children":[ 
+                                            { "id": "2356", "name": "UNKNOWN(0,0x0)", "depth":11, "children":[ 
+                                                { "id": "2357", "name": "MAGIC(<)", "depth":12, "children":[ 
+                                                    { "id": "2358", "name": "mg_obj->", "depth":13, "children":[ 
+                                                        { "id": "2359", "name": "SV(PVCV)", "depth":14, "children":[ 
+                                                        ], "data":{ "$area": 128 } },
+                                                    ], "data":{ "$area": 128 } },
+                                                ], "data":{ "$area": 168 } },
+                                            ], "data":{ "$area": 168 } },
+                                        ], "data":{ "$area": 320 } },
+                                    ], "data":{ "$area": 320 } },
+                                    { "id": "2360", "name": "hent_hek->", "depth":9, "children":[ 
+                                    ], "data":{ "$area": 44 } },
+                                    { "id": "2361", "name": "HeVAL->", "depth":9, "children":[ 
+                                        { "id": "2362", "name": "SV(PVGV)", "depth":10, "children":[ 
+                                            { "id": "2363", "name": "UNKNOWN(0,0x0)", "depth":11, "children":[ 
+                                                { "id": "2364", "name": "MAGIC(<)", "depth":12, "children":[ 
+                                                    { "id": "2365", "name": "mg_obj->", "depth":13, "children":[ 
+                                                        { "id": "2366", "name": "SV(PVCV)", "depth":14, "children":[ 
+                                                            { "id": "2367", "name": "CvPADLIST->", "depth":15, "children":[ 
+                                                                { "id": "2368", "name": "SV(PVAV)", "depth":16, "children":[ 
+                                                                ], "data":{ "$area": 80 } },
+                                                            ], "data":{ "$area": 80 } },
+                                                            { "id": "2369", "name": "CvSTART->", "depth":15, "children":[ 
+                                                                { "id": "2370", "name": "SVOP->", "depth":16, "children":[ 
+                                                                    { "id": "2371", "name": "SV(PV)", "depth":17, "children":[ 
+                                                                    ], "data":{ "$area": 40 } },
+                                                                ], "data":{ "$area": 40 } },
+                                                                { "id": "2372", "name": "PM_GETRE->", "depth":16, "children":[ 
+                                                                    { "id": "2373", "name": "regex_size", "depth":17, "children":[ 
+                                                                    ], "data":{ "$area": 160 } },
+                                                                ], "data":{ "$area": 160 } },
+                                                                { "id": "2374", "name": "SVOP->", "depth":16, "children":[ 
+                                                                    { "id": "2375", "name": "SV(PV)", "depth":17, "children":[ 
+                                                                    ], "data":{ "$area": 42 } },
+                                                                ], "data":{ "$area": 42 } },
+                                                                { "id": "2376", "name": "SVOP->", "depth":16, "children":[ 
+                                                                    { "id": "2377", "name": "SV(PV)", "depth":17, "children":[ 
+                                                                    ], "data":{ "$area": 40 } },
+                                                                ], "data":{ "$area": 40 } },
+                                                                { "id": "2378", "name": "SVOP->", "depth":16, "children":[ 
+                                                                    { "id": "2379", "name": "SV(PV)", "depth":17, "children":[ 
+                                                                    ], "data":{ "$area": 40 } },
+                                                                ], "data":{ "$area": 40 } },
+                                                                { "id": "2380", "name": "SVOP->", "depth":16, "children":[ 
+                                                                    { "id": "2381", "name": "SV(PV)", "depth":17, "children":[ 
+                                                                    ], "data":{ "$area": 43 } },
+                                                                ], "data":{ "$area": 43 } },
+                                                                { "id": "2382", "name": "SVOP->", "depth":16, "children":[ 
+                                                                    { "id": "2383", "name": "SV(PV)", "depth":17, "children":[ 
+                                                                    ], "data":{ "$area": 40 } },
+                                                                ], "data":{ "$area": 40 } },
+                                                                { "id": "2384", "name": "SVOP->", "depth":16, "children":[ 
+                                                                    { "id": "2385", "name": "SV(PVGV)", "depth":17, "children":[ 
+                                                                    ], "data":{ "$area": 152 } },
+                                                                ], "data":{ "$area": 152 } },
+                                                                { "id": "2386", "name": "SVOP->", "depth":16, "children":[ 
+                                                                    { "id": "2387", "name": "SV(PV)", "depth":17, "children":[ 
+                                                                    ], "data":{ "$area": 56 } },
+                                                                ], "data":{ "$area": 56 } },
+                                                                { "id": "2388", "name": "SVOP->", "depth":16, "children":[ 
+                                                                    { "id": "2389", "name": "SV(PV)", "depth":17, "children":[ 
+                                                                    ], "data":{ "$area": 40 } },
+                                                                ], "data":{ "$area": 40 } },
+                                                            ], "data":{ "$area": 3237 } },
+                                                        ], "data":{ "$area": 3445 } },
+                                                    ], "data":{ "$area": 3445 } },
+                                                ], "data":{ "$area": 3485 } },
+                                            ], "data":{ "$area": 3485 } },
+                                        ], "data":{ "$area": 3637 } },
+                                    ], "data":{ "$area": 3637 } },
+                                    { "id": "2390", "name": "hent_hek->", "depth":9, "children":[ 
+                                    ], "data":{ "$area": 42 } },
+                                    { "id": "2391", "name": "HeVAL->", "depth":9, "children":[ 
+                                        { "id": "2392", "name": "SV(PVGV)", "depth":10, "children":[ 
+                                            { "id": "2393", "name": "UNKNOWN(0,0x0)", "depth":11, "children":[ 
+                                                { "id": "2394", "name": "MAGIC(<)", "depth":12, "children":[ 
+                                                    { "id": "2395", "name": "mg_obj->", "depth":13, "children":[ 
+                                                        { "id": "2396", "name": "SV(PVCV)", "depth":14, "children":[ 
+                                                            { "id": "2397", "name": "CvPADLIST->", "depth":15, "children":[ 
+                                                                { "id": "2398", "name": "SV(PVAV)", "depth":16, "children":[ 
+                                                                ], "data":{ "$area": 80 } },
+                                                            ], "data":{ "$area": 80 } },
+                                                            { "id": "2399", "name": "CvSTART->", "depth":15, "children":[ 
+                                                                { "id": "2400", "name": "SVOP->", "depth":16, "children":[ 
+                                                                    { "id": "2401", "name": "SV(PV)", "depth":17, "children":[ 
+                                                                    ], "data":{ "$area": 56 } },
+                                                                ], "data":{ "$area": 56 } },
+                                                                { "id": "2402", "name": "SVOP->", "depth":16, "children":[ 
+                                                                    { "id": "2403", "name": "SV(PV)", "depth":17, "children":[ 
+                                                                    ], "data":{ "$area": 56 } },
+                                                                ], "data":{ "$area": 56 } },
+                                                                { "id": "2404", "name": "SVOP->", "depth":16, "children":[ 
+                                                                    { "id": "2405", "name": "SV(PVGV)", "depth":17, "children":[ 
+                                                                        { "id": "2406", "name": "GvNAME_HEK->", "depth":18, "children":[ 
+                                                                        ], "data":{ "$area": 37 } },
+                                                                    ], "data":{ "$area": 189 } },
+                                                                ], "data":{ "$area": 189 } },
+                                                                { "id": "2407", "name": "SVOP->", "depth":16, "children":[ 
+                                                                    { "id": "2408", "name": "SV(PV)", "depth":17, "children":[ 
+                                                                    ], "data":{ "$area": 56 } },
+                                                                ], "data":{ "$area": 56 } },
+                                                                { "id": "2409", "name": "SVOP->", "depth":16, "children":[ 
+                                                                    { "id": "2410", "name": "SV(PV)", "depth":17, "children":[ 
+                                                                    ], "data":{ "$area": 56 } },
+                                                                ], "data":{ "$area": 56 } },
+                                                                { "id": "2411", "name": "SVOP->", "depth":16, "children":[ 
+                                                                    { "id": "2412", "name": "SV(PV)", "depth":17, "children":[ 
+                                                                    ], "data":{ "$area": 56 } },
+                                                                ], "data":{ "$area": 56 } },
+                                                                { "id": "2413", "name": "SVOP->", "depth":16, "children":[ 
+                                                                    { "id": "2414", "name": "SV(PV)", "depth":17, "children":[ 
+                                                                    ], "data":{ "$area": 104 } },
+                                                                ], "data":{ "$area": 104 } },
+                                                                { "id": "2415", "name": "SVOP->", "depth":16, "children":[ 
+                                                                    { "id": "2416", "name": "SV(PV)", "depth":17, "children":[ 
+                                                                    ], "data":{ "$area": 56 } },
+                                                                ], "data":{ "$area": 56 } },
+                                                                { "id": "2417", "name": "PM_GETRE->", "depth":16, "children":[ 
+                                                                    { "id": "2418", "name": "regex_size", "depth":17, "children":[ 
+                                                                    ], "data":{ "$area": 168 } },
+                                                                ], "data":{ "$area": 168 } },
+                                                                { "id": "2419", "name": "SVOP->", "depth":16, "children":[ 
+                                                                    { "id": "2420", "name": "SV(PV)", "depth":17, "children":[ 
+                                                                    ], "data":{ "$area": 56 } },
+                                                                ], "data":{ "$area": 56 } },
+                                                                { "id": "2421", "name": "SVOP->", "depth":16, "children":[ 
+                                                                    { "id": "2422", "name": "SV(PV)", "depth":17, "children":[ 
+                                                                    ], "data":{ "$area": 56 } },
+                                                                ], "data":{ "$area": 56 } },
+                                                                { "id": "2423", "name": "SVOP->", "depth":16, "children":[ 
+                                                                    { "id": "2424", "name": "SV(PV)", "depth":17, "children":[ 
+                                                                    ], "data":{ "$area": 56 } },
+                                                                ], "data":{ "$area": 56 } },
+                                                                { "id": "2425", "name": "SVOP->", "depth":16, "children":[ 
+                                                                    { "id": "2426", "name": "SV(PV)", "depth":17, "children":[ 
+                                                                    ], "data":{ "$area": 56 } },
+                                                                ], "data":{ "$area": 56 } },
+                                                                { "id": "2427", "name": "SVOP->", "depth":16, "children":[ 
+                                                                    { "id": "2428", "name": "SV(PV)", "depth":17, "children":[ 
+                                                                    ], "data":{ "$area": 56 } },
+                                                                ], "data":{ "$area": 56 } },
+                                                            ], "data":{ "$area": 11837 } },
+                                                        ], "data":{ "$area": 12045 } },
+                                                    ], "data":{ "$area": 12045 } },
+                                                ], "data":{ "$area": 12085 } },
+                                            ], "data":{ "$area": 12085 } },
+                                        ], "data":{ "$area": 12237 } },
+                                    ], "data":{ "$area": 12237 } },
+                                    { "id": "2429", "name": "HeVAL->", "depth":9, "children":[ 
+                                        { "id": "2430", "name": "SV(PVGV)", "depth":10, "children":[ 
+                                            { "id": "2431", "name": "gp_av->", "depth":11, "children":[ 
+                                                { "id": "2432", "name": "SV(PVAV)", "depth":12, "children":[ 
+                                                    { "id": "2433", "name": "AVelem->", "depth":13, "children":[ 
+                                                        { "id": "2434", "name": "SV(PV)", "depth":14, "children":[ 
+                                                        ], "data":{ "$area": 56 } },
+                                                    ], "data":{ "$area": 56 } },
+                                                    { "id": "2435", "name": "AVelem->", "depth":13, "children":[ 
+                                                        { "id": "2436", "name": "SV(PV)", "depth":14, "children":[ 
+                                                        ], "data":{ "$area": 56 } },
+                                                    ], "data":{ "$area": 56 } },
+                                                    { "id": "2437", "name": "AVelem->", "depth":13, "children":[ 
+                                                        { "id": "2438", "name": "SV(PV)", "depth":14, "children":[ 
+                                                        ], "data":{ "$area": 56 } },
+                                                    ], "data":{ "$area": 56 } },
+                                                    { "id": "2439", "name": "AVelem->", "depth":13, "children":[ 
+                                                        { "id": "2440", "name": "SV(PV)", "depth":14, "children":[ 
+                                                        ], "data":{ "$area": 56 } },
+                                                    ], "data":{ "$area": 56 } },
+                                                    { "id": "2441", "name": "AVelem->", "depth":13, "children":[ 
+                                                        { "id": "2442", "name": "SV(PV)", "depth":14, "children":[ 
+                                                        ], "data":{ "$area": 56 } },
+                                                    ], "data":{ "$area": 56 } },
+                                                ], "data":{ "$area": 384 } },
+                                            ], "data":{ "$area": 384 } },
+                                        ], "data":{ "$area": 536 } },
+                                    ], "data":{ "$area": 536 } },
+                                    { "id": "2443", "name": "hent_hek->", "depth":9, "children":[ 
+                                    ], "data":{ "$area": 41 } },
+                                    { "id": "2444", "name": "HeVAL->", "depth":9, "children":[ 
+                                        { "id": "2445", "name": "SV(PVGV)", "depth":10, "children":[ 
+                                        ], "data":{ "$area": 152 } },
+                                    ], "data":{ "$area": 152 } },
+                                    { "id": "2446", "name": "hent_hek->", "depth":9, "children":[ 
+                                    ], "data":{ "$area": 42 } },
+                                    { "id": "2447", "name": "HeVAL->", "depth":9, "children":[ 
+                                        { "id": "2448", "name": "SV(PVGV)", "depth":10, "children":[ 
+                                            { "id": "2449", "name": "UNKNOWN(0,0x0)", "depth":11, "children":[ 
+                                                { "id": "2450", "name": "MAGIC(<)", "depth":12, "children":[ 
+                                                    { "id": "2451", "name": "mg_obj->", "depth":13, "children":[ 
+                                                        { "id": "2452", "name": "SV(PVCV)", "depth":14, "children":[ 
+                                                            { "id": "2453", "name": "CvPADLIST->", "depth":15, "children":[ 
+                                                                { "id": "2454", "name": "SV(PVAV)", "depth":16, "children":[ 
+                                                                ], "data":{ "$area": 80 } },
+                                                            ], "data":{ "$area": 80 } },
+                                                            { "id": "2455", "name": "CvSTART->", "depth":15, "children":[ 
+                                                                { "id": "2456", "name": "SVOP->", "depth":16, "children":[ 
+                                                                    { "id": "2457", "name": "SV(PV)", "depth":17, "children":[ 
+                                                                    ], "data":{ "$area": 40 } },
+                                                                ], "data":{ "$area": 40 } },
+                                                                { "id": "2458", "name": "PM_GETRE->", "depth":16, "children":[ 
+                                                                    { "id": "2459", "name": "regex_size", "depth":17, "children":[ 
+                                                                    ], "data":{ "$area": 160 } },
+                                                                ], "data":{ "$area": 160 } },
+                                                                { "id": "2460", "name": "SVOP->", "depth":16, "children":[ 
+                                                                    { "id": "2461", "name": "SV(PV)", "depth":17, "children":[ 
+                                                                    ], "data":{ "$area": 42 } },
+                                                                ], "data":{ "$area": 42 } },
+                                                                { "id": "2462", "name": "SVOP->", "depth":16, "children":[ 
+                                                                    { "id": "2463", "name": "SV(PV)", "depth":17, "children":[ 
+                                                                    ], "data":{ "$area": 40 } },
+                                                                ], "data":{ "$area": 40 } },
+                                                                { "id": "2464", "name": "SVOP->", "depth":16, "children":[ 
+                                                                    { "id": "2465", "name": "SV(PV)", "depth":17, "children":[ 
+                                                                    ], "data":{ "$area": 40 } },
+                                                                ], "data":{ "$area": 40 } },
+                                                                { "id": "2466", "name": "SVOP->", "depth":16, "children":[ 
+                                                                    { "id": "2467", "name": "SV(PV)", "depth":17, "children":[ 
+                                                                    ], "data":{ "$area": 40 } },
+                                                                ], "data":{ "$area": 40 } },
+                                                                { "id": "2468", "name": "SVOP->", "depth":16, "children":[ 
+                                                                    { "id": "2469", "name": "SV(PV)", "depth":17, "children":[ 
+                                                                    ], "data":{ "$area": 50 } },
+                                                                ], "data":{ "$area": 50 } },
+                                                            ], "data":{ "$area": 2156 } },
+                                                        ], "data":{ "$area": 2364 } },
+                                                    ], "data":{ "$area": 2364 } },
+                                                ], "data":{ "$area": 2404 } },
+                                            ], "data":{ "$area": 2404 } },
+                                        ], "data":{ "$area": 2556 } },
+                                    ], "data":{ "$area": 2556 } },
+                                    { "id": "2470", "name": "HeVAL->", "depth":9, "children":[ 
+                                        { "id": "2471", "name": "SV(PVGV)", "depth":10, "children":[ 
+                                            { "id": "2472", "name": "gp_av->", "depth":11, "children":[ 
+                                                { "id": "2473", "name": "SV(PVAV)", "depth":12, "children":[ 
+                                                    { "id": "2474", "name": "UNKNOWN(0,0x0)", "depth":13, "children":[ 
+                                                        { "id": "2475", "name": "MAGIC(I)", "depth":14, "children":[ 
+                                                        ], "data":{ "$area": 40 } },
+                                                    ], "data":{ "$area": 40 } },
+                                                    { "id": "2476", "name": "AVelem->", "depth":13, "children":[ 
+                                                        { "id": "2477", "name": "SV(PVMG)", "depth":14, "children":[ 
+                                                            { "id": "2478", "name": "UNKNOWN(0,0x0)", "depth":15, "children":[ 
+                                                                { "id": "2479", "name": "MAGIC(i)", "depth":16, "children":[ 
+                                                                ], "data":{ "$area": 40 } },
+                                                            ], "data":{ "$area": 40 } },
+                                                        ], "data":{ "$area": 128 } },
+                                                    ], "data":{ "$area": 128 } },
+                                                ], "data":{ "$area": 264 } },
+                                            ], "data":{ "$area": 264 } },
+                                        ], "data":{ "$area": 416 } },
+                                    ], "data":{ "$area": 416 } },
+                                    { "id": "2480", "name": "hent_hek->", "depth":9, "children":[ 
+                                    ], "data":{ "$area": 41 } },
+                                    { "id": "2481", "name": "HeVAL->", "depth":9, "children":[ 
+                                        { "id": "2482", "name": "SV(PVGV)", "depth":10, "children":[ 
+                                            { "id": "2483", "name": "UNKNOWN(0,0x0)", "depth":11, "children":[ 
+                                                { "id": "2484", "name": "MAGIC(<)", "depth":12, "children":[ 
+                                                    { "id": "2485", "name": "mg_obj->", "depth":13, "children":[ 
+                                                        { "id": "2486", "name": "SV(PVCV)", "depth":14, "children":[ 
+                                                        ], "data":{ "$area": 128 } },
+                                                    ], "data":{ "$area": 128 } },
+                                                ], "data":{ "$area": 168 } },
+                                            ], "data":{ "$area": 168 } },
+                                        ], "data":{ "$area": 320 } },
+                                    ], "data":{ "$area": 320 } },
+                                    { "id": "2487", "name": "hent_hek->", "depth":9, "children":[ 
+                                    ], "data":{ "$area": 40 } },
+                                    { "id": "2488", "name": "HeVAL->", "depth":9, "children":[ 
+                                        { "id": "2489", "name": "SV(PVGV)", "depth":10, "children":[ 
+                                            { "id": "2490", "name": "UNKNOWN(0,0x0)", "depth":11, "children":[ 
+                                                { "id": "2491", "name": "MAGIC(<)", "depth":12, "children":[ 
+                                                    { "id": "2492", "name": "mg_obj->", "depth":13, "children":[ 
+                                                        { "id": "2493", "name": "SV(PVCV)", "depth":14, "children":[ 
+                                                            { "id": "2494", "name": "CvPADLIST->", "depth":15, "children":[ 
+                                                                { "id": "2495", "name": "SV(PVAV)", "depth":16, "children":[ 
+                                                                ], "data":{ "$area": 80 } },
+                                                            ], "data":{ "$area": 80 } },
+                                                            { "id": "2496", "name": "CvSTART->", "depth":15, "children":[ 
+                                                                { "id": "2497", "name": "SVOP->", "depth":16, "children":[ 
+                                                                    { "id": "2498", "name": "SV(PV)", "depth":17, "children":[ 
+                                                                    ], "data":{ "$area": 56 } },
+                                                                ], "data":{ "$area": 56 } },
+                                                            ], "data":{ "$area": 696 } },
+                                                        ], "data":{ "$area": 904 } },
+                                                    ], "data":{ "$area": 904 } },
+                                                ], "data":{ "$area": 944 } },
+                                            ], "data":{ "$area": 944 } },
+                                        ], "data":{ "$area": 1096 } },
+                                    ], "data":{ "$area": 1096 } },
+                                    { "id": "2499", "name": "hent_hek->", "depth":9, "children":[ 
+                                    ], "data":{ "$area": 42 } },
+                                    { "id": "2500", "name": "HeVAL->", "depth":9, "children":[ 
+                                        { "id": "2501", "name": "SV(PVGV)", "depth":10, "children":[ 
+                                        ], "data":{ "$area": 152 } },
+                                    ], "data":{ "$area": 152 } },
+                                    { "id": "2502", "name": "hent_hek->", "depth":9, "children":[ 
+                                    ], "data":{ "$area": 47 } },
+                                    { "id": "2503", "name": "HeVAL->", "depth":9, "children":[ 
+                                        { "id": "2504", "name": "SV(PVGV)", "depth":10, "children":[ 
+                                            { "id": "2505", "name": "UNKNOWN(0,0x0)", "depth":11, "children":[ 
+                                                { "id": "2506", "name": "MAGIC(<)", "depth":12, "children":[ 
+                                                    { "id": "2507", "name": "mg_obj->", "depth":13, "children":[ 
+                                                        { "id": "2508", "name": "SV(PVCV)", "depth":14, "children":[ 
+                                                            { "id": "2509", "name": "CvPADLIST->", "depth":15, "children":[ 
+                                                                { "id": "2510", "name": "SV(PVAV)", "depth":16, "children":[ 
+                                                                ], "data":{ "$area": 80 } },
+                                                            ], "data":{ "$area": 80 } },
+                                                            { "id": "2511", "name": "CvSTART->", "depth":15, "children":[ 
+                                                                { "id": "2512", "name": "SVOP->", "depth":16, "children":[ 
+                                                                    { "id": "2513", "name": "SV(PV)", "depth":17, "children":[ 
+                                                                    ], "data":{ "$area": 43 } },
+                                                                ], "data":{ "$area": 43 } },
+                                                                { "id": "2514", "name": "SVOP->", "depth":16, "children":[ 
+                                                                    { "id": "2515", "name": "SV(PV)", "depth":17, "children":[ 
+                                                                    ], "data":{ "$area": 62 } },
+                                                                ], "data":{ "$area": 62 } },
+                                                                { "id": "2516", "name": "SVOP->", "depth":16, "children":[ 
+                                                                    { "id": "2517", "name": "SV(PV)", "depth":17, "children":[ 
+                                                                    ], "data":{ "$area": 43 } },
+                                                                ], "data":{ "$area": 43 } },
+                                                                { "id": "2518", "name": "SVOP->", "depth":16, "children":[ 
+                                                                    { "id": "2519", "name": "SV(PV)", "depth":17, "children":[ 
+                                                                    ], "data":{ "$area": 57 } },
+                                                                ], "data":{ "$area": 57 } },
+                                                                { "id": "2520", "name": "SVOP->", "depth":16, "children":[ 
+                                                                    { "id": "2521", "name": "SV(PV)", "depth":17, "children":[ 
+                                                                    ], "data":{ "$area": 56 } },
+                                                                ], "data":{ "$area": 56 } },
+                                                                { "id": "2522", "name": "SVOP->", "depth":16, "children":[ 
+                                                                    { "id": "2523", "name": "SV(PV)", "depth":17, "children":[ 
+                                                                        { "id": "2524", "name": "SvSHARED_HEK_FROM_PV->", "depth":18, "children":[ 
+                                                                        ], "data":{ "$area": 41 } },
+                                                                    ], "data":{ "$area": 81 } },
+                                                                ], "data":{ "$area": 81 } },
+                                                                { "id": "2525", "name": "SVOP->", "depth":16, "children":[ 
+                                                                    { "id": "2526", "name": "SV(PV)", "depth":17, "children":[ 
+                                                                    ], "data":{ "$area": 56 } },
+                                                                ], "data":{ "$area": 56 } },
+                                                                { "id": "2527", "name": "SVOP->", "depth":16, "children":[ 
+                                                                    { "id": "2528", "name": "SV(PV)", "depth":17, "children":[ 
+                                                                    ], "data":{ "$area": 56 } },
+                                                                ], "data":{ "$area": 56 } },
+                                                                { "id": "2529", "name": "SVOP->", "depth":16, "children":[ 
+                                                                    { "id": "2530", "name": "SV(PV)", "depth":17, "children":[ 
+                                                                    ], "data":{ "$area": 40 } },
+                                                                ], "data":{ "$area": 40 } },
+                                                                { "id": "2531", "name": "SVOP->", "depth":16, "children":[ 
+                                                                    { "id": "2532", "name": "SV(PV)", "depth":17, "children":[ 
+                                                                    ], "data":{ "$area": 56 } },
+                                                                ], "data":{ "$area": 56 } },
+                                                                { "id": "2533", "name": "SVOP->", "depth":16, "children":[ 
+                                                                    { "id": "2534", "name": "SV(PV)", "depth":17, "children":[ 
+                                                                        { "id": "2535", "name": "SvSHARED_HEK_FROM_PV->", "depth":18, "children":[ 
+                                                                        ], "data":{ "$area": 41 } },
+                                                                    ], "data":{ "$area": 81 } },
+                                                                ], "data":{ "$area": 81 } },
+                                                                { "id": "2536", "name": "SVOP->", "depth":16, "children":[ 
+                                                                    { "id": "2537", "name": "SV(PV)", "depth":17, "children":[ 
+                                                                    ], "data":{ "$area": 56 } },
+                                                                ], "data":{ "$area": 56 } },
+                                                                { "id": "2538", "name": "SVOP->", "depth":16, "children":[ 
+                                                                    { "id": "2539", "name": "SV(PV)", "depth":17, "children":[ 
+                                                                    ], "data":{ "$area": 40 } },
+                                                                ], "data":{ "$area": 40 } },
+                                                                { "id": "2540", "name": "SVOP->", "depth":16, "children":[ 
+                                                                    { "id": "2541", "name": "SV(PV)", "depth":17, "children":[ 
+                                                                    ], "data":{ "$area": 56 } },
+                                                                ], "data":{ "$area": 56 } },
+                                                                { "id": "2542", "name": "SVOP->", "depth":16, "children":[ 
+                                                                    { "id": "2543", "name": "SV(PV)", "depth":17, "children":[ 
+                                                                    ], "data":{ "$area": 40 } },
+                                                                ], "data":{ "$area": 40 } },
+                                                                { "id": "2544", "name": "SVOP->", "depth":16, "children":[ 
+                                                                    { "id": "2545", "name": "SV(PV)", "depth":17, "children":[ 
+                                                                    ], "data":{ "$area": 56 } },
+                                                                ], "data":{ "$area": 56 } },
+                                                                { "id": "2546", "name": "SVOP->", "depth":16, "children":[ 
+                                                                    { "id": "2547", "name": "SV(PV)", "depth":17, "children":[ 
+                                                                    ], "data":{ "$area": 43 } },
+                                                                ], "data":{ "$area": 43 } },
+                                                                { "id": "2548", "name": "SVOP->", "depth":16, "children":[ 
+                                                                    { "id": "2549", "name": "SV(PV)", "depth":17, "children":[ 
+                                                                    ], "data":{ "$area": 60 } },
+                                                                ], "data":{ "$area": 60 } },
+                                                                { "id": "2550", "name": "SVOP->", "depth":16, "children":[ 
+                                                                    { "id": "2551", "name": "SV(PV)", "depth":17, "children":[ 
+                                                                        { "id": "2552", "name": "SvSHARED_HEK_FROM_PV->", "depth":18, "children":[ 
+                                                                        ], "data":{ "$area": 41 } },
+                                                                    ], "data":{ "$area": 81 } },
+                                                                ], "data":{ "$area": 81 } },
+                                                                { "id": "2553", "name": "SVOP->", "depth":16, "children":[ 
+                                                                    { "id": "2554", "name": "SV(PV)", "depth":17, "children":[ 
+                                                                    ], "data":{ "$area": 56 } },
+                                                                ], "data":{ "$area": 56 } },
+                                                                { "id": "2555", "name": "SVOP->", "depth":16, "children":[ 
+                                                                    { "id": "2556", "name": "SV(PV)", "depth":17, "children":[ 
+                                                                        { "id": "2557", "name": "SvSHARED_HEK_FROM_PV->", "depth":18, "children":[ 
+                                                                        ], "data":{ "$area": 43 } },
+                                                                    ], "data":{ "$area": 83 } },
+                                                                ], "data":{ "$area": 83 } },
+                                                                { "id": "2558", "name": "SVOP->", "depth":16, "children":[ 
+                                                                    { "id": "2559", "name": "SV(PV)", "depth":17, "children":[ 
+                                                                    ], "data":{ "$area": 56 } },
+                                                                ], "data":{ "$area": 56 } },
+                                                                { "id": "2560", "name": "SVOP->", "depth":16, "children":[ 
+                                                                    { "id": "2561", "name": "SV(PV)", "depth":17, "children":[ 
+                                                                    ], "data":{ "$area": 72 } },
+                                                                ], "data":{ "$area": 72 } },
+                                                                { "id": "2562", "name": "PM_GETRE->", "depth":16, "children":[ 
+                                                                    { "id": "2563", "name": "regex_size", "depth":17, "children":[ 
+                                                                    ], "data":{ "$area": 168 } },
+                                                                ], "data":{ "$area": 168 } },
+                                                                { "id": "2564", "name": "PM_GETRE->", "depth":16, "children":[ 
+                                                                    { "id": "2565", "name": "regex_size", "depth":17, "children":[ 
+                                                                    ], "data":{ "$area": 168 } },
+                                                                ], "data":{ "$area": 168 } },
+                                                                { "id": "2566", "name": "SVOP->", "depth":16, "children":[ 
+                                                                    { "id": "2567", "name": "SV(PV)", "depth":17, "children":[ 
+                                                                        { "id": "2568", "name": "SvSHARED_HEK_FROM_PV->", "depth":18, "children":[ 
+                                                                        ], "data":{ "$area": 40 } },
+                                                                    ], "data":{ "$area": 80 } },
+                                                                ], "data":{ "$area": 80 } },
+                                                                { "id": "2569", "name": "SVOP->", "depth":16, "children":[ 
+                                                                    { "id": "2570", "name": "SV(PV)", "depth":17, "children":[ 
+                                                                    ], "data":{ "$area": 56 } },
+                                                                ], "data":{ "$area": 56 } },
+                                                                { "id": "2571", "name": "SVOP->", "depth":16, "children":[ 
+                                                                    { "id": "2572", "name": "SV(PV)", "depth":17, "children":[ 
+                                                                    ], "data":{ "$area": 56 } },
+                                                                ], "data":{ "$area": 56 } },
+                                                                { "id": "2573", "name": "SVOP->", "depth":16, "children":[ 
+                                                                    { "id": "2574", "name": "SV(PV)", "depth":17, "children":[ 
+                                                                    ], "data":{ "$area": 40 } },
+                                                                ], "data":{ "$area": 40 } },
+                                                                { "id": "2575", "name": "SVOP->", "depth":16, "children":[ 
+                                                                    { "id": "2576", "name": "SV(PV)", "depth":17, "children":[ 
+                                                                    ], "data":{ "$area": 56 } },
+                                                                ], "data":{ "$area": 56 } },
+                                                                { "id": "2577", "name": "SVOP->", "depth":16, "children":[ 
+                                                                    { "id": "2578", "name": "SV(PV)", "depth":17, "children":[ 
+                                                                    ], "data":{ "$area": 40 } },
+                                                                ], "data":{ "$area": 40 } },
+                                                            ], "data":{ "$area": 13690 } },
+                                                        ], "data":{ "$area": 13898 } },
+                                                    ], "data":{ "$area": 13898 } },
+                                                ], "data":{ "$area": 13938 } },
+                                            ], "data":{ "$area": 13938 } },
+                                        ], "data":{ "$area": 14090 } },
+                                    ], "data":{ "$area": 14090 } },
+                                    { "id": "2579", "name": "hent_hek->", "depth":9, "children":[ 
+                                    ], "data":{ "$area": 42 } },
+                                    { "id": "2580", "name": "HeVAL->", "depth":9, "children":[ 
+                                        { "id": "2581", "name": "SV(PVGV)", "depth":10, "children":[ 
+                                            { "id": "2582", "name": "UNKNOWN(0,0x0)", "depth":11, "children":[ 
+                                                { "id": "2583", "name": "MAGIC(<)", "depth":12, "children":[ 
+                                                    { "id": "2584", "name": "mg_obj->", "depth":13, "children":[ 
+                                                        { "id": "2585", "name": "SV(PVCV)", "depth":14, "children":[ 
+                                                            { "id": "2586", "name": "CvPADLIST->", "depth":15, "children":[ 
+                                                                { "id": "2587", "name": "SV(PVAV)", "depth":16, "children":[ 
+                                                                ], "data":{ "$area": 80 } },
+                                                            ], "data":{ "$area": 80 } },
+                                                            { "id": "2588", "name": "CvSTART->", "depth":15, "children":[ 
+                                                                { "id": "2589", "name": "SVOP->", "depth":16, "children":[ 
+                                                                    { "id": "2590", "name": "SV(PV)", "depth":17, "children":[ 
+                                                                    ], "data":{ "$area": 40 } },
+                                                                ], "data":{ "$area": 40 } },
+                                                                { "id": "2591", "name": "SVOP->", "depth":16, "children":[ 
+                                                                    { "id": "2592", "name": "SV(PV)", "depth":17, "children":[ 
+                                                                    ], "data":{ "$area": 40 } },
+                                                                ], "data":{ "$area": 40 } },
+                                                                { "id": "2593", "name": "SVOP->", "depth":16, "children":[ 
+                                                                    { "id": "2594", "name": "SV(PV)", "depth":17, "children":[ 
+                                                                    ], "data":{ "$area": 40 } },
+                                                                ], "data":{ "$area": 40 } },
+                                                                { "id": "2595", "name": "SVOP->", "depth":16, "children":[ 
+                                                                    { "id": "2596", "name": "SV(PV)", "depth":17, "children":[ 
+                                                                    ], "data":{ "$area": 61 } },
+                                                                ], "data":{ "$area": 61 } },
+                                                                { "id": "2597", "name": "SVOP->", "depth":16, "children":[ 
+                                                                    { "id": "2598", "name": "SV(PV)", "depth":17, "children":[ 
+                                                                    ], "data":{ "$area": 40 } },
+                                                                ], "data":{ "$area": 40 } },
+                                                                { "id": "2599", "name": "SVOP->", "depth":16, "children":[ 
+                                                                    { "id": "2600", "name": "SV(PV)", "depth":17, "children":[ 
+                                                                    ], "data":{ "$area": 56 } },
+                                                                ], "data":{ "$area": 56 } },
+                                                                { "id": "2601", "name": "SVOP->", "depth":16, "children":[ 
+                                                                    { "id": "2602", "name": "SV(PV)", "depth":17, "children":[ 
+                                                                        { "id": "2603", "name": "SvSHARED_HEK_FROM_PV->", "depth":18, "children":[ 
+                                                                        ], "data":{ "$area": 40 } },
+                                                                    ], "data":{ "$area": 80 } },
+                                                                ], "data":{ "$area": 80 } },
+                                                                { "id": "2604", "name": "SVOP->", "depth":16, "children":[ 
+                                                                    { "id": "2605", "name": "SV(PV)", "depth":17, "children":[ 
+                                                                    ], "data":{ "$area": 56 } },
+                                                                ], "data":{ "$area": 56 } },
+                                                                { "id": "2606", "name": "SVOP->", "depth":16, "children":[ 
+                                                                    { "id": "2607", "name": "SV(PV)", "depth":17, "children":[ 
+                                                                    ], "data":{ "$area": 40 } },
+                                                                ], "data":{ "$area": 40 } },
+                                                                { "id": "2608", "name": "SVOP->", "depth":16, "children":[ 
+                                                                    { "id": "2609", "name": "SV(PV)", "depth":17, "children":[ 
+                                                                    ], "data":{ "$area": 56 } },
+                                                                ], "data":{ "$area": 56 } },
+                                                            ], "data":{ "$area": 2989 } },
+                                                        ], "data":{ "$area": 3197 } },
+                                                    ], "data":{ "$area": 3197 } },
+                                                ], "data":{ "$area": 3237 } },
+                                            ], "data":{ "$area": 3237 } },
+                                        ], "data":{ "$area": 3389 } },
+                                    ], "data":{ "$area": 3389 } },
+                                    { "id": "2610", "name": "HeVAL->", "depth":9, "children":[ 
+                                        { "id": "2611", "name": "SV(PVGV)", "depth":10, "children":[ 
+                                            { "id": "2612", "name": "UNKNOWN(0,0x0)", "depth":11, "children":[ 
+                                                { "id": "2613", "name": "MAGIC(<)", "depth":12, "children":[ 
+                                                    { "id": "2614", "name": "mg_obj->", "depth":13, "children":[ 
+                                                        { "id": "2615", "name": "SV(PVCV)", "depth":14, "children":[ 
+                                                        ], "data":{ "$area": 128 } },
+                                                    ], "data":{ "$area": 128 } },
+                                                ], "data":{ "$area": 168 } },
+                                            ], "data":{ "$area": 168 } },
+                                        ], "data":{ "$area": 320 } },
+                                    ], "data":{ "$area": 320 } },
+                                    { "id": "2616", "name": "hent_hek->", "depth":9, "children":[ 
+                                    ], "data":{ "$area": 44 } },
+                                    { "id": "2617", "name": "HeVAL->", "depth":9, "children":[ 
+                                        { "id": "2618", "name": "SV(PVGV)", "depth":10, "children":[ 
+                                        ], "data":{ "$area": 152 } },
+                                    ], "data":{ "$area": 152 } },
+                                    { "id": "2619", "name": "HeVAL->", "depth":9, "children":[ 
+                                        { "id": "2620", "name": "SV(PVGV)", "depth":10, "children":[ 
+                                            { "id": "2621", "name": "UNKNOWN(0,0x0)", "depth":11, "children":[ 
+                                                { "id": "2622", "name": "MAGIC(<)", "depth":12, "children":[ 
+                                                ], "data":{ "$area": 40 } },
+                                            ], "data":{ "$area": 40 } },
+                                        ], "data":{ "$area": 192 } },
+                                    ], "data":{ "$area": 192 } },
+                                    { "id": "2623", "name": "hent_hek->", "depth":9, "children":[ 
+                                    ], "data":{ "$area": 47 } },
+                                    { "id": "2624", "name": "HeVAL->", "depth":9, "children":[ 
+                                        { "id": "2625", "name": "SV(PVGV)", "depth":10, "children":[ 
+                                        ], "data":{ "$area": 152 } },
+                                    ], "data":{ "$area": 152 } },
+                                    { "id": "2626", "name": "hent_hek->", "depth":9, "children":[ 
+                                    ], "data":{ "$area": 42 } },
+                                    { "id": "2627", "name": "HeVAL->", "depth":9, "children":[ 
+                                        { "id": "2628", "name": "SV(PVGV)", "depth":10, "children":[ 
+                                            { "id": "2629", "name": "UNKNOWN(0,0x0)", "depth":11, "children":[ 
+                                                { "id": "2630", "name": "MAGIC(<)", "depth":12, "children":[ 
+                                                    { "id": "2631", "name": "mg_obj->", "depth":13, "children":[ 
+                                                        { "id": "2632", "name": "SV(PVCV)", "depth":14, "children":[ 
+                                                            { "id": "2633", "name": "CvPADLIST->", "depth":15, "children":[ 
+                                                                { "id": "2634", "name": "SV(PVAV)", "depth":16, "children":[ 
+                                                                ], "data":{ "$area": 80 } },
+                                                            ], "data":{ "$area": 80 } },
+                                                            { "id": "2635", "name": "CvSTART->", "depth":15, "children":[ 
+                                                                { "id": "2636", "name": "SVOP->", "depth":16, "children":[ 
+                                                                    { "id": "2637", "name": "SV(PV)", "depth":17, "children":[ 
+                                                                    ], "data":{ "$area": 40 } },
+                                                                ], "data":{ "$area": 40 } },
+                                                            ], "data":{ "$area": 520 } },
+                                                        ], "data":{ "$area": 728 } },
+                                                    ], "data":{ "$area": 728 } },
+                                                ], "data":{ "$area": 768 } },
+                                            ], "data":{ "$area": 768 } },
+                                        ], "data":{ "$area": 920 } },
+                                    ], "data":{ "$area": 920 } },
+                                    { "id": "2638", "name": "hent_hek->", "depth":9, "children":[ 
+                                    ], "data":{ "$area": 46 } },
+                                    { "id": "2639", "name": "HeVAL->", "depth":9, "children":[ 
+                                        { "id": "2640", "name": "SV(PVGV)", "depth":10, "children":[ 
+                                            { "id": "2641", "name": "UNKNOWN(0,0x0)", "depth":11, "children":[ 
+                                                { "id": "2642", "name": "MAGIC(<)", "depth":12, "children":[ 
+                                                    { "id": "2643", "name": "mg_obj->", "depth":13, "children":[ 
+                                                        { "id": "2644", "name": "SV(PVCV)", "depth":14, "children":[ 
+                                                            { "id": "2645", "name": "CvPADLIST->", "depth":15, "children":[ 
+                                                                { "id": "2646", "name": "SV(PVAV)", "depth":16, "children":[ 
+                                                                ], "data":{ "$area": 80 } },
+                                                            ], "data":{ "$area": 80 } },
+                                                            { "id": "2647", "name": "CvSTART->", "depth":15, "children":[ 
+                                                                { "id": "2648", "name": "SVOP->", "depth":16, "children":[ 
+                                                                    { "id": "2649", "name": "SV(PV)", "depth":17, "children":[ 
+                                                                    ], "data":{ "$area": 56 } },
+                                                                ], "data":{ "$area": 56 } },
+                                                            ], "data":{ "$area": 472 } },
+                                                        ], "data":{ "$area": 680 } },
+                                                    ], "data":{ "$area": 680 } },
+                                                ], "data":{ "$area": 720 } },
+                                            ], "data":{ "$area": 720 } },
+                                        ], "data":{ "$area": 872 } },
+                                    ], "data":{ "$area": 872 } },
+                                    { "id": "2650", "name": "hent_hek->", "depth":9, "children":[ 
+                                    ], "data":{ "$area": 42 } },
+                                    { "id": "2651", "name": "HeVAL->", "depth":9, "children":[ 
+                                        { "id": "2652", "name": "SV(PVGV)", "depth":10, "children":[ 
+                                        ], "data":{ "$area": 152 } },
+                                    ], "data":{ "$area": 152 } },
+                                    { "id": "2653", "name": "HeVAL->", "depth":9, "children":[ 
+                                        { "id": "2654", "name": "SV(PVGV)", "depth":10, "children":[ 
+                                            { "id": "2655", "name": "gp_av->", "depth":11, "children":[ 
+                                                { "id": "2656", "name": "SV(PVAV)", "depth":12, "children":[ 
+                                                    { "id": "2657", "name": "AVelem->", "depth":13, "children":[ 
+                                                        { "id": "2658", "name": "SV(PV)", "depth":14, "children":[ 
+                                                        ], "data":{ "$area": 56 } },
+                                                    ], "data":{ "$area": 56 } },
+                                                    { "id": "2659", "name": "AVelem->", "depth":13, "children":[ 
+                                                        { "id": "2660", "name": "SV(PV)", "depth":14, "children":[ 
+                                                        ], "data":{ "$area": 56 } },
+                                                    ], "data":{ "$area": 56 } },
+                                                    { "id": "2661", "name": "AVelem->", "depth":13, "children":[ 
+                                                        { "id": "2662", "name": "SV(PV)", "depth":14, "children":[ 
+                                                        ], "data":{ "$area": 56 } },
+                                                    ], "data":{ "$area": 56 } },
+                                                    { "id": "2663", "name": "AVelem->", "depth":13, "children":[ 
+                                                        { "id": "2664", "name": "SV(PV)", "depth":14, "children":[ 
+                                                        ], "data":{ "$area": 56 } },
+                                                    ], "data":{ "$area": 56 } },
+                                                ], "data":{ "$area": 320 } },
+                                            ], "data":{ "$area": 320 } },
+                                        ], "data":{ "$area": 472 } },
+                                    ], "data":{ "$area": 472 } },
+                                    { "id": "2665", "name": "HeVAL->", "depth":9, "children":[ 
+                                        { "id": "2666", "name": "SV(PVGV)", "depth":10, "children":[ 
+                                        ], "data":{ "$area": 152 } },
+                                    ], "data":{ "$area": 152 } },
+                                    { "id": "2667", "name": "hent_hek->", "depth":9, "children":[ 
+                                    ], "data":{ "$area": 39 } },
+                                    { "id": "2668", "name": "HeVAL->", "depth":9, "children":[ 
+                                        { "id": "2669", "name": "SV(PVGV)", "depth":10, "children":[ 
+                                            { "id": "2670", "name": "UNKNOWN(0,0x0)", "depth":11, "children":[ 
+                                                { "id": "2671", "name": "MAGIC(<)", "depth":12, "children":[ 
+                                                    { "id": "2672", "name": "mg_obj->", "depth":13, "children":[ 
+                                                        { "id": "2673", "name": "SV(PVCV)", "depth":14, "children":[ 
+                                                            { "id": "2674", "name": "CvPADLIST->", "depth":15, "children":[ 
+                                                                { "id": "2675", "name": "SV(PVAV)", "depth":16, "children":[ 
+                                                                ], "data":{ "$area": 80 } },
+                                                            ], "data":{ "$area": 80 } },
+                                                            { "id": "2676", "name": "CvSTART->", "depth":15, "children":[ 
+                                                                { "id": "2677", "name": "SVOP->", "depth":16, "children":[ 
+                                                                    { "id": "2678", "name": "SV(IV)", "depth":17, "children":[ 
+                                                                    ], "data":{ "$area": 24 } },
+                                                                ], "data":{ "$area": 24 } },
+                                                                { "id": "2679", "name": "SVOP->", "depth":16, "children":[ 
+                                                                    { "id": "2680", "name": "SV(PV)", "depth":17, "children":[ 
+                                                                    ], "data":{ "$area": 40 } },
+                                                                ], "data":{ "$area": 40 } },
+                                                                { "id": "2681", "name": "SVOP->", "depth":16, "children":[ 
+                                                                    { "id": "2682", "name": "SV(PV)", "depth":17, "children":[ 
+                                                                    ], "data":{ "$area": 56 } },
+                                                                ], "data":{ "$area": 56 } },
+                                                                { "id": "2683", "name": "SVOP->", "depth":16, "children":[ 
+                                                                    { "id": "2684", "name": "SV(PV)", "depth":17, "children":[ 
+                                                                    ], "data":{ "$area": 56 } },
+                                                                ], "data":{ "$area": 56 } },
+                                                                { "id": "2685", "name": "SVOP->", "depth":16, "children":[ 
+                                                                    { "id": "2686", "name": "SV(PV)", "depth":17, "children":[ 
+                                                                    ], "data":{ "$area": 56 } },
+                                                                ], "data":{ "$area": 56 } },
+                                                                { "id": "2687", "name": "SVOP->", "depth":16, "children":[ 
+                                                                    { "id": "2688", "name": "SV(PV)", "depth":17, "children":[ 
+                                                                    ], "data":{ "$area": 56 } },
+                                                                ], "data":{ "$area": 56 } },
+                                                                { "id": "2689", "name": "SVOP->", "depth":16, "children":[ 
+                                                                    { "id": "2690", "name": "SV(IV)", "depth":17, "children":[ 
+                                                                    ], "data":{ "$area": 24 } },
+                                                                ], "data":{ "$area": 24 } },
+                                                                { "id": "2691", "name": "PM_GETRE->", "depth":16, "children":[ 
+                                                                    { "id": "2692", "name": "regex_size", "depth":17, "children":[ 
+                                                                    ], "data":{ "$area": 160 } },
+                                                                ], "data":{ "$area": 160 } },
+                                                                { "id": "2693", "name": "SVOP->", "depth":16, "children":[ 
+                                                                    { "id": "2694", "name": "SV(PV)", "depth":17, "children":[ 
+                                                                    ], "data":{ "$area": 56 } },
+                                                                ], "data":{ "$area": 56 } },
+                                                                { "id": "2695", "name": "SVOP->", "depth":16, "children":[ 
+                                                                    { "id": "2696", "name": "SV(IV)", "depth":17, "children":[ 
+                                                                    ], "data":{ "$area": 24 } },
+                                                                ], "data":{ "$area": 24 } },
+                                                                { "id": "2697", "name": "SVOP->", "depth":16, "children":[ 
+                                                                    { "id": "2698", "name": "SV(PV)", "depth":17, "children":[ 
+                                                                    ], "data":{ "$area": 40 } },
+                                                                ], "data":{ "$area": 40 } },
+                                                                { "id": "2699", "name": "PM_GETRE->", "depth":16, "children":[ 
+                                                                    { "id": "2700", "name": "regex_size", "depth":17, "children":[ 
+                                                                    ], "data":{ "$area": 160 } },
+                                                                ], "data":{ "$area": 160 } },
+                                                                { "id": "2701", "name": "SVOP->", "depth":16, "children":[ 
+                                                                    { "id": "2702", "name": "SV(PV)", "depth":17, "children":[ 
+                                                                    ], "data":{ "$area": 40 } },
+                                                                ], "data":{ "$area": 40 } },
+                                                                { "id": "2703", "name": "PM_GETRE->", "depth":16, "children":[ 
+                                                                    { "id": "2704", "name": "regex_size", "depth":17, "children":[ 
+                                                                    ], "data":{ "$area": 160 } },
+                                                                ], "data":{ "$area": 160 } },
+                                                                { "id": "2705", "name": "SVOP->", "depth":16, "children":[ 
+                                                                    { "id": "2706", "name": "SV(PV)", "depth":17, "children":[ 
+                                                                    ], "data":{ "$area": 40 } },
+                                                                ], "data":{ "$area": 40 } },
+                                                                { "id": "2707", "name": "SVOP->", "depth":16, "children":[ 
+                                                                    { "id": "2708", "name": "SV(PV)", "depth":17, "children":[ 
+                                                                    ], "data":{ "$area": 56 } },
+                                                                ], "data":{ "$area": 56 } },
+                                                                { "id": "2709", "name": "SVOP->", "depth":16, "children":[ 
+                                                                    { "id": "2710", "name": "SV(IV)", "depth":17, "children":[ 
+                                                                    ], "data":{ "$area": 24 } },
+                                                                ], "data":{ "$area": 24 } },
+                                                                { "id": "2711", "name": "SVOP->", "depth":16, "children":[ 
+                                                                    { "id": "2712", "name": "SV(PV)", "depth":17, "children":[ 
+                                                                    ], "data":{ "$area": 40 } },
+                                                                ], "data":{ "$area": 40 } },
+                                                                { "id": "2713", "name": "SVOP->", "depth":16, "children":[ 
+                                                                    { "id": "2714", "name": "SV(PV)", "depth":17, "children":[ 
+                                                                    ], "data":{ "$area": 56 } },
+                                                                ], "data":{ "$area": 56 } },
+                                                                { "id": "2715", "name": "SVOP->", "depth":16, "children":[ 
+                                                                    { "id": "2716", "name": "SV(PV)", "depth":17, "children":[ 
+                                                                    ], "data":{ "$area": 40 } },
+                                                                ], "data":{ "$area": 40 } },
+                                                                { "id": "2717", "name": "SVOP->", "depth":16, "children":[ 
+                                                                    { "id": "2718", "name": "SV(PV)", "depth":17, "children":[ 
+                                                                    ], "data":{ "$area": 56 } },
+                                                                ], "data":{ "$area": 56 } },
+                                                                { "id": "2719", "name": "SVOP->", "depth":16, "children":[ 
+                                                                    { "id": "2720", "name": "SV(PV)", "depth":17, "children":[ 
+                                                                    ], "data":{ "$area": 40 } },
+                                                                ], "data":{ "$area": 40 } },
+                                                                { "id": "2721", "name": "SVOP->", "depth":16, "children":[ 
+                                                                    { "id": "2722", "name": "SV(PV)", "depth":17, "children":[ 
+                                                                    ], "data":{ "$area": 40 } },
+                                                                ], "data":{ "$area": 40 } },
+                                                                { "id": "2723", "name": "SVOP->", "depth":16, "children":[ 
+                                                                    { "id": "2724", "name": "SV(PV)", "depth":17, "children":[ 
+                                                                    ], "data":{ "$area": 56 } },
+                                                                ], "data":{ "$area": 56 } },
+                                                                { "id": "2725", "name": "SVOP->", "depth":16, "children":[ 
+                                                                    { "id": "2726", "name": "SV(IV)", "depth":17, "children":[ 
+                                                                    ], "data":{ "$area": 24 } },
+                                                                ], "data":{ "$area": 24 } },
+                                                                { "id": "2727", "name": "SVOP->", "depth":16, "children":[ 
+                                                                    { "id": "2728", "name": "SV(PV)", "depth":17, "children":[ 
+                                                                    ], "data":{ "$area": 56 } },
+                                                                ], "data":{ "$area": 56 } },
+                                                                { "id": "2729", "name": "PM_GETRE->", "depth":16, "children":[ 
+                                                                    { "id": "2730", "name": "regex_size", "depth":17, "children":[ 
+                                                                    ], "data":{ "$area": 160 } },
+                                                                ], "data":{ "$area": 160 } },
+                                                                { "id": "2731", "name": "SVOP->", "depth":16, "children":[ 
+                                                                    { "id": "2732", "name": "SV(PV)", "depth":17, "children":[ 
+                                                                    ], "data":{ "$area": 42 } },
+                                                                ], "data":{ "$area": 42 } },
+                                                                { "id": "2733", "name": "SVOP->", "depth":16, "children":[ 
+                                                                    { "id": "2734", "name": "SV(PV)", "depth":17, "children":[ 
+                                                                    ], "data":{ "$area": 56 } },
+                                                                ], "data":{ "$area": 56 } },
+                                                                { "id": "2735", "name": "SVOP->", "depth":16, "children":[ 
+                                                                    { "id": "2736", "name": "SV(PV)", "depth":17, "children":[ 
+                                                                    ], "data":{ "$area": 56 } },
+                                                                ], "data":{ "$area": 56 } },
+                                                            ], "data":{ "$area": 12642 } },
+                                                        ], "data":{ "$area": 12850 } },
+                                                    ], "data":{ "$area": 12850 } },
+                                                ], "data":{ "$area": 12890 } },
+                                            ], "data":{ "$area": 12890 } },
+                                        ], "data":{ "$area": 13042 } },
+                                    ], "data":{ "$area": 13042 } },
+                                    { "id": "2737", "name": "HeVAL->", "depth":9, "children":[ 
+                                        { "id": "2738", "name": "SV(PVGV)", "depth":10, "children":[ 
+                                            { "id": "2739", "name": "gp_sv->", "depth":11, "children":[ 
+                                                { "id": "2740", "name": "SV(PV)", "depth":12, "children":[ 
+                                                ], "data":{ "$area": 56 } },
+                                            ], "data":{ "$area": 56 } },
+                                        ], "data":{ "$area": 208 } },
+                                    ], "data":{ "$area": 208 } },
+                                    { "id": "2741", "name": "hent_hek->", "depth":9, "children":[ 
+                                    ], "data":{ "$area": 47 } },
+                                    { "id": "2742", "name": "HeVAL->", "depth":9, "children":[ 
+                                        { "id": "2743", "name": "SV(PVGV)", "depth":10, "children":[ 
+                                            { "id": "2744", "name": "UNKNOWN(0,0x0)", "depth":11, "children":[ 
+                                                { "id": "2745", "name": "MAGIC(<)", "depth":12, "children":[ 
+                                                    { "id": "2746", "name": "mg_obj->", "depth":13, "children":[ 
+                                                        { "id": "2747", "name": "SV(PVCV)", "depth":14, "children":[ 
+                                                            { "id": "2748", "name": "CvPADLIST->", "depth":15, "children":[ 
+                                                                { "id": "2749", "name": "SV(PVAV)", "depth":16, "children":[ 
+                                                                ], "data":{ "$area": 80 } },
+                                                            ], "data":{ "$area": 80 } },
+                                                            { "id": "2750", "name": "CvSTART->", "depth":15, "children":[ 
+                                                                { "id": "2751", "name": "SVOP->", "depth":16, "children":[ 
+                                                                    { "id": "2752", "name": "SV(PV)", "depth":17, "children":[ 
+                                                                    ], "data":{ "$area": 71 } },
+                                                                ], "data":{ "$area": 71 } },
+                                                                { "id": "2753", "name": "SVOP->", "depth":16, "children":[ 
+                                                                    { "id": "2754", "name": "SV(PV)", "depth":17, "children":[ 
+                                                                    ], "data":{ "$area": 56 } },
+                                                                ], "data":{ "$area": 56 } },
+                                                                { "id": "2755", "name": "SVOP->", "depth":16, "children":[ 
+                                                                    { "id": "2756", "name": "SV(PV)", "depth":17, "children":[ 
+                                                                    ], "data":{ "$area": 72 } },
+                                                                ], "data":{ "$area": 72 } },
+                                                                { "id": "2757", "name": "SVOP->", "depth":16, "children":[ 
+                                                                    { "id": "2758", "name": "SV(PV)", "depth":17, "children":[ 
+                                                                    ], "data":{ "$area": 56 } },
+                                                                ], "data":{ "$area": 56 } },
+                                                                { "id": "2759", "name": "SVOP->", "depth":16, "children":[ 
+                                                                    { "id": "2760", "name": "SV(PV)", "depth":17, "children":[ 
+                                                                    ], "data":{ "$area": 56 } },
+                                                                ], "data":{ "$area": 56 } },
+                                                                { "id": "2761", "name": "SVOP->", "depth":16, "children":[ 
+                                                                    { "id": "2762", "name": "SV(PV)", "depth":17, "children":[ 
+                                                                    ], "data":{ "$area": 40 } },
+                                                                ], "data":{ "$area": 40 } },
+                                                                { "id": "2763", "name": "SVOP->", "depth":16, "children":[ 
+                                                                    { "id": "2764", "name": "SV(PV)", "depth":17, "children":[ 
+                                                                    ], "data":{ "$area": 56 } },
+                                                                ], "data":{ "$area": 56 } },
+                                                                { "id": "2765", "name": "SVOP->", "depth":16, "children":[ 
+                                                                    { "id": "2766", "name": "SV(PV)", "depth":17, "children":[ 
+                                                                    ], "data":{ "$area": 40 } },
+                                                                ], "data":{ "$area": 40 } },
+                                                                { "id": "2767", "name": "SVOP->", "depth":16, "children":[ 
+                                                                    { "id": "2768", "name": "SV(PV)", "depth":17, "children":[ 
+                                                                    ], "data":{ "$area": 56 } },
+                                                                ], "data":{ "$area": 56 } },
+                                                                { "id": "2769", "name": "SVOP->", "depth":16, "children":[ 
+                                                                    { "id": "2770", "name": "SV(PV)", "depth":17, "children":[ 
+                                                                    ], "data":{ "$area": 40 } },
+                                                                ], "data":{ "$area": 40 } },
+                                                                { "id": "2771", "name": "SVOP->", "depth":16, "children":[ 
+                                                                    { "id": "2772", "name": "SV(PV)", "depth":17, "children":[ 
+                                                                    ], "data":{ "$area": 56 } },
+                                                                ], "data":{ "$area": 56 } },
+                                                            ], "data":{ "$area": 4415 } },
+                                                        ], "data":{ "$area": 4623 } },
+                                                    ], "data":{ "$area": 4623 } },
+                                                ], "data":{ "$area": 4663 } },
+                                            ], "data":{ "$area": 4663 } },
+                                        ], "data":{ "$area": 4815 } },
+                                    ], "data":{ "$area": 4815 } },
+                                    { "id": "2773", "name": "isa->", "depth":9, "children":[ 
+                                        { "id": "2774", "name": "SV(PVHV)", "depth":10, "children":[ 
+                                            { "id": "2775", "name": "HvARRAY->", "depth":11, "children":[ 
+                                            ], "data":{ "$area": 72 } },
+                                        ], "data":{ "$area": 192 } },
+                                    ], "data":{ "$area": 192 } },
+                                    { "id": "2776", "name": "mro_linear_current->", "depth":9, "children":[ 
+                                        { "id": "2777", "name": "SV(PVAV)", "depth":10, "children":[ 
+                                            { "id": "2778", "name": "AVelem->", "depth":11, "children":[ 
+                                                { "id": "2779", "name": "SV(PV)", "depth":12, "children":[ 
+                                                ], "data":{ "$area": 40 } },
+                                            ], "data":{ "$area": 40 } },
+                                            { "id": "2780", "name": "AVelem->", "depth":11, "children":[ 
+                                                { "id": "2781", "name": "SV(PV)", "depth":12, "children":[ 
+                                                ], "data":{ "$area": 40 } },
+                                            ], "data":{ "$area": 40 } },
+                                        ], "data":{ "$area": 176 } },
+                                    ], "data":{ "$area": 176 } },
+                                ], "data":{ "$area": 131256 } },
+                            ], "data":{ "$area": 131824 } },
+                        ], "data":{ "$area": 131824 } },
+                    ], "data":{ "$area": 131976 } },
+                ], "data":{ "$area": 131976 } },
+                { "id": "2782", "name": "hent_hek->", "depth":4, "children":[ 
+                ], "data":{ "$area": 40 } },
+                { "id": "2783", "name": "HeVAL->", "depth":4, "children":[ 
+                    { "id": "2784", "name": "SV(PVGV)", "depth":5, "children":[ 
+                        { "id": "2785", "name": "gp_sv->", "depth":6, "children":[ 
+                            { "id": "2786", "name": "SV(NULL)", "depth":7, "children":[ 
+                            ], "data":{ "$area": 24 } },
+                        ], "data":{ "$area": 24 } },
+                    ], "data":{ "$area": 176 } },
+                ], "data":{ "$area": 176 } },
+                { "id": "2787", "name": "hent_hek->", "depth":4, "children":[ 
+                ], "data":{ "$area": 35 } },
+                { "id": "2788", "name": "HeVAL->", "depth":4, "children":[ 
+                    { "id": "2789", "name": "SV(PVGV)", "depth":5, "children":[ 
+                        { "id": "2790", "name": "gp_sv->", "depth":6, "children":[ 
+                            { "id": "2791", "name": "SV(NULL)", "depth":7, "children":[ 
+                            ], "data":{ "$area": 24 } },
+                        ], "data":{ "$area": 24 } },
+                    ], "data":{ "$area": 176 } },
+                ], "data":{ "$area": 176 } },
+                { "id": "2792", "name": "hent_hek->", "depth":4, "children":[ 
+                ], "data":{ "$area": 100 } },
+                { "id": "2793", "name": "HeVAL->", "depth":4, "children":[ 
+                    { "id": "2794", "name": "SV(PVGV)", "depth":5, "children":[ 
+                        { "id": "2795", "name": "gp_sv->", "depth":6, "children":[ 
+                            { "id": "2796", "name": "SV(PV)", "depth":7, "children":[ 
+                            ], "data":{ "$area": 120 } },
+                        ], "data":{ "$area": 120 } },
+                    ], "data":{ "$area": 272 } },
+                ], "data":{ "$area": 272 } },
+                { "id": "2797", "name": "hent_hek->", "depth":4, "children":[ 
+                ], "data":{ "$area": 42 } },
+                { "id": "2798", "name": "HeVAL->", "depth":4, "children":[ 
+                    { "id": "2799", "name": "SV(PVGV)", "depth":5, "children":[ 
+                        { "id": "2800", "name": "gp_hv->", "depth":6, "children":[ 
+                            { "id": "2801", "name": "SV(PVHV)", "depth":7, "children":[ 
+                                { "id": "2802", "name": "HvARRAY->", "depth":8, "children":[ 
+                                    { "id": "2803", "name": "HeVAL->", "depth":9, "children":[ 
+                                        { "id": "2804", "name": "SV(PVGV)", "depth":10, "children":[ 
+                                            { "id": "2805", "name": "UNKNOWN(0,0x0)", "depth":11, "children":[ 
+                                                { "id": "2806", "name": "MAGIC(<)", "depth":12, "children":[ 
+                                                    { "id": "2807", "name": "mg_obj->", "depth":13, "children":[ 
+                                                        { "id": "2808", "name": "SV(PVCV)", "depth":14, "children":[ 
+                                                        ], "data":{ "$area": 144 } },
+                                                    ], "data":{ "$area": 144 } },
+                                                ], "data":{ "$area": 184 } },
+                                            ], "data":{ "$area": 184 } },
+                                        ], "data":{ "$area": 336 } },
+                                    ], "data":{ "$area": 336 } },
+                                    { "id": "2809", "name": "HvNAME_HEK->", "depth":9, "children":[ 
+                                    ], "data":{ "$area": 40 } },
+                                ], "data":{ "$area": 488 } },
+                            ], "data":{ "$area": 608 } },
+                        ], "data":{ "$area": 608 } },
+                    ], "data":{ "$area": 760 } },
+                ], "data":{ "$area": 760 } },
+                { "id": "2810", "name": "HeVAL->", "depth":4, "children":[ 
+                    { "id": "2811", "name": "SV(PVGV)", "depth":5, "children":[ 
+                    ], "data":{ "$area": 152 } },
+                ], "data":{ "$area": 152 } },
+                { "id": "2812", "name": "hent_hek->", "depth":4, "children":[ 
+                ], "data":{ "$area": 45 } },
+                { "id": "2813", "name": "HeVAL->", "depth":4, "children":[ 
+                    { "id": "2814", "name": "SV(PVGV)", "depth":5, "children":[ 
+                        { "id": "2815", "name": "gp_hv->", "depth":6, "children":[ 
+                            { "id": "2816", "name": "SV(PVHV)", "depth":7, "children":[ 
+                                { "id": "2817", "name": "HvARRAY->", "depth":8, "children":[ 
+                                    { "id": "2818", "name": "HeVAL->", "depth":9, "children":[ 
+                                        { "id": "2819", "name": "SV(PVGV)", "depth":10, "children":[ 
+                                            { "id": "2820", "name": "UNKNOWN(0,0x0)", "depth":11, "children":[ 
+                                                { "id": "2821", "name": "MAGIC(<)", "depth":12, "children":[ 
+                                                    { "id": "2822", "name": "mg_obj->", "depth":13, "children":[ 
+                                                        { "id": "2823", "name": "SV(PVCV)", "depth":14, "children":[ 
+                                                        ], "data":{ "$area": 128 } },
+                                                    ], "data":{ "$area": 128 } },
+                                                ], "data":{ "$area": 168 } },
+                                            ], "data":{ "$area": 168 } },
+                                        ], "data":{ "$area": 320 } },
+                                    ], "data":{ "$area": 320 } },
+                                    { "id": "2824", "name": "HeVAL->", "depth":9, "children":[ 
+                                        { "id": "2825", "name": "SV(PVGV)", "depth":10, "children":[ 
+                                            { "id": "2826", "name": "UNKNOWN(0,0x0)", "depth":11, "children":[ 
+                                                { "id": "2827", "name": "MAGIC(<)", "depth":12, "children":[ 
+                                                    { "id": "2828", "name": "mg_obj->", "depth":13, "children":[ 
+                                                        { "id": "2829", "name": "SV(PVCV)", "depth":14, "children":[ 
+                                                        ], "data":{ "$area": 128 } },
+                                                    ], "data":{ "$area": 128 } },
+                                                ], "data":{ "$area": 168 } },
+                                            ], "data":{ "$area": 168 } },
+                                        ], "data":{ "$area": 320 } },
+                                    ], "data":{ "$area": 320 } },
+                                    { "id": "2830", "name": "hent_hek->", "depth":9, "children":[ 
+                                    ], "data":{ "$area": 37 } },
+                                    { "id": "2831", "name": "HeVAL->", "depth":9, "children":[ 
+                                        { "id": "2832", "name": "SV(PVGV)", "depth":10, "children":[ 
+                                            { "id": "2833", "name": "UNKNOWN(0,0x0)", "depth":11, "children":[ 
+                                                { "id": "2834", "name": "MAGIC(<)", "depth":12, "children":[ 
+                                                    { "id": "2835", "name": "mg_obj->", "depth":13, "children":[ 
+                                                        { "id": "2836", "name": "SV(PVCV)", "depth":14, "children":[ 
+                                                        ], "data":{ "$area": 128 } },
+                                                    ], "data":{ "$area": 128 } },
+                                                ], "data":{ "$area": 168 } },
+                                            ], "data":{ "$area": 168 } },
+                                        ], "data":{ "$area": 320 } },
+                                    ], "data":{ "$area": 320 } },
+                                    { "id": "2837", "name": "hent_hek->", "depth":9, "children":[ 
+                                    ], "data":{ "$area": 38 } },
+                                    { "id": "2838", "name": "HeVAL->", "depth":9, "children":[ 
+                                        { "id": "2839", "name": "SV(PVGV)", "depth":10, "children":[ 
+                                            { "id": "2840", "name": "UNKNOWN(0,0x0)", "depth":11, "children":[ 
+                                                { "id": "2841", "name": "MAGIC(<)", "depth":12, "children":[ 
+                                                    { "id": "2842", "name": "mg_obj->", "depth":13, "children":[ 
+                                                        { "id": "2843", "name": "SV(PVCV)", "depth":14, "children":[ 
+                                                        ], "data":{ "$area": 128 } },
+                                                    ], "data":{ "$area": 128 } },
+                                                ], "data":{ "$area": 168 } },
+                                            ], "data":{ "$area": 168 } },
+                                        ], "data":{ "$area": 320 } },
+                                    ], "data":{ "$area": 320 } },
+                                    { "id": "2844", "name": "isa->", "depth":9, "children":[ 
+                                        { "id": "2845", "name": "SV(PVHV)", "depth":10, "children":[ 
+                                            { "id": "2846", "name": "HvARRAY->", "depth":11, "children":[ 
+                                            ], "data":{ "$area": 24 } },
+                                        ], "data":{ "$area": 144 } },
+                                    ], "data":{ "$area": 144 } },
+                                    { "id": "2847", "name": "mro_linear_current->", "depth":9, "children":[ 
+                                        { "id": "2848", "name": "SV(PVAV)", "depth":10, "children":[ 
+                                            { "id": "2849", "name": "AVelem->", "depth":11, "children":[ 
+                                                { "id": "2850", "name": "SV(PV)", "depth":12, "children":[ 
+                                                ], "data":{ "$area": 40 } },
+                                            ], "data":{ "$area": 40 } },
+                                        ], "data":{ "$area": 136 } },
+                                    ], "data":{ "$area": 136 } },
+                                ], "data":{ "$area": 1819 } },
+                            ], "data":{ "$area": 1939 } },
+                        ], "data":{ "$area": 1939 } },
+                    ], "data":{ "$area": 2091 } },
+                ], "data":{ "$area": 2091 } },
+                { "id": "2851", "name": "hent_hek->", "depth":4, "children":[ 
+                ], "data":{ "$area": 44 } },
+                { "id": "2852", "name": "HeVAL->", "depth":4, "children":[ 
+                    { "id": "2853", "name": "SV(PVGV)", "depth":5, "children":[ 
+                        { "id": "2854", "name": "gp_hv->", "depth":6, "children":[ 
+                            { "id": "2855", "name": "SV(PVHV)", "depth":7, "children":[ 
+                                { "id": "2856", "name": "HvARRAY->", "depth":8, "children":[ 
+                                    { "id": "2857", "name": "HvNAME_HEK->", "depth":9, "children":[ 
+                                    ], "data":{ "$area": 42 } },
+                                ], "data":{ "$area": 130 } },
+                            ], "data":{ "$area": 250 } },
+                        ], "data":{ "$area": 250 } },
+                    ], "data":{ "$area": 402 } },
+                ], "data":{ "$area": 402 } },
+                { "id": "2858", "name": "hent_hek->", "depth":4, "children":[ 
+                ], "data":{ "$area": 40 } },
+                { "id": "2859", "name": "HeVAL->", "depth":4, "children":[ 
+                    { "id": "2860", "name": "SV(PVGV)", "depth":5, "children":[ 
+                        { "id": "2861", "name": "gp_hv->", "depth":6, "children":[ 
+                            { "id": "2862", "name": "SV(PVHV)", "depth":7, "children":[ 
+                                { "id": "2863", "name": "HvARRAY->", "depth":8, "children":[ 
+                                    { "id": "2864", "name": "hent_hek->", "depth":9, "children":[ 
+                                    ], "data":{ "$area": 40 } },
+                                    { "id": "2865", "name": "HeVAL->", "depth":9, "children":[ 
+                                        { "id": "2866", "name": "SV(PVGV)", "depth":10, "children":[ 
+                                            { "id": "2867", "name": "gp_hv->", "depth":11, "children":[ 
+                                                { "id": "2868", "name": "SV(PVHV)", "depth":12, "children":[ 
+                                                    { "id": "2869", "name": "HvARRAY->", "depth":13, "children":[ 
+                                                        { "id": "2870", "name": "HeVAL->", "depth":14, "children":[ 
+                                                            { "id": "2871", "name": "SV(PVGV)", "depth":15, "children":[ 
+                                                                { "id": "2872", "name": "gp_av->", "depth":16, "children":[ 
+                                                                    { "id": "2873", "name": "SV(PVAV)", "depth":17, "children":[ 
+                                                                        { "id": "2874", "name": "UNKNOWN(0,0x0)", "depth":18, "children":[ 
+                                                                            { "id": "2875", "name": "MAGIC(I)", "depth":19, "children":[ 
+                                                                            ], "data":{ "$area": 40 } },
+                                                                        ], "data":{ "$area": 40 } },
+                                                                        { "id": "2876", "name": "AVelem->", "depth":18, "children":[ 
+                                                                            { "id": "2877", "name": "SV(PVMG)", "depth":19, "children":[ 
+                                                                                { "id": "2878", "name": "UNKNOWN(0,0x0)", "depth":20, "children":[ 
+                                                                                    { "id": "2879", "name": "MAGIC(i)", "depth":21, "children":[ 
+                                                                                    ], "data":{ "$area": 40 } },
+                                                                                ], "data":{ "$area": 40 } },
+                                                                            ], "data":{ "$area": 144 } },
+                                                                        ], "data":{ "$area": 144 } },
+                                                                    ], "data":{ "$area": 280 } },
+                                                                ], "data":{ "$area": 280 } },
+                                                            ], "data":{ "$area": 432 } },
+                                                        ], "data":{ "$area": 432 } },
+                                                        { "id": "2880", "name": "HeVAL->", "depth":14, "children":[ 
+                                                            { "id": "2881", "name": "SV(PVGV)", "depth":15, "children":[ 
+                                                                { "id": "2882", "name": "UNKNOWN(0,0x0)", "depth":16, "children":[ 
+                                                                    { "id": "2883", "name": "MAGIC(<)", "depth":17, "children":[ 
+                                                                    ], "data":{ "$area": 40 } },
+                                                                ], "data":{ "$area": 40 } },
+                                                            ], "data":{ "$area": 192 } },
+                                                        ], "data":{ "$area": 192 } },
+                                                        { "id": "2884", "name": "hent_hek->", "depth":14, "children":[ 
+                                                        ], "data":{ "$area": 40 } },
+                                                        { "id": "2885", "name": "HeVAL->", "depth":14, "children":[ 
+                                                            { "id": "2886", "name": "SV(PVGV)", "depth":15, "children":[ 
+                                                                { "id": "2887", "name": "gp_cv->", "depth":16, "children":[ 
+                                                                    { "id": "2888", "name": "SV(PVCV)", "depth":17, "children":[ 
+                                                                        { "id": "2889", "name": "CvSTASH->", "depth":18, "children":[ 
+                                                                            { "id": "2890", "name": "SV(PVHV)", "depth":19, "children":[ 
+                                                                                { "id": "2891", "name": "HvARRAY->", "depth":20, "children":[ 
+                                                                                    { "id": "2892", "name": "hent_hek->", "depth":21, "children":[ 
+                                                                                    ], "data":{ "$area": 42 } },
+                                                                                    { "id": "2893", "name": "hent_hek->", "depth":21, "children":[ 
+                                                                                    ], "data":{ "$area": 40 } },
+                                                                                    { "id": "2894", "name": "hent_hek->", "depth":21, "children":[ 
+                                                                                    ], "data":{ "$area": 47 } },
+                                                                                    { "id": "2895", "name": "hent_hek->", "depth":21, "children":[ 
+                                                                                    ], "data":{ "$area": 39 } },
+                                                                                    { "id": "2896", "name": "hent_hek->", "depth":21, "children":[ 
+                                                                                    ], "data":{ "$area": 41 } },
+                                                                                    { "id": "2897", "name": "hent_hek->", "depth":21, "children":[ 
+                                                                                    ], "data":{ "$area": 44 } },
+                                                                                    { "id": "2898", "name": "hent_hek->", "depth":21, "children":[ 
+                                                                                    ], "data":{ "$area": 41 } },
+                                                                                    { "id": "2899", "name": "hent_hek->", "depth":21, "children":[ 
+                                                                                    ], "data":{ "$area": 39 } },
+                                                                                    { "id": "2900", "name": "hent_hek->", "depth":21, "children":[ 
+                                                                                    ], "data":{ "$area": 38 } },
+                                                                                    { "id": "2901", "name": "hent_hek->", "depth":21, "children":[ 
+                                                                                    ], "data":{ "$area": 38 } },
+                                                                                    { "id": "2902", "name": "hent_hek->", "depth":21, "children":[ 
+                                                                                    ], "data":{ "$area": 43 } },
+                                                                                    { "id": "2903", "name": "hent_hek->", "depth":21, "children":[ 
+                                                                                    ], "data":{ "$area": 38 } },
+                                                                                    { "id": "2904", "name": "hent_hek->", "depth":21, "children":[ 
+                                                                                    ], "data":{ "$area": 41 } },
+                                                                                    { "id": "2905", "name": "hent_hek->", "depth":21, "children":[ 
+                                                                                    ], "data":{ "$area": 43 } },
+                                                                                    { "id": "2906", "name": "HvNAME_HEK->", "depth":21, "children":[ 
+                                                                                    ], "data":{ "$area": 50 } },
+                                                                                    { "id": "2907", "name": "isa->", "depth":21, "children":[ 
+                                                                                        { "id": "2908", "name": "SV(PVHV)", "depth":22, "children":[ 
+                                                                                            { "id": "2909", "name": "HvARRAY->", "depth":23, "children":[ 
+                                                                                            ], "data":{ "$area": 48 } },
+                                                                                        ], "data":{ "$area": 168 } },
+                                                                                    ], "data":{ "$area": 168 } },
+                                                                                    { "id": "2910", "name": "mro_linear_current->", "depth":21, "children":[ 
+                                                                                        { "id": "2911", "name": "SV(PVAV)", "depth":22, "children":[ 
+                                                                                            { "id": "2912", "name": "AVelem->", "depth":23, "children":[ 
+                                                                                                { "id": "2913", "name": "SV(PV)", "depth":24, "children":[ 
+                                                                                                ], "data":{ "$area": 40 } },
+                                                                                            ], "data":{ "$area": 40 } },
+                                                                                        ], "data":{ "$area": 136 } },
+                                                                                    ], "data":{ "$area": 136 } },
+                                                                                ], "data":{ "$area": 1592 } },
+                                                                            ], "data":{ "$area": 1904 } },
+                                                                        ], "data":{ "$area": 1904 } },
+                                                                        { "id": "2914", "name": "CvGV->", "depth":18, "children":[ 
+                                                                            { "id": "2915", "name": "SV(PVGV)", "depth":19, "children":[ 
+                                                                                { "id": "2916", "name": "UNKNOWN(0,0x0)", "depth":20, "children":[ 
+                                                                                    { "id": "2917", "name": "MAGIC(<)", "depth":21, "children":[ 
+                                                                                    ], "data":{ "$area": 40 } },
+                                                                                ], "data":{ "$area": 40 } },
+                                                                                { "id": "2918", "name": "GvFILE_HEK->", "depth":20, "children":[ 
+                                                                                ], "data":{ "$area": 122 } },
+                                                                            ], "data":{ "$area": 314 } },
+                                                                        ], "data":{ "$area": 314 } },
+                                                                        { "id": "2919", "name": "CvPADLIST->", "depth":18, "children":[ 
+                                                                            { "id": "2920", "name": "SV(PVAV)", "depth":19, "children":[ 
+                                                                            ], "data":{ "$area": 80 } },
+                                                                        ], "data":{ "$area": 80 } },
+                                                                        { "id": "2921", "name": "CvOUTSIDE->", "depth":18, "children":[ 
+                                                                            { "id": "2922", "name": "SV(PVCV)", "depth":19, "children":[ 
+                                                                                { "id": "2923", "name": "CvPADLIST->", "depth":20, "children":[ 
+                                                                                    { "id": "2924", "name": "SV(PVAV)", "depth":21, "children":[ 
+                                                                                    ], "data":{ "$area": 80 } },
+                                                                                ], "data":{ "$area": 80 } },
+                                                                            ], "data":{ "$area": 208 } },
+                                                                        ], "data":{ "$area": 208 } },
+                                                                        { "id": "2925", "name": "CvSTART->", "depth":18, "children":[ 
+                                                                            { "id": "2926", "name": "SVOP->", "depth":19, "children":[ 
+                                                                                { "id": "2927", "name": "SV(PV)", "depth":20, "children":[ 
+                                                                                ], "data":{ "$area": 40 } },
+                                                                            ], "data":{ "$area": 40 } },
+                                                                            { "id": "2928", "name": "SVOP->", "depth":19, "children":[ 
+                                                                                { "id": "2929", "name": "SV(PV)", "depth":20, "children":[ 
+                                                                                ], "data":{ "$area": 56 } },
+                                                                            ], "data":{ "$area": 56 } },
+                                                                            { "id": "2930", "name": "SVOP->", "depth":19, "children":[ 
+                                                                                { "id": "2931", "name": "SV(PV)", "depth":20, "children":[ 
+                                                                                ], "data":{ "$area": 56 } },
+                                                                            ], "data":{ "$area": 56 } },
+                                                                        ], "data":{ "$area": 1016 } },
+                                                                    ], "data":{ "$area": 3650 } },
+                                                                ], "data":{ "$area": 3650 } },
+                                                            ], "data":{ "$area": 3802 } },
+                                                        ], "data":{ "$area": 3802 } },
+                                                        { "id": "2932", "name": "HeVAL->", "depth":14, "children":[ 
+                                                            { "id": "2933", "name": "SV(PVGV)", "depth":15, "children":[ 
+                                                                { "id": "2934", "name": "gp_sv->", "depth":16, "children":[ 
+                                                                    { "id": "2935", "name": "SV(PV)", "depth":17, "children":[ 
+                                                                    ], "data":{ "$area": 56 } },
+                                                                ], "data":{ "$area": 56 } },
+                                                            ], "data":{ "$area": 208 } },
+                                                        ], "data":{ "$area": 208 } },
+                                                        { "id": "2936", "name": "hent_hek->", "depth":14, "children":[ 
+                                                        ], "data":{ "$area": 40 } },
+                                                        { "id": "2937", "name": "HeVAL->", "depth":14, "children":[ 
+                                                            { "id": "2938", "name": "SV(PVGV)", "depth":15, "children":[ 
+                                                            ], "data":{ "$area": 152 } },
+                                                        ], "data":{ "$area": 152 } },
+                                                        { "id": "2939", "name": "HeVAL->", "depth":14, "children":[ 
+                                                            { "id": "2940", "name": "SV(PVGV)", "depth":15, "children":[ 
+                                                                { "id": "2941", "name": "gp_cv->", "depth":16, "children":[ 
+                                                                    { "id": "2942", "name": "SV(PVCV)", "depth":17, "children":[ 
+                                                                        { "id": "2943", "name": "CvGV->", "depth":18, "children":[ 
+                                                                            { "id": "2944", "name": "SV(PVGV)", "depth":19, "children":[ 
+                                                                                { "id": "2945", "name": "UNKNOWN(0,0x0)", "depth":20, "children":[ 
+                                                                                    { "id": "2946", "name": "MAGIC(<)", "depth":21, "children":[ 
+                                                                                    ], "data":{ "$area": 40 } },
+                                                                                ], "data":{ "$area": 40 } },
+                                                                            ], "data":{ "$area": 192 } },
+                                                                        ], "data":{ "$area": 192 } },
+                                                                        { "id": "2947", "name": "CvPADLIST->", "depth":18, "children":[ 
+                                                                            { "id": "2948", "name": "SV(PVAV)", "depth":19, "children":[ 
+                                                                            ], "data":{ "$area": 80 } },
+                                                                        ], "data":{ "$area": 80 } },
+                                                                        { "id": "2949", "name": "CvSTART->", "depth":18, "children":[ 
+                                                                            { "id": "2950", "name": "PM_GETRE->", "depth":19, "children":[ 
+                                                                                { "id": "2951", "name": "regex_size", "depth":20, "children":[ 
+                                                                                ], "data":{ "$area": 160 } },
+                                                                            ], "data":{ "$area": 160 } },
+                                                                            { "id": "2952", "name": "SVOP->", "depth":19, "children":[ 
+                                                                                { "id": "2953", "name": "SV(PV)", "depth":20, "children":[ 
+                                                                                ], "data":{ "$area": 56 } },
+                                                                            ], "data":{ "$area": 56 } },
+                                                                            { "id": "2954", "name": "SVOP->", "depth":19, "children":[ 
+                                                                                { "id": "2955", "name": "SV(PV)", "depth":20, "children":[ 
+                                                                                ], "data":{ "$area": 56 } },
+                                                                            ], "data":{ "$area": 56 } },
+                                                                            { "id": "2956", "name": "PM_GETRE->", "depth":19, "children":[ 
+                                                                                { "id": "2957", "name": "regex_size", "depth":20, "children":[ 
+                                                                                ], "data":{ "$area": 160 } },
+                                                                            ], "data":{ "$area": 160 } },
+                                                                            { "id": "2958", "name": "SVOP->", "depth":19, "children":[ 
+                                                                                { "id": "2959", "name": "SV(PV)", "depth":20, "children":[ 
+                                                                                ], "data":{ "$area": 42 } },
+                                                                            ], "data":{ "$area": 42 } },
+                                                                            { "id": "2960", "name": "PM_GETRE->", "depth":19, "children":[ 
+                                                                                { "id": "2961", "name": "regex_size", "depth":20, "children":[ 
+                                                                                ], "data":{ "$area": 160 } },
+                                                                            ], "data":{ "$area": 160 } },
+                                                                            { "id": "2962", "name": "SVOP->", "depth":19, "children":[ 
+                                                                                { "id": "2963", "name": "SV(PV)", "depth":20, "children":[ 
+                                                                                ], "data":{ "$area": 42 } },
+                                                                            ], "data":{ "$area": 42 } },
+                                                                            { "id": "2964", "name": "PM_GETRE->", "depth":19, "children":[ 
+                                                                                { "id": "2965", "name": "regex_size", "depth":20, "children":[ 
+                                                                                ], "data":{ "$area": 160 } },
+                                                                            ], "data":{ "$area": 160 } },
+                                                                            { "id": "2966", "name": "SVOP->", "depth":19, "children":[ 
+                                                                                { "id": "2967", "name": "SV(PV)", "depth":20, "children":[ 
+                                                                                ], "data":{ "$area": 56 } },
+                                                                            ], "data":{ "$area": 56 } },
+                                                                            { "id": "2968", "name": "SVOP->", "depth":19, "children":[ 
+                                                                                { "id": "2969", "name": "SV(PV)", "depth":20, "children":[ 
+                                                                                ], "data":{ "$area": 56 } },
+                                                                            ], "data":{ "$area": 56 } },
+                                                                            { "id": "2970", "name": "PM_GETRE->", "depth":19, "children":[ 
+                                                                                { "id": "2971", "name": "regex_size", "depth":20, "children":[ 
+                                                                                ], "data":{ "$area": 160 } },
+                                                                            ], "data":{ "$area": 160 } },
+                                                                            { "id": "2972", "name": "SVOP->", "depth":19, "children":[ 
+                                                                                { "id": "2973", "name": "SV(PV)", "depth":20, "children":[ 
+                                                                                ], "data":{ "$area": 42 } },
+                                                                            ], "data":{ "$area": 42 } },
+                                                                            { "id": "2974", "name": "PM_GETRE->", "depth":19, "children":[ 
+                                                                                { "id": "2975", "name": "regex_size", "depth":20, "children":[ 
+                                                                                ], "data":{ "$area": 160 } },
+                                                                            ], "data":{ "$area": 160 } },
+                                                                            { "id": "2976", "name": "SVOP->", "depth":19, "children":[ 
+                                                                                { "id": "2977", "name": "SV(PV)", "depth":20, "children":[ 
+                                                                                ], "data":{ "$area": 42 } },
+                                                                            ], "data":{ "$area": 42 } },
+                                                                            { "id": "2978", "name": "PM_GETRE->", "depth":19, "children":[ 
+                                                                                { "id": "2979", "name": "regex_size", "depth":20, "children":[ 
+                                                                                ], "data":{ "$area": 168 } },
+                                                                            ], "data":{ "$area": 168 } },
+                                                                            { "id": "2980", "name": "SVOP->", "depth":19, "children":[ 
+                                                                                { "id": "2981", "name": "SV(PV)", "depth":20, "children":[ 
+                                                                                ], "data":{ "$area": 42 } },
+                                                                            ], "data":{ "$area": 42 } },
+                                                                            { "id": "2982", "name": "PM_GETRE->", "depth":19, "children":[ 
+                                                                                { "id": "2983", "name": "regex_size", "depth":20, "children":[ 
+                                                                                ], "data":{ "$area": 168 } },
+                                                                            ], "data":{ "$area": 168 } },
+                                                                            { "id": "2984", "name": "SVOP->", "depth":19, "children":[ 
+                                                                                { "id": "2985", "name": "SV(PV)", "depth":20, "children":[ 
+                                                                                ], "data":{ "$area": 56 } },
+                                                                            ], "data":{ "$area": 56 } },
+                                                                            { "id": "2986", "name": "SVOP->", "depth":19, "children":[ 
+                                                                                { "id": "2987", "name": "SV(PV)", "depth":20, "children":[ 
+                                                                                ], "data":{ "$area": 56 } },
+                                                                            ], "data":{ "$area": 56 } },
+                                                                            { "id": "2988", "name": "SVOP->", "depth":19, "children":[ 
+                                                                                { "id": "2989", "name": "SV(PV)", "depth":20, "children":[ 
+                                                                                ], "data":{ "$area": 56 } },
+                                                                            ], "data":{ "$area": 56 } },
+                                                                            { "id": "2990", "name": "SVOP->", "depth":19, "children":[ 
+                                                                                { "id": "2991", "name": "SV(PV)", "depth":20, "children":[ 
+                                                                                ], "data":{ "$area": 56 } },
+                                                                            ], "data":{ "$area": 56 } },
+                                                                        ], "data":{ "$area": 6986 } },
+                                                                    ], "data":{ "$area": 7386 } },
+                                                                ], "data":{ "$area": 7386 } },
+                                                            ], "data":{ "$area": 7538 } },
+                                                        ], "data":{ "$area": 7538 } },
+                                                        { "id": "2992", "name": "HeVAL->", "depth":14, "children":[ 
+                                                            { "id": "2993", "name": "SV(PVGV)", "depth":15, "children":[ 
+                                                            ], "data":{ "$area": 152 } },
+                                                        ], "data":{ "$area": 152 } },
+                                                        { "id": "2994", "name": "HvNAME_HEK->", "depth":14, "children":[ 
+                                                        ], "data":{ "$area": 44 } },
+                                                        { "id": "2995", "name": "isa->", "depth":14, "children":[ 
+                                                            { "id": "2996", "name": "SV(PVHV)", "depth":15, "children":[ 
+                                                                { "id": "2997", "name": "HvARRAY->", "depth":16, "children":[ 
+                                                                ], "data":{ "$area": 72 } },
+                                                            ], "data":{ "$area": 192 } },
+                                                        ], "data":{ "$area": 192 } },
+                                                        { "id": "2998", "name": "mro_linear_current->", "depth":14, "children":[ 
+                                                            { "id": "2999", "name": "SV(PVAV)", "depth":15, "children":[ 
+                                                                { "id": "3000", "name": "AVelem->", "depth":16, "children":[ 
+                                                                    { "id": "3001", "name": "SV(PV)", "depth":17, "children":[ 
+                                                                    ], "data":{ "$area": 40 } },
+                                                                ], "data":{ "$area": 40 } },
+                                                                { "id": "3002", "name": "AVelem->", "depth":16, "children":[ 
+                                                                    { "id": "3003", "name": "SV(PV)", "depth":17, "children":[ 
+                                                                    ], "data":{ "$area": 40 } },
+                                                                ], "data":{ "$area": 40 } },
+                                                            ], "data":{ "$area": 176 } },
+                                                        ], "data":{ "$area": 176 } },
+                                                    ], "data":{ "$area": 13224 } },
+                                                ], "data":{ "$area": 13344 } },
+                                            ], "data":{ "$area": 13344 } },
+                                        ], "data":{ "$area": 13496 } },
+                                    ], "data":{ "$area": 13496 } },
+                                    { "id": "3004", "name": "HvNAME_HEK->", "depth":9, "children":[ 
+                                    ], "data":{ "$area": 38 } },
+                                ], "data":{ "$area": 13638 } },
+                            ], "data":{ "$area": 13758 } },
+                        ], "data":{ "$area": 13758 } },
+                    ], "data":{ "$area": 13910 } },
+                ], "data":{ "$area": 13910 } },
+                { "id": "3005", "name": "hent_hek->", "depth":4, "children":[ 
+                ], "data":{ "$area": 48 } },
+                { "id": "3006", "name": "HeVAL->", "depth":4, "children":[ 
+                    { "id": "3007", "name": "SV(PVGV)", "depth":5, "children":[ 
+                        { "id": "3008", "name": "gp_sv->", "depth":6, "children":[ 
+                            { "id": "3009", "name": "SV(IV)", "depth":7, "children":[ 
+                            ], "data":{ "$area": 24 } },
+                        ], "data":{ "$area": 24 } },
+                    ], "data":{ "$area": 176 } },
+                ], "data":{ "$area": 176 } },
+                { "id": "3010", "name": "hent_hek->", "depth":4, "children":[ 
+                ], "data":{ "$area": 39 } },
+                { "id": "3011", "name": "HeVAL->", "depth":4, "children":[ 
+                    { "id": "3012", "name": "SV(PVGV)", "depth":5, "children":[ 
+                        { "id": "3013", "name": "gp_hv->", "depth":6, "children":[ 
+                            { "id": "3014", "name": "SV(PVHV)", "depth":7, "children":[ 
+                                { "id": "3015", "name": "HvARRAY->", "depth":8, "children":[ 
+                                    { "id": "3016", "name": "HvNAME_HEK->", "depth":9, "children":[ 
+                                    ], "data":{ "$area": 37 } },
+                                ], "data":{ "$area": 101 } },
+                            ], "data":{ "$area": 221 } },
+                        ], "data":{ "$area": 221 } },
+                    ], "data":{ "$area": 373 } },
+                ], "data":{ "$area": 373 } },
+                { "id": "3017", "name": "HeVAL->", "depth":4, "children":[ 
+                    { "id": "3018", "name": "SV(PVGV)", "depth":5, "children":[ 
+                    ], "data":{ "$area": 152 } },
+                ], "data":{ "$area": 152 } },
+                { "id": "3019", "name": "hent_hek->", "depth":4, "children":[ 
+                ], "data":{ "$area": 46 } },
+                { "id": "3020", "name": "HeVAL->", "depth":4, "children":[ 
+                    { "id": "3021", "name": "SV(PVGV)", "depth":5, "children":[ 
+                        { "id": "3022", "name": "gp_sv->", "depth":6, "children":[ 
+                            { "id": "3023", "name": "SV(PV)", "depth":7, "children":[ 
+                            ], "data":{ "$area": 56 } },
+                        ], "data":{ "$area": 56 } },
+                    ], "data":{ "$area": 208 } },
+                ], "data":{ "$area": 208 } },
+                { "id": "3024", "name": "hent_hek->", "depth":4, "children":[ 
+                ], "data":{ "$area": 47 } },
+                { "id": "3025", "name": "HeVAL->", "depth":4, "children":[ 
+                    { "id": "3026", "name": "SV(PVGV)", "depth":5, "children":[ 
+                        { "id": "3027", "name": "gp_sv->", "depth":6, "children":[ 
+                            { "id": "3028", "name": "SV(PV)", "depth":7, "children":[ 
+                            ], "data":{ "$area": 56 } },
+                        ], "data":{ "$area": 56 } },
+                    ], "data":{ "$area": 208 } },
+                ], "data":{ "$area": 208 } },
+                { "id": "3029", "name": "HeVAL->", "depth":4, "children":[ 
+                    { "id": "3030", "name": "SV(PVGV)", "depth":5, "children":[ 
+                        { "id": "3031", "name": "UNKNOWN(0,0x0)", "depth":6, "children":[ 
+                            { "id": "3032", "name": "MAGIC(<)", "depth":7, "children":[ 
+                            ], "data":{ "$area": 40 } },
+                        ], "data":{ "$area": 40 } },
+                    ], "data":{ "$area": 192 } },
+                ], "data":{ "$area": 192 } },
+                { "id": "3033", "name": "hent_hek->", "depth":4, "children":[ 
+                ], "data":{ "$area": 116 } },
+                { "id": "3034", "name": "HeVAL->", "depth":4, "children":[ 
+                    { "id": "3035", "name": "SV(PVGV)", "depth":5, "children":[ 
+                        { "id": "3036", "name": "gp_sv->", "depth":6, "children":[ 
+                            { "id": "3037", "name": "SV(PV)", "depth":7, "children":[ 
+                            ], "data":{ "$area": 136 } },
+                        ], "data":{ "$area": 136 } },
+                    ], "data":{ "$area": 288 } },
+                ], "data":{ "$area": 288 } },
+                { "id": "3038", "name": "hent_hek->", "depth":4, "children":[ 
+                ], "data":{ "$area": 102 } },
+                { "id": "3039", "name": "HeVAL->", "depth":4, "children":[ 
+                    { "id": "3040", "name": "SV(PVGV)", "depth":5, "children":[ 
+                        { "id": "3041", "name": "gp_sv->", "depth":6, "children":[ 
+                            { "id": "3042", "name": "SV(PV)", "depth":7, "children":[ 
+                            ], "data":{ "$area": 120 } },
+                        ], "data":{ "$area": 120 } },
+                    ], "data":{ "$area": 272 } },
+                ], "data":{ "$area": 272 } },
+                { "id": "3043", "name": "hent_hek->", "depth":4, "children":[ 
+                ], "data":{ "$area": 38 } },
+                { "id": "3044", "name": "HeVAL->", "depth":4, "children":[ 
+                    { "id": "3045", "name": "SV(PVGV)", "depth":5, "children":[ 
+                        { "id": "3046", "name": "gp_hv->", "depth":6, "children":[ 
+                            { "id": "3047", "name": "SV(PVHV)", "depth":7, "children":[ 
+                                { "id": "3048", "name": "HvARRAY->", "depth":8, "children":[ 
+                                    { "id": "3049", "name": "hent_hek->", "depth":9, "children":[ 
+                                    ], "data":{ "$area": 44 } },
+                                    { "id": "3050", "name": "HeVAL->", "depth":9, "children":[ 
+                                        { "id": "3051", "name": "SV(PVGV)", "depth":10, "children":[ 
+                                            { "id": "3052", "name": "gp_hv->", "depth":11, "children":[ 
+                                                { "id": "3053", "name": "SV(PVHV)", "depth":12, "children":[ 
+                                                    { "id": "3054", "name": "HvARRAY->", "depth":13, "children":[ 
+                                                        { "id": "3055", "name": "HvNAME_HEK->", "depth":14, "children":[ 
+                                                        ], "data":{ "$area": 46 } },
+                                                        { "id": "3056", "name": "isa->", "depth":14, "children":[ 
+                                                            { "id": "3057", "name": "SV(PVHV)", "depth":15, "children":[ 
+                                                                { "id": "3058", "name": "HvARRAY->", "depth":16, "children":[ 
+                                                                ], "data":{ "$area": 48 } },
+                                                            ], "data":{ "$area": 168 } },
+                                                        ], "data":{ "$area": 168 } },
+                                                        { "id": "3059", "name": "mro_linear_current->", "depth":14, "children":[ 
+                                                            { "id": "3060", "name": "SV(PVAV)", "depth":15, "children":[ 
+                                                                { "id": "3061", "name": "AVelem->", "depth":16, "children":[ 
+                                                                    { "id": "3062", "name": "SV(PV)", "depth":17, "children":[ 
+                                                                    ], "data":{ "$area": 40 } },
+                                                                ], "data":{ "$area": 40 } },
+                                                            ], "data":{ "$area": 136 } },
+                                                        ], "data":{ "$area": 136 } },
+                                                    ], "data":{ "$area": 438 } },
+                                                ], "data":{ "$area": 558 } },
+                                            ], "data":{ "$area": 558 } },
+                                        ], "data":{ "$area": 710 } },
+                                    ], "data":{ "$area": 710 } },
+                                    { "id": "3063", "name": "hent_hek->", "depth":9, "children":[ 
+                                    ], "data":{ "$area": 42 } },
+                                    { "id": "3064", "name": "HeVAL->", "depth":9, "children":[ 
+                                        { "id": "3065", "name": "SV(PVGV)", "depth":10, "children":[ 
+                                            { "id": "3066", "name": "gp_hv->", "depth":11, "children":[ 
+                                                { "id": "3067", "name": "SV(PVHV)", "depth":12, "children":[ 
+                                                    { "id": "3068", "name": "HvARRAY->", "depth":13, "children":[ 
+                                                        { "id": "3069", "name": "HvNAME_HEK->", "depth":14, "children":[ 
+                                                        ], "data":{ "$area": 44 } },
+                                                        { "id": "3070", "name": "isa->", "depth":14, "children":[ 
+                                                            { "id": "3071", "name": "SV(PVHV)", "depth":15, "children":[ 
+                                                                { "id": "3072", "name": "HvARRAY->", "depth":16, "children":[ 
+                                                                ], "data":{ "$area": 48 } },
+                                                            ], "data":{ "$area": 168 } },
+                                                        ], "data":{ "$area": 168 } },
+                                                        { "id": "3073", "name": "mro_linear_current->", "depth":14, "children":[ 
+                                                            { "id": "3074", "name": "SV(PVAV)", "depth":15, "children":[ 
+                                                                { "id": "3075", "name": "AVelem->", "depth":16, "children":[ 
+                                                                    { "id": "3076", "name": "SV(PV)", "depth":17, "children":[ 
+                                                                    ], "data":{ "$area": 40 } },
+                                                                ], "data":{ "$area": 40 } },
+                                                            ], "data":{ "$area": 136 } },
+                                                        ], "data":{ "$area": 136 } },
+                                                    ], "data":{ "$area": 436 } },
+                                                ], "data":{ "$area": 556 } },
+                                            ], "data":{ "$area": 556 } },
+                                        ], "data":{ "$area": 708 } },
+                                    ], "data":{ "$area": 708 } },
+                                    { "id": "3077", "name": "HeVAL->", "depth":9, "children":[ 
+                                        { "id": "3078", "name": "SV(PVGV)", "depth":10, "children":[ 
+                                            { "id": "3079", "name": "gp_hv->", "depth":11, "children":[ 
+                                                { "id": "3080", "name": "SV(PVHV)", "depth":12, "children":[ 
+                                                    { "id": "3081", "name": "UNKNOWN(0,0x0)", "depth":13, "children":[ 
+                                                        { "id": "3082", "name": "MAGIC(c)", "depth":14, "children":[ 
+                                                        ], "data":{ "$area": 56 } },
+                                                        { "id": "3083", "name": "HeVAL->", "depth":14, "children":[ 
+                                                            { "id": "3084", "name": "SV(PVGV)", "depth":15, "children":[ 
+                                                            ], "data":{ "$area": 152 } },
+                                                        ], "data":{ "$area": 152 } },
+                                                        { "id": "3085", "name": "HeVAL->", "depth":14, "children":[ 
+                                                            { "id": "3086", "name": "SV(PVGV)", "depth":15, "children":[ 
+                                                                { "id": "3087", "name": "gp_av->", "depth":16, "children":[ 
+                                                                    { "id": "3088", "name": "SV(PVAV)", "depth":17, "children":[ 
+                                                                        { "id": "3089", "name": "UNKNOWN(0,0x0)", "depth":18, "children":[ 
+                                                                            { "id": "3090", "name": "MAGIC(I)", "depth":19, "children":[ 
+                                                                            ], "data":{ "$area": 40 } },
+                                                                        ], "data":{ "$area": 40 } },
+                                                                        { "id": "3091", "name": "AVelem->", "depth":18, "children":[ 
+                                                                            { "id": "3092", "name": "SV(PVMG)", "depth":19, "children":[ 
+                                                                                { "id": "3093", "name": "UNKNOWN(0,0x0)", "depth":20, "children":[ 
+                                                                                    { "id": "3094", "name": "MAGIC(i)", "depth":21, "children":[ 
+                                                                                    ], "data":{ "$area": 40 } },
+                                                                                ], "data":{ "$area": 40 } },
+                                                                            ], "data":{ "$area": 128 } },
+                                                                        ], "data":{ "$area": 128 } },
+                                                                        { "id": "3095", "name": "AVelem->", "depth":18, "children":[ 
+                                                                            { "id": "3096", "name": "SV(PVMG)", "depth":19, "children":[ 
+                                                                                { "id": "3097", "name": "UNKNOWN(0,0x0)", "depth":20, "children":[ 
+                                                                                    { "id": "3098", "name": "MAGIC(i)", "depth":21, "children":[ 
+                                                                                    ], "data":{ "$area": 40 } },
+                                                                                ], "data":{ "$area": 40 } },
+                                                                            ], "data":{ "$area": 128 } },
+                                                                        ], "data":{ "$area": 128 } },
+                                                                        { "id": "3099", "name": "AVelem->", "depth":18, "children":[ 
+                                                                            { "id": "3100", "name": "SV(PVMG)", "depth":19, "children":[ 
+                                                                                { "id": "3101", "name": "UNKNOWN(0,0x0)", "depth":20, "children":[ 
+                                                                                    { "id": "3102", "name": "MAGIC(i)", "depth":21, "children":[ 
+                                                                                    ], "data":{ "$area": 40 } },
+                                                                                ], "data":{ "$area": 40 } },
+                                                                            ], "data":{ "$area": 128 } },
+                                                                        ], "data":{ "$area": 128 } },
+                                                                    ], "data":{ "$area": 520 } },
+                                                                ], "data":{ "$area": 520 } },
+                                                            ], "data":{ "$area": 672 } },
+                                                        ], "data":{ "$area": 672 } },
+                                                        { "id": "3103", "name": "HeVAL->", "depth":14, "children":[ 
+                                                            { "id": "3104", "name": "SV(PVGV)", "depth":15, "children":[ 
+                                                            ], "data":{ "$area": 152 } },
+                                                        ], "data":{ "$area": 152 } },
+                                                        { "id": "3105", "name": "HvNAME_HEK->", "depth":14, "children":[ 
+                                                        ], "data":{ "$area": 42 } },
+                                                        { "id": "3106", "name": "isa->", "depth":14, "children":[ 
+                                                            { "id": "3107", "name": "SV(PVHV)", "depth":15, "children":[ 
+                                                                { "id": "3108", "name": "HvARRAY->", "depth":16, "children":[ 
+                                                                ], "data":{ "$area": 120 } },
+                                                            ], "data":{ "$area": 240 } },
+                                                        ], "data":{ "$area": 240 } },
+                                                        { "id": "3109", "name": "mro_linear_current->", "depth":14, "children":[ 
+                                                            { "id": "3110", "name": "SV(PVAV)", "depth":15, "children":[ 
+                                                                { "id": "3111", "name": "AVelem->", "depth":16, "children":[ 
+                                                                    { "id": "3112", "name": "SV(PV)", "depth":17, "children":[ 
+                                                                    ], "data":{ "$area": 40 } },
+                                                                ], "data":{ "$area": 40 } },
+                                                                { "id": "3113", "name": "AVelem->", "depth":16, "children":[ 
+                                                                    { "id": "3114", "name": "SV(PV)", "depth":17, "children":[ 
+                                                                    ], "data":{ "$area": 40 } },
+                                                                ], "data":{ "$area": 40 } },
+                                                                { "id": "3115", "name": "AVelem->", "depth":16, "children":[ 
+                                                                    { "id": "3116", "name": "SV(PV)", "depth":17, "children":[ 
+                                                                    ], "data":{ "$area": 40 } },
+                                                                ], "data":{ "$area": 40 } },
+                                                                { "id": "3117", "name": "AVelem->", "depth":16, "children":[ 
+                                                                    { "id": "3118", "name": "SV(PV)", "depth":17, "children":[ 
+                                                                    ], "data":{ "$area": 40 } },
+                                                                ], "data":{ "$area": 40 } },
+                                                            ], "data":{ "$area": 256 } },
+                                                        ], "data":{ "$area": 256 } },
+                                                    ], "data":{ "$area": 1730 } },
+                                                ], "data":{ "$area": 1850 } },
+                                            ], "data":{ "$area": 1850 } },
+                                        ], "data":{ "$area": 2002 } },
+                                    ], "data":{ "$area": 2002 } },
+                                ], "data":{ "$area": 3618 } },
+                            ], "data":{ "$area": 3738 } },
+                        ], "data":{ "$area": 3738 } },
+                    ], "data":{ "$area": 3890 } },
+                ], "data":{ "$area": 3890 } },
+                { "id": "3119", "name": "HeVAL->", "depth":4, "children":[ 
+                    { "id": "3120", "name": "SV(PVGV)", "depth":5, "children":[ 
+                    ], "data":{ "$area": 152 } },
+                ], "data":{ "$area": 152 } },
+                { "id": "3121", "name": "HeVAL->", "depth":4, "children":[ 
+                    { "id": "3122", "name": "SV(PVGV)", "depth":5, "children":[ 
+                    ], "data":{ "$area": 152 } },
+                ], "data":{ "$area": 152 } },
+                { "id": "3123", "name": "hent_hek->", "depth":4, "children":[ 
+                ], "data":{ "$area": 35 } },
+                { "id": "3124", "name": "HeVAL->", "depth":4, "children":[ 
+                    { "id": "3125", "name": "SV(PVGV)", "depth":5, "children":[ 
+                        { "id": "3126", "name": "gp_sv->", "depth":6, "children":[ 
+                            { "id": "3127", "name": "SV(PV)", "depth":7, "children":[ 
+                            ], "data":{ "$area": 104 } },
+                        ], "data":{ "$area": 104 } },
+                    ], "data":{ "$area": 256 } },
+                ], "data":{ "$area": 256 } },
+                { "id": "3128", "name": "HeVAL->", "depth":4, "children":[ 
+                    { "id": "3129", "name": "SV(PVGV)", "depth":5, "children":[ 
+                    ], "data":{ "$area": 152 } },
+                ], "data":{ "$area": 152 } },
+                { "id": "3130", "name": "hent_hek->", "depth":4, "children":[ 
+                ], "data":{ "$area": 44 } },
+                { "id": "3131", "name": "HeVAL->", "depth":4, "children":[ 
+                    { "id": "3132", "name": "SV(PVGV)", "depth":5, "children":[ 
+                    ], "data":{ "$area": 152 } },
+                ], "data":{ "$area": 152 } },
+                { "id": "3133", "name": "hent_hek->", "depth":4, "children":[ 
+                ], "data":{ "$area": 45 } },
+                { "id": "3134", "name": "HeVAL->", "depth":4, "children":[ 
+                    { "id": "3135", "name": "SV(PVGV)", "depth":5, "children":[ 
+                        { "id": "3136", "name": "gp_hv->", "depth":6, "children":[ 
+                            { "id": "3137", "name": "SV(PVHV)", "depth":7, "children":[ 
+                                { "id": "3138", "name": "HvARRAY->", "depth":8, "children":[ 
+                                    { "id": "3139", "name": "hent_hek->", "depth":9, "children":[ 
+                                    ], "data":{ "$area": 42 } },
+                                    { "id": "3140", "name": "HeVAL->", "depth":9, "children":[ 
+                                        { "id": "3141", "name": "SV(PVGV)", "depth":10, "children":[ 
+                                            { "id": "3142", "name": "UNKNOWN(0,0x0)", "depth":11, "children":[ 
+                                                { "id": "3143", "name": "MAGIC(<)", "depth":12, "children":[ 
+                                                    { "id": "3144", "name": "mg_obj->", "depth":13, "children":[ 
+                                                        { "id": "3145", "name": "SV(PVCV)", "depth":14, "children":[ 
+                                                        ], "data":{ "$area": 144 } },
+                                                    ], "data":{ "$area": 144 } },
+                                                ], "data":{ "$area": 184 } },
+                                            ], "data":{ "$area": 184 } },
+                                        ], "data":{ "$area": 336 } },
+                                    ], "data":{ "$area": 336 } },
+                                    { "id": "3146", "name": "hent_hek->", "depth":9, "children":[ 
+                                    ], "data":{ "$area": 55 } },
+                                    { "id": "3147", "name": "HeVAL->", "depth":9, "children":[ 
+                                        { "id": "3148", "name": "SV(PVGV)", "depth":10, "children":[ 
+                                            { "id": "3149", "name": "UNKNOWN(0,0x0)", "depth":11, "children":[ 
+                                                { "id": "3150", "name": "MAGIC(<)", "depth":12, "children":[ 
+                                                    { "id": "3151", "name": "mg_obj->", "depth":13, "children":[ 
+                                                        { "id": "3152", "name": "SV(PVCV)", "depth":14, "children":[ 
+                                                        ], "data":{ "$area": 144 } },
+                                                    ], "data":{ "$area": 144 } },
+                                                ], "data":{ "$area": 184 } },
+                                            ], "data":{ "$area": 184 } },
+                                        ], "data":{ "$area": 336 } },
+                                    ], "data":{ "$area": 336 } },
+                                    { "id": "3153", "name": "hent_hek->", "depth":9, "children":[ 
+                                    ], "data":{ "$area": 43 } },
+                                    { "id": "3154", "name": "HeVAL->", "depth":9, "children":[ 
+                                        { "id": "3155", "name": "SV(PVGV)", "depth":10, "children":[ 
+                                            { "id": "3156", "name": "UNKNOWN(0,0x0)", "depth":11, "children":[ 
+                                                { "id": "3157", "name": "MAGIC(<)", "depth":12, "children":[ 
+                                                    { "id": "3158", "name": "mg_obj->", "depth":13, "children":[ 
+                                                        { "id": "3159", "name": "SV(PVCV)", "depth":14, "children":[ 
+                                                        ], "data":{ "$area": 144 } },
+                                                    ], "data":{ "$area": 144 } },
+                                                ], "data":{ "$area": 184 } },
+                                            ], "data":{ "$area": 184 } },
+                                        ], "data":{ "$area": 336 } },
+                                    ], "data":{ "$area": 336 } },
+                                    { "id": "3160", "name": "hent_hek->", "depth":9, "children":[ 
+                                    ], "data":{ "$area": 44 } },
+                                    { "id": "3161", "name": "HeVAL->", "depth":9, "children":[ 
+                                        { "id": "3162", "name": "SV(PVGV)", "depth":10, "children":[ 
+                                            { "id": "3163", "name": "UNKNOWN(0,0x0)", "depth":11, "children":[ 
+                                                { "id": "3164", "name": "MAGIC(<)", "depth":12, "children":[ 
+                                                    { "id": "3165", "name": "mg_obj->", "depth":13, "children":[ 
+                                                        { "id": "3166", "name": "SV(PVCV)", "depth":14, "children":[ 
+                                                        ], "data":{ "$area": 144 } },
+                                                    ], "data":{ "$area": 144 } },
+                                                ], "data":{ "$area": 184 } },
+                                            ], "data":{ "$area": 184 } },
+                                        ], "data":{ "$area": 336 } },
+                                    ], "data":{ "$area": 336 } },
+                                    { "id": "3167", "name": "hent_hek->", "depth":9, "children":[ 
+                                    ], "data":{ "$area": 42 } },
+                                    { "id": "3168", "name": "HeVAL->", "depth":9, "children":[ 
+                                        { "id": "3169", "name": "SV(PVGV)", "depth":10, "children":[ 
+                                            { "id": "3170", "name": "UNKNOWN(0,0x0)", "depth":11, "children":[ 
+                                                { "id": "3171", "name": "MAGIC(<)", "depth":12, "children":[ 
+                                                    { "id": "3172", "name": "mg_obj->", "depth":13, "children":[ 
+                                                        { "id": "3173", "name": "SV(PVCV)", "depth":14, "children":[ 
+                                                        ], "data":{ "$area": 144 } },
+                                                    ], "data":{ "$area": 144 } },
+                                                ], "data":{ "$area": 184 } },
+                                            ], "data":{ "$area": 184 } },
+                                        ], "data":{ "$area": 336 } },
+                                    ], "data":{ "$area": 336 } },
+                                    { "id": "3174", "name": "hent_hek->", "depth":9, "children":[ 
+                                    ], "data":{ "$area": 45 } },
+                                    { "id": "3175", "name": "HeVAL->", "depth":9, "children":[ 
+                                        { "id": "3176", "name": "SV(PVGV)", "depth":10, "children":[ 
+                                            { "id": "3177", "name": "UNKNOWN(0,0x0)", "depth":11, "children":[ 
+                                                { "id": "3178", "name": "MAGIC(<)", "depth":12, "children":[ 
+                                                    { "id": "3179", "name": "mg_obj->", "depth":13, "children":[ 
+                                                        { "id": "3180", "name": "SV(PVCV)", "depth":14, "children":[ 
+                                                        ], "data":{ "$area": 144 } },
+                                                    ], "data":{ "$area": 144 } },
+                                                ], "data":{ "$area": 184 } },
+                                            ], "data":{ "$area": 184 } },
+                                        ], "data":{ "$area": 336 } },
+                                    ], "data":{ "$area": 336 } },
+                                    { "id": "3181", "name": "hent_hek->", "depth":9, "children":[ 
+                                    ], "data":{ "$area": 35 } },
+                                    { "id": "3182", "name": "HeVAL->", "depth":9, "children":[ 
+                                        { "id": "3183", "name": "SV(PVGV)", "depth":10, "children":[ 
+                                            { "id": "3184", "name": "UNKNOWN(0,0x0)", "depth":11, "children":[ 
+                                                { "id": "3185", "name": "MAGIC(<)", "depth":12, "children":[ 
+                                                    { "id": "3186", "name": "mg_obj->", "depth":13, "children":[ 
+                                                        { "id": "3187", "name": "SV(PVCV)", "depth":14, "children":[ 
+                                                        ], "data":{ "$area": 128 } },
+                                                    ], "data":{ "$area": 128 } },
+                                                ], "data":{ "$area": 168 } },
+                                            ], "data":{ "$area": 168 } },
+                                        ], "data":{ "$area": 320 } },
+                                    ], "data":{ "$area": 320 } },
+                                    { "id": "3188", "name": "HvNAME_HEK->", "depth":9, "children":[ 
+                                    ], "data":{ "$area": 43 } },
+                                ], "data":{ "$area": 2941 } },
+                            ], "data":{ "$area": 3061 } },
+                        ], "data":{ "$area": 3061 } },
+                    ], "data":{ "$area": 3213 } },
+                ], "data":{ "$area": 3213 } },
+                { "id": "3189", "name": "HeVAL->", "depth":4, "children":[ 
+                    { "id": "3190", "name": "SV(PVGV)", "depth":5, "children":[ 
+                    ], "data":{ "$area": 152 } },
+                ], "data":{ "$area": 152 } },
+                { "id": "3191", "name": "hent_hek->", "depth":4, "children":[ 
+                ], "data":{ "$area": 39 } },
+                { "id": "3192", "name": "HeVAL->", "depth":4, "children":[ 
+                    { "id": "3193", "name": "SV(PVGV)", "depth":5, "children":[ 
+                    ], "data":{ "$area": 152 } },
+                ], "data":{ "$area": 152 } },
+                { "id": "3194", "name": "hent_hek->", "depth":4, "children":[ 
+                ], "data":{ "$area": 42 } },
+                { "id": "3195", "name": "HeVAL->", "depth":4, "children":[ 
+                    { "id": "3196", "name": "SV(PVGV)", "depth":5, "children":[ 
+                        { "id": "3197", "name": "gp_hv->", "depth":6, "children":[ 
+                            { "id": "3198", "name": "SV(PVHV)", "depth":7, "children":[ 
+                                { "id": "3199", "name": "UNKNOWN(0,0x0)", "depth":8, "children":[ 
+                                    { "id": "3200", "name": "MAGIC(c)", "depth":9, "children":[ 
+                                    ], "data":{ "$area": 608 } },
+                                    { "id": "3201", "name": "hent_hek->", "depth":9, "children":[ 
+                                    ], "data":{ "$area": 41 } },
+                                    { "id": "3202", "name": "HeVAL->", "depth":9, "children":[ 
+                                        { "id": "3203", "name": "SV(PVGV)", "depth":10, "children":[ 
+                                            { "id": "3204", "name": "UNKNOWN(0,0x0)", "depth":11, "children":[ 
+                                                { "id": "3205", "name": "MAGIC(<)", "depth":12, "children":[ 
+                                                    { "id": "3206", "name": "mg_obj->", "depth":13, "children":[ 
+                                                        { "id": "3207", "name": "SV(PVCV)", "depth":14, "children":[ 
+                                                            { "id": "3208", "name": "CvPADLIST->", "depth":15, "children":[ 
+                                                                { "id": "3209", "name": "SV(PVAV)", "depth":16, "children":[ 
+                                                                ], "data":{ "$area": 80 } },
+                                                            ], "data":{ "$area": 80 } },
+                                                            { "id": "3210", "name": "CvOUTSIDE->", "depth":15, "children":[ 
+                                                                { "id": "3211", "name": "SV(PVCV)", "depth":16, "children":[ 
+                                                                    { "id": "3212", "name": "CvPADLIST->", "depth":17, "children":[ 
+                                                                        { "id": "3213", "name": "SV(PVAV)", "depth":18, "children":[ 
+                                                                        ], "data":{ "$area": 80 } },
+                                                                    ], "data":{ "$area": 80 } },
+                                                                ], "data":{ "$area": 208 } },
+                                                            ], "data":{ "$area": 208 } },
+                                                            { "id": "3214", "name": "CvSTART->", "depth":15, "children":[ 
+                                                            ], "data":{ "$area": 512 } },
+                                                        ], "data":{ "$area": 928 } },
+                                                    ], "data":{ "$area": 928 } },
+                                                ], "data":{ "$area": 968 } },
+                                            ], "data":{ "$area": 968 } },
+                                        ], "data":{ "$area": 1120 } },
+                                    ], "data":{ "$area": 1120 } },
+                                    { "id": "3215", "name": "hent_hek->", "depth":9, "children":[ 
+                                    ], "data":{ "$area": 51 } },
+                                    { "id": "3216", "name": "HeVAL->", "depth":9, "children":[ 
+                                        { "id": "3217", "name": "SV(IV)", "depth":10, "children":[ 
+                                        ], "data":{ "$area": 24 } },
+                                    ], "data":{ "$area": 24 } },
+                                    { "id": "3218", "name": "hent_hek->", "depth":9, "children":[ 
+                                    ], "data":{ "$area": 45 } },
+                                    { "id": "3219", "name": "HeVAL->", "depth":9, "children":[ 
+                                        { "id": "3220", "name": "SV(IV)", "depth":10, "children":[ 
+                                        ], "data":{ "$area": 24 } },
+                                    ], "data":{ "$area": 24 } },
+                                    { "id": "3221", "name": "hent_hek->", "depth":9, "children":[ 
+                                    ], "data":{ "$area": 42 } },
+                                    { "id": "3222", "name": "HeVAL->", "depth":9, "children":[ 
+                                        { "id": "3223", "name": "SV(PVGV)", "depth":10, "children":[ 
+                                        ], "data":{ "$area": 152 } },
+                                    ], "data":{ "$area": 152 } },
+                                    { "id": "3224", "name": "HeVAL->", "depth":9, "children":[ 
+                                        { "id": "3225", "name": "SV(PVGV)", "depth":10, "children":[ 
+                                        ], "data":{ "$area": 152 } },
+                                    ], "data":{ "$area": 152 } },
+                                    { "id": "3226", "name": "HeVAL->", "depth":9, "children":[ 
+                                        { "id": "3227", "name": "SV(PVGV)", "depth":10, "children":[ 
+                                            { "id": "3228", "name": "UNKNOWN(0,0x0)", "depth":11, "children":[ 
+                                                { "id": "3229", "name": "MAGIC(<)", "depth":12, "children":[ 
+                                                    { "id": "3230", "name": "mg_obj->", "depth":13, "children":[ 
+                                                        { "id": "3231", "name": "SV(PVCV)", "depth":14, "children":[ 
+                                                            { "id": "3232", "name": "CvPADLIST->", "depth":15, "children":[ 
+                                                                { "id": "3233", "name": "SV(PVAV)", "depth":16, "children":[ 
+                                                                ], "data":{ "$area": 80 } },
+                                                            ], "data":{ "$area": 80 } },
+                                                            { "id": "3234", "name": "CvSTART->", "depth":15, "children":[ 
+                                                                { "id": "3235", "name": "SVOP->", "depth":16, "children":[ 
+                                                                    { "id": "3236", "name": "SV(PV)", "depth":17, "children":[ 
+                                                                    ], "data":{ "$area": 69 } },
+                                                                ], "data":{ "$area": 69 } },
+                                                                { "id": "3237", "name": "PM_GETRE->", "depth":16, "children":[ 
+                                                                    { "id": "3238", "name": "regex_size", "depth":17, "children":[ 
+                                                                    ], "data":{ "$area": 160 } },
+                                                                ], "data":{ "$area": 160 } },
+                                                                { "id": "3239", "name": "SVOP->", "depth":16, "children":[ 
+                                                                    { "id": "3240", "name": "SV(PV)", "depth":17, "children":[ 
+                                                                    ], "data":{ "$area": 56 } },
+                                                                ], "data":{ "$area": 56 } },
+                                                            ], "data":{ "$area": 1717 } },
+                                                        ], "data":{ "$area": 1925 } },
+                                                    ], "data":{ "$area": 1925 } },
+                                                ], "data":{ "$area": 1965 } },
+                                            ], "data":{ "$area": 1965 } },
+                                            { "id": "3241", "name": "gp_sv->", "depth":11, "children":[ 
+                                                { "id": "3242", "name": "SV(NULL)", "depth":12, "children":[ 
+                                                ], "data":{ "$area": 24 } },
+                                            ], "data":{ "$area": 24 } },
+                                        ], "data":{ "$area": 2141 } },
+                                    ], "data":{ "$area": 2141 } },
+                                    { "id": "3243", "name": "hent_hek->", "depth":9, "children":[ 
+                                    ], "data":{ "$area": 43 } },
+                                    { "id": "3244", "name": "HeVAL->", "depth":9, "children":[ 
+                                        { "id": "3245", "name": "SV(IV)", "depth":10, "children":[ 
+                                        ], "data":{ "$area": 24 } },
+                                    ], "data":{ "$area": 24 } },
+                                    { "id": "3246", "name": "HeVAL->", "depth":9, "children":[ 
+                                        { "id": "3247", "name": "SV(PVGV)", "depth":10, "children":[ 
+                                            { "id": "3248", "name": "UNKNOWN(0,0x0)", "depth":11, "children":[ 
+                                                { "id": "3249", "name": "MAGIC(<)", "depth":12, "children":[ 
+                                                ], "data":{ "$area": 40 } },
+                                            ], "data":{ "$area": 40 } },
+                                        ], "data":{ "$area": 192 } },
+                                    ], "data":{ "$area": 192 } },
+                                    { "id": "3250", "name": "hent_hek->", "depth":9, "children":[ 
+                                    ], "data":{ "$area": 46 } },
+                                    { "id": "3251", "name": "HeVAL->", "depth":9, "children":[ 
+                                        { "id": "3252", "name": "SV(IV)", "depth":10, "children":[ 
+                                        ], "data":{ "$area": 24 } },
+                                    ], "data":{ "$area": 24 } },
+                                    { "id": "3253", "name": "hent_hek->", "depth":9, "children":[ 
+                                    ], "data":{ "$area": 42 } },
+                                    { "id": "3254", "name": "HeVAL->", "depth":9, "children":[ 
+                                        { "id": "3255", "name": "SV(IV)", "depth":10, "children":[ 
+                                        ], "data":{ "$area": 24 } },
+                                    ], "data":{ "$area": 24 } },
+                                    { "id": "3256", "name": "hent_hek->", "depth":9, "children":[ 
+                                    ], "data":{ "$area": 39 } },
+                                    { "id": "3257", "name": "HeVAL->", "depth":9, "children":[ 
+                                        { "id": "3258", "name": "SV(PVGV)", "depth":10, "children":[ 
+                                            { "id": "3259", "name": "UNKNOWN(0,0x0)", "depth":11, "children":[ 
+                                                { "id": "3260", "name": "MAGIC(<)", "depth":12, "children":[ 
+                                                    { "id": "3261", "name": "mg_obj->", "depth":13, "children":[ 
+                                                        { "id": "3262", "name": "SV(PVCV)", "depth":14, "children":[ 
+                                                            { "id": "3263", "name": "CvPADLIST->", "depth":15, "children":[ 
+                                                                { "id": "3264", "name": "SV(PVAV)", "depth":16, "children":[ 
+                                                                ], "data":{ "$area": 80 } },
+                                                            ], "data":{ "$area": 80 } },
+                                                            { "id": "3265", "name": "CvSTART->", "depth":15, "children":[ 
+                                                                { "id": "3266", "name": "SVOP->", "depth":16, "children":[ 
+                                                                    { "id": "3267", "name": "SV(PV)", "depth":17, "children":[ 
+                                                                        { "id": "3268", "name": "SvSHARED_HEK_FROM_PV->", "depth":18, "children":[ 
+                                                                        ], "data":{ "$area": 46 } },
+                                                                    ], "data":{ "$area": 86 } },
+                                                                ], "data":{ "$area": 86 } },
+                                                            ], "data":{ "$area": 1582 } },
+                                                        ], "data":{ "$area": 1790 } },
+                                                    ], "data":{ "$area": 1790 } },
+                                                ], "data":{ "$area": 1830 } },
+                                            ], "data":{ "$area": 1830 } },
+                                        ], "data":{ "$area": 1982 } },
+                                    ], "data":{ "$area": 1982 } },
+                                    { "id": "3269", "name": "HeVAL->", "depth":9, "children":[ 
+                                        { "id": "3270", "name": "SV(PVGV)", "depth":10, "children":[ 
+                                            { "id": "3271", "name": "gp_av->", "depth":11, "children":[ 
+                                                { "id": "3272", "name": "SV(PVAV)", "depth":12, "children":[ 
+                                                    { "id": "3273", "name": "AVelem->", "depth":13, "children":[ 
+                                                        { "id": "3274", "name": "SV(PV)", "depth":14, "children":[ 
+                                                        ], "data":{ "$area": 56 } },
+                                                    ], "data":{ "$area": 56 } },
+                                                ], "data":{ "$area": 152 } },
+                                            ], "data":{ "$area": 152 } },
+                                        ], "data":{ "$area": 304 } },
+                                    ], "data":{ "$area": 304 } },
+                                    { "id": "3275", "name": "HeVAL->", "depth":9, "children":[ 
+                                        { "id": "3276", "name": "SV(PVGV)", "depth":10, "children":[ 
+                                            { "id": "3277", "name": "UNKNOWN(0,0x0)", "depth":11, "children":[ 
+                                                { "id": "3278", "name": "MAGIC(<)", "depth":12, "children":[ 
+                                                    { "id": "3279", "name": "mg_obj->", "depth":13, "children":[ 
+                                                        { "id": "3280", "name": "SV(PVCV)", "depth":14, "children":[ 
+                                                            { "id": "3281", "name": "CvPADLIST->", "depth":15, "children":[ 
+                                                                { "id": "3282", "name": "SV(PVAV)", "depth":16, "children":[ 
+                                                                ], "data":{ "$area": 80 } },
+                                                            ], "data":{ "$area": 80 } },
+                                                            { "id": "3283", "name": "CvSTART->", "depth":15, "children":[ 
+                                                            ], "data":{ "$area": 128 } },
+                                                        ], "data":{ "$area": 336 } },
+                                                    ], "data":{ "$area": 336 } },
+                                                ], "data":{ "$area": 376 } },
+                                            ], "data":{ "$area": 376 } },
+                                        ], "data":{ "$area": 528 } },
+                                    ], "data":{ "$area": 528 } },
+                                    { "id": "3284", "name": "HeVAL->", "depth":9, "children":[ 
+                                        { "id": "3285", "name": "SV(PVGV)", "depth":10, "children":[ 
+                                            { "id": "3286", "name": "gp_av->", "depth":11, "children":[ 
+                                                { "id": "3287", "name": "SV(PVAV)", "depth":12, "children":[ 
+                                                    { "id": "3288", "name": "AVelem->", "depth":13, "children":[ 
+                                                        { "id": "3289", "name": "SV(PV)", "depth":14, "children":[ 
+                                                            { "id": "3290", "name": "SvSHARED_HEK_FROM_PV->", "depth":15, "children":[ 
+                                                            ], "data":{ "$area": 55 } },
+                                                        ], "data":{ "$area": 95 } },
+                                                    ], "data":{ "$area": 95 } },
+                                                    { "id": "3291", "name": "AVelem->", "depth":13, "children":[ 
+                                                        { "id": "3292", "name": "SV(PV)", "depth":14, "children":[ 
+                                                            { "id": "3293", "name": "SvSHARED_HEK_FROM_PV->", "depth":15, "children":[ 
+                                                            ], "data":{ "$area": 46 } },
+                                                        ], "data":{ "$area": 86 } },
+                                                    ], "data":{ "$area": 86 } },
+                                                    { "id": "3294", "name": "AVelem->", "depth":13, "children":[ 
+                                                        { "id": "3295", "name": "SV(PV)", "depth":14, "children":[ 
+                                                        ], "data":{ "$area": 40 } },
+                                                    ], "data":{ "$area": 40 } },
+                                                    { "id": "3296", "name": "AVelem->", "depth":13, "children":[ 
+                                                        { "id": "3297", "name": "SV(PV)", "depth":14, "children":[ 
+                                                            { "id": "3298", "name": "SvSHARED_HEK_FROM_PV->", "depth":15, "children":[ 
+                                                            ], "data":{ "$area": 43 } },
+                                                        ], "data":{ "$area": 83 } },
+                                                    ], "data":{ "$area": 83 } },
+                                                    { "id": "3299", "name": "AVelem->", "depth":13, "children":[ 
+                                                        { "id": "3300", "name": "SV(PV)", "depth":14, "children":[ 
+                                                        ], "data":{ "$area": 40 } },
+                                                    ], "data":{ "$area": 40 } },
+                                                    { "id": "3301", "name": "AVelem->", "depth":13, "children":[ 
+                                                        { "id": "3302", "name": "SV(PV)", "depth":14, "children":[ 
+                                                        ], "data":{ "$area": 40 } },
+                                                    ], "data":{ "$area": 40 } },
+                                                    { "id": "3303", "name": "AVelem->", "depth":13, "children":[ 
+                                                        { "id": "3304", "name": "SV(PV)", "depth":14, "children":[ 
+                                                            { "id": "3305", "name": "SvSHARED_HEK_FROM_PV->", "depth":15, "children":[ 
+                                                            ], "data":{ "$area": 47 } },
+                                                        ], "data":{ "$area": 87 } },
+                                                    ], "data":{ "$area": 87 } },
+                                                    { "id": "3306", "name": "AVelem->", "depth":13, "children":[ 
+                                                        { "id": "3307", "name": "SV(PV)", "depth":14, "children":[ 
+                                                        ], "data":{ "$area": 40 } },
+                                                    ], "data":{ "$area": 40 } },
+                                                    { "id": "3308", "name": "AVelem->", "depth":13, "children":[ 
+                                                        { "id": "3309", "name": "SV(PV)", "depth":14, "children":[ 
+                                                        ], "data":{ "$area": 40 } },
+                                                    ], "data":{ "$area": 40 } },
+                                                ], "data":{ "$area": 687 } },
+                                            ], "data":{ "$area": 687 } },
+                                        ], "data":{ "$area": 839 } },
+                                    ], "data":{ "$area": 839 } },
+                                    { "id": "3310", "name": "HeVAL->", "depth":9, "children":[ 
+                                        { "id": "3311", "name": "SV(PVGV)", "depth":10, "children":[ 
+                                            { "id": "3312", "name": "UNKNOWN(0,0x0)", "depth":11, "children":[ 
+                                                { "id": "3313", "name": "MAGIC(<)", "depth":12, "children":[ 
+                                                    { "id": "3314", "name": "mg_obj->", "depth":13, "children":[ 
+                                                        { "id": "3315", "name": "SV(PVCV)", "depth":14, "children":[ 
+                                                            { "id": "3316", "name": "CvPADLIST->", "depth":15, "children":[ 
+                                                                { "id": "3317", "name": "SV(PVAV)", "depth":16, "children":[ 
+                                                                ], "data":{ "$area": 80 } },
+                                                            ], "data":{ "$area": 80 } },
+                                                            { "id": "3318", "name": "CvSTART->", "depth":15, "children":[ 
+                                                                { "id": "3319", "name": "SVOP->", "depth":16, "children":[ 
+                                                                    { "id": "3320", "name": "SV(PV)", "depth":17, "children":[ 
+                                                                    ], "data":{ "$area": 49 } },
+                                                                ], "data":{ "$area": 49 } },
+                                                                { "id": "3321", "name": "SVOP->", "depth":16, "children":[ 
+                                                                    { "id": "3322", "name": "SV(PV)", "depth":17, "children":[ 
+                                                                    ], "data":{ "$area": 56 } },
+                                                                ], "data":{ "$area": 56 } },
+                                                                { "id": "3323", "name": "SVOP->", "depth":16, "children":[ 
+                                                                    { "id": "3324", "name": "SV(PV)", "depth":17, "children":[ 
+                                                                    ], "data":{ "$area": 80 } },
+                                                                ], "data":{ "$area": 80 } },
+                                                                { "id": "3325", "name": "SVOP->", "depth":16, "children":[ 
+                                                                    { "id": "3326", "name": "SV(PV)", "depth":17, "children":[ 
+                                                                    ], "data":{ "$area": 42 } },
+                                                                ], "data":{ "$area": 42 } },
+                                                                { "id": "3327", "name": "SVOP->", "depth":16, "children":[ 
+                                                                    { "id": "3328", "name": "SV(IV)", "depth":17, "children":[ 
+                                                                    ], "data":{ "$area": 24 } },
+                                                                ], "data":{ "$area": 24 } },
+                                                                { "id": "3329", "name": "SVOP->", "depth":16, "children":[ 
+                                                                    { "id": "3330", "name": "SV(IV)", "depth":17, "children":[ 
+                                                                    ], "data":{ "$area": 24 } },
+                                                                ], "data":{ "$area": 24 } },
+                                                                { "id": "3331", "name": "SVOP->", "depth":16, "children":[ 
+                                                                    { "id": "3332", "name": "SV(IV)", "depth":17, "children":[ 
+                                                                    ], "data":{ "$area": 24 } },
+                                                                ], "data":{ "$area": 24 } },
+                                                                { "id": "3333", "name": "SVOP->", "depth":16, "children":[ 
+                                                                    { "id": "3334", "name": "SV(PV)", "depth":17, "children":[ 
+                                                                    ], "data":{ "$area": 56 } },
+                                                                ], "data":{ "$area": 56 } },
+                                                            ], "data":{ "$area": 6035 } },
+                                                        ], "data":{ "$area": 6243 } },
+                                                    ], "data":{ "$area": 6243 } },
+                                                ], "data":{ "$area": 6283 } },
+                                            ], "data":{ "$area": 6283 } },
+                                        ], "data":{ "$area": 6435 } },
+                                    ], "data":{ "$area": 6435 } },
+                                    { "id": "3335", "name": "HeVAL->", "depth":9, "children":[ 
+                                        { "id": "3336", "name": "SV(IV)", "depth":10, "children":[ 
+                                        ], "data":{ "$area": 24 } },
+                                    ], "data":{ "$area": 24 } },
+                                    { "id": "3337", "name": "HeVAL->", "depth":9, "children":[ 
+                                        { "id": "3338", "name": "SV(IV)", "depth":10, "children":[ 
+                                        ], "data":{ "$area": 24 } },
+                                    ], "data":{ "$area": 24 } },
+                                    { "id": "3339", "name": "HeVAL->", "depth":9, "children":[ 
+                                        { "id": "3340", "name": "SV(IV)", "depth":10, "children":[ 
+                                        ], "data":{ "$area": 24 } },
+                                    ], "data":{ "$area": 24 } },
+                                    { "id": "3341", "name": "HeVAL->", "depth":9, "children":[ 
+                                        { "id": "3342", "name": "SV(IV)", "depth":10, "children":[ 
+                                        ], "data":{ "$area": 24 } },
+                                    ], "data":{ "$area": 24 } },
+                                    { "id": "3343", "name": "isa->", "depth":9, "children":[ 
+                                        { "id": "3344", "name": "SV(PVHV)", "depth":10, "children":[ 
+                                            { "id": "3345", "name": "HvARRAY->", "depth":11, "children":[ 
+                                            ], "data":{ "$area": 48 } },
+                                        ], "data":{ "$area": 168 } },
+                                    ], "data":{ "$area": 168 } },
+                                    { "id": "3346", "name": "mro_linear_current->", "depth":9, "children":[ 
+                                        { "id": "3347", "name": "SV(PVAV)", "depth":10, "children":[ 
+                                            { "id": "3348", "name": "AVelem->", "depth":11, "children":[ 
+                                                { "id": "3349", "name": "SV(PV)", "depth":12, "children":[ 
+                                                ], "data":{ "$area": 40 } },
+                                            ], "data":{ "$area": 40 } },
+                                        ], "data":{ "$area": 136 } },
+                                    ], "data":{ "$area": 136 } },
+                                ], "data":{ "$area": 15866 } },
+                            ], "data":{ "$area": 16178 } },
+                        ], "data":{ "$area": 16178 } },
+                    ], "data":{ "$area": 16330 } },
+                ], "data":{ "$area": 16330 } },
+                { "id": "3350", "name": "hent_hek->", "depth":4, "children":[ 
+                ], "data":{ "$area": 44 } },
+                { "id": "3351", "name": "HeVAL->", "depth":4, "children":[ 
+                    { "id": "3352", "name": "SV(PVGV)", "depth":5, "children":[ 
+                        { "id": "3353", "name": "GvFILE_HEK->", "depth":6, "children":[ 
+                        ], "data":{ "$area": 111 } },
+                        { "id": "3354", "name": "gp_hv->", "depth":6, "children":[ 
+                            { "id": "3355", "name": "SV(PVHV)", "depth":7, "children":[ 
+                                { "id": "3356", "name": "HvARRAY->", "depth":8, "children":[ 
+                                    { "id": "3357", "name": "hent_hek->", "depth":9, "children":[ 
+                                    ], "data":{ "$area": 47 } },
+                                    { "id": "3358", "name": "HeVAL->", "depth":9, "children":[ 
+                                        { "id": "3359", "name": "SV(PVGV)", "depth":10, "children":[ 
+                                            { "id": "3360", "name": "UNKNOWN(0,0x0)", "depth":11, "children":[ 
+                                                { "id": "3361", "name": "MAGIC(<)", "depth":12, "children":[ 
+                                                    { "id": "3362", "name": "mg_obj->", "depth":13, "children":[ 
+                                                        { "id": "3363", "name": "SV(PVCV)", "depth":14, "children":[ 
+                                                            { "id": "3364", "name": "CvPADLIST->", "depth":15, "children":[ 
+                                                                { "id": "3365", "name": "SV(PVAV)", "depth":16, "children":[ 
+                                                                ], "data":{ "$area": 80 } },
+                                                            ], "data":{ "$area": 80 } },
+                                                            { "id": "3366", "name": "CvOUTSIDE->", "depth":15, "children":[ 
+                                                                { "id": "3367", "name": "SV(PVCV)", "depth":16, "children":[ 
+                                                                    { "id": "3368", "name": "CvPADLIST->", "depth":17, "children":[ 
+                                                                        { "id": "3369", "name": "SV(PVAV)", "depth":18, "children":[ 
+                                                                        ], "data":{ "$area": 80 } },
+                                                                    ], "data":{ "$area": 80 } },
+                                                                ], "data":{ "$area": 208 } },
+                                                            ], "data":{ "$area": 208 } },
+                                                            { "id": "3370", "name": "CvSTART->", "depth":15, "children":[ 
+                                                                { "id": "3371", "name": "SVOP->", "depth":16, "children":[ 
+                                                                    { "id": "3372", "name": "SV(PVGV)", "depth":17, "children":[ 
+                                                                        { "id": "3373", "name": "UNKNOWN(0,0x0)", "depth":18, "children":[ 
+                                                                            { "id": "3374", "name": "MAGIC(<)", "depth":19, "children":[ 
+                                                                                { "id": "3375", "name": "mg_obj->", "depth":20, "children":[ 
+                                                                                    { "id": "3376", "name": "SV(PVCV)", "depth":21, "children":[ 
+                                                                                        { "id": "3377", "name": "CvPADLIST->", "depth":22, "children":[ 
+                                                                                            { "id": "3378", "name": "SV(PVAV)", "depth":23, "children":[ 
+                                                                                            ], "data":{ "$area": 80 } },
+                                                                                        ], "data":{ "$area": 80 } },
+                                                                                        { "id": "3379", "name": "CvSTART->", "depth":22, "children":[ 
+                                                                                            { "id": "3380", "name": "cop_filegv->", "depth":23, "children":[ 
+                                                                                                { "id": "3381", "name": "SV(PVGV)", "depth":24, "children":[ 
+                                                                                                    { "id": "3382", "name": "GvNAME_HEK->", "depth":25, "children":[ 
+                                                                                                    ], "data":{ "$area": 104 } },
+                                                                                                    { "id": "3383", "name": "gp_sv->", "depth":25, "children":[ 
+                                                                                                        { "id": "3384", "name": "SV(PV)", "depth":26, "children":[ 
+                                                                                                        ], "data":{ "$area": 120 } },
+                                                                                                    ], "data":{ "$area": 120 } },
+                                                                                                ], "data":{ "$area": 376 } },
+                                                                                            ], "data":{ "$area": 376 } },
+                                                                                            { "id": "3385", "name": "SVOP->", "depth":23, "children":[ 
+                                                                                                { "id": "3386", "name": "SV(PV)", "depth":24, "children":[ 
+                                                                                                ], "data":{ "$area": 56 } },
+                                                                                            ], "data":{ "$area": 56 } },
+                                                                                            { "id": "3387", "name": "SVOP->", "depth":23, "children":[ 
+                                                                                                { "id": "3388", "name": "SV(IV)", "depth":24, "children":[ 
+                                                                                                ], "data":{ "$area": 24 } },
+                                                                                            ], "data":{ "$area": 24 } },
+                                                                                            { "id": "3389", "name": "SVOP->", "depth":23, "children":[ 
+                                                                                                { "id": "3390", "name": "SV(IV)", "depth":24, "children":[ 
+                                                                                                ], "data":{ "$area": 24 } },
+                                                                                            ], "data":{ "$area": 24 } },
+                                                                                            { "id": "3391", "name": "SVOP->", "depth":23, "children":[ 
+                                                                                                { "id": "3392", "name": "SV(IV)", "depth":24, "children":[ 
+                                                                                                ], "data":{ "$area": 24 } },
+                                                                                            ], "data":{ "$area": 24 } },
+                                                                                            { "id": "3393", "name": "SVOP->", "depth":23, "children":[ 
+                                                                                                { "id": "3394", "name": "SV(PV)", "depth":24, "children":[ 
+                                                                                                ], "data":{ "$area": 40 } },
+                                                                                            ], "data":{ "$area": 40 } },
+                                                                                            { "id": "3395", "name": "SVOP->", "depth":23, "children":[ 
+                                                                                                { "id": "3396", "name": "SV(PVGV)", "depth":24, "children":[ 
+                                                                                                    { "id": "3397", "name": "GvNAME_HEK->", "depth":25, "children":[ 
+                                                                                                    ], "data":{ "$area": 41 } },
+                                                                                                    { "id": "3398", "name": "gp_hv->", "depth":25, "children":[ 
+                                                                                                        { "id": "3399", "name": "SV(PVHV)", "depth":26, "children":[ 
+                                                                                                            { "id": "3400", "name": "HvARRAY->", "depth":27, "children":[ 
+                                                                                                                { "id": "3401", "name": "hent_hek->", "depth":28, "children":[ 
+                                                                                                                ], "data":{ "$area": 41 } },
+                                                                                                                { "id": "3402", "name": "hent_hek->", "depth":28, "children":[ 
+                                                                                                                ], "data":{ "$area": 43 } },
+                                                                                                                { "id": "3403", "name": "hent_hek->", "depth":28, "children":[ 
+                                                                                                                ], "data":{ "$area": 43 } },
+                                                                                                                { "id": "3404", "name": "hent_hek->", "depth":28, "children":[ 
+                                                                                                                ], "data":{ "$area": 38 } },
+                                                                                                                { "id": "3405", "name": "hent_hek->", "depth":28, "children":[ 
+                                                                                                                ], "data":{ "$area": 40 } },
+                                                                                                                { "id": "3406", "name": "hent_hek->", "depth":28, "children":[ 
+                                                                                                                ], "data":{ "$area": 41 } },
+                                                                                                                { "id": "3407", "name": "hent_hek->", "depth":28, "children":[ 
+                                                                                                                ], "data":{ "$area": 42 } },
+                                                                                                                { "id": "3408", "name": "hent_hek->", "depth":28, "children":[ 
+                                                                                                                ], "data":{ "$area": 45 } },
+                                                                                                                { "id": "3409", "name": "hent_hek->", "depth":28, "children":[ 
+                                                                                                                ], "data":{ "$area": 42 } },
+                                                                                                                { "id": "3410", "name": "hent_hek->", "depth":28, "children":[ 
+                                                                                                                ], "data":{ "$area": 43 } },
+                                                                                                                { "id": "3411", "name": "hent_hek->", "depth":28, "children":[ 
+                                                                                                                ], "data":{ "$area": 40 } },
+                                                                                                                { "id": "3412", "name": "hent_hek->", "depth":28, "children":[ 
+                                                                                                                ], "data":{ "$area": 36 } },
+                                                                                                                { "id": "3413", "name": "hent_hek->", "depth":28, "children":[ 
+                                                                                                                ], "data":{ "$area": 42 } },
+                                                                                                                { "id": "3414", "name": "hent_hek->", "depth":28, "children":[ 
+                                                                                                                ], "data":{ "$area": 41 } },
+                                                                                                                { "id": "3415", "name": "hent_hek->", "depth":28, "children":[ 
+                                                                                                                ], "data":{ "$area": 38 } },
+                                                                                                                { "id": "3416", "name": "hent_hek->", "depth":28, "children":[ 
+                                                                                                                ], "data":{ "$area": 43 } },
+                                                                                                                { "id": "3417", "name": "hent_hek->", "depth":28, "children":[ 
+                                                                                                                ], "data":{ "$area": 38 } },
+                                                                                                                { "id": "3418", "name": "hent_hek->", "depth":28, "children":[ 
+                                                                                                                ], "data":{ "$area": 38 } },
+                                                                                                                { "id": "3419", "name": "hent_hek->", "depth":28, "children":[ 
+                                                                                                                ], "data":{ "$area": 41 } },
+                                                                                                                { "id": "3420", "name": "hent_hek->", "depth":28, "children":[ 
+                                                                                                                ], "data":{ "$area": 43 } },
+                                                                                                                { "id": "3421", "name": "hent_hek->", "depth":28, "children":[ 
+                                                                                                                ], "data":{ "$area": 42 } },
+                                                                                                                { "id": "3422", "name": "hent_hek->", "depth":28, "children":[ 
+                                                                                                                ], "data":{ "$area": 39 } },
+                                                                                                                { "id": "3423", "name": "hent_hek->", "depth":28, "children":[ 
+                                                                                                                ], "data":{ "$area": 44 } },
+                                                                                                                { "id": "3424", "name": "hent_hek->", "depth":28, "children":[ 
+                                                                                                                ], "data":{ "$area": 38 } },
+                                                                                                                { "id": "3425", "name": "hent_hek->", "depth":28, "children":[ 
+                                                                                                                ], "data":{ "$area": 42 } },
+                                                                                                                { "id": "3426", "name": "hent_hek->", "depth":28, "children":[ 
+                                                                                                                ], "data":{ "$area": 43 } },
+                                                                                                                { "id": "3427", "name": "hent_hek->", "depth":28, "children":[ 
+                                                                                                                ], "data":{ "$area": 40 } },
+                                                                                                                { "id": "3428", "name": "hent_hek->", "depth":28, "children":[ 
+                                                                                                                ], "data":{ "$area": 39 } },
+                                                                                                                { "id": "3429", "name": "hent_hek->", "depth":28, "children":[ 
+                                                                                                                ], "data":{ "$area": 45 } },
+                                                                                                                { "id": "3430", "name": "hent_hek->", "depth":28, "children":[ 
+                                                                                                                ], "data":{ "$area": 39 } },
+                                                                                                                { "id": "3431", "name": "hent_hek->", "depth":28, "children":[ 
+                                                                                                                ], "data":{ "$area": 39 } },
+                                                                                                                { "id": "3432", "name": "hent_hek->", "depth":28, "children":[ 
+                                                                                                                ], "data":{ "$area": 38 } },
+                                                                                                                { "id": "3433", "name": "hent_hek->", "depth":28, "children":[ 
+                                                                                                                ], "data":{ "$area": 40 } },
+                                                                                                                { "id": "3434", "name": "hent_hek->", "depth":28, "children":[ 
+                                                                                                                ], "data":{ "$area": 41 } },
+                                                                                                                { "id": "3435", "name": "hent_hek->", "depth":28, "children":[ 
+                                                                                                                ], "data":{ "$area": 47 } },
+                                                                                                                { "id": "3436", "name": "hent_hek->", "depth":28, "children":[ 
+                                                                                                                ], "data":{ "$area": 40 } },
+                                                                                                                { "id": "3437", "name": "hent_hek->", "depth":28, "children":[ 
+                                                                                                                ], "data":{ "$area": 38 } },
+                                                                                                                { "id": "3438", "name": "hent_hek->", "depth":28, "children":[ 
+                                                                                                                ], "data":{ "$area": 46 } },
+                                                                                                                { "id": "3439", "name": "hent_hek->", "depth":28, "children":[ 
+                                                                                                                ], "data":{ "$area": 42 } },
+                                                                                                                { "id": "3440", "name": "hent_hek->", "depth":28, "children":[ 
+                                                                                                                ], "data":{ "$area": 42 } },
+                                                                                                                { "id": "3441", "name": "hent_hek->", "depth":28, "children":[ 
+                                                                                                                ], "data":{ "$area": 36 } },
+                                                                                                                { "id": "3442", "name": "hent_hek->", "depth":28, "children":[ 
+                                                                                                                ], "data":{ "$area": 40 } },
+                                                                                                                { "id": "3443", "name": "hent_hek->", "depth":28, "children":[ 
+                                                                                                                ], "data":{ "$area": 45 } },
+                                                                                                                { "id": "3444", "name": "hent_hek->", "depth":28, "children":[ 
+                                                                                                                ], "data":{ "$area": 40 } },
+                                                                                                                { "id": "3445", "name": "hent_hek->", "depth":28, "children":[ 
+                                                                                                                ], "data":{ "$area": 41 } },
+                                                                                                                { "id": "3446", "name": "hent_hek->", "depth":28, "children":[ 
+                                                                                                                ], "data":{ "$area": 44 } },
+                                                                                                                { "id": "3447", "name": "hent_hek->", "depth":28, "children":[ 
+                                                                                                                ], "data":{ "$area": 40 } },
+                                                                                                                { "id": "3448", "name": "hent_hek->", "depth":28, "children":[ 
+                                                                                                                ], "data":{ "$area": 40 } },
+                                                                                                                { "id": "3449", "name": "hent_hek->", "depth":28, "children":[ 
+                                                                                                                ], "data":{ "$area": 41 } },
+                                                                                                            ], "data":{ "$area": 3257 } },
+                                                                                                        ], "data":{ "$area": 3825 } },
+                                                                                                    ], "data":{ "$area": 3825 } },
+                                                                                                ], "data":{ "$area": 4018 } },
+                                                                                            ], "data":{ "$area": 4018 } },
+                                                                                            { "id": "3450", "name": "SVOP->", "depth":23, "children":[ 
+                                                                                                { "id": "3451", "name": "SV(IV)", "depth":24, "children":[ 
+                                                                                                ], "data":{ "$area": 24 } },
+                                                                                            ], "data":{ "$area": 24 } },
+                                                                                            { "id": "3452", "name": "SVOP->", "depth":23, "children":[ 
+                                                                                                { "id": "3453", "name": "SV(IV)", "depth":24, "children":[ 
+                                                                                                ], "data":{ "$area": 24 } },
+                                                                                            ], "data":{ "$area": 24 } },
+                                                                                            { "id": "3454", "name": "SVOP->", "depth":23, "children":[ 
+                                                                                                { "id": "3455", "name": "SV(IV)", "depth":24, "children":[ 
+                                                                                                ], "data":{ "$area": 24 } },
+                                                                                            ], "data":{ "$area": 24 } },
+                                                                                            { "id": "3456", "name": "SVOP->", "depth":23, "children":[ 
+                                                                                                { "id": "3457", "name": "SV(IV)", "depth":24, "children":[ 
+                                                                                                ], "data":{ "$area": 24 } },
+                                                                                            ], "data":{ "$area": 24 } },
+                                                                                            { "id": "3458", "name": "SVOP->", "depth":23, "children":[ 
+                                                                                                { "id": "3459", "name": "SV(IV)", "depth":24, "children":[ 
+                                                                                                ], "data":{ "$area": 24 } },
+                                                                                            ], "data":{ "$area": 24 } },
+                                                                                            { "id": "3460", "name": "SVOP->", "depth":23, "children":[ 
+                                                                                                { "id": "3461", "name": "SV(IV)", "depth":24, "children":[ 
+                                                                                                ], "data":{ "$area": 24 } },
+                                                                                            ], "data":{ "$area": 24 } },
+                                                                                            { "id": "3462", "name": "SVOP->", "depth":23, "children":[ 
+                                                                                                { "id": "3463", "name": "SV(PVGV)", "depth":24, "children":[ 
+                                                                                                    { "id": "3464", "name": "UNKNOWN(0,0x0)", "depth":25, "children":[ 
+                                                                                                        { "id": "3465", "name": "MAGIC(<)", "depth":26, "children":[ 
+                                                                                                            { "id": "3466", "name": "mg_obj->", "depth":27, "children":[ 
+                                                                                                                { "id": "3467", "name": "SV(PVCV)", "depth":28, "children":[ 
+                                                                                                                    { "id": "3468", "name": "CvPADLIST->", "depth":29, "children":[ 
+                                                                                                                        { "id": "3469", "name": "SV(PVAV)", "depth":30, "children":[ 
+                                                                                                                        ], "data":{ "$area": 80 } },
+                                                                                                                    ], "data":{ "$area": 80 } },
+                                                                                                                    { "id": "3470", "name": "CvSTART->", "depth":29, "children":[ 
+                                                                                                                        { "id": "3471", "name": "SVOP->", "depth":30, "children":[ 
+                                                                                                                            { "id": "3472", "name": "SV(PV)", "depth":31, "children":[ 
+                                                                                                                            ], "data":{ "$area": 56 } },
+                                                                                                                        ], "data":{ "$area": 56 } },
+                                                                                                                    ], "data":{ "$area": 784 } },
+                                                                                                                ], "data":{ "$area": 992 } },
+                                                                                                            ], "data":{ "$area": 992 } },
+                                                                                                        ], "data":{ "$area": 1032 } },
+                                                                                                    ], "data":{ "$area": 1032 } },
+                                                                                                    { "id": "3473", "name": "GvNAME_HEK->", "depth":25, "children":[ 
+                                                                                                    ], "data":{ "$area": 44 } },
+                                                                                                ], "data":{ "$area": 1228 } },
+                                                                                            ], "data":{ "$area": 1228 } },
+                                                                                            { "id": "3474", "name": "SVOP->", "depth":23, "children":[ 
+                                                                                                { "id": "3475", "name": "SV(IV)", "depth":24, "children":[ 
+                                                                                                ], "data":{ "$area": 24 } },
+                                                                                            ], "data":{ "$area": 24 } },
+                                                                                            { "id": "3476", "name": "SVOP->", "depth":23, "children":[ 
+                                                                                                { "id": "3477", "name": "SV(PV)", "depth":24, "children":[ 
+                                                                                                ], "data":{ "$area": 42 } },
+                                                                                            ], "data":{ "$area": 42 } },
+                                                                                            { "id": "3478", "name": "SVOP->", "depth":23, "children":[ 
+                                                                                                { "id": "3479", "name": "SV(PV)", "depth":24, "children":[ 
+                                                                                                ], "data":{ "$area": 42 } },
+                                                                                            ], "data":{ "$area": 42 } },
+                                                                                            { "id": "3480", "name": "SVOP->", "depth":23, "children":[ 
+                                                                                                { "id": "3481", "name": "SV(IV)", "depth":24, "children":[ 
+                                                                                                ], "data":{ "$area": 24 } },
+                                                                                            ], "data":{ "$area": 24 } },
+                                                                                            { "id": "3482", "name": "SVOP->", "depth":23, "children":[ 
+                                                                                                { "id": "3483", "name": "SV(IV)", "depth":24, "children":[ 
+                                                                                                ], "data":{ "$area": 24 } },
+                                                                                            ], "data":{ "$area": 24 } },
+                                                                                            { "id": "3484", "name": "SVOP->", "depth":23, "children":[ 
+                                                                                                { "id": "3485", "name": "SV(PVGV)", "depth":24, "children":[ 
+                                                                                                    { "id": "3486", "name": "UNKNOWN(0,0x0)", "depth":25, "children":[ 
+                                                                                                        { "id": "3487", "name": "MAGIC(<)", "depth":26, "children":[ 
+                                                                                                            { "id": "3488", "name": "mg_obj->", "depth":27, "children":[ 
+                                                                                                                { "id": "3489", "name": "SV(PVCV)", "depth":28, "children":[ 
+                                                                                                                    { "id": "3490", "name": "CvPADLIST->", "depth":29, "children":[ 
+                                                                                                                        { "id": "3491", "name": "SV(PVAV)", "depth":30, "children":[ 
+                                                                                                                        ], "data":{ "$area": 80 } },
+                                                                                                                    ], "data":{ "$area": 80 } },
+                                                                                                                    { "id": "3492", "name": "CvSTART->", "depth":29, "children":[ 
+                                                                                                                        { "id": "3493", "name": "SVOP->", "depth":30, "children":[ 
+                                                                                                                            { "id": "3494", "name": "SV(PV)", "depth":31, "children":[ 
+                                                                                                                            ], "data":{ "$area": 56 } },
+                                                                                                                        ], "data":{ "$area": 56 } },
+                                                                                                                        { "id": "3495", "name": "SVOP->", "depth":30, "children":[ 
+                                                                                                                            { "id": "3496", "name": "SV(PV)", "depth":31, "children":[ 
+                                                                                                                            ], "data":{ "$area": 40 } },
+                                                                                                                        ], "data":{ "$area": 40 } },
+                                                                                                                        { "id": "3497", "name": "SVOP->", "depth":30, "children":[ 
+                                                                                                                            { "id": "3498", "name": "SV(PV)", "depth":31, "children":[ 
+                                                                                                                            ], "data":{ "$area": 56 } },
+                                                                                                                        ], "data":{ "$area": 56 } },
+                                                                                                                    ], "data":{ "$area": 1392 } },
+                                                                                                                ], "data":{ "$area": 1600 } },
+                                                                                                            ], "data":{ "$area": 1600 } },
+                                                                                                        ], "data":{ "$area": 1640 } },
+                                                                                                    ], "data":{ "$area": 1640 } },
+                                                                                                    { "id": "3499", "name": "GvNAME_HEK->", "depth":25, "children":[ 
+                                                                                                    ], "data":{ "$area": 41 } },
+                                                                                                ], "data":{ "$area": 1833 } },
+                                                                                            ], "data":{ "$area": 1833 } },
+                                                                                            { "id": "3500", "name": "SVOP->", "depth":23, "children":[ 
+                                                                                                { "id": "3501", "name": "SV(PV)", "depth":24, "children":[ 
+                                                                                                ], "data":{ "$area": 72 } },
+                                                                                            ], "data":{ "$area": 72 } },
+                                                                                            { "id": "3502", "name": "SVOP->", "depth":23, "children":[ 
+                                                                                                { "id": "3503", "name": "SV(PV)", "depth":24, "children":[ 
+                                                                                                ], "data":{ "$area": 50 } },
+                                                                                            ], "data":{ "$area": 50 } },
+                                                                                            { "id": "3504", "name": "SVOP->", "depth":23, "children":[ 
+                                                                                                { "id": "3505", "name": "SV(IV)", "depth":24, "children":[ 
+                                                                                                ], "data":{ "$area": 24 } },
+                                                                                            ], "data":{ "$area": 24 } },
+                                                                                            { "id": "3506", "name": "SVOP->", "depth":23, "children":[ 
+                                                                                                { "id": "3507", "name": "SV(IV)", "depth":24, "children":[ 
+                                                                                                ], "data":{ "$area": 24 } },
+                                                                                            ], "data":{ "$area": 24 } },
+                                                                                            { "id": "3508", "name": "SVOP->", "depth":23, "children":[ 
+                                                                                                { "id": "3509", "name": "SV(PV)", "depth":24, "children":[ 
+                                                                                                ], "data":{ "$area": 42 } },
+                                                                                            ], "data":{ "$area": 42 } },
+                                                                                            { "id": "3510", "name": "SVOP->", "depth":23, "children":[ 
+                                                                                                { "id": "3511", "name": "SV(PV)", "depth":24, "children":[ 
+                                                                                                ], "data":{ "$area": 68 } },
+                                                                                            ], "data":{ "$area": 68 } },
+                                                                                            { "id": "3512", "name": "SVOP->", "depth":23, "children":[ 
+                                                                                                { "id": "3513", "name": "SV(IV)", "depth":24, "children":[ 
+                                                                                                ], "data":{ "$area": 24 } },
+                                                                                            ], "data":{ "$area": 24 } },
+                                                                                            { "id": "3514", "name": "SVOP->", "depth":23, "children":[ 
+                                                                                                { "id": "3515", "name": "SV(PV)", "depth":24, "children":[ 
+                                                                                                ], "data":{ "$area": 56 } },
+                                                                                            ], "data":{ "$area": 56 } },
+                                                                                            { "id": "3516", "name": "SVOP->", "depth":23, "children":[ 
+                                                                                                { "id": "3517", "name": "SV(PV)", "depth":24, "children":[ 
+                                                                                                ], "data":{ "$area": 42 } },
+                                                                                            ], "data":{ "$area": 42 } },
+                                                                                            { "id": "3518", "name": "SVOP->", "depth":23, "children":[ 
+                                                                                                { "id": "3519", "name": "SV(PV)", "depth":24, "children":[ 
+                                                                                                ], "data":{ "$area": 42 } },
+                                                                                            ], "data":{ "$area": 42 } },
+                                                                                            { "id": "3520", "name": "SVOP->", "depth":23, "children":[ 
+                                                                                                { "id": "3521", "name": "SV(PV)", "depth":24, "children":[ 
+                                                                                                ], "data":{ "$area": 48 } },
+                                                                                            ], "data":{ "$area": 48 } },
+                                                                                            { "id": "3522", "name": "SVOP->", "depth":23, "children":[ 
+                                                                                                { "id": "3523", "name": "SV(PV)", "depth":24, "children":[ 
+                                                                                                ], "data":{ "$area": 56 } },
+                                                                                            ], "data":{ "$area": 56 } },
+                                                                                            { "id": "3524", "name": "SVOP->", "depth":23, "children":[ 
+                                                                                                { "id": "3525", "name": "SV(PV)", "depth":24, "children":[ 
+                                                                                                ], "data":{ "$area": 72 } },
+                                                                                            ], "data":{ "$area": 72 } },
+                                                                                            { "id": "3526", "name": "SVOP->", "depth":23, "children":[ 
+                                                                                                { "id": "3527", "name": "SV(IV)", "depth":24, "children":[ 
+                                                                                                ], "data":{ "$area": 24 } },
+                                                                                            ], "data":{ "$area": 24 } },
+                                                                                            { "id": "3528", "name": "SVOP->", "depth":23, "children":[ 
+                                                                                                { "id": "3529", "name": "SV(IV)", "depth":24, "children":[ 
+                                                                                                ], "data":{ "$area": 24 } },
+                                                                                            ], "data":{ "$area": 24 } },
+                                                                                            { "id": "3530", "name": "SVOP->", "depth":23, "children":[ 
+                                                                                                { "id": "3531", "name": "SV(IV)", "depth":24, "children":[ 
+                                                                                                ], "data":{ "$area": 24 } },
+                                                                                            ], "data":{ "$area": 24 } },
+                                                                                            { "id": "3532", "name": "SVOP->", "depth":23, "children":[ 
+                                                                                                { "id": "3533", "name": "SV(IV)", "depth":24, "children":[ 
+                                                                                                ], "data":{ "$area": 24 } },
+                                                                                            ], "data":{ "$area": 24 } },
+                                                                                            { "id": "3534", "name": "SVOP->", "depth":23, "children":[ 
+                                                                                                { "id": "3535", "name": "SV(IV)", "depth":24, "children":[ 
+                                                                                                ], "data":{ "$area": 24 } },
+                                                                                            ], "data":{ "$area": 24 } },
+                                                                                            { "id": "3536", "name": "SVOP->", "depth":23, "children":[ 
+                                                                                                { "id": "3537", "name": "SV(IV)", "depth":24, "children":[ 
+                                                                                                ], "data":{ "$area": 24 } },
+                                                                                            ], "data":{ "$area": 24 } },
+                                                                                            { "id": "3538", "name": "SVOP->", "depth":23, "children":[ 
+                                                                                                { "id": "3539", "name": "SV(IV)", "depth":24, "children":[ 
+                                                                                                ], "data":{ "$area": 24 } },
+                                                                                            ], "data":{ "$area": 24 } },
+                                                                                        ], "data":{ "$area": 26407 } },
+                                                                                    ], "data":{ "$area": 26615 } },
+                                                                                ], "data":{ "$area": 26615 } },
+                                                                            ], "data":{ "$area": 26655 } },
+                                                                        ], "data":{ "$area": 26655 } },
+                                                                        { "id": "3540", "name": "GvNAME_HEK->", "depth":18, "children":[ 
+                                                                        ], "data":{ "$area": 39 } },
+                                                                    ], "data":{ "$area": 26846 } },
+                                                                ], "data":{ "$area": 26846 } },
+                                                            ], "data":{ "$area": 27454 } },
+                                                        ], "data":{ "$area": 27870 } },
+                                                    ], "data":{ "$area": 27870 } },
+                                                ], "data":{ "$area": 27910 } },
+                                            ], "data":{ "$area": 27910 } },
+                                        ], "data":{ "$area": 28062 } },
+                                    ], "data":{ "$area": 28062 } },
+                                    { "id": "3541", "name": "hent_hek->", "depth":9, "children":[ 
+                                    ], "data":{ "$area": 42 } },
+                                    { "id": "3542", "name": "HeVAL->", "depth":9, "children":[ 
+                                        { "id": "3543", "name": "SV(PVGV)", "depth":10, "children":[ 
+                                            { "id": "3544", "name": "gp_hv->", "depth":11, "children":[ 
+                                                { "id": "3545", "name": "SV(PVHV)", "depth":12, "children":[ 
+                                                    { "id": "3546", "name": "HvARRAY->", "depth":13, "children":[ 
+                                                        { "id": "3547", "name": "HeVAL->", "depth":14, "children":[ 
+                                                            { "id": "3548", "name": "SV(PV)", "depth":15, "children":[ 
+                                                            ], "data":{ "$area": 56 } },
+                                                        ], "data":{ "$area": 56 } },
+                                                        { "id": "3549", "name": "HeVAL->", "depth":14, "children":[ 
+                                                            { "id": "3550", "name": "SV(PV)", "depth":15, "children":[ 
+                                                            ], "data":{ "$area": 56 } },
+                                                        ], "data":{ "$area": 56 } },
+                                                        { "id": "3551", "name": "HeVAL->", "depth":14, "children":[ 
+                                                            { "id": "3552", "name": "SV(PV)", "depth":15, "children":[ 
+                                                            ], "data":{ "$area": 56 } },
+                                                        ], "data":{ "$area": 56 } },
+                                                        { "id": "3553", "name": "HeVAL->", "depth":14, "children":[ 
+                                                            { "id": "3554", "name": "SV(PV)", "depth":15, "children":[ 
+                                                            ], "data":{ "$area": 56 } },
+                                                        ], "data":{ "$area": 56 } },
+                                                        { "id": "3555", "name": "HeVAL->", "depth":14, "children":[ 
+                                                            { "id": "3556", "name": "SV(PV)", "depth":15, "children":[ 
+                                                            ], "data":{ "$area": 56 } },
+                                                        ], "data":{ "$area": 56 } },
+                                                        { "id": "3557", "name": "HeVAL->", "depth":14, "children":[ 
+                                                            { "id": "3558", "name": "SV(PV)", "depth":15, "children":[ 
+                                                            ], "data":{ "$area": 56 } },
+                                                        ], "data":{ "$area": 56 } },
+                                                        { "id": "3559", "name": "HeVAL->", "depth":14, "children":[ 
+                                                            { "id": "3560", "name": "SV(PV)", "depth":15, "children":[ 
+                                                            ], "data":{ "$area": 56 } },
+                                                        ], "data":{ "$area": 56 } },
+                                                        { "id": "3561", "name": "HeVAL->", "depth":14, "children":[ 
+                                                            { "id": "3562", "name": "SV(PV)", "depth":15, "children":[ 
+                                                            ], "data":{ "$area": 56 } },
+                                                        ], "data":{ "$area": 56 } },
+                                                        { "id": "3563", "name": "HeVAL->", "depth":14, "children":[ 
+                                                            { "id": "3564", "name": "SV(PV)", "depth":15, "children":[ 
+                                                            ], "data":{ "$area": 56 } },
+                                                        ], "data":{ "$area": 56 } },
+                                                        { "id": "3565", "name": "HeVAL->", "depth":14, "children":[ 
+                                                            { "id": "3566", "name": "SV(PV)", "depth":15, "children":[ 
+                                                            ], "data":{ "$area": 56 } },
+                                                        ], "data":{ "$area": 56 } },
+                                                        { "id": "3567", "name": "HeVAL->", "depth":14, "children":[ 
+                                                            { "id": "3568", "name": "SV(PV)", "depth":15, "children":[ 
+                                                            ], "data":{ "$area": 56 } },
+                                                        ], "data":{ "$area": 56 } },
+                                                        { "id": "3569", "name": "HeVAL->", "depth":14, "children":[ 
+                                                            { "id": "3570", "name": "SV(PV)", "depth":15, "children":[ 
+                                                            ], "data":{ "$area": 56 } },
+                                                        ], "data":{ "$area": 56 } },
+                                                        { "id": "3571", "name": "HeVAL->", "depth":14, "children":[ 
+                                                            { "id": "3572", "name": "SV(PV)", "depth":15, "children":[ 
+                                                            ], "data":{ "$area": 56 } },
+                                                        ], "data":{ "$area": 56 } },
+                                                        { "id": "3573", "name": "HeVAL->", "depth":14, "children":[ 
+                                                            { "id": "3574", "name": "SV(PV)", "depth":15, "children":[ 
+                                                            ], "data":{ "$area": 56 } },
+                                                        ], "data":{ "$area": 56 } },
+                                                        { "id": "3575", "name": "HeVAL->", "depth":14, "children":[ 
+                                                            { "id": "3576", "name": "SV(PV)", "depth":15, "children":[ 
+                                                            ], "data":{ "$area": 56 } },
+                                                        ], "data":{ "$area": 56 } },
+                                                        { "id": "3577", "name": "HeVAL->", "depth":14, "children":[ 
+                                                            { "id": "3578", "name": "SV(PV)", "depth":15, "children":[ 
+                                                            ], "data":{ "$area": 56 } },
+                                                        ], "data":{ "$area": 56 } },
+                                                        { "id": "3579", "name": "HeVAL->", "depth":14, "children":[ 
+                                                            { "id": "3580", "name": "SV(PV)", "depth":15, "children":[ 
+                                                            ], "data":{ "$area": 56 } },
+                                                        ], "data":{ "$area": 56 } },
+                                                        { "id": "3581", "name": "HeVAL->", "depth":14, "children":[ 
+                                                            { "id": "3582", "name": "SV(PV)", "depth":15, "children":[ 
+                                                            ], "data":{ "$area": 56 } },
+                                                        ], "data":{ "$area": 56 } },
+                                                        { "id": "3583", "name": "HeVAL->", "depth":14, "children":[ 
+                                                            { "id": "3584", "name": "SV(PV)", "depth":15, "children":[ 
+                                                            ], "data":{ "$area": 56 } },
+                                                        ], "data":{ "$area": 56 } },
+                                                        { "id": "3585", "name": "HeVAL->", "depth":14, "children":[ 
+                                                            { "id": "3586", "name": "SV(PV)", "depth":15, "children":[ 
+                                                            ], "data":{ "$area": 56 } },
+                                                        ], "data":{ "$area": 56 } },
+                                                        { "id": "3587", "name": "HeVAL->", "depth":14, "children":[ 
+                                                            { "id": "3588", "name": "SV(PV)", "depth":15, "children":[ 
+                                                            ], "data":{ "$area": 56 } },
+                                                        ], "data":{ "$area": 56 } },
+                                                        { "id": "3589", "name": "HeVAL->", "depth":14, "children":[ 
+                                                            { "id": "3590", "name": "SV(PV)", "depth":15, "children":[ 
+                                                            ], "data":{ "$area": 56 } },
+                                                        ], "data":{ "$area": 56 } },
+                                                        { "id": "3591", "name": "HeVAL->", "depth":14, "children":[ 
+                                                            { "id": "3592", "name": "SV(PV)", "depth":15, "children":[ 
+                                                            ], "data":{ "$area": 56 } },
+                                                        ], "data":{ "$area": 56 } },
+                                                        { "id": "3593", "name": "HeVAL->", "depth":14, "children":[ 
+                                                            { "id": "3594", "name": "SV(PV)", "depth":15, "children":[ 
+                                                            ], "data":{ "$area": 56 } },
+                                                        ], "data":{ "$area": 56 } },
+                                                        { "id": "3595", "name": "HeVAL->", "depth":14, "children":[ 
+                                                            { "id": "3596", "name": "SV(PV)", "depth":15, "children":[ 
+                                                            ], "data":{ "$area": 56 } },
+                                                        ], "data":{ "$area": 56 } },
+                                                        { "id": "3597", "name": "HeVAL->", "depth":14, "children":[ 
+                                                            { "id": "3598", "name": "SV(PV)", "depth":15, "children":[ 
+                                                            ], "data":{ "$area": 56 } },
+                                                        ], "data":{ "$area": 56 } },
+                                                        { "id": "3599", "name": "HeVAL->", "depth":14, "children":[ 
+                                                            { "id": "3600", "name": "SV(PV)", "depth":15, "children":[ 
+                                                            ], "data":{ "$area": 56 } },
+                                                        ], "data":{ "$area": 56 } },
+                                                        { "id": "3601", "name": "HeVAL->", "depth":14, "children":[ 
+                                                            { "id": "3602", "name": "SV(PV)", "depth":15, "children":[ 
+                                                            ], "data":{ "$area": 56 } },
+                                                        ], "data":{ "$area": 56 } },
+                                                        { "id": "3603", "name": "HeVAL->", "depth":14, "children":[ 
+                                                            { "id": "3604", "name": "SV(PV)", "depth":15, "children":[ 
+                                                            ], "data":{ "$area": 56 } },
+                                                        ], "data":{ "$area": 56 } },
+                                                        { "id": "3605", "name": "HeVAL->", "depth":14, "children":[ 
+                                                            { "id": "3606", "name": "SV(PV)", "depth":15, "children":[ 
+                                                            ], "data":{ "$area": 56 } },
+                                                        ], "data":{ "$area": 56 } },
+                                                        { "id": "3607", "name": "HeVAL->", "depth":14, "children":[ 
+                                                            { "id": "3608", "name": "SV(PV)", "depth":15, "children":[ 
+                                                            ], "data":{ "$area": 56 } },
+                                                        ], "data":{ "$area": 56 } },
+                                                        { "id": "3609", "name": "HeVAL->", "depth":14, "children":[ 
+                                                            { "id": "3610", "name": "SV(PV)", "depth":15, "children":[ 
+                                                            ], "data":{ "$area": 56 } },
+                                                        ], "data":{ "$area": 56 } },
+                                                        { "id": "3611", "name": "HeVAL->", "depth":14, "children":[ 
+                                                            { "id": "3612", "name": "SV(PV)", "depth":15, "children":[ 
+                                                            ], "data":{ "$area": 56 } },
+                                                        ], "data":{ "$area": 56 } },
+                                                        { "id": "3613", "name": "HeVAL->", "depth":14, "children":[ 
+                                                            { "id": "3614", "name": "SV(PV)", "depth":15, "children":[ 
+                                                            ], "data":{ "$area": 56 } },
+                                                        ], "data":{ "$area": 56 } },
+                                                        { "id": "3615", "name": "HeVAL->", "depth":14, "children":[ 
+                                                            { "id": "3616", "name": "SV(PV)", "depth":15, "children":[ 
+                                                            ], "data":{ "$area": 56 } },
+                                                        ], "data":{ "$area": 56 } },
+                                                        { "id": "3617", "name": "HeVAL->", "depth":14, "children":[ 
+                                                            { "id": "3618", "name": "SV(PV)", "depth":15, "children":[ 
+                                                            ], "data":{ "$area": 56 } },
+                                                        ], "data":{ "$area": 56 } },
+                                                        { "id": "3619", "name": "HeVAL->", "depth":14, "children":[ 
+                                                            { "id": "3620", "name": "SV(PV)", "depth":15, "children":[ 
+                                                            ], "data":{ "$area": 56 } },
+                                                        ], "data":{ "$area": 56 } },
+                                                        { "id": "3621", "name": "HeVAL->", "depth":14, "children":[ 
+                                                            { "id": "3622", "name": "SV(PV)", "depth":15, "children":[ 
+                                                            ], "data":{ "$area": 56 } },
+                                                        ], "data":{ "$area": 56 } },
+                                                        { "id": "3623", "name": "HeVAL->", "depth":14, "children":[ 
+                                                            { "id": "3624", "name": "SV(PV)", "depth":15, "children":[ 
+                                                            ], "data":{ "$area": 56 } },
+                                                        ], "data":{ "$area": 56 } },
+                                                        { "id": "3625", "name": "HeVAL->", "depth":14, "children":[ 
+                                                            { "id": "3626", "name": "SV(PV)", "depth":15, "children":[ 
+                                                            ], "data":{ "$area": 56 } },
+                                                        ], "data":{ "$area": 56 } },
+                                                        { "id": "3627", "name": "HeVAL->", "depth":14, "children":[ 
+                                                            { "id": "3628", "name": "SV(PV)", "depth":15, "children":[ 
+                                                            ], "data":{ "$area": 56 } },
+                                                        ], "data":{ "$area": 56 } },
+                                                        { "id": "3629", "name": "HeVAL->", "depth":14, "children":[ 
+                                                            { "id": "3630", "name": "SV(PV)", "depth":15, "children":[ 
+                                                            ], "data":{ "$area": 56 } },
+                                                        ], "data":{ "$area": 56 } },
+                                                        { "id": "3631", "name": "HeVAL->", "depth":14, "children":[ 
+                                                            { "id": "3632", "name": "SV(PV)", "depth":15, "children":[ 
+                                                            ], "data":{ "$area": 56 } },
+                                                        ], "data":{ "$area": 56 } },
+                                                        { "id": "3633", "name": "HeVAL->", "depth":14, "children":[ 
+                                                            { "id": "3634", "name": "SV(PV)", "depth":15, "children":[ 
+                                                            ], "data":{ "$area": 56 } },
+                                                        ], "data":{ "$area": 56 } },
+                                                        { "id": "3635", "name": "HeVAL->", "depth":14, "children":[ 
+                                                            { "id": "3636", "name": "SV(PV)", "depth":15, "children":[ 
+                                                            ], "data":{ "$area": 56 } },
+                                                        ], "data":{ "$area": 56 } },
+                                                        { "id": "3637", "name": "HeVAL->", "depth":14, "children":[ 
+                                                            { "id": "3638", "name": "SV(PV)", "depth":15, "children":[ 
+                                                            ], "data":{ "$area": 56 } },
+                                                        ], "data":{ "$area": 56 } },
+                                                        { "id": "3639", "name": "HeVAL->", "depth":14, "children":[ 
+                                                            { "id": "3640", "name": "SV(PV)", "depth":15, "children":[ 
+                                                            ], "data":{ "$area": 56 } },
+                                                        ], "data":{ "$area": 56 } },
+                                                        { "id": "3641", "name": "HeVAL->", "depth":14, "children":[ 
+                                                            { "id": "3642", "name": "SV(PV)", "depth":15, "children":[ 
+                                                            ], "data":{ "$area": 56 } },
+                                                        ], "data":{ "$area": 56 } },
+                                                        { "id": "3643", "name": "HeVAL->", "depth":14, "children":[ 
+                                                            { "id": "3644", "name": "SV(PV)", "depth":15, "children":[ 
+                                                            ], "data":{ "$area": 56 } },
+                                                        ], "data":{ "$area": 56 } },
+                                                        { "id": "3645", "name": "HeVAL->", "depth":14, "children":[ 
+                                                            { "id": "3646", "name": "SV(PV)", "depth":15, "children":[ 
+                                                            ], "data":{ "$area": 56 } },
+                                                        ], "data":{ "$area": 56 } },
+                                                        { "id": "3647", "name": "HeVAL->", "depth":14, "children":[ 
+                                                            { "id": "3648", "name": "SV(PV)", "depth":15, "children":[ 
+                                                            ], "data":{ "$area": 56 } },
+                                                        ], "data":{ "$area": 56 } },
+                                                        { "id": "3649", "name": "HeVAL->", "depth":14, "children":[ 
+                                                            { "id": "3650", "name": "SV(PV)", "depth":15, "children":[ 
+                                                            ], "data":{ "$area": 56 } },
+                                                        ], "data":{ "$area": 56 } },
+                                                    ], "data":{ "$area": 4160 } },
+                                                ], "data":{ "$area": 4728 } },
+                                            ], "data":{ "$area": 4728 } },
+                                        ], "data":{ "$area": 4880 } },
+                                    ], "data":{ "$area": 4880 } },
+                                    { "id": "3651", "name": "hent_hek->", "depth":9, "children":[ 
+                                    ], "data":{ "$area": 41 } },
+                                    { "id": "3652", "name": "HeVAL->", "depth":9, "children":[ 
+                                        { "id": "3653", "name": "SV(PVGV)", "depth":10, "children":[ 
+                                            { "id": "3654", "name": "UNKNOWN(0,0x0)", "depth":11, "children":[ 
+                                                { "id": "3655", "name": "MAGIC(<)", "depth":12, "children":[ 
+                                                    { "id": "3656", "name": "mg_obj->", "depth":13, "children":[ 
+                                                        { "id": "3657", "name": "SV(PVCV)", "depth":14, "children":[ 
+                                                            { "id": "3658", "name": "CvPADLIST->", "depth":15, "children":[ 
+                                                                { "id": "3659", "name": "SV(PVAV)", "depth":16, "children":[ 
+                                                                ], "data":{ "$area": 80 } },
+                                                            ], "data":{ "$area": 80 } },
+                                                            { "id": "3660", "name": "CvSTART->", "depth":15, "children":[ 
+                                                                { "id": "3661", "name": "SVOP->", "depth":16, "children":[ 
+                                                                    { "id": "3662", "name": "SV(IV)", "depth":17, "children":[ 
+                                                                    ], "data":{ "$area": 24 } },
+                                                                ], "data":{ "$area": 24 } },
+                                                                { "id": "3663", "name": "SVOP->", "depth":16, "children":[ 
+                                                                    { "id": "3664", "name": "SV(IV)", "depth":17, "children":[ 
+                                                                    ], "data":{ "$area": 24 } },
+                                                                ], "data":{ "$area": 24 } },
+                                                                { "id": "3665", "name": "SVOP->", "depth":16, "children":[ 
+                                                                    { "id": "3666", "name": "SV(PV)", "depth":17, "children":[ 
+                                                                    ], "data":{ "$area": 56 } },
+                                                                ], "data":{ "$area": 56 } },
+                                                            ], "data":{ "$area": 1504 } },
+                                                        ], "data":{ "$area": 1712 } },
+                                                    ], "data":{ "$area": 1712 } },
+                                                ], "data":{ "$area": 1752 } },
+                                            ], "data":{ "$area": 1752 } },
+                                        ], "data":{ "$area": 1904 } },
+                                    ], "data":{ "$area": 1904 } },
+                                    { "id": "3667", "name": "hent_hek->", "depth":9, "children":[ 
+                                    ], "data":{ "$area": 39 } },
+                                    { "id": "3668", "name": "HeVAL->", "depth":9, "children":[ 
+                                        { "id": "3669", "name": "SV(PVGV)", "depth":10, "children":[ 
+                                            { "id": "3670", "name": "UNKNOWN(0,0x0)", "depth":11, "children":[ 
+                                                { "id": "3671", "name": "MAGIC(<)", "depth":12, "children":[ 
+                                                    { "id": "3672", "name": "mg_obj->", "depth":13, "children":[ 
+                                                        { "id": "3673", "name": "SV(PVCV)", "depth":14, "children":[ 
+                                                            { "id": "3674", "name": "CvPADLIST->", "depth":15, "children":[ 
+                                                                { "id": "3675", "name": "SV(PVAV)", "depth":16, "children":[ 
+                                                                ], "data":{ "$area": 80 } },
+                                                            ], "data":{ "$area": 80 } },
+                                                            { "id": "3676", "name": "CvSTART->", "depth":15, "children":[ 
+                                                                { "id": "3677", "name": "SVOP->", "depth":16, "children":[ 
+                                                                    { "id": "3678", "name": "SV(PV)", "depth":17, "children":[ 
+                                                                    ], "data":{ "$area": 42 } },
+                                                                ], "data":{ "$area": 42 } },
+                                                                { "id": "3679", "name": "SVOP->", "depth":16, "children":[ 
+                                                                    { "id": "3680", "name": "SV(PV)", "depth":17, "children":[ 
+                                                                    ], "data":{ "$area": 68 } },
+                                                                ], "data":{ "$area": 68 } },
+                                                                { "id": "3681", "name": "SVOP->", "depth":16, "children":[ 
+                                                                    { "id": "3682", "name": "SV(PVGV)", "depth":17, "children":[ 
+                                                                        { "id": "3683", "name": "GvNAME_HEK->", "depth":18, "children":[ 
+                                                                        ], "data":{ "$area": 37 } },
+                                                                        { "id": "3684", "name": "gp_sv->", "depth":18, "children":[ 
+                                                                            { "id": "3685", "name": "SV(PV)", "depth":19, "children":[ 
+                                                                            ], "data":{ "$area": 56 } },
+                                                                        ], "data":{ "$area": 56 } },
+                                                                    ], "data":{ "$area": 245 } },
+                                                                ], "data":{ "$area": 245 } },
+                                                                { "id": "3686", "name": "SVOP->", "depth":16, "children":[ 
+                                                                    { "id": "3687", "name": "SV(PVGV)", "depth":17, "children":[ 
+                                                                        { "id": "3688", "name": "GvNAME_HEK->", "depth":18, "children":[ 
+                                                                        ], "data":{ "$area": 38 } },
+                                                                        { "id": "3689", "name": "gp_hv->", "depth":18, "children":[ 
+                                                                            { "id": "3690", "name": "SV(PVHV)", "depth":19, "children":[ 
+                                                                                { "id": "3691", "name": "HvARRAY->", "depth":20, "children":[ 
+                                                                                ], "data":{ "$area": 1288 } },
+                                                                            ], "data":{ "$area": 1856 } },
+                                                                        ], "data":{ "$area": 1856 } },
+                                                                    ], "data":{ "$area": 2046 } },
+                                                                ], "data":{ "$area": 2046 } },
+                                                                { "id": "3692", "name": "SVOP->", "depth":16, "children":[ 
+                                                                    { "id": "3693", "name": "SV(IV)", "depth":17, "children":[ 
+                                                                    ], "data":{ "$area": 24 } },
+                                                                ], "data":{ "$area": 24 } },
+                                                                { "id": "3694", "name": "SVOP->", "depth":16, "children":[ 
+                                                                    { "id": "3695", "name": "SV(IV)", "depth":17, "children":[ 
+                                                                    ], "data":{ "$area": 24 } },
+                                                                ], "data":{ "$area": 24 } },
+                                                                { "id": "3696", "name": "SVOP->", "depth":16, "children":[ 
+                                                                    { "id": "3697", "name": "SV(PV)", "depth":17, "children":[ 
+                                                                    ], "data":{ "$area": 56 } },
+                                                                ], "data":{ "$area": 56 } },
+                                                                { "id": "3698", "name": "SVOP->", "depth":16, "children":[ 
+                                                                    { "id": "3699", "name": "SV(IV)", "depth":17, "children":[ 
+                                                                    ], "data":{ "$area": 24 } },
+                                                                ], "data":{ "$area": 24 } },
+                                                                { "id": "3700", "name": "SVOP->", "depth":16, "children":[ 
+                                                                    { "id": "3701", "name": "SV(IV)", "depth":17, "children":[ 
+                                                                    ], "data":{ "$area": 24 } },
+                                                                ], "data":{ "$area": 24 } },
+                                                                { "id": "3702", "name": "SVOP->", "depth":16, "children":[ 
+                                                                    { "id": "3703", "name": "SV(PV)", "depth":17, "children":[ 
+                                                                    ], "data":{ "$area": 56 } },
+                                                                ], "data":{ "$area": 56 } },
+                                                                { "id": "3704", "name": "SVOP->", "depth":16, "children":[ 
+                                                                    { "id": "3705", "name": "SV(IV)", "depth":17, "children":[ 
+                                                                    ], "data":{ "$area": 24 } },
+                                                                ], "data":{ "$area": 24 } },
+                                                                { "id": "3706", "name": "SVOP->", "depth":16, "children":[ 
+                                                                    { "id": "3707", "name": "SV(IV)", "depth":17, "children":[ 
+                                                                    ], "data":{ "$area": 24 } },
+                                                                ], "data":{ "$area": 24 } },
+                                                            ], "data":{ "$area": 8585 } },
+                                                        ], "data":{ "$area": 8793 } },
+                                                    ], "data":{ "$area": 8793 } },
+                                                ], "data":{ "$area": 8833 } },
+                                            ], "data":{ "$area": 8833 } },
+                                        ], "data":{ "$area": 8985 } },
+                                    ], "data":{ "$area": 8985 } },
+                                    { "id": "3708", "name": "HeVAL->", "depth":9, "children":[ 
+                                        { "id": "3709", "name": "SV(PVGV)", "depth":10, "children":[ 
+                                            { "id": "3710", "name": "UNKNOWN(0,0x0)", "depth":11, "children":[ 
+                                                { "id": "3711", "name": "MAGIC(<)", "depth":12, "children":[ 
+                                                    { "id": "3712", "name": "mg_obj->", "depth":13, "children":[ 
+                                                        { "id": "3713", "name": "SV(PVCV)", "depth":14, "children":[ 
+                                                            { "id": "3714", "name": "CvPADLIST->", "depth":15, "children":[ 
+                                                                { "id": "3715", "name": "SV(PVAV)", "depth":16, "children":[ 
+                                                                ], "data":{ "$area": 80 } },
+                                                            ], "data":{ "$area": 80 } },
+                                                            { "id": "3716", "name": "CvSTART->", "depth":15, "children":[ 
+                                                                { "id": "3717", "name": "SVOP->", "depth":16, "children":[ 
+                                                                    { "id": "3718", "name": "SV(PVGV)", "depth":17, "children":[ 
+                                                                        { "id": "3719", "name": "GvNAME_HEK->", "depth":18, "children":[ 
+                                                                        ], "data":{ "$area": 46 } },
+                                                                        { "id": "3720", "name": "gp_sv->", "depth":18, "children":[ 
+                                                                            { "id": "3721", "name": "SV(PVMG)", "depth":19, "children":[ 
+                                                                                { "id": "3722", "name": "UNKNOWN(0,0x0)", "depth":20, "children":[ 
+                                                                                    { "id": "3723", "name": "MAGIC(0)", "depth":21, "children":[ 
+                                                                                    ], "data":{ "$area": 52 } },
+                                                                                ], "data":{ "$area": 52 } },
+                                                                            ], "data":{ "$area": 140 } },
+                                                                        ], "data":{ "$area": 140 } },
+                                                                    ], "data":{ "$area": 338 } },
+                                                                ], "data":{ "$area": 338 } },
+                                                                { "id": "3724", "name": "SVOP->", "depth":16, "children":[ 
+                                                                    { "id": "3725", "name": "SV(PV)", "depth":17, "children":[ 
+                                                                    ], "data":{ "$area": 42 } },
+                                                                ], "data":{ "$area": 42 } },
+                                                                { "id": "3726", "name": "SVOP->", "depth":16, "children":[ 
+                                                                    { "id": "3727", "name": "SV(PV)", "depth":17, "children":[ 
+                                                                    ], "data":{ "$area": 68 } },
+                                                                ], "data":{ "$area": 68 } },
+                                                                { "id": "3728", "name": "SVOP->", "depth":16, "children":[ 
+                                                                    { "id": "3729", "name": "SV(PV)", "depth":17, "children":[ 
+                                                                    ], "data":{ "$area": 56 } },
+                                                                ], "data":{ "$area": 56 } },
+                                                                { "id": "3730", "name": "SVOP->", "depth":16, "children":[ 
+                                                                    { "id": "3731", "name": "SV(PV)", "depth":17, "children":[ 
+                                                                    ], "data":{ "$area": 56 } },
+                                                                ], "data":{ "$area": 56 } },
+                                                                { "id": "3732", "name": "SVOP->", "depth":16, "children":[ 
+                                                                    { "id": "3733", "name": "SV(PV)", "depth":17, "children":[ 
+                                                                    ], "data":{ "$area": 40 } },
+                                                                ], "data":{ "$area": 40 } },
+                                                                { "id": "3734", "name": "SVOP->", "depth":16, "children":[ 
+                                                                    { "id": "3735", "name": "SV(IV)", "depth":17, "children":[ 
+                                                                    ], "data":{ "$area": 24 } },
+                                                                ], "data":{ "$area": 24 } },
+                                                                { "id": "3736", "name": "SVOP->", "depth":16, "children":[ 
+                                                                    { "id": "3737", "name": "SV(IV)", "depth":17, "children":[ 
+                                                                    ], "data":{ "$area": 24 } },
+                                                                ], "data":{ "$area": 24 } },
+                                                                { "id": "3738", "name": "SVOP->", "depth":16, "children":[ 
+                                                                    { "id": "3739", "name": "SV(PV)", "depth":17, "children":[ 
+                                                                    ], "data":{ "$area": 40 } },
+                                                                ], "data":{ "$area": 40 } },
+                                                                { "id": "3740", "name": "SVOP->", "depth":16, "children":[ 
+                                                                    { "id": "3741", "name": "SV(PV)", "depth":17, "children":[ 
+                                                                    ], "data":{ "$area": 40 } },
+                                                                ], "data":{ "$area": 40 } },
+                                                                { "id": "3742", "name": "SVOP->", "depth":16, "children":[ 
+                                                                    { "id": "3743", "name": "SV(IV)", "depth":17, "children":[ 
+                                                                    ], "data":{ "$area": 24 } },
+                                                                ], "data":{ "$area": 24 } },
+                                                                { "id": "3744", "name": "SVOP->", "depth":16, "children":[ 
+                                                                    { "id": "3745", "name": "SV(PV)", "depth":17, "children":[ 
+                                                                    ], "data":{ "$area": 40 } },
+                                                                ], "data":{ "$area": 40 } },
+                                                                { "id": "3746", "name": "SVOP->", "depth":16, "children":[ 
+                                                                    { "id": "3747", "name": "SV(PVGV)", "depth":17, "children":[ 
+                                                                        { "id": "3748", "name": "GvNAME_HEK->", "depth":18, "children":[ 
+                                                                        ], "data":{ "$area": 38 } },
+                                                                        { "id": "3749", "name": "gp_sv->", "depth":18, "children":[ 
+                                                                            { "id": "3750", "name": "SV(PV)", "depth":19, "children":[ 
+                                                                            ], "data":{ "$area": 56 } },
+                                                                        ], "data":{ "$area": 56 } },
+                                                                    ], "data":{ "$area": 246 } },
+                                                                ], "data":{ "$area": 246 } },
+                                                                { "id": "3751", "name": "SVOP->", "depth":16, "children":[ 
+                                                                    { "id": "3752", "name": "SV(PV)", "depth":17, "children":[ 
+                                                                    ], "data":{ "$area": 40 } },
+                                                                ], "data":{ "$area": 40 } },
+                                                                { "id": "3753", "name": "SVOP->", "depth":16, "children":[ 
+                                                                    { "id": "3754", "name": "SV(PVGV)", "depth":17, "children":[ 
+                                                                        { "id": "3755", "name": "GvNAME_HEK->", "depth":18, "children":[ 
+                                                                        ], "data":{ "$area": 35 } },
+                                                                        { "id": "3756", "name": "gp_sv->", "depth":18, "children":[ 
+                                                                            { "id": "3757", "name": "SV(PVMG)", "depth":19, "children":[ 
+                                                                                { "id": "3758", "name": "UNKNOWN(0,0x0)", "depth":20, "children":[ 
+                                                                                    { "id": "3759", "name": "MAGIC(0)", "depth":21, "children":[ 
+                                                                                    ], "data":{ "$area": 41 } },
+                                                                                ], "data":{ "$area": 41 } },
+                                                                            ], "data":{ "$area": 113 } },
+                                                                        ], "data":{ "$area": 113 } },
+                                                                    ], "data":{ "$area": 300 } },
+                                                                ], "data":{ "$area": 300 } },
+                                                            ], "data":{ "$area": 7954 } },
+                                                        ], "data":{ "$area": 8162 } },
+                                                    ], "data":{ "$area": 8162 } },
+                                                ], "data":{ "$area": 8202 } },
+                                            ], "data":{ "$area": 8202 } },
+                                        ], "data":{ "$area": 8354 } },
+                                    ], "data":{ "$area": 8354 } },
+                                    { "id": "3760", "name": "HeVAL->", "depth":9, "children":[ 
+                                        { "id": "3761", "name": "SV(PVGV)", "depth":10, "children":[ 
+                                            { "id": "3762", "name": "UNKNOWN(0,0x0)", "depth":11, "children":[ 
+                                                { "id": "3763", "name": "MAGIC(<)", "depth":12, "children":[ 
+                                                    { "id": "3764", "name": "mg_obj->", "depth":13, "children":[ 
+                                                        { "id": "3765", "name": "SV(PVCV)", "depth":14, "children":[ 
+                                                            { "id": "3766", "name": "CvPADLIST->", "depth":15, "children":[ 
+                                                                { "id": "3767", "name": "SV(PVAV)", "depth":16, "children":[ 
+                                                                ], "data":{ "$area": 80 } },
+                                                            ], "data":{ "$area": 80 } },
+                                                            { "id": "3768", "name": "CvSTART->", "depth":15, "children":[ 
+                                                                { "id": "3769", "name": "SVOP->", "depth":16, "children":[ 
+                                                                    { "id": "3770", "name": "SV(IV)", "depth":17, "children":[ 
+                                                                    ], "data":{ "$area": 24 } },
+                                                                ], "data":{ "$area": 24 } },
+                                                            ], "data":{ "$area": 632 } },
+                                                        ], "data":{ "$area": 840 } },
+                                                    ], "data":{ "$area": 840 } },
+                                                ], "data":{ "$area": 880 } },
+                                            ], "data":{ "$area": 880 } },
+                                        ], "data":{ "$area": 1032 } },
+                                    ], "data":{ "$area": 1032 } },
+                                    { "id": "3771", "name": "hent_hek->", "depth":9, "children":[ 
+                                    ], "data":{ "$area": 39 } },
+                                    { "id": "3772", "name": "HeVAL->", "depth":9, "children":[ 
+                                        { "id": "3773", "name": "SV(PVGV)", "depth":10, "children":[ 
+                                            { "id": "3774", "name": "gp_sv->", "depth":11, "children":[ 
+                                                { "id": "3775", "name": "SV(IV)", "depth":12, "children":[ 
+                                                ], "data":{ "$area": 24 } },
+                                            ], "data":{ "$area": 24 } },
+                                        ], "data":{ "$area": 176 } },
+                                    ], "data":{ "$area": 176 } },
+                                    { "id": "3776", "name": "HeVAL->", "depth":9, "children":[ 
+                                        { "id": "3777", "name": "SV(PVGV)", "depth":10, "children":[ 
+                                            { "id": "3778", "name": "UNKNOWN(0,0x0)", "depth":11, "children":[ 
+                                                { "id": "3779", "name": "MAGIC(<)", "depth":12, "children":[ 
+                                                    { "id": "3780", "name": "mg_obj->", "depth":13, "children":[ 
+                                                        { "id": "3781", "name": "SV(PVCV)", "depth":14, "children":[ 
+                                                            { "id": "3782", "name": "CvPADLIST->", "depth":15, "children":[ 
+                                                                { "id": "3783", "name": "SV(PVAV)", "depth":16, "children":[ 
+                                                                ], "data":{ "$area": 80 } },
+                                                            ], "data":{ "$area": 80 } },
+                                                            { "id": "3784", "name": "CvSTART->", "depth":15, "children":[ 
+                                                                { "id": "3785", "name": "SVOP->", "depth":16, "children":[ 
+                                                                    { "id": "3786", "name": "SV(PV)", "depth":17, "children":[ 
+                                                                    ], "data":{ "$area": 56 } },
+                                                                ], "data":{ "$area": 56 } },
+                                                            ], "data":{ "$area": 1128 } },
+                                                        ], "data":{ "$area": 1336 } },
+                                                    ], "data":{ "$area": 1336 } },
+                                                ], "data":{ "$area": 1376 } },
+                                            ], "data":{ "$area": 1376 } },
+                                        ], "data":{ "$area": 1528 } },
+                                    ], "data":{ "$area": 1528 } },
+                                    { "id": "3787", "name": "hent_hek->", "depth":9, "children":[ 
+                                    ], "data":{ "$area": 44 } },
+                                    { "id": "3788", "name": "HeVAL->", "depth":9, "children":[ 
+                                        { "id": "3789", "name": "SV(PVGV)", "depth":10, "children":[ 
+                                            { "id": "3790", "name": "gp_hv->", "depth":11, "children":[ 
+                                                { "id": "3791", "name": "SV(PVHV)", "depth":12, "children":[ 
+                                                    { "id": "3792", "name": "HvARRAY->", "depth":13, "children":[ 
+                                                        { "id": "3793", "name": "HeVAL->", "depth":14, "children":[ 
+                                                            { "id": "3794", "name": "SV(PVGV)", "depth":15, "children":[ 
+                                                                { "id": "3795", "name": "gp_sv->", "depth":16, "children":[ 
+                                                                    { "id": "3796", "name": "SV(PV)", "depth":17, "children":[ 
+                                                                    ], "data":{ "$area": 56 } },
+                                                                ], "data":{ "$area": 56 } },
+                                                            ], "data":{ "$area": 208 } },
+                                                        ], "data":{ "$area": 208 } },
+                                                        { "id": "3797", "name": "HeVAL->", "depth":14, "children":[ 
+                                                            { "id": "3798", "name": "SV(PVGV)", "depth":15, "children":[ 
+                                                                { "id": "3799", "name": "UNKNOWN(0,0x0)", "depth":16, "children":[ 
+                                                                    { "id": "3800", "name": "MAGIC(<)", "depth":17, "children":[ 
+                                                                        { "id": "3801", "name": "mg_obj->", "depth":18, "children":[ 
+                                                                            { "id": "3802", "name": "SV(PVCV)", "depth":19, "children":[ 
+                                                                                { "id": "3803", "name": "CvPADLIST->", "depth":20, "children":[ 
+                                                                                    { "id": "3804", "name": "SV(PVAV)", "depth":21, "children":[ 
+                                                                                    ], "data":{ "$area": 80 } },
+                                                                                ], "data":{ "$area": 80 } },
+                                                                                { "id": "3805", "name": "CvOUTSIDE->", "depth":20, "children":[ 
+                                                                                    { "id": "3806", "name": "SV(PVCV)", "depth":21, "children":[ 
+                                                                                        { "id": "3807", "name": "CvPADLIST->", "depth":22, "children":[ 
+                                                                                            { "id": "3808", "name": "SV(PVAV)", "depth":23, "children":[ 
+                                                                                            ], "data":{ "$area": 80 } },
+                                                                                        ], "data":{ "$area": 80 } },
+                                                                                    ], "data":{ "$area": 208 } },
+                                                                                ], "data":{ "$area": 208 } },
+                                                                                { "id": "3809", "name": "CvSTART->", "depth":20, "children":[ 
+                                                                                    { "id": "3810", "name": "SVOP->", "depth":21, "children":[ 
+                                                                                        { "id": "3811", "name": "SV(PVGV)", "depth":22, "children":[ 
+                                                                                            { "id": "3812", "name": "UNKNOWN(0,0x0)", "depth":23, "children":[ 
+                                                                                                { "id": "3813", "name": "MAGIC(<)", "depth":24, "children":[ 
+                                                                                                    { "id": "3814", "name": "mg_obj->", "depth":25, "children":[ 
+                                                                                                        { "id": "3815", "name": "SV(PVCV)", "depth":26, "children":[ 
+                                                                                                            { "id": "3816", "name": "CvPADLIST->", "depth":27, "children":[ 
+                                                                                                                { "id": "3817", "name": "SV(PVAV)", "depth":28, "children":[ 
+                                                                                                                ], "data":{ "$area": 80 } },
+                                                                                                            ], "data":{ "$area": 80 } },
+                                                                                                            { "id": "3818", "name": "CvSTART->", "depth":27, "children":[ 
+                                                                                                                { "id": "3819", "name": "SVOP->", "depth":28, "children":[ 
+                                                                                                                    { "id": "3820", "name": "SV(IV)", "depth":29, "children":[ 
+                                                                                                                    ], "data":{ "$area": 24 } },
+                                                                                                                ], "data":{ "$area": 24 } },
+                                                                                                                { "id": "3821", "name": "SVOP->", "depth":28, "children":[ 
+                                                                                                                    { "id": "3822", "name": "SV(PVGV)", "depth":29, "children":[ 
+                                                                                                                        { "id": "3823", "name": "GvNAME_HEK->", "depth":30, "children":[ 
+                                                                                                                        ], "data":{ "$area": 42 } },
+                                                                                                                        { "id": "3824", "name": "gp_sv->", "depth":30, "children":[ 
+                                                                                                                            { "id": "3825", "name": "SV(IV)", "depth":31, "children":[ 
+                                                                                                                            ], "data":{ "$area": 24 } },
+                                                                                                                        ], "data":{ "$area": 24 } },
+                                                                                                                    ], "data":{ "$area": 218 } },
+                                                                                                                ], "data":{ "$area": 218 } },
+                                                                                                                { "id": "3826", "name": "SVOP->", "depth":28, "children":[ 
+                                                                                                                    { "id": "3827", "name": "SV(PV)", "depth":29, "children":[ 
+                                                                                                                    ], "data":{ "$area": 40 } },
+                                                                                                                ], "data":{ "$area": 40 } },
+                                                                                                                { "id": "3828", "name": "SVOP->", "depth":28, "children":[ 
+                                                                                                                    { "id": "3829", "name": "SV(IV)", "depth":29, "children":[ 
+                                                                                                                    ], "data":{ "$area": 24 } },
+                                                                                                                ], "data":{ "$area": 24 } },
+                                                                                                                { "id": "3830", "name": "SVOP->", "depth":28, "children":[ 
+                                                                                                                    { "id": "3831", "name": "SV(IV)", "depth":29, "children":[ 
+                                                                                                                    ], "data":{ "$area": 24 } },
+                                                                                                                ], "data":{ "$area": 24 } },
+                                                                                                                { "id": "3832", "name": "SVOP->", "depth":28, "children":[ 
+                                                                                                                    { "id": "3833", "name": "SV(IV)", "depth":29, "children":[ 
+                                                                                                                    ], "data":{ "$area": 24 } },
+                                                                                                                ], "data":{ "$area": 24 } },
+                                                                                                                { "id": "3834", "name": "SVOP->", "depth":28, "children":[ 
+                                                                                                                    { "id": "3835", "name": "SV(IV)", "depth":29, "children":[ 
+                                                                                                                    ], "data":{ "$area": 24 } },
+                                                                                                                ], "data":{ "$area": 24 } },
+                                                                                                                { "id": "3836", "name": "SVOP->", "depth":28, "children":[ 
+                                                                                                                    { "id": "3837", "name": "SV(PV)", "depth":29, "children":[ 
+                                                                                                                    ], "data":{ "$area": 40 } },
+                                                                                                                ], "data":{ "$area": 40 } },
+                                                                                                                { "id": "3838", "name": "SVOP->", "depth":28, "children":[ 
+                                                                                                                    { "id": "3839", "name": "SV(IV)", "depth":29, "children":[ 
+                                                                                                                    ], "data":{ "$area": 24 } },
+                                                                                                                ], "data":{ "$area": 24 } },
+                                                                                                            ], "data":{ "$area": 6162 } },
+                                                                                                        ], "data":{ "$area": 6370 } },
+                                                                                                    ], "data":{ "$area": 6370 } },
+                                                                                                ], "data":{ "$area": 6410 } },
+                                                                                            ], "data":{ "$area": 6410 } },
+                                                                                            { "id": "3840", "name": "GvNAME_HEK->", "depth":23, "children":[ 
+                                                                                            ], "data":{ "$area": 53 } },
+                                                                                        ], "data":{ "$area": 6615 } },
+                                                                                    ], "data":{ "$area": 6615 } },
+                                                                                    { "id": "3841", "name": "SVOP->", "depth":21, "children":[ 
+                                                                                        { "id": "3842", "name": "SV(PV)", "depth":22, "children":[ 
+                                                                                        ], "data":{ "$area": 43 } },
+                                                                                    ], "data":{ "$area": 43 } },
+                                                                                    { "id": "3843", "name": "cop_filegv->", "depth":21, "children":[ 
+                                                                                        { "id": "3844", "name": "SV(PVGV)", "depth":22, "children":[ 
+                                                                                            { "id": "3845", "name": "GvNAME_HEK->", "depth":23, "children":[ 
+                                                                                            ], "data":{ "$area": 113 } },
+                                                                                            { "id": "3846", "name": "gp_sv->", "depth":23, "children":[ 
+                                                                                                { "id": "3847", "name": "SV(PV)", "depth":24, "children":[ 
+                                                                                                ], "data":{ "$area": 120 } },
+                                                                                            ], "data":{ "$area": 120 } },
+                                                                                        ], "data":{ "$area": 385 } },
+                                                                                    ], "data":{ "$area": 385 } },
+                                                                                    { "id": "3848", "name": "SVOP->", "depth":21, "children":[ 
+                                                                                        { "id": "3849", "name": "SV(IV)", "depth":22, "children":[ 
+                                                                                        ], "data":{ "$area": 24 } },
+                                                                                    ], "data":{ "$area": 24 } },
+                                                                                    { "id": "3850", "name": "SVOP->", "depth":21, "children":[ 
+                                                                                        { "id": "3851", "name": "SV(IV)", "depth":22, "children":[ 
+                                                                                        ], "data":{ "$area": 24 } },
+                                                                                    ], "data":{ "$area": 24 } },
+                                                                                ], "data":{ "$area": 9755 } },
+                                                                            ], "data":{ "$area": 10171 } },
+                                                                        ], "data":{ "$area": 10171 } },
+                                                                    ], "data":{ "$area": 10211 } },
+                                                                ], "data":{ "$area": 10211 } },
+                                                            ], "data":{ "$area": 10363 } },
+                                                        ], "data":{ "$area": 10363 } },
+                                                        { "id": "3852", "name": "hent_hek->", "depth":14, "children":[ 
+                                                        ], "data":{ "$area": 40 } },
+                                                        { "id": "3853", "name": "HeVAL->", "depth":14, "children":[ 
+                                                            { "id": "3854", "name": "SV(PVGV)", "depth":15, "children":[ 
+                                                                { "id": "3855", "name": "UNKNOWN(0,0x0)", "depth":16, "children":[ 
+                                                                    { "id": "3856", "name": "MAGIC(<)", "depth":17, "children":[ 
+                                                                        { "id": "3857", "name": "mg_obj->", "depth":18, "children":[ 
+                                                                            { "id": "3858", "name": "SV(PVCV)", "depth":19, "children":[ 
+                                                                                { "id": "3859", "name": "CvPADLIST->", "depth":20, "children":[ 
+                                                                                    { "id": "3860", "name": "SV(PVAV)", "depth":21, "children":[ 
+                                                                                    ], "data":{ "$area": 80 } },
+                                                                                ], "data":{ "$area": 80 } },
+                                                                                { "id": "3861", "name": "CvSTART->", "depth":20, "children":[ 
+                                                                                    { "id": "3862", "name": "SVOP->", "depth":21, "children":[ 
+                                                                                        { "id": "3863", "name": "SV(IV)", "depth":22, "children":[ 
+                                                                                        ], "data":{ "$area": 24 } },
+                                                                                    ], "data":{ "$area": 24 } },
+                                                                                    { "id": "3864", "name": "SVOP->", "depth":21, "children":[ 
+                                                                                        { "id": "3865", "name": "SV(IV)", "depth":22, "children":[ 
+                                                                                        ], "data":{ "$area": 24 } },
+                                                                                    ], "data":{ "$area": 24 } },
+                                                                                    { "id": "3866", "name": "SVOP->", "depth":21, "children":[ 
+                                                                                        { "id": "3867", "name": "SV(PV)", "depth":22, "children":[ 
+                                                                                        ], "data":{ "$area": 56 } },
+                                                                                    ], "data":{ "$area": 56 } },
+                                                                                ], "data":{ "$area": 1504 } },
+                                                                            ], "data":{ "$area": 1712 } },
+                                                                        ], "data":{ "$area": 1712 } },
+                                                                    ], "data":{ "$area": 1752 } },
+                                                                ], "data":{ "$area": 1752 } },
+                                                            ], "data":{ "$area": 1904 } },
+                                                        ], "data":{ "$area": 1904 } },
+                                                        { "id": "3868", "name": "HvNAME_HEK->", "depth":14, "children":[ 
+                                                        ], "data":{ "$area": 52 } },
+                                                    ], "data":{ "$area": 12727 } },
+                                                ], "data":{ "$area": 12847 } },
+                                            ], "data":{ "$area": 12847 } },
+                                        ], "data":{ "$area": 12999 } },
+                                    ], "data":{ "$area": 12999 } },
+                                    { "id": "3869", "name": "hent_hek->", "depth":9, "children":[ 
+                                    ], "data":{ "$area": 41 } },
+                                    { "id": "3870", "name": "HeVAL->", "depth":9, "children":[ 
+                                        { "id": "3871", "name": "SV(PVGV)", "depth":10, "children":[ 
+                                            { "id": "3872", "name": "UNKNOWN(0,0x0)", "depth":11, "children":[ 
+                                                { "id": "3873", "name": "MAGIC(<)", "depth":12, "children":[ 
+                                                    { "id": "3874", "name": "mg_obj->", "depth":13, "children":[ 
+                                                        { "id": "3875", "name": "SV(PVCV)", "depth":14, "children":[ 
+                                                            { "id": "3876", "name": "CvPADLIST->", "depth":15, "children":[ 
+                                                                { "id": "3877", "name": "SV(PVAV)", "depth":16, "children":[ 
+                                                                ], "data":{ "$area": 80 } },
+                                                            ], "data":{ "$area": 80 } },
+                                                            { "id": "3878", "name": "CvSTART->", "depth":15, "children":[ 
+                                                            ], "data":{ "$area": 608 } },
+                                                        ], "data":{ "$area": 816 } },
+                                                    ], "data":{ "$area": 816 } },
+                                                ], "data":{ "$area": 856 } },
+                                            ], "data":{ "$area": 856 } },
+                                        ], "data":{ "$area": 1008 } },
+                                    ], "data":{ "$area": 1008 } },
+                                    { "id": "3879", "name": "HeVAL->", "depth":9, "children":[ 
+                                        { "id": "3880", "name": "SV(PVGV)", "depth":10, "children":[ 
+                                            { "id": "3881", "name": "UNKNOWN(0,0x0)", "depth":11, "children":[ 
+                                                { "id": "3882", "name": "MAGIC(<)", "depth":12, "children":[ 
+                                                    { "id": "3883", "name": "mg_obj->", "depth":13, "children":[ 
+                                                        { "id": "3884", "name": "SV(PVCV)", "depth":14, "children":[ 
+                                                            { "id": "3885", "name": "CvPADLIST->", "depth":15, "children":[ 
+                                                                { "id": "3886", "name": "SV(PVAV)", "depth":16, "children":[ 
+                                                                ], "data":{ "$area": 80 } },
+                                                            ], "data":{ "$area": 80 } },
+                                                            { "id": "3887", "name": "CvSTART->", "depth":15, "children":[ 
+                                                                { "id": "3888", "name": "SVOP->", "depth":16, "children":[ 
+                                                                    { "id": "3889", "name": "SV(PV)", "depth":17, "children":[ 
+                                                                    ], "data":{ "$area": 40 } },
+                                                                ], "data":{ "$area": 40 } },
+                                                                { "id": "3890", "name": "SVOP->", "depth":16, "children":[ 
+                                                                    { "id": "3891", "name": "SV(PV)", "depth":17, "children":[ 
+                                                                    ], "data":{ "$area": 40 } },
+                                                                ], "data":{ "$area": 40 } },
+                                                                { "id": "3892", "name": "SVOP->", "depth":16, "children":[ 
+                                                                    { "id": "3893", "name": "SV(IV)", "depth":17, "children":[ 
+                                                                    ], "data":{ "$area": 24 } },
+                                                                ], "data":{ "$area": 24 } },
+                                                                { "id": "3894", "name": "SVOP->", "depth":16, "children":[ 
+                                                                    { "id": "3895", "name": "SV(IV)", "depth":17, "children":[ 
+                                                                    ], "data":{ "$area": 24 } },
+                                                                ], "data":{ "$area": 24 } },
+                                                                { "id": "3896", "name": "SVOP->", "depth":16, "children":[ 
+                                                                    { "id": "3897", "name": "SV(PV)", "depth":17, "children":[ 
+                                                                    ], "data":{ "$area": 40 } },
+                                                                ], "data":{ "$area": 40 } },
+                                                                { "id": "3898", "name": "SVOP->", "depth":16, "children":[ 
+                                                                    { "id": "3899", "name": "SV(PV)", "depth":17, "children":[ 
+                                                                    ], "data":{ "$area": 40 } },
+                                                                ], "data":{ "$area": 40 } },
+                                                                { "id": "3900", "name": "SVOP->", "depth":16, "children":[ 
+                                                                    { "id": "3901", "name": "SV(IV)", "depth":17, "children":[ 
+                                                                    ], "data":{ "$area": 24 } },
+                                                                ], "data":{ "$area": 24 } },
+                                                                { "id": "3902", "name": "SVOP->", "depth":16, "children":[ 
+                                                                    { "id": "3903", "name": "SV(PV)", "depth":17, "children":[ 
+                                                                    ], "data":{ "$area": 40 } },
+                                                                ], "data":{ "$area": 40 } },
+                                                                { "id": "3904", "name": "SVOP->", "depth":16, "children":[ 
+                                                                    { "id": "3905", "name": "SV(PV)", "depth":17, "children":[ 
+                                                                    ], "data":{ "$area": 40 } },
+                                                                ], "data":{ "$area": 40 } },
+                                                            ], "data":{ "$area": 4320 } },
+                                                        ], "data":{ "$area": 4528 } },
+                                                    ], "data":{ "$area": 4528 } },
+                                                ], "data":{ "$area": 4568 } },
+                                            ], "data":{ "$area": 4568 } },
+                                        ], "data":{ "$area": 4720 } },
+                                    ], "data":{ "$area": 4720 } },
+                                    { "id": "3906", "name": "hent_hek->", "depth":9, "children":[ 
+                                    ], "data":{ "$area": 40 } },
+                                    { "id": "3907", "name": "HeVAL->", "depth":9, "children":[ 
+                                        { "id": "3908", "name": "SV(PVGV)", "depth":10, "children":[ 
+                                            { "id": "3909", "name": "UNKNOWN(0,0x0)", "depth":11, "children":[ 
+                                                { "id": "3910", "name": "MAGIC(<)", "depth":12, "children":[ 
+                                                    { "id": "3911", "name": "mg_obj->", "depth":13, "children":[ 
+                                                        { "id": "3912", "name": "SV(PVCV)", "depth":14, "children":[ 
+                                                            { "id": "3913", "name": "CvPADLIST->", "depth":15, "children":[ 
+                                                                { "id": "3914", "name": "SV(PVAV)", "depth":16, "children":[ 
+                                                                ], "data":{ "$area": 80 } },
+                                                            ], "data":{ "$area": 80 } },
+                                                            { "id": "3915", "name": "CvSTART->", "depth":15, "children":[ 
+                                                                { "id": "3916", "name": "SVOP->", "depth":16, "children":[ 
+                                                                    { "id": "3917", "name": "SV(IV)", "depth":17, "children":[ 
+                                                                    ], "data":{ "$area": 24 } },
+                                                                ], "data":{ "$area": 24 } },
+                                                            ], "data":{ "$area": 632 } },
+                                                        ], "data":{ "$area": 840 } },
+                                                    ], "data":{ "$area": 840 } },
+                                                ], "data":{ "$area": 880 } },
+                                            ], "data":{ "$area": 880 } },
+                                        ], "data":{ "$area": 1032 } },
+                                    ], "data":{ "$area": 1032 } },
+                                    { "id": "3918", "name": "HeVAL->", "depth":9, "children":[ 
+                                        { "id": "3919", "name": "SV(PVGV)", "depth":10, "children":[ 
+                                            { "id": "3920", "name": "gp_sv->", "depth":11, "children":[ 
+                                                { "id": "3921", "name": "SV(PVNV)", "depth":12, "children":[ 
+                                                ], "data":{ "$area": 72 } },
+                                            ], "data":{ "$area": 72 } },
+                                        ], "data":{ "$area": 224 } },
+                                    ], "data":{ "$area": 224 } },
+                                ], "data":{ "$area": 75853 } },
+                            ], "data":{ "$area": 76165 } },
+                        ], "data":{ "$area": 76165 } },
+                    ], "data":{ "$area": 76428 } },
+                ], "data":{ "$area": 76428 } },
+                { "id": "3922", "name": "hent_hek->", "depth":4, "children":[ 
+                ], "data":{ "$area": 38 } },
+                { "id": "3923", "name": "HeVAL->", "depth":4, "children":[ 
+                    { "id": "3924", "name": "SV(PVGV)", "depth":5, "children":[ 
+                    ], "data":{ "$area": 152 } },
+                ], "data":{ "$area": 152 } },
+                { "id": "3925", "name": "hent_hek->", "depth":4, "children":[ 
+                ], "data":{ "$area": 87 } },
+                { "id": "3926", "name": "HeVAL->", "depth":4, "children":[ 
+                    { "id": "3927", "name": "SV(PVGV)", "depth":5, "children":[ 
+                        { "id": "3928", "name": "gp_sv->", "depth":6, "children":[ 
+                            { "id": "3929", "name": "SV(PV)", "depth":7, "children":[ 
+                            ], "data":{ "$area": 104 } },
+                        ], "data":{ "$area": 104 } },
+                    ], "data":{ "$area": 256 } },
+                ], "data":{ "$area": 256 } },
+                { "id": "3930", "name": "hent_hek->", "depth":4, "children":[ 
+                ], "data":{ "$area": 35 } },
+                { "id": "3931", "name": "HeVAL->", "depth":4, "children":[ 
+                    { "id": "3932", "name": "SV(PVGV)", "depth":5, "children":[ 
+                        { "id": "3933", "name": "gp_sv->", "depth":6, "children":[ 
+                            { "id": "3934", "name": "SV(RV)", "depth":7, "children":[ 
+                                { "id": "3935", "name": "RV->", "depth":8, "children":[ 
+                                    { "id": "3936", "name": "SV(PVHV)", "depth":9, "children":[ 
+                                        { "id": "3937", "name": "HvARRAY->", "depth":10, "children":[ 
+                                            { "id": "3938", "name": "hent_hek->", "depth":11, "children":[ 
+                                            ], "data":{ "$area": 42 } },
+                                            { "id": "3939", "name": "HeVAL->", "depth":11, "children":[ 
+                                                { "id": "3940", "name": "SV(PV)", "depth":12, "children":[ 
+                                                ], "data":{ "$area": 56 } },
+                                            ], "data":{ "$area": 56 } },
+                                            { "id": "3941", "name": "HeVAL->", "depth":11, "children":[ 
+                                                { "id": "3942", "name": "SV(IV)", "depth":12, "children":[ 
+                                                ], "data":{ "$area": 24 } },
+                                            ], "data":{ "$area": 24 } },
+                                            { "id": "3943", "name": "HeVAL->", "depth":11, "children":[ 
+                                                { "id": "3944", "name": "SV(RV)", "depth":12, "children":[ 
+                                                    { "id": "3945", "name": "RV->", "depth":13, "children":[ 
+                                                        { "id": "3946", "name": "SV(PVAV)", "depth":14, "children":[ 
+                                                            { "id": "3947", "name": "AVelem->", "depth":15, "children":[ 
+                                                                { "id": "3948", "name": "SV(IV)", "depth":16, "children":[ 
+                                                                ], "data":{ "$area": 24 } },
+                                                            ], "data":{ "$area": 24 } },
+                                                            { "id": "3949", "name": "AVelem->", "depth":15, "children":[ 
+                                                                { "id": "3950", "name": "SV(IV)", "depth":16, "children":[ 
+                                                                ], "data":{ "$area": 24 } },
+                                                            ], "data":{ "$area": 24 } },
+                                                            { "id": "3951", "name": "AVelem->", "depth":15, "children":[ 
+                                                                { "id": "3952", "name": "SV(IV)", "depth":16, "children":[ 
+                                                                ], "data":{ "$area": 24 } },
+                                                            ], "data":{ "$area": 24 } },
+                                                        ], "data":{ "$area": 168 } },
+                                                    ], "data":{ "$area": 168 } },
+                                                ], "data":{ "$area": 192 } },
+                                            ], "data":{ "$area": 192 } },
+                                        ], "data":{ "$area": 386 } },
+                                    ], "data":{ "$area": 506 } },
+                                ], "data":{ "$area": 506 } },
+                            ], "data":{ "$area": 530 } },
+                        ], "data":{ "$area": 530 } },
+                    ], "data":{ "$area": 682 } },
+                ], "data":{ "$area": 682 } },
+                { "id": "3953", "name": "hent_hek->", "depth":4, "children":[ 
+                ], "data":{ "$area": 40 } },
+                { "id": "3954", "name": "HeVAL->", "depth":4, "children":[ 
+                    { "id": "3955", "name": "SV(PVGV)", "depth":5, "children":[ 
+                        { "id": "3956", "name": "gp_hv->", "depth":6, "children":[ 
+                            { "id": "3957", "name": "SV(PVHV)", "depth":7, "children":[ 
+                                { "id": "3958", "name": "HvARRAY->", "depth":8, "children":[ 
+                                    { "id": "3959", "name": "HvNAME_HEK->", "depth":9, "children":[ 
+                                    ], "data":{ "$area": 38 } },
+                                ], "data":{ "$area": 102 } },
+                            ], "data":{ "$area": 222 } },
+                        ], "data":{ "$area": 222 } },
+                    ], "data":{ "$area": 374 } },
+                ], "data":{ "$area": 374 } },
+                { "id": "3960", "name": "hent_hek->", "depth":4, "children":[ 
+                ], "data":{ "$area": 42 } },
+                { "id": "3961", "name": "HeVAL->", "depth":4, "children":[ 
+                    { "id": "3962", "name": "SV(PVGV)", "depth":5, "children":[ 
+                        { "id": "3963", "name": "gp_sv->", "depth":6, "children":[ 
+                            { "id": "3964", "name": "SV(PV)", "depth":7, "children":[ 
+                            ], "data":{ "$area": 56 } },
+                        ], "data":{ "$area": 56 } },
+                    ], "data":{ "$area": 208 } },
+                ], "data":{ "$area": 208 } },
+                { "id": "3965", "name": "hent_hek->", "depth":4, "children":[ 
+                ], "data":{ "$area": 41 } },
+                { "id": "3966", "name": "HeVAL->", "depth":4, "children":[ 
+                    { "id": "3967", "name": "SV(PVGV)", "depth":5, "children":[ 
+                        { "id": "3968", "name": "gp_sv->", "depth":6, "children":[ 
+                            { "id": "3969", "name": "SV(PV)", "depth":7, "children":[ 
+                            ], "data":{ "$area": 56 } },
+                        ], "data":{ "$area": 56 } },
+                    ], "data":{ "$area": 208 } },
+                ], "data":{ "$area": 208 } },
+                { "id": "3970", "name": "hent_hek->", "depth":4, "children":[ 
+                ], "data":{ "$area": 41 } },
+                { "id": "3971", "name": "HeVAL->", "depth":4, "children":[ 
+                    { "id": "3972", "name": "SV(PVGV)", "depth":5, "children":[ 
+                        { "id": "3973", "name": "gp_sv->", "depth":6, "children":[ 
+                            { "id": "3974", "name": "SV(PV)", "depth":7, "children":[ 
+                            ], "data":{ "$area": 56 } },
+                        ], "data":{ "$area": 56 } },
+                    ], "data":{ "$area": 208 } },
+                ], "data":{ "$area": 208 } },
+                { "id": "3975", "name": "hent_hek->", "depth":4, "children":[ 
+                ], "data":{ "$area": 40 } },
+                { "id": "3976", "name": "HeVAL->", "depth":4, "children":[ 
+                    { "id": "3977", "name": "SV(PVGV)", "depth":5, "children":[ 
+                        { "id": "3978", "name": "gp_hv->", "depth":6, "children":[ 
+                            { "id": "3979", "name": "SV(PVHV)", "depth":7, "children":[ 
+                                { "id": "3980", "name": "HvARRAY->", "depth":8, "children":[ 
+                                    { "id": "3981", "name": "HeVAL->", "depth":9, "children":[ 
+                                        { "id": "3982", "name": "SV(PVGV)", "depth":10, "children":[ 
+                                        ], "data":{ "$area": 152 } },
+                                    ], "data":{ "$area": 152 } },
+                                    { "id": "3983", "name": "HeVAL->", "depth":9, "children":[ 
+                                        { "id": "3984", "name": "SV(PVGV)", "depth":10, "children":[ 
+                                            { "id": "3985", "name": "gp_sv->", "depth":11, "children":[ 
+                                                { "id": "3986", "name": "SV(IV)", "depth":12, "children":[ 
+                                                ], "data":{ "$area": 24 } },
+                                            ], "data":{ "$area": 24 } },
+                                        ], "data":{ "$area": 176 } },
+                                    ], "data":{ "$area": 176 } },
+                                    { "id": "3987", "name": "HeVAL->", "depth":9, "children":[ 
+                                        { "id": "3988", "name": "SV(PVGV)", "depth":10, "children":[ 
+                                        ], "data":{ "$area": 152 } },
+                                    ], "data":{ "$area": 152 } },
+                                    { "id": "3989", "name": "HeVAL->", "depth":9, "children":[ 
+                                        { "id": "3990", "name": "SV(PVGV)", "depth":10, "children":[ 
+                                        ], "data":{ "$area": 152 } },
+                                    ], "data":{ "$area": 152 } },
+                                    { "id": "3991", "name": "HeVAL->", "depth":9, "children":[ 
+                                        { "id": "3992", "name": "SV(PVGV)", "depth":10, "children":[ 
+                                        ], "data":{ "$area": 152 } },
+                                    ], "data":{ "$area": 152 } },
+                                    { "id": "3993", "name": "HeVAL->", "depth":9, "children":[ 
+                                        { "id": "3994", "name": "SV(PVGV)", "depth":10, "children":[ 
+                                            { "id": "3995", "name": "UNKNOWN(0,0x0)", "depth":11, "children":[ 
+                                                { "id": "3996", "name": "MAGIC(<)", "depth":12, "children":[ 
+                                                ], "data":{ "$area": 40 } },
+                                            ], "data":{ "$area": 40 } },
+                                        ], "data":{ "$area": 192 } },
+                                    ], "data":{ "$area": 192 } },
+                                    { "id": "3997", "name": "HeVAL->", "depth":9, "children":[ 
+                                        { "id": "3998", "name": "SV(PVGV)", "depth":10, "children":[ 
+                                            { "id": "3999", "name": "gp_sv->", "depth":11, "children":[ 
+                                                { "id": "4000", "name": "SV(PV)", "depth":12, "children":[ 
+                                                ], "data":{ "$area": 56 } },
+                                            ], "data":{ "$area": 56 } },
+                                        ], "data":{ "$area": 208 } },
+                                    ], "data":{ "$area": 208 } },
+                                    { "id": "4001", "name": "HeVAL->", "depth":9, "children":[ 
+                                        { "id": "4002", "name": "SV(PVGV)", "depth":10, "children":[ 
+                                            { "id": "4003", "name": "UNKNOWN(0,0x0)", "depth":11, "children":[ 
+                                                { "id": "4004", "name": "MAGIC(<)", "depth":12, "children":[ 
+                                                    { "id": "4005", "name": "mg_obj->", "depth":13, "children":[ 
+                                                        { "id": "4006", "name": "SV(PVCV)", "depth":14, "children":[ 
+                                                            { "id": "4007", "name": "CvPADLIST->", "depth":15, "children":[ 
+                                                                { "id": "4008", "name": "SV(PVAV)", "depth":16, "children":[ 
+                                                                ], "data":{ "$area": 80 } },
+                                                            ], "data":{ "$area": 80 } },
+                                                            { "id": "4009", "name": "CvOUTSIDE->", "depth":15, "children":[ 
+                                                                { "id": "4010", "name": "SV(PVCV)", "depth":16, "children":[ 
+                                                                    { "id": "4011", "name": "CvPADLIST->", "depth":17, "children":[ 
+                                                                        { "id": "4012", "name": "SV(PVAV)", "depth":18, "children":[ 
+                                                                        ], "data":{ "$area": 80 } },
+                                                                    ], "data":{ "$area": 80 } },
+                                                                ], "data":{ "$area": 208 } },
+                                                            ], "data":{ "$area": 208 } },
+                                                            { "id": "4013", "name": "CvSTART->", "depth":15, "children":[ 
+                                                                { "id": "4014", "name": "SVOP->", "depth":16, "children":[ 
+                                                                    { "id": "4015", "name": "SV(PV)", "depth":17, "children":[ 
+                                                                    ], "data":{ "$area": 42 } },
+                                                                ], "data":{ "$area": 42 } },
+                                                                { "id": "4016", "name": "SVOP->", "depth":16, "children":[ 
+                                                                    { "id": "4017", "name": "SV(PV)", "depth":17, "children":[ 
+                                                                    ], "data":{ "$area": 66 } },
+                                                                ], "data":{ "$area": 66 } },
+                                                                { "id": "4018", "name": "cop_filegv->", "depth":16, "children":[ 
+                                                                    { "id": "4019", "name": "SV(PVGV)", "depth":17, "children":[ 
+                                                                        { "id": "4020", "name": "GvNAME_HEK->", "depth":18, "children":[ 
+                                                                        ], "data":{ "$area": 100 } },
+                                                                        { "id": "4021", "name": "gp_sv->", "depth":18, "children":[ 
+                                                                            { "id": "4022", "name": "SV(PV)", "depth":19, "children":[ 
+                                                                            ], "data":{ "$area": 120 } },
+                                                                        ], "data":{ "$area": 120 } },
+                                                                    ], "data":{ "$area": 372 } },
+                                                                ], "data":{ "$area": 372 } },
+                                                                { "id": "4023", "name": "SVOP->", "depth":16, "children":[ 
+                                                                    { "id": "4024", "name": "SV(PV)", "depth":17, "children":[ 
+                                                                    ], "data":{ "$area": 40 } },
+                                                                ], "data":{ "$area": 40 } },
+                                                                { "id": "4025", "name": "SVOP->", "depth":16, "children":[ 
+                                                                    { "id": "4026", "name": "SV(PV)", "depth":17, "children":[ 
+                                                                    ], "data":{ "$area": 40 } },
+                                                                ], "data":{ "$area": 40 } },
+                                                                { "id": "4027", "name": "SVOP->", "depth":16, "children":[ 
+                                                                    { "id": "4028", "name": "SV(PV)", "depth":17, "children":[ 
+                                                                    ], "data":{ "$area": 56 } },
+                                                                ], "data":{ "$area": 56 } },
+                                                                { "id": "4029", "name": "SVOP->", "depth":16, "children":[ 
+                                                                    { "id": "4030", "name": "SV(PV)", "depth":17, "children":[ 
+                                                                    ], "data":{ "$area": 56 } },
+                                                                ], "data":{ "$area": 56 } },
+                                                                { "id": "4031", "name": "SVOP->", "depth":16, "children":[ 
+                                                                    { "id": "4032", "name": "SV(PV)", "depth":17, "children":[ 
+                                                                    ], "data":{ "$area": 42 } },
+                                                                ], "data":{ "$area": 42 } },
+                                                                { "id": "4033", "name": "SVOP->", "depth":16, "children":[ 
+                                                                    { "id": "4034", "name": "SV(PV)", "depth":17, "children":[ 
+                                                                    ], "data":{ "$area": 47 } },
+                                                                ], "data":{ "$area": 47 } },
+                                                                { "id": "4035", "name": "SVOP->", "depth":16, "children":[ 
+                                                                    { "id": "4036", "name": "SV(PV)", "depth":17, "children":[ 
+                                                                    ], "data":{ "$area": 40 } },
+                                                                ], "data":{ "$area": 40 } },
+                                                                { "id": "4037", "name": "SVOP->", "depth":16, "children":[ 
+                                                                    { "id": "4038", "name": "SV(PV)", "depth":17, "children":[ 
+                                                                    ], "data":{ "$area": 56 } },
+                                                                ], "data":{ "$area": 56 } },
+                                                                { "id": "4039", "name": "SVOP->", "depth":16, "children":[ 
+                                                                    { "id": "4040", "name": "SV(PV)", "depth":17, "children":[ 
+                                                                    ], "data":{ "$area": 56 } },
+                                                                ], "data":{ "$area": 56 } },
+                                                                { "id": "4041", "name": "SVOP->", "depth":16, "children":[ 
+                                                                    { "id": "4042", "name": "SV(PV)", "depth":17, "children":[ 
+                                                                    ], "data":{ "$area": 40 } },
+                                                                ], "data":{ "$area": 40 } },
+                                                                { "id": "4043", "name": "SVOP->", "depth":16, "children":[ 
+                                                                    { "id": "4044", "name": "SV(PV)", "depth":17, "children":[ 
+                                                                    ], "data":{ "$area": 56 } },
+                                                                ], "data":{ "$area": 56 } },
+                                                                { "id": "4045", "name": "SVOP->", "depth":16, "children":[ 
+                                                                    { "id": "4046", "name": "SV(PV)", "depth":17, "children":[ 
+                                                                    ], "data":{ "$area": 56 } },
+                                                                ], "data":{ "$area": 56 } },
+                                                                { "id": "4047", "name": "SVOP->", "depth":16, "children":[ 
+                                                                    { "id": "4048", "name": "SV(PV)", "depth":17, "children":[ 
+                                                                    ], "data":{ "$area": 40 } },
+                                                                ], "data":{ "$area": 40 } },
+                                                                { "id": "4049", "name": "SVOP->", "depth":16, "children":[ 
+                                                                    { "id": "4050", "name": "SV(PV)", "depth":17, "children":[ 
+                                                                    ], "data":{ "$area": 56 } },
+                                                                ], "data":{ "$area": 56 } },
+                                                                { "id": "4051", "name": "SVOP->", "depth":16, "children":[ 
+                                                                    { "id": "4052", "name": "SV(PV)", "depth":17, "children":[ 
+                                                                    ], "data":{ "$area": 56 } },
+                                                                ], "data":{ "$area": 56 } },
+                                                                { "id": "4053", "name": "SVOP->", "depth":16, "children":[ 
+                                                                    { "id": "4054", "name": "SV(IV)", "depth":17, "children":[ 
+                                                                    ], "data":{ "$area": 24 } },
+                                                                ], "data":{ "$area": 24 } },
+                                                                { "id": "4055", "name": "PM_GETRE->", "depth":16, "children":[ 
+                                                                    { "id": "4056", "name": "regex_size", "depth":17, "children":[ 
+                                                                    ], "data":{ "$area": 168 } },
+                                                                ], "data":{ "$area": 168 } },
+                                                                { "id": "4057", "name": "SVOP->", "depth":16, "children":[ 
+                                                                    { "id": "4058", "name": "SV(PV)", "depth":17, "children":[ 
+                                                                    ], "data":{ "$area": 61 } },
+                                                                ], "data":{ "$area": 61 } },
+                                                                { "id": "4059", "name": "SVOP->", "depth":16, "children":[ 
+                                                                    { "id": "4060", "name": "SV(PV)", "depth":17, "children":[ 
+                                                                    ], "data":{ "$area": 40 } },
+                                                                ], "data":{ "$area": 40 } },
+                                                                { "id": "4061", "name": "SVOP->", "depth":16, "children":[ 
+                                                                    { "id": "4062", "name": "SV(PV)", "depth":17, "children":[ 
+                                                                    ], "data":{ "$area": 56 } },
+                                                                ], "data":{ "$area": 56 } },
+                                                                { "id": "4063", "name": "PM_GETRE->", "depth":16, "children":[ 
+                                                                    { "id": "4064", "name": "regex_size", "depth":17, "children":[ 
+                                                                    ], "data":{ "$area": 160 } },
+                                                                ], "data":{ "$area": 160 } },
+                                                                { "id": "4065", "name": "SVOP->", "depth":16, "children":[ 
+                                                                    { "id": "4066", "name": "SV(PV)", "depth":17, "children":[ 
+                                                                    ], "data":{ "$area": 56 } },
+                                                                ], "data":{ "$area": 56 } },
+                                                                { "id": "4067", "name": "PM_GETRE->", "depth":16, "children":[ 
+                                                                    { "id": "4068", "name": "regex_size", "depth":17, "children":[ 
+                                                                    ], "data":{ "$area": 160 } },
+                                                                ], "data":{ "$area": 160 } },
+                                                                { "id": "4069", "name": "SVOP->", "depth":16, "children":[ 
+                                                                    { "id": "4070", "name": "SV(PV)", "depth":17, "children":[ 
+                                                                    ], "data":{ "$area": 56 } },
+                                                                ], "data":{ "$area": 56 } },
+                                                                { "id": "4071", "name": "PM_GETRE->", "depth":16, "children":[ 
+                                                                    { "id": "4072", "name": "regex_size", "depth":17, "children":[ 
+                                                                    ], "data":{ "$area": 160 } },
+                                                                ], "data":{ "$area": 160 } },
+                                                                { "id": "4073", "name": "SVOP->", "depth":16, "children":[ 
+                                                                    { "id": "4074", "name": "SV(PV)", "depth":17, "children":[ 
+                                                                    ], "data":{ "$area": 56 } },
+                                                                ], "data":{ "$area": 56 } },
+                                                                { "id": "4075", "name": "SVOP->", "depth":16, "children":[ 
+                                                                    { "id": "4076", "name": "SV(PVGV)", "depth":17, "children":[ 
+                                                                        { "id": "4077", "name": "GvNAME_HEK->", "depth":18, "children":[ 
+                                                                        ], "data":{ "$area": 41 } },
+                                                                    ], "data":{ "$area": 193 } },
+                                                                ], "data":{ "$area": 193 } },
+                                                                { "id": "4078", "name": "SVOP->", "depth":16, "children":[ 
+                                                                    { "id": "4079", "name": "SV(PV)", "depth":17, "children":[ 
+                                                                    ], "data":{ "$area": 56 } },
+                                                                ], "data":{ "$area": 56 } },
+                                                                { "id": "4080", "name": "SVOP->", "depth":16, "children":[ 
+                                                                    { "id": "4081", "name": "SV(PV)", "depth":17, "children":[ 
+                                                                    ], "data":{ "$area": 43 } },
+                                                                ], "data":{ "$area": 43 } },
+                                                                { "id": "4082", "name": "SVOP->", "depth":16, "children":[ 
+                                                                    { "id": "4083", "name": "SV(PV)", "depth":17, "children":[ 
+                                                                    ], "data":{ "$area": 56 } },
+                                                                ], "data":{ "$area": 56 } },
+                                                                { "id": "4084", "name": "SVOP->", "depth":16, "children":[ 
+                                                                    { "id": "4085", "name": "SV(PV)", "depth":17, "children":[ 
+                                                                    ], "data":{ "$area": 56 } },
+                                                                ], "data":{ "$area": 56 } },
+                                                            ], "data":{ "$area": 13218 } },
+                                                        ], "data":{ "$area": 13634 } },
+                                                    ], "data":{ "$area": 13634 } },
+                                                ], "data":{ "$area": 13674 } },
+                                            ], "data":{ "$area": 13674 } },
+                                        ], "data":{ "$area": 13826 } },
+                                    ], "data":{ "$area": 13826 } },
+                                    { "id": "4086", "name": "HvNAME_HEK->", "depth":9, "children":[ 
+                                    ], "data":{ "$area": 38 } },
+                                ], "data":{ "$area": 15328 } },
+                            ], "data":{ "$area": 15448 } },
+                        ], "data":{ "$area": 15448 } },
+                    ], "data":{ "$area": 15600 } },
+                ], "data":{ "$area": 15600 } },
+                { "id": "4087", "name": "hent_hek->", "depth":4, "children":[ 
+                ], "data":{ "$area": 40 } },
+                { "id": "4088", "name": "HeVAL->", "depth":4, "children":[ 
+                    { "id": "4089", "name": "SV(PVGV)", "depth":5, "children":[ 
+                        { "id": "4090", "name": "gp_hv->", "depth":6, "children":[ 
+                            { "id": "4091", "name": "SV(PVHV)", "depth":7, "children":[ 
+                                { "id": "4092", "name": "HvARRAY->", "depth":8, "children":[ 
+                                    { "id": "4093", "name": "hent_hek->", "depth":9, "children":[ 
+                                    ], "data":{ "$area": 42 } },
+                                    { "id": "4094", "name": "HeVAL->", "depth":9, "children":[ 
+                                        { "id": "4095", "name": "SV(PVGV)", "depth":10, "children":[ 
+                                            { "id": "4096", "name": "gp_hv->", "depth":11, "children":[ 
+                                                { "id": "4097", "name": "SV(PVHV)", "depth":12, "children":[ 
+                                                    { "id": "4098", "name": "HvARRAY->", "depth":13, "children":[ 
+                                                        { "id": "4099", "name": "HvNAME_HEK->", "depth":14, "children":[ 
+                                                        ], "data":{ "$area": 46 } },
+                                                    ], "data":{ "$area": 86 } },
+                                                ], "data":{ "$area": 206 } },
+                                            ], "data":{ "$area": 206 } },
+                                        ], "data":{ "$area": 358 } },
+                                    ], "data":{ "$area": 358 } },
+                                    { "id": "4100", "name": "HvNAME_HEK->", "depth":9, "children":[ 
+                                    ], "data":{ "$area": 38 } },
+                                ], "data":{ "$area": 502 } },
+                            ], "data":{ "$area": 622 } },
+                        ], "data":{ "$area": 622 } },
+                    ], "data":{ "$area": 774 } },
+                ], "data":{ "$area": 774 } },
+                { "id": "4101", "name": "hent_hek->", "depth":4, "children":[ 
+                ], "data":{ "$area": 42 } },
+                { "id": "4102", "name": "HeVAL->", "depth":4, "children":[ 
+                    { "id": "4103", "name": "SV(PVGV)", "depth":5, "children":[ 
+                        { "id": "4104", "name": "gp_sv->", "depth":6, "children":[ 
+                            { "id": "4105", "name": "SV(PV)", "depth":7, "children":[ 
+                            ], "data":{ "$area": 56 } },
+                        ], "data":{ "$area": 56 } },
+                    ], "data":{ "$area": 208 } },
+                ], "data":{ "$area": 208 } },
+                { "id": "4106", "name": "hent_hek->", "depth":4, "children":[ 
+                ], "data":{ "$area": 48 } },
+                { "id": "4107", "name": "HeVAL->", "depth":4, "children":[ 
+                    { "id": "4108", "name": "SV(PVGV)", "depth":5, "children":[ 
+                        { "id": "4109", "name": "gp_sv->", "depth":6, "children":[ 
+                            { "id": "4110", "name": "SV(PV)", "depth":7, "children":[ 
+                            ], "data":{ "$area": 56 } },
+                        ], "data":{ "$area": 56 } },
+                    ], "data":{ "$area": 208 } },
+                ], "data":{ "$area": 208 } },
+                { "id": "4111", "name": "hent_hek->", "depth":4, "children":[ 
+                ], "data":{ "$area": 39 } },
+                { "id": "4112", "name": "HeVAL->", "depth":4, "children":[ 
+                    { "id": "4113", "name": "SV(PVGV)", "depth":5, "children":[ 
+                        { "id": "4114", "name": "gp_sv->", "depth":6, "children":[ 
+                            { "id": "4115", "name": "SV(NULL)", "depth":7, "children":[ 
+                            ], "data":{ "$area": 24 } },
+                        ], "data":{ "$area": 24 } },
+                    ], "data":{ "$area": 176 } },
+                ], "data":{ "$area": 176 } },
+                { "id": "4116", "name": "hent_hek->", "depth":4, "children":[ 
+                ], "data":{ "$area": 38 } },
+                { "id": "4117", "name": "HeVAL->", "depth":4, "children":[ 
+                    { "id": "4118", "name": "SV(PVGV)", "depth":5, "children":[ 
+                        { "id": "4119", "name": "gp_av->", "depth":6, "children":[ 
+                            { "id": "4120", "name": "SV(PVAV)", "depth":7, "children":[ 
+                            ], "data":{ "$area": 64 } },
+                        ], "data":{ "$area": 64 } },
+                    ], "data":{ "$area": 216 } },
+                ], "data":{ "$area": 216 } },
+                { "id": "4121", "name": "hent_hek->", "depth":4, "children":[ 
+                ], "data":{ "$area": 38 } },
+                { "id": "4122", "name": "HeVAL->", "depth":4, "children":[ 
+                    { "id": "4123", "name": "SV(PVGV)", "depth":5, "children":[ 
+                        { "id": "4124", "name": "gp_sv->", "depth":6, "children":[ 
+                            { "id": "4125", "name": "SV(PV)", "depth":7, "children":[ 
+                            ], "data":{ "$area": 56 } },
+                        ], "data":{ "$area": 56 } },
+                    ], "data":{ "$area": 208 } },
+                ], "data":{ "$area": 208 } },
+                { "id": "4126", "name": "hent_hek->", "depth":4, "children":[ 
+                ], "data":{ "$area": 42 } },
+                { "id": "4127", "name": "HeVAL->", "depth":4, "children":[ 
+                    { "id": "4128", "name": "SV(PVGV)", "depth":5, "children":[ 
+                        { "id": "4129", "name": "gp_hv->", "depth":6, "children":[ 
+                            { "id": "4130", "name": "SV(PVHV)", "depth":7, "children":[ 
+                                { "id": "4131", "name": "HvARRAY->", "depth":8, "children":[ 
+                                    { "id": "4132", "name": "hent_hek->", "depth":9, "children":[ 
+                                    ], "data":{ "$area": 40 } },
+                                    { "id": "4133", "name": "HeVAL->", "depth":9, "children":[ 
+                                        { "id": "4134", "name": "SV(PVGV)", "depth":10, "children":[ 
+                                            { "id": "4135", "name": "gp_hv->", "depth":11, "children":[ 
+                                                { "id": "4136", "name": "SV(PVHV)", "depth":12, "children":[ 
+                                                    { "id": "4137", "name": "HvARRAY->", "depth":13, "children":[ 
+                                                        { "id": "4138", "name": "hent_hek->", "depth":14, "children":[ 
+                                                        ], "data":{ "$area": 41 } },
+                                                        { "id": "4139", "name": "HeVAL->", "depth":14, "children":[ 
+                                                            { "id": "4140", "name": "SV(PVGV)", "depth":15, "children":[ 
+                                                            ], "data":{ "$area": 152 } },
+                                                        ], "data":{ "$area": 152 } },
+                                                        { "id": "4141", "name": "HvNAME_HEK->", "depth":14, "children":[ 
+                                                        ], "data":{ "$area": 46 } },
+                                                    ], "data":{ "$area": 303 } },
+                                                ], "data":{ "$area": 423 } },
+                                            ], "data":{ "$area": 423 } },
+                                        ], "data":{ "$area": 575 } },
+                                    ], "data":{ "$area": 575 } },
+                                    { "id": "4142", "name": "HvNAME_HEK->", "depth":9, "children":[ 
+                                    ], "data":{ "$area": 40 } },
+                                ], "data":{ "$area": 719 } },
+                            ], "data":{ "$area": 839 } },
+                        ], "data":{ "$area": 839 } },
+                    ], "data":{ "$area": 991 } },
+                ], "data":{ "$area": 991 } },
+                { "id": "4143", "name": "hent_hek->", "depth":4, "children":[ 
+                ], "data":{ "$area": 40 } },
+                { "id": "4144", "name": "HeVAL->", "depth":4, "children":[ 
+                    { "id": "4145", "name": "SV(PVGV)", "depth":5, "children":[ 
+                        { "id": "4146", "name": "gp_hv->", "depth":6, "children":[ 
+                            { "id": "4147", "name": "SV(PVHV)", "depth":7, "children":[ 
+                                { "id": "4148", "name": "HvARRAY->", "depth":8, "children":[ 
+                                    { "id": "4149", "name": "HeVAL->", "depth":9, "children":[ 
+                                        { "id": "4150", "name": "SV(PVGV)", "depth":10, "children":[ 
+                                            { "id": "4151", "name": "UNKNOWN(0,0x0)", "depth":11, "children":[ 
+                                                { "id": "4152", "name": "MAGIC(<)", "depth":12, "children":[ 
+                                                ], "data":{ "$area": 40 } },
+                                            ], "data":{ "$area": 40 } },
+                                        ], "data":{ "$area": 192 } },
+                                    ], "data":{ "$area": 192 } },
+                                    { "id": "4153", "name": "HeVAL->", "depth":9, "children":[ 
+                                        { "id": "4154", "name": "SV(PVGV)", "depth":10, "children":[ 
+                                            { "id": "4155", "name": "gp_sv->", "depth":11, "children":[ 
+                                                { "id": "4156", "name": "SV(PV)", "depth":12, "children":[ 
+                                                ], "data":{ "$area": 56 } },
+                                            ], "data":{ "$area": 56 } },
+                                        ], "data":{ "$area": 208 } },
+                                    ], "data":{ "$area": 208 } },
+                                    { "id": "4157", "name": "HeVAL->", "depth":9, "children":[ 
+                                        { "id": "4158", "name": "SV(PVGV)", "depth":10, "children":[ 
+                                            { "id": "4159", "name": "UNKNOWN(0,0x0)", "depth":11, "children":[ 
+                                                { "id": "4160", "name": "MAGIC(<)", "depth":12, "children":[ 
+                                                    { "id": "4161", "name": "mg_obj->", "depth":13, "children":[ 
+                                                        { "id": "4162", "name": "SV(PVCV)", "depth":14, "children":[ 
+                                                            { "id": "4163", "name": "CvPADLIST->", "depth":15, "children":[ 
+                                                                { "id": "4164", "name": "SV(PVAV)", "depth":16, "children":[ 
+                                                                ], "data":{ "$area": 80 } },
+                                                            ], "data":{ "$area": 80 } },
+                                                            { "id": "4165", "name": "CvOUTSIDE->", "depth":15, "children":[ 
+                                                                { "id": "4166", "name": "SV(PVCV)", "depth":16, "children":[ 
+                                                                    { "id": "4167", "name": "CvPADLIST->", "depth":17, "children":[ 
+                                                                        { "id": "4168", "name": "SV(PVAV)", "depth":18, "children":[ 
+                                                                        ], "data":{ "$area": 80 } },
+                                                                    ], "data":{ "$area": 80 } },
+                                                                ], "data":{ "$area": 208 } },
+                                                            ], "data":{ "$area": 208 } },
+                                                            { "id": "4169", "name": "CvSTART->", "depth":15, "children":[ 
+                                                                { "id": "4170", "name": "SVOP->", "depth":16, "children":[ 
+                                                                    { "id": "4171", "name": "SV(PV)", "depth":17, "children":[ 
+                                                                    ], "data":{ "$area": 72 } },
+                                                                ], "data":{ "$area": 72 } },
+                                                                { "id": "4172", "name": "SVOP->", "depth":16, "children":[ 
+                                                                    { "id": "4173", "name": "SV(PV)", "depth":17, "children":[ 
+                                                                    ], "data":{ "$area": 42 } },
+                                                                ], "data":{ "$area": 42 } },
+                                                                { "id": "4174", "name": "SVOP->", "depth":16, "children":[ 
+                                                                    { "id": "4175", "name": "SV(PV)", "depth":17, "children":[ 
+                                                                    ], "data":{ "$area": 56 } },
+                                                                ], "data":{ "$area": 56 } },
+                                                                { "id": "4176", "name": "SVOP->", "depth":16, "children":[ 
+                                                                    { "id": "4177", "name": "SV(PV)", "depth":17, "children":[ 
+                                                                    ], "data":{ "$area": 72 } },
+                                                                ], "data":{ "$area": 72 } },
+                                                                { "id": "4178", "name": "SVOP->", "depth":16, "children":[ 
+                                                                    { "id": "4179", "name": "SV(PV)", "depth":17, "children":[ 
+                                                                    ], "data":{ "$area": 42 } },
+                                                                ], "data":{ "$area": 42 } },
+                                                                { "id": "4180", "name": "SVOP->", "depth":16, "children":[ 
+                                                                    { "id": "4181", "name": "SV(PV)", "depth":17, "children":[ 
+                                                                    ], "data":{ "$area": 56 } },
+                                                                ], "data":{ "$area": 56 } },
+                                                                { "id": "4182", "name": "SVOP->", "depth":16, "children":[ 
+                                                                    { "id": "4183", "name": "SV(PV)", "depth":17, "children":[ 
+                                                                    ], "data":{ "$area": 56 } },
+                                                                ], "data":{ "$area": 56 } },
+                                                                { "id": "4184", "name": "SVOP->", "depth":16, "children":[ 
+                                                                    { "id": "4185", "name": "SV(PV)", "depth":17, "children":[ 
+                                                                    ], "data":{ "$area": 56 } },
+                                                                ], "data":{ "$area": 56 } },
+                                                                { "id": "4186", "name": "SVOP->", "depth":16, "children":[ 
+                                                                    { "id": "4187", "name": "SV(PV)", "depth":17, "children":[ 
+                                                                    ], "data":{ "$area": 56 } },
+                                                                ], "data":{ "$area": 56 } },
+                                                                { "id": "4188", "name": "SVOP->", "depth":16, "children":[ 
+                                                                    { "id": "4189", "name": "SV(PV)", "depth":17, "children":[ 
+                                                                    ], "data":{ "$area": 56 } },
+                                                                ], "data":{ "$area": 56 } },
+                                                                { "id": "4190", "name": "SVOP->", "depth":16, "children":[ 
+                                                                    { "id": "4191", "name": "SV(PV)", "depth":17, "children":[ 
+                                                                    ], "data":{ "$area": 56 } },
+                                                                ], "data":{ "$area": 56 } },
+                                                                { "id": "4192", "name": "SVOP->", "depth":16, "children":[ 
+                                                                    { "id": "4193", "name": "SV(PV)", "depth":17, "children":[ 
+                                                                    ], "data":{ "$area": 43 } },
+                                                                ], "data":{ "$area": 43 } },
+                                                                { "id": "4194", "name": "PM_GETRE->", "depth":16, "children":[ 
+                                                                    { "id": "4195", "name": "regex_size", "depth":17, "children":[ 
+                                                                    ], "data":{ "$area": 160 } },
+                                                                ], "data":{ "$area": 160 } },
+                                                                { "id": "4196", "name": "SVOP->", "depth":16, "children":[ 
+                                                                    { "id": "4197", "name": "SV(PV)", "depth":17, "children":[ 
+                                                                    ], "data":{ "$area": 89 } },
+                                                                ], "data":{ "$area": 89 } },
+                                                                { "id": "4198", "name": "SVOP->", "depth":16, "children":[ 
+                                                                    { "id": "4199", "name": "SV(PV)", "depth":17, "children":[ 
+                                                                    ], "data":{ "$area": 42 } },
+                                                                ], "data":{ "$area": 42 } },
+                                                                { "id": "4200", "name": "SVOP->", "depth":16, "children":[ 
+                                                                    { "id": "4201", "name": "SV(PV)", "depth":17, "children":[ 
+                                                                    ], "data":{ "$area": 56 } },
+                                                                ], "data":{ "$area": 56 } },
+                                                                { "id": "4202", "name": "SVOP->", "depth":16, "children":[ 
+                                                                    { "id": "4203", "name": "SV(PV)", "depth":17, "children":[ 
+                                                                    ], "data":{ "$area": 56 } },
+                                                                ], "data":{ "$area": 56 } },
+                                                                { "id": "4204", "name": "SVOP->", "depth":16, "children":[ 
+                                                                    { "id": "4205", "name": "SV(PV)", "depth":17, "children":[ 
+                                                                    ], "data":{ "$area": 88 } },
+                                                                ], "data":{ "$area": 88 } },
+                                                                { "id": "4206", "name": "SVOP->", "depth":16, "children":[ 
+                                                                    { "id": "4207", "name": "SV(IV)", "depth":17, "children":[ 
+                                                                    ], "data":{ "$area": 24 } },
+                                                                ], "data":{ "$area": 24 } },
+                                                                { "id": "4208", "name": "SVOP->", "depth":16, "children":[ 
+                                                                    { "id": "4209", "name": "SV(PV)", "depth":17, "children":[ 
+                                                                    ], "data":{ "$area": 104 } },
+                                                                ], "data":{ "$area": 104 } },
+                                                                { "id": "4210", "name": "SVOP->", "depth":16, "children":[ 
+                                                                    { "id": "4211", "name": "SV(PV)", "depth":17, "children":[ 
+                                                                    ], "data":{ "$area": 56 } },
+                                                                ], "data":{ "$area": 56 } },
+                                                                { "id": "4212", "name": "PM_GETRE->", "depth":16, "children":[ 
+                                                                    { "id": "4213", "name": "regex_size", "depth":17, "children":[ 
+                                                                    ], "data":{ "$area": 160 } },
+                                                                ], "data":{ "$area": 160 } },
+                                                                { "id": "4214", "name": "PM_GETRE->", "depth":16, "children":[ 
+                                                                    { "id": "4215", "name": "regex_size", "depth":17, "children":[ 
+                                                                    ], "data":{ "$area": 160 } },
+                                                                ], "data":{ "$area": 160 } },
+                                                                { "id": "4216", "name": "PM_GETRE->", "depth":16, "children":[ 
+                                                                    { "id": "4217", "name": "regex_size", "depth":17, "children":[ 
+                                                                    ], "data":{ "$area": 176 } },
+                                                                ], "data":{ "$area": 176 } },
+                                                            ], "data":{ "$area": 12554 } },
+                                                        ], "data":{ "$area": 12970 } },
+                                                    ], "data":{ "$area": 12970 } },
+                                                ], "data":{ "$area": 13010 } },
+                                            ], "data":{ "$area": 13010 } },
+                                        ], "data":{ "$area": 13162 } },
+                                    ], "data":{ "$area": 13162 } },
+                                ], "data":{ "$area": 13722 } },
+                            ], "data":{ "$area": 13842 } },
+                        ], "data":{ "$area": 13842 } },
+                    ], "data":{ "$area": 13994 } },
+                ], "data":{ "$area": 13994 } },
+                { "id": "4218", "name": "hent_hek->", "depth":4, "children":[ 
+                ], "data":{ "$area": 44 } },
+                { "id": "4219", "name": "HeVAL->", "depth":4, "children":[ 
+                    { "id": "4220", "name": "SV(PVGV)", "depth":5, "children":[ 
+                        { "id": "4221", "name": "gp_hv->", "depth":6, "children":[ 
+                            { "id": "4222", "name": "SV(PVHV)", "depth":7, "children":[ 
+                                { "id": "4223", "name": "HvARRAY->", "depth":8, "children":[ 
+                                    { "id": "4224", "name": "HeVAL->", "depth":9, "children":[ 
+                                        { "id": "4225", "name": "SV(PVGV)", "depth":10, "children":[ 
+                                            { "id": "4226", "name": "UNKNOWN(0,0x0)", "depth":11, "children":[ 
+                                                { "id": "4227", "name": "MAGIC(<)", "depth":12, "children":[ 
+                                                    { "id": "4228", "name": "mg_obj->", "depth":13, "children":[ 
+                                                        { "id": "4229", "name": "SV(PVCV)", "depth":14, "children":[ 
+                                                            { "id": "4230", "name": "CvPADLIST->", "depth":15, "children":[ 
+                                                                { "id": "4231", "name": "SV(PVAV)", "depth":16, "children":[ 
+                                                                ], "data":{ "$area": 80 } },
+                                                            ], "data":{ "$area": 80 } },
+                                                            { "id": "4232", "name": "CvOUTSIDE->", "depth":15, "children":[ 
+                                                                { "id": "4233", "name": "SV(PVCV)", "depth":16, "children":[ 
+                                                                    { "id": "4234", "name": "CvPADLIST->", "depth":17, "children":[ 
+                                                                        { "id": "4235", "name": "SV(PVAV)", "depth":18, "children":[ 
+                                                                        ], "data":{ "$area": 80 } },
+                                                                    ], "data":{ "$area": 80 } },
+                                                                ], "data":{ "$area": 208 } },
+                                                            ], "data":{ "$area": 208 } },
+                                                            { "id": "4236", "name": "CvSTART->", "depth":15, "children":[ 
+                                                                { "id": "4237", "name": "cop_filegv->", "depth":16, "children":[ 
+                                                                    { "id": "4238", "name": "SV(PVGV)", "depth":17, "children":[ 
+                                                                        { "id": "4239", "name": "GvNAME_HEK->", "depth":18, "children":[ 
+                                                                        ], "data":{ "$area": 104 } },
+                                                                        { "id": "4240", "name": "gp_sv->", "depth":18, "children":[ 
+                                                                            { "id": "4241", "name": "SV(PV)", "depth":19, "children":[ 
+                                                                            ], "data":{ "$area": 120 } },
+                                                                        ], "data":{ "$area": 120 } },
+                                                                    ], "data":{ "$area": 376 } },
+                                                                ], "data":{ "$area": 376 } },
+                                                                { "id": "4242", "name": "SVOP->", "depth":16, "children":[ 
+                                                                    { "id": "4243", "name": "SV(PV)", "depth":17, "children":[ 
+                                                                    ], "data":{ "$area": 56 } },
+                                                                ], "data":{ "$area": 56 } },
+                                                            ], "data":{ "$area": 1160 } },
+                                                        ], "data":{ "$area": 1576 } },
+                                                    ], "data":{ "$area": 1576 } },
+                                                ], "data":{ "$area": 1616 } },
+                                            ], "data":{ "$area": 1616 } },
+                                        ], "data":{ "$area": 1768 } },
+                                    ], "data":{ "$area": 1768 } },
+                                    { "id": "4244", "name": "HeVAL->", "depth":9, "children":[ 
+                                        { "id": "4245", "name": "SV(PVGV)", "depth":10, "children":[ 
+                                            { "id": "4246", "name": "gp_sv->", "depth":11, "children":[ 
+                                                { "id": "4247", "name": "SV(PV)", "depth":12, "children":[ 
+                                                ], "data":{ "$area": 56 } },
+                                            ], "data":{ "$area": 56 } },
+                                        ], "data":{ "$area": 208 } },
+                                    ], "data":{ "$area": 208 } },
+                                    { "id": "4248", "name": "hent_hek->", "depth":9, "children":[ 
+                                    ], "data":{ "$area": 38 } },
+                                    { "id": "4249", "name": "HeVAL->", "depth":9, "children":[ 
+                                        { "id": "4250", "name": "SV(PVGV)", "depth":10, "children":[ 
+                                            { "id": "4251", "name": "UNKNOWN(0,0x0)", "depth":11, "children":[ 
+                                                { "id": "4252", "name": "MAGIC(<)", "depth":12, "children":[ 
+                                                    { "id": "4253", "name": "mg_obj->", "depth":13, "children":[ 
+                                                        { "id": "4254", "name": "SV(PVCV)", "depth":14, "children":[ 
+                                                            { "id": "4255", "name": "CvPADLIST->", "depth":15, "children":[ 
+                                                                { "id": "4256", "name": "SV(PVAV)", "depth":16, "children":[ 
+                                                                ], "data":{ "$area": 80 } },
+                                                            ], "data":{ "$area": 80 } },
+                                                            { "id": "4257", "name": "CvSTART->", "depth":15, "children":[ 
+                                                                { "id": "4258", "name": "SVOP->", "depth":16, "children":[ 
+                                                                    { "id": "4259", "name": "SV(PV)", "depth":17, "children":[ 
+                                                                    ], "data":{ "$area": 42 } },
+                                                                ], "data":{ "$area": 42 } },
+                                                                { "id": "4260", "name": "SVOP->", "depth":16, "children":[ 
+                                                                    { "id": "4261", "name": "SV(PV)", "depth":17, "children":[ 
+                                                                    ], "data":{ "$area": 53 } },
+                                                                ], "data":{ "$area": 53 } },
+                                                                { "id": "4262", "name": "SVOP->", "depth":16, "children":[ 
+                                                                    { "id": "4263", "name": "SV(PV)", "depth":17, "children":[ 
+                                                                    ], "data":{ "$area": 53 } },
+                                                                ], "data":{ "$area": 53 } },
+                                                                { "id": "4264", "name": "SVOP->", "depth":16, "children":[ 
+                                                                    { "id": "4265", "name": "SV(PV)", "depth":17, "children":[ 
+                                                                    ], "data":{ "$area": 56 } },
+                                                                ], "data":{ "$area": 56 } },
+                                                                { "id": "4266", "name": "SVOP->", "depth":16, "children":[ 
+                                                                    { "id": "4267", "name": "SV(PV)", "depth":17, "children":[ 
+                                                                    ], "data":{ "$area": 42 } },
+                                                                ], "data":{ "$area": 42 } },
+                                                                { "id": "4268", "name": "SVOP->", "depth":16, "children":[ 
+                                                                    { "id": "4269", "name": "SV(PV)", "depth":17, "children":[ 
+                                                                    ], "data":{ "$area": 43 } },
+                                                                ], "data":{ "$area": 43 } },
+                                                                { "id": "4270", "name": "SVOP->", "depth":16, "children":[ 
+                                                                    { "id": "4271", "name": "SV(PV)", "depth":17, "children":[ 
+                                                                    ], "data":{ "$area": 81 } },
+                                                                ], "data":{ "$area": 81 } },
+                                                                { "id": "4272", "name": "SVOP->", "depth":16, "children":[ 
+                                                                    { "id": "4273", "name": "SV(PV)", "depth":17, "children":[ 
+                                                                    ], "data":{ "$area": 56 } },
+                                                                ], "data":{ "$area": 56 } },
+                                                                { "id": "4274", "name": "SVOP->", "depth":16, "children":[ 
+                                                                    { "id": "4275", "name": "SV(PV)", "depth":17, "children":[ 
+                                                                    ], "data":{ "$area": 43 } },
+                                                                ], "data":{ "$area": 43 } },
+                                                                { "id": "4276", "name": "SVOP->", "depth":16, "children":[ 
+                                                                    { "id": "4277", "name": "SV(PV)", "depth":17, "children":[ 
+                                                                    ], "data":{ "$area": 54 } },
+                                                                ], "data":{ "$area": 54 } },
+                                                                { "id": "4278", "name": "SVOP->", "depth":16, "children":[ 
+                                                                    { "id": "4279", "name": "SV(PV)", "depth":17, "children":[ 
+                                                                    ], "data":{ "$area": 53 } },
+                                                                ], "data":{ "$area": 53 } },
+                                                                { "id": "4280", "name": "SVOP->", "depth":16, "children":[ 
+                                                                    { "id": "4281", "name": "SV(PV)", "depth":17, "children":[ 
+                                                                    ], "data":{ "$area": 56 } },
+                                                                ], "data":{ "$area": 56 } },
+                                                                { "id": "4282", "name": "SVOP->", "depth":16, "children":[ 
+                                                                    { "id": "4283", "name": "SV(IV)", "depth":17, "children":[ 
+                                                                    ], "data":{ "$area": 24 } },
+                                                                ], "data":{ "$area": 24 } },
+                                                                { "id": "4284", "name": "op_pv", "depth":16, "children":[ 
+                                                                ], "data":{ "$area": 5 } },
+                                                                { "id": "4285", "name": "SVOP->", "depth":16, "children":[ 
+                                                                    { "id": "4286", "name": "SV(IV)", "depth":17, "children":[ 
+                                                                    ], "data":{ "$area": 24 } },
+                                                                ], "data":{ "$area": 24 } },
+                                                                { "id": "4287", "name": "PM_GETRE->", "depth":16, "children":[ 
+                                                                    { "id": "4288", "name": "regex_size", "depth":17, "children":[ 
+                                                                    ], "data":{ "$area": 160 } },
+                                                                ], "data":{ "$area": 160 } },
+                                                                { "id": "4289", "name": "SVOP->", "depth":16, "children":[ 
+                                                                    { "id": "4290", "name": "SV(PV)", "depth":17, "children":[ 
+                                                                    ], "data":{ "$area": 42 } },
+                                                                ], "data":{ "$area": 42 } },
+                                                                { "id": "4291", "name": "SVOP->", "depth":16, "children":[ 
+                                                                    { "id": "4292", "name": "SV(PV)", "depth":17, "children":[ 
+                                                                    ], "data":{ "$area": 46 } },
+                                                                ], "data":{ "$area": 46 } },
+                                                                { "id": "4293", "name": "SVOP->", "depth":16, "children":[ 
+                                                                    { "id": "4294", "name": "SV(PV)", "depth":17, "children":[ 
+                                                                    ], "data":{ "$area": 42 } },
+                                                                ], "data":{ "$area": 42 } },
+                                                                { "id": "4295", "name": "SVOP->", "depth":16, "children":[ 
+                                                                    { "id": "4296", "name": "SV(PV)", "depth":17, "children":[ 
+                                                                    ], "data":{ "$area": 43 } },
+                                                                ], "data":{ "$area": 43 } },
+                                                                { "id": "4297", "name": "PM_GETRE->", "depth":16, "children":[ 
+                                                                    { "id": "4298", "name": "regex_size", "depth":17, "children":[ 
+                                                                    ], "data":{ "$area": 176 } },
+                                                                ], "data":{ "$area": 176 } },
+                                                                { "id": "4299", "name": "SVOP->", "depth":16, "children":[ 
+                                                                    { "id": "4300", "name": "SV(PV)", "depth":17, "children":[ 
+                                                                    ], "data":{ "$area": 44 } },
+                                                                ], "data":{ "$area": 44 } },
+                                                                { "id": "4301", "name": "SVOP->", "depth":16, "children":[ 
+                                                                    { "id": "4302", "name": "SV(PV)", "depth":17, "children":[ 
+                                                                    ], "data":{ "$area": 48 } },
+                                                                ], "data":{ "$area": 48 } },
+                                                                { "id": "4303", "name": "SVOP->", "depth":16, "children":[ 
+                                                                    { "id": "4304", "name": "SV(PV)", "depth":17, "children":[ 
+                                                                    ], "data":{ "$area": 42 } },
+                                                                ], "data":{ "$area": 42 } },
+                                                                { "id": "4305", "name": "SVOP->", "depth":16, "children":[ 
+                                                                    { "id": "4306", "name": "SV(PV)", "depth":17, "children":[ 
+                                                                    ], "data":{ "$area": 47 } },
+                                                                ], "data":{ "$area": 47 } },
+                                                                { "id": "4307", "name": "PM_GETRE->", "depth":16, "children":[ 
+                                                                    { "id": "4308", "name": "regex_size", "depth":17, "children":[ 
+                                                                    ], "data":{ "$area": 160 } },
+                                                                ], "data":{ "$area": 160 } },
+                                                                { "id": "4309", "name": "SVOP->", "depth":16, "children":[ 
+                                                                    { "id": "4310", "name": "SV(PV)", "depth":17, "children":[ 
+                                                                    ], "data":{ "$area": 56 } },
+                                                                ], "data":{ "$area": 56 } },
+                                                                { "id": "4311", "name": "SVOP->", "depth":16, "children":[ 
+                                                                    { "id": "4312", "name": "SV(PV)", "depth":17, "children":[ 
+                                                                    ], "data":{ "$area": 56 } },
+                                                                ], "data":{ "$area": 56 } },
+                                                                { "id": "4313", "name": "SVOP->", "depth":16, "children":[ 
+                                                                    { "id": "4314", "name": "SV(IV)", "depth":17, "children":[ 
+                                                                    ], "data":{ "$area": 24 } },
+                                                                ], "data":{ "$area": 24 } },
+                                                                { "id": "4315", "name": "SVOP->", "depth":16, "children":[ 
+                                                                    { "id": "4316", "name": "SV(IV)", "depth":17, "children":[ 
+                                                                    ], "data":{ "$area": 24 } },
+                                                                ], "data":{ "$area": 24 } },
+                                                                { "id": "4317", "name": "PM_GETRE->", "depth":16, "children":[ 
+                                                                    { "id": "4318", "name": "regex_size", "depth":17, "children":[ 
+                                                                    ], "data":{ "$area": 160 } },
+                                                                ], "data":{ "$area": 160 } },
+                                                                { "id": "4319", "name": "SVOP->", "depth":16, "children":[ 
+                                                                    { "id": "4320", "name": "SV(PV)", "depth":17, "children":[ 
+                                                                    ], "data":{ "$area": 56 } },
+                                                                ], "data":{ "$area": 56 } },
+                                                            ], "data":{ "$area": 20055 } },
+                                                        ], "data":{ "$area": 20263 } },
+                                                    ], "data":{ "$area": 20263 } },
+                                                ], "data":{ "$area": 20303 } },
+                                            ], "data":{ "$area": 20303 } },
+                                        ], "data":{ "$area": 20455 } },
+                                    ], "data":{ "$area": 20455 } },
+                                    { "id": "4321", "name": "HvNAME_HEK->", "depth":9, "children":[ 
+                                    ], "data":{ "$area": 42 } },
+                                ], "data":{ "$area": 22671 } },
+                            ], "data":{ "$area": 22791 } },
+                        ], "data":{ "$area": 22791 } },
+                    ], "data":{ "$area": 22943 } },
+                ], "data":{ "$area": 22943 } },
+                { "id": "4322", "name": "hent_hek->", "depth":4, "children":[ 
+                ], "data":{ "$area": 44 } },
+                { "id": "4323", "name": "HeVAL->", "depth":4, "children":[ 
+                    { "id": "4324", "name": "SV(PVGV)", "depth":5, "children":[ 
+                        { "id": "4325", "name": "gp_sv->", "depth":6, "children":[ 
+                            { "id": "4326", "name": "SV(PV)", "depth":7, "children":[ 
+                            ], "data":{ "$area": 56 } },
+                        ], "data":{ "$area": 56 } },
+                    ], "data":{ "$area": 208 } },
+                ], "data":{ "$area": 208 } },
+                { "id": "4327", "name": "hent_hek->", "depth":4, "children":[ 
+                ], "data":{ "$area": 126 } },
+                { "id": "4328", "name": "HeVAL->", "depth":4, "children":[ 
+                    { "id": "4329", "name": "SV(PVGV)", "depth":5, "children":[ 
+                        { "id": "4330", "name": "gp_sv->", "depth":6, "children":[ 
+                            { "id": "4331", "name": "SV(PV)", "depth":7, "children":[ 
+                            ], "data":{ "$area": 136 } },
+                        ], "data":{ "$area": 136 } },
+                    ], "data":{ "$area": 288 } },
+                ], "data":{ "$area": 288 } },
+                { "id": "4332", "name": "hent_hek->", "depth":4, "children":[ 
+                ], "data":{ "$area": 40 } },
+                { "id": "4333", "name": "HeVAL->", "depth":4, "children":[ 
+                    { "id": "4334", "name": "SV(PVGV)", "depth":5, "children":[ 
+                    ], "data":{ "$area": 152 } },
+                ], "data":{ "$area": 152 } },
+                { "id": "4335", "name": "hent_hek->", "depth":4, "children":[ 
+                ], "data":{ "$area": 39 } },
+                { "id": "4336", "name": "HeVAL->", "depth":4, "children":[ 
+                    { "id": "4337", "name": "SV(PVGV)", "depth":5, "children":[ 
+                        { "id": "4338", "name": "gp_hv->", "depth":6, "children":[ 
+                            { "id": "4339", "name": "SV(PVHV)", "depth":7, "children":[ 
+                                { "id": "4340", "name": "HvARRAY->", "depth":8, "children":[ 
+                                    { "id": "4341", "name": "hent_hek->", "depth":9, "children":[ 
+                                    ], "data":{ "$area": 44 } },
+                                    { "id": "4342", "name": "HeVAL->", "depth":9, "children":[ 
+                                        { "id": "4343", "name": "SV(PVGV)", "depth":10, "children":[ 
+                                            { "id": "4344", "name": "gp_hv->", "depth":11, "children":[ 
+                                                { "id": "4345", "name": "SV(PVHV)", "depth":12, "children":[ 
+                                                    { "id": "4346", "name": "HvARRAY->", "depth":13, "children":[ 
+                                                        { "id": "4347", "name": "HvNAME_HEK->", "depth":14, "children":[ 
+                                                        ], "data":{ "$area": 47 } },
+                                                    ], "data":{ "$area": 207 } },
+                                                ], "data":{ "$area": 327 } },
+                                            ], "data":{ "$area": 327 } },
+                                        ], "data":{ "$area": 479 } },
+                                    ], "data":{ "$area": 479 } },
+                                    { "id": "4348", "name": "hent_hek->", "depth":9, "children":[ 
+                                    ], "data":{ "$area": 43 } },
+                                    { "id": "4349", "name": "HeVAL->", "depth":9, "children":[ 
+                                        { "id": "4350", "name": "SV(PVGV)", "depth":10, "children":[ 
+                                            { "id": "4351", "name": "gp_hv->", "depth":11, "children":[ 
+                                                { "id": "4352", "name": "SV(PVHV)", "depth":12, "children":[ 
+                                                    { "id": "4353", "name": "HvARRAY->", "depth":13, "children":[ 
+                                                        { "id": "4354", "name": "HvNAME_HEK->", "depth":14, "children":[ 
+                                                        ], "data":{ "$area": 46 } },
+                                                    ], "data":{ "$area": 110 } },
+                                                ], "data":{ "$area": 230 } },
+                                            ], "data":{ "$area": 230 } },
+                                        ], "data":{ "$area": 382 } },
+                                    ], "data":{ "$area": 382 } },
+                                    { "id": "4355", "name": "HvNAME_HEK->", "depth":9, "children":[ 
+                                    ], "data":{ "$area": 37 } },
+                                ], "data":{ "$area": 1073 } },
+                            ], "data":{ "$area": 1193 } },
+                        ], "data":{ "$area": 1193 } },
+                    ], "data":{ "$area": 1345 } },
+                ], "data":{ "$area": 1345 } },
+                { "id": "4356", "name": "hent_hek->", "depth":4, "children":[ 
+                ], "data":{ "$area": 41 } },
+                { "id": "4357", "name": "HeVAL->", "depth":4, "children":[ 
+                    { "id": "4358", "name": "SV(PVGV)", "depth":5, "children":[ 
+                        { "id": "4359", "name": "gp_hv->", "depth":6, "children":[ 
+                            { "id": "4360", "name": "SV(PVHV)", "depth":7, "children":[ 
+                                { "id": "4361", "name": "HvARRAY->", "depth":8, "children":[ 
+                                    { "id": "4362", "name": "HvNAME_HEK->", "depth":9, "children":[ 
+                                    ], "data":{ "$area": 39 } },
+                                ], "data":{ "$area": 127 } },
+                            ], "data":{ "$area": 247 } },
+                        ], "data":{ "$area": 247 } },
+                    ], "data":{ "$area": 399 } },
+                ], "data":{ "$area": 399 } },
+                { "id": "4363", "name": "hent_hek->", "depth":4, "children":[ 
+                ], "data":{ "$area": 42 } },
+                { "id": "4364", "name": "HeVAL->", "depth":4, "children":[ 
+                    { "id": "4365", "name": "SV(PVGV)", "depth":5, "children":[ 
+                        { "id": "4366", "name": "gp_hv->", "depth":6, "children":[ 
+                            { "id": "4367", "name": "SV(PVHV)", "depth":7, "children":[ 
+                                { "id": "4368", "name": "HvARRAY->", "depth":8, "children":[ 
+                                    { "id": "4369", "name": "hent_hek->", "depth":9, "children":[ 
+                                    ], "data":{ "$area": 44 } },
+                                    { "id": "4370", "name": "HeVAL->", "depth":9, "children":[ 
+                                        { "id": "4371", "name": "SV(PVGV)", "depth":10, "children":[ 
+                                            { "id": "4372", "name": "UNKNOWN(0,0x0)", "depth":11, "children":[ 
+                                                { "id": "4373", "name": "MAGIC(<)", "depth":12, "children":[ 
+                                                    { "id": "4374", "name": "mg_obj->", "depth":13, "children":[ 
+                                                        { "id": "4375", "name": "SV(PVCV)", "depth":14, "children":[ 
+                                                        ], "data":{ "$area": 144 } },
+                                                    ], "data":{ "$area": 144 } },
+                                                ], "data":{ "$area": 184 } },
+                                            ], "data":{ "$area": 184 } },
+                                        ], "data":{ "$area": 336 } },
+                                    ], "data":{ "$area": 336 } },
+                                    { "id": "4376", "name": "hent_hek->", "depth":9, "children":[ 
+                                    ], "data":{ "$area": 41 } },
+                                    { "id": "4377", "name": "HeVAL->", "depth":9, "children":[ 
+                                        { "id": "4378", "name": "SV(PVGV)", "depth":10, "children":[ 
+                                            { "id": "4379", "name": "gp_hv->", "depth":11, "children":[ 
+                                                { "id": "4380", "name": "SV(PVHV)", "depth":12, "children":[ 
+                                                    { "id": "4381", "name": "HvARRAY->", "depth":13, "children":[ 
+                                                        { "id": "4382", "name": "hent_hek->", "depth":14, "children":[ 
+                                                        ], "data":{ "$area": 44 } },
+                                                        { "id": "4383", "name": "HeVAL->", "depth":14, "children":[ 
+                                                            { "id": "4384", "name": "SV(PVGV)", "depth":15, "children":[ 
+                                                                { "id": "4385", "name": "UNKNOWN(0,0x0)", "depth":16, "children":[ 
+                                                                    { "id": "4386", "name": "MAGIC(<)", "depth":17, "children":[ 
+                                                                        { "id": "4387", "name": "mg_obj->", "depth":18, "children":[ 
+                                                                            { "id": "4388", "name": "SV(PVCV)", "depth":19, "children":[ 
+                                                                            ], "data":{ "$area": 128 } },
+                                                                        ], "data":{ "$area": 128 } },
+                                                                    ], "data":{ "$area": 168 } },
+                                                                ], "data":{ "$area": 168 } },
+                                                            ], "data":{ "$area": 320 } },
+                                                        ], "data":{ "$area": 320 } },
+                                                        { "id": "4389", "name": "hent_hek->", "depth":14, "children":[ 
+                                                        ], "data":{ "$area": 38 } },
+                                                        { "id": "4390", "name": "HeVAL->", "depth":14, "children":[ 
+                                                            { "id": "4391", "name": "SV(PVGV)", "depth":15, "children":[ 
+                                                                { "id": "4392", "name": "UNKNOWN(0,0x0)", "depth":16, "children":[ 
+                                                                    { "id": "4393", "name": "MAGIC(<)", "depth":17, "children":[ 
+                                                                        { "id": "4394", "name": "mg_obj->", "depth":18, "children":[ 
+                                                                            { "id": "4395", "name": "SV(PVCV)", "depth":19, "children":[ 
+                                                                            ], "data":{ "$area": 128 } },
+                                                                        ], "data":{ "$area": 128 } },
+                                                                    ], "data":{ "$area": 168 } },
+                                                                ], "data":{ "$area": 168 } },
+                                                            ], "data":{ "$area": 320 } },
+                                                        ], "data":{ "$area": 320 } },
+                                                        { "id": "4396", "name": "HvNAME_HEK->", "depth":14, "children":[ 
+                                                        ], "data":{ "$area": 47 } },
+                                                    ], "data":{ "$area": 905 } },
+                                                ], "data":{ "$area": 1025 } },
+                                            ], "data":{ "$area": 1025 } },
+                                        ], "data":{ "$area": 1177 } },
+                                    ], "data":{ "$area": 1177 } },
+                                    { "id": "4397", "name": "HvNAME_HEK->", "depth":9, "children":[ 
+                                    ], "data":{ "$area": 40 } },
+                                ], "data":{ "$area": 1774 } },
+                            ], "data":{ "$area": 1894 } },
+                        ], "data":{ "$area": 1894 } },
+                    ], "data":{ "$area": 2046 } },
+                ], "data":{ "$area": 2046 } },
+                { "id": "4398", "name": "hent_hek->", "depth":4, "children":[ 
+                ], "data":{ "$area": 110 } },
+                { "id": "4399", "name": "HeVAL->", "depth":4, "children":[ 
+                    { "id": "4400", "name": "SV(PVGV)", "depth":5, "children":[ 
+                        { "id": "4401", "name": "gp_sv->", "depth":6, "children":[ 
+                            { "id": "4402", "name": "SV(PV)", "depth":7, "children":[ 
+                            ], "data":{ "$area": 120 } },
+                        ], "data":{ "$area": 120 } },
+                    ], "data":{ "$area": 272 } },
+                ], "data":{ "$area": 272 } },
+                { "id": "4403", "name": "hent_hek->", "depth":4, "children":[ 
+                ], "data":{ "$area": 35 } },
+                { "id": "4404", "name": "HeVAL->", "depth":4, "children":[ 
+                    { "id": "4405", "name": "SV(PVGV)", "depth":5, "children":[ 
+                        { "id": "4406", "name": "gp_sv->", "depth":6, "children":[ 
+                            { "id": "4407", "name": "SV(PVMG)", "depth":7, "children":[ 
+                                { "id": "4408", "name": "UNKNOWN(0,0x0)", "depth":8, "children":[ 
+                                    { "id": "4409", "name": "MAGIC(0)", "depth":9, "children":[ 
+                                    ], "data":{ "$area": 41 } },
+                                ], "data":{ "$area": 41 } },
+                            ], "data":{ "$area": 129 } },
+                        ], "data":{ "$area": 129 } },
+                    ], "data":{ "$area": 281 } },
+                ], "data":{ "$area": 281 } },
+                { "id": "4410", "name": "hent_hek->", "depth":4, "children":[ 
+                ], "data":{ "$area": 40 } },
+                { "id": "4411", "name": "HeVAL->", "depth":4, "children":[ 
+                    { "id": "4412", "name": "SV(PVGV)", "depth":5, "children":[ 
+                    ], "data":{ "$area": 152 } },
+                ], "data":{ "$area": 152 } },
+                { "id": "4413", "name": "hent_hek->", "depth":4, "children":[ 
+                ], "data":{ "$area": 35 } },
+                { "id": "4414", "name": "HeVAL->", "depth":4, "children":[ 
+                    { "id": "4415", "name": "SV(PVGV)", "depth":5, "children":[ 
+                        { "id": "4416", "name": "gp_sv->", "depth":6, "children":[ 
+                            { "id": "4417", "name": "SV(PVNV)", "depth":7, "children":[ 
+                            ], "data":{ "$area": 72 } },
+                        ], "data":{ "$area": 72 } },
+                    ], "data":{ "$area": 224 } },
+                ], "data":{ "$area": 224 } },
+                { "id": "4418", "name": "hent_hek->", "depth":4, "children":[ 
+                ], "data":{ "$area": 43 } },
+                { "id": "4419", "name": "HeVAL->", "depth":4, "children":[ 
+                    { "id": "4420", "name": "SV(PVGV)", "depth":5, "children":[ 
+                        { "id": "4421", "name": "gp_hv->", "depth":6, "children":[ 
+                            { "id": "4422", "name": "SV(PVHV)", "depth":7, "children":[ 
+                                { "id": "4423", "name": "HvARRAY->", "depth":8, "children":[ 
+                                ], "data":{ "$area": 64 } },
+                            ], "data":{ "$area": 184 } },
+                        ], "data":{ "$area": 184 } },
+                    ], "data":{ "$area": 336 } },
+                ], "data":{ "$area": 336 } },
+                { "id": "4424", "name": "hent_hek->", "depth":4, "children":[ 
+                ], "data":{ "$area": 119 } },
+                { "id": "4425", "name": "HeVAL->", "depth":4, "children":[ 
+                    { "id": "4426", "name": "SV(PVGV)", "depth":5, "children":[ 
+                        { "id": "4427", "name": "gp_sv->", "depth":6, "children":[ 
+                            { "id": "4428", "name": "SV(PV)", "depth":7, "children":[ 
+                            ], "data":{ "$area": 136 } },
+                        ], "data":{ "$area": 136 } },
+                    ], "data":{ "$area": 288 } },
+                ], "data":{ "$area": 288 } },
+                { "id": "4429", "name": "HvNAME_HEK->", "depth":4, "children":[ 
+                ], "data":{ "$area": 38 } },
+            ], "data":{ "$area": 560058 } },
+        ], "data":{ "$area": 561138 } },
+    ], "data":{ "$area": 561138 } },
+    { "id": "4430", "name": "PL_rs->", "depth":1, "children":[ 
+        { "id": "4431", "name": "SV(PV)", "depth":2, "children":[ 
+        ], "data":{ "$area": 56 } },
+    ], "data":{ "$area": 56 } },
+    { "id": "4432", "name": "PL_fdpid->", "depth":1, "children":[ 
+        { "id": "4433", "name": "SV(PVAV)", "depth":2, "children":[ 
+        ], "data":{ "$area": 64 } },
+    ], "data":{ "$area": 64 } },
+    { "id": "4434", "name": "PL_modglobal->", "depth":1, "children":[ 
+        { "id": "4435", "name": "SV(PVHV)", "depth":2, "children":[ 
+        ], "data":{ "$area": 120 } },
+    ], "data":{ "$area": 120 } },
+    { "id": "4436", "name": "PL_errors->", "depth":1, "children":[ 
+        { "id": "4437", "name": "SV(PV)", "depth":2, "children":[ 
+        ], "data":{ "$area": 56 } },
+    ], "data":{ "$area": 56 } },
+    { "id": "4438", "name": "PL_stashcache->", "depth":1, "children":[ 
+        { "id": "4439", "name": "SV(PVHV)", "depth":2, "children":[ 
+            { "id": "4440", "name": "HvARRAY->", "depth":3, "children":[ 
+                { "id": "4441", "name": "HeVAL->", "depth":4, "children":[ 
+                    { "id": "4442", "name": "SV(IV)", "depth":5, "children":[ 
+                    ], "data":{ "$area": 24 } },
+                ], "data":{ "$area": 24 } },
+                { "id": "4443", "name": "HeVAL->", "depth":4, "children":[ 
+                    { "id": "4444", "name": "SV(IV)", "depth":5, "children":[ 
+                    ], "data":{ "$area": 24 } },
+                ], "data":{ "$area": 24 } },
+                { "id": "4445", "name": "HeVAL->", "depth":4, "children":[ 
+                    { "id": "4446", "name": "SV(IV)", "depth":5, "children":[ 
+                    ], "data":{ "$area": 24 } },
+                ], "data":{ "$area": 24 } },
+                { "id": "4447", "name": "HeVAL->", "depth":4, "children":[ 
+                    { "id": "4448", "name": "SV(IV)", "depth":5, "children":[ 
+                    ], "data":{ "$area": 24 } },
+                ], "data":{ "$area": 24 } },
+                { "id": "4449", "name": "HeVAL->", "depth":4, "children":[ 
+                    { "id": "4450", "name": "SV(IV)", "depth":5, "children":[ 
+                    ], "data":{ "$area": 24 } },
+                ], "data":{ "$area": 24 } },
+                { "id": "4451", "name": "HeVAL->", "depth":4, "children":[ 
+                    { "id": "4452", "name": "SV(IV)", "depth":5, "children":[ 
+                    ], "data":{ "$area": 24 } },
+                ], "data":{ "$area": 24 } },
+                { "id": "4453", "name": "HeVAL->", "depth":4, "children":[ 
+                    { "id": "4454", "name": "SV(IV)", "depth":5, "children":[ 
+                    ], "data":{ "$area": 24 } },
+                ], "data":{ "$area": 24 } },
+                { "id": "4455", "name": "HeVAL->", "depth":4, "children":[ 
+                    { "id": "4456", "name": "SV(IV)", "depth":5, "children":[ 
+                    ], "data":{ "$area": 24 } },
+                ], "data":{ "$area": 24 } },
+                { "id": "4457", "name": "HeVAL->", "depth":4, "children":[ 
+                    { "id": "4458", "name": "SV(IV)", "depth":5, "children":[ 
+                    ], "data":{ "$area": 24 } },
+                ], "data":{ "$area": 24 } },
+            ], "data":{ "$area": 432 } },
+        ], "data":{ "$area": 616 } },
+    ], "data":{ "$area": 616 } },
+    { "id": "4459", "name": "PL_patchlevel->", "depth":1, "children":[ 
+        { "id": "4460", "name": "SV(PV)", "depth":2, "children":[ 
+            { "id": "4461", "name": "RV->", "depth":3, "children":[ 
+                { "id": "4462", "name": "SV(PVHV)", "depth":4, "children":[ 
+                    { "id": "4463", "name": "HvARRAY->", "depth":5, "children":[ 
+                        { "id": "4464", "name": "HeVAL->", "depth":6, "children":[ 
+                            { "id": "4465", "name": "SV(PV)", "depth":7, "children":[ 
+                            ], "data":{ "$area": 56 } },
+                        ], "data":{ "$area": 56 } },
+                        { "id": "4466", "name": "HeVAL->", "depth":6, "children":[ 
+                            { "id": "4467", "name": "SV(IV)", "depth":7, "children":[ 
+                            ], "data":{ "$area": 24 } },
+                        ], "data":{ "$area": 24 } },
+                        { "id": "4468", "name": "HeVAL->", "depth":6, "children":[ 
+                            { "id": "4469", "name": "SV(RV)", "depth":7, "children":[ 
+                                { "id": "4470", "name": "RV->", "depth":8, "children":[ 
+                                    { "id": "4471", "name": "SV(PVAV)", "depth":9, "children":[ 
+                                        { "id": "4472", "name": "AVelem->", "depth":10, "children":[ 
+                                            { "id": "4473", "name": "SV(IV)", "depth":11, "children":[ 
+                                            ], "data":{ "$area": 24 } },
+                                        ], "data":{ "$area": 24 } },
+                                        { "id": "4474", "name": "AVelem->", "depth":10, "children":[ 
+                                            { "id": "4475", "name": "SV(IV)", "depth":11, "children":[ 
+                                            ], "data":{ "$area": 24 } },
+                                        ], "data":{ "$area": 24 } },
+                                        { "id": "4476", "name": "AVelem->", "depth":10, "children":[ 
+                                            { "id": "4477", "name": "SV(IV)", "depth":11, "children":[ 
+                                            ], "data":{ "$area": 24 } },
+                                        ], "data":{ "$area": 24 } },
+                                    ], "data":{ "$area": 168 } },
+                                ], "data":{ "$area": 168 } },
+                            ], "data":{ "$area": 192 } },
+                        ], "data":{ "$area": 192 } },
+                    ], "data":{ "$area": 344 } },
+                ], "data":{ "$area": 464 } },
+            ], "data":{ "$area": 464 } },
+        ], "data":{ "$area": 504 } },
+    ], "data":{ "$area": 504 } },
+    { "id": "4478", "name": "PL_apiversion->", "depth":1, "children":[ 
+        { "id": "4479", "name": "SV(PV)", "depth":2, "children":[ 
+        ], "data":{ "$area": 56 } },
+    ], "data":{ "$area": 56 } },
+    { "id": "4480", "name": "PL_registered_mros->", "depth":1, "children":[ 
+        { "id": "4481", "name": "SV(PVHV)", "depth":2, "children":[ 
+            { "id": "4482", "name": "HvARRAY->", "depth":3, "children":[ 
+                { "id": "4483", "name": "hent_hek->", "depth":4, "children":[ 
+                ], "data":{ "$area": 37 } },
+                { "id": "4484", "name": "HeVAL->", "depth":4, "children":[ 
+                    { "id": "4485", "name": "SV(IV)", "depth":5, "children":[ 
+                    ], "data":{ "$area": 24 } },
+                ], "data":{ "$area": 24 } },
+            ], "data":{ "$area": 85 } },
+        ], "data":{ "$area": 149 } },
+    ], "data":{ "$area": 149 } },
+    { "id": "4486", "name": "PL_strtab->", "depth":1, "children":[ 
+        { "id": "4487", "name": "SV(PVHV)", "depth":2, "children":[ 
+            { "id": "4488", "name": "HvARRAY->", "depth":3, "children":[ 
+                { "id": "4489", "name": "hent_hek->", "depth":4, "children":[ 
+                ], "data":{ "$area": 14 } },
+                { "id": "4490", "name": "hent_hek->", "depth":4, "children":[ 
+                ], "data":{ "$area": 27 } },
+                { "id": "4491", "name": "hent_hek->", "depth":4, "children":[ 
+                ], "data":{ "$area": 31 } },
+                { "id": "4492", "name": "hent_hek->", "depth":4, "children":[ 
+                ], "data":{ "$area": 24 } },
+                { "id": "4493", "name": "hent_hek->", "depth":4, "children":[ 
+                ], "data":{ "$area": 14 } },
+                { "id": "4494", "name": "hent_hek->", "depth":4, "children":[ 
+                ], "data":{ "$area": 14 } },
+                { "id": "4495", "name": "hent_hek->", "depth":4, "children":[ 
+                ], "data":{ "$area": 14 } },
+                { "id": "4496", "name": "hent_hek->", "depth":4, "children":[ 
+                ], "data":{ "$area": 11 } },
+                { "id": "4497", "name": "hent_hek->", "depth":4, "children":[ 
+                ], "data":{ "$area": 15 } },
+                { "id": "4498", "name": "hent_hek->", "depth":4, "children":[ 
+                ], "data":{ "$area": 13 } },
+                { "id": "4499", "name": "hent_hek->", "depth":4, "children":[ 
+                ], "data":{ "$area": 22 } },
+                { "id": "4500", "name": "hent_hek->", "depth":4, "children":[ 
+                ], "data":{ "$area": 31 } },
+                { "id": "4501", "name": "hent_hek->", "depth":4, "children":[ 
+                ], "data":{ "$area": 20 } },
+                { "id": "4502", "name": "hent_hek->", "depth":4, "children":[ 
+                ], "data":{ "$area": 16 } },
+                { "id": "4503", "name": "hent_hek->", "depth":4, "children":[ 
+                ], "data":{ "$area": 14 } },
+                { "id": "4504", "name": "hent_hek->", "depth":4, "children":[ 
+                ], "data":{ "$area": 30 } },
+                { "id": "4505", "name": "hent_hek->", "depth":4, "children":[ 
+                ], "data":{ "$area": 16 } },
+            ], "data":{ "$area": 14654 } },
+        ], "data":{ "$area": 22902 } },
+    ], "data":{ "$area": 22902 } },
+], "data":{ "$area": 585661 } },
+ ];