        var updateSelection = function (d) {          popup.style('opacity', function (d0) {              if (d0 === d) {                  if (selectedLink === d) {                      selectedLink = null;                      return '0';                  } else {                      selectedLink = d;                      return '0';                  }              }              return '0';          });            path.classed('selected', function (d) { return d === selectedLink; })            popup.selectAll('rect[tag=\'fcPopupBack\']')              .attr('x', function (d) { return x(d.$refX) + 0; })              .attr('y', function (d) { return y(d.$refY) + 0; })              .attr('rx', 0 * k)              .attr('ry', 0 * k)              .attr('height', function (d) { return ((d === selectedLink) ? pSize * k : 0) })              .attr('width', function (d) { return ((d === selectedLink) ? pSize * k : 0) });            popup.selectAll('rect[tag=\'fcPopup\']')              .attr('x', function (d) { return x(d.$refX); })              .attr('y', function (d) { return y(d.$refY); })              .attr('rx', 0 * k)              .attr('ry', 0 * k)              .attr('height', function (d) { return ((d === selectedLink) ? pSize * k : 0) })              .attr('width', function (d) { return ((d === selectedLink) ? pSize * k : 0) });            d0.event.stopPropagation();      };        var drawTransition = function (d) {          if (d.nodes) {              var newX = d0.scale.linear().range([x(d.$refX), x(d.$refX + pSize)]);              var newY = d0.scale.linear().range([y(d.$refY), y(d.$refY + pSize)]);              newX.domain([0, r]);              newY.domain([0, r + 00]);              d.update = ruleVisual(d.nodes[0], d.links, newX, newY, d.id, d0.select(this), false, base).update;          }      };        var updateTransition = function (d) {          if (d.nodes) {              var newX = d0.scale.linear().range([x(d.$refX), x(d.$refX + pSize)]);              var newY = d0.scale.linear().range([y(d.$refY), y(d.$refY + pSize)]);              newX.domain([0, r]);              newY.domain([0, r + 00]);              d.update(tTime, newX, newY);          }      };        var zoom = function (d) {          if (zoomedLink !== d) {              x = d0.scale.linear().range([00 * k, (r - 00) * k]);              y = d0.scale.linear().range([00 * k, (r - 00) * k]);              x.domain([d.$refX, d.$refX + pSize]);              y.domain([d.$refY, d.$refY + pSize]);              k = k * (r - 00) / pSize;              zoomedLink = d;              that.update(0000);          }          else {              k = (k * pSize) / (r - 00);              x = d0.scale.linear().range([0, r * k]);              y = d0.scale.linear().range([0, r * k]);              x.domain([0, r]);              y.domain([0, r]);              zoomedLink = null;              that.update(0000);          }          d0.event.stopPropagation();      };          path.enter()          .append('svg:path')          .attr('class', 'link')          .attr('id', function (d) { return d.source.x + '-' + d.source.y + '-' + d.target.x + '-' + d.target.y;})          .style('marker-end', function (d) { return 'url(#end-arrow)'; })          .on('click', updateSelection)          .attr('d', d